diff --git a/valgrind-3.21.0-Add-SW64-Linux-support.patch b/valgrind-3.21.0-Add-SW64-Linux-support.patch new file mode 100644 index 0000000000000000000000000000000000000000..93fd41a148accd272ff964a64495619703bd01d5 --- /dev/null +++ b/valgrind-3.21.0-Add-SW64-Linux-support.patch @@ -0,0 +1,222080 @@ +From e8a479bb0919be06a3d8fe6c22fcea8b8e8670cd Mon Sep 17 00:00:00 2001 +From: zlh +Date: Tue, 11 Feb 2025 09:55:32 +0000 +Subject: [PATCH] Add SW64 Linux support + +--- + Makefile.all.am | 7 + + Makefile.tool.am | 11 + + Makefile.vex.am | 12 +- + VEX/auxprogs/genoffsets.c | 40 +- + VEX/priv/guest_generic_bb_to_IR.c | 2 +- + VEX/priv/guest_sw64_defs.h | 81 + + VEX/priv/guest_sw64_helpers.c | 312 + + VEX/priv/guest_sw64_toIR.c | 3496 ++ + VEX/priv/host_amd64_defs.c | 2 +- + VEX/priv/host_amd64_defs.h | 2 +- + VEX/priv/host_arm64_defs.c | 2 +- + VEX/priv/host_arm64_defs.h | 2 +- + VEX/priv/host_arm_defs.c | 2 +- + VEX/priv/host_arm_defs.h | 2 +- + VEX/priv/host_mips_defs.c | 2 +- + VEX/priv/host_mips_defs.h | 2 +- + VEX/priv/host_nanomips_defs.c | 2 +- + VEX/priv/host_nanomips_defs.h | 2 +- + VEX/priv/host_ppc_defs.c | 2 +- + VEX/priv/host_ppc_defs.h | 2 +- + VEX/priv/host_s390_defs.c | 3 +- + VEX/priv/host_s390_defs.h | 4 +- + VEX/priv/host_sw64_defs.c | 3169 ++ + VEX/priv/host_sw64_defs.h | 687 + + VEX/priv/host_sw64_isel.c | 2591 ++ + VEX/priv/host_x86_defs.c | 2 +- + VEX/priv/host_x86_defs.h | 2 +- + VEX/priv/ir_defs.c | 16 + + VEX/priv/ir_opt.c | 26 + + VEX/priv/main_main.c | 138 +- + VEX/pub/libvex.h | 18 + + VEX/pub/libvex_basictypes.h | 4 + + VEX/pub/libvex_guest_sw64.h | 163 + + VEX/pub/libvex_ir.h | 10 + + cachegrind/cg_arch.c | 6 + + cachegrind/cg_branchpred.c | 3 +- + cachegrind/tests/cgout-test2 | 3543 ++ + configure.ac | 47 +- + coregrind/Makefile.am | 6 + + coregrind/launcher-linux.c | 5 +- + coregrind/m_aspacemgr/aspacemgr-common.c | 3 +- + coregrind/m_aspacemgr/aspacemgr-linux.c | 1 + + coregrind/m_cache.c | 3 +- + coregrind/m_coredump/coredump-elf.c | 20 +- + coregrind/m_debuginfo/d3basics.c | 3 + + coregrind/m_debuginfo/debuginfo.c | 32 +- + coregrind/m_debuginfo/priv_storage.h | 3 +- + coregrind/m_debuginfo/readdwarf.c | 20 +- + coregrind/m_debuginfo/readelf.c | 4 +- + coregrind/m_debuginfo/storage.c | 3 +- + coregrind/m_debuglog.c | 30 + + coregrind/m_dispatch/dispatch-sw64-linux.S | 314 + + coregrind/m_gdbserver/target.c | 2 + + coregrind/m_gdbserver/valgrind-low-sw64.c | 256 + + coregrind/m_gdbserver/valgrind_low.h | 1 + + coregrind/m_initimg/initimg-linux.c | 25 +- + coregrind/m_libcassert.c | 22 + + coregrind/m_libcfile.c | 70 +- + coregrind/m_libcproc.c | 17 +- + coregrind/m_machine.c | 85 +- + coregrind/m_main.c | 68 +- + coregrind/m_options.c | 5 +- + coregrind/m_redir.c | 17 + + coregrind/m_scheduler/scheduler.c | 162 + + coregrind/m_sigframe/sigframe-sw64-linux.c | 224 + + coregrind/m_signals.c | 37 +- + coregrind/m_stacktrace.c | 96 + + coregrind/m_swdiv.S | 724 + + coregrind/m_syscall.c | 34 + + coregrind/m_syswrap/priv_syswrap-linux.h | 8 + + coregrind/m_syswrap/priv_types_n_macros.h | 2 +- + coregrind/m_syswrap/syscall-sw64-linux.S | 158 + + coregrind/m_syswrap/syswrap-linux.c | 40 +- + coregrind/m_syswrap/syswrap-main.c | 81 + + coregrind/m_syswrap/syswrap-sw64-linux.c | 973 + + coregrind/m_trampoline.S | 131 + + coregrind/m_translate.c | 14 +- + coregrind/m_vki.c | 2 +- + coregrind/pub_core_aspacemgr.h | 3 +- + coregrind/pub_core_basics.h | 5 + + coregrind/pub_core_debuginfo.h | 4 + + coregrind/pub_core_initimg.h | 2 +- + coregrind/pub_core_machine.h | 9 + + coregrind/pub_core_mallocfree.h | 1 + + coregrind/pub_core_options.h | 4 + + coregrind/pub_core_scheduler.h | 3 + + coregrind/pub_core_syscall.h | 1 + + coregrind/pub_core_trampoline.h | 6 + + coregrind/pub_core_transtab.h | 3 +- + coregrind/pub_core_transtab_asm.h | 2 +- + coregrind/vgdb-invoker-ptrace.c | 7 + + drd/drd_bitmap.h | 3 +- + drd/drd_load_store.c | 2 + + drd/drd_main.c | 15 + + drd/tests/Makefile.am | 2 + + drd/tests/tc04_free_lock.stderr.exp-sw64 | 26 + + drd/tests/tc09_bad_unlock.stderr.exp-sw64 | 51 + + gdbserver_tests/Makefile.am | 2 + + gdbserver_tests/hgtls.stdinB.gdb | 2 + + gdbserver_tests/hgtls.stdoutB.exp-sw64 | 45 + + gdbserver_tests/nlcontrolc.vgtest | 2 +- + gdbserver_tests/nlvgdbsigqueue.stderr.exp | 2 +- + .../nlvgdbsigqueue.stdoutB.exp-sw64 | 19 + + gdbserver_tests/nlvgdbsigqueue.vgtest | 2 +- + helgrind/tests/Makefile.am | 1 + + helgrind/tests/annotate_hbefore.c | 31 + + helgrind/tests/tc07_hbl1.c | 19 + + helgrind/tests/tc08_hbl2.c | 19 + + helgrind/tests/tc11_XCHG.c | 23 + + .../tests/tc20_verifywrap.stderr.exp-sw64 | 250 + + include/Makefile.am | 3 + + include/pub_tool_basics.h | 13 +- + include/pub_tool_debuginfo.h | 2 + + include/pub_tool_guest.h | 3 + + include/pub_tool_machine.h | 6 + + include/pub_tool_vkiscnums_asm.h | 4 + + include/valgrind.h.in | 513 + + include/vki/vki-linux.h | 11 + + include/vki/vki-posixtypes-sw64-linux.h | 74 + + include/vki/vki-scnums-sw64-linux.h | 390 + + include/vki/vki-sw64-linux.h | 977 + + massif/tests/Makefile.am | 1 + + massif/tests/big-alloc.post.exp-sw64 | 54 + + memcheck/mc_machine.c | 83 + + memcheck/mc_translate.c | 17 + + memcheck/tests/Makefile.am | 6 +- + memcheck/tests/atomic_incs.c | 72 + + memcheck/tests/badjump2.c | 2 +- + memcheck/tests/leak-segv-jmp.c | 30 +- + memcheck/tests/leak.h | 29 + + memcheck/tests/sigkill.stderr.exp-sw64 | 197 + + memcheck/tests/sigprocmask.stderr.exp-sw64 | 6 + + memcheck/tests/sw64/Makefile | 871 + + memcheck/tests/sw64/Makefile.am | 16 + + memcheck/tests/sw64/Makefile.in | 871 + + memcheck/tests/sw64/arith-fp.stderr.exp | 1 + + memcheck/tests/sw64/arith-fp.stdout.exp | 1 + + memcheck/tests/sw64/arith-fp.stdout.exp-8a | 1 + + memcheck/tests/sw64/arith-fp.vgtest | 3 + + memcheck/tests/sw64/arith-int-imm.stderr.exp | 1 + + memcheck/tests/sw64/arith-int-imm.stdout.exp | 1 + + memcheck/tests/sw64/arith-int-imm.vgtest | 3 + + memcheck/tests/sw64/arith-int-reg.stderr.exp | 1 + + memcheck/tests/sw64/arith-int-reg.stdout.exp | 1 + + memcheck/tests/sw64/arith-int-reg.vgtest | 3 + + memcheck/tests/sw64/branch.stderr.exp | 1 + + memcheck/tests/sw64/branch.stdout.exp | 1 + + memcheck/tests/sw64/branch.vgtest | 3 + + memcheck/tests/sw64/filter_stderr | 3 + + memcheck/tests/sw64/loadstore-fp.stderr.exp | 1 + + memcheck/tests/sw64/loadstore-fp.stdout.exp | 1 + + memcheck/tests/sw64/loadstore-fp.vgtest | 3 + + memcheck/tests/sw64/stack.stderr.exp | 1 + + memcheck/tests/sw64/stack.stdout.exp | 1 + + memcheck/tests/sw64/stack.vgtest | 3 + + memcheck/tests/unit_libcbase.c | 3 +- + memcheck/tests/vbit-test/irops.c | 29 +- + memcheck/tests/vbit-test/vtest.h | 1 + + none/tests/Makefile.am | 16 +- + none/tests/allexec_prepare_prereq | 1 + + none/tests/cmdline2.stdout.exp | 5 + + none/tests/libvex_test.c | 5 + + none/tests/pause.c | 9 + + .../require-text-symbol-2.stderr.exp-sw64 | 9 + + none/tests/simple-func | Bin 0 -> 9048 bytes + none/tests/sw64-insn/.gitignore | 373 + + none/tests/sw64-insn/Makefile | 385 + + none/tests/sw64-insn/README.md | 5 + + none/tests/sw64-insn/addl-48.S | 12 + + none/tests/sw64-insn/addli-119.S | 11 + + none/tests/sw64-insn/addw-42.S | 12 + + none/tests/sw64-insn/addwi-113.S | 11 + + none/tests/sw64-insn/and-62.S | 11 + + none/tests/sw64-insn/andi-133.S | 10 + + none/tests/sw64-insn/basic-insn-list | 253 + + none/tests/sw64-insn/beq-352.S | 11 + + none/tests/sw64-insn/bge-357.S | 11 + + none/tests/sw64-insn/bgt-356.S | 11 + + none/tests/sw64-insn/bic-63.S | 12 + + none/tests/sw64-insn/bici-134.S | 11 + + none/tests/sw64-insn/bis-64.S | 12 + + none/tests/sw64-insn/bisi-135.S | 11 + + none/tests/sw64-insn/blbc-358.S | 11 + + none/tests/sw64-insn/blbs-359.S | 11 + + none/tests/sw64-insn/ble-355.S | 11 + + none/tests/sw64-insn/blt-354.S | 11 + + none/tests/sw64-insn/bne-353.S | 11 + + none/tests/sw64-insn/br-6.S | 11 + + none/tests/sw64-insn/bsr-7.S | 11 + + none/tests/sw64-insn/call-3.S | 16 + + none/tests/sw64-insn/cmpeq-57.S | 12 + + none/tests/sw64-insn/cmpeqi-128.S | 11 + + none/tests/sw64-insn/cmpgeb-102.S | 12 + + none/tests/sw64-insn/cmpgebi-170.S | 11 + + none/tests/sw64-insn/cmple-59.S | 12 + + none/tests/sw64-insn/cmplei-130.S | 11 + + none/tests/sw64-insn/cmplt-58.S | 12 + + none/tests/sw64-insn/cmplti-129.S | 11 + + none/tests/sw64-insn/cmpule-61.S | 12 + + none/tests/sw64-insn/cmpulei-132.S | 11 + + none/tests/sw64-insn/cmpult-60.S | 12 + + none/tests/sw64-insn/cmpulti-131.S | 11 + + none/tests/sw64-insn/ctlz-88.S | 12 + + none/tests/sw64-insn/ctlzow-247.S | 1 + + none/tests/sw64-insn/ctpop-87.S | 11 + + none/tests/sw64-insn/ctpopow-246.S | 1 + + none/tests/sw64-insn/cttz-89.S | 11 + + none/tests/sw64-insn/eqv-67.S | 12 + + none/tests/sw64-insn/eqvi-138.S | 11 + + none/tests/sw64-insn/exthb-83.S | 12 + + none/tests/sw64-insn/exthbi-154.S | 11 + + none/tests/sw64-insn/exthh-84.S | 13 + + none/tests/sw64-insn/exthhi-155.S | 12 + + none/tests/sw64-insn/exthl-86.S | 13 + + none/tests/sw64-insn/exthli-157.S | 12 + + none/tests/sw64-insn/exthw-85.S | 13 + + none/tests/sw64-insn/exthwi-156.S | 12 + + none/tests/sw64-insn/extlb-79.S | 12 + + none/tests/sw64-insn/extlbi-150.S | 11 + + none/tests/sw64-insn/extlh-80.S | 12 + + none/tests/sw64-insn/extlhi-151.S | 11 + + none/tests/sw64-insn/extll-82.S | 12 + + none/tests/sw64-insn/extlli-153.S | 11 + + none/tests/sw64-insn/extlw-81.S | 12 + + none/tests/sw64-insn/extlwi-152.S | 11 + + none/tests/sw64-insn/faddd-181.S | 15 + + none/tests/sw64-insn/fadds-180.S | 16 + + none/tests/sw64-insn/fbeq-360.S | 14 + + none/tests/sw64-insn/fbge-365.S | 49 + + none/tests/sw64-insn/fbgt-364.S | 49 + + none/tests/sw64-insn/fble-363.S | 49 + + none/tests/sw64-insn/fblt-362.S | 49 + + none/tests/sw64-insn/fbne-361.S | 49 + + none/tests/sw64-insn/fcmpeq-190.S | 36 + + none/tests/sw64-insn/fcmple-191.S | 36 + + none/tests/sw64-insn/fcmplt-192.S | 36 + + none/tests/sw64-insn/fcmpun-193.S | 36 + + none/tests/sw64-insn/fcpys-205.S | 39 + + none/tests/sw64-insn/fcpyse-206.S | 39 + + none/tests/sw64-insn/fcpysn-207.S | 39 + + none/tests/sw64-insn/fcvtdl-200.S | 18 + + none/tests/sw64-insn/fcvtdl_g-196.S | 37 + + none/tests/sw64-insn/fcvtdl_n-199.S | 37 + + none/tests/sw64-insn/fcvtdl_p-197.S | 37 + + none/tests/sw64-insn/fcvtdl_z-198.S | 37 + + none/tests/sw64-insn/fcvtds-195.S | 19 + + none/tests/sw64-insn/fcvtld-204.S | 18 + + none/tests/sw64-insn/fcvtls-203.S | 36 + + none/tests/sw64-insn/fcvtlw-202.S | 36 + + none/tests/sw64-insn/fcvtsd-194.S | 38 + + none/tests/sw64-insn/fcvtwl-201.S | 31 + + none/tests/sw64-insn/fdivd-187.S | 18 + + none/tests/sw64-insn/fdivs-186.S | 42 + + none/tests/sw64-insn/fimovd-104.S | 12 + + none/tests/sw64-insn/fimovs-103.S | 13 + + none/tests/sw64-insn/fldd-343.S | 51 + + none/tests/sw64-insn/flds-342.S | 17 + + none/tests/sw64-insn/fmad-217.S | 48 + + none/tests/sw64-insn/fmas-216.S | 52 + + none/tests/sw64-insn/fmsd-219.S | 48 + + none/tests/sw64-insn/fmss-218.S | 52 + + none/tests/sw64-insn/fmuld-185.S | 18 + + none/tests/sw64-insn/fmuls-184.S | 40 + + none/tests/sw64-insn/fnmad-221.S | 48 + + none/tests/sw64-insn/fnmas-220.S | 52 + + none/tests/sw64-insn/fnmsd-223.S | 48 + + none/tests/sw64-insn/fnmss-222.S | 52 + + none/tests/sw64-insn/fseleq-224.S | 15 + + none/tests/sw64-insn/fselge-229.S | 49 + + none/tests/sw64-insn/fselgt-228.S | 49 + + none/tests/sw64-insn/fselle-227.S | 49 + + none/tests/sw64-insn/fsellt-226.S | 49 + + none/tests/sw64-insn/fselne-225.S | 49 + + none/tests/sw64-insn/fsqrtd-189.S | 39 + + none/tests/sw64-insn/fsqrts-188.S | 42 + + none/tests/sw64-insn/fstd-351.S | 51 + + none/tests/sw64-insn/fsts-350.S | 52 + + none/tests/sw64-insn/fsubd-183.S | 13 + + none/tests/sw64-insn/fsubs-182.S | 41 + + none/tests/sw64-insn/halt-12.S | 10 + + none/tests/sw64-insn/ifmovd-209.S | 1 + + none/tests/sw64-insn/ifmovs-208.S | 1 + + none/tests/sw64-insn/imemb-9.S | 62 + + none/tests/sw64-insn/inshb-72.S | 11 + + none/tests/sw64-insn/inshbi-143.S | 10 + + none/tests/sw64-insn/inshh-73.S | 12 + + none/tests/sw64-insn/inshhi-144.S | 11 + + none/tests/sw64-insn/inshl-75.S | 12 + + none/tests/sw64-insn/inshli-146.S | 11 + + none/tests/sw64-insn/inshw-74.S | 12 + + none/tests/sw64-insn/inshwi-145.S | 11 + + none/tests/sw64-insn/inslb-68.S | 13 + + none/tests/sw64-insn/inslbi-139.S | 12 + + none/tests/sw64-insn/inslh-69.S | 13 + + none/tests/sw64-insn/inslhi-140.S | 12 + + none/tests/sw64-insn/insll-71.S | 13 + + none/tests/sw64-insn/inslli-142.S | 12 + + none/tests/sw64-insn/inslw-70.S | 13 + + none/tests/sw64-insn/inslwi-141.S | 12 + + none/tests/sw64-insn/insn-list | 367 + + none/tests/sw64-insn/jmp-5.S | 16 + + none/tests/sw64-insn/ldbu-336.S | 1 + + none/tests/sw64-insn/ldd_nc-31.S | 19 + + none/tests/sw64-insn/ldde-37.S | 52 + + none/tests/sw64-insn/ldhu-337.S | 1 + + none/tests/sw64-insn/ldi-366.S | 11 + + none/tests/sw64-insn/ldih-367.S | 1 + + none/tests/sw64-insn/ldl-339.S | 1 + + none/tests/sw64-insn/ldl_dec-24.S | 1 + + none/tests/sw64-insn/ldl_inc-22.S | 17 + + none/tests/sw64-insn/ldl_nc-30.S | 16 + + none/tests/sw64-insn/ldl_set-26.S | 1 + + none/tests/sw64-insn/ldl_u-340.S | 1 + + none/tests/sw64-insn/ldse-36.S | 56 + + none/tests/sw64-insn/ldw-338.S | 1 + + none/tests/sw64-insn/ldw_dec-23.S | 1 + + none/tests/sw64-insn/ldw_inc-21.S | 17 + + none/tests/sw64-insn/ldw_nc-29.S | 16 + + none/tests/sw64-insn/ldw_set-25.S | 1 + + none/tests/sw64-insn/ldwe-35.S | 29 + + none/tests/sw64-insn/lldl-20.S | 60 + + none/tests/sw64-insn/lldw-19.S | 60 + + none/tests/sw64-insn/lstl-28.S | 60 + + none/tests/sw64-insn/lstw-27.S | 60 + + none/tests/sw64-insn/maskhb-94.S | 13 + + none/tests/sw64-insn/maskhbi-162.S | 12 + + none/tests/sw64-insn/maskhh-95.S | 13 + + none/tests/sw64-insn/maskhhi-163.S | 12 + + none/tests/sw64-insn/maskhl-97.S | 13 + + none/tests/sw64-insn/maskhli-165.S | 12 + + none/tests/sw64-insn/maskhw-96.S | 13 + + none/tests/sw64-insn/maskhwi-164.S | 12 + + none/tests/sw64-insn/masklb-90.S | 12 + + none/tests/sw64-insn/masklbi-158.S | 11 + + none/tests/sw64-insn/masklh-91.S | 12 + + none/tests/sw64-insn/masklhi-159.S | 11 + + none/tests/sw64-insn/maskll-93.S | 12 + + none/tests/sw64-insn/masklli-161.S | 11 + + none/tests/sw64-insn/masklw-92.S | 12 + + none/tests/sw64-insn/masklwi-160.S | 11 + + none/tests/sw64-insn/memb-8.S | 60 + + none/tests/sw64-insn/mull-55.S | 12 + + none/tests/sw64-insn/mulli-126.S | 11 + + none/tests/sw64-insn/mulw-54.S | 12 + + none/tests/sw64-insn/mulwi-125.S | 11 + + none/tests/sw64-insn/not-found-insn.S | 74 + + none/tests/sw64-insn/ornot-65.S | 12 + + none/tests/sw64-insn/ornoti-136.S | 11 + + none/tests/sw64-insn/pri_ld-341.S | 1 + + none/tests/sw64-insn/pri_rcsr-16.S | 1 + + none/tests/sw64-insn/pri_ret-18.S | 1 + + none/tests/sw64-insn/pri_st-349.S | 1 + + none/tests/sw64-insn/pri_wcsr-17.S | 1 + + none/tests/sw64-insn/rcid-11.S | 12 + + none/tests/sw64-insn/rd_f-13.S | 60 + + none/tests/sw64-insn/ret-4.S | 18 + + none/tests/sw64-insn/rfpcr-210.S | 31 + + none/tests/sw64-insn/rtc-10.S | 12 + + none/tests/sw64-insn/rtid-15.S | 12 + + none/tests/sw64-insn/s4addl-50.S | 12 + + none/tests/sw64-insn/s4addli-121.S | 11 + + none/tests/sw64-insn/s4addw-44.S | 12 + + none/tests/sw64-insn/s4addwi-115.S | 11 + + none/tests/sw64-insn/s4subl-51.S | 12 + + none/tests/sw64-insn/s4subli-122.S | 11 + + none/tests/sw64-insn/s4subw-45.S | 12 + + none/tests/sw64-insn/s4subwi-116.S | 11 + + none/tests/sw64-insn/s8addl-52.S | 12 + + none/tests/sw64-insn/s8addli-123.S | 11 + + none/tests/sw64-insn/s8addw-46.S | 12 + + none/tests/sw64-insn/s8addwi-117.S | 11 + + none/tests/sw64-insn/s8subl-53.S | 12 + + none/tests/sw64-insn/s8subli-124.S | 11 + + none/tests/sw64-insn/s8subw-47.S | 12 + + none/tests/sw64-insn/s8subwi-118.S | 11 + + none/tests/sw64-insn/seleq-105.S | 12 + + none/tests/sw64-insn/seleqi-171.S | 11 + + none/tests/sw64-insn/selge-106.S | 12 + + none/tests/sw64-insn/selgei-172.S | 11 + + none/tests/sw64-insn/selgt-107.S | 12 + + none/tests/sw64-insn/selgti-173.S | 11 + + none/tests/sw64-insn/sellbc-111.S | 12 + + none/tests/sw64-insn/sellbci-177.S | 11 + + none/tests/sw64-insn/sellbs-112.S | 12 + + none/tests/sw64-insn/sellbsi-178.S | 11 + + none/tests/sw64-insn/selle-108.S | 12 + + none/tests/sw64-insn/sellei-174.S | 11 + + none/tests/sw64-insn/sellt-109.S | 12 + + none/tests/sw64-insn/sellti-175.S | 11 + + none/tests/sw64-insn/selne-110.S | 12 + + none/tests/sw64-insn/selnei-176.S | 11 + + none/tests/sw64-insn/setfpec0-212.S | 30 + + none/tests/sw64-insn/setfpec1-213.S | 30 + + none/tests/sw64-insn/setfpec2-214.S | 30 + + none/tests/sw64-insn/setfpec3-215.S | 30 + + none/tests/sw64-insn/sextb-100.S | 11 + + none/tests/sw64-insn/sextbi-168.S | 10 + + none/tests/sw64-insn/sexth-101.S | 11 + + none/tests/sw64-insn/sexthi-169.S | 10 + + none/tests/sw64-insn/sll-76.S | 12 + + none/tests/sw64-insn/slli-147.S | 11 + + none/tests/sw64-insn/sllow-242.S | 1 + + none/tests/sw64-insn/sllowi-266.S | 1 + + none/tests/sw64-insn/sra-78.S | 12 + + none/tests/sw64-insn/srai-149.S | 11 + + none/tests/sw64-insn/srl-77.S | 12 + + none/tests/sw64-insn/srli-148.S | 11 + + none/tests/sw64-insn/srlow-243.S | 1 + + none/tests/sw64-insn/srlowi-267.S | 1 + + none/tests/sw64-insn/stb-344.S | 16 + + none/tests/sw64-insn/std_nc-34.S | 19 + + none/tests/sw64-insn/sth-345.S | 16 + + none/tests/sw64-insn/stl-347.S | 23 + + none/tests/sw64-insn/stl_nc-33.S | 16 + + none/tests/sw64-insn/stl_u-348.S | 23 + + none/tests/sw64-insn/stw-346.S | 18 + + none/tests/sw64-insn/stw_nc-32.S | 16 + + none/tests/sw64-insn/subl-49.S | 12 + + none/tests/sw64-insn/subli-120.S | 11 + + none/tests/sw64-insn/subw-43.S | 12 + + none/tests/sw64-insn/subwi-114.S | 11 + + none/tests/sw64-insn/sys_call-2.S | 10 + + none/tests/sw64-insn/sys_call_b-1.S | 10 + + none/tests/sw64-insn/test-all.sh | 31 + + none/tests/sw64-insn/test-basic.sh | 31 + + none/tests/sw64-insn/tmp.S | 10 + + none/tests/sw64-insn/umulh-56.S | 11 + + none/tests/sw64-insn/umulhi-127.S | 10 + + none/tests/sw64-insn/vaddd-277.S | 52 + + none/tests/sw64-insn/vaddl-244.S | 1 + + none/tests/sw64-insn/vaddli-268.S | 1 + + none/tests/sw64-insn/vadds-276.S | 1 + + none/tests/sw64-insn/vaddw-230.S | 1 + + none/tests/sw64-insn/vaddwi-254.S | 1 + + none/tests/sw64-insn/vcmpeqw-233.S | 1 + + none/tests/sw64-insn/vcmpeqwi-257.S | 1 + + none/tests/sw64-insn/vcmpgew-232.S | 1 + + none/tests/sw64-insn/vcmpgewi-256.S | 1 + + none/tests/sw64-insn/vcmplew-234.S | 1 + + none/tests/sw64-insn/vcmplewi-258.S | 1 + + none/tests/sw64-insn/vcmpltw-235.S | 1 + + none/tests/sw64-insn/vcmpltwi-259.S | 1 + + none/tests/sw64-insn/vcmpulew-236.S | 1 + + none/tests/sw64-insn/vcmpulewi-260.S | 1 + + none/tests/sw64-insn/vcmpultw-237.S | 1 + + none/tests/sw64-insn/vcmpultwi-261.S | 1 + + none/tests/sw64-insn/vcond-317.S | 1 + + none/tests/sw64-insn/vcons-316.S | 1 + + none/tests/sw64-insn/vconw-314.S | 1 + + none/tests/sw64-insn/vcpyf-313.S | 1 + + none/tests/sw64-insn/vcpys-290.S | 1 + + none/tests/sw64-insn/vcpyse-291.S | 1 + + none/tests/sw64-insn/vcpysn-292.S | 1 + + none/tests/sw64-insn/vcpyw-312.S | 1 + + none/tests/sw64-insn/vdivd-283.S | 1 + + none/tests/sw64-insn/vdivs-282.S | 1 + + none/tests/sw64-insn/vextf-311.S | 1 + + none/tests/sw64-insn/vextw-310.S | 1 + + none/tests/sw64-insn/vfcmpeq-286.S | 1 + + none/tests/sw64-insn/vfcmple-287.S | 1 + + none/tests/sw64-insn/vfcmplt-288.S | 1 + + none/tests/sw64-insn/vfcmpun-289.S | 1 + + none/tests/sw64-insn/vfseleq-301.S | 1 + + none/tests/sw64-insn/vfselle-303.S | 1 + + none/tests/sw64-insn/vfsellt-302.S | 1 + + none/tests/sw64-insn/vinsf-309.S | 1 + + none/tests/sw64-insn/vinsw-308.S | 1 + + none/tests/sw64-insn/vldd-39.S | 52 + + none/tests/sw64-insn/vldd_nc-334.S | 1 + + none/tests/sw64-insn/vldd_u-326.S | 1 + + none/tests/sw64-insn/vlds-38.S | 53 + + none/tests/sw64-insn/vlds_u-324.S | 1 + + none/tests/sw64-insn/vldw_u-322.S | 1 + + none/tests/sw64-insn/vlogzz-179.S | 1 + + none/tests/sw64-insn/vmad-294.S | 1 + + none/tests/sw64-insn/vmas-293.S | 1 + + none/tests/sw64-insn/vmsd-296.S | 1 + + none/tests/sw64-insn/vmss-295.S | 1 + + none/tests/sw64-insn/vmuld-281.S | 1 + + none/tests/sw64-insn/vmuls-280.S | 1 + + none/tests/sw64-insn/vnmad-298.S | 1 + + none/tests/sw64-insn/vnmas-297.S | 1 + + none/tests/sw64-insn/vnmsd-300.S | 1 + + none/tests/sw64-insn/vnmss-299.S | 1 + + none/tests/sw64-insn/vrolw-241.S | 1 + + none/tests/sw64-insn/vrolwi-265.S | 1 + + none/tests/sw64-insn/vseleqw-304.S | 1 + + none/tests/sw64-insn/vseleqwi-318.S | 1 + + none/tests/sw64-insn/vsellbcw-305.S | 1 + + none/tests/sw64-insn/vsellbcwi-319.S | 1 + + none/tests/sw64-insn/vsellew-307.S | 1 + + none/tests/sw64-insn/vsellewi-321.S | 1 + + none/tests/sw64-insn/vselltw-306.S | 1 + + none/tests/sw64-insn/vselltwi-320.S | 1 + + none/tests/sw64-insn/vshfw-315.S | 1 + + none/tests/sw64-insn/vsllw-238.S | 1 + + none/tests/sw64-insn/vsllwi-262.S | 1 + + none/tests/sw64-insn/vsqrtd-285.S | 1 + + none/tests/sw64-insn/vsqrts-284.S | 1 + + none/tests/sw64-insn/vsraw-240.S | 1 + + none/tests/sw64-insn/vsrawi-264.S | 1 + + none/tests/sw64-insn/vsrlw-239.S | 1 + + none/tests/sw64-insn/vsrlwi-263.S | 1 + + none/tests/sw64-insn/vstd-41.S | 52 + + none/tests/sw64-insn/vstd_nc-335.S | 1 + + none/tests/sw64-insn/vstd_u-327.S | 1 + + none/tests/sw64-insn/vstd_uh-333.S | 1 + + none/tests/sw64-insn/vstd_ul-332.S | 1 + + none/tests/sw64-insn/vsts-40.S | 1 + + none/tests/sw64-insn/vsts_u-325.S | 1 + + none/tests/sw64-insn/vsts_uh-331.S | 1 + + none/tests/sw64-insn/vsts_ul-330.S | 1 + + none/tests/sw64-insn/vstw_u-323.S | 1 + + none/tests/sw64-insn/vstw_uh-329.S | 1 + + none/tests/sw64-insn/vstw_ul-328.S | 1 + + none/tests/sw64-insn/vsubd-279.S | 1 + + none/tests/sw64-insn/vsubl-245.S | 1 + + none/tests/sw64-insn/vsubli-269.S | 1 + + none/tests/sw64-insn/vsubs-278.S | 1 + + none/tests/sw64-insn/vsubw-231.S | 28 + + none/tests/sw64-insn/vsubwi-255.S | 1 + + none/tests/sw64-insn/vucaddb-252.S | 1 + + none/tests/sw64-insn/vucaddbi-274.S | 1 + + none/tests/sw64-insn/vucaddh-250.S | 1 + + none/tests/sw64-insn/vucaddhi-272.S | 1 + + none/tests/sw64-insn/vucaddw-248.S | 1 + + none/tests/sw64-insn/vucaddwi-270.S | 1 + + none/tests/sw64-insn/vucsubb-253.S | 1 + + none/tests/sw64-insn/vucsubbi-275.S | 1 + + none/tests/sw64-insn/vucsubh-251.S | 1 + + none/tests/sw64-insn/vucsubhi-273.S | 1 + + none/tests/sw64-insn/vucsubw-249.S | 1 + + none/tests/sw64-insn/vucsubwi-271.S | 1 + + none/tests/sw64-insn/wfpcr-211.S | 31 + + none/tests/sw64-insn/wr_f-14.S | 60 + + none/tests/sw64-insn/xor-66.S | 12 + + none/tests/sw64-insn/xori-137.S | 11 + + none/tests/sw64-insn/zap-98.S | 12 + + none/tests/sw64-insn/zapi-166.S | 11 + + none/tests/sw64-insn/zapnot-99.S | 13 + + none/tests/sw64-insn/zapnoti-167.S | 12 + + none/tests/sw64-linux/.deps/getcontext.Po | 49 + + none/tests/sw64-linux/.deps/gethostname.Po | 123 + + none/tests/sw64-linux/.deps/prctl.Po | 71 + + none/tests/sw64-linux/.deps/readahead.Po | 70 + + none/tests/sw64-linux/.deps/sigsuspend.Po | 106 + + none/tests/sw64-linux/Makefile | 1041 + + none/tests/sw64-linux/Makefile.am | 22 + + none/tests/sw64-linux/Makefile.in | 1041 + + none/tests/sw64-linux/filter_stderr | 4 + + none/tests/sw64-linux/getcontext | Bin 0 -> 14840 bytes + none/tests/sw64-linux/getcontext.c | 14 + + none/tests/sw64-linux/getcontext.stderr.diff | 8 + + none/tests/sw64-linux/getcontext.stderr.exp | 0 + none/tests/sw64-linux/getcontext.stderr.out | 5 + + none/tests/sw64-linux/getcontext.stdout.diff | 5 + + none/tests/sw64-linux/getcontext.stdout.exp | 2 + + none/tests/sw64-linux/getcontext.stdout.out | 0 + none/tests/sw64-linux/getcontext.vgtest | 3 + + none/tests/sw64-linux/gethostname | Bin 0 -> 15376 bytes + none/tests/sw64-linux/gethostname.c | 34 + + none/tests/sw64-linux/gethostname.stderr.diff | 6 + + none/tests/sw64-linux/gethostname.stderr.exp | 3 + + none/tests/sw64-linux/gethostname.stderr.out | 2 + + none/tests/sw64-linux/gethostname.vgtest | 4 + + none/tests/sw64-linux/prctl | Bin 0 -> 15160 bytes + none/tests/sw64-linux/prctl.c | 16 + + none/tests/sw64-linux/prctl.stderr.exp | 3 + + none/tests/sw64-linux/prctl.vgtest | 4 + + none/tests/sw64-linux/readahead | Bin 0 -> 15144 bytes + none/tests/sw64-linux/readahead.c | 25 + + none/tests/sw64-linux/readahead.stderr.exp | 3 + + none/tests/sw64-linux/readahead.vgtest | 4 + + none/tests/sw64-linux/sigsuspend | Bin 0 -> 15448 bytes + none/tests/sw64-linux/sigsuspend.c | 24 + + none/tests/sw64-linux/sigsuspend.stderr.exp | 2 + + none/tests/sw64-linux/sigsuspend.vgtest | 2 + + none/tests/sw64-linux/vgcore.2854183 | Bin 0 -> 3645440 bytes + none/tests/sw64-linux/vgcore.683602 | Bin 0 -> 3645440 bytes + none/tests/sw64/.deps/8a-lock.Po | 139 + + none/tests/sw64/.deps/8a-misc.Po | 47 + + none/tests/sw64/.deps/8a_conv-8a-conv.Po | 4 + + none/tests/sw64/.deps/8a_fp-8a-fp.Po | 4 + + none/tests/sw64/.deps/8a_int-8a-int.Po | 4 + + none/tests/sw64/.deps/allexec.Po | 130 + + none/tests/sw64/.deps/arith-fp.Po | 47 + + .../sw64/.deps/arith_int_imm-arith-int-imm.Po | 4 + + .../sw64/.deps/arith_int_reg-arith-int-reg.Po | 4 + + none/tests/sw64/.deps/branch.Po | 47 + + none/tests/sw64/.deps/div-by-zero.Po | 116 + + none/tests/sw64/.deps/loadstore-fp.Po | 48 + + none/tests/sw64/.deps/loadstore-lock.Po | 140 + + none/tests/sw64/.deps/py-hash-double.Po | 57 + + none/tests/sw64/.deps/rcid.Po | 39 + + none/tests/sw64/.deps/rounding.Po | 55 + + none/tests/sw64/.deps/rtc.Po | 39 + + none/tests/sw64/.deps/simd-fp.Po | 53 + + none/tests/sw64/.deps/simd-int.Po | 53 + + none/tests/sw64/.deps/stack.Po | 2 + + none/tests/sw64/.deps/unique.Po | 39 + + none/tests/sw64/8a-conv | Bin 0 -> 38008 bytes + none/tests/sw64/8a-conv.c | 108 + + none/tests/sw64/8a-conv.stderr.exp | 0 + none/tests/sw64/8a-conv.stdout.exp | 676 + + none/tests/sw64/8a-conv.vgtest | 3 + + none/tests/sw64/8a-fp | Bin 0 -> 18288 bytes + none/tests/sw64/8a-fp.c | 46 + + none/tests/sw64/8a-fp.stderr.exp | 0 + none/tests/sw64/8a-fp.stdout.exp | 175 + + none/tests/sw64/8a-fp.vgtest | 3 + + none/tests/sw64/8a-int | Bin 0 -> 75968 bytes + none/tests/sw64/8a-int.c | 192 + + none/tests/sw64/8a-int.stderr.exp | 0 + none/tests/sw64/8a-int.stdout.exp | 11212 +++++ + none/tests/sw64/8a-int.vgtest | 3 + + none/tests/sw64/8a-lock | Bin 0 -> 17968 bytes + none/tests/sw64/8a-lock.c | 251 + + none/tests/sw64/8a-lock.stderr.exp | 0 + none/tests/sw64/8a-lock.stdout.exp | 24 + + none/tests/sw64/8a-lock.vgtest | 3 + + none/tests/sw64/8a-misc | Bin 0 -> 18272 bytes + none/tests/sw64/8a-misc.c | 340 + + none/tests/sw64/8a-misc.stderr.exp | 0 + none/tests/sw64/8a-misc.stdout.exp | 152 + + none/tests/sw64/8a-misc.vgtest | 3 + + none/tests/sw64/Makefile | 1330 + + none/tests/sw64/Makefile.am | 70 + + none/tests/sw64/Makefile.in | 1330 + + none/tests/sw64/allexec | Bin 0 -> 16432 bytes + none/tests/sw64/allexec.c | 1 + + none/tests/sw64/arith-fp | Bin 0 -> 42704 bytes + none/tests/sw64/arith-fp.c | 284 + + none/tests/sw64/arith-fp.stderr.exp | 0 + none/tests/sw64/arith-fp.stdout.exp | 7190 +++ + none/tests/sw64/arith-fp.stdout.exp-8a | 7190 +++ + none/tests/sw64/arith-fp.vgtest | 2 + + none/tests/sw64/arith-int-imm | Bin 0 -> 401664 bytes + none/tests/sw64/arith-int-imm.c | 232 + + none/tests/sw64/arith-int-imm.stderr.exp | 0 + none/tests/sw64/arith-int-imm.stdout.exp | 38176 ++++++++++++++++ + none/tests/sw64/arith-int-imm.vgtest | 2 + + none/tests/sw64/arith-int-reg | Bin 0 -> 87280 bytes + none/tests/sw64/arith-int-reg.c | 214 + + none/tests/sw64/arith-int-reg.stderr.exp | 0 + none/tests/sw64/arith-int-reg.stdout.exp | 28398 ++++++++++++ + none/tests/sw64/arith-int-reg.vgtest | 2 + + none/tests/sw64/branch | Bin 0 -> 301344 bytes + none/tests/sw64/branch.c | 204 + + none/tests/sw64/branch.stderr.exp | 0 + none/tests/sw64/branch.stdout.exp | 1256 + + none/tests/sw64/branch.vgtest | 2 + + none/tests/sw64/common-sw64-standalone.h | 165 + + none/tests/sw64/div-by-zero | Bin 0 -> 14128 bytes + none/tests/sw64/div-by-zero.c | 26 + + none/tests/sw64/div-by-zero.stderr.exp | 0 + none/tests/sw64/div-by-zero.stdout.exp | 1 + + none/tests/sw64/div-by-zero.vgtest | 2 + + none/tests/sw64/filter_stderr | 4 + + none/tests/sw64/loadstore-fp | Bin 0 -> 15264 bytes + none/tests/sw64/loadstore-fp.c | 119 + + none/tests/sw64/loadstore-fp.stderr.exp | 0 + none/tests/sw64/loadstore-fp.stdout.exp | 116 + + none/tests/sw64/loadstore-fp.vgtest | 2 + + none/tests/sw64/loadstore-lock | Bin 0 -> 15272 bytes + none/tests/sw64/loadstore-lock.c | 126 + + none/tests/sw64/loadstore-lock.stderr.exp | 0 + none/tests/sw64/loadstore-lock.stdout.exp | 10 + + none/tests/sw64/loadstore-lock.vgtest | 2 + + none/tests/sw64/py-hash-double | Bin 0 -> 14704 bytes + none/tests/sw64/py-hash-double.c | 95 + + none/tests/sw64/py-hash-double.stderr.exp | 0 + none/tests/sw64/py-hash-double.stdout.exp | 7 + + none/tests/sw64/py-hash-double.vgtest | 3 + + none/tests/sw64/rcid | Bin 0 -> 14848 bytes + none/tests/sw64/rcid.c | 18 + + none/tests/sw64/rcid.stderr.exp | 3 + + none/tests/sw64/rcid.vgtest | 4 + + none/tests/sw64/rounding | Bin 0 -> 14816 bytes + none/tests/sw64/rounding.c | 70 + + none/tests/sw64/rounding.stderr.exp | 0 + none/tests/sw64/rounding.stdout.exp | 25 + + none/tests/sw64/rounding.vgtest | 2 + + none/tests/sw64/rtc | Bin 0 -> 14840 bytes + none/tests/sw64/rtc.c | 18 + + none/tests/sw64/rtc.stderr.exp | 3 + + none/tests/sw64/rtc.vgtest | 4 + + none/tests/sw64/simd-fp | Bin 0 -> 37096 bytes + none/tests/sw64/simd-fp.c | 231 + + none/tests/sw64/simd-fp.stderr.exp | 0 + none/tests/sw64/simd-fp.stdout.exp | 20468 +++++++++ + none/tests/sw64/simd-fp.vgtest.disable | 2 + + none/tests/sw64/simd-int | Bin 0 -> 45128 bytes + none/tests/sw64/simd-int.c | 209 + + none/tests/sw64/simd-int.stderr.exp | 0 + none/tests/sw64/simd-int.stdout.exp | 10468 +++++ + none/tests/sw64/simd-int.vgtest.disable | 2 + + none/tests/sw64/stack | Bin 0 -> 14304 bytes + none/tests/sw64/stack.c | 51 + + none/tests/sw64/stack.stderr.exp | 0 + none/tests/sw64/stack.stdout.exp | 0 + none/tests/sw64/stack.vgtest | 2 + + none/tests/sw64/unique | Bin 0 -> 14352 bytes + none/tests/sw64/unique.c | 98 + + none/tests/sw64/unique.stderr.exp | 0 + none/tests/sw64/unique.stdout.exp | 2 + + none/tests/sw64/unique.vgtest | 2 + + perf/bigcode.c | 2 +- + perf/tinycc.c | 3 +- + tests/arch_test.c | 3 + + tests/check_headers_and_includes | 5 +- + tests/platform_test | 1 + + 711 files changed, 164859 insertions(+), 132 deletions(-) + create mode 100644 VEX/priv/guest_sw64_defs.h + create mode 100644 VEX/priv/guest_sw64_helpers.c + create mode 100644 VEX/priv/guest_sw64_toIR.c + create mode 100644 VEX/priv/host_sw64_defs.c + create mode 100644 VEX/priv/host_sw64_defs.h + create mode 100644 VEX/priv/host_sw64_isel.c + create mode 100644 VEX/pub/libvex_guest_sw64.h + create mode 100644 cachegrind/tests/cgout-test2 + create mode 100644 coregrind/m_dispatch/dispatch-sw64-linux.S + create mode 100644 coregrind/m_gdbserver/valgrind-low-sw64.c + create mode 100644 coregrind/m_sigframe/sigframe-sw64-linux.c + create mode 100644 coregrind/m_swdiv.S + create mode 100644 coregrind/m_syswrap/syscall-sw64-linux.S + create mode 100644 coregrind/m_syswrap/syswrap-sw64-linux.c + create mode 100644 drd/tests/tc04_free_lock.stderr.exp-sw64 + create mode 100644 drd/tests/tc09_bad_unlock.stderr.exp-sw64 + create mode 100644 gdbserver_tests/hgtls.stdoutB.exp-sw64 + create mode 100644 gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-sw64 + create mode 100644 helgrind/tests/tc20_verifywrap.stderr.exp-sw64 + create mode 100644 include/vki/vki-posixtypes-sw64-linux.h + create mode 100644 include/vki/vki-scnums-sw64-linux.h + create mode 100644 include/vki/vki-sw64-linux.h + create mode 100644 massif/tests/big-alloc.post.exp-sw64 + create mode 100644 memcheck/tests/sigkill.stderr.exp-sw64 + create mode 100644 memcheck/tests/sigprocmask.stderr.exp-sw64 + create mode 100644 memcheck/tests/sw64/Makefile + create mode 100644 memcheck/tests/sw64/Makefile.am + create mode 100644 memcheck/tests/sw64/Makefile.in + create mode 120000 memcheck/tests/sw64/arith-fp.stderr.exp + create mode 120000 memcheck/tests/sw64/arith-fp.stdout.exp + create mode 120000 memcheck/tests/sw64/arith-fp.stdout.exp-8a + create mode 100644 memcheck/tests/sw64/arith-fp.vgtest + create mode 120000 memcheck/tests/sw64/arith-int-imm.stderr.exp + create mode 120000 memcheck/tests/sw64/arith-int-imm.stdout.exp + create mode 100644 memcheck/tests/sw64/arith-int-imm.vgtest + create mode 120000 memcheck/tests/sw64/arith-int-reg.stderr.exp + create mode 120000 memcheck/tests/sw64/arith-int-reg.stdout.exp + create mode 100644 memcheck/tests/sw64/arith-int-reg.vgtest + create mode 120000 memcheck/tests/sw64/branch.stderr.exp + create mode 120000 memcheck/tests/sw64/branch.stdout.exp + create mode 100644 memcheck/tests/sw64/branch.vgtest + create mode 100755 memcheck/tests/sw64/filter_stderr + create mode 120000 memcheck/tests/sw64/loadstore-fp.stderr.exp + create mode 120000 memcheck/tests/sw64/loadstore-fp.stdout.exp + create mode 100644 memcheck/tests/sw64/loadstore-fp.vgtest + create mode 120000 memcheck/tests/sw64/stack.stderr.exp + create mode 120000 memcheck/tests/sw64/stack.stdout.exp + create mode 100644 memcheck/tests/sw64/stack.vgtest + create mode 100644 none/tests/pause.c + create mode 100644 none/tests/require-text-symbol-2.stderr.exp-sw64 + create mode 100755 none/tests/simple-func + create mode 100644 none/tests/sw64-insn/.gitignore + create mode 100644 none/tests/sw64-insn/Makefile + create mode 100644 none/tests/sw64-insn/README.md + create mode 100644 none/tests/sw64-insn/addl-48.S + create mode 100644 none/tests/sw64-insn/addli-119.S + create mode 100644 none/tests/sw64-insn/addw-42.S + create mode 100644 none/tests/sw64-insn/addwi-113.S + create mode 100644 none/tests/sw64-insn/and-62.S + create mode 100644 none/tests/sw64-insn/andi-133.S + create mode 100644 none/tests/sw64-insn/basic-insn-list + create mode 100644 none/tests/sw64-insn/beq-352.S + create mode 100644 none/tests/sw64-insn/bge-357.S + create mode 100644 none/tests/sw64-insn/bgt-356.S + create mode 100644 none/tests/sw64-insn/bic-63.S + create mode 100644 none/tests/sw64-insn/bici-134.S + create mode 100644 none/tests/sw64-insn/bis-64.S + create mode 100644 none/tests/sw64-insn/bisi-135.S + create mode 100644 none/tests/sw64-insn/blbc-358.S + create mode 100644 none/tests/sw64-insn/blbs-359.S + create mode 100644 none/tests/sw64-insn/ble-355.S + create mode 100644 none/tests/sw64-insn/blt-354.S + create mode 100644 none/tests/sw64-insn/bne-353.S + create mode 100644 none/tests/sw64-insn/br-6.S + create mode 100644 none/tests/sw64-insn/bsr-7.S + create mode 100644 none/tests/sw64-insn/call-3.S + create mode 100644 none/tests/sw64-insn/cmpeq-57.S + create mode 100644 none/tests/sw64-insn/cmpeqi-128.S + create mode 100644 none/tests/sw64-insn/cmpgeb-102.S + create mode 100644 none/tests/sw64-insn/cmpgebi-170.S + create mode 100644 none/tests/sw64-insn/cmple-59.S + create mode 100644 none/tests/sw64-insn/cmplei-130.S + create mode 100644 none/tests/sw64-insn/cmplt-58.S + create mode 100644 none/tests/sw64-insn/cmplti-129.S + create mode 100644 none/tests/sw64-insn/cmpule-61.S + create mode 100644 none/tests/sw64-insn/cmpulei-132.S + create mode 100644 none/tests/sw64-insn/cmpult-60.S + create mode 100644 none/tests/sw64-insn/cmpulti-131.S + create mode 100644 none/tests/sw64-insn/ctlz-88.S + create mode 120000 none/tests/sw64-insn/ctlzow-247.S + create mode 100644 none/tests/sw64-insn/ctpop-87.S + create mode 120000 none/tests/sw64-insn/ctpopow-246.S + create mode 100644 none/tests/sw64-insn/cttz-89.S + create mode 100644 none/tests/sw64-insn/eqv-67.S + create mode 100644 none/tests/sw64-insn/eqvi-138.S + create mode 100644 none/tests/sw64-insn/exthb-83.S + create mode 100644 none/tests/sw64-insn/exthbi-154.S + create mode 100644 none/tests/sw64-insn/exthh-84.S + create mode 100644 none/tests/sw64-insn/exthhi-155.S + create mode 100644 none/tests/sw64-insn/exthl-86.S + create mode 100644 none/tests/sw64-insn/exthli-157.S + create mode 100644 none/tests/sw64-insn/exthw-85.S + create mode 100644 none/tests/sw64-insn/exthwi-156.S + create mode 100644 none/tests/sw64-insn/extlb-79.S + create mode 100644 none/tests/sw64-insn/extlbi-150.S + create mode 100644 none/tests/sw64-insn/extlh-80.S + create mode 100644 none/tests/sw64-insn/extlhi-151.S + create mode 100644 none/tests/sw64-insn/extll-82.S + create mode 100644 none/tests/sw64-insn/extlli-153.S + create mode 100644 none/tests/sw64-insn/extlw-81.S + create mode 100644 none/tests/sw64-insn/extlwi-152.S + create mode 100644 none/tests/sw64-insn/faddd-181.S + create mode 100644 none/tests/sw64-insn/fadds-180.S + create mode 100644 none/tests/sw64-insn/fbeq-360.S + create mode 100644 none/tests/sw64-insn/fbge-365.S + create mode 100644 none/tests/sw64-insn/fbgt-364.S + create mode 100644 none/tests/sw64-insn/fble-363.S + create mode 100644 none/tests/sw64-insn/fblt-362.S + create mode 100644 none/tests/sw64-insn/fbne-361.S + create mode 100644 none/tests/sw64-insn/fcmpeq-190.S + create mode 100644 none/tests/sw64-insn/fcmple-191.S + create mode 100644 none/tests/sw64-insn/fcmplt-192.S + create mode 100644 none/tests/sw64-insn/fcmpun-193.S + create mode 100644 none/tests/sw64-insn/fcpys-205.S + create mode 100644 none/tests/sw64-insn/fcpyse-206.S + create mode 100644 none/tests/sw64-insn/fcpysn-207.S + create mode 100644 none/tests/sw64-insn/fcvtdl-200.S + create mode 100644 none/tests/sw64-insn/fcvtdl_g-196.S + create mode 100644 none/tests/sw64-insn/fcvtdl_n-199.S + create mode 100644 none/tests/sw64-insn/fcvtdl_p-197.S + create mode 100644 none/tests/sw64-insn/fcvtdl_z-198.S + create mode 100644 none/tests/sw64-insn/fcvtds-195.S + create mode 100644 none/tests/sw64-insn/fcvtld-204.S + create mode 100644 none/tests/sw64-insn/fcvtls-203.S + create mode 100644 none/tests/sw64-insn/fcvtlw-202.S + create mode 100644 none/tests/sw64-insn/fcvtsd-194.S + create mode 100644 none/tests/sw64-insn/fcvtwl-201.S + create mode 100644 none/tests/sw64-insn/fdivd-187.S + create mode 100644 none/tests/sw64-insn/fdivs-186.S + create mode 100644 none/tests/sw64-insn/fimovd-104.S + create mode 100644 none/tests/sw64-insn/fimovs-103.S + create mode 100644 none/tests/sw64-insn/fldd-343.S + create mode 100644 none/tests/sw64-insn/flds-342.S + create mode 100644 none/tests/sw64-insn/fmad-217.S + create mode 100644 none/tests/sw64-insn/fmas-216.S + create mode 100644 none/tests/sw64-insn/fmsd-219.S + create mode 100644 none/tests/sw64-insn/fmss-218.S + create mode 100644 none/tests/sw64-insn/fmuld-185.S + create mode 100644 none/tests/sw64-insn/fmuls-184.S + create mode 100644 none/tests/sw64-insn/fnmad-221.S + create mode 100644 none/tests/sw64-insn/fnmas-220.S + create mode 100644 none/tests/sw64-insn/fnmsd-223.S + create mode 100644 none/tests/sw64-insn/fnmss-222.S + create mode 100644 none/tests/sw64-insn/fseleq-224.S + create mode 100644 none/tests/sw64-insn/fselge-229.S + create mode 100644 none/tests/sw64-insn/fselgt-228.S + create mode 100644 none/tests/sw64-insn/fselle-227.S + create mode 100644 none/tests/sw64-insn/fsellt-226.S + create mode 100644 none/tests/sw64-insn/fselne-225.S + create mode 100644 none/tests/sw64-insn/fsqrtd-189.S + create mode 100644 none/tests/sw64-insn/fsqrts-188.S + create mode 100644 none/tests/sw64-insn/fstd-351.S + create mode 100644 none/tests/sw64-insn/fsts-350.S + create mode 100644 none/tests/sw64-insn/fsubd-183.S + create mode 100644 none/tests/sw64-insn/fsubs-182.S + create mode 100644 none/tests/sw64-insn/halt-12.S + create mode 120000 none/tests/sw64-insn/ifmovd-209.S + create mode 120000 none/tests/sw64-insn/ifmovs-208.S + create mode 100644 none/tests/sw64-insn/imemb-9.S + create mode 100644 none/tests/sw64-insn/inshb-72.S + create mode 100644 none/tests/sw64-insn/inshbi-143.S + create mode 100644 none/tests/sw64-insn/inshh-73.S + create mode 100644 none/tests/sw64-insn/inshhi-144.S + create mode 100644 none/tests/sw64-insn/inshl-75.S + create mode 100644 none/tests/sw64-insn/inshli-146.S + create mode 100644 none/tests/sw64-insn/inshw-74.S + create mode 100644 none/tests/sw64-insn/inshwi-145.S + create mode 100644 none/tests/sw64-insn/inslb-68.S + create mode 100644 none/tests/sw64-insn/inslbi-139.S + create mode 100644 none/tests/sw64-insn/inslh-69.S + create mode 100644 none/tests/sw64-insn/inslhi-140.S + create mode 100644 none/tests/sw64-insn/insll-71.S + create mode 100644 none/tests/sw64-insn/inslli-142.S + create mode 100644 none/tests/sw64-insn/inslw-70.S + create mode 100644 none/tests/sw64-insn/inslwi-141.S + create mode 100644 none/tests/sw64-insn/insn-list + create mode 100644 none/tests/sw64-insn/jmp-5.S + create mode 120000 none/tests/sw64-insn/ldbu-336.S + create mode 100644 none/tests/sw64-insn/ldd_nc-31.S + create mode 100644 none/tests/sw64-insn/ldde-37.S + create mode 120000 none/tests/sw64-insn/ldhu-337.S + create mode 100644 none/tests/sw64-insn/ldi-366.S + create mode 120000 none/tests/sw64-insn/ldih-367.S + create mode 120000 none/tests/sw64-insn/ldl-339.S + create mode 120000 none/tests/sw64-insn/ldl_dec-24.S + create mode 100644 none/tests/sw64-insn/ldl_inc-22.S + create mode 100644 none/tests/sw64-insn/ldl_nc-30.S + create mode 120000 none/tests/sw64-insn/ldl_set-26.S + create mode 120000 none/tests/sw64-insn/ldl_u-340.S + create mode 100644 none/tests/sw64-insn/ldse-36.S + create mode 120000 none/tests/sw64-insn/ldw-338.S + create mode 120000 none/tests/sw64-insn/ldw_dec-23.S + create mode 100644 none/tests/sw64-insn/ldw_inc-21.S + create mode 100644 none/tests/sw64-insn/ldw_nc-29.S + create mode 120000 none/tests/sw64-insn/ldw_set-25.S + create mode 100644 none/tests/sw64-insn/ldwe-35.S + create mode 100644 none/tests/sw64-insn/lldl-20.S + create mode 100644 none/tests/sw64-insn/lldw-19.S + create mode 100644 none/tests/sw64-insn/lstl-28.S + create mode 100644 none/tests/sw64-insn/lstw-27.S + create mode 100644 none/tests/sw64-insn/maskhb-94.S + create mode 100644 none/tests/sw64-insn/maskhbi-162.S + create mode 100644 none/tests/sw64-insn/maskhh-95.S + create mode 100644 none/tests/sw64-insn/maskhhi-163.S + create mode 100644 none/tests/sw64-insn/maskhl-97.S + create mode 100644 none/tests/sw64-insn/maskhli-165.S + create mode 100644 none/tests/sw64-insn/maskhw-96.S + create mode 100644 none/tests/sw64-insn/maskhwi-164.S + create mode 100644 none/tests/sw64-insn/masklb-90.S + create mode 100644 none/tests/sw64-insn/masklbi-158.S + create mode 100644 none/tests/sw64-insn/masklh-91.S + create mode 100644 none/tests/sw64-insn/masklhi-159.S + create mode 100644 none/tests/sw64-insn/maskll-93.S + create mode 100644 none/tests/sw64-insn/masklli-161.S + create mode 100644 none/tests/sw64-insn/masklw-92.S + create mode 100644 none/tests/sw64-insn/masklwi-160.S + create mode 100644 none/tests/sw64-insn/memb-8.S + create mode 100644 none/tests/sw64-insn/mull-55.S + create mode 100644 none/tests/sw64-insn/mulli-126.S + create mode 100644 none/tests/sw64-insn/mulw-54.S + create mode 100644 none/tests/sw64-insn/mulwi-125.S + create mode 100644 none/tests/sw64-insn/not-found-insn.S + create mode 100644 none/tests/sw64-insn/ornot-65.S + create mode 100644 none/tests/sw64-insn/ornoti-136.S + create mode 120000 none/tests/sw64-insn/pri_ld-341.S + create mode 120000 none/tests/sw64-insn/pri_rcsr-16.S + create mode 120000 none/tests/sw64-insn/pri_ret-18.S + create mode 120000 none/tests/sw64-insn/pri_st-349.S + create mode 120000 none/tests/sw64-insn/pri_wcsr-17.S + create mode 100644 none/tests/sw64-insn/rcid-11.S + create mode 100644 none/tests/sw64-insn/rd_f-13.S + create mode 100644 none/tests/sw64-insn/ret-4.S + create mode 100644 none/tests/sw64-insn/rfpcr-210.S + create mode 100644 none/tests/sw64-insn/rtc-10.S + create mode 100644 none/tests/sw64-insn/rtid-15.S + create mode 100644 none/tests/sw64-insn/s4addl-50.S + create mode 100644 none/tests/sw64-insn/s4addli-121.S + create mode 100644 none/tests/sw64-insn/s4addw-44.S + create mode 100644 none/tests/sw64-insn/s4addwi-115.S + create mode 100644 none/tests/sw64-insn/s4subl-51.S + create mode 100644 none/tests/sw64-insn/s4subli-122.S + create mode 100644 none/tests/sw64-insn/s4subw-45.S + create mode 100644 none/tests/sw64-insn/s4subwi-116.S + create mode 100644 none/tests/sw64-insn/s8addl-52.S + create mode 100644 none/tests/sw64-insn/s8addli-123.S + create mode 100644 none/tests/sw64-insn/s8addw-46.S + create mode 100644 none/tests/sw64-insn/s8addwi-117.S + create mode 100644 none/tests/sw64-insn/s8subl-53.S + create mode 100644 none/tests/sw64-insn/s8subli-124.S + create mode 100644 none/tests/sw64-insn/s8subw-47.S + create mode 100644 none/tests/sw64-insn/s8subwi-118.S + create mode 100644 none/tests/sw64-insn/seleq-105.S + create mode 100644 none/tests/sw64-insn/seleqi-171.S + create mode 100644 none/tests/sw64-insn/selge-106.S + create mode 100644 none/tests/sw64-insn/selgei-172.S + create mode 100644 none/tests/sw64-insn/selgt-107.S + create mode 100644 none/tests/sw64-insn/selgti-173.S + create mode 100644 none/tests/sw64-insn/sellbc-111.S + create mode 100644 none/tests/sw64-insn/sellbci-177.S + create mode 100644 none/tests/sw64-insn/sellbs-112.S + create mode 100644 none/tests/sw64-insn/sellbsi-178.S + create mode 100644 none/tests/sw64-insn/selle-108.S + create mode 100644 none/tests/sw64-insn/sellei-174.S + create mode 100644 none/tests/sw64-insn/sellt-109.S + create mode 100644 none/tests/sw64-insn/sellti-175.S + create mode 100644 none/tests/sw64-insn/selne-110.S + create mode 100644 none/tests/sw64-insn/selnei-176.S + create mode 100644 none/tests/sw64-insn/setfpec0-212.S + create mode 100644 none/tests/sw64-insn/setfpec1-213.S + create mode 100644 none/tests/sw64-insn/setfpec2-214.S + create mode 100644 none/tests/sw64-insn/setfpec3-215.S + create mode 100644 none/tests/sw64-insn/sextb-100.S + create mode 100644 none/tests/sw64-insn/sextbi-168.S + create mode 100644 none/tests/sw64-insn/sexth-101.S + create mode 100644 none/tests/sw64-insn/sexthi-169.S + create mode 100644 none/tests/sw64-insn/sll-76.S + create mode 100644 none/tests/sw64-insn/slli-147.S + create mode 120000 none/tests/sw64-insn/sllow-242.S + create mode 120000 none/tests/sw64-insn/sllowi-266.S + create mode 100644 none/tests/sw64-insn/sra-78.S + create mode 100644 none/tests/sw64-insn/srai-149.S + create mode 100644 none/tests/sw64-insn/srl-77.S + create mode 100644 none/tests/sw64-insn/srli-148.S + create mode 120000 none/tests/sw64-insn/srlow-243.S + create mode 120000 none/tests/sw64-insn/srlowi-267.S + create mode 100644 none/tests/sw64-insn/stb-344.S + create mode 100644 none/tests/sw64-insn/std_nc-34.S + create mode 100644 none/tests/sw64-insn/sth-345.S + create mode 100644 none/tests/sw64-insn/stl-347.S + create mode 100644 none/tests/sw64-insn/stl_nc-33.S + create mode 100644 none/tests/sw64-insn/stl_u-348.S + create mode 100644 none/tests/sw64-insn/stw-346.S + create mode 100644 none/tests/sw64-insn/stw_nc-32.S + create mode 100644 none/tests/sw64-insn/subl-49.S + create mode 100644 none/tests/sw64-insn/subli-120.S + create mode 100644 none/tests/sw64-insn/subw-43.S + create mode 100644 none/tests/sw64-insn/subwi-114.S + create mode 100644 none/tests/sw64-insn/sys_call-2.S + create mode 100644 none/tests/sw64-insn/sys_call_b-1.S + create mode 100755 none/tests/sw64-insn/test-all.sh + create mode 100755 none/tests/sw64-insn/test-basic.sh + create mode 100644 none/tests/sw64-insn/tmp.S + create mode 100644 none/tests/sw64-insn/umulh-56.S + create mode 100644 none/tests/sw64-insn/umulhi-127.S + create mode 100644 none/tests/sw64-insn/vaddd-277.S + create mode 120000 none/tests/sw64-insn/vaddl-244.S + create mode 120000 none/tests/sw64-insn/vaddli-268.S + create mode 120000 none/tests/sw64-insn/vadds-276.S + create mode 120000 none/tests/sw64-insn/vaddw-230.S + create mode 120000 none/tests/sw64-insn/vaddwi-254.S + create mode 120000 none/tests/sw64-insn/vcmpeqw-233.S + create mode 120000 none/tests/sw64-insn/vcmpeqwi-257.S + create mode 120000 none/tests/sw64-insn/vcmpgew-232.S + create mode 120000 none/tests/sw64-insn/vcmpgewi-256.S + create mode 120000 none/tests/sw64-insn/vcmplew-234.S + create mode 120000 none/tests/sw64-insn/vcmplewi-258.S + create mode 120000 none/tests/sw64-insn/vcmpltw-235.S + create mode 120000 none/tests/sw64-insn/vcmpltwi-259.S + create mode 120000 none/tests/sw64-insn/vcmpulew-236.S + create mode 120000 none/tests/sw64-insn/vcmpulewi-260.S + create mode 120000 none/tests/sw64-insn/vcmpultw-237.S + create mode 120000 none/tests/sw64-insn/vcmpultwi-261.S + create mode 120000 none/tests/sw64-insn/vcond-317.S + create mode 120000 none/tests/sw64-insn/vcons-316.S + create mode 120000 none/tests/sw64-insn/vconw-314.S + create mode 120000 none/tests/sw64-insn/vcpyf-313.S + create mode 120000 none/tests/sw64-insn/vcpys-290.S + create mode 120000 none/tests/sw64-insn/vcpyse-291.S + create mode 120000 none/tests/sw64-insn/vcpysn-292.S + create mode 120000 none/tests/sw64-insn/vcpyw-312.S + create mode 120000 none/tests/sw64-insn/vdivd-283.S + create mode 120000 none/tests/sw64-insn/vdivs-282.S + create mode 120000 none/tests/sw64-insn/vextf-311.S + create mode 120000 none/tests/sw64-insn/vextw-310.S + create mode 120000 none/tests/sw64-insn/vfcmpeq-286.S + create mode 120000 none/tests/sw64-insn/vfcmple-287.S + create mode 120000 none/tests/sw64-insn/vfcmplt-288.S + create mode 120000 none/tests/sw64-insn/vfcmpun-289.S + create mode 120000 none/tests/sw64-insn/vfseleq-301.S + create mode 120000 none/tests/sw64-insn/vfselle-303.S + create mode 120000 none/tests/sw64-insn/vfsellt-302.S + create mode 120000 none/tests/sw64-insn/vinsf-309.S + create mode 120000 none/tests/sw64-insn/vinsw-308.S + create mode 100644 none/tests/sw64-insn/vldd-39.S + create mode 120000 none/tests/sw64-insn/vldd_nc-334.S + create mode 120000 none/tests/sw64-insn/vldd_u-326.S + create mode 100644 none/tests/sw64-insn/vlds-38.S + create mode 120000 none/tests/sw64-insn/vlds_u-324.S + create mode 120000 none/tests/sw64-insn/vldw_u-322.S + create mode 120000 none/tests/sw64-insn/vlogzz-179.S + create mode 120000 none/tests/sw64-insn/vmad-294.S + create mode 120000 none/tests/sw64-insn/vmas-293.S + create mode 120000 none/tests/sw64-insn/vmsd-296.S + create mode 120000 none/tests/sw64-insn/vmss-295.S + create mode 120000 none/tests/sw64-insn/vmuld-281.S + create mode 120000 none/tests/sw64-insn/vmuls-280.S + create mode 120000 none/tests/sw64-insn/vnmad-298.S + create mode 120000 none/tests/sw64-insn/vnmas-297.S + create mode 120000 none/tests/sw64-insn/vnmsd-300.S + create mode 120000 none/tests/sw64-insn/vnmss-299.S + create mode 120000 none/tests/sw64-insn/vrolw-241.S + create mode 120000 none/tests/sw64-insn/vrolwi-265.S + create mode 120000 none/tests/sw64-insn/vseleqw-304.S + create mode 120000 none/tests/sw64-insn/vseleqwi-318.S + create mode 120000 none/tests/sw64-insn/vsellbcw-305.S + create mode 120000 none/tests/sw64-insn/vsellbcwi-319.S + create mode 120000 none/tests/sw64-insn/vsellew-307.S + create mode 120000 none/tests/sw64-insn/vsellewi-321.S + create mode 120000 none/tests/sw64-insn/vselltw-306.S + create mode 120000 none/tests/sw64-insn/vselltwi-320.S + create mode 120000 none/tests/sw64-insn/vshfw-315.S + create mode 120000 none/tests/sw64-insn/vsllw-238.S + create mode 120000 none/tests/sw64-insn/vsllwi-262.S + create mode 120000 none/tests/sw64-insn/vsqrtd-285.S + create mode 120000 none/tests/sw64-insn/vsqrts-284.S + create mode 120000 none/tests/sw64-insn/vsraw-240.S + create mode 120000 none/tests/sw64-insn/vsrawi-264.S + create mode 120000 none/tests/sw64-insn/vsrlw-239.S + create mode 120000 none/tests/sw64-insn/vsrlwi-263.S + create mode 100644 none/tests/sw64-insn/vstd-41.S + create mode 120000 none/tests/sw64-insn/vstd_nc-335.S + create mode 120000 none/tests/sw64-insn/vstd_u-327.S + create mode 120000 none/tests/sw64-insn/vstd_uh-333.S + create mode 120000 none/tests/sw64-insn/vstd_ul-332.S + create mode 120000 none/tests/sw64-insn/vsts-40.S + create mode 120000 none/tests/sw64-insn/vsts_u-325.S + create mode 120000 none/tests/sw64-insn/vsts_uh-331.S + create mode 120000 none/tests/sw64-insn/vsts_ul-330.S + create mode 120000 none/tests/sw64-insn/vstw_u-323.S + create mode 120000 none/tests/sw64-insn/vstw_uh-329.S + create mode 120000 none/tests/sw64-insn/vstw_ul-328.S + create mode 120000 none/tests/sw64-insn/vsubd-279.S + create mode 120000 none/tests/sw64-insn/vsubl-245.S + create mode 120000 none/tests/sw64-insn/vsubli-269.S + create mode 120000 none/tests/sw64-insn/vsubs-278.S + create mode 100644 none/tests/sw64-insn/vsubw-231.S + create mode 120000 none/tests/sw64-insn/vsubwi-255.S + create mode 120000 none/tests/sw64-insn/vucaddb-252.S + create mode 120000 none/tests/sw64-insn/vucaddbi-274.S + create mode 120000 none/tests/sw64-insn/vucaddh-250.S + create mode 120000 none/tests/sw64-insn/vucaddhi-272.S + create mode 120000 none/tests/sw64-insn/vucaddw-248.S + create mode 120000 none/tests/sw64-insn/vucaddwi-270.S + create mode 120000 none/tests/sw64-insn/vucsubb-253.S + create mode 120000 none/tests/sw64-insn/vucsubbi-275.S + create mode 120000 none/tests/sw64-insn/vucsubh-251.S + create mode 120000 none/tests/sw64-insn/vucsubhi-273.S + create mode 120000 none/tests/sw64-insn/vucsubw-249.S + create mode 120000 none/tests/sw64-insn/vucsubwi-271.S + create mode 100644 none/tests/sw64-insn/wfpcr-211.S + create mode 100644 none/tests/sw64-insn/wr_f-14.S + create mode 100644 none/tests/sw64-insn/xor-66.S + create mode 100644 none/tests/sw64-insn/xori-137.S + create mode 100644 none/tests/sw64-insn/zap-98.S + create mode 100644 none/tests/sw64-insn/zapi-166.S + create mode 100644 none/tests/sw64-insn/zapnot-99.S + create mode 100644 none/tests/sw64-insn/zapnoti-167.S + create mode 100644 none/tests/sw64-linux/.deps/getcontext.Po + create mode 100644 none/tests/sw64-linux/.deps/gethostname.Po + create mode 100644 none/tests/sw64-linux/.deps/prctl.Po + create mode 100644 none/tests/sw64-linux/.deps/readahead.Po + create mode 100644 none/tests/sw64-linux/.deps/sigsuspend.Po + create mode 100644 none/tests/sw64-linux/Makefile + create mode 100644 none/tests/sw64-linux/Makefile.am + create mode 100644 none/tests/sw64-linux/Makefile.in + create mode 100755 none/tests/sw64-linux/filter_stderr + create mode 100755 none/tests/sw64-linux/getcontext + create mode 100644 none/tests/sw64-linux/getcontext.c + create mode 100644 none/tests/sw64-linux/getcontext.stderr.diff + create mode 100644 none/tests/sw64-linux/getcontext.stderr.exp + create mode 100644 none/tests/sw64-linux/getcontext.stderr.out + create mode 100644 none/tests/sw64-linux/getcontext.stdout.diff + create mode 100644 none/tests/sw64-linux/getcontext.stdout.exp + create mode 100644 none/tests/sw64-linux/getcontext.stdout.out + create mode 100644 none/tests/sw64-linux/getcontext.vgtest + create mode 100755 none/tests/sw64-linux/gethostname + create mode 100644 none/tests/sw64-linux/gethostname.c + create mode 100644 none/tests/sw64-linux/gethostname.stderr.diff + create mode 100644 none/tests/sw64-linux/gethostname.stderr.exp + create mode 100644 none/tests/sw64-linux/gethostname.stderr.out + create mode 100644 none/tests/sw64-linux/gethostname.vgtest + create mode 100755 none/tests/sw64-linux/prctl + create mode 100644 none/tests/sw64-linux/prctl.c + create mode 100644 none/tests/sw64-linux/prctl.stderr.exp + create mode 100644 none/tests/sw64-linux/prctl.vgtest + create mode 100755 none/tests/sw64-linux/readahead + create mode 100644 none/tests/sw64-linux/readahead.c + create mode 100644 none/tests/sw64-linux/readahead.stderr.exp + create mode 100644 none/tests/sw64-linux/readahead.vgtest + create mode 100755 none/tests/sw64-linux/sigsuspend + create mode 100644 none/tests/sw64-linux/sigsuspend.c + create mode 100644 none/tests/sw64-linux/sigsuspend.stderr.exp + create mode 100644 none/tests/sw64-linux/sigsuspend.vgtest + create mode 100644 none/tests/sw64-linux/vgcore.2854183 + create mode 100644 none/tests/sw64-linux/vgcore.683602 + create mode 100644 none/tests/sw64/.deps/8a-lock.Po + create mode 100644 none/tests/sw64/.deps/8a-misc.Po + create mode 100644 none/tests/sw64/.deps/8a_conv-8a-conv.Po + create mode 100644 none/tests/sw64/.deps/8a_fp-8a-fp.Po + create mode 100644 none/tests/sw64/.deps/8a_int-8a-int.Po + create mode 100644 none/tests/sw64/.deps/allexec.Po + create mode 100644 none/tests/sw64/.deps/arith-fp.Po + create mode 100644 none/tests/sw64/.deps/arith_int_imm-arith-int-imm.Po + create mode 100644 none/tests/sw64/.deps/arith_int_reg-arith-int-reg.Po + create mode 100644 none/tests/sw64/.deps/branch.Po + create mode 100644 none/tests/sw64/.deps/div-by-zero.Po + create mode 100644 none/tests/sw64/.deps/loadstore-fp.Po + create mode 100644 none/tests/sw64/.deps/loadstore-lock.Po + create mode 100644 none/tests/sw64/.deps/py-hash-double.Po + create mode 100644 none/tests/sw64/.deps/rcid.Po + create mode 100644 none/tests/sw64/.deps/rounding.Po + create mode 100644 none/tests/sw64/.deps/rtc.Po + create mode 100644 none/tests/sw64/.deps/simd-fp.Po + create mode 100644 none/tests/sw64/.deps/simd-int.Po + create mode 100644 none/tests/sw64/.deps/stack.Po + create mode 100644 none/tests/sw64/.deps/unique.Po + create mode 100755 none/tests/sw64/8a-conv + create mode 100644 none/tests/sw64/8a-conv.c + create mode 100644 none/tests/sw64/8a-conv.stderr.exp + create mode 100644 none/tests/sw64/8a-conv.stdout.exp + create mode 100644 none/tests/sw64/8a-conv.vgtest + create mode 100755 none/tests/sw64/8a-fp + create mode 100644 none/tests/sw64/8a-fp.c + create mode 100644 none/tests/sw64/8a-fp.stderr.exp + create mode 100644 none/tests/sw64/8a-fp.stdout.exp + create mode 100644 none/tests/sw64/8a-fp.vgtest + create mode 100755 none/tests/sw64/8a-int + create mode 100644 none/tests/sw64/8a-int.c + create mode 100644 none/tests/sw64/8a-int.stderr.exp + create mode 100644 none/tests/sw64/8a-int.stdout.exp + create mode 100644 none/tests/sw64/8a-int.vgtest + create mode 100755 none/tests/sw64/8a-lock + create mode 100644 none/tests/sw64/8a-lock.c + create mode 100644 none/tests/sw64/8a-lock.stderr.exp + create mode 100644 none/tests/sw64/8a-lock.stdout.exp + create mode 100644 none/tests/sw64/8a-lock.vgtest + create mode 100755 none/tests/sw64/8a-misc + create mode 100644 none/tests/sw64/8a-misc.c + create mode 100644 none/tests/sw64/8a-misc.stderr.exp + create mode 100644 none/tests/sw64/8a-misc.stdout.exp + create mode 100644 none/tests/sw64/8a-misc.vgtest + create mode 100644 none/tests/sw64/Makefile + create mode 100644 none/tests/sw64/Makefile.am + create mode 100644 none/tests/sw64/Makefile.in + create mode 100755 none/tests/sw64/allexec + create mode 120000 none/tests/sw64/allexec.c + create mode 100755 none/tests/sw64/arith-fp + create mode 100644 none/tests/sw64/arith-fp.c + create mode 100644 none/tests/sw64/arith-fp.stderr.exp + create mode 100644 none/tests/sw64/arith-fp.stdout.exp + create mode 100644 none/tests/sw64/arith-fp.stdout.exp-8a + create mode 100644 none/tests/sw64/arith-fp.vgtest + create mode 100755 none/tests/sw64/arith-int-imm + create mode 100644 none/tests/sw64/arith-int-imm.c + create mode 100644 none/tests/sw64/arith-int-imm.stderr.exp + create mode 100644 none/tests/sw64/arith-int-imm.stdout.exp + create mode 100644 none/tests/sw64/arith-int-imm.vgtest + create mode 100755 none/tests/sw64/arith-int-reg + create mode 100644 none/tests/sw64/arith-int-reg.c + create mode 100644 none/tests/sw64/arith-int-reg.stderr.exp + create mode 100644 none/tests/sw64/arith-int-reg.stdout.exp + create mode 100644 none/tests/sw64/arith-int-reg.vgtest + create mode 100755 none/tests/sw64/branch + create mode 100644 none/tests/sw64/branch.c + create mode 100644 none/tests/sw64/branch.stderr.exp + create mode 100644 none/tests/sw64/branch.stdout.exp + create mode 100644 none/tests/sw64/branch.vgtest + create mode 100644 none/tests/sw64/common-sw64-standalone.h + create mode 100755 none/tests/sw64/div-by-zero + create mode 100644 none/tests/sw64/div-by-zero.c + create mode 100644 none/tests/sw64/div-by-zero.stderr.exp + create mode 100644 none/tests/sw64/div-by-zero.stdout.exp + create mode 100644 none/tests/sw64/div-by-zero.vgtest + create mode 100755 none/tests/sw64/filter_stderr + create mode 100755 none/tests/sw64/loadstore-fp + create mode 100644 none/tests/sw64/loadstore-fp.c + create mode 100644 none/tests/sw64/loadstore-fp.stderr.exp + create mode 100644 none/tests/sw64/loadstore-fp.stdout.exp + create mode 100644 none/tests/sw64/loadstore-fp.vgtest + create mode 100755 none/tests/sw64/loadstore-lock + create mode 100644 none/tests/sw64/loadstore-lock.c + create mode 100644 none/tests/sw64/loadstore-lock.stderr.exp + create mode 100644 none/tests/sw64/loadstore-lock.stdout.exp + create mode 100644 none/tests/sw64/loadstore-lock.vgtest + create mode 100755 none/tests/sw64/py-hash-double + create mode 100644 none/tests/sw64/py-hash-double.c + create mode 100644 none/tests/sw64/py-hash-double.stderr.exp + create mode 100644 none/tests/sw64/py-hash-double.stdout.exp + create mode 100644 none/tests/sw64/py-hash-double.vgtest + create mode 100755 none/tests/sw64/rcid + create mode 100644 none/tests/sw64/rcid.c + create mode 100644 none/tests/sw64/rcid.stderr.exp + create mode 100644 none/tests/sw64/rcid.vgtest + create mode 100755 none/tests/sw64/rounding + create mode 100644 none/tests/sw64/rounding.c + create mode 100644 none/tests/sw64/rounding.stderr.exp + create mode 100644 none/tests/sw64/rounding.stdout.exp + create mode 100644 none/tests/sw64/rounding.vgtest + create mode 100755 none/tests/sw64/rtc + create mode 100644 none/tests/sw64/rtc.c + create mode 100644 none/tests/sw64/rtc.stderr.exp + create mode 100644 none/tests/sw64/rtc.vgtest + create mode 100755 none/tests/sw64/simd-fp + create mode 100644 none/tests/sw64/simd-fp.c + create mode 100644 none/tests/sw64/simd-fp.stderr.exp + create mode 100644 none/tests/sw64/simd-fp.stdout.exp + create mode 100644 none/tests/sw64/simd-fp.vgtest.disable + create mode 100755 none/tests/sw64/simd-int + create mode 100644 none/tests/sw64/simd-int.c + create mode 100644 none/tests/sw64/simd-int.stderr.exp + create mode 100644 none/tests/sw64/simd-int.stdout.exp + create mode 100644 none/tests/sw64/simd-int.vgtest.disable + create mode 100755 none/tests/sw64/stack + create mode 100644 none/tests/sw64/stack.c + create mode 100644 none/tests/sw64/stack.stderr.exp + create mode 100644 none/tests/sw64/stack.stdout.exp + create mode 100644 none/tests/sw64/stack.vgtest + create mode 100755 none/tests/sw64/unique + create mode 100644 none/tests/sw64/unique.c + create mode 100644 none/tests/sw64/unique.stderr.exp + create mode 100644 none/tests/sw64/unique.stdout.exp + create mode 100644 none/tests/sw64/unique.vgtest + +diff --git a/Makefile.all.am b/Makefile.all.am +index 1de1f13a7..88a0b1c49 100755 +--- a/Makefile.all.am ++++ b/Makefile.all.am +@@ -290,6 +290,12 @@ AM_CFLAGS_PSO_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ + $(AM_CFLAGS_PSO_BASE) + AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g + ++AM_FLAG_M3264_SW64_LINUX = @FLAG_M64@ ++AM_CFLAGS_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_SW64_LINUX = @FLAG_M64@ -g ++ + AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@ + AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ + $(AM_CFLAGS_BASE) -fomit-frame-pointer @SOLARIS_UNDEF_LARGESOURCE@ +@@ -350,6 +356,7 @@ PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ + PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ + PRELOAD_LDFLAGS_NANOMIPS_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ + PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_SW64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ + PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@ + PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@ + +diff --git a/Makefile.tool.am b/Makefile.tool.am +index df9502913..ce22127ff 100644 +--- a/Makefile.tool.am ++++ b/Makefile.tool.am +@@ -80,6 +80,9 @@ TOOL_LDFLAGS_ARM64_LINUX = \ + TOOL_LDFLAGS_S390X_LINUX = \ + $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ + ++TOOL_LDFLAGS_SW64_LINUX = \ ++ $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++ + TOOL_LDFLAGS_X86_DARWIN = \ + $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 + +@@ -167,6 +170,9 @@ LIBREPLACEMALLOC_MIPS32_LINUX = \ + LIBREPLACEMALLOC_MIPS64_LINUX = \ + $(top_builddir)/coregrind/libreplacemalloc_toolpreload-mips64-linux.a + ++LIBREPLACEMALLOC_SW64_LINUX = \ ++ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-sw64-linux.a ++ + LIBREPLACEMALLOC_X86_SOLARIS = \ + $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-solaris.a + +@@ -239,6 +245,11 @@ LIBREPLACEMALLOC_LDFLAGS_MIPS64_LINUX = \ + $(LIBREPLACEMALLOC_MIPS64_LINUX) \ + -Wl,--no-whole-archive + ++LIBREPLACEMALLOC_LDFLAGS_SW64_LINUX = \ ++ -Wl,--whole-archive \ ++ $(LIBREPLACEMALLOC_SW64_LINUX) \ ++ -Wl,--no-whole-archive ++ + LIBREPLACEMALLOC_LDFLAGS_X86_SOLARIS = \ + -Wl,--whole-archive \ + $(LIBREPLACEMALLOC_X86_SOLARIS) \ +diff --git a/Makefile.vex.am b/Makefile.vex.am +index 98d848359..0cc863833 100644 +--- a/Makefile.vex.am ++++ b/Makefile.vex.am +@@ -26,6 +26,7 @@ pkginclude_HEADERS = \ + pub/libvex_guest_s390x.h \ + pub/libvex_guest_mips32.h \ + pub/libvex_guest_mips64.h \ ++ pub/libvex_guest_sw64.h \ + pub/libvex_s390x_common.h \ + pub/libvex_ir.h \ + pub/libvex_trc_values.h \ +@@ -47,6 +48,7 @@ noinst_HEADERS = \ + priv/guest_arm64_defs.h \ + priv/guest_s390_defs.h \ + priv/guest_mips_defs.h \ ++ priv/guest_sw64_defs.h \ + priv/mips_defs.h \ + priv/guest_nanomips_defs.h \ + priv/host_generic_regs.h \ +@@ -60,6 +62,7 @@ noinst_HEADERS = \ + priv/host_arm_defs.h \ + priv/host_arm64_defs.h \ + priv/host_s390_defs.h \ ++ priv/host_sw64_defs.h \ + priv/s390_disasm.h \ + priv/s390_defs.h \ + priv/host_mips_defs.h \ +@@ -93,7 +96,8 @@ pub/libvex_guest_offsets.h: auxprogs/genoffsets.c \ + pub/libvex_guest_arm64.h \ + pub/libvex_guest_s390x.h \ + pub/libvex_guest_mips32.h \ +- pub/libvex_guest_mips64.h ++ pub/libvex_guest_mips64.h \ ++ pub/libvex_guest_sw64.h + rm -f auxprogs/genoffsets.s + $(mkdir_p) auxprogs pub + $(CC) $(CFLAGS_FOR_GENOFFSETS) \ +@@ -151,6 +155,8 @@ LIBVEX_SOURCES_COMMON = \ + priv/guest_mips_toIR.c \ + priv/guest_nanomips_helpers.c \ + priv/guest_nanomips_toIR.c \ ++ priv/guest_sw64_helpers.c \ ++ priv/guest_sw64_toIR.c \ + priv/host_generic_regs.c \ + priv/host_generic_simd64.c \ + priv/host_generic_simd128.c \ +@@ -174,7 +180,9 @@ LIBVEX_SOURCES_COMMON = \ + priv/host_mips_defs.c \ + priv/host_nanomips_defs.c \ + priv/host_mips_isel.c \ +- priv/host_nanomips_isel.c ++ priv/host_nanomips_isel.c \ ++ priv/host_sw64_isel.c \ ++ priv/host_sw64_defs.c + + LIBVEXMULTIARCH_SOURCES = priv/multiarch_main_main.c + +diff --git a/VEX/auxprogs/genoffsets.c b/VEX/auxprogs/genoffsets.c +index 54376dc90..ff595ffba 100644 +--- a/VEX/auxprogs/genoffsets.c ++++ b/VEX/auxprogs/genoffsets.c +@@ -53,6 +53,7 @@ + #include "../pub/libvex_guest_s390x.h" + #include "../pub/libvex_guest_mips32.h" + #include "../pub/libvex_guest_mips64.h" ++#include "../pub/libvex_guest_sw64.h" + + #define VG_STRINGIFZ(__str) #__str + #define VG_STRINGIFY(__str) VG_STRINGIFZ(__str) +@@ -206,7 +207,7 @@ void foo ( void ) + GENOFFSET(MIPS32,mips32,r13); + GENOFFSET(MIPS32,mips32,r14); + GENOFFSET(MIPS32,mips32,r15); +- GENOFFSET(MIPS32,mips32,r15); ++ GENOFFSET(MIPS32,mips32,r16); + GENOFFSET(MIPS32,mips32,r17); + GENOFFSET(MIPS32,mips32,r18); + GENOFFSET(MIPS32,mips32,r19); +@@ -243,7 +244,7 @@ void foo ( void ) + GENOFFSET(MIPS64,mips64,r13); + GENOFFSET(MIPS64,mips64,r14); + GENOFFSET(MIPS64,mips64,r15); +- GENOFFSET(MIPS64,mips64,r15); ++ GENOFFSET(MIPS64,mips64,r16); + GENOFFSET(MIPS64,mips64,r17); + GENOFFSET(MIPS64,mips64,r18); + GENOFFSET(MIPS64,mips64,r19); +@@ -262,6 +263,41 @@ void foo ( void ) + GENOFFSET(MIPS64,mips64,PC); + GENOFFSET(MIPS64,mips64,HI); + GENOFFSET(MIPS64,mips64,LO); ++ ++ //sw64 ++ GENOFFSET(SW64,sw64,r0); ++ GENOFFSET(SW64,sw64,r1); ++ GENOFFSET(SW64,sw64,r2); ++ GENOFFSET(SW64,sw64,r3); ++ GENOFFSET(SW64,sw64,r4); ++ GENOFFSET(SW64,sw64,r5); ++ GENOFFSET(SW64,sw64,r6); ++ GENOFFSET(SW64,sw64,r7); ++ GENOFFSET(SW64,sw64,r8); ++ GENOFFSET(SW64,sw64,r9); ++ GENOFFSET(SW64,sw64,r10); ++ GENOFFSET(SW64,sw64,r11); ++ GENOFFSET(SW64,sw64,r12); ++ GENOFFSET(SW64,sw64,r13); ++ GENOFFSET(SW64,sw64,r14); ++ GENOFFSET(SW64,sw64,r15); ++ GENOFFSET(SW64,sw64,r16); ++ GENOFFSET(SW64,sw64,r17); ++ GENOFFSET(SW64,sw64,r18); ++ GENOFFSET(SW64,sw64,r19); ++ GENOFFSET(SW64,sw64,r20); ++ GENOFFSET(SW64,sw64,r21); ++ GENOFFSET(SW64,sw64,r22); ++ GENOFFSET(SW64,sw64,r23); ++ GENOFFSET(SW64,sw64,r24); ++ GENOFFSET(SW64,sw64,r25); ++ GENOFFSET(SW64,sw64,r26); ++ GENOFFSET(SW64,sw64,r27); ++ GENOFFSET(SW64,sw64,r28); ++ GENOFFSET(SW64,sw64,r29); ++ GENOFFSET(SW64,sw64,r30); ++ GENOFFSET(SW64,sw64,r31); ++ GENOFFSET(SW64,sw64,PC); + } + + /*--------------------------------------------------------------------*/ +diff --git a/VEX/priv/guest_generic_bb_to_IR.c b/VEX/priv/guest_generic_bb_to_IR.c +index 1e72ddacd..c0cd2fc21 100644 +--- a/VEX/priv/guest_generic_bb_to_IR.c ++++ b/VEX/priv/guest_generic_bb_to_IR.c +@@ -994,7 +994,7 @@ static IRSB* disassemble_basic_block_till_stop( + imark->Ist.IMark.len = dres.len; + + /* Print the resulting IR, if needed. */ +- if (vex_traceflags & VEX_TRACE_FE) { ++ if (vex_traceflags & VEX_TRACE_FE /* debug logger */) { + for (Int i = first_stmt_idx; i < irbb->stmts_used; i++) { + vex_printf(" "); + ppIRStmt(irbb->stmts[i]); +diff --git a/VEX/priv/guest_sw64_defs.h b/VEX/priv/guest_sw64_defs.h +new file mode 100644 +index 000000000..0fe137bb8 +--- /dev/null ++++ b/VEX/priv/guest_sw64_defs.h +@@ -0,0 +1,81 @@ ++/*---------------------------------------------------------------*/ ++/*--- begin guest_sw64_defs.h ---*/ ++/*---------------------------------------------------------------*/ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2013-2017 OpenWorks ++ info@open-works.net ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#ifndef __VEX_GUEST_SW64_DEFS_H ++#define __VEX_GUEST_SW64_DEFS_H ++ ++#include "libvex_basictypes.h" ++#include "libvex_guest_sw64.h" // VexGuestSW64State ++#include "guest_generic_bb_to_IR.h" // DisResult ++ ++/*---------------------------------------------------------*/ ++/*--- sw64 to IR conversion ---*/ ++/*---------------------------------------------------------*/ ++ ++/* Convert one SW64 insn to IR. See the type DisOneInstrFn in ++ guest_generic_bb_to_IR.h. */ ++ ++/* SW_NOT_COMPLETE */ ++extern ++DisResult disInstr_SW64 ( IRSB* irbb, ++ const UChar* guest_code, ++ Long delta, ++ Addr guest_IP, ++ VexArch guest_arch, ++ const VexArchInfo* archinfo, ++ const VexAbiInfo* abiinfo, ++ VexEndness host_endness, ++ Bool sigill_diag ); ++ ++extern ++Bool guest_sw64_state_requires_precise_mem_exns (Int, Int, ++ VexRegisterUpdates ); ++ ++extern IRExpr *guest_sw64_spechelper ( const HChar * function_name, ++ IRExpr ** args, ++ IRStmt ** precedingStmts, ++ Int n_precedingStmts); ++ ++extern void sw64_dirtyhelper_write_lockflag(void* gs, ULong src); ++ ++extern ULong sw64_dirtyhelper_rtc(void* gs); ++extern ULong sw64_dirtyhelper_rcid(void* gs); ++extern ULong sw64_dirtyhelper_calc_crc32b ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32h ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32w ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32l ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32cb ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32ch ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32cw ( ULong acc, ULong bits ); ++extern ULong sw64_dirtyhelper_calc_crc32cl ( ULong acc, ULong bits ); ++ ++extern VexGuestLayout sw64Guest_layout; ++ ++#endif /* __VEX_GUEST_SW64_DEFS_H */ ++ ++/*---------------------------------------------------------------*/ ++/*--- end guest_sw64_defs.h ---*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/priv/guest_sw64_helpers.c b/VEX/priv/guest_sw64_helpers.c +new file mode 100644 +index 000000000..5ae65e4f5 +--- /dev/null ++++ b/VEX/priv/guest_sw64_helpers.c +@@ -0,0 +1,312 @@ ++ ++/*---------------------------------------------------------------*/ ++/*--- begin guest_sw64_helpers.c ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "libvex_basictypes.h" ++#include "libvex_guest_sw64.h" ++#include "libvex_ir.h" ++#include "libvex.h" ++ ++#include "main_util.h" ++#include "main_globals.h" ++#include "guest_generic_bb_to_IR.h" ++#include "guest_sw64_defs.h" ++ ++void LibVEX_GuestSW64_initialise ( /*OUT*/ VexGuestSW64State * vex_state ) ++{ ++ vex_state->guest_r0 = 0; /* Values for function returns */ ++ vex_state->guest_r1 = 0; /* Temporaries */ /* t0-t7 */ ++ vex_state->guest_r2 = 0; ++ vex_state->guest_r3 = 0; ++ vex_state->guest_r4 = 0; ++ vex_state->guest_r5 = 0; ++ vex_state->guest_r6 = 0; ++ vex_state->guest_r7 = 0; ++ vex_state->guest_r8 = 0; ++ vex_state->guest_r9 = 0; /* Saved temporaries */ /* s0-s5 */ ++ vex_state->guest_r10 = 0; ++ vex_state->guest_r11 = 0; ++ vex_state->guest_r12 = 0; ++ vex_state->guest_r13 = 0; ++ vex_state->guest_r14 = 0; ++ vex_state->guest_r15 = 0; /* Frame pointer */ ++ vex_state->guest_r16 = 0; /* Function arguments */ /* a0-a5 */ ++ vex_state->guest_r17 = 0; ++ vex_state->guest_r18 = 0; ++ vex_state->guest_r19 = 0; ++ vex_state->guest_r20 = 0; ++ vex_state->guest_r21 = 0; ++ vex_state->guest_r22 = 0; /* Temporaries */ /* t8-t11 */ ++ vex_state->guest_r23 = 0; ++ vex_state->guest_r24 = 0; ++ vex_state->guest_r25 = 0; ++ vex_state->guest_r26 = 0; /* Return address */ ++ vex_state->guest_r27 = 0; /* Procedure value */ ++ vex_state->guest_r28 = 0; /* Assembler temporary */ ++ vex_state->guest_r29 = 0; /* Global pointer */ ++ vex_state->guest_r30 = 0; /* Stack pointer */ ++ vex_state->guest_r31 = 0; /* Hardwired to 0. */ ++ vex_state->guest_PC = 0; /* Program counter */ ++ vex_state->guest_CSR = 0; ++ ++ /* FPU Registers */ ++ vex_state->guest_f0 = 0x7ff800007ff80000ULL; /* Floting point registers */ ++ vex_state->guest_f1 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f2 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f3 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f4 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f5 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f6 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f7 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f8 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f9 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f10 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f11 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f12 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f13 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f14 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f15 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f16 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f17 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f18 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f19 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f20 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f21 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f22 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f23 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f24 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f25 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f26 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f27 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f28 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f29 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f30 = 0x7ff800007ff80000ULL; ++ vex_state->guest_f31 = 0x7ff800007ff80000ULL; ++ ++ vex_state->guest_FPCR = 0x680e000000000000ULL; /* FP control/status register */ ++ ++ /* Various pseudo-regs mandated by Vex or Valgrind. */ ++ /* Emulation notes */ ++ vex_state->guest_EMNOTE = 0; ++ ++ /* For clflush: record start and length of area to invalidate */ ++ vex_state->guest_CMSTART = 0; ++ vex_state->guest_CMLEN = 0; ++ vex_state->host_EvC_COUNTER = 0; ++ vex_state->host_EvC_FAILADDR = 0; ++ ++ /* Used to record the unredirected guest address at the start of ++ a translation whose start has been redirected. By reading ++ this pseudo-register shortly afterwards, the translation can ++ find out what the corresponding no-redirection address was. ++ Note, this is only set for wrap-style redirects, not for ++ replace-style ones. */ ++ vex_state->guest_NRADDR = 0; ++} ++ ++Bool guest_sw64_state_requires_precise_mem_exns ( ++ Int minoff, Int maxoff, VexRegisterUpdates pxControl ++ ) ++{ ++ Int sp_min = offsetof(VexGuestSW64State, guest_r30); ++ Int sp_max = sp_min + 8 - 1; ++ Int pc_min = offsetof(VexGuestSW64State, guest_PC); ++ Int pc_max = pc_min + 8 - 1; ++ ++ if ( maxoff < sp_min || minoff > sp_max ) { ++ /* no overlap with sp */ ++ if (pxControl == VexRegUpdSpAtMemAccess) ++ return False; /* We only need to check stack pointer. */ ++ } else { ++ return True; ++ } ++ ++ if ( maxoff < pc_min || minoff > pc_max ) { ++ /* no overlap with pc */ ++ } else { ++ return True; ++ } ++ ++ Int fp_min = offsetof(VexGuestSW64State, guest_r15); ++ Int fp_max = fp_min + 8 - 1; ++ ++ if ( maxoff < fp_min || minoff > fp_max ) { ++ /* no overlap with fp */ ++ } else { ++ return True; ++ } ++ ++ return False; ++} ++ ++IRExpr *guest_sw64_spechelper ( const HChar * function_name, IRExpr ** args, ++ IRStmt ** precedingStmts, ++ Int n_precedingStmts ) ++{ ++ return NULL; ++} ++ ++ ++#define ALWAYSDEFD64(field) \ ++ { offsetof(VexGuestSW64State, field), \ ++ (sizeof ((VexGuestSW64State*)0)->field) } ++VexGuestLayout sw64Guest_layout = { ++ /* Total size of the guest state, in bytes. */ ++ .total_sizeB = sizeof(VexGuestSW64State), ++ /* Describe the stack pointer. */ ++ .offset_SP = offsetof(VexGuestSW64State, guest_r30), ++ .sizeof_SP = 8, ++ /* Describe the frame pointer. */ ++ .offset_FP = offsetof(VexGuestSW64State, guest_r15), ++ .sizeof_FP = 8, ++ /* Describe the instruction pointer. */ ++ .offset_IP = offsetof(VexGuestSW64State, guest_PC), ++ .sizeof_IP = 8, ++ /* Describe any sections to be regarded by Memcheck as ++ 'always-defined'. */ ++ .n_alwaysDefd = 6, ++ /* ? :( */ ++ .alwaysDefd = { ++ /* 0 */ ALWAYSDEFD64 (guest_r31), ++ /* 1 */ ALWAYSDEFD64 (guest_f31), ++ /* 2 */ ALWAYSDEFD64 (guest_EMNOTE), ++ /* 3 */ ALWAYSDEFD64 (guest_CMSTART), ++ /* 4 */ ALWAYSDEFD64 (guest_CMLEN), ++ /* 5 */ ALWAYSDEFD64 (guest_NRADDR), ++ } ++}; ++#undef ALWAYSDEFD64 ++ ++extern void sw64_dirtyhelper_write_lockflag(void* gs, ULong src) ++{ ++ VexGuestSW64State *guest_state = (VexGuestSW64State *)gs; ++ ULong *addr = (ULong*)&guest_state->guest_r0; ++#if defined(VGP_sw64_linux) ++ __asm__ volatile ( ++ ".set noreorder" "\n\t" ++ "wr_f %0" "\n\t" ++ : ++ : "r" ((addr[src])) ++ ); ++#endif ++} ++ ++/* On non-sw64 platforms, return 1. */ ++ULong sw64_dirtyhelper_rtc(void* gs) { ++#if defined(VGP_sw64_linux) ++ ULong tc = 0; ++ __asm__ volatile ("rtc %0" : "=r" (tc) : :); ++ return tc; ++#else ++ return 1UL; ++#endif ++} ++ ++ULong sw64_dirtyhelper_rcid(void* gs) { ++#if defined(VGP_sw64_linux) ++ ULong cid = 0; ++ __asm__ volatile ("rcid %0" : "=r" (cid) : :); ++ return cid; ++#else ++ return 0UL; ++#endif ++} ++ ++ULong sw64_dirtyhelper_calc_crc32b ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 8; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0xEDB88320ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32h ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 16; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0xEDB88320ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32w ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFFFFFFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 32; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0xEDB88320ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32l ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = bits ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 64; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0xEDB88320ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32cb ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 8; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0x82F63B78ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32ch ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 16; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0x82F63B78ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32cw ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = (bits & 0xFFFFFFFFULL) ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 32; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0x82F63B78ULL : 0); ++ return crc; ++} ++ ++ULong sw64_dirtyhelper_calc_crc32cl ( ULong acc, ULong bits ) ++{ ++ UInt i; ++ ULong crc = bits ^ (acc & 0xFFFFFFFFULL); ++ for (i = 0; i < 64; i++) ++ crc = (crc >> 1) ^ ((crc & 1) ? 0x82F63B78ULL : 0); ++ return crc; ++} ++ ++/*---------------------------------------------------------------*/ ++/*--- end guest_sw64_helpers.c ---*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/priv/guest_sw64_toIR.c b/VEX/priv/guest_sw64_toIR.c +new file mode 100644 +index 000000000..2e3244191 +--- /dev/null ++++ b/VEX/priv/guest_sw64_toIR.c +@@ -0,0 +1,3496 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- begin guest_arm64_toIR.c ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2013-2017 OpenWorks ++ info@open-works.net ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++/* Translates SW64 code to IR. */ ++ ++#include "libvex_basictypes.h" ++#include "libvex_ir.h" ++#include "libvex.h" ++#include "libvex_guest_sw64.h" ++ ++#include "main_util.h" ++#include "main_globals.h" ++#include "guest_generic_bb_to_IR.h" ++#include "guest_sw64_defs.h" ++ ++/*------------------------------------------------------------*/ ++/*--- Globals ---*/ ++/*------------------------------------------------------------*/ ++ ++/* These are set at the start of the translation of a instruction, so ++ that we don't have to pass them around endlessly. CONST means does ++ not change during translation of the instruction. ++*/ ++ ++/* CONST: what is the host's endianness? We need to know this in ++ order to do sub-register accesses to the SIMD/FP registers ++ correctly. */ ++static VexEndness host_endness; ++ ++/* CONST: The guest address for the instruction currently being ++ translated. */ ++static Addr64 guest_PC_curr_instr; ++ ++/* MOD: The IRSB* into which we're generating code. */ ++static IRSB* irsb; ++ ++ ++ ++/*------------------------------------------------------------*/ ++/*--- Helpers for accessing guest registers. ---*/ ++/*------------------------------------------------------------*/ ++ ++#define OFFB_r0 offsetof(VexGuestSW64State,guest_r0) ++#define OFFB_r1 offsetof(VexGuestSW64State,guest_r1) ++#define OFFB_r2 offsetof(VexGuestSW64State,guest_r2) ++#define OFFB_r3 offsetof(VexGuestSW64State,guest_r3) ++#define OFFB_r4 offsetof(VexGuestSW64State,guest_r4) ++#define OFFB_r5 offsetof(VexGuestSW64State,guest_r5) ++#define OFFB_r6 offsetof(VexGuestSW64State,guest_r6) ++#define OFFB_r7 offsetof(VexGuestSW64State,guest_r7) ++#define OFFB_r8 offsetof(VexGuestSW64State,guest_r8) ++#define OFFB_r9 offsetof(VexGuestSW64State,guest_r9) ++#define OFFB_r10 offsetof(VexGuestSW64State,guest_r10) ++#define OFFB_r11 offsetof(VexGuestSW64State,guest_r11) ++#define OFFB_r12 offsetof(VexGuestSW64State,guest_r12) ++#define OFFB_r13 offsetof(VexGuestSW64State,guest_r13) ++#define OFFB_r14 offsetof(VexGuestSW64State,guest_r14) ++#define OFFB_r15 offsetof(VexGuestSW64State,guest_r15) ++#define OFFB_r16 offsetof(VexGuestSW64State,guest_r16) ++#define OFFB_r17 offsetof(VexGuestSW64State,guest_r17) ++#define OFFB_r18 offsetof(VexGuestSW64State,guest_r18) ++#define OFFB_r19 offsetof(VexGuestSW64State,guest_r19) ++#define OFFB_r20 offsetof(VexGuestSW64State,guest_r20) ++#define OFFB_r21 offsetof(VexGuestSW64State,guest_r21) ++#define OFFB_r22 offsetof(VexGuestSW64State,guest_r22) ++#define OFFB_r23 offsetof(VexGuestSW64State,guest_r23) ++#define OFFB_r24 offsetof(VexGuestSW64State,guest_r24) ++#define OFFB_r25 offsetof(VexGuestSW64State,guest_r25) ++#define OFFB_r26 offsetof(VexGuestSW64State,guest_r26) ++#define OFFB_r27 offsetof(VexGuestSW64State,guest_r27) ++#define OFFB_r28 offsetof(VexGuestSW64State,guest_r28) ++#define OFFB_r29 offsetof(VexGuestSW64State,guest_r29) ++#define OFFB_r30 offsetof(VexGuestSW64State,guest_r30) ++#define OFFB_r31 offsetof(VexGuestSW64State,guest_r31) ++#define OFFB_PC offsetof(VexGuestSW64State,guest_PC) ++#define OFFB_CSR offsetof(VexGuestSW64State,guest_CSR) ++ ++#define OFFB_f0 offsetof(VexGuestSW64State,guest_f0) ++#define OFFB_f1 offsetof(VexGuestSW64State,guest_f1) ++#define OFFB_f2 offsetof(VexGuestSW64State,guest_f2) ++#define OFFB_f3 offsetof(VexGuestSW64State,guest_f3) ++#define OFFB_f4 offsetof(VexGuestSW64State,guest_f4) ++#define OFFB_f5 offsetof(VexGuestSW64State,guest_f5) ++#define OFFB_f6 offsetof(VexGuestSW64State,guest_f6) ++#define OFFB_f7 offsetof(VexGuestSW64State,guest_f7) ++#define OFFB_f8 offsetof(VexGuestSW64State,guest_f8) ++#define OFFB_f9 offsetof(VexGuestSW64State,guest_f9) ++#define OFFB_f10 offsetof(VexGuestSW64State,guest_f10) ++#define OFFB_f11 offsetof(VexGuestSW64State,guest_f11) ++#define OFFB_f12 offsetof(VexGuestSW64State,guest_f12) ++#define OFFB_f13 offsetof(VexGuestSW64State,guest_f13) ++#define OFFB_f14 offsetof(VexGuestSW64State,guest_f14) ++#define OFFB_f15 offsetof(VexGuestSW64State,guest_f15) ++#define OFFB_f16 offsetof(VexGuestSW64State,guest_f16) ++#define OFFB_f17 offsetof(VexGuestSW64State,guest_f17) ++#define OFFB_f18 offsetof(VexGuestSW64State,guest_f18) ++#define OFFB_f19 offsetof(VexGuestSW64State,guest_f19) ++#define OFFB_f20 offsetof(VexGuestSW64State,guest_f20) ++#define OFFB_f21 offsetof(VexGuestSW64State,guest_f21) ++#define OFFB_f22 offsetof(VexGuestSW64State,guest_f22) ++#define OFFB_f23 offsetof(VexGuestSW64State,guest_f23) ++#define OFFB_f24 offsetof(VexGuestSW64State,guest_f24) ++#define OFFB_f25 offsetof(VexGuestSW64State,guest_f25) ++#define OFFB_f26 offsetof(VexGuestSW64State,guest_f26) ++#define OFFB_f27 offsetof(VexGuestSW64State,guest_f27) ++#define OFFB_f28 offsetof(VexGuestSW64State,guest_f28) ++#define OFFB_f29 offsetof(VexGuestSW64State,guest_f29) ++#define OFFB_f30 offsetof(VexGuestSW64State,guest_f30) ++#define OFFB_f31 offsetof(VexGuestSW64State,guest_f31) ++#define OFFB_FPCR offsetof(VexGuestSW64State,guest_FPCR) ++ ++#define OFFB_EMNOTE offsetof(VexGuestSW64State,guest_EMNOTE) ++#define OFFB_CMSTART offsetof(VexGuestSW64State,guest_CMSTART) ++#define OFFB_CMLEN offsetof(VexGuestSW64State,guest_CMLEN) ++#define OFFB_NRADDR offsetof(VexGuestSW64State,guest_NRADDR) ++ ++#define OFFB_LOCKFLAG offsetof(VexGuestSW64State,guest_LOCKFLAG) ++#define OFFB_LOCKVALID offsetof(VexGuestSW64State,guest_LOCKVALID) ++#define OFFB_LOCKSUCCESS offsetof(VexGuestSW64State,guest_LOCKSUCCESS) ++#define OFFB_LOCKSIZE offsetof(VexGuestSW64State,guest_LOCKSIZE) ++#define OFFB_LOCKADDR offsetof(VexGuestSW64State,guest_LOCKADDR) ++#define OFFB_LOCKDATA offsetof(VexGuestSW64State,guest_LOCKDATA) ++ ++#define OFFB_TID offsetof(VexGuestSW64State, guest_TID) ++ ++/* ---------------- Integer registers ---------------- */ ++ ++static Int offsetIReg ( UInt iregNo ) ++{ ++ switch (iregNo) { ++ case 0: return OFFB_r0; ++ case 1: return OFFB_r1; ++ case 2: return OFFB_r2; ++ case 3: return OFFB_r3; ++ case 4: return OFFB_r4; ++ case 5: return OFFB_r5; ++ case 6: return OFFB_r6; ++ case 7: return OFFB_r7; ++ case 8: return OFFB_r8; ++ case 9: return OFFB_r9; ++ case 10: return OFFB_r10; ++ case 11: return OFFB_r11; ++ case 12: return OFFB_r12; ++ case 13: return OFFB_r13; ++ case 14: return OFFB_r14; ++ case 15: return OFFB_r15; ++ case 16: return OFFB_r16; ++ case 17: return OFFB_r17; ++ case 18: return OFFB_r18; ++ case 19: return OFFB_r19; ++ case 20: return OFFB_r20; ++ case 21: return OFFB_r21; ++ case 22: return OFFB_r22; ++ case 23: return OFFB_r23; ++ case 24: return OFFB_r24; ++ case 25: return OFFB_r25; ++ case 26: return OFFB_r26; ++ case 27: return OFFB_r27; ++ case 28: return OFFB_r28; ++ case 29: return OFFB_r29; ++ case 30: return OFFB_r30; ++ case 31: return OFFB_r31; ++ default: vassert(0); ++ } ++} ++ ++/* ---------------- Float registers ---------------- */ ++ ++static Int offsetFReg ( UInt iregNo ) ++{ ++ switch (iregNo) { ++ case 0: return OFFB_f0; ++ case 1: return OFFB_f1; ++ case 2: return OFFB_f2; ++ case 3: return OFFB_f3; ++ case 4: return OFFB_f4; ++ case 5: return OFFB_f5; ++ case 6: return OFFB_f6; ++ case 7: return OFFB_f7; ++ case 8: return OFFB_f8; ++ case 9: return OFFB_f9; ++ case 10: return OFFB_f10; ++ case 11: return OFFB_f11; ++ case 12: return OFFB_f12; ++ case 13: return OFFB_f13; ++ case 14: return OFFB_f14; ++ case 15: return OFFB_f15; ++ case 16: return OFFB_f16; ++ case 17: return OFFB_f17; ++ case 18: return OFFB_f18; ++ case 19: return OFFB_f19; ++ case 20: return OFFB_f20; ++ case 21: return OFFB_f21; ++ case 22: return OFFB_f22; ++ case 23: return OFFB_f23; ++ case 24: return OFFB_f24; ++ case 25: return OFFB_f25; ++ case 26: return OFFB_f26; ++ case 27: return OFFB_f27; ++ case 28: return OFFB_f28; ++ case 29: return OFFB_f29; ++ case 30: return OFFB_f30; ++ case 31: return OFFB_f31; ++ default: vassert(0); ++ } ++} ++ ++/*------------------------------------------------------------*/ ++/*--- Debugging output ---*/ ++/*------------------------------------------------------------*/ ++ ++#define DIP(format, args...) \ ++ if (vex_traceflags & VEX_TRACE_FE) \ ++ vex_printf(format, ## args) ++ ++#define DIS(buf, format, args...) \ ++ if (vex_traceflags & VEX_TRACE_FE) \ ++ vex_sprintf(buf, format, ## args) ++ ++/*------------------------------------------------------------*/ ++/*--- Helper bits and pieces for deconstructing the ---*/ ++/*--- arm insn stream. ---*/ ++/*------------------------------------------------------------*/ ++ ++/* Do a little-endian load of a 32-bit word, regardless of the ++ endianness of the underlying host. */ ++static inline UInt fetch32 ( const UChar* p ) ++{ ++ UInt w = 0; ++ w = (w << 8) | p[3]; ++ w = (w << 8) | p[2]; ++ w = (w << 8) | p[1]; ++ w = (w << 8) | p[0]; ++ return w; ++} ++ ++/* Sign extend a N-bit value up to 64 bits, by copying ++ bit N-1 into all higher positions. */ ++static ULong SEXT_to_64 ( ULong x, UInt n ) ++{ ++ vassert(n > 1 && n < 64); ++ x <<= (64-n); ++ Long r = (Long)x; ++ r >>= (64-n); ++ return (ULong)r; ++} ++ ++static inline UInt extract(UInt instr, Int l, Int r) ++{ ++ vassert(l >= 0 && l <= 31); ++ vassert(r >= 0 && r <= 31); ++ vassert(l >= r); ++ return (instr << (31 - l)) >> (r + 31 - l); ++} ++ ++/*------------------------------------------------------------*/ ++/*--- Helper bits and pieces for getting imm, ra, rb, disp ---*/ ++/*------------------------ in different intructions format.---*/ ++/*------------------------------------------------------------*/ ++///branch insn format ++ /*|31 26 | 25 21 | 20 0|*/ ++ /*| opcode | ra | disp |*/ ++ ++///load/store insn format ++ /*|31 26 | 25 21 | 20 16| 15 0|*/ ++ /*| opcode | ra | rb | disp |*/ ++ ++///simple calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 5| 4 0|*/ ++ /*| opcode | ra | rb | 000 | function | rc |*/ //register ++ /*| opcode | ra | imm | function | rc |*/ //immediate ++ ++///complex integer calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 10| 9 5 | 4 0 |*/ ++ /*| opcode | ra | rb | 000 | function | rc | rd |*/ //register ++ /*| opcode | ra | imm | function | rc | rd |*/ //immediate ++ ++///complex float calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 10 |9 5| 4 0|*/ ++ /*| opcode | fa | fb | func | fc | fd |*/ //register ++ /*| opcode | fa | fb | func | imm | fd |*/ //immediate ++ ++/*------------------------------------------------------------*/ ++/*--- Helper bits and pieces for creating IR fragments. ---*/ ++/*------------------------------------------------------------*/ ++ ++static IRExpr* mkU8 ( UInt i ) ++{ ++ vassert(i < 256); ++ return IRExpr_Const(IRConst_U8( (UChar)i )); ++} ++static IRExpr* mkU32 ( UInt i ) ++{ ++ return IRExpr_Const(IRConst_U32(i)); ++} ++static IRExpr* mkU64 ( ULong i ) ++{ ++ return IRExpr_Const(IRConst_U64(i)); ++} ++static IRExpr* mkF64 ( Double i ) ++{ ++ return IRExpr_Const(IRConst_F64(i)); ++} ++/* Generate a new temporary of the given type. */ ++static IRTemp newTemp ( IRType ty ) ++{ ++ vassert(isPlausibleIRType(ty)); ++ return newIRTemp( irsb->tyenv, ty ); ++} ++static IRExpr* mkexpr ( IRTemp tmp ) ++{ ++ return IRExpr_RdTmp(tmp); ++} ++static IRExpr* unop ( IROp op, IRExpr* a ) ++{ ++ return IRExpr_Unop(op, a); ++} ++ ++static IRExpr* binop ( IROp op, IRExpr* a1, IRExpr* a2 ) ++{ ++ return IRExpr_Binop(op, a1, a2); ++} ++ ++static IRExpr* triop ( IROp op, IRExpr* a1, IRExpr* a2, IRExpr* a3 ) ++{ ++ return IRExpr_Triop(op, a1, a2, a3); ++} ++ ++static IRExpr* quaop( IROp op, IRExpr* a1, IRExpr* a2, IRExpr* a3, IRExpr* a4 ) ++{ ++ return IRExpr_Qop(op, a1, a2, a3, a4); ++} ++ ++static IRExpr* mkshiftbits( IRExpr* e ) ++{ ++ vassert(typeOfIRExpr(irsb->tyenv, e) == Ity_I64); ++ return binop(Iop_And8, unop(Iop_64to8, e), mkU8(0x3F)); ++} ++ ++static IRExpr* mkshiftbits32( IRExpr* e ) ++{ ++ vassert(typeOfIRExpr(irsb->tyenv, e) == Ity_I64); ++ return binop(Iop_And8, unop(Iop_64to8, e), mkU8(0x1F)); ++} ++ ++/*------------------------------------------------------------*/ ++/*--- Helper pieces of statement and expression. ---*/ ++/*------------------------------------------------------------*/ ++/* Add a statement to the list held by "irbb". */ ++static void stmt ( IRStmt* st ) ++{ ++ addStmtToIRSB( irsb, st ); ++} ++ ++static void assign ( IRTemp dst, IRExpr* e ) ++{ ++ stmt( IRStmt_WrTmp(dst, e) ); ++} ++ ++static void putPC ( IRExpr* e ) ++{ ++ vassert(typeOfIRExpr(irsb->tyenv, e) == Ity_I64); ++ stmt( IRStmt_Put(OFFB_PC, e) ); ++} ++ ++static IRExpr* getIReg ( UInt iregNo ) ++{ ++ vassert(iregNo < 32); ++ if(iregNo == 31) ++ return mkU64(0); ++ else ++ return IRExpr_Get( offsetIReg(iregNo), Ity_I64 ); ++} ++ ++static void putIReg ( UInt iregNo, IRExpr* e ) ++{ ++ vassert(iregNo < 32); ++ vassert(typeOfIRExpr(irsb->tyenv, e) == Ity_I64); ++ if (iregNo == 31) ++ stmt( IRStmt_NoOp() ); ++ else ++ stmt( IRStmt_Put(offsetIReg(iregNo), e) ); ++} ++ ++static IRExpr* getFReg ( UInt fegNo ) ++{ ++ vassert(fegNo < 32); ++ if(fegNo == 31) ++ return mkF64(0); ++ else ++ return IRExpr_Get( offsetFReg(fegNo), Ity_F64 ); ++} ++ ++static void putFReg ( UInt fegNo, IRExpr* e ) ++{ ++ vassert(fegNo < 32); ++ vassert(typeOfIRExpr(irsb->tyenv, e) == Ity_F64); ++ if (fegNo == 31) ++ stmt( IRStmt_NoOp() ); ++ else ++ stmt( IRStmt_Put(offsetFReg(fegNo), e) ); ++} ++ ++static inline IRExpr* load(IRType ty, IRExpr* addr) ++{ ++ return IRExpr_Load(Iend_LE, ty, addr); ++} ++static inline void store(IRExpr* addr, IRExpr* data) ++{ ++ stmt( IRStmt_Store(Iend_LE, addr, data)); ++} ++ ++/* U-widen 8/16/32/64 bit int expr to 64. */ ++static IRExpr* widenUto64 ( IRType srcTy, IRExpr* e ) ++{ ++ switch (srcTy) { ++ case Ity_I64: return e; ++ case Ity_I32: return unop(Iop_32Uto64, e); ++ case Ity_I16: return unop(Iop_16Uto64, e); ++ case Ity_I8: return unop(Iop_8Uto64, e); ++ default: vpanic("widenUto64(sw64)"); ++ } ++} ++ ++/* Narrow 64 bit int expr to 8/16/32/64. Clearly only some ++ of these combinations make sense. */ ++static IRExpr* narrowFrom64 ( IRType dstTy, IRExpr* e ) ++{ ++ switch (dstTy) { ++ case Ity_I64: return e; ++ case Ity_I32: return unop(Iop_64to32, e); ++ case Ity_I16: return unop(Iop_64to16, e); ++ case Ity_I8: return unop(Iop_64to8, e); ++ default: vpanic("narrowFrom64(sw64)"); ++ } ++} ++ ++static void condexit(IRExpr *cond, Addr iftrue) ++{ ++ vassert(typeOfIRExpr(irsb->tyenv, cond) == Ity_I1); ++ stmt(IRStmt_Exit(cond, ++ Ijk_Boring, ++ IRConst_U64(iftrue), ++ OFFB_PC)); ++} ++ ++/* ++ Check instruction is any one of below ++ 00 f0 fe af stl $r31,-4096(sp) ++ 00 d0 fe af stl $r31,-12288(sp) ++ 00 b0 fe af stl $r31,-20480(sp) ++ 00 90 fe af stl $r31,-28672(sp) ++ ++ Or is this sequence ++ 00 e0 f6 af stl $r31,-8192($r22) ++ 37 21 e0 4a subl $r23,0x1,$r23 ++ 00 e0 d6 fa ldi $r22,-8192($r22) ++ fc ff ff c6 bne $r23,-4 ++ ?? ?? d6 fb ldi sp,-n($r22) ++*/ ++static Bool is_stack_probe(const UChar* instr) ++{ ++ if (fetch32(instr) == 0xaffef000) { ++ return True; ++ } ++ if (fetch32(instr) == 0xaffed000) { ++ return True; ++ } ++ if (fetch32(instr) == 0xaffeb000) { ++ return True; ++ } ++ if (fetch32(instr) == 0xaffe9000) { ++ return True; ++ } ++ ++ if (fetch32(instr + 0) == 0xaff6e000 && ++ fetch32(instr + 4) == 0x4ae02137 && ++ fetch32(instr + 8) == 0xfad6e000 && ++ fetch32(instr + 12) == 0xc6fffffc && ++ fetch32(instr + 16) >> 16 == 0xfbd6) { ++ return True; ++ } ++ ++ return False; ++} ++ ++/* Generate IR for ((x & mask) >>u sh) | ((x << sh) & mask) */ ++static IRTemp math_SWAPHELPER ( IRTemp x, ULong mask, Int sh ) ++{ ++ IRTemp maskT = newTemp(Ity_I64); ++ IRTemp res = newTemp(Ity_I64); ++ vassert(sh >= 1 && sh <= 63); ++ assign(maskT, mkU64(mask)); ++ assign( res, ++ binop(Iop_Or64, ++ binop(Iop_Shr64, ++ binop(Iop_And64,mkexpr(x),mkexpr(maskT)), ++ mkU8(sh)), ++ binop(Iop_And64, ++ binop(Iop_Shl64,mkexpr(x),mkU8(sh)), ++ mkexpr(maskT)) ++ ) ++ ); ++ return res; ++} ++ ++/*------------------------------------------------------------*/ ++/*--- Front-End translate ---*/ ++/*------------------------------------------------------------*/ ++ ++static Bool dis_SW64_syscall(DisResult* dres, UInt insn) ++{ ++ UInt hmc = extract(insn, 7, 0); ++ ++ HChar const *desc; ++ switch (hmc) { ++ case 0x83: desc = "syscall"; break; ++ case 0x9e: desc = "read_unique"; break; ++ case 0x9f: desc = "write_unique"; break; ++ case 0x87: desc = "rwreg"; break; ++ case 0x86: desc = "imb"; break; ++ case 0x81: desc = "bugchk"; break; ++ case 0x80: desc = "bpt"; break; ++ case 0xaa: desc = "gentrap"; break; ++ case 0x02: desc = "draina"; break; ++ case 0x00: desc = "halt"; break; ++ default: return False; ++ } ++ ++ DIP("sys_call 0x%x: %s\n", hmc, desc); ++ ++ switch (hmc) { ++ case 0x83: /* syscall */ ++ putPC(mkU64(guest_PC_curr_instr + 4)); ++ dres->jk_StopHere = Ijk_Sys_syscall; ++ dres->whatNext = Dis_StopHere; ++ break; ++ case 0x9e: /* read_unique: r0 <- unique */ ++ putIReg(0, IRExpr_Get(OFFB_TID, Ity_I64)); ++ break; ++ case 0x9f: /* write_unique: unique <- r16 */ ++ stmt(IRStmt_Put(OFFB_TID, getIReg(16))); ++ break; ++ case 0x86: /* imb */ ++ stmt(IRStmt_MBE(Imbe_Fence)); ++ break; ++ case 0xaa: /* gentrap: raise SIGFPE */ ++ putPC(mkU64(guest_PC_curr_instr + 4)); ++ dres->whatNext = Dis_StopHere; ++ dres->jk_StopHere = Ijk_SigFPE_IntDiv; ++ break; ++ case 0x87: /* rwreg: marked as deprecated */ ++ case 0x81: /* bugchk: not implemented in kernel */ ++ case 0x80: /* bpt: not implemented in kernel */ ++ case 0x02: /* draina: not used and will not be implemented */ ++ case 0x00: /* halt: simply do nothings */ ++ stmt(IRStmt_NoOp()); ++ break; ++ default: ++ return False; ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_branch(DisResult* dres, UInt insn) ++{ ++ UInt opcode = extract(insn, 31, 26); ++ UInt ra = extract(insn, 25, 21); ++ UInt disp = extract(insn, 20, 0); ++ UInt longdisp = extract(insn, 25, 0); ++ ++ ULong nextpc = guest_PC_curr_instr + 4; ++ ULong targpc = nextpc + (SEXT_to_64(disp, 21) << 2); ++ HChar const *nm = NULL; ++ IRExpr *cond = NULL; ++ switch(opcode) { ++ case 0x4: ++ nm = "BR"; ++ break; ++ case 0x5: ++ nm = "BSR"; ++ break; ++ case 0x1D: ++ nm = "LBR"; ++ targpc = nextpc + (SEXT_to_64(longdisp, 26) << 2); ++ break; ++ case 0x30: ++ nm = "BEQ"; ++ cond = binop(Iop_CmpEQ64, getIReg(ra), mkU64(0)); ++ break; ++ case 0x31: ++ nm = "BNE"; ++ cond = binop(Iop_CmpNE64, getIReg(ra), mkU64(0)); ++ break; ++ case 0x32: ++ nm = "BLT"; ++ cond = binop(Iop_CmpLT64S, getIReg(ra), mkU64(0)); ++ break; ++ case 0x33: ++ nm = "BLE"; ++ cond = binop(Iop_CmpLE64S, getIReg(ra), mkU64(0)); ++ break; ++ case 0x34: ++ nm = "BGT"; ++ cond = binop(Iop_CmpLT64S, mkU64(0), getIReg(ra)); ++ break; ++ case 0x35: ++ nm = "BGE"; ++ cond = binop(Iop_CmpLE64S, mkU64(0), getIReg(ra)); ++ break; ++ case 0x36: ++ nm = "BLBC"; ++ cond = binop(Iop_CmpEQ64, ++ binop(Iop_And64, getIReg(ra), mkU64(0x1)), mkU64(0)); ++ break; ++ case 0x37: ++ nm = "BLBS"; ++ cond = binop(Iop_CmpNE64, ++ binop(Iop_And64, getIReg(ra), mkU64(0x1)), mkU64(0)); ++ break; ++ case 0x38: ++ nm = "FBEQ"; ++ cond = binop(Iop_CmpFEQ64, getFReg(ra), mkF64(0)); ++ break; ++ case 0x39: ++ nm = "FBNE"; ++ cond = binop(Iop_CmpFNE64, getFReg(ra), mkF64(0)); ++ break; ++ case 0x3a: ++ nm = "FBLT"; ++ cond = binop(Iop_CmpFLT64, getFReg(ra), mkF64(0)); ++ break; ++ case 0x3b: ++ nm = "FBLE"; ++ cond = binop(Iop_CmpFLE64, getFReg(ra), mkF64(0)); ++ break; ++ case 0x3c: ++ nm = "FBGT"; ++ cond = binop(Iop_CmpFGT64, getFReg(ra), mkF64(0)); ++ break; ++ case 0x3d: ++ nm = "FBGE"; ++ cond = binop(Iop_CmpFGE64, getFReg(ra), mkF64(0)); ++ break; ++ default: ++ return False; ++ } ++ ++ /* optmize for 'BR 0' : no need to branch, just read PC */ ++ if (!cond && nextpc == targpc && opcode != 0x1D) { ++ DIP("%s r%u 0x%llx (READ PC)\n", nm, ra, targpc); ++ putIReg(ra, mkU64(nextpc)); ++ return True; ++ } ++ ++ if (opcode != 0x1D) { ++ DIP("%s r%u 0x%llx\n", nm, ra, targpc); ++ } else { ++ DIP("%s 0x%llx\n", nm, targpc); ++ } ++ ++ if (cond) { ++ /* condiction branch */ ++ condexit(cond, targpc); ++ putPC(mkU64(nextpc)); ++ } else { ++ /* uncondction branch */ ++ if (opcode != 0x1D) { ++ putIReg(ra, mkU64(nextpc)); ++ } ++ putPC(mkU64(targpc)); ++ } ++ ++ dres->whatNext = Dis_StopHere; ++ dres->jk_StopHere = Ijk_Boring; ++ return True; ++} ++ ++static Bool dis_SW64_jump(DisResult* dres, UInt insn) ++{ ++ UInt opcode = extract(insn, 31, 26); ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ ULong nextpc = guest_PC_curr_instr + 4; ++ ++ HChar const *nm; ++ IRJumpKind jk; ++ switch (opcode) { ++ case 0x1: ++ nm = "CALL"; ++ jk = Ijk_Call; ++ break; ++ case 0x2: ++ nm = "RET"; ++ jk = Ijk_Ret; ++ break; ++ case 0x3: ++ nm = "JMP"; ++ jk = Ijk_Boring; ++ break; ++ default: ++ return False; ++ } ++ ++ DIP("%s r%u, (r%u)\n", nm, ra, rb); ++ ++ /* ra 与 rb 可能指定了同一个寄存器,需将 rb 的运算结果保存至 IRTemp 后, ++ 才可更新 ra 的值,否则后续 PC 值不正确 */ ++ IRTemp vaddr = newTemp(Ity_I64); ++ assign(vaddr, binop(Iop_And64, ++ getIReg(rb), ++ unop(Iop_Not64, mkU64(0x3)))); ++ ++ putIReg(ra, mkU64(nextpc)); ++ putPC(mkexpr(vaddr)); ++ ++ dres->whatNext = Dis_StopHere; ++ dres->jk_StopHere = jk; ++ return True; ++} ++ ++static Bool dis_SW64_load_imm(DisResult* dres, UInt insn) ++{ ++ UInt opcode = extract(insn, 31, 26); ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ ++ HChar const *nm; ++ ULong imm; ++ switch (opcode) { ++ case 0x3E: nm = "LDI"; imm = SEXT_to_64(disp, 16); break; ++ case 0x3F: nm = "LDIH"; imm = SEXT_to_64(disp, 16) << 16; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u, 0x%x(r%u)\n", nm, ra, disp, rb); ++ ++ putIReg(ra, binop(Iop_Add64, getIReg(rb), mkU64(imm))); ++ return True; ++} ++ ++static Bool dis_SW64_integer_load(UInt opcode, UInt ra, UInt rb, UInt disp, ++ Bool autoinc) ++{ ++ IROp widen; ++ Bool align; ++ HChar const *nm; ++ IRType ity; ++ if (autoinc) { ++ switch (opcode) { ++ case 0x0: nm = "LDBU_A"; ity = Ity_I8; widen = Iop_8Uto64; align = True; break; ++ case 0x1: nm = "LDHU_A"; ity = Ity_I16; widen = Iop_16Uto64; align = True; break; ++ case 0x2: nm = "LDW_A"; ity = Ity_I32; widen = Iop_32Sto64; align = True; break; ++ case 0x3: nm = "LDL_A"; ity = Ity_I64; widen = Iop_INVALID; align = True; break; ++ default: return False; ++ } ++ } else { ++ switch (opcode) { ++ case 0x20: nm = "LDBU"; ity = Ity_I8; widen = Iop_8Uto64; align = True; break; ++ case 0x21: nm = "LDHU"; ity = Ity_I16; widen = Iop_16Uto64; align = True; break; ++ case 0x22: nm = "LDW"; ity = Ity_I32; widen = Iop_32Sto64; align = True; break; ++ case 0x23: nm = "LDL"; ity = Ity_I64; widen = Iop_INVALID; align = True; break; ++ case 0x24: nm = "LDL_U"; ity = Ity_I64; widen = Iop_INVALID; align = False; break; ++ default: return False; ++ } ++ } ++ ++ if (ra == 31 && !autoinc) { ++ DIP("%s r%u, 0x%x(r%u) (Ra == 31, NOP)\n", nm, ra, disp, rb); ++ stmt( IRStmt_NoOp() ); ++ return True; ++ } ++ ++ DIP("%s r%u, 0x%x(r%u)\n", nm, ra, disp, rb); ++ ++ IRExpr *vaddr; ++ if (autoinc) { ++ vaddr = getIReg(rb); ++ } else { ++ vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(disp, 16))); ++ } ++ ++ if (!align) { ++ vaddr = binop(Iop_And64, vaddr, unop(Iop_Not64, mkU64(0x7))); ++ } ++ ++ IRExpr *e = load(ity, vaddr); ++ ++ if (widen != Iop_INVALID) { ++ e = unop(widen, e); ++ } ++ ++ putIReg(ra, e); ++ ++ if (autoinc) { ++ putIReg(rb, binop(Iop_Add64, getIReg(rb), mkU64(SEXT_to_64(disp, 12)))); ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_integer_store(UInt opcode, UInt ra, UInt rb, UInt disp, ++ Bool autoinc) ++{ ++ IRType ity; ++ Bool align; ++ HChar const *nm; ++ if (autoinc) { ++ switch (opcode) { ++ case 0x6: nm = "STB_A"; ity = Ity_I8; align = True; break; ++ case 0x7: nm = "STH_A"; ity = Ity_I16; align = True; break; ++ case 0x8: nm = "STW_A"; ity = Ity_I32; align = True; break; ++ case 0x9: nm = "STL_A"; ity = Ity_I64; align = True; break; ++ default: return False; ++ } ++ } else { ++ switch (opcode) { ++ case 0x28: nm = "STB"; ity = Ity_I8; align = True; break; ++ case 0x29: nm = "STH"; ity = Ity_I16; align = True; break; ++ case 0x2A: nm = "STW"; ity = Ity_I32; align = True; break; ++ case 0x2B: nm = "STL"; ity = Ity_I64; align = True; break; ++ case 0x2C: nm = "STL_U"; ity = Ity_I64; align = False; break; ++ default: return False; ++ } ++ } ++ ++ if (!autoinc && is_stack_probe((const UChar *)guest_PC_curr_instr)) { ++ DIP("STL r%u, 0x%x(r%u) (stack probe, ignored)\n", ra, disp, rb); ++ stmt(IRStmt_NoOp()); ++ return True; ++ } ++ ++ DIP("%s r%u, 0x%x(r%u)\n", nm, ra, disp, rb); ++ ++ IRExpr *vaddr; ++ if (autoinc) { ++ vaddr = getIReg(rb); ++ } else { ++ vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(disp, 16))); ++ } ++ ++ if (!align) { ++ vaddr = binop(Iop_And64, vaddr, unop(Iop_Not64, mkU64(0x7))); ++ } ++ ++ store(vaddr, narrowFrom64(ity, getIReg(ra))); ++ ++ if (autoinc) { ++ putIReg(rb, binop(Iop_Add64, getIReg(rb), mkU64(SEXT_to_64(disp, 12)))); ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_float_load(UInt opcode, UInt fa, UInt rb, UInt disp, ++ Bool autoinc) ++{ ++ IRType ty; ++ HChar const *nm; ++ if (autoinc) { ++ switch (opcode) { ++ case 0x4: nm = "FLDS_A"; ty = Ity_F32; break; ++ case 0x5: nm = "FLDD_A"; ty = Ity_F64; break; ++ default: return False; ++ } ++ } else { ++ switch (opcode) { ++ case 0x26: nm = "FLDS"; ty = Ity_F32; break; ++ case 0x27: nm = "FLDD"; ty = Ity_F64; break; ++ default: return False; ++ } ++ } ++ ++ if (!autoinc && fa == 31) { ++ DIP("%s f%u, 0x%x(r%u) (Fa == 31, NOP)\n", nm, fa, disp, rb); ++ stmt( IRStmt_NoOp() ); ++ return True; ++ } ++ ++ DIP("%s f%u, 0x%x(r%u)\n", nm, fa, disp, rb); ++ ++ IRExpr *vaddr; ++ if (autoinc) { ++ vaddr = getIReg(rb); ++ } else { ++ vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(disp, 16))); ++ } ++ ++ IRExpr *e = (ty == Ity_F32) ? unop(Iop_F32toF64, load(Ity_F32, vaddr)) : ++ (ty == Ity_F64) ? load(Ity_F64, vaddr) : ++ (vassert(0), NULL); ++ ++ putFReg(fa, e); ++ ++ if (autoinc) { ++ putIReg(rb, binop(Iop_Add64, getIReg(rb), mkU64(SEXT_to_64(disp, 12)))); ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_float_store(UInt opcode, UInt fa, UInt rb, UInt disp, ++ Bool autoinc) ++{ ++ IRType ty; ++ HChar const *nm; ++ if (autoinc) { ++ switch (opcode) { ++ case 0xA: nm = "FSTS_A"; ty = Ity_F32; break; ++ case 0xB: nm = "FSTD_A"; ty = Ity_F64; break; ++ default: return False; ++ } ++ } else { ++ switch (opcode) { ++ case 0x2E: nm = "FSTS"; ty = Ity_F32; break; ++ case 0x2F: nm = "FSTD"; ty = Ity_F64; break; ++ default: return False; ++ } ++ } ++ ++ DIP("%s f%u, 0x%x(r%u)\n", nm, fa, disp, rb); ++ ++ IRExpr *vaddr; ++ if (autoinc) { ++ vaddr = getIReg(rb); ++ } else { ++ vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(disp, 16))); ++ } ++ ++ IRExpr *e = (ty == Ity_F32) ? unop(Iop_TruncF64asF32, getFReg(fa)) : ++ (ty == Ity_F64) ? getFReg(fa) : ++ (vassert(0), NULL); ++ ++ store(vaddr, e); ++ ++ if (autoinc) { ++ putIReg(rb, binop(Iop_Add64, getIReg(rb), mkU64(SEXT_to_64(disp, 12)))); ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_nc_load(UInt func, UInt ra, UInt rb, UInt uimm12) ++{ ++ IRExpr *vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(uimm12, 12))); ++ switch (func) { ++ case 0xa: ++ DIP("LDW_NC r%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ putIReg(ra, unop(Iop_32Sto64, load(Ity_I32, vaddr))); ++ return True; ++ case 0xb: ++ DIP("LDL_NC r%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ putIReg(ra, load(Ity_I64, vaddr)); ++ return True; ++ case 0xc: ++ DIP("LDD_NC f%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ putFReg(ra, load(Ity_F64, vaddr)); ++ return True; ++ default: ++ return False; ++ } ++} ++ ++static Bool dis_SW64_nc_store(UInt func, UInt ra, UInt rb, UInt uimm12) ++{ ++ IRExpr *vaddr = binop(Iop_Add64, ++ getIReg(rb), ++ mkU64(SEXT_to_64(uimm12, 12))); ++ switch (func) { ++ case 0xd: ++ DIP("STW_NC r%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ store(vaddr, unop(Iop_64to32, getIReg(ra))); ++ return True; ++ case 0xe: ++ DIP("STL_NC r%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ store(vaddr, getIReg(ra)); ++ return True; ++ case 0xf: ++ DIP("STD_NC f%u, 0x%x(r%u)\n", ra, uimm12, rb); ++ store(vaddr, getFReg(ra)); ++ return True; ++ default: ++ return False; ++ } ++} ++ ++static Bool dis_SW64_integer_add_sub(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ IROp iop; ++ UInt width, sbits; ++ HChar const *nm; ++ switch (func) { ++ case 0x0: iop = Iop_Add32; width = 32; sbits = 0; nm = "ADDW"; break; ++ case 0x1: iop = Iop_Sub32; width = 32; sbits = 0; nm = "SUBW"; break; ++ case 0x2: iop = Iop_Add32; width = 32; sbits = 2; nm = "S4ADDW"; break; ++ case 0x3: iop = Iop_Sub32; width = 32; sbits = 2; nm = "S4SUBW"; break; ++ case 0x4: iop = Iop_Add32; width = 32; sbits = 3; nm = "S8ADDW"; break; ++ case 0x5: iop = Iop_Sub32; width = 32; sbits = 3; nm = "S8SUBW"; break; ++ case 0x8: iop = Iop_Add64; width = 64; sbits = 0; nm = "ADDL"; break; ++ case 0x9: iop = Iop_Sub64; width = 64; sbits = 0; nm = "SUBL"; break; ++ case 0xA: iop = Iop_Add64; width = 64; sbits = 2; nm = "S4ADDL"; break; ++ case 0xB: iop = Iop_Sub64; width = 64; sbits = 2; nm = "S4SUBL"; break; ++ case 0xC: iop = Iop_Add64; width = 64; sbits = 3; nm = "S8ADDL"; break; ++ case 0xD: iop = Iop_Sub64; width = 64; sbits = 3; nm = "S8SUBL"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ IRExpr *rav = getIReg(ra); ++ if (sbits) ++ rav = binop(Iop_Shl64, rav, mkU8(sbits)); ++ ++ if (width == 64) ++ putIReg(rc, binop(iop, rav, rbv)); ++ else ++ putIReg(rc, unop(Iop_32Sto64, ++ binop(iop, ++ unop(Iop_64to32, rav), ++ unop(Iop_64to32, rbv)))); ++ ++ return True; ++} ++ ++static Bool dis_SW64_integer_mul(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ const HChar *nm; ++ IRExpr *expr; ++ switch(func) { ++ case 0x10: ++ nm = "MULW"; ++ expr = unop(Iop_32Sto64, binop(Iop_Mul32, ++ unop(Iop_64to32, getIReg(ra)), ++ unop(Iop_64to32, rbv))); ++ break; ++ case 0x18: ++ nm = "MULL"; ++ expr = binop(Iop_Mul64, getIReg(ra), rbv); ++ break; ++ case 0x19: ++ nm = "UMULH"; ++ expr = unop(Iop_128HIto64, binop(Iop_MullU64, ++ getIReg(ra), ++ rbv)); ++ break; ++ default: ++ return False; ++ } ++ ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ } else { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ } ++ ++ putIReg(rc, expr); ++ return True; ++} ++ ++static Bool dis_SW64_integer_div(UInt func, UInt ra, UInt rb, UInt rc) ++{ ++ const HChar *nm; ++ IRExpr *expr; ++ switch(func) { ++ case 0x11: ++ nm = "DIVW"; ++ expr = unop(Iop_32Sto64, binop(Iop_DivS32, ++ unop(Iop_64to32, getIReg(ra)), ++ unop(Iop_64to32, getIReg(rb)))); ++ break; ++ case 0x12: ++ nm = "UDIVW"; ++ expr = unop(Iop_32Uto64, binop(Iop_DivU32, ++ unop(Iop_64to32, getIReg(ra)), ++ unop(Iop_64to32, getIReg(rb)))); ++ break; ++ case 0x13: ++ nm = "REMW"; ++ expr = unop(Iop_32Sto64, unop(Iop_64HIto32, ++ binop(Iop_DivModS32to32, ++ unop(Iop_64to32, getIReg(ra)), ++ unop(Iop_64to32, getIReg(rb))))); ++ break; ++ case 0x14: ++ nm = "UREMW"; ++ expr = unop(Iop_32Uto64, unop(Iop_64HIto32, ++ binop(Iop_DivModU32to32, ++ unop(Iop_64to32, getIReg(ra)), ++ unop(Iop_64to32, getIReg(rb))))); ++ break; ++ case 0x1A: ++ nm = "DIVL"; ++ expr = binop(Iop_DivS64, getIReg(ra), getIReg(rb)); ++ break; ++ case 0x1B: ++ nm = "UDIVL"; ++ expr = binop(Iop_DivU64, getIReg(ra), getIReg(rb)); ++ break; ++ case 0x1C: ++ nm = "REML"; ++ expr = unop(Iop_128HIto64, binop(Iop_DivModS64to64, getIReg(ra), getIReg(rb))); ++ break; ++ case 0x1D: ++ nm = "UREML"; ++ expr = unop(Iop_128HIto64, binop(Iop_DivModU64to64, getIReg(ra), getIReg(rb))); ++ break; ++ default: ++ return False; ++ } ++ ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ putIReg(rc, expr); ++ return True; ++} ++ ++static Bool dis_SW64_addpi(UInt func, UInt rc, UInt imm13) ++{ ++ const HChar *nm; ++ IRExpr *expr; ++ ULong nextpc = guest_PC_curr_instr + 4; ++ ULong simm13 = SEXT_to_64(imm13, 13); ++ switch (func) { ++ case 0x1E: ++ nm = "ADDPI"; ++ expr = binop(Iop_Add64, ++ mkU64(nextpc), ++ binop(Iop_Shl64, mkU64(simm13), mkU8(2))); ++ break; ++ case 0x1F: ++ nm = "ADDPIS"; ++ expr = binop(Iop_Add64, ++ mkU64(nextpc & ~0xFFFFULL), ++ binop(Iop_Shl64, mkU64(simm13), mkU8(16))); ++ break; ++ default: return False; ++ } ++ ++ DIP("%s %u r%u\n", nm, imm13, rc); ++ putIReg(rc, expr); ++ return True; ++} ++ ++static Bool dis_SW64_crc32(UInt func, UInt ra, UInt rb, UInt rc) ++{ ++ HChar const *nm; ++ ULong (*fp)(ULong, ULong); ++ switch (func) { ++ case 0x20: nm = "CRC32B"; fp = &sw64_dirtyhelper_calc_crc32b; break; ++ case 0x21: nm = "CRC32H"; fp = &sw64_dirtyhelper_calc_crc32h; break; ++ case 0x22: nm = "CRC32W"; fp = &sw64_dirtyhelper_calc_crc32w; break; ++ case 0x23: nm = "CRC32L"; fp = &sw64_dirtyhelper_calc_crc32l; break; ++ case 0x24: nm = "CRC32CB"; fp = &sw64_dirtyhelper_calc_crc32cb; break; ++ case 0x25: nm = "CRC32CH"; fp = &sw64_dirtyhelper_calc_crc32ch; break; ++ case 0x26: nm = "CRC32CW"; fp = &sw64_dirtyhelper_calc_crc32cw; break; ++ case 0x27: nm = "CRC32CL"; fp = &sw64_dirtyhelper_calc_crc32cl; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ ++ IRTemp dst = newTemp(Ity_I64); ++ stmt(IRStmt_Dirty(unsafeIRDirty_1_N(dst, 0, nm, fp, ++ mkIRExprVec_2(getIReg(ra), getIReg(rb))))); ++ ++ putIReg(rc, mkexpr(dst)); ++ return True; ++} ++ ++static Bool dis_SW64_integer_cmp(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ IROp iop; ++ HChar const *nm; ++ switch (func) { ++ case 0x28: iop = Iop_CmpEQ64; nm = "CMPEQ"; break; ++ case 0x29: iop = Iop_CmpLT64S; nm = "CMPLT"; break; ++ case 0x2A: iop = Iop_CmpLE64S; nm = "CMPLE"; break; ++ case 0x2B: iop = Iop_CmpLT64U; nm = "CMPULT"; break; ++ case 0x2C: iop = Iop_CmpLE64U; nm = "CMPULE"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ putIReg(rc, unop(Iop_1Uto64, binop(iop, getIReg(ra), rbv))); ++ return True; ++} ++ ++static Bool dis_SW64_bit_setclear(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ const HChar *nm; ++ UInt not; ++ IROp iop; ++ switch(func) { ++ case 0x2D: nm = "SBT"; iop = Iop_Or64; not = 0; break; ++ case 0x2E: nm = "CBT"; iop = Iop_And64; not = 1; break; ++ default: return False; ++ } ++ ++ IRExpr *mask = binop(Iop_Shl64, mkU64(1), mkshiftbits(rbv)); ++ if (not) { ++ mask = unop(Iop_Not64, mask); ++ } ++ ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ } else { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ } ++ ++ putIReg(rc, binop(iop, getIReg(ra), mask)); ++ return True; ++} ++ ++static Bool dis_SW64_bits_logical(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ const HChar *nm; ++ UInt not; ++ IROp iop; ++ switch(func) { ++ case 0x38: nm = "AND"; iop = Iop_And64; not = 0; break; ++ case 0x39: nm = "BIC"; iop = Iop_And64; not = 1; break; ++ case 0x3A: nm = "BIS"; iop = Iop_Or64; not = 0; break; ++ case 0x3B: nm = "ORNOT"; iop = Iop_Or64; not = 1; break; ++ case 0x3C: nm = "XOR"; iop = Iop_Xor64; not = 0; break; ++ case 0x3D: nm = "EQV"; iop = Iop_Xor64; not = 1; break; ++ default: return False; ++ } ++ ++ if (not) { ++ rbv = unop(Iop_Not64, rbv); ++ } ++ ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ } else { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ } ++ ++ putIReg(rc, binop(iop, getIReg(ra), rbv)); ++ return True; ++} ++ ++ ++static Bool dis_SW64_bits_shift(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ const HChar *nm; ++ IROp iop; ++ Int bits; ++ switch (func) { ++ case 0x48: iop = Iop_Shl64; bits = 64; nm = "SLL"; break; ++ case 0x49: iop = Iop_Shr64; bits = 64; nm = "SRL"; break; ++ case 0x4A: iop = Iop_Sar64; bits = 64; nm = "SRA"; break; ++ case 0x4B: iop = Iop_INVALID; bits = -1; nm = "ROLL"; break; ++ case 0x4C: iop = Iop_Shl32; bits = 32; nm = "SLLW"; break; ++ case 0x4D: iop = Iop_Shr32; bits = 32; nm = "SRLW"; break; ++ case 0x4E: iop = Iop_Sar32; bits = 32; nm = "SRAW"; break; ++ case 0x4F: iop = Iop_INVALID; bits = -1; nm = "ROLW"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ if (func == 0x4B) { ++ putIReg(rc, binop(Iop_Or64, ++ binop(Iop_Shl64, getIReg(ra), mkshiftbits(rbv)), ++ binop(Iop_Shr64, getIReg(ra), mkshiftbits(binop(Iop_Sub64, mkU64(0), rbv))))); ++ } else if (func == 0x4F) { ++ putIReg(rc, unop(Iop_32Sto64, ++ binop(Iop_Or32, ++ binop(Iop_Shl32, ++ unop(Iop_64to32, getIReg(ra)), ++ mkshiftbits32(rbv)), ++ binop(Iop_Shr32, ++ unop(Iop_64to32, getIReg(ra)), ++ mkshiftbits32(binop(Iop_Sub64, mkU64(0), rbv)))))); ++ } else { ++ if (bits == 64) { ++ putIReg(rc, binop(iop, getIReg(ra), mkshiftbits(rbv))); ++ } else { ++ putIReg(rc, unop(Iop_32Sto64, binop(iop, unop(Iop_64to32, getIReg(ra)), mkshiftbits32(rbv)))); ++ } ++ } ++ ++ return True; ++} ++ ++ ++static Bool dis_SW64_bits_pop(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ if (opcode != 0x10) /* no immediate version for those instructions */ ++ return False; ++ ++ const HChar *nm; ++ IROp iop; ++ switch (func) { ++ case 0x58: iop = Iop_PopCount64; nm = "CTPOP"; break; ++ case 0x59: iop = Iop_ClzNat64; nm = "CTLZ"; break; ++ case 0x5A: iop = Iop_CtzNat64; nm = "CTTZ"; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u, r%u\n", nm, rb, rc); ++ ++ putIReg(rc, unop(iop, getIReg(rb))); ++ return True; ++} ++ ++ ++static Bool dis_SW64_byte_swap(UInt func, UInt rb, UInt rc) ++{ ++ const HChar *nm; ++ UInt sz; ++ switch (func) { ++ case 0x5B: sz = 16; nm = "REVBH"; break; ++ case 0x5C: sz = 32; nm = "REVBW"; break; ++ case 0x5D: sz = 64; nm = "REVBL"; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u, r%u\n", nm, rb, rc); ++ ++ IRTemp val = newTemp(Ity_I64); ++ assign(val, getIReg(rb)); ++ ++ if (sz == 16) { ++ val = math_SWAPHELPER(val, 0xFF00, 8); ++ } else if (sz == 32) { ++ val = math_SWAPHELPER(val, 0xFF00FF00ULL, 8); ++ val = math_SWAPHELPER(val, 0xFFFF0000ULL, 16); ++ } else if (sz == 64) { ++ val = math_SWAPHELPER(val, 0xFF00FF00FF00FF00ULL, 8); ++ val = math_SWAPHELPER(val, 0xFFFF0000FFFF0000ULL, 16); ++ val = math_SWAPHELPER(val, 0xFFFFFFFF00000000ULL, 32); ++ } else { ++ vassert(0); ++ } ++ ++ if (sz == 32) { ++ /* result of REVBW require sign-extended */ ++ putIReg(rc, unop(Iop_32Sto64, narrowFrom64(Ity_I32, mkexpr(val)))); ++ } else { ++ putIReg(rc, mkexpr(val)); ++ } ++ return True; ++} ++ ++static Bool dis_SW64_bits_zap(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ static const HChar* nms[5] = {"ZAP", "ZAPNOT", "SEXTB", "SEXTH", "CMPGEB"}; ++ if (func < 0x68 || func > 0x6c) ++ return False; ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nms[func - 0x68], ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nms[func - 0x68], ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ /* fast path for: ++ ZAPNOT Ra, 0xf, Rc ++ ZAPNOT Ra, 0x3, Rc ++ ZAPNOT Ra, 0x1, Rc ++ */ ++ if (func == 0x69 && opcode == 0x12 && ++ (uimm8 == 0xf || uimm8 == 0x3 || uimm8 == 0x1)) { ++ ++ IRExpr *rav = getIReg(ra); ++ IRExpr *e; ++ switch (uimm8) { ++ case 0xf: e = unop(Iop_32Uto64, unop(Iop_64to32, rav)); break; ++ case 0x3: e = unop(Iop_16Uto64, unop(Iop_64to16, rav)); break; ++ case 0x1: e = unop(Iop_8Uto64, unop(Iop_64to8, rav)); break; ++ default: return False; ++ } ++ putIReg(rc, e); ++ return True; ++ } ++ ++ switch (func) { ++ /* ZAP ZAPNOT */ ++ case 0x68: ++ case 0x69: { ++ /* ++ if x > 0 and x <= 0x7F, ++ x<<42 | x<<35 | x<<28 | x<<21 | x<<14 | x<<7 | x ++ is equal to ++ x<<42 + x<<35 + x<<28 + x<<21 + x<<14 + x<<7 + x ++ is equal to ++ x*2^42 + x*2^35 + x*2^28 + x*2^21 + x*2^14 + x*2^7 + x ++ is equal to ++ x * (2^42 + 2^35 + 2^28 + 2^21 + 2^14 + 2^7 + 1) ++ is equal to ++ x * 4432676798593 ++ */ ++ IRTemp t0 = newTemp(Ity_I64); ++ assign(t0, binop(Iop_And64, ++ mkU64(0x0101010101010101ULL), ++ binop(Iop_Or64, ++ binop(Iop_Shl64, ++ rbv, ++ mkU8(49)), ++ binop(Iop_Mul64, ++ mkU64(4432676798593ULL), ++ binop(Iop_And64, ++ mkU64(0x7F), ++ rbv))))); ++ ++ IRTemp t1 = newTemp(Ity_I64); ++ assign(t1, binop(Iop_Or64, ++ mkexpr(t0), ++ binop(Iop_Shl64, ++ mkexpr(t0), ++ mkU8(1)))); ++ ++ IRTemp t2 = newTemp(Ity_I64); ++ assign(t2, binop(Iop_Or64, ++ mkexpr(t1), ++ binop(Iop_Shl64, ++ mkexpr(t1), ++ mkU8(2)))); ++ ++ IRExpr *e = binop(Iop_Or64, ++ mkexpr(t2), ++ binop(Iop_Shl64, ++ mkexpr(t2), ++ mkU8(4))); ++ ++ if (func == 0x68) ++ e = unop(Iop_Not64, e); /* ZAP */ ++ ++ putIReg(rc, binop(Iop_And64, getIReg(ra), e)); ++ return True; ++ } ++ ++ /* SEXTB */ ++ case 0x6A: { ++ putIReg(rc, unop(Iop_8Sto64, unop(Iop_64to8, rbv))); ++ return True; ++ } ++ ++ /* SEXTH */ ++ case 0x6B: { ++ putIReg(rc, unop(Iop_16Sto64, unop(Iop_64to16, rbv))); ++ return True; ++ } ++ ++ /* CMPGEB */ ++ case 0x6C: { ++ IRTemp res = newTemp(Ity_I64); ++ assign(res, mkU64(0)); ++ for(int i=0; i<8; i++) ++ { ++ IRTemp tmp = newTemp(Ity_I64); ++ assign(tmp, binop(Iop_Or64, mkexpr(res), ++ binop(Iop_Shl64, ++ unop(Iop_1Uto64, binop(Iop_CmpLE64U, ++ binop(Iop_And64, rbv, mkU64(0xFFULL << (i * 8))), ++ binop(Iop_And64, getIReg(ra), mkU64(0xFFULL << (i * 8))))), ++ mkU8(i)))); ++ res = tmp; ++ } ++ putIReg(rc, mkexpr(res)); ++ return True; ++ } ++ ++ default: ++ return False; ++ } ++} ++ ++ ++static Bool dis_SW64_bits_insert(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ Bool toleft; ++ UInt sz; ++ const HChar *nm; ++ switch (func) { ++ case 0x40: toleft = True; sz = 8; nm = "INSLB"; break; ++ case 0x41: toleft = True; sz = 16; nm = "INSLH"; break; ++ case 0x42: toleft = True; sz = 32; nm = "INSLW"; break; ++ case 0x43: toleft = True; sz = 64; nm = "INSLL"; break; ++ case 0x44: toleft = False; sz = 8; nm = "INSHB"; break; ++ case 0x45: toleft = False; sz = 16; nm = "INSHH"; break; ++ case 0x46: toleft = False; sz = 32; nm = "INSHW"; break; ++ case 0x47: toleft = False; sz = 64; nm = "INSHL"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ IRExpr *rav; ++ if (sz == 8) { ++ rav = unop(Iop_8Uto64, unop(Iop_64to8, getIReg(ra))); ++ } else if (sz == 16) { ++ rav = unop(Iop_16Uto64, unop(Iop_64to16, getIReg(ra))); ++ } else if (sz == 32) { ++ rav = unop(Iop_32Uto64, unop(Iop_64to32, getIReg(ra))); ++ } else { ++ rav = getIReg(ra); ++ } ++ ++ if (toleft) { ++ /* rc = rav << ((rbv << 3) & 0x3F) */ ++ putIReg(rc, binop(Iop_Shl64, ++ rav, ++ mkshiftbits(binop(Iop_Shl64, ++ rbv, ++ mkU8(3))))); ++ } else { ++ /* rc = (rav >> 8) >> ((-8 - (rbv << 3)) & 0x3F) */ ++ putIReg(rc, binop(Iop_Shr64, ++ binop(Iop_Shr64, ++ rav, ++ mkU8(8)), ++ mkshiftbits(binop(Iop_Sub64, ++ mkU64(-8), ++ binop(Iop_Shl64, ++ rbv, ++ mkU8(3)))))); ++ } ++ ++ return True; ++} ++ ++static Bool dis_SW64_bits_extract(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ Bool toright; ++ UInt sz; ++ const HChar *nm; ++ switch (func) { ++ case 0x50: toright = True; sz = 8; nm = "EXTLB"; break; ++ case 0x51: toright = True; sz = 16; nm = "EXTLH"; break; ++ case 0x52: toright = True; sz = 32; nm = "EXTLW"; break; ++ case 0x53: toright = True; sz = 64; nm = "EXTLL"; break; ++ case 0x54: toright = False; sz = 8; nm = "EXTHB"; break; ++ case 0x55: toright = False; sz = 16; nm = "EXTHH"; break; ++ case 0x56: toright = False; sz = 32; nm = "EXTHW"; break; ++ case 0x57: toright = False; sz = 64; nm = "EXTHL"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ IRExpr *e; ++ if (toright) { ++ /* sbits = (rbv << 3) & 0x3F */ ++ IRExpr *sbits = binop(Iop_And8, ++ unop(Iop_64to8, ++ binop(Iop_Shl64, ++ rbv, ++ mkU8(3))), ++ mkU8(0x3F)); ++ e = binop(Iop_Shr64, getIReg(ra), sbits); ++ } else { ++ /* sbits = (0 - (rbv << 3)) & 0x3F */ ++ IRExpr *sbits = binop(Iop_And8, ++ unop(Iop_64to8, ++ binop(Iop_Sub64, ++ mkU64(0), ++ binop(Iop_Shl64, ++ rbv, ++ mkU8(3)))), ++ mkU8(0x3F)); ++ e = binop(Iop_Shl64, getIReg(ra), sbits); ++ } ++ ++ if (sz == 8) { ++ e = unop(Iop_8Uto64, unop(Iop_64to8, e)); ++ } else if (sz == 16) { ++ e = unop(Iop_16Uto64, unop(Iop_64to16, e)); ++ } else if (sz == 32) { ++ e = unop(Iop_32Uto64, unop(Iop_64to32, e)); ++ } ++ ++ putIReg(rc, e); ++ return True; ++} ++ ++static Bool dis_SW64_bits_mask(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc, UInt uimm8) ++{ ++ Bool lo; ++ ULong mask; ++ const HChar *nm; ++ switch (func) { ++ case 0x60: lo = True; mask = 0x00000000000000FF; nm = "MASKLB"; break; ++ case 0x61: lo = True; mask = 0x000000000000FFFF; nm = "MASKLH"; break; ++ case 0x62: lo = True; mask = 0x00000000FFFFFFFF; nm = "MASKLW"; break; ++ case 0x63: lo = True; mask = 0xFFFFFFFFFFFFFFFF; nm = "MASKLL"; break; ++ case 0x64: lo = False; mask = 0x0000000000000000; nm = "MASKHB"; break; ++ case 0x65: lo = False; mask = 0x00000000000000FF; nm = "MASKHH"; break; ++ case 0x66: lo = False; mask = 0x0000000000FFFFFF; nm = "MASKHW"; break; ++ case 0x67: lo = False; mask = 0x00FFFFFFFFFFFFFF; nm = "MASKHL"; break; ++ default: return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x10) { ++ DIP("%s r%u, r%u, r%u\n", nm, ra, rb, rc); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x12) { ++ DIP("%s r%u, %u, r%u\n", nm, ra, uimm8, rc); ++ rbv = mkU64(uimm8); ++ } else { ++ return False; ++ } ++ ++ IRExpr *t; ++ if (lo) { ++ /* t = mask >> ((Rbv & 0x7) * 8) */ ++ t = binop(Iop_Shl64, ++ mkU64(mask), ++ unop(Iop_64to8, ++ binop(Iop_Shl64, ++ binop(Iop_And64, ++ rbv, ++ mkU64(0x7)), ++ mkU8(3)))); ++ } else { ++ /* t = mask >> (56 - (Rbv & 0x7) * 8) */ ++ t = binop(Iop_Shr64, ++ mkU64(mask), ++ unop(Iop_64to8, ++ binop(Iop_Sub64, ++ mkU64(56), ++ binop(Iop_Shl64, ++ binop(Iop_And64, ++ rbv, ++ mkU64(0x7)), ++ mkU8(3))))); ++ } ++ ++ /* rc = AndNot(Rav, t) */ ++ putIReg(rc, binop(Iop_And64, getIReg(ra), unop(Iop_Not64, t))); ++ return True; ++} ++ ++static Bool dis_SW64_sel(UInt insn) ++{ ++ /* |31 26 | 25 21 | 20 16| 15 13 |12 10| 9 5 | 4 0 | */ ++ /* | opcode | ra | rb | 000 | function | rc | rd | */ ++ /* | opcode | ra | imm | function | rc | rd | */ ++ UInt opcode = extract(insn, 31, 26); ++ UInt func = extract(insn, 12, 10); ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt rc = extract(insn, 9, 5); ++ UInt rd = extract(insn, 4, 0); ++ UInt imm = extract(insn, 20, 13); ++ ++ const HChar *nm; ++ IRExpr *guard; ++ switch(func) { ++ case 0x0: ++ nm = "SELEQ"; ++ guard = binop(Iop_CmpEQ64, getIReg(ra), mkU64(0)); ++ break; ++ case 0x1: ++ nm = "SELGE"; ++ guard = binop(Iop_CmpLE64S, mkU64(0), getIReg(ra)); ++ break; ++ case 0x2: ++ nm = "SELGT"; ++ guard = binop(Iop_CmpLT64S, mkU64(0), getIReg(ra)); ++ break; ++ case 0x3: ++ nm = "SELLE"; ++ guard = binop(Iop_CmpLE64S, getIReg(ra), mkU64(0)); ++ break; ++ case 0x4: ++ nm = "SELLT"; ++ guard = binop(Iop_CmpLT64S, getIReg(ra), mkU64(0)); ++ break; ++ case 0x5: ++ nm = "SELNE"; ++ guard = binop(Iop_CmpNE64, getIReg(ra), mkU64(0)); ++ break; ++ case 0x6: ++ nm = "SELLBC"; ++ guard = binop(Iop_CmpEQ64, ++ binop(Iop_And64, getIReg(ra), mkU64(0x1)), ++ mkU64(0)); ++ break; ++ case 0x7: ++ nm = "SELLBS"; ++ guard = binop(Iop_CmpEQ64, ++ binop(Iop_And64, getIReg(ra), mkU64(0x1)), ++ mkU64(1)); ++ break; ++ default: ++ return False; ++ } ++ ++ IRExpr *rbv; ++ if (opcode == 0x11) { ++ DIP("%s, r%u, r%u, r%u, r%u\n", nm, ra, rb, rc, rd); ++ rbv = getIReg(rb); ++ } else if (opcode == 0x13) { ++ DIP("%s, r%u, %u, r%u, r%u\n", nm, ra, imm, rc, rd); ++ rbv = mkU64(imm); ++ } else { ++ return False; ++ } ++ ++ putIReg(rd, IRExpr_ITE(guard, rbv, getIReg(rc))); ++ return True; ++} ++ ++/* ---------------- FPCR round mode ---------------- */ ++ ++/* Generate IR to get hold of the rounding mode bits in FPCR, and ++ convert them to IR format. Bind the final result to the ++ returned temp. */ ++static IRTemp mk_get_IR_rounding_mode ( void ) ++{ ++ /* The sw64 encoding for rounding mode bits is: ++ 00 to zero ++ 01 to -infinity ++ 10 to nearest ++ 11 to +infinity ++ We need to convert that to the IR encoding: ++ 00 to nearest (the default) ++ 10 to +infinity ++ 01 to -infinity ++ 11 to zero ++ ++ Boss Yu say: ++ IREncd = 0b11 & (0b10000111 >> ((sw_fpcr >> 57) & 0b110)); ++ */ ++ ++ IRTemp IREncd = newTemp(Ity_I32); ++ assign(IREncd, unop(Iop_64to32, ++ binop(Iop_And64, ++ mkU64(0b11), ++ binop(Iop_Shr64, ++ mkU64(0b10000111), ++ unop(Iop_64to8, ++ binop(Iop_And64, ++ binop(Iop_Shr64, ++ IRExpr_Get(OFFB_FPCR, Ity_I64), ++ mkU8(57)), ++ mkU64(0b110))))))); ++ ++ return IREncd; ++} ++ ++static Bool dis_SW64_float_arith(UInt func, UInt fa, UInt fb, UInt fc) ++{ ++ IROp iop; ++ HChar const *nm; ++ UInt sz; ++ switch (func) { ++ case 0x0: nm = "FADDS"; iop = Iop_AddF64; sz = 32; break; ++ case 0x1: nm = "FADDD"; iop = Iop_AddF64; sz = 64; break; ++ case 0x2: nm = "FSUBS"; iop = Iop_SubF64; sz = 32; break; ++ case 0x3: nm = "FSUBD"; iop = Iop_SubF64; sz = 64; break; ++ case 0x4: nm = "FMULS"; iop = Iop_MulF64; sz = 32; break; ++ case 0x5: nm = "FMULD"; iop = Iop_MulF64; sz = 64; break; ++ case 0x6: nm = "FDIVS"; iop = Iop_DivF64; sz = 32; break; ++ case 0x7: nm = "FDIVD"; iop = Iop_DivF64; sz = 64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, f%u, f%u\n", nm, fa, fb, fc); ++ ++ IRExpr *e = triop(iop, ++ mkexpr(mk_get_IR_rounding_mode()), ++ getFReg(fa), ++ getFReg(fb)); ++ ++ if (sz == 32) ++ e = binop(Iop_RoundF64toF32, mkexpr(mk_get_IR_rounding_mode()), e); ++ ++ putFReg(fc, e); ++ return True; ++} ++ ++ ++static Bool dis_SW64_fsqrt(UInt func, UInt fb, UInt fc) ++{ ++ IROp iop; ++ HChar const *nm; ++ UInt sz; ++ switch (func) { ++ case 0x8: nm = "FSQRTS"; iop = Iop_SqrtF64; sz = 32; break; ++ case 0x9: nm = "FSQRTD"; iop = Iop_SqrtF64; sz = 64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, f%u\n", nm, fb, fc); ++ ++ IRExpr *e = binop(iop, ++ mkexpr(mk_get_IR_rounding_mode()), ++ getFReg(fb)); ++ ++ if (sz == 32) ++ e = binop(Iop_RoundF64toF32, mkexpr(mk_get_IR_rounding_mode()), e); ++ ++ putFReg(fc, e); ++ return True; ++} ++ ++ ++static Bool dis_SW64_fcmp(UInt func, UInt fa, UInt fb, UInt fc) ++{ ++ IROp iop; ++ HChar const *nm; ++ switch(func) { ++ case 0x10: nm = "FCMPEQ"; iop = Iop_CmpFEQ64; break; ++ case 0x11: nm = "FCMPLE"; iop = Iop_CmpFLE64; break; ++ case 0x12: nm = "FCMPLT"; iop = Iop_CmpFLT64; break; ++ case 0x13: nm = "FCMPUN"; iop = Iop_CmpFUN64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, f%u, f%u\n", nm, fa, fb, fc); ++ ++ putFReg(fc, IRExpr_ITE(binop(iop, getFReg(fa), getFReg(fb)), ++ mkF64(2), ++ mkF64(0))); ++ return True; ++} ++ ++ ++static Bool dis_SW64_fcvt(UInt func, UInt fb, UInt fc) ++{ ++ /* FCVTSD */ ++ if (func == 0x20) { ++ DIP("FCVTSD f%u, f%u\n", fb, fc); ++ putFReg(fc, unop(Iop_F32toF64, ++ unop(Iop_TruncF64asF32, getFReg(fb)))); ++ return True; ++ } ++ ++ /* FCVTDS */ ++ if (func == 0x21) { ++ DIP("FCVTDS f%u, f%u\n", fb, fc); ++ putFReg(fc, binop(Iop_RoundF64toF32, ++ mkexpr(mk_get_IR_rounding_mode()), ++ getFReg(fb))); ++ return True; ++ } ++ ++ /* FCVTDL_x */ ++ if (func >= 0x22 && func <= 0x25) { ++ HChar const *nm; ++ UInt rm; ++ switch (func) { ++ case 0x22: nm = "FCVTDL_G"; rm = Irrm_NEAREST; break; ++ case 0x23: nm = "FCVTDL_P"; rm = Irrm_PosINF; break; ++ case 0x24: nm = "FCVTDL_Z"; rm = Irrm_ZERO; break; ++ case 0x25: nm = "FCVTDL_N"; rm = Irrm_NegINF; break; ++ } ++ DIP("%s f%u, f%u\n", nm, fb, fc); ++ putFReg(fc, unop(Iop_ReinterpI64asF64, ++ binop(Iop_F64toI64S, ++ mkU32(rm), ++ getFReg(fb)))); ++ return True; ++ } ++ ++ /* FCVTDL */ ++ if (func == 0x27) { ++ DIP("FCVTDL f%u, f%u\n", fb, fc); ++ putFReg(fc, unop(Iop_ReinterpI64asF64, ++ binop(Iop_F64toI64S, ++ mkexpr(mk_get_IR_rounding_mode()), ++ getFReg(fb)))); ++ return True; ++ } ++ ++ ++ else if (func == 0x28) //FCVTWL ++ { ++ DIP("FCVTWL f%u, f%u\n", fb, fc); ++ IRTemp fbv = newTemp(Ity_I64); ++ assign(fbv, unop(Iop_ReinterpF64asI64,getFReg(fb))); ++ IRTemp fcv_31_0 = newTemp(Ity_I64); //fbv->fcv_31_0 ++ assign(fcv_31_0, binop(Iop_Or64, ++ binop(Iop_Shr64, ++ binop(Iop_And64, mkexpr(fbv), mkU64(0xC000000000000000ULL)), //63:62 ++ mkU8(32)), ++ binop(Iop_Shr64, ++ binop(Iop_And64, mkexpr(fbv), mkU64(0x07FFFFFFE0000000ULL)), //58:29 ++ mkU8(29)))); ++ putFReg(fc, unop(Iop_ReinterpI64asF64,binop(Iop_Sar64, ++ binop(Iop_Shl64, mkexpr(fcv_31_0), mkU8(32)), ++ mkU8(32)))); ++ ++ return True; ++ } ++ else if(func == 0x29) //FCVTLW ++ { ++ DIP("FCVTLW f%u, f%u\n", fb, fc); ++ IRTemp fbv = newTemp(Ity_I64); ++ assign(fbv, unop(Iop_ReinterpF64asI64,getFReg(fb))); ++ IRTemp fcv = newTemp(Ity_I64); //fbv->fcv ++ assign(fcv, binop(Iop_Or64, ++ binop(Iop_Or64, ++ binop(Iop_Shl64, ++ binop(Iop_And64, mkexpr(fbv), mkU64(0xC0000000ULL)), //31:30 ++ mkU8(32)), ++ binop(Iop_Shl64, ++ binop(Iop_And64, mkexpr(fbv), mkU64(0x3FFFFFFFULL)), //29:0 ++ mkU8(29))), ++ mkU64(0ULL))); ++ putFReg(fc, unop(Iop_ReinterpI64asF64, mkexpr(fcv))); ++ return True; ++ } ++ else if(func == 0x2D) //FCVTLS ++ { ++ DIP("FCVTLS f%u, f%u\n", fb, fc); ++ putFReg(fc, binop(Iop_RoundF64toF32, ++ mkexpr(mk_get_IR_rounding_mode()), ++ binop(Iop_I64StoF64, ++ mkexpr(mk_get_IR_rounding_mode()), ++ unop(Iop_ReinterpF64asI64, getFReg(fb))))); ++ return True; ++ } ++ else if(func == 0x2F) //FCVTLD ++ { ++ DIP("FCVTLD f%u, f%u\n", fb, fc); ++ putFReg(fc, binop(Iop_I64StoF64, ++ mkexpr(mk_get_IR_rounding_mode()), ++ unop(Iop_ReinterpF64asI64,getFReg(fb)))); ++ return True; ++ } ++ ++ return False; ++} ++ ++static Bool dis_SW64_fcpy(UInt func, UInt fa, UInt fb, UInt fc) ++{ ++ /* FCPYS */ ++ if (func == 0x30) { ++ DIP("FCPYS f%u, f%u, f%u\n", fa, fb, fc); ++ ++ /* "fcpys fa, fa, fc" is same as "mov fa, fc" */ ++ if (fa == fb) { ++ putFReg(fc, getFReg(fa)); ++ return True; ++ } ++ ++ /* "fcpys f31, fb, fc" is same as "abs fb, fc" */ ++ if (fa == 31) { ++ putFReg(fc, unop(Iop_AbsF64, getFReg(fb))); ++ return True; ++ } ++ ++ putFReg(fc, unop(Iop_ReinterpI64asF64, ++ binop(Iop_Or64, ++ binop(Iop_And64, ++ unop(Iop_ReinterpF64asI64, getFReg(fa)), ++ mkU64(0x8000000000000000ULL)), //63 ++ binop(Iop_And64, ++ unop(Iop_ReinterpF64asI64, getFReg(fb)), ++ mkU64(0x7FFFFFFFFFFFFFFFULL))))); //62:0 ++ return True; ++ } ++ ++ /* FCPYSE */ ++ if (func == 0x31) { ++ DIP("FCPYSE f%u, f%u, f%u\n", fa, fb, fc); ++ putFReg(fc, unop(Iop_ReinterpI64asF64, ++ binop(Iop_Or64, ++ binop(Iop_And64, ++ unop(Iop_ReinterpF64asI64, getFReg(fa)), ++ mkU64(0xFFF0000000000000ULL)), //63:52 ++ binop(Iop_And64, ++ unop(Iop_ReinterpF64asI64, getFReg(fb)), ++ mkU64(0xFFFFFFFFFFFFFULL))))); //51:0 ++ return True; ++ } ++ ++ /* FCPYSN */ ++ if (func == 0x32) { ++ DIP("FCPYSN f%u, f%u, f%u\n", fa, fb, fc); ++ ++ /* "fcpysn fa, fa, fc" is same as "neg fa, fc" */ ++ if (fa == fb) { ++ putFReg(fc, unop(Iop_NegF64, getFReg(fa))); ++ return True; ++ } ++ ++ putFReg(fc, unop(Iop_ReinterpI64asF64, ++ binop(Iop_Or64, ++ binop(Iop_And64, ++ unop(Iop_Not64, ++ unop(Iop_ReinterpF64asI64, getFReg(fa))), ++ mkU64(0x8000000000000000ULL)), //63 ++ binop(Iop_And64, ++ unop(Iop_ReinterpF64asI64, getFReg(fb)), ++ mkU64(0x7FFFFFFFFFFFFFFFULL))))); //62:0 ++ return True; ++ } ++ ++ return False; ++} ++ ++static Bool dis_SW64_intflt_transfer(UInt opcode, UInt func, UInt ra, UInt rc) ++{ ++ /* IFMOVS */ ++ if (opcode == 0x18 && func == 0x40) { ++ DIP("IFMOVS r%u, f%u\n", ra, rc); ++ putFReg(rc, unop(Iop_F32toF64, ++ unop(Iop_ReinterpI32asF32, ++ unop(Iop_64to32, getIReg(ra))))); ++ return True; ++ } ++ ++ /* IFMOVD */ ++ if (opcode == 0x18 && func == 0x41) { ++ DIP("IFMOVD r%u, f%u\n", ra, rc); ++ putFReg(rc, unop(Iop_ReinterpI64asF64,getIReg(ra))); ++ return True; ++ } ++ ++ /* FIMOVS */ ++ if (opcode == 0x10 && func == 0x70) { ++ DIP("FIMOVS f%u, r%u\n", ra, rc); ++ putIReg(rc, unop(Iop_32Sto64, ++ unop(Iop_ReinterpF32asI32, ++ unop(Iop_TruncF64asF32, getFReg(ra))))); ++ return True; ++ } ++ ++ /* FIMOVD */ ++ if (opcode == 0x10 && func == 0x78) { ++ DIP("FIMOVD f%u, r%u", ra, rc); ++ putIReg(rc, unop(Iop_ReinterpF64asI64, getFReg(ra))); ++ return True; ++ } ++ ++ return False; ++} ++ ++static Bool dis_SW64_intflt_convert(UInt opcode, UInt func, UInt rb, UInt fc) ++{ ++ IROp iop; ++ HChar const *nm; ++ UInt sbits, dbits; ++ switch(func) { ++ case 0x48: nm = "CMOVLS"; iop = Iop_I64StoF64; sbits = 64; dbits = 32; break; ++ case 0x49: nm = "CMOVWS"; iop = Iop_I32StoF64; sbits = 32; dbits = 32; break; ++ case 0x4a: nm = "CMOVLD"; iop = Iop_I64StoF64; sbits = 64; dbits = 64; break; ++ case 0x4b: nm = "CMOVWD"; iop = Iop_I32StoF64; sbits = 32; dbits = 64; break; ++ case 0x4c: nm = "CMOVULS"; iop = Iop_I64UtoF64; sbits = 64; dbits = 32; break; ++ case 0x4d: nm = "CMOVUWS"; iop = Iop_I32UtoF64; sbits = 32; dbits = 32; break; ++ case 0x4e: nm = "CMOVULD"; iop = Iop_I64UtoF64; sbits = 64; dbits = 64; break; ++ case 0x4f: nm = "CMOVUWD"; iop = Iop_I32UtoF64; sbits = 32; dbits = 64; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u, f%u\n", nm, rb, fc); ++ ++ IRTemp rm = mk_get_IR_rounding_mode(); ++ ++ IRExpr *e = getIReg(rb); ++ ++ if (sbits == 32) ++ e = narrowFrom64(Ity_I32, e); ++ ++ if (sbits == 32) ++ e = unop(iop, e); ++ else ++ e = binop(iop, mkexpr(rm), e); ++ ++ if (dbits == 32) ++ e = binop(Iop_RoundF64toF32, mkexpr(rm), e); ++ ++ putFReg(fc, e); ++ return True; ++} ++ ++static Bool dis_SW64_fltint_convert(UInt opcode, UInt func, UInt fb, UInt rc) ++{ ++ HChar const *nm; ++ IROp iop; ++ IROp widen; ++ Int rm; ++ switch(func) { ++ case 0x72: nm = "CMOVDL"; iop = Iop_F64toI64S; widen = Iop_INVALID; rm = -1; break; ++ case 0x74: nm = "CMOVDL_G"; iop = Iop_F64toI64S; widen = Iop_INVALID; rm = Irrm_NEAREST; break; ++ case 0x7a: nm = "CMOVDL_P"; iop = Iop_F64toI64S; widen = Iop_INVALID; rm = Irrm_PosINF; break; ++ case 0x7c: nm = "CMOVDL_Z"; iop = Iop_F64toI64S; widen = Iop_INVALID; rm = Irrm_ZERO; break; ++ case 0x80: nm = "CMOVDL_N"; iop = Iop_F64toI64S; widen = Iop_INVALID; rm = Irrm_NegINF; break; ++ case 0x81: nm = "CMOVDLU"; iop = Iop_F64toI64U; widen = Iop_INVALID; rm = -1; break; ++ case 0x82: nm = "CMOVDLU_G"; iop = Iop_F64toI64U; widen = Iop_INVALID; rm = Irrm_NEAREST; break; ++ case 0x83: nm = "CMOVDLU_P"; iop = Iop_F64toI64U; widen = Iop_INVALID; rm = Irrm_PosINF; break; ++ case 0x84: nm = "CMOVDLU_Z"; iop = Iop_F64toI64U; widen = Iop_INVALID; rm = Irrm_ZERO; break; ++ case 0x85: nm = "CMOVDLU_N"; iop = Iop_F64toI64U; widen = Iop_INVALID; rm = Irrm_NegINF; break; ++ case 0x86: nm = "CMOVDWU"; iop = Iop_F64toI32U; widen = Iop_32Uto64; rm = -1; break; ++ case 0x87: nm = "CMOVDWU_G"; iop = Iop_F64toI32U; widen = Iop_32Uto64; rm = Irrm_NEAREST; break; ++ case 0x88: nm = "CMOVDWU_P"; iop = Iop_F64toI32U; widen = Iop_32Uto64; rm = Irrm_PosINF; break; ++ case 0x89: nm = "CMOVDWU_Z"; iop = Iop_F64toI32U; widen = Iop_32Uto64; rm = Irrm_ZERO; break; ++ case 0x8a: nm = "CMOVDWU_N"; iop = Iop_F64toI32U; widen = Iop_32Uto64; rm = Irrm_NegINF; break; ++ case 0x8b: nm = "CMOVDW"; iop = Iop_F64toI32S; widen = Iop_32Sto64; rm = -1; break; ++ case 0x8c: nm = "CMOVDW_G"; iop = Iop_F64toI32S; widen = Iop_32Sto64; rm = Irrm_NEAREST; break; ++ case 0x8d: nm = "CMOVDW_P"; iop = Iop_F64toI32S; widen = Iop_32Sto64; rm = Irrm_PosINF; break; ++ case 0x8e: nm = "CMOVDW_Z"; iop = Iop_F64toI32S; widen = Iop_32Sto64; rm = Irrm_ZERO; break; ++ case 0x8f: nm = "CMOVDW_N"; iop = Iop_F64toI32S; widen = Iop_32Sto64; rm = Irrm_NegINF; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, r%u\n", nm, fb, rc); ++ ++ IRTemp irrm; ++ if (rm == -1) { ++ irrm = mk_get_IR_rounding_mode(); ++ } else { ++ irrm = newTemp(Ity_I32); ++ assign(irrm, mkU32(rm)); ++ } ++ ++ IRExpr *e = binop(iop, mkexpr(irrm), getFReg(fb)); ++ ++ if (widen != Iop_INVALID) ++ e = unop(widen, e); ++ ++ putIReg(rc, e); ++ return True; ++} ++ ++static Bool dis_SW64_fpcr(UInt insn, UInt func) ++{ ++ /* ++ floating-point exception is not supported in Valgrind ++ always return 0 in exception flag bits ++ always return 1 in exception trapping bits ++ SETFPECx are No-Op ++ ++ floating-point rouding have a limited support ++ set and return those bits as-is ++ */ ++ UInt fa = extract(insn, 25, 21); ++ ++ /* RFPCR */ ++ if (func == 0x50) { ++ IRExpr *e; ++ DIP("RFPCR f%u\n", fa); ++ ++ e = IRExpr_Get(OFFB_FPCR, Ity_I64); ++ ++ /* clear bits other than rouding mode */ ++ e = binop(Iop_And64, mkU64(0xc00000000000000ULL), e); ++ ++ /* set exception trapping disable */ ++ e = binop(Iop_Or64, mkU64(0x600e000000000000ULL), e); ++ ++ putFReg(fa, unop(Iop_ReinterpI64asF64, e)); ++ return True; ++ } ++ ++ /* WFPCR */ ++ if (func == 0x51) { ++ IRExpr *e; ++ DIP("WFPCR f%u\n", fa); ++ ++ e = unop(Iop_ReinterpF64asI64, getFReg(fa)); ++ ++ /* clear bits other than rouding mode */ ++ e = binop(Iop_And64, mkU64(0xc00000000000000ULL), e); ++ ++ /* set exception trapping disable */ ++ e = binop(Iop_Or64, mkU64(0x600e000000000000ULL), e); ++ ++ stmt( IRStmt_Put(OFFB_FPCR, e) ); ++ return True; ++ } ++ ++ /* SETFPEC0 ~ SETFPEC3 */ ++ if (func >= 0x54 && func <= 0x57) { ++ DIP("SETFPEC%u\n", func - 0x54); ++ stmt(IRStmt_NoOp()); ++ return True; ++ } ++ ++ return False; ++} ++ ++static Bool dis_SW64_fpround(UInt func, UInt fb, UInt fc) ++{ ++ HChar const *nm; ++ UInt sz; ++ Int rm; ++ switch (func) { ++ case 0x5a: nm = "FRIS"; sz = 32; rm = -1; break; ++ case 0x5b: nm = "FRIS_G"; sz = 32; rm = Irrm_NEAREST; break; ++ case 0x5c: nm = "FRIS_P"; sz = 32; rm = Irrm_PosINF; break; ++ case 0x5d: nm = "FRIS_Z"; sz = 32; rm = Irrm_ZERO; break; ++ case 0x5f: nm = "FRIS_N"; sz = 32; rm = Irrm_NegINF; break; ++ case 0x60: nm = "FRID"; sz = 64; rm = -1; break; ++ case 0x61: nm = "FRID_G"; sz = 64; rm = Irrm_NEAREST; break; ++ case 0x62: nm = "FRID_P"; sz = 64; rm = Irrm_PosINF; break; ++ case 0x63: nm = "FRID_Z"; sz = 64; rm = Irrm_ZERO; break; ++ case 0x64: nm = "FRID_N"; sz = 64; rm = Irrm_NegINF; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, r%u\n", nm, fb, fc); ++ ++ IRTemp irrm; ++ if (rm == -1) { ++ irrm = mk_get_IR_rounding_mode(); ++ } else { ++ irrm = newTemp(Ity_I32); ++ assign(irrm, mkU32(rm)); ++ } ++ ++ IRExpr *e = binop(Iop_RoundF64toInt, mkexpr(irrm), getFReg(fb)); ++ ++ if (sz == 32) ++ e = binop(Iop_RoundF64toF32, mkexpr(irrm), e); ++ ++ putFReg(fc, e); ++ return True; ++} ++ ++static Bool dis_SW64_frec(UInt func, UInt fa, UInt fc) ++{ ++ HChar const *nm; ++ UInt sz; ++ ++ switch (func) { ++ case 0x58: nm = "FRECS"; sz = 32; break; ++ case 0x59: nm = "FRECD"; sz = 64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, r%u\n", nm, fa, fc); ++ ++ IRExpr *e = triop(Iop_DivF64, mkU32(Irrm_ZERO), mkF64(1.0), getFReg(fa)); ++ if (sz == 32) ++ e = binop(Iop_RoundF64toF32, mkU32(Irrm_ZERO), e); ++ ++ putFReg(fc, e); ++ return True; ++} ++ ++static Bool dis_SW64_fma(UInt func, UInt fa, UInt fb, UInt fc, UInt fd) ++{ ++ IROp iop; ++ HChar const *nm; ++ Bool neg; ++ UInt sz; ++ switch (func) { ++ case 0x0: nm = "FMAS"; neg = False; iop = Iop_MAddF64; sz = 32; break; ++ case 0x1: nm = "FMAD"; neg = False; iop = Iop_MAddF64; sz = 64; break; ++ case 0x2: nm = "FMSS"; neg = False; iop = Iop_MSubF64; sz = 32; break; ++ case 0x3: nm = "FMSD"; neg = False; iop = Iop_MSubF64; sz = 64; break; ++ case 0x4: nm = "FNMAS"; neg = True; iop = Iop_MAddF64; sz = 32; break; ++ case 0x5: nm = "FNMAD"; neg = True; iop = Iop_MAddF64; sz = 64; break; ++ case 0x6: nm = "FNMSS"; neg = True; iop = Iop_MSubF64; sz = 32; break; ++ case 0x7: nm = "FNMSD"; neg = True; iop = Iop_MSubF64; sz = 64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, f%u, f%u, f%u\n", nm, fa, fb, fc, fd); ++ ++ IRExpr *rav = getFReg(fa); ++ if (neg) ++ rav = unop(Iop_NegF64, rav); ++ ++ IRExpr *e = quaop(iop, ++ mkexpr(mk_get_IR_rounding_mode()), ++ rav, ++ getFReg(fb), ++ getFReg(fc)); ++ ++ if (sz == 32) ++ e = binop(Iop_RoundF64toF32, mkexpr(mk_get_IR_rounding_mode()), e); ++ ++ putFReg(fd, e); ++ return True; ++} ++ ++static Bool dis_SW64_fsel(UInt func, UInt fa, UInt fb, UInt fc, UInt fd) ++{ ++ IROp iop; ++ HChar const *nm; ++ switch (func) { ++ case 0x10: nm = "FSELEQ"; iop = Iop_CmpFEQ64; break; ++ case 0x11: nm = "FSELNE"; iop = Iop_CmpFNE64; break; ++ case 0x12: nm = "FSELLT"; iop = Iop_CmpFLT64; break; ++ case 0x13: nm = "FSELLE"; iop = Iop_CmpFLE64; break; ++ case 0x14: nm = "FSELGT"; iop = Iop_CmpFGT64; break; ++ case 0x15: nm = "FSELGE"; iop = Iop_CmpFGE64; break; ++ default: return False; ++ } ++ ++ DIP("%s f%u, f%u, f%u, f%u\n", nm, fa, fb, fc, fd); ++ ++ putFReg(fd, IRExpr_ITE(binop(iop, getFReg(fa), mkF64(0)), ++ getFReg(fb), ++ getFReg(fc))); ++ ++ return True; ++} ++ ++static Bool dis_SW64_lockload_fallback(UInt func, UInt ra, UInt rb, UInt disp) ++{ ++ IRType ty; ++ if (func == 0x0) { ++ DIP("LLDW r%u, 0x%x(r%u)\n", ra, disp, rb); ++ ty = Ity_I32; ++ } else if (func == 0x1) { ++ DIP("LLDL r%u, 0x%x(r%u)\n", ra, disp, rb); ++ ty = Ity_I64; ++ } else { ++ vassert(0); ++ } ++ ++ IRTemp vaddr = newTemp(Ity_I64); ++ assign(vaddr, binop(Iop_Add64, getIReg(rb), mkU64(disp))); ++ ++ IRTemp data = newTemp(Ity_I64); ++ if (ty == Ity_I32) ++ assign(data, unop(Iop_32Sto64, load(ty, mkexpr(vaddr)))); ++ else ++ assign(data, load(ty, mkexpr(vaddr))); ++ ++ /* ++ lock_valid <- 1 ++ lock_addr <- vaddr ++ lock_data <- data ++ lock_size <- 4 or 8 dependent on lldw or lldl ++ */ ++ stmt( IRStmt_Put(OFFB_LOCKVALID, mkU64(1)) ); ++ stmt( IRStmt_Put(OFFB_LOCKSIZE, mkU64(sizeofIRType(ty))) ); ++ stmt( IRStmt_Put(OFFB_LOCKADDR, mkexpr(vaddr)) ); ++ stmt( IRStmt_Put(OFFB_LOCKDATA, mkexpr(data)) ); ++ ++ /* changed in 8A (forward compatible with 6B): ++ lock_valid <- 1 */ ++ stmt( IRStmt_Put(OFFB_LOCKFLAG, mkU64(1)) ); ++ ++ putIReg(ra, mkexpr(data)); ++ return True; ++} ++ ++ ++static Bool dis_SW64_lockstore_fallback(UInt func, UInt ra, UInt rb, UInt disp) ++{ ++ /* ++ lock store go failed if any condition meet: ++ - state.lock_addr != lock_addr ++ - state.lock_size != lock_size ++ - state.lock_valid == 0 ++ - state.lock_flag == 0 ++ */ ++ ULong failaddr = guest_PC_curr_instr + 4; ++ ++ IRType ty; ++ if (func == 0x8) { ++ DIP("LSTW r%u, 0x%x(r%u)\n", ra, disp, rb); ++ ty = Ity_I32; ++ } else if (func == 0x9) { ++ DIP("LSTL r%u, 0x%x(r%u)\n", ra, disp, rb); ++ ty = Ity_I64; ++ } else { ++ vassert(0); ++ } ++ ++ IRTemp vaddr = newTemp(Ity_I64); ++ assign(vaddr, binop(Iop_Add64, getIReg(rb), mkU64(disp))); ++ ++ IRTemp storedata = newTemp(ty); ++ assign(storedata, narrowFrom64(ty, getIReg(ra))); ++ ++ /* set flags as failed first */ ++ stmt(IRStmt_Put(OFFB_LOCKSUCCESS, mkU64(0))); ++ /* Update Ra in 8A (not fully forward compatible to 6B) */ ++ putIReg(ra, mkU64(0)); ++ ++ condexit(binop(Iop_CmpEQ64, ++ IRExpr_Get(OFFB_LOCKVALID, Ity_I64), ++ mkU64(0)), failaddr); ++ ++ condexit(binop(Iop_CmpEQ64, ++ IRExpr_Get(OFFB_LOCKFLAG, Ity_I64), ++ mkU64(0)), failaddr); ++ ++ condexit(binop(Iop_CmpNE64, ++ IRExpr_Get(OFFB_LOCKSIZE, Ity_I64), ++ mkU64(sizeofIRType(ty))), failaddr); ++ ++ condexit(binop(Iop_CmpNE64, ++ IRExpr_Get(OFFB_LOCKADDR, Ity_I64), ++ mkexpr(vaddr)), failaddr); ++ ++ stmt( IRStmt_Put(OFFB_LOCKVALID, mkU64(0)) ); ++ stmt( IRStmt_Put(OFFB_LOCKFLAG, mkU64(0)) ); ++ ++ ++ // Try to CAS the new value in. ++ IRTemp old = newTemp(ty); ++ IRTemp expd = newTemp(ty); ++ assign(expd, narrowFrom64(ty, IRExpr_Get(OFFB_LOCKDATA, Ity_I64))); ++ stmt( IRStmt_CAS(mkIRCAS(IRTemp_INVALID, old, ++ Iend_LE, mkexpr(vaddr), ++ NULL, mkexpr(expd), ++ NULL, mkexpr(storedata) ++ ))); ++ ++ // Fail if the CAS failed (viz, old != expd) ++ condexit(binop(Iop_CmpNE64, ++ widenUto64(ty, mkexpr(old)), ++ widenUto64(ty, mkexpr(expd))), failaddr); ++ ++ // Otherwise we succeeded (!) ++ stmt( IRStmt_Put(OFFB_LOCKSUCCESS, mkU64(0x1)) ); ++ ++ /* Update Ra in 8A (not fully forward compatible to 6B) */ ++ putIReg(ra, mkU64(1)); ++ ++ return True; ++} ++ ++static Bool dis_SW64_memb_and_rtc_insn(UInt insn) ++{ ++ UInt func = extract(insn, 15, 0); ++ UInt ra = extract(insn, 25, 21); ++ ++ if (func == 0x0 || func == 0x1 || func == 0x2) { ++ /* there is only IRStmt_MBE(Imbe_Fence) in VEX IR. ++ All SW MEMB is convert to IRStmt_MBE(Imbe_Fence) */ ++ const HChar *nm = (func == 0x0) ? "MEMB" : ++ (func == 0x1) ? "IMEMB" : ++ (func == 0x2) ? "WMEMB" : ++ (vassert(0), NULL); ++ DIP("%s\n", nm); ++ stmt(IRStmt_MBE(Imbe_Fence)); ++ return True; ++ } ++ ++ if (func == 0x20) { ++ DIP("RTC r%u\n", ra); ++ IRDirty *d; ++ IRTemp v0 = newTemp(Ity_I64); ++ d = unsafeIRDirty_1_N(v0, 0, ++ "sw64_dirtyhelper_rtc", ++ &sw64_dirtyhelper_rtc, ++ mkIRExprVec_1(IRExpr_GSPTR())); ++ d->nFxState = 1; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; /* read */ ++ d->fxState[0].offset = offsetof(VexGuestSW64State, guest_r0); ++ d->fxState[0].size = sizeof(ULong); ++ stmt(IRStmt_Dirty(d)); ++ putIReg(ra, mkexpr(v0)); ++ return True; ++ } ++ ++ if (func == 0x40) { ++ DIP("RCID r%u\n", ra); ++ IRDirty *d; ++ IRTemp v0 = newTemp(Ity_I64); ++ d = unsafeIRDirty_1_N(v0, 0, ++ "sw64_dirtyhelper_rcid", ++ &sw64_dirtyhelper_rcid, ++ mkIRExprVec_1(IRExpr_GSPTR())); ++ d->nFxState = 1; ++ vex_bzero(&d->fxState, sizeof(d->fxState)); ++ d->fxState[0].fx = Ifx_Read; /* read */ ++ d->fxState[0].offset = offsetof(VexGuestSW64State, guest_r0); ++ d->fxState[0].size = sizeof(ULong); ++ stmt(IRStmt_Dirty(d)); ++ putIReg(ra, mkexpr(v0)); ++ return True; ++ } ++ ++ if (func == 0x80) { ++ DIP("HALT\n"); ++ stmt(IRStmt_NoOp()); /* HALT is ignored */ ++ return True; ++ } ++ ++ if (func == 0x1000) { ++ DIP("RD_F r%u\n", ra); ++ putIReg(ra, IRExpr_Get(OFFB_LOCKSUCCESS, Ity_I64)); ++ return True; ++ } ++ ++ if (func == 0x1020) { ++ DIP("WR_F r%u\n", ra); ++ stmt(IRStmt_Put(OFFB_LOCKFLAG, getIReg(ra))); ++ return True; ++ } ++ ++ if (func == 0x1040) { ++ DIP("RTID r%u\n", ra); ++ putIReg(ra, IRExpr_Get(OFFB_TID, Ity_I64)); ++ return True; ++ } ++ ++ if (func >= 0xfc00 && func <= 0xffff) { ++ DIP("CSRWS/CSRWC/CSRR/CSRW (privilege, go failed)\n"); ++ return False; ++ } ++ ++ return False; ++} ++ ++static Bool dis_SW64_prefetch(UInt insn) ++{ ++ UInt opcode = extract(insn, 31, 26); ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ ++ HChar const *nm; ++ switch (opcode) { ++ case 0x22: nm = "S_FILLCS"; break; /* S_FILLCS: LDW */ ++ case 0x23: nm = "S_FILLDE"; break; /* S_FILLDE: LDL */ ++ case 0x26: nm = "FILLDE"; break; /* FILLDE: FLDS */ ++ case 0x27: nm = "FILLDE_E"; break; /* FILLDE_E: FLDD */ ++ case 0x9: nm = "FILLCS"; break; /* FILLCS: LDWE */ ++ case 0xB: nm = "FILLCS_E"; break; /* FILLCS_E: LDDE */ ++ case 0xA: nm = "E_FILLCS"; break; /* E_FILLCS: LDSE */ ++ case 0xC: nm = "E_FILLDE"; break; /* E_FILLDE: VLDS */ ++ case 0x20: nm = "FLUSHD"; break; /* FLUSHD: LDBU */ ++ case 0x24: nm = "EVICTDL"; break; /* EVICTDL: LDL_U */ ++ case 0x21: nm = "EVICTDG"; break; /* EVICTDG: LDHU */ ++ case 0x1E: { ++ UInt func = extract(insn, 15, 12); ++ nm = (func == 0xE) ? "DPFHR" : ++ (func == 0xF) ? "DPFHR" : ++ (vassert(0), NULL); ++ disp = extract(insn, 11, 0); ++ break; ++ } ++ default: return False; ++ } ++ ++ vassert(ra == 31); ++ ++ DIP("%s %x(r%u) (prefetch)\n", nm, disp, rb); ++ stmt(IRStmt_NoOp()); /* can't do anything with prefetch */ ++ ++ return True; ++} ++ ++static Bool dis_SW64_cas(UInt opcode, UInt func, UInt ra, UInt rb, ++ UInt rc) ++{ ++ HChar const *nm; ++ IRType ty; ++ switch (func) { ++ case 0x5E: ty = Ity_I32; nm = "CASW"; break; ++ case 0x5F: ty = Ity_I64; nm = "CASL"; break; ++ default: return False; ++ } ++ ++ DIP("%s r%u r%u r%u\n", nm, ra, rb, rc); ++ ++ IRTemp old = newTemp(ty); ++ IRExpr *exp = getIReg(ra); ++ IRExpr *addr = getIReg(rb); ++ IRExpr *data = getIReg(rc); ++ ++ if (ty == Ity_I32) { ++ data = unop(Iop_64to32, data); ++ exp = unop(Iop_64to32, exp); ++ } ++ ++ stmt(IRStmt_CAS(mkIRCAS(IRTemp_INVALID, old, Iend_LE, addr, NULL, exp, NULL, data))); ++ ++ if (ty == Ity_I32) { ++ putIReg(rc, unop(Iop_32Sto64, mkexpr(old))); ++ } else { ++ putIReg(rc, mkexpr(old)); ++ } ++ ++ return True; ++} ++ ++/* Spot "Special" instructions (see valgrind.h). */ ++static Bool handle_special_instr(DisResult* dres) ++{ ++ const UChar* code = (const UChar *)guest_PC_curr_instr; ++ ++ /* 16-bytes preamble: ++ 4BE0691F sll $31,3, $31 ++ 4BE1A91F sll $31,13,$31 ++ 4BE3A91F sll $31,29,$31 ++ 4BE2691F sll $31,19,$31 ++ */ ++ if (fetch32(code + 0) != 0x4BE0691F) ++ return False; ++ if (fetch32(code + 4) != 0x4BE1A91F) ++ return False; ++ if (fetch32(code + 8) != 0x4BE3A91F) ++ return False; ++ if (fetch32(code + 12) != 0x4BE2691F) ++ return False; ++ ++ /* 4-bytes type: ++ r4 = client_request ( r5 ): ++ 40C60746 bis $6, $6, $6 ++ ++ r4 = guest_NRADDR: ++ 40E70747 bis $7, $7, $7 ++ ++ branch-and-link-to-noredir r27: ++ 41080748 bis $8, $8, $8 ++ ++ IR injection: ++ 40840744 bis $4, $4, $4 ++ */ ++ UInt type = fetch32(code + 16); ++ ++ if (type == 0x40C60746) { ++ DIP("r4 = client_request ( r5 )\n"); ++ putPC(mkU64( guest_PC_curr_instr + 20 )); ++ dres->len = 20; ++ dres->jk_StopHere = Ijk_ClientReq; ++ dres->whatNext = Dis_StopHere; ++ return True; ++ } ++ ++ if (type == 0x40E70747) { ++ DIP("r4 = guest_NRADDR\n"); ++ putIReg(4, IRExpr_Get( OFFB_NRADDR, Ity_I64 )); ++ dres->len = 20; ++ dres->jk_StopHere = Ijk_INVALID; ++ dres->whatNext = Dis_Continue; ++ return True; ++ } ++ ++ if (type == 0x41080748) { ++ DIP("branch-and-link-to-noredir r27\n"); ++ putIReg(26, mkU64(guest_PC_curr_instr + 20)); ++ putPC(getIReg(27)); ++ dres->len = 20; ++ dres->jk_StopHere = Ijk_NoRedir; ++ dres->whatNext = Dis_StopHere; ++ return True; ++ } ++ ++ if (type == 0x40840744) { ++ DIP("IR injection\n"); ++ vex_inject_ir(irsb, Iend_LE); ++ // Invalidate the current insn. The reason is that the IRop we're ++ // injecting here can change. In which case the translation has to ++ // be redone. For ease of handling, we simply invalidate all the ++ // time. ++ stmt(IRStmt_Put(OFFB_CMSTART, mkU64(guest_PC_curr_instr))); ++ stmt(IRStmt_Put(OFFB_CMLEN, mkU64(20))); ++ putPC(mkU64( guest_PC_curr_instr + 20 )); ++ dres->len = 20; ++ dres->whatNext = Dis_StopHere; ++ dres->jk_StopHere = Ijk_InvalICache; ++ return True; ++ } ++ ++ return False; ++} ++ ++ ++/*------------------------------------------------------------*/ ++/*--- Disassemble a single SW64 instruction ---*/ ++/*------------------------------------------------------------*/ ++ ++/* Disassemble a single SW64 instruction into IR. The instruction ++ has is located at |guest_instr| and has guest IP of ++ |guest_PC_curr_instr|, which will have been set before the call ++ here. Returns True iff the instruction was decoded, in which case ++ *dres will be set accordingly, or False, in which case *dres should ++ be ignored by the caller. */ ++ ++static ++Bool disInstr_SW64_WRK ( ++ /*MB_OUT*/DisResult* dres, ++ const UChar* guest_instr, ++ const VexArchInfo* archinfo, ++ const VexAbiInfo* abiinfo, ++ Bool sigill_diag ++ ) ++{ ++ /* At least this is simple on SW64: insns are all 4 bytes long, and ++ 4-aligned. So just fish the whole thing out of memory right now ++ and have done. */ ++ UInt insn = fetch32( guest_instr ); ++ ++ DIP("\t(sw64) 0x%llx: ", (ULong)guest_PC_curr_instr); ++ ++ if (handle_special_instr(dres)) { ++ return True; ++ } ++ ++ /* Main SW64 instruction decoder starts here. */ ++ ++ UInt opcode = extract(insn, 31, 26); ++ ++ switch (opcode) { ++ /* SYSCALL */ ++ case 0x0: { ++ return dis_SW64_syscall(dres, insn); ++ } ++ ++ /* CALL RET JMP */ ++ case 0x1: ++ case 0x2: ++ case 0x3: { ++ return dis_SW64_jump(dres, insn); ++ } ++ ++ /* BR BSR */ ++ case 0x4: ++ case 0x5: ++ /* LBR */ ++ case 0x1D: ++ /* BEQ BNE BLT BLE BGT BGE BLBC BLBS */ ++ case 0x30: ++ case 0x31: ++ case 0x32: ++ case 0x33: ++ case 0x34: ++ case 0x35: ++ case 0x36: ++ case 0x37: ++ /* FBEQ FBNE FBLT FBLE FBGT FBGE */ ++ case 0x38: ++ case 0x39: ++ case 0x3A: ++ case 0x3B: ++ case 0x3C: ++ case 0x3D: { ++ return dis_SW64_branch(dres, insn); ++ } ++ ++ case 0x6: { ++ return dis_SW64_memb_and_rtc_insn(insn); ++ } ++ ++ /* LL/SC ATOM NC*/ ++ case 0x8: { ++ UInt ra = extract(insn, 25,21); ++ UInt rb = extract(insn, 20,16); ++ UInt func = extract(insn, 15,12); ++ UInt disp = extract(insn, 11,0); ++ ++ switch (func) { ++ /* LLDW LLDL */ ++ case 0x0: ++ case 0x1: { ++ return dis_SW64_lockload_fallback(func, ra, rb, disp); ++ } ++ ++ /* LSTW LSTL */ ++ case 0x8: ++ case 0x9: { ++ return dis_SW64_lockstore_fallback(func, ra, rb, disp); ++ } ++ ++ /* LDW_INC LDL_INC LDW_DEC LDL_DEC LDW_SET LDL_SET */ ++ case 0x2: ++ case 0x3: ++ case 0x4: ++ case 0x5: ++ case 0x6: ++ case 0x7: { ++ /* Removed in SW6B */ ++ return False; ++ } ++ ++ /* LDW_NC LDL_NC LDD_NC */ ++ case 0xA: ++ case 0xB: ++ case 0xC: { ++ return dis_SW64_nc_load(func, ra, rb, disp); ++ } ++ ++ /* STW_NC STL_NC STD_NC */ ++ case 0xD: ++ case 0xE: ++ case 0xF: { ++ return dis_SW64_nc_store(func, ra, rb, disp); ++ } ++ ++ default: { ++ return False; ++ } ++ } ++ } ++ ++ /* LDWE LDSE LDDE VLDS VLDD */ ++ case 0x9: ++ case 0xA: ++ case 0xB: ++ case 0xC: ++ case 0xD: { ++ UInt ra = extract(insn, 25, 21); ++ if (ra == 31) ++ return dis_SW64_prefetch(insn); ++ else ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* VSTS VSTD */ ++ case 0xE: ++ case 0xF: { ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* integer arthimetics: 3 register */ ++ case 0x10: ++ /* integer arthimetics: 2 register + 1 imm */ ++ case 0x12: { ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt imm = extract(insn, 20, 13); ++ UInt func = extract(insn, 12, 5); ++ UInt rc = extract(insn, 4, 0); ++ ++ switch (func) { ++ /* ADDW SUBW S4ADDW S4SUBW S8ADDW S8SUBW */ ++ case 0x0: ++ case 0x1: ++ case 0x2: ++ case 0x3: ++ case 0x4: ++ case 0x5: ++ /* ADDW SUBW S4ADDW S4SUBW S8ADDW S8SUBW */ ++ case 0x8: ++ case 0x9: ++ case 0xA: ++ case 0xB: ++ case 0xC: ++ case 0xD: { ++ return dis_SW64_integer_add_sub(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x10: ++ case 0x18: ++ case 0x19: { ++ return dis_SW64_integer_mul(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x1A: ++ case 0x1B: ++ case 0x1C: ++ case 0x1D: { ++ if (opcode == 0x12) { ++ /* no immediate variant */ ++ return False; ++ } ++ return dis_SW64_integer_div(func, ra, rb, rc); ++ } ++ ++ case 0x1E: ++ case 0x1F: { ++ if (opcode == 0x10) { ++ /* only immediate variant, and used 0x10 as opcode */ ++ return dis_SW64_addpi(func, rc, extract(insn, 25, 13)); ++ } ++ return False; ++ } ++ ++ case 0x20: ++ case 0x21: ++ case 0x22: ++ case 0x23: ++ case 0x24: ++ case 0x25: ++ case 0x26: ++ case 0x27: { ++ if (opcode == 0x12) { ++ /* no immediate variant */ ++ return False; ++ } ++ return dis_SW64_crc32(func, ra, rb, rc); ++ } ++ ++ case 0x28: ++ case 0x29: ++ case 0x2A: ++ case 0x2B: ++ case 0x2C: { ++ return dis_SW64_integer_cmp(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x2D: ++ case 0x2E: { ++ return dis_SW64_bit_setclear(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x38: ++ case 0x39: ++ case 0x3A: ++ case 0x3B: ++ case 0x3C: ++ case 0x3D: { ++ return dis_SW64_bits_logical(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x40: ++ case 0x41: ++ case 0x42: ++ case 0x43: ++ case 0x44: ++ case 0x45: ++ case 0x46: ++ case 0x47: { ++ return dis_SW64_bits_insert(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x48: ++ case 0x49: ++ case 0x4A: ++ case 0x4B: ++ case 0x4C: ++ case 0x4D: ++ case 0x4E: ++ case 0x4F: { ++ return dis_SW64_bits_shift(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x50: ++ case 0x51: ++ case 0x52: ++ case 0x53: ++ case 0x54: ++ case 0x55: ++ case 0x56: ++ case 0x57: { ++ return dis_SW64_bits_extract(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x58: ++ case 0x59: ++ case 0x5A: { ++ return dis_SW64_bits_pop(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x5B: ++ case 0x5C: ++ case 0x5D: { ++ if (opcode == 0x12) { ++ /* no immediate variant */ ++ return False; ++ } ++ return dis_SW64_byte_swap(func, rb, rc); ++ } ++ ++ case 0x5E: ++ case 0x5F: { ++ return dis_SW64_cas(opcode, func, ra, rb, rc); ++ } ++ ++ case 0x60: ++ case 0x61: ++ case 0x62: ++ case 0x63: ++ case 0x64: ++ case 0x65: ++ case 0x66: ++ case 0x67: { ++ return dis_SW64_bits_mask(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x68: ++ case 0x69: ++ case 0x6A: ++ case 0x6B: ++ case 0x6C: { ++ return dis_SW64_bits_zap(opcode, func, ra, rb, rc, imm); ++ } ++ ++ case 0x70: ++ case 0x78: { ++ return dis_SW64_intflt_transfer(opcode, func, ra, rc); ++ } ++ ++ case 0x72: ++ case 0x74: ++ case 0x7a: ++ case 0x7c: ++ case 0x80: ++ case 0x81: ++ case 0x82: ++ case 0x83: ++ case 0x84: ++ case 0x85: ++ case 0x86: ++ case 0x87: ++ case 0x88: ++ case 0x89: ++ case 0x8a: ++ case 0x8b: ++ case 0x8c: ++ case 0x8d: ++ case 0x8e: ++ case 0x8f: { ++ return dis_SW64_fltint_convert(opcode, func, rb, rc); ++ } ++ ++ default: { ++ return False; ++ } ++ } ++ } ++ ++ /* SELxx */ ++ case 0x11: ++ /* SELIxx*/ ++ case 0x13: { ++ return dis_SW64_sel(insn); ++ } ++ ++ /* VLOGzz */ ++ case 0x14: ++ case 0x15: ++ case 0x16: ++ case 0x17: { ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* float calculation - 3 register */ ++ case 0x18: { ++ UInt func = extract(insn, 12, 5); ++ UInt fa = extract(insn, 25, 21); ++ UInt fb = extract(insn, 20, 16); ++ UInt fc = extract(insn, 4, 0); ++ switch (func) { ++ /* FADDS FADDD FSUBS FSUBD */ ++ case 0x0: ++ case 0x1: ++ case 0x2: ++ case 0x3: ++ /* FMULS FMULD FDIVS FDIVD */ ++ case 0x4: ++ case 0x5: ++ case 0x6: ++ case 0x7: { ++ return dis_SW64_float_arith(func, fa, fb, fc); ++ } ++ ++ /* FSQRTS FSQRTD */ ++ case 0x8: ++ case 0x9: { ++ return dis_SW64_fsqrt(func, fb, fc); ++ } ++ ++ /* FCMPEQ FCMPLE FCMPLT FCMPUN */ ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: { ++ return dis_SW64_fcmp(func, fa, fb, fc); ++ } ++ ++ /* FCVTSD FCVTDS */ ++ case 0x20: ++ case 0x21: ++ /* FCVTDL_G FCVTDL_P FCVTDL_Z FCVTDL_N */ ++ case 0x22: ++ case 0x23: ++ case 0x24: ++ case 0x25: ++ /* FCVTDL FCVTWL FCVTLW */ ++ case 0x27: ++ case 0x28: ++ case 0x29: ++ /* FCVTLS FCVTLD */ ++ case 0x2D: ++ case 0x2F: { ++ return dis_SW64_fcvt(func, fb, fc); ++ } ++ ++ /* FCPYS FCPYSE FCPYSN */ ++ case 0x30: ++ case 0x31: ++ case 0x32: { ++ return dis_SW64_fcpy(func, fa, fb, fc); ++ } ++ ++ /* IFMOVS IFMOVD */ ++ case 0x40: ++ case 0x41: { ++ return dis_SW64_intflt_transfer(opcode, func, fa, fc); ++ } ++ ++ /* CMOVLS CMOVWS CMOVLD CMOVWD CMOVULS CMOVUWS CMOVULD CMOVUWD */ ++ case 0x48: ++ case 0x49: ++ case 0x4a: ++ case 0x4b: ++ case 0x4c: ++ case 0x4d: ++ case 0x4e: ++ case 0x4f: { ++ return dis_SW64_intflt_convert(opcode, func, fb, fc); ++ } ++ ++ /* RFPCR WFPCR SETFPEC0 SETFPEC1 SETFPEC2 SETFPEC3 */ ++ case 0x50: ++ case 0x51: ++ case 0x54: ++ case 0x55: ++ case 0x56: ++ case 0x57: { ++ return dis_SW64_fpcr(insn, func); ++ } ++ ++ /* FRECS FRECD */ ++ case 0x58: ++ case 0x59: { ++ return dis_SW64_frec(func, fa, fc); ++ } ++ ++ /* FRIS FRID FRIS_x FRID_x */ ++ case 0x5a: ++ case 0x5b: ++ case 0x5c: ++ case 0x5d: ++ case 0x5f: ++ case 0x60: ++ case 0x61: ++ case 0x62: ++ case 0x63: ++ case 0x64: { ++ return dis_SW64_fpround(func, fb, fc); ++ } ++ ++ default: { ++ return False; ++ } ++ } /* switch (func) */ ++ } ++ ++ /* float calculation - 4 register */ ++ case 0x19: { ++ UInt func = extract(insn, 15, 10); ++ UInt fa = extract(insn, 25, 21); ++ UInt fb = extract(insn, 20, 16); ++ UInt fc = extract(insn, 9, 5); ++ UInt fd = extract(insn, 4, 0); ++ switch (func) { ++ /* FMAS FMAD FMSS FMSD */ ++ case 0x0: ++ case 0x1: ++ case 0x2: ++ case 0x3: ++ /* FNMAS FNMAD FNMSS FNMSD */ ++ case 0x4: ++ case 0x5: ++ case 0x6: ++ case 0x7: { ++ return dis_SW64_fma(func, fa, fb, fc, fd); ++ } ++ ++ /* FSELEQ FSELNE FSELLT FSELLE FSELGT FSELGE */ ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x15: { ++ return dis_SW64_fsel(func, fa, fb, fc, fd); ++ } ++ ++ default: { ++ return False; ++ } ++ } ++ } ++ ++ /* SIMD calculation - 3 register */ ++ case 0x1A: { ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* SIMD calculation - 4 register */ ++ case 0x1B: { ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* SIMD load/store - with function code */ ++ case 0x1C: { ++ return False; /* TODO: SW64_SIMD */ ++ } ++ ++ /* scalar load/store - with auto address increasing */ ++ case 0x1E: { ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt func = extract(insn, 15, 12); ++ UInt disp = extract(insn, 11, 0); ++ switch (func) { ++ case 0x0: ++ case 0x1: ++ case 0x2: ++ case 0x3: { ++ return dis_SW64_integer_load(func, ra, rb, disp, True); ++ } ++ case 0x4: ++ case 0x5: { ++ return dis_SW64_float_load(func, ra, rb, disp, True); ++ } ++ case 0x6: ++ case 0x7: ++ case 0x8: ++ case 0x9: { ++ return dis_SW64_integer_store(func, ra, rb, disp, True); ++ } ++ case 0xA: ++ case 0xB: { ++ return dis_SW64_float_store(func, ra, rb, disp, True); ++ } ++ case 0xE: ++ case 0xF: { ++ return dis_SW64_prefetch(insn); ++ } ++ default: return False; ++ } ++ } ++ ++ /* LDBU LDHU LDW LDL LDL_U */ ++ case 0x20: ++ case 0x21: ++ case 0x22: ++ case 0x23: ++ case 0x24: { ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ if (ra == 31) ++ return dis_SW64_prefetch(insn); ++ else ++ return dis_SW64_integer_load(opcode, ra, rb, disp, False); ++ } ++ ++ /* PRI_RET PRI_LD PRI_ST */ ++ case 0x7: ++ case 0x25: ++ case 0x2D: { ++ /* */ ++ return False; ++ } ++ ++ /* FLDS FLDD */ ++ case 0x26: ++ case 0x27: { ++ UInt fa = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ if (fa == 31) ++ return dis_SW64_prefetch(insn); ++ else ++ return dis_SW64_float_load(opcode, fa, rb, disp, False); ++ } ++ ++ /* STB STH STW STL STL_U */ ++ case 0x28: ++ case 0x29: ++ case 0x2A: ++ case 0x2B: ++ case 0x2C: { ++ UInt ra = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ return dis_SW64_integer_store(opcode, ra, rb, disp, False); ++ } ++ ++ /* FSTS FSTD */ ++ case 0x2E: ++ case 0x2F: { ++ UInt fa = extract(insn, 25, 21); ++ UInt rb = extract(insn, 20, 16); ++ UInt disp = extract(insn, 15, 0); ++ return dis_SW64_float_store(opcode, fa, rb, disp, False); ++ } ++ ++ /* LDI LDIH */ ++ case 0x3E: ++ case 0x3F: { ++ return dis_SW64_load_imm(dres, insn); ++ } ++ ++ default: { ++ return False; ++ } ++ } ++} ++ ++ ++/*------------------------------------------------------------*/ ++/*--- Top-level fn ---*/ ++/*------------------------------------------------------------*/ ++ ++/* Disassemble a single instruction into IR. The instruction ++ is located in host memory at &guest_code[delta]. */ ++ ++DisResult disInstr_SW64 ( IRSB* irsb_IN, ++ const UChar* guest_code_IN, ++ Long delta_IN, ++ Addr guest_IP, ++ VexArch guest_arch, ++ const VexArchInfo* archinfo, ++ const VexAbiInfo* abiinfo, ++ VexEndness host_endness_IN, ++ Bool sigill_diag_IN ) ++{ ++ DisResult dres; ++ vex_bzero(&dres, sizeof(dres)); ++ ++ /* Set globals (see top of this file) */ ++ vassert(guest_arch == VexArchSW64); ++ ++ /* instructions should already aligned to 4-bytes in guest memory */ ++ vassert(0 == (guest_IP & 3ULL)); ++ ++ irsb = irsb_IN; ++ host_endness = host_endness_IN; ++ guest_PC_curr_instr = (Addr64)guest_IP; ++ ++ dres.len = 4; ++ dres.jk_StopHere = Ijk_INVALID; ++ dres.whatNext = Dis_Continue; ++ dres.hint = Dis_HintNone; ++ ++ /* Try to decode */ ++ Bool ok = disInstr_SW64_WRK( &dres, ++ &guest_code_IN[delta_IN], ++ archinfo, abiinfo, sigill_diag_IN ); ++ ++ if (ok) { ++ /* All decode successes end up here. */ ++ vassert(dres.len == 4 || dres.len == 20); ++ switch (dres.whatNext) { ++ case Dis_Continue: ++ putPC( mkU64(dres.len + guest_PC_curr_instr) ); ++ break; ++ case Dis_StopHere: ++ break; ++ default: ++ vassert(0); ++ } ++ DIP("\n"); ++ } else { ++ /* All decode failures end up here. */ ++ if (sigill_diag_IN) { ++ vex_printf("disInstr(sw64): unhandled instruction: %02x %02x %02x %02x (opcode: %x)\n", ++ guest_code_IN[delta_IN + 0], ++ guest_code_IN[delta_IN + 1], ++ guest_code_IN[delta_IN + 2], ++ guest_code_IN[delta_IN + 3], ++ ((UInt)guest_code_IN[delta_IN + 3]) >> 2); ++ } ++ ++ /* Tell the dispatcher that this insn cannot be decoded, and so ++ has not been executed, and (is currently) the next to be ++ executed. PC should be up-to-date since it is made so at the ++ start of each insn, but nevertheless be paranoid and update ++ it again right now. */ ++ putPC( mkU64(guest_PC_curr_instr) ); ++ dres.len = 0; ++ dres.whatNext = Dis_StopHere; ++ dres.jk_StopHere = Ijk_NoDecode; ++ } ++ return dres; ++} ++ ++ ++/*--------------------------------------------------------------------*/ ++/*--- end guest_sw64_toIR.c ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/VEX/priv/host_amd64_defs.c b/VEX/priv/host_amd64_defs.c +index 69afab739..4dbff80ae 100644 +--- a/VEX/priv/host_amd64_defs.c ++++ b/VEX/priv/host_amd64_defs.c +@@ -2529,7 +2529,7 @@ static UChar* do_ffree_st ( UChar* p, Int n ) + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ + +-Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const AMD64Instr* i, + Bool mode64, VexEndness endness_host, + const void* disp_cp_chain_me_to_slowEP, +diff --git a/VEX/priv/host_amd64_defs.h b/VEX/priv/host_amd64_defs.h +index e2ed2613b..25a9f57c0 100644 +--- a/VEX/priv/host_amd64_defs.h ++++ b/VEX/priv/host_amd64_defs.h +@@ -814,7 +814,7 @@ extern void ppAMD64Instr ( const AMD64Instr*, Bool ); + of the underlying instruction set. */ + extern void getRegUsage_AMD64Instr ( HRegUsage*, const AMD64Instr*, Bool ); + extern void mapRegs_AMD64Instr ( HRegRemap*, AMD64Instr*, Bool ); +-extern Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, ++extern Int emit_AMD64Instr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, + const AMD64Instr* i, + Bool mode64, +diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c +index 39c6aaa46..f4a083744 100644 +--- a/VEX/priv/host_arm64_defs.c ++++ b/VEX/priv/host_arm64_defs.c +@@ -3621,7 +3621,7 @@ static UInt* do_load_or_store64 ( UInt* p, + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ + +-Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const ARM64Instr* i, + Bool mode64, VexEndness endness_host, + const void* disp_cp_chain_me_to_slowEP, +diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h +index dc686dff7..6fadcf5d9 100644 +--- a/VEX/priv/host_arm64_defs.h ++++ b/VEX/priv/host_arm64_defs.h +@@ -1109,7 +1109,7 @@ extern void ppARM64Instr ( const ARM64Instr* ); + of the underlying instruction set. */ + extern void getRegUsage_ARM64Instr ( HRegUsage*, const ARM64Instr*, Bool ); + extern void mapRegs_ARM64Instr ( HRegRemap*, ARM64Instr*, Bool ); +-extern Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, ++extern Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const ARM64Instr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/host_arm_defs.c b/VEX/priv/host_arm_defs.c +index 6f972a41b..a29ca38a6 100644 +--- a/VEX/priv/host_arm_defs.c ++++ b/VEX/priv/host_arm_defs.c +@@ -3067,7 +3067,7 @@ static UInt* do_load_or_store32 ( UInt* p, + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ + +-Int emit_ARMInstr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_ARMInstr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const ARMInstr* i, + Bool mode64, VexEndness endness_host, + const void* disp_cp_chain_me_to_slowEP, +diff --git a/VEX/priv/host_arm_defs.h b/VEX/priv/host_arm_defs.h +index 0f4b51951..32bf07407 100644 +--- a/VEX/priv/host_arm_defs.h ++++ b/VEX/priv/host_arm_defs.h +@@ -1054,7 +1054,7 @@ extern void ppARMInstr ( const ARMInstr* ); + of the underlying instruction set. */ + extern void getRegUsage_ARMInstr ( HRegUsage*, const ARMInstr*, Bool ); + extern void mapRegs_ARMInstr ( HRegRemap*, ARMInstr*, Bool ); +-extern Int emit_ARMInstr ( /*MB_MOD*/Bool* is_profInc, ++extern Int emit_ARMInstr ( /*MB_MOD*/Bool* is_profInc, /*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const ARMInstr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/host_mips_defs.c b/VEX/priv/host_mips_defs.c +index 5af3b8565..8f0487f22 100644 +--- a/VEX/priv/host_mips_defs.c ++++ b/VEX/priv/host_mips_defs.c +@@ -3765,7 +3765,7 @@ static UChar *mkMoveReg(UChar * p, UInt r_dst, UInt r_src) + imperative to emit position-independent code. If the emitted + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ +-Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_MIPSInstr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const MIPSInstr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/host_mips_defs.h b/VEX/priv/host_mips_defs.h +index 96ab2f9a4..326af2c60 100644 +--- a/VEX/priv/host_mips_defs.h ++++ b/VEX/priv/host_mips_defs.h +@@ -1003,7 +1003,7 @@ extern void ppMIPSInstr(const MIPSInstr *, Bool mode64); + of the underlying instruction set. */ + extern void getRegUsage_MIPSInstr (HRegUsage *, const MIPSInstr *, Bool); + extern void mapRegs_MIPSInstr (HRegRemap *, MIPSInstr *, Bool mode64); +-extern Int emit_MIPSInstr (/*MB_MOD*/Bool* is_profInc, ++extern Int emit_MIPSInstr (/*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const MIPSInstr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/host_nanomips_defs.c b/VEX/priv/host_nanomips_defs.c +index b356d09d8..4ee9f90e8 100755 +--- a/VEX/priv/host_nanomips_defs.c ++++ b/VEX/priv/host_nanomips_defs.c +@@ -1341,7 +1341,7 @@ static UChar *mkLoadImm(UChar * p, UInt r_dst, UInt imm) + imperative to emit position-independent code. If the emitted + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ +-Int emit_NANOMIPSInstr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_NANOMIPSInstr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, + const NANOMIPSInstr* i, + Bool mode64, +diff --git a/VEX/priv/host_nanomips_defs.h b/VEX/priv/host_nanomips_defs.h +index 87219dab5..1df04f383 100644 +--- a/VEX/priv/host_nanomips_defs.h ++++ b/VEX/priv/host_nanomips_defs.h +@@ -391,7 +391,7 @@ extern HInstrArray *iselSB_NANOMIPS(const IRSB*, + Bool chainingAllowed, + Bool addProfInc, + Addr max_ga); +-extern Int emit_NANOMIPSInstr (/*MB_MOD*/Bool* is_profInc, ++extern Int emit_NANOMIPSInstr (/*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, + const NANOMIPSInstr* i, + Bool mode64, +diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c +index 4222b4786..5923db660 100644 +--- a/VEX/priv/host_ppc_defs.c ++++ b/VEX/priv/host_ppc_defs.c +@@ -4152,7 +4152,7 @@ static UChar* mkFormVA ( UChar* p, UInt opc1, UInt r1, UInt r2, + instruction was a profiler inc, set *is_profInc to True, else leave + it unchanged. + */ +-Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const PPCInstr* i, + Bool mode64, VexEndness endness_host, + const void* disp_cp_chain_me_to_slowEP, +diff --git a/VEX/priv/host_ppc_defs.h b/VEX/priv/host_ppc_defs.h +index 39dca08a2..3b3c0ad2c 100644 +--- a/VEX/priv/host_ppc_defs.h ++++ b/VEX/priv/host_ppc_defs.h +@@ -1266,7 +1266,7 @@ extern void ppPPCInstr(const PPCInstr*, Bool mode64); + of the underlying instruction set. */ + extern void getRegUsage_PPCInstr ( HRegUsage*, const PPCInstr*, Bool mode64 ); + extern void mapRegs_PPCInstr ( HRegRemap*, PPCInstr* , Bool mode64); +-extern Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc, ++extern Int emit_PPCInstr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const PPCInstr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c +index c811dc5b8..64d75f3ed 100644 +--- a/VEX/priv/host_s390_defs.c ++++ b/VEX/priv/host_s390_defs.c +@@ -11766,7 +11766,8 @@ s390_insn_vec_replicate_emit(UChar *buf, const s390_insn *insn) + + + Int +-emit_S390Instr(Bool *is_profinc, UChar *buf, Int nbuf, const s390_insn *insn, ++emit_S390Instr(Bool *is_profinc, /*MB_MOD*/Bool* is_8aligned, ++ UChar *buf, Int nbuf, const s390_insn *insn, + Bool mode64, VexEndness endness_host, + const void *disp_cp_chain_me_to_slowEP, + const void *disp_cp_chain_me_to_fastEP, +diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h +index 375cc8402..2d96e52d0 100644 +--- a/VEX/priv/host_s390_defs.h ++++ b/VEX/priv/host_s390_defs.h +@@ -877,8 +877,8 @@ UInt ppHRegS390(HReg); + of the underlying instruction set. */ + void getRegUsage_S390Instr( HRegUsage *, const s390_insn *, Bool ); + void mapRegs_S390Instr ( HRegRemap *, s390_insn *, Bool ); +-Int emit_S390Instr ( Bool *, UChar *, Int, const s390_insn *, Bool, +- VexEndness, const void *, const void *, ++Int emit_S390Instr ( Bool *, Bool *, UChar *, Int, const s390_insn *, ++ Bool, VexEndness, const void *, const void *, + const void *, const void *); + const RRegUniverse *getRRegUniverse_S390( void ); + void genSpill_S390 ( HInstr **, HInstr **, HReg , Int , Bool ); +diff --git a/VEX/priv/host_sw64_defs.c b/VEX/priv/host_sw64_defs.c +new file mode 100644 +index 000000000..45ec45e60 +--- /dev/null ++++ b/VEX/priv/host_sw64_defs.c +@@ -0,0 +1,3169 @@ ++/*---------------------------------------------------------------*/ ++/*--- begin host_sw64_defs.c ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2013-2017 OpenWorks ++ info@open-works.net ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "libvex_basictypes.h" ++#include "libvex.h" ++#include "libvex_trc_values.h" ++ ++#include "main_util.h" ++#include "host_generic_regs.h" ++#include "host_sw64_defs.h" ++ ++/* --------- Registers. --------- */ ++ ++/* The usual HReg abstraction. We use the following classes only: ++ R regs (64 bit int) ++ F regs (64 bit float, also used for 32 bit float) ++*/ ++ ++const RRegUniverse* getRRegUniverse_SW64 ( void ) ++{ ++ /* The real-register universe is a big constant, so we just want to ++ initialise it once. ++ rRegUniverse_SW64_initted values: 0=not initted, 1=initted */ ++ static RRegUniverse rRegUniverse_SW64; ++ static Bool rRegUniverse_SW64_initted = False; ++ ++ /* Handy shorthand, nothing more */ ++ RRegUniverse* ru = &rRegUniverse_SW64; ++ ++ /* This isn't thread-safe. Sigh. */ ++ if (LIKELY(rRegUniverse_SW64_initted)) ++ return ru; ++ ++ RRegUniverse__init(ru); ++ ++ /* Add the registers. The initial segment of this array must be ++ those available for allocation by reg-alloc, and those that ++ follow are not available for allocation. */ ++ ru->allocable_start[HRcInt64] = ru->size; ++ ru->regs[ru->size++] = hregSW64_R16(); ++ ru->regs[ru->size++] = hregSW64_R17(); ++ ru->regs[ru->size++] = hregSW64_R18(); ++ ru->regs[ru->size++] = hregSW64_R19(); ++ ru->regs[ru->size++] = hregSW64_R20(); ++ ru->regs[ru->size++] = hregSW64_R21(); ++ ru->regs[ru->size++] = hregSW64_R22(); ++ ru->regs[ru->size++] = hregSW64_R23(); ++ ru->regs[ru->size++] = hregSW64_R24(); ++ ru->regs[ru->size++] = hregSW64_R25(); ++ ru->regs[ru->size++] = hregSW64_R3(); ++ ru->regs[ru->size++] = hregSW64_R4(); ++ ru->regs[ru->size++] = hregSW64_R5(); ++ ru->regs[ru->size++] = hregSW64_R6(); ++ ru->regs[ru->size++] = hregSW64_R7(); ++ ru->regs[ru->size++] = hregSW64_R8(); ++ ru->regs[ru->size++] = hregSW64_R9(); ++ ru->regs[ru->size++] = hregSW64_R10(); ++ ru->regs[ru->size++] = hregSW64_R11(); ++ ru->regs[ru->size++] = hregSW64_R12(); ++ ru->allocable_end[HRcInt64] = ru->size - 1; ++ ++ /* F64 regs, all of which are callee-saved */ ++ ru->allocable_start[HRcFlt64] = ru->size; ++ ru->regs[ru->size++] = hregSW64_F2(); ++ ru->regs[ru->size++] = hregSW64_F3(); ++ ru->regs[ru->size++] = hregSW64_F4(); ++ ru->regs[ru->size++] = hregSW64_F5(); ++ ru->regs[ru->size++] = hregSW64_F6(); ++ ru->regs[ru->size++] = hregSW64_F7(); ++ ru->regs[ru->size++] = hregSW64_F8(); ++ ru->regs[ru->size++] = hregSW64_F9(); ++ ru->allocable_end[HRcFlt64] = ru->size - 1; ++ ++ ru->allocable = ru->size; ++ ++ /* And other regs, not available to the allocator. */ ++ ++ /* temporary, may use in ProcInc XDirect XIndir XAssisted LoadImm etc... */ ++ ru->regs[ru->size++] = hregSW64_R0(); ++ ru->regs[ru->size++] = hregSW64_R1(); ++ ru->regs[ru->size++] = hregSW64_R2(); ++ ++ /* reserved for future use */ ++ ru->regs[ru->size++] = hregSW64_R13(); ++ ru->regs[ru->size++] = hregSW64_R14(); ++ ++ /* used as guest pointer */ ++ ru->regs[ru->size++] = hregSW64_R15(); ++ ++ /* not available to allocator, of cause */ ++ ru->regs[ru->size++] = hregSW64_R26(); ++ ru->regs[ru->size++] = hregSW64_R27(); ++ ru->regs[ru->size++] = hregSW64_R28(); ++ ru->regs[ru->size++] = hregSW64_R29(); ++ ru->regs[ru->size++] = hregSW64_R30(); ++ ru->regs[ru->size++] = hregSW64_R31(); ++ ru->regs[ru->size++] = hregSW64_F31(); ++ ++ rRegUniverse_SW64_initted = True; ++ ++ RRegUniverse__check_is_sane(ru); ++ return ru; ++} ++ ++UInt ppHRegSW64(HReg reg) ++{ ++ Int r; ++ /* Be generic for all virtual regs. */ ++ if (hregIsVirtual(reg)) { ++ return ppHReg(reg); ++ } ++ /* But specific for real regs. */ ++ switch (hregClass(reg)) { ++ case HRcInt64: ++ r = hregEncoding(reg); ++ vassert(r >= 0 && r < 32); ++ if (r == 30) return vex_printf("sp"); ++ if (r == 29) return vex_printf("gp"); ++ if (r == 15) return vex_printf("fp"); ++ return vex_printf("r%d", r); ++ case HRcFlt64: ++ r = hregEncoding(reg); ++ vassert(r >= 0 && r < 32); ++ return vex_printf("f%d", r); ++ default: ++ vpanic("ppHRegSW64"); ++ } ++} ++ ++/* --------- SW64AMode: memory address expressions. --------- */ ++ ++SW64AModeRI *SW64AModeRI_IR(Int disp, HReg base) ++{ ++ SW64AModeRI *am = LibVEX_Alloc_inline(sizeof(SW64AModeRI)); ++ am->base = base; ++ am->disp = disp; ++ return am; ++} ++ ++void ppSW64AModeRI(SW64AModeRI * am) ++{ ++ if (am->disp == 0) ++ vex_printf("("); ++ else ++ vex_printf("%d(", (Int) am->disp); ++ ppHRegSW64(am->base); ++ vex_printf(")"); ++ return; ++} ++ ++/* --------- Helpers for register allocation. --------- */ ++ ++static void addRegUsage_SW64AModeRI(HRegUsage * u, SW64AModeRI * am) ++{ ++ addHRegUse(u, HRmRead, am->base); ++} ++ ++static void addRegUsage_SW64Cond(HRegUsage * u, SW64Cond * cond) ++{ ++ if (cond->code != SW64cc_AL) ++ addHRegUse(u, HRmRead, cond->reg); ++} ++ ++static void mapRegs_SW64AModeRI(HRegRemap * m, SW64AModeRI * am) ++{ ++ am->base = lookupHRegRemap(m, am->base); ++} ++ ++static void mapRegs_SW64Cond(HRegRemap * m, SW64Cond * cond) ++{ ++ if (cond->code != SW64cc_AL) ++ cond->reg = lookupHRegRemap(m, cond->reg); ++} ++ ++/* --------- Operand, which can be a reg or a u8. --------- */ ++ ++SW64RI8 *SW64RI8_Imm(UChar imm8) ++{ ++ SW64RI8 *op = LibVEX_Alloc_inline(sizeof(SW64RI8)); ++ op->tag = Sri8_Imm; ++ op->Sri8.Imm.imm8 = imm8; ++ return op; ++} ++ ++SW64RI8 *SW64RI8_Reg(HReg reg) ++{ ++ SW64RI8 *op = LibVEX_Alloc_inline(sizeof(SW64RI8)); ++ op->tag = Sri8_Reg; ++ op->Sri8.Reg.reg = reg; ++ return op; ++} ++ ++void ppSW64RI8(SW64RI8 * op) ++{ ++ SW64RI8Tag tag = op->tag; ++ switch (tag) { ++ case Sri8_Imm: ++ vex_printf("%u", (UInt)op->Sri8.Imm.imm8); ++ return; ++ case Sri8_Reg: ++ ppHRegSW64(op->Sri8.Reg.reg); ++ return; ++ default: ++ vpanic("ppSW64RI8"); ++ break; ++ } ++} ++ ++/* An SW64RH can only be used in a "read" context (what would it mean ++ to write or modify a literal?) and so we enumerate its registers ++ accordingly. */ ++static void addRegUsage_SW64RI8(HRegUsage * u, SW64RI8 * op) ++{ ++ switch (op->tag) { ++ case Sri8_Imm: ++ return; ++ case Sri8_Reg: ++ addHRegUse(u, HRmRead, op->Sri8.Reg.reg); ++ return; ++ default: ++ vpanic("addRegUsage_SW64RI8"); ++ break; ++ } ++} ++ ++static void mapRegs_SW64RI8(HRegRemap * m, SW64RI8 * op) ++{ ++ switch (op->tag) { ++ case Sri8_Imm: ++ return; ++ case Sri8_Reg: ++ op->Sri8.Reg.reg = lookupHRegRemap(m, op->Sri8.Reg.reg); ++ return; ++ default: ++ vpanic("mapRegs_SW64RI8"); ++ break; ++ } ++} ++ ++/*-----Integer load and store------*/ ++SW64Instr *SW64Instr_Load(SW64LoadOp op, HReg dst, SW64AModeRI *addr) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Load; ++ i->SW64in.Load.op = op; ++ i->SW64in.Load.dst = dst; ++ i->SW64in.Load.addr = addr; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Store(SW64StoreOp op, HReg src, SW64AModeRI *addr) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Store; ++ i->SW64in.Store.op = op; ++ i->SW64in.Store.src = src; ++ i->SW64in.Store.addr = addr; ++ return i; ++} ++ ++/*-----Float load and store------*/ ++SW64Instr *SW64Instr_FpLoad(SW64FpLoadOp op, HReg dst, SW64AModeRI *addr) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpLoad; ++ i->SW64in.FpLoad.op = op; ++ i->SW64in.FpLoad.dst = dst; ++ i->SW64in.FpLoad.addr = addr; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpStore(SW64FpStoreOp op, HReg src, SW64AModeRI *addr) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpStore; ++ i->SW64in.FpStore.op = op; ++ i->SW64in.FpStore.src = src; ++ i->SW64in.FpStore.addr = addr; ++ return i; ++} ++ ++SW64Instr *SW64Instr_LoadImm(HReg dst, ULong imm64) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_LoadImm; ++ i->SW64in.LoadImm.imm64 = imm64; ++ i->SW64in.LoadImm.dst = dst; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Cas(UChar sz, HReg res, HReg old, HReg addr, HReg expd, HReg data) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_CAS; ++ i->SW64in.Cas.sz = sz; ++ i->SW64in.Cas.old = old; ++ i->SW64in.Cas.addr = addr; ++ i->SW64in.Cas.expd = expd; ++ i->SW64in.Cas.data = data; ++ return i; ++} ++ ++SW64Instr *SW64Instr_UnOperate(SW64UnOp op, HReg dst, HReg src) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_UnOperate; ++ i->SW64in.UnOperate.op = op; ++ i->SW64in.UnOperate.src = src; ++ i->SW64in.UnOperate.dst = dst; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpArith(SW64FpArithOp op, HReg dst, HReg srcL, HReg srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpArith; ++ i->SW64in.FpArith.op = op; ++ i->SW64in.FpArith.dst = dst; ++ i->SW64in.FpArith.srcL = srcL; ++ i->SW64in.FpArith.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpCpy(SW64FpCpyOp op, HReg dst, HReg src1, HReg src2) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpCpy; ++ i->SW64in.FpCpy.op = op; ++ i->SW64in.FpCpy.dst = dst; ++ i->SW64in.FpCpy.src1 = src1; ++ i->SW64in.FpCpy.src2 = src2; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpQuary(SW64FpQuaryOp op, HReg dst, HReg src1, HReg src2, HReg src3) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpQuary; ++ i->SW64in.FpQuary.op = op; ++ i->SW64in.FpQuary.dst = dst; ++ i->SW64in.FpQuary.src1 = src1; ++ i->SW64in.FpQuary.src2 = src2; ++ i->SW64in.FpQuary.src3 = src3; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpUnary(SW64FpUnaryOp op, HReg dst, HReg src) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpUnary; ++ i->SW64in.FpUnary.op = op; ++ i->SW64in.FpUnary.dst = dst; ++ i->SW64in.FpUnary.src = src; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpGpMove(SW64FpGpMoveOp op, HReg dst, HReg src) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpGpMove; ++ i->SW64in.FpGpMove.op = op; ++ i->SW64in.FpGpMove.src = src; ++ i->SW64in.FpGpMove.dst = dst; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpSel(SW64FpSelOp op, HReg dst, HReg iftrue, HReg iffalse, HReg cond ) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpSel; ++ i->SW64in.FpSel.op = op; ++ i->SW64in.FpSel.cond = cond; ++ i->SW64in.FpSel.dst = dst; ++ i->SW64in.FpSel.iftrue = iftrue; ++ i->SW64in.FpSel.iffalse = iffalse; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpCmp(SW64FpCmpOp op, HReg dst, HReg srcL, HReg srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpCmp; ++ i->SW64in.FpCmp.op = op; ++ i->SW64in.FpCmp.dst = dst; ++ i->SW64in.FpCmp.srcL = srcL; ++ i->SW64in.FpCmp.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_FpCvt(SW64FpCvtOp op, HReg dst, HReg src) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_FpCvt; ++ i->SW64in.FpCvt.op = op; ++ i->SW64in.FpCvt.src = src; ++ i->SW64in.FpCvt.dst = dst; ++ return i; ++} ++ ++SW64Instr *SW64Instr_RFPCR (HReg dst) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_RFPCR; ++ i->SW64in.RFPCR.dst = dst; ++ return i; ++} ++ ++SW64Instr *SW64Instr_WFPCR (HReg src) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_WFPCR; ++ i->SW64in.WFPCR.src = src; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Logic(SW64LogicOp op, HReg dst, HReg srcL, SW64RI8 * srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Logic; ++ i->SW64in.Logic.op = op; ++ i->SW64in.Logic.dst = dst; ++ i->SW64in.Logic.srcL = srcL; ++ i->SW64in.Logic.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Cmp(SW64CmpOp op, HReg dst, HReg srcL, SW64RI8 * srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Cmp; ++ i->SW64in.Cmp.op = op; ++ i->SW64in.Cmp.dst = dst; ++ i->SW64in.Cmp.srcL = srcL; ++ i->SW64in.Cmp.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Shft(SW64ShftOp op, HReg dst, HReg srcL, SW64RI8 *srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Shft; ++ i->SW64in.Shft.op = op; ++ i->SW64in.Shft.dst = dst; ++ i->SW64in.Shft.srcL = srcL; ++ i->SW64in.Shft.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Arith(SW64ArithOp op, HReg dst, HReg srcL, SW64RI8 *srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Arith; ++ i->SW64in.Arith.op = op; ++ i->SW64in.Arith.dst = dst; ++ i->SW64in.Arith.srcL = srcL; ++ i->SW64in.Arith.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_IntDiv(SW64IntDivOp op, HReg dst, HReg srcL, HReg srcR) ++{ ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_IntDiv; ++ i->SW64in.IntDiv.op = op; ++ i->SW64in.IntDiv.dst = dst; ++ i->SW64in.IntDiv.srcL = srcL; ++ i->SW64in.IntDiv.srcR = srcR; ++ return i; ++} ++ ++SW64Instr *SW64Instr_XDirect ( Addr64 dstGA, SW64AModeRI* amPC, ++ SW64Cond* cond, Bool toFastEP ) { ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_XDirect; ++ i->SW64in.XDirect.dstGA = dstGA; ++ i->SW64in.XDirect.amPC = amPC; ++ i->SW64in.XDirect.cond = cond; ++ i->SW64in.XDirect.toFastEP = toFastEP; ++ return i; ++} ++ ++SW64Instr *SW64Instr_XIndir ( HReg dstGA, SW64AModeRI* amPC, ++ SW64Cond* cond ) { ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_XIndir; ++ i->SW64in.XIndir.dstGA = dstGA; ++ i->SW64in.XIndir.amPC = amPC; ++ i->SW64in.XIndir.cond = cond; ++ return i; ++} ++ ++SW64Instr *SW64Instr_XAssisted ( HReg dstGA, SW64AModeRI* amPC, ++ SW64Cond* cond, IRJumpKind jk ) { ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_XAssisted; ++ i->SW64in.XAssisted.dstGA = dstGA; ++ i->SW64in.XAssisted.amPC = amPC; ++ i->SW64in.XAssisted.cond = cond; ++ i->SW64in.XAssisted.jk = jk; ++ return i; ++} ++ ++SW64Instr* SW64Instr_CondSel ( SW64CondSelOp op, HReg dst, HReg iftrue, HReg iffalse, HReg cond) ++{ ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_CondSel; ++ i->SW64in.CondSel.op = op; ++ i->SW64in.CondSel.dst = dst; ++ i->SW64in.CondSel.iftrue = iftrue; ++ i->SW64in.CondSel.iffalse = iffalse; ++ i->SW64in.CondSel.cond = cond; ++ return i; ++} ++ ++SW64Instr *SW64Instr_EvCheck ( SW64AModeRI* amCounter, SW64AModeRI* amFailAddr ) ++{ ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_EvCheck; ++ i->SW64in.EvCheck.amCounter = amCounter; ++ i->SW64in.EvCheck.amFailAddr = amFailAddr; ++ return i; ++} ++ ++SW64Instr* SW64Instr_ProfInc ( void ) ++{ ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_ProfInc; ++ return i; ++} ++ ++SW64Instr *SW64Instr_Call ( SW64Cond* cond, ++ Addr64 target, UInt argiregs, RetLoc rloc ) ++{ ++ UInt mask; ++ SW64Instr *i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Call; ++ i->SW64in.Call.cond = cond; ++ i->SW64in.Call.target = target; ++ i->SW64in.Call.argiregs = argiregs; ++ i->SW64in.Call.rloc = rloc; ++ /* Only $16 .. $21 inclusive may be used as arg regs. */ ++ UInt base = 16; ++ mask = (1 << (16-base)) | (1 << (17-base)) | (1 << (18-base)) | (1 << (19-base)) | (1 << (20-base)) | (1 << (21-base)); ++ vassert(0 == (argiregs & ~mask)); ++ vassert(is_sane_RetLoc(rloc)); ++ return i; ++} ++ ++SW64Instr* SW64Instr_MFence(void) ++{ ++ SW64Instr* i = LibVEX_Alloc_inline(sizeof(SW64Instr)); ++ i->tag = SW64in_Mfence; ++ return i; ++} ++ ++SW64Cond *SW64Cond_Cond(SW64CondCode code, HReg reg) ++{ ++ SW64Cond* c = LibVEX_Alloc_inline(sizeof(SW64Cond)); ++ c->code = code; ++ c->reg = reg; ++ return c; ++} ++ ++SW64Cond *SW64Cond_ALWAYS(void) ++{ ++ SW64Cond* c = LibVEX_Alloc_inline(sizeof(SW64Cond)); ++ c->code = SW64cc_AL; ++ c->reg = INVALID_HREG; ++ return c; ++} ++ ++void ppSW64Cond(const SW64Cond *cond) ++{ ++ if (cond->code == SW64cc_AL) { ++ vex_printf("if (true) "); ++ } else { ++ const char *str = (cond->code == SW64cc_EQ ) ? " == 0)" : ++ (cond->code == SW64cc_NE ) ? " != 0)" : ++ (cond->code == SW64cc_LT ) ? " < 0)" : ++ (cond->code == SW64cc_LE ) ? " <= 0)" : ++ (cond->code == SW64cc_GT ) ? " > 0)" : ++ (cond->code == SW64cc_GE ) ? " >= 0)" : ++ (cond->code == SW64cc_FEQ) ? " == 0.0)" : ++ (cond->code == SW64cc_FNE) ? " != 0.0)" : ++ (cond->code == SW64cc_FLT) ? " < 0.0)" : ++ (cond->code == SW64cc_FLE) ? " <= 0.0)" : ++ (cond->code == SW64cc_FGT) ? " > 0.0)" : ++ (cond->code == SW64cc_FGE) ? " >= 0.0)" : ++ (vassert(0), NULL); ++ vex_printf("if ("); ++ ppHRegSW64(cond->reg); ++ vex_printf("%s ", str); ++ } ++} ++ ++const HChar *showSW64LoadOp(SW64LoadOp op) ++{ ++ switch (op) { ++ case SW64in_LDBU: return "ldbu"; ++ case SW64in_LDHU: return "ldhu"; ++ case SW64in_LDW: return "ldw"; ++ case SW64in_LDL: return "ldl"; ++ default: vpanic("showSW64LoadOp"); ++ } ++} ++ ++const HChar *showSW64StoreOp(SW64StoreOp op) ++{ ++ switch (op) { ++ case SW64in_STB: return "stb"; ++ case SW64in_STH: return "sth"; ++ case SW64in_STW: return "stw"; ++ case SW64in_STL: return "stl"; ++ default: vpanic("showSW64StoreOp"); ++ } ++} ++ ++const HChar *showSW64FpLoadOp(SW64FpLoadOp op) ++{ ++ switch (op) { ++ case SW64in_FLDS: return "flds"; ++ case SW64in_FLDD: return "fldd"; ++ default: vpanic("showSW64FpLoadOp"); ++ } ++} ++ ++const HChar *showSW64FpStoreOp(SW64FpStoreOp op) ++{ ++ switch (op) { ++ case SW64in_FSTS: return "fsts"; ++ case SW64in_FSTD: return "fstd"; ++ default: vpanic("showSW64FpStoreOp"); ++ } ++} ++ ++const HChar *showSW64CmpOp(SW64CmpOp op) ++{ ++ switch(op) { ++ case SW64in_CMPEQ: return "cmpeq"; ++ case SW64in_CMPLT: return "cmplt"; ++ case SW64in_CMPLE: return "cmple"; ++ case SW64in_CMPULT: return "cmpult"; ++ case SW64in_CMPULE: return "cmpule"; ++ default: vpanic("showSW64CmpOp"); ++ } ++} ++ ++const HChar *showSW64CondSelOp(SW64CondSelOp op) ++{ ++ switch(op) { ++ case SW64in_SELEQ: return "seleq"; ++ case SW64in_SELGE: return "selge"; ++ case SW64in_SELGT: return "selgt"; ++ case SW64in_SELLE: return "selle"; ++ case SW64in_SELLT: return "sellt"; ++ case SW64in_SELNE: return "selne"; ++ case SW64in_SELLBC: return "sellbc"; ++ case SW64in_SELLBS: return "sellbs"; ++ default: vpanic("showSW64CondSelOp"); ++ } ++} ++ ++const HChar *showSW64LogicOp(SW64LogicOp op) ++{ ++ switch (op) { ++ case SW64in_AND: return "and"; ++ case SW64in_OR: return "bis"; ++ case SW64in_XOR: return "xor"; ++ case SW64in_ORNOT: return "ornot"; ++ case SW64in_BIC: return "bic"; ++ default: vpanic("showSW64LogicOp"); ++ } ++} ++ ++const HChar *showSW64ArithOp(SW64ArithOp op) ++{ ++ switch (op) { ++ case SW64in_ADDW: return "addw"; ++ case SW64in_SUBW: return "subw"; ++ case SW64in_S4ADDW: return "s4addw"; ++ case SW64in_S4SUBW: return "s4subw"; ++ case SW64in_S8ADDW: return "s8addw"; ++ case SW64in_S8SUBW: return "s8subw"; ++ case SW64in_ADDL: return "addl"; ++ case SW64in_SUBL: return "subl"; ++ case SW64in_S4ADDL: return "s4addl"; ++ case SW64in_S4SUBL: return "s4subl"; ++ case SW64in_S8ADDL: return "s8addl"; ++ case SW64in_S8SUBL: return "s8subl"; ++ case SW64in_MULW: return "mulw"; ++ case SW64in_MULL: return "mull"; ++ case SW64in_UMULH: return "umulh"; ++ case SW64in_ZAP: return "zap"; ++ case SW64in_ZAPNOT: return "zapnot"; ++ case SW64in_SEXTB: return "sextb"; ++ case SW64in_SEXTH: return "sexth"; ++ default: vpanic("showSW64ArithOp"); ++ } ++} ++ ++const HChar *showSW64IntDivOp(SW64IntDivOp op) ++{ ++ switch (op) { ++ case SW64in_DIVW: return "divw"; ++ case SW64in_UDIVW: return "udivw"; ++ case SW64in_REMW: return "remw"; ++ case SW64in_UREMW: return "uremw"; ++ case SW64in_DIVL: return "divl"; ++ case SW64in_UDIVL: return "udivl"; ++ case SW64in_REML: return "reml"; ++ case SW64in_UREML: return "ureml"; ++ default: vpanic("showSW64IntDivOp"); ++ } ++} ++ ++const HChar *showSW64UnaryOp(SW64UnOp op) ++{ ++ switch (op) { ++ case SW64in_POP: return "ctpop"; ++ case SW64in_CLZ: return "ctlz"; ++ case SW64in_CTZ: return "cttz"; ++ default: vpanic("showSW64UnaryOp"); ++ } ++} ++ ++const HChar *showSW64ShftOp(SW64ShftOp op) ++{ ++ switch (op) { ++ case SW64in_SLL: return "sll"; ++ case SW64in_SRL: return "srl"; ++ case SW64in_SRA: return "sra"; ++ default: vpanic("showSW64ShftOp"); ++ } ++} ++ ++const HChar *showSW64FpArithOp(SW64FpArithOp op) ++{ ++ switch (op) { ++ case SW64in_FADDS: return "fadds"; ++ case SW64in_FADDD: return "faddd"; ++ case SW64in_FSUBS: return "fsubs"; ++ case SW64in_FSUBD: return "fsubd"; ++ case SW64in_FMULS: return "fmuls"; ++ case SW64in_FMULD: return "fmuld"; ++ case SW64in_FDIVS: return "fdivs"; ++ case SW64in_FDIVD: return "fdivd"; ++ default: vpanic("showSW64FpArithOp"); ++ } ++} ++ ++const HChar *showSW64FpGpMoveOp(SW64FpGpMoveOp op) ++{ ++ switch (op) { ++ case SW64in_FIMOVS: return "fimovs"; ++ case SW64in_FIMOVD: return "fimovd"; ++ case SW64in_IFMOVS: return "ifmovs"; ++ case SW64in_IFMOVD: return "ifmovd"; ++ case SW64in_CMOVDL: return "cmovdl"; ++ case SW64in_CMOVDL_G: return "cmovdl_g"; ++ case SW64in_CMOVDL_P: return "cmovdl_p"; ++ case SW64in_CMOVDL_Z: return "cmovdl_z"; ++ case SW64in_CMOVDL_N: return "cmovdl_n"; ++ case SW64in_CMOVDLU: return "cmovdlu"; ++ case SW64in_CMOVDLU_G: return "cmovdlu_g"; ++ case SW64in_CMOVDLU_P: return "cmovdlu_p"; ++ case SW64in_CMOVDLU_Z: return "cmovdlu_z"; ++ case SW64in_CMOVDLU_N: return "cmovdlu_n"; ++ case SW64in_CMOVDWU: return "cmovdwu"; ++ case SW64in_CMOVDWU_G: return "cmovdwu_g"; ++ case SW64in_CMOVDWU_P: return "cmovdwu_p"; ++ case SW64in_CMOVDWU_Z: return "cmovdwu_z"; ++ case SW64in_CMOVDWU_N: return "cmovdwu_n"; ++ case SW64in_CMOVDW: return "cmovdw"; ++ case SW64in_CMOVDW_G: return "cmovdw_g"; ++ case SW64in_CMOVDW_P: return "cmovdw_p"; ++ case SW64in_CMOVDW_Z: return "cmovdw_z"; ++ case SW64in_CMOVDW_N: return "cmovdw_n"; ++ case SW64in_CMOVLS: return "cmovls"; ++ case SW64in_CMOVWS: return "cmovws"; ++ case SW64in_CMOVLD: return "cmovld"; ++ case SW64in_CMOVWD: return "cmovwd"; ++ case SW64in_CMOVULS: return "cmovuls"; ++ case SW64in_CMOVUWS: return "cmovuws"; ++ case SW64in_CMOVULD: return "cmovuld"; ++ case SW64in_CMOVUWD: return "cmovuwd"; ++ default: vpanic("showSW64FpGpMoveOp"); ++ } ++} ++ ++const HChar *showSW64FpCpyOp(SW64FpCpyOp op) ++{ ++ switch (op) { ++ case SW64in_FCPYS: return "fcpys"; ++ case SW64in_FCPYSE: return "fcpyse"; ++ case SW64in_FCPYSN: return "fcpysn"; ++ default: vpanic("showSW64FpCpyOp"); ++ } ++} ++ ++const HChar *showSW64FpQuaryOp(SW64FpQuaryOp op) ++{ ++ switch (op) { ++ case SW64in_MADDS: return "madds"; ++ case SW64in_MADDD: return "maddd"; ++ case SW64in_MSUBS: return "msubs"; ++ case SW64in_MSUBD: return "msubd"; ++ default: vpanic("showSW64FpQuaryOp"); ++ } ++} ++ ++const HChar *showSW64FpUnaryOp(SW64FpUnaryOp op) ++{ ++ switch (op) { ++ case SW64in_FSQRTS: return "fsqrts"; ++ case SW64in_FSQRTD: return "fsqrtd"; ++ case SW64in_FRECS: return "frecs"; ++ case SW64in_FRECD: return "frecd"; ++ case SW64in_FRIS: return "fris"; ++ case SW64in_FRIS_G: return "fris_g"; ++ case SW64in_FRIS_P: return "fris_p"; ++ case SW64in_FRIS_Z: return "fris_z"; ++ case SW64in_FRIS_N: return "fris_n"; ++ case SW64in_FRID: return "frid"; ++ case SW64in_FRID_G: return "frid_g"; ++ case SW64in_FRID_P: return "frid_p"; ++ case SW64in_FRID_Z: return "frid_z"; ++ case SW64in_FRID_N: return "frid_n"; ++ default: vpanic("showSW64FpUnaryOp"); ++ } ++} ++ ++const HChar *showSW64FpCmpOp(SW64FpCmpOp op) ++{ ++ switch (op) { ++ case SW64in_CMPFEQ: return "fcmpeq"; ++ case SW64in_CMPFLE: return "fcmple"; ++ case SW64in_CMPFLT: return "fcmplt"; ++ case SW64in_CMPFUN: return "fcmpun"; ++ default: vpanic("showSW64FpCmpOp"); ++ } ++} ++ ++const HChar *showSW64FpSelOp(SW64FpSelOp op) ++{ ++ switch(op) { ++ case SW64in_FSELEQ: return "fseleq"; ++ case SW64in_FSELNE: return "fselne"; ++ case SW64in_FSELLT: return "fsellt"; ++ case SW64in_FSELLE: return "fselle"; ++ case SW64in_FSELGT: return "fselgt"; ++ case SW64in_FSELGE: return "fselge"; ++ default: vpanic("showSW64FpSelOp"); ++ } ++} ++ ++const HChar *showSW64FpCvtOp(SW64FpCvtOp op) ++{ ++ switch (op) { ++ case SW64in_FCVTSD: return "fcvtsd"; ++ case SW64in_FCVTDS: return "fcvtds"; ++ case SW64in_FCVTDL: return "fcvtdl"; ++ case SW64in_FCVTLS: return "fcvtls"; ++ case SW64in_FCVTLD: return "fcvtld"; ++ case SW64in_FCVTDL_G: return "fcvtdl_g"; ++ case SW64in_FCVTDL_P: return "fcvtdl_p"; ++ case SW64in_FCVTDL_Z: return "fcvtdl_z"; ++ case SW64in_FCVTDL_N: return "fcvtdl_n"; ++ default: vpanic("showSW64FpCvtOp"); ++ } ++} ++ ++/*-----print sw64 instr----*/ ++void ppSW64Instr(const SW64Instr *i) ++{ ++ switch(i->tag) ++ { ++ case SW64in_Load: ++ { ++ vex_printf("%s ", showSW64LoadOp(i->SW64in.Load.op)); ++ ppHRegSW64(i->SW64in.Load.dst); ++ vex_printf(","); ++ ppSW64AModeRI(i->SW64in.Load.addr); ++ return; ++ } ++ case SW64in_Store: ++ { ++ vex_printf("%s ", showSW64StoreOp(i->SW64in.Store.op)); ++ ppHRegSW64(i->SW64in.Store.src); ++ vex_printf(","); ++ ppSW64AModeRI(i->SW64in.Store.addr); ++ return; ++ } ++ case SW64in_FpLoad: ++ { ++ vex_printf("%s ", showSW64FpLoadOp(i->SW64in.FpLoad.op)); ++ ppHRegSW64(i->SW64in.FpLoad.dst); ++ vex_printf(","); ++ ppSW64AModeRI(i->SW64in.FpLoad.addr); ++ return; ++ } ++ case SW64in_FpStore: ++ { ++ vex_printf("%s ", showSW64FpStoreOp(i->SW64in.FpStore.op)); ++ ppHRegSW64(i->SW64in.FpStore.src); ++ vex_printf(","); ++ ppSW64AModeRI(i->SW64in.FpStore.addr); ++ return; ++ } ++ case SW64in_LoadImm: ++ { ++ vex_printf("ldi "); ++ ppHRegSW64(i->SW64in.LoadImm.dst); ++ vex_printf(",0x%016llx($31)", i->SW64in.LoadImm.imm64); ++ return; ++ } ++ case SW64in_CAS: ++ { ++ /* ++ 0: lld* %[old], 0(%[addr]) ++ cmpeq %[old], %[expd], $1 ++ wr_f $1 ++ mov %[data], $2 ++ lst* $2, 0(%[addr]) ++ rd_f $2 ++ beq $1, 1f ++ beq $2, 0b ++ 1: ++ */ ++ UChar sz = i->SW64in.Cas.sz; ++ vassert(sz == 4 || sz == 8); ++ ++ vex_printf("0: lld%c ", sz == 4 ? 'w' : 'l'); ++ ppHRegSW64(i->SW64in.Cas.old); ++ vex_printf(", 0("); ++ ppHRegSW64(i->SW64in.Cas.addr); ++ vex_printf(")\n"); ++ ++ vex_printf(" cmpeq "); ++ ppHRegSW64(i->SW64in.Cas.old); ++ vex_printf(", "); ++ ppHRegSW64(i->SW64in.Cas.expd); ++ vex_printf(", r1\n"); ++ ++ vex_printf(" wr_f r1\n"); ++ ++ vex_printf(" mov "); ++ ppHRegSW64(i->SW64in.Cas.data); ++ vex_printf(", r2\n"); ++ ++ vex_printf(" lst%c r2, 0(", sz == 4 ? 'w' : 'l'); ++ ppHRegSW64(i->SW64in.Cas.addr); ++ vex_printf(")\n"); ++ ++ vex_printf(" rd_f r2\n"); ++ ++ vex_printf(" beq r1, 1f\n"); ++ ++ vex_printf(" beq r2, 0b\n"); ++ ++ vex_printf("1: "); ++ return; ++ } ++ case SW64in_UnOperate: ++ { ++ vex_printf("%s ", showSW64UnaryOp(i->SW64in.UnOperate.op)); ++ ppHRegSW64(i->SW64in.UnOperate.src); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.UnOperate.dst); ++ return; ++ } ++ case SW64in_Logic: ++ { ++ vex_printf("%s ", showSW64LogicOp(i->SW64in.Logic.op)); ++ ppHRegSW64(i->SW64in.Logic.srcL); ++ vex_printf(","); ++ ppSW64RI8(i->SW64in.Logic.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.Logic.dst); ++ return; ++ } ++ case SW64in_Cmp: ++ { ++ vex_printf("%s ", showSW64CmpOp(i->SW64in.Cmp.op)); ++ ppHRegSW64(i->SW64in.Cmp.srcL); ++ vex_printf(","); ++ ppSW64RI8(i->SW64in.Cmp.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.Cmp.dst); ++ return; ++ } ++ case SW64in_Shft: ++ { ++ vex_printf("%s ", showSW64ShftOp(i->SW64in.Shft.op)); ++ ppHRegSW64(i->SW64in.Shft.srcL); ++ vex_printf(","); ++ ppSW64RI8(i->SW64in.Shft.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.Shft.dst); ++ return; ++ } ++ case SW64in_Arith: ++ { ++ vex_printf("%s ", showSW64ArithOp(i->SW64in.Arith.op)); ++ ppHRegSW64(i->SW64in.Arith.srcL); ++ vex_printf(","); ++ ppSW64RI8(i->SW64in.Arith.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.Arith.dst); ++ return; ++ } ++ case SW64in_IntDiv: ++ { ++ vex_printf("%s ", showSW64IntDivOp(i->SW64in.IntDiv.op)); ++ ppHRegSW64(i->SW64in.IntDiv.srcL); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.IntDiv.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.IntDiv.dst); ++ return; ++ } ++ case SW64in_CondSel: ++ { ++ vex_printf("%s ", showSW64CondSelOp(i->SW64in.CondSel.op)); ++ ppHRegSW64(i->SW64in.CondSel.cond); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.CondSel.iftrue); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.CondSel.iffalse); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.CondSel.dst); ++ return; ++ } ++ case SW64in_FpArith: ++ { ++ vex_printf("%s ", showSW64FpArithOp(i->SW64in.FpArith.op)); ++ ppHRegSW64(i->SW64in.FpArith.srcL); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpArith.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpArith.dst); ++ return; ++ } ++ case SW64in_FpCpy: ++ { ++ vex_printf("%s ", showSW64FpCpyOp(i->SW64in.FpCpy.op)); ++ ppHRegSW64(i->SW64in.FpCpy.src1); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpCpy.src2); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpCpy.dst); ++ return; ++ } ++ case SW64in_FpQuary: ++ { ++ vex_printf("%s ", showSW64FpQuaryOp(i->SW64in.FpQuary.op)); ++ ppHRegSW64(i->SW64in.FpQuary.src1); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpQuary.src2); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpQuary.src3); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpQuary.dst); ++ return; ++ } ++ case SW64in_FpUnary: ++ { ++ vex_printf("%s ", showSW64FpUnaryOp(i->SW64in.FpUnary.op)); ++ ppHRegSW64(i->SW64in.FpUnary.dst); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpUnary.src); ++ return; ++ } ++ case SW64in_FpGpMove: ++ { ++ vex_printf("%s ", showSW64FpGpMoveOp(i->SW64in.FpGpMove.op)); ++ ppHRegSW64(i->SW64in.FpGpMove.src); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpGpMove.dst); ++ return; ++ } ++ case SW64in_FpSel: ++ { ++ vex_printf("%s ", showSW64FpSelOp(i->SW64in.FpSel.op)); ++ ppHRegSW64(i->SW64in.FpSel.cond); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpSel.iftrue); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpSel.iffalse); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpSel.dst); ++ return; ++ } ++ case SW64in_FpCmp: ++ { ++ vex_printf("%s ", showSW64FpCmpOp(i->SW64in.FpCmp.op)); ++ ppHRegSW64(i->SW64in.FpCmp.srcL); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpCmp.srcR); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpCmp.dst); ++ return; ++ } ++ case SW64in_FpCvt: ++ { ++ vex_printf("%s ", showSW64FpCvtOp(i->SW64in.FpCvt.op)); ++ ppHRegSW64(i->SW64in.FpCvt.src); ++ vex_printf(","); ++ ppHRegSW64(i->SW64in.FpCvt.dst); ++ return; ++ } ++ case SW64in_RFPCR: ++ { ++ vex_printf("rfpcr "); ++ ppHRegSW64(i->SW64in.RFPCR.dst); ++ return; ++ } ++ case SW64in_WFPCR: ++ { ++ vex_printf("wfpcr "); ++ ppHRegSW64(i->SW64in.WFPCR.src); ++ return; ++ } ++ case SW64in_XDirect: ++ { ++ vex_printf("(xDirect) "); ++ ppSW64Cond(i->SW64in.XDirect.cond); ++ vex_printf("{ ldi r2, 0x%llx", i->SW64in.XDirect.dstGA); ++ vex_printf("; stl r2, "); ++ ppSW64AModeRI(i->SW64in.XDirect.amPC); ++ vex_printf("; ldi r2, disp_cp_chain_me_to_%sEP; jmp r1, (r2); }", ++ i->SW64in.XDirect.toFastEP ? "fast" : "slow"); ++ return; ++ } ++ case SW64in_XIndir: ++ { ++ vex_printf("(xIndir) "); ++ ppSW64Cond(i->SW64in.XIndir.cond); ++ vex_printf("{ stl "); ++ ppHRegSW64(i->SW64in.XIndir.dstGA); ++ vex_printf(", "); ++ ppSW64AModeRI(i->SW64in.XIndir.amPC); ++ vex_printf("; ldi r2, disp_indir; jmp r31, (r2); }"); ++ return; ++ } ++ case SW64in_XAssisted: ++ { ++ vex_printf("(xAssisted) "); ++ ppSW64Cond(i->SW64in.XAssisted.cond); ++ vex_printf("{ stl "); ++ ppHRegSW64(i->SW64in.XAssisted.dstGA); ++ vex_printf(", "); ++ ppSW64AModeRI(i->SW64in.XAssisted.amPC); ++ vex_printf("; ldi r0, IRJumpKind_to_TRCVAL(%d)", ++ (Int)i->SW64in.XAssisted.jk); ++ vex_printf("; ldi r2, disp_assisted; jmp r31, (r2);}"); ++ return; ++ } ++ case SW64in_EvCheck: ++ { ++ vex_printf("(evCheck) ldw r2, "); ++ ppSW64AModeRI(i->SW64in.EvCheck.amCounter); ++ vex_printf("; subl r2,1,r2"); ++ vex_printf("; stw r2, "); ++ ppSW64AModeRI(i->SW64in.EvCheck.amCounter); ++ vex_printf("; bgez r2, nofail"); ++ vex_printf("; ldl r2, "); ++ ppSW64AModeRI(i->SW64in.EvCheck.amFailAddr); ++ vex_printf("; jmp r31, (r2)"); ++ vex_printf("; nofail:"); ++ return; ++ } ++ case SW64in_ProfInc: ++ { ++ vex_printf("(profInc) ldi r2, ($NotKnownYet); " ++ "ldl r1, 0(r2); " ++ "addl r1, 1, r1; " ++ "stl r1, 0(r2); "); ++ return; ++ } ++ case SW64in_Call: ++ { ++ Int n; ++ vex_printf("call: "); ++ ppSW64Cond(i->SW64in.Call.cond); ++ vex_printf("{ ldi "); ++ ppHRegSW64(hregSW64_R27()); ++ vex_printf(",0x%016llx($31)", i->SW64in.Call.target); ++ ++ vex_printf(" ; JMP $26, $27; # args ["); ++ for (n = 16; n < 32; n++) { ++ if (i->SW64in.Call.argiregs & (1 << (n-16))) { ++ vex_printf("$%d", n); ++ if ((i->SW64in.Call.argiregs >> (n-16)) > 1) ++ vex_printf(","); ++ } ++ } ++ vex_printf("]; "); ++ ++ break; ++ } ++ case SW64in_Mfence: ++ { ++ vex_printf("MEMB;"); ++ vex_printf("IMEMB;\n"); ++ } ++ default: ++ break; ++ } ++} ++ ++/* --------- Helpers for register allocation. --------- */ ++ ++void getRegUsage_SW64Instr(HRegUsage * u, const SW64Instr * i) ++{ ++ initHRegUsage(u); ++ switch (i->tag) ++ { ++ /*----load/store----*/ ++ case SW64in_Load: ++ addHRegUse(u, HRmWrite, i->SW64in.Load.dst); ++ addRegUsage_SW64AModeRI(u, i->SW64in.Load.addr); ++ return; ++ case SW64in_Store: ++ addHRegUse(u, HRmRead, i->SW64in.Store.src); ++ addRegUsage_SW64AModeRI(u, i->SW64in.Store.addr); ++ return; ++ case SW64in_FpLoad: ++ addHRegUse(u, HRmWrite, i->SW64in.FpLoad.dst); ++ addRegUsage_SW64AModeRI(u, i->SW64in.FpLoad.addr); ++ return; ++ case SW64in_FpStore: ++ addHRegUse(u, HRmRead, i->SW64in.FpStore.src); ++ addRegUsage_SW64AModeRI(u, i->SW64in.FpStore.addr); ++ return; ++ case SW64in_LoadImm: ++ addHRegUse(u, HRmWrite, i->SW64in.LoadImm.dst); ++ return; ++ ++ case SW64in_CAS: ++ addHRegUse(u, HRmWrite, i->SW64in.Cas.old); ++ addHRegUse(u, HRmRead, i->SW64in.Cas.expd); ++ addHRegUse(u, HRmRead, i->SW64in.Cas.data); ++ addHRegUse(u, HRmRead, i->SW64in.Cas.addr); ++ return; ++ ++ /*----unop data process----*/ ++ case SW64in_UnOperate: ++ addHRegUse(u, HRmRead, i->SW64in.UnOperate.src); ++ addHRegUse(u, HRmWrite, i->SW64in.UnOperate.dst); ++ return; ++ ++ /*----integer data process----*/ ++ case SW64in_Logic: ++ addHRegUse(u, HRmRead, i->SW64in.Logic.srcL); ++ addRegUsage_SW64RI8(u, i->SW64in.Logic.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.Logic.dst); ++ return; ++ case SW64in_Cmp: ++ addHRegUse(u, HRmRead, i->SW64in.Cmp.srcL); ++ addRegUsage_SW64RI8(u, i->SW64in.Cmp.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.Cmp.dst); ++ return; ++ case SW64in_Shft: ++ addHRegUse(u, HRmRead, i->SW64in.Shft.srcL); ++ addRegUsage_SW64RI8(u, i->SW64in.Shft.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.Shft.dst); ++ return; ++ case SW64in_Arith: ++ addHRegUse(u, HRmRead, i->SW64in.Arith.srcL); ++ addRegUsage_SW64RI8(u, i->SW64in.Arith.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.Arith.dst); ++ return; ++ case SW64in_IntDiv: ++ addHRegUse(u, HRmRead, i->SW64in.IntDiv.srcL); ++ addHRegUse(u, HRmRead, i->SW64in.IntDiv.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.IntDiv.dst); ++ return; ++ ++ /*----float data process----*/ ++ case SW64in_FpArith: ++ addHRegUse(u, HRmRead, i->SW64in.FpArith.srcL); ++ addHRegUse(u, HRmRead, i->SW64in.FpArith.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.FpArith.dst); ++ return; ++ case SW64in_FpGpMove: ++ addHRegUse(u, HRmRead, i->SW64in.FpGpMove.src); ++ addHRegUse(u, HRmWrite, i->SW64in.FpGpMove.dst); ++ return; ++ case SW64in_FpCpy: ++ addHRegUse(u, HRmRead, i->SW64in.FpCpy.src1); ++ addHRegUse(u, HRmRead, i->SW64in.FpCpy.src2); ++ addHRegUse(u, HRmWrite, i->SW64in.FpCpy.dst); ++ return; ++ case SW64in_FpQuary: ++ addHRegUse(u, HRmRead, i->SW64in.FpQuary.src1); ++ addHRegUse(u, HRmRead, i->SW64in.FpQuary.src2); ++ addHRegUse(u, HRmRead, i->SW64in.FpQuary.src3); ++ addHRegUse(u, HRmWrite, i->SW64in.FpQuary.dst); ++ return; ++ case SW64in_FpUnary: ++ addHRegUse(u, HRmRead, i->SW64in.FpUnary.src); ++ addHRegUse(u, HRmWrite, i->SW64in.FpUnary.dst); ++ return; ++ case SW64in_FpSel: ++ addHRegUse(u, HRmRead, i->SW64in.FpSel.iftrue); ++ addHRegUse(u, HRmRead, i->SW64in.FpSel.iffalse); ++ addHRegUse(u, HRmRead, i->SW64in.FpSel.cond); ++ addHRegUse(u, HRmWrite, i->SW64in.FpSel.dst); ++ return; ++ case SW64in_FpCmp: ++ addHRegUse(u, HRmRead, i->SW64in.FpCmp.srcL); ++ addHRegUse(u, HRmRead, i->SW64in.FpCmp.srcR); ++ addHRegUse(u, HRmWrite, i->SW64in.FpCmp.dst); ++ return; ++ case SW64in_FpCvt: ++ addHRegUse(u, HRmRead, i->SW64in.FpCvt.src); ++ addHRegUse(u, HRmWrite, i->SW64in.FpCvt.dst); ++ return; ++ case SW64in_RFPCR: ++ addHRegUse(u, HRmWrite, i->SW64in.RFPCR.dst); ++ return; ++ case SW64in_WFPCR: ++ addHRegUse(u, HRmRead, i->SW64in.WFPCR.src); ++ return; ++ ++ /*----code link----*/ ++ case SW64in_XDirect: ++ addRegUsage_SW64AModeRI(u, i->SW64in.XDirect.amPC); ++ addRegUsage_SW64Cond(u, i->SW64in.XDirect.cond); ++ return; ++ case SW64in_XIndir: ++ addHRegUse(u, HRmRead, i->SW64in.XIndir.dstGA); ++ addRegUsage_SW64AModeRI(u, i->SW64in.XIndir.amPC); ++ addRegUsage_SW64Cond(u, i->SW64in.XIndir.cond); ++ return; ++ case SW64in_XAssisted: ++ addHRegUse(u, HRmRead, i->SW64in.XAssisted.dstGA); ++ addRegUsage_SW64AModeRI(u, i->SW64in.XAssisted.amPC); ++ addRegUsage_SW64Cond(u, i->SW64in.XAssisted.cond); ++ return; ++ ++ /*----cond select ----*/ ++ case SW64in_CondSel: ++ addHRegUse(u, HRmRead, i->SW64in.CondSel.iftrue); ++ addHRegUse(u, HRmRead, i->SW64in.CondSel.iffalse); ++ addHRegUse(u, HRmRead, i->SW64in.CondSel.cond); ++ addHRegUse(u, HRmWrite, i->SW64in.CondSel.dst); ++ return; ++ ++ /*----other ----*/ ++ case SW64in_EvCheck: ++ /* We expect both amodes only to mention %ebp, so this is in ++ fact pointless, since %ebp isn't allocatable, but anyway.. */ ++ addRegUsage_SW64AModeRI(u, i->SW64in.EvCheck.amCounter); ++ addRegUsage_SW64AModeRI(u, i->SW64in.EvCheck.amFailAddr); ++ return; ++ case SW64in_ProfInc: ++ /* does not use any registers. */ ++ return; ++ case SW64in_Call: ++ { ++ /* Logic and comments copied/modified from x86, ppc and arm back end. ++ First off, claim it trashes all the caller-saved regs ++ which fall within the register allocator's jurisdiction. */ ++ addRegUsage_SW64Cond(u, i->SW64in.Call.cond); ++ ++ UInt argir; ++ addHRegUse(u, HRmWrite, hregSW64_R31()); ++ ++ addHRegUse(u, HRmWrite, hregSW64_R28()); ++ addHRegUse(u, HRmWrite, hregSW64_R0()); ++ ++ addHRegUse(u, HRmWrite, hregSW64_R16()); ++ addHRegUse(u, HRmWrite, hregSW64_R17()); ++ addHRegUse(u, HRmWrite, hregSW64_R18()); ++ addHRegUse(u, HRmWrite, hregSW64_R19()); ++ addHRegUse(u, HRmWrite, hregSW64_R20()); ++ addHRegUse(u, HRmWrite, hregSW64_R21()); ++ ++ addHRegUse(u, HRmWrite, hregSW64_R1()); ++ addHRegUse(u, HRmWrite, hregSW64_R2()); ++ addHRegUse(u, HRmWrite, hregSW64_R3()); ++ addHRegUse(u, HRmWrite, hregSW64_R4()); ++ addHRegUse(u, HRmWrite, hregSW64_R5()); ++ addHRegUse(u, HRmWrite, hregSW64_R6()); ++ addHRegUse(u, HRmWrite, hregSW64_R7()); ++ addHRegUse(u, HRmWrite, hregSW64_R8()); ++ addHRegUse(u, HRmWrite, hregSW64_R22()); ++ addHRegUse(u, HRmWrite, hregSW64_R23()); ++ addHRegUse(u, HRmWrite, hregSW64_R24()); ++ addHRegUse(u, HRmWrite, hregSW64_R25()); ++ ++ addHRegUse(u, HRmWrite, hregSW64_R26()); ++ ++ /* Now we have to state any parameter-carrying registers ++ which might be read. This depends on the argiregs field. */ ++ argir = i->SW64in.Call.argiregs; ++ UInt base = 16; ++ if (argir & (1<<(21-base))) addHRegUse(u, HRmRead, hregSW64_R21()); ++ if (argir & (1<<(20-base))) addHRegUse(u, HRmRead, hregSW64_R20()); ++ if (argir & (1<<(19-base))) addHRegUse(u, HRmRead, hregSW64_R19()); ++ if (argir & (1<<(18-base))) addHRegUse(u, HRmRead, hregSW64_R18()); ++ if (argir & (1<<(17-base))) addHRegUse(u, HRmRead, hregSW64_R17()); ++ if (argir & (1<<(16-base))) addHRegUse(u, HRmRead, hregSW64_R16()); ++ ++ vassert(0 == (argir & ~((1 << 0) | (1 << 1) | (1 << 2) ++ | (1 << 3) | (1 << 4) | (1 << 5) ))); ++ ++ return; ++ } ++ ++ case SW64in_Mfence: ++ /* does not use any registers. */ ++ return; ++ ++ default: ++ break; ++ } ++} ++ ++/* local helper */ ++static void mapReg(HRegRemap * m, HReg * r) ++{ ++ *r = lookupHRegRemap(m, *r); ++} ++ ++void mapRegs_SW64Instr(HRegRemap * m, SW64Instr * i) ++{ ++ switch (i->tag) ++ { ++ /*----load/store----*/ ++ case SW64in_Load: ++ mapReg(m, &i->SW64in.Load.dst); ++ mapRegs_SW64AModeRI(m, i->SW64in.Load.addr); ++ return; ++ case SW64in_Store: ++ mapReg(m, &i->SW64in.Store.src); ++ mapRegs_SW64AModeRI(m, i->SW64in.Store.addr); ++ return; ++ case SW64in_FpLoad: ++ mapReg(m, &i->SW64in.FpLoad.dst); ++ mapRegs_SW64AModeRI(m, i->SW64in.FpLoad.addr); ++ return; ++ case SW64in_FpStore: ++ mapReg(m, &i->SW64in.FpStore.src); ++ mapRegs_SW64AModeRI(m, i->SW64in.FpStore.addr); ++ return; ++ case SW64in_LoadImm: ++ mapReg(m, &i->SW64in.LoadImm.dst); ++ return; ++ ++ case SW64in_CAS: ++ mapReg(m, &i->SW64in.Cas.old); ++ mapReg(m, &i->SW64in.Cas.data); ++ mapReg(m, &i->SW64in.Cas.expd); ++ mapReg(m, &i->SW64in.Cas.addr); ++ return; ++ ++ /*----unop data process----*/ ++ case SW64in_UnOperate: ++ mapReg(m, &i->SW64in.UnOperate.src); ++ mapReg(m, &i->SW64in.UnOperate.dst); ++ return; ++ ++ /*----integer data process----*/ ++ case SW64in_Logic: ++ mapReg(m, &i->SW64in.Logic.srcL); ++ mapRegs_SW64RI8(m, i->SW64in.Logic.srcR); ++ mapReg(m, &i->SW64in.Logic.dst); ++ return; ++ case SW64in_Cmp: ++ mapReg(m, &i->SW64in.Cmp.srcL); ++ mapRegs_SW64RI8(m, i->SW64in.Cmp.srcR); ++ mapReg(m, &i->SW64in.Cmp.dst); ++ return; ++ case SW64in_Shft: ++ mapReg(m, &i->SW64in.Shft.srcL); ++ mapRegs_SW64RI8(m, i->SW64in.Shft.srcR); ++ mapReg(m, &i->SW64in.Shft.dst); ++ return; ++ case SW64in_Arith: ++ mapReg(m, &i->SW64in.Arith.srcL); ++ mapRegs_SW64RI8(m, i->SW64in.Arith.srcR); ++ mapReg(m, &i->SW64in.Arith.dst); ++ return; ++ case SW64in_IntDiv: ++ mapReg(m, &i->SW64in.IntDiv.srcL); ++ mapReg(m, &i->SW64in.IntDiv.srcR); ++ mapReg(m, &i->SW64in.IntDiv.dst); ++ return; ++ ++ /*----float data process----*/ ++ case SW64in_FpArith: ++ mapReg(m, &i->SW64in.FpArith.srcL); ++ mapReg(m, &i->SW64in.FpArith.srcR); ++ mapReg(m, &i->SW64in.FpArith.dst); ++ return; ++ case SW64in_FpGpMove: ++ mapReg(m, &i->SW64in.FpGpMove.src); ++ mapReg(m, &i->SW64in.FpGpMove.dst); ++ return; ++ case SW64in_FpCpy: ++ mapReg(m, &i->SW64in.FpCpy.src1); ++ mapReg(m, &i->SW64in.FpCpy.src2); ++ mapReg(m, &i->SW64in.FpCpy.dst); ++ return; ++ case SW64in_FpQuary: ++ mapReg(m, &i->SW64in.FpQuary.src1); ++ mapReg(m, &i->SW64in.FpQuary.src2); ++ mapReg(m, &i->SW64in.FpQuary.src3); ++ mapReg(m, &i->SW64in.FpQuary.dst); ++ return; ++ case SW64in_FpUnary: ++ mapReg(m, &i->SW64in.FpUnary.src); ++ mapReg(m, &i->SW64in.FpUnary.dst); ++ return; ++ case SW64in_FpSel: ++ mapReg(m, &i->SW64in.FpSel.iftrue); ++ mapReg(m, &i->SW64in.FpSel.iffalse); ++ mapReg(m, &i->SW64in.FpSel.cond); ++ mapReg(m, &i->SW64in.FpSel.dst); ++ return; ++ case SW64in_FpCmp: ++ mapReg(m, &i->SW64in.FpCmp.srcL); ++ mapReg(m, &i->SW64in.FpCmp.srcR); ++ mapReg(m, &i->SW64in.FpCmp.dst); ++ return; ++ case SW64in_FpCvt: ++ mapReg(m, &i->SW64in.FpCvt.src); ++ mapReg(m, &i->SW64in.FpCvt.dst); ++ return; ++ case SW64in_RFPCR: ++ mapReg(m, &i->SW64in.RFPCR.dst); ++ return; ++ case SW64in_WFPCR: ++ mapReg(m, &i->SW64in.WFPCR.src); ++ return; ++ ++ /*----code link----*/ ++ case SW64in_XDirect: ++ mapRegs_SW64AModeRI(m, i->SW64in.XDirect.amPC); ++ mapRegs_SW64Cond(m, i->SW64in.XDirect.cond); ++ return; ++ case SW64in_XIndir: ++ mapReg(m, &i->SW64in.XIndir.dstGA); ++ mapRegs_SW64AModeRI(m, i->SW64in.XIndir.amPC); ++ mapRegs_SW64Cond(m, i->SW64in.XIndir.cond); ++ return; ++ case SW64in_XAssisted: ++ mapReg(m, &i->SW64in.XAssisted.dstGA); ++ mapRegs_SW64AModeRI(m, i->SW64in.XAssisted.amPC); ++ mapRegs_SW64Cond(m, i->SW64in.XAssisted.cond); ++ return; ++ ++ /*----cond select ----*/ ++ case SW64in_CondSel: ++ mapReg(m, &i->SW64in.CondSel.iftrue); ++ mapReg(m, &i->SW64in.CondSel.iffalse); ++ mapReg(m, &i->SW64in.CondSel.cond); ++ mapReg(m, &i->SW64in.CondSel.dst); ++ return; ++ ++ /*----other ----*/ ++ case SW64in_EvCheck: ++ /* We expect both modes only to mention %ebp, so this is in ++ fact pointless, since %ebp isn't allocatable, but anyway.. */ ++ mapRegs_SW64AModeRI(m, i->SW64in.EvCheck.amCounter); ++ mapRegs_SW64AModeRI(m, i->SW64in.EvCheck.amFailAddr); ++ return; ++ case SW64in_ProfInc: ++ /* does not use any registers. */ ++ return; ++ ++ case SW64in_Call: ++ mapRegs_SW64Cond(m, i->SW64in.Call.cond); ++ return; ++ ++ case SW64in_Mfence: ++ /* does not use any registers. */ ++ return; ++ ++ default: ++ ppSW64Instr(i); ++ vpanic("mapRegs_SW64Instr"); ++ break; ++ } ++} ++ ++/* Generate sw64 spill/reload instructions under the direction of the ++ register allocator. */ ++void genSpill_SW64( /*OUT*/ HInstr ** i1, /*OUT*/ HInstr ** i2, HReg rreg, ++ Int offsetB) ++{ ++ vassert(offsetB >= 0); ++ vassert(!hregIsVirtual(rreg)); ++ *i1 = *i2 = NULL; ++ SW64AModeRI *addr = SW64AModeRI_IR(offsetB, SW64GuestStateHreg()); ++ ++ switch (hregClass(rreg)) { ++ case HRcInt64: ++ *i1 = SW64Instr_Store(SW64in_STL, rreg, addr); ++ break; ++ case HRcFlt64: ++ *i1 = SW64Instr_FpStore(SW64in_FSTD, rreg, addr); ++ break; ++ default: ++ ppHRegClass(hregClass(rreg)); ++ vpanic("genSpill_SW64: unimplemented regclass"); ++ break; ++ } ++} ++ ++void genReload_SW64( /*OUT*/ HInstr ** i1, /*OUT*/ HInstr ** i2, HReg rreg, ++ Int offsetB) ++{ ++ vassert(!hregIsVirtual(rreg)); ++ SW64AModeRI *addr = SW64AModeRI_IR(offsetB, SW64GuestStateHreg()); ++ ++ switch (hregClass(rreg)) ++ { ++ case HRcInt64: ++ *i1 = SW64Instr_Load(SW64in_LDL, rreg, addr); ++ break; ++ case HRcFlt64: ++ *i1 = SW64Instr_FpLoad(SW64in_FLDD, rreg, addr); ++ break; ++ default: ++ ppHRegClass(hregClass(rreg)); ++ vpanic("genReload_SW64: unimplemented regclass"); ++ break; ++ } ++} ++ ++SW64Instr* genMove_SW64(HReg from, HReg to) ++{ ++ switch (hregClass(from)) ++ { ++ case HRcInt32: ++ case HRcInt64: ++ return SW64Instr_Logic(SW64in_OR, to, from, SW64RI8_Imm(0)); ++ default: ++ ppHRegClass(hregClass(from)); ++ vpanic("genMove_SW64: unimplemented regclass"); ++ } ++} ++ ++/* --------- The sw64 assembler --------- */ ++ ++inline static UInt iregNo(HReg r) ++{ ++ UInt n; ++ vassert(hregClass(r) == HRcInt64); ++ vassert(!hregIsVirtual(r)); ++ n = hregEncoding(r); ++ vassert(n <= 32); ++ return n; ++} ++ ++inline static UInt fregNo(HReg r) ++{ ++ UInt n; ++ vassert(hregClass(r) == HRcFlt64); ++ vassert(!hregIsVirtual(r)); ++ n = hregEncoding(r); ++ vassert(n <= 31); ++ return n; ++} ++ ++inline static UInt toImm(Int simm, Int bits) ++{ ++ vassert(bits <= 31); ++ vassert(simm >= -(1 << (bits - 1)) && simm < (1 << (bits - 1))); ++ return simm & ((1u << bits) - 1); ++} ++ ++/* Emit 32bit instruction */ ++static UChar *emit32(UChar * p, UInt w32) ++{ ++ *p++ = toUChar(w32 & 0x000000FF); ++ *p++ = toUChar((w32 >> 8) & 0x000000FF); ++ *p++ = toUChar((w32 >> 16) & 0x000000FF); ++ *p++ = toUChar((w32 >> 24) & 0x000000FF); ++ return p; ++} ++ ++static Bool is_8_aligned(const UChar* p) ++{ ++ ULong tmp = (((ULong)(p)) & ((ULong)0x7)); ++ return (0 == tmp); ++} ++ ++/* Fetch an instruction */ ++static UInt fetch32 (const UChar* p) ++{ ++ UInt w32 = 0; ++ w32 |= ((0xFF & (UInt)p[0]) << 0); ++ w32 |= ((0xFF & (UInt)p[1]) << 8); ++ w32 |= ((0xFF & (UInt)p[2]) << 16); ++ w32 |= ((0xFF & (UInt)p[3]) << 24); ++ return w32; ++} ++ ++///branch insn format ++/*|31 26 | 25 21 | 20 0|*/ ++/*| opcode | ra | disp |*/ ++static inline UInt X_branch_6_5_21(UInt op, UInt ra, UInt disp) ++{ ++ vassert(6+5+21 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(disp < (1<<21)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 21) | disp; ++ return w; ++} ++ ++///load/store insn format ++/*|31 26 | 25 21 | 20 16| 15 0|*/ ++/*| opcode | ra | rb | disp |*/ ++static inline UInt X_ldst_6_5_5_16(UInt op, UInt ra, UInt rb, UInt disp) ++{ ++ vassert(6+5+5+16 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(rb < (1<<5)); ++ vassert(disp < (1<<16)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 5) | rb; ++ w = (w << 16) | disp; ++ return w; ++} ++ ++///load/store with func insn format ++/*|31 26 | 25 21 | 20 16| 15 12| 11 0|*/ ++/*| opcode | ra | rb | func | disp |*/ ++static inline UInt X_ldst_6_5_5_4_12(UInt op, UInt ra, UInt rb, UInt func, UInt disp) ++{ ++ vassert(6+5+5+4+12 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(rb < (1<<5)); ++ vassert(func < (1<<4)); ++ vassert(disp < (1<<12)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 5) | rb; ++ w = (w << 4) | func; ++ w = (w << 12) | disp; ++ return w; ++} ++ ++///simple calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 5| 4 0|*/ ++ /*| opcode | ra | rb | 000 | function | rc |*/ //register ++static inline UInt X_simreg_6_5_5_3_8_5(UInt op, UInt ra, UInt rb, ++ UInt func, UInt rc) ++{ ++ vassert(op == 0x10 || op == 0x18); ++ vassert(6+5+5+3+8+5 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(rb < (1<<5)); ++ vassert(func < (1<<8)); ++ vassert(rc < (1<<5)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 5) | rb; ++ w = (w << 3) | 0; ++ w = (w << 8) | func; ++ w = (w << 5) | rc; ++ return w; ++} ++ ++///simple calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 5| 4 0|*/ ++ /*| opcode | ra | imm | function | rc |*/ //immediate ++static inline UInt X_simimm_6_5_8_8_5(UInt op, UInt ra, UInt imm, ++ UInt func, UInt rc) ++{ ++ vassert(op == 0x12); ++ vassert(6+5+8+8+5 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(imm < (1<<8)); ++ vassert(func < (1<<8)); ++ vassert(rc < (1<<5)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 8) | imm; ++ w = (w << 8) | func; ++ w = (w << 5) | rc; ++ return w; ++} ++ ++///complex integer calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 10| 9 5 | 4 0 |*/ ++ /*| opcode | ra | rb | 000 | function | rc | rd |*/ //register ++static inline UInt X_comreg_6_5_5_3_3_5_5(UInt op, UInt ra, UInt rb, ++ UInt func, UInt rc, UInt rd) ++{ ++ vassert(op == 0x11); ++ vassert(6+5+5+3+3+5+5 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(rb < (1<<5)); ++ vassert(func < (1<<3)); ++ vassert(rc < (1<<5)); ++ vassert(rd < (1<<5)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 5) | rb; ++ w = (w << 3) | 0; ++ w = (w << 3) | func; ++ w = (w << 5) | rc; ++ w = (w << 5) | rd; ++ return w; ++} ++ ++///complex integer calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 13 |12 10| 9 5 | 4 0 |*/ ++ /*| opcode | ra | imm | function | rc | rd |*/ //immediate ++static inline UInt X_comimm_6_5_8_3_5_5(UInt op, UInt ra, UInt imm, ++ UInt func, UInt rc, UInt rd) ++{ ++ vassert(op == 0x13); ++ vassert(6+5+8+3+5+5 == 32); ++ vassert(op < (1<<6)); ++ vassert(ra < (1<<5)); ++ vassert(imm < (1<<8)); ++ vassert(func < (1<<3)); ++ vassert(rc < (1<<5)); ++ vassert(rd < (1<<5)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | ra; ++ w = (w << 8) | imm; ++ w = (w << 3) | func; ++ w = (w << 5) | rc; ++ w = (w << 5) | rd; ++ return w; ++} ++ ++///complex float calculate insn format ++ /*|31 26 | 25 21 | 20 16| 15 10 |9 5| 4 0|*/ ++ /*| opcode | fa | fb | func | fc | fd |*/ //register ++static inline UInt X_comfloat_6_5_5_6_5_5(UInt op, UInt fa, UInt fb, ++ UInt func, UInt fc, UInt fd) ++{ ++ vassert(op == 0x19); ++ vassert(6+5+5+6+5+5 == 32); ++ vassert(op < (1<<6)); ++ vassert(fa < (1<<5)); ++ vassert(fb < (1<<5)); ++ vassert(func < (1<<6)); ++ vassert(fc < (1<<5)); ++ vassert(fd < (1<<5)); ++ UInt w = 0; ++ w = (w << 6) | op; ++ w = (w << 5) | fa; ++ w = (w << 5) | fb; ++ w = (w << 6) | func; ++ w = (w << 5) | fc; ++ w = (w << 5) | fd; ++ return w; ++} ++ ++static inline UInt X_nop(void) ++{ ++ /* nop: bis $31, 0, $31 */ ++ return X_simimm_6_5_8_8_5(0x12, 31, 0x0, 0x3A, 31); ++} ++ ++/* Load any 64-bit immediate number, with instructions not above 5, ++ If `fixedsize' is True, emit 5 instructions (20 bytes) exactly. ++ ++ emit instructions below: ++ ++ ldih ra, x3(r31) ++ ldi ra, x2(ra) ++ sll ra, 32, ra ++ ldih ra, x1(ra) ++ ldi ra, x0(ra) ++ ++ Instruction that have no effect will be skipped, which means number of ++ emit instructions may less than 5 if `fixedsize' is False. ++ ++*/ ++static UChar *do_load_imm(UChar * p, UInt ra, ULong imm64, Bool fixedsize) ++{ ++ UChar *begin = p; ++ ++ /* The only crucial part is, ++ how to calculate x[0], x[1], x[2], x[3] from `imm64' ++ ++ ldi/ldih is signed-extend, if x[i] is negative, 0xffffffffffffffff will ++ add higher bits. ++ ++ For cancel out this effect of signed-extend, if x[i] is negative, ++ x[i+1] need to add by one. ++ ++ But this `add-by-1' caused tow tricky problems: ++ 1. add-by-1 may produced a carry, THIS CARRY MUST BE TRANSMITTED TO ++ ALL HIGHER BITS. So, treat all higher bits as a whole number when ++ doing this add-by-1. ++ 2. Because of carry is transmitted to all higher bits, the signed-bit ++ of x[i+1] x[i+2] x[i+3] may changed too. Use this changed value, ++ not origin value, as judging condition of negativity. Because ++ signed-extend is perform on changed value, not origin value. ++ */ ++ UShort x[4]; ++ for (Int i = 0; i < 4; i++) { ++ x[i] = imm64; ++ imm64 >>= 16; ++ if (x[i] >= 0x8000) ++ imm64++; ++ } ++ ++ if (x[3]) ++ p = emit32(p, X_ldst_6_5_5_16(0x3F, ra, begin == p ? 31 : ra, x[3])); ++ ++ if (x[2]) ++ p = emit32(p, X_ldst_6_5_5_16(0x3E, ra, begin == p ? 31 : ra, x[2])); ++ ++ if (p != begin) ++ p = emit32(p, X_simimm_6_5_8_8_5(0x12, ra, 32, 0x48, ra)); ++ ++ if (x[1]) ++ p = emit32(p, X_ldst_6_5_5_16(0x3F, ra, begin == p ? 31 : ra, x[1])); ++ ++ if (x[0] || p == begin) ++ p = emit32(p, X_ldst_6_5_5_16(0x3E, ra, begin == p ? 31 : ra, x[0])); ++ ++ /* Use NOP as padding, which not making extra value dependency */ ++ if (fixedsize) ++ while (p < begin + 20) ++ p = emit32(p, X_nop()); ++ ++ return p; ++} ++ ++static Bool is_load_imm(UChar * p, UInt ra, ULong imm64, Bool fixedsize) ++{ ++ UChar expected[20]; ++ UChar *end = do_load_imm(expected, ra, imm64, fixedsize); ++ ++ for (UInt i = 0; i < end - expected; i += 4) { ++ if (fetch32(p + i) != fetch32(expected + i)) ++ return False; ++ } ++ ++ return True; ++} ++ ++static UChar *do_condition_code_link(UChar *p, ULong delta, SW64Cond *cond) ++{ ++ vassert(fetch32(p) == 0); ++ ++ delta = delta / 4 - 1; ++ vassert(delta >= 0 && delta <= 40); ++ ++ /* condition is reversed */ ++ UInt opc; ++ UInt regNo; ++ switch (cond->code) { ++ case SW64cc_EQ: opc = 0x31; regNo = iregNo(cond->reg); break; ++ case SW64cc_NE: opc = 0x30; regNo = iregNo(cond->reg); break; ++ case SW64cc_LT: opc = 0x35; regNo = iregNo(cond->reg); break; ++ case SW64cc_LE: opc = 0x34; regNo = iregNo(cond->reg); break; ++ case SW64cc_GT: opc = 0x33; regNo = iregNo(cond->reg); break; ++ case SW64cc_GE: opc = 0x32; regNo = iregNo(cond->reg); break; ++ case SW64cc_FEQ: opc = 0x39; regNo = fregNo(cond->reg); break; ++ case SW64cc_FNE: opc = 0x38; regNo = fregNo(cond->reg); break; ++ case SW64cc_FLT: opc = 0x3D; regNo = fregNo(cond->reg); break; ++ case SW64cc_FLE: opc = 0x3C; regNo = fregNo(cond->reg); break; ++ case SW64cc_FGT: opc = 0x3B; regNo = fregNo(cond->reg); break; ++ case SW64cc_FGE: opc = 0x3A; regNo = fregNo(cond->reg); break; ++ default: ++ vassert(0); ++ } ++ ++ return emit32(p, X_branch_6_5_21(opc, regNo, delta)); ++} ++ ++Int emit_SW64Instr ( /*MB_MOD*/Bool* is_profInc, ++ /*MB_MOD*/Bool* is_8aligned, ++ UChar* buf, Int nbuf, const SW64Instr* i, ++ Bool mode64, VexEndness endness_host, ++ const void* disp_cp_chain_me_to_slowEP, ++ const void* disp_cp_chain_me_to_fastEP, ++ const void* disp_cp_xindir, ++ const void* disp_cp_xassisted ) ++{ ++ UChar *p = &buf[0]; ++ vassert(nbuf >= 32); ++ ++ switch (i->tag) ++ { ++ /*----load/store----*/ ++ case SW64in_Load: ++ { ++ UInt dst = iregNo(i->SW64in.Load.dst); ++ UInt base = iregNo(i->SW64in.Load.addr->base); ++ UInt disp = toImm(i->SW64in.Load.addr->disp, 16); ++ UInt opcode = (i->SW64in.Load.op == SW64in_LDBU) ? 0x20 : ++ (i->SW64in.Load.op == SW64in_LDHU) ? 0x21 : ++ (i->SW64in.Load.op == SW64in_LDW) ? 0x22 : ++ (i->SW64in.Load.op == SW64in_LDL) ? 0x23 : ++ (vassert(0), 0); ++ p = emit32(p, X_ldst_6_5_5_16(opcode, dst, base, disp)); ++ goto done; ++ } ++ case SW64in_Store: ++ { ++ UInt src = iregNo(i->SW64in.Store.src); ++ UInt base = iregNo(i->SW64in.Store.addr->base); ++ UInt disp = toImm(i->SW64in.Store.addr->disp, 16); ++ UInt opcode = (i->SW64in.Store.op == SW64in_STB) ? 0x28 : ++ (i->SW64in.Store.op == SW64in_STH) ? 0x29 : ++ (i->SW64in.Store.op == SW64in_STW) ? 0x2A : ++ (i->SW64in.Store.op == SW64in_STL) ? 0x2B : ++ (vassert(0), 0); ++ p = emit32(p, X_ldst_6_5_5_16(opcode, src, base, disp)); ++ goto done; ++ } ++ case SW64in_FpLoad: ++ { ++ UInt dst = fregNo(i->SW64in.FpLoad.dst); ++ UInt base = iregNo(i->SW64in.FpLoad.addr->base); ++ UInt disp = toImm(i->SW64in.FpLoad.addr->disp, 16); ++ UInt opcode = (i->SW64in.FpLoad.op == SW64in_FLDS) ? 0x26 : ++ (i->SW64in.FpLoad.op == SW64in_FLDD) ? 0x27 : ++ (vassert(0), 0); ++ p = emit32(p, X_ldst_6_5_5_16(opcode, dst, base, disp)); ++ goto done; ++ } ++ case SW64in_FpStore: ++ { ++ UInt src = fregNo(i->SW64in.FpStore.src); ++ UInt base = iregNo(i->SW64in.FpStore.addr->base); ++ UInt disp = toImm(i->SW64in.FpStore.addr->disp, 16); ++ UInt opcode = (i->SW64in.FpStore.op == SW64in_FSTS) ? 0x2E : ++ (i->SW64in.FpStore.op == SW64in_FSTD) ? 0x2F : ++ (vassert(0), 0); ++ p = emit32(p, X_ldst_6_5_5_16(opcode, src, base, disp)); ++ goto done; ++ } ++ case SW64in_LoadImm: ++ { ++ UInt rDst = iregNo(i->SW64in.LoadImm.dst); ++ p = do_load_imm(p, rDst, i->SW64in.LoadImm.imm64, False); ++ goto done; ++ } ++ ++ case SW64in_CAS: ++ { ++ vassert(!(*is_8aligned)); ++ vassert(!sameHReg(i->SW64in.Cas.old, i->SW64in.Cas.data)); ++ vassert(!sameHReg(i->SW64in.Cas.old, i->SW64in.Cas.expd)); ++ vassert(!sameHReg(i->SW64in.Cas.old, i->SW64in.Cas.addr)); ++ ++ UInt old = iregNo(i->SW64in.Cas.old); ++ UInt expd = iregNo(i->SW64in.Cas.expd); ++ UInt data = iregNo(i->SW64in.Cas.data); ++ UInt addr = iregNo(i->SW64in.Cas.addr); ++ Bool isSize4 = toBool(i->SW64in.Cas.sz == 4); ++ ++ /* */ ++ if (!is_8_aligned(p)) { ++ p = emit32(p, X_nop()); ++ } ++ ++ /* ++ 0: lld* %[old], 0(%[addr]) ++ cmpeq %[old], %[expd], $1 ++ wr_f $1 ++ mov %[data], $2 ++ lst* $2, 0(%[addr]) ++ rd_f $2 ++ beq $1, 1f # data != expd, fail ++ beq $2, 0b # CAS failed, try again ++ 1: ++ */ ++ p = emit32(p, X_ldst_6_5_5_4_12(0x08, old, addr, isSize4? 0x0: 0x1, 0x0)); ++ p = emit32(p, X_simreg_6_5_5_3_8_5(0x10, old, expd, 0x28, 1)); ++ p = emit32(p, X_ldst_6_5_5_16(0x06, 1, 31, 0x1020)); ++ p = emit32(p, X_simimm_6_5_8_8_5(0x12, data, 0x0, 0x3A, 2)); ++ p = emit32(p, X_ldst_6_5_5_4_12(0x08, 2, addr, isSize4? 0x8: 0x9, 0x0)); ++ p = emit32(p, X_ldst_6_5_5_16(0x06, 2, 31, 0x1000)); ++ p = emit32(p, X_branch_6_5_21(0x30, 1, 0x1)); ++ p = emit32(p, X_branch_6_5_21(0x30, 2, 0x1ffff8)); ++ ++ *is_8aligned = True; ++ goto done; ++ } ++ ++ /*----unop data process----*/ ++ case SW64in_UnOperate: ++ { ++ UInt rDst = iregNo(i->SW64in.UnOperate.dst); ++ UInt rSrc = iregNo(i->SW64in.UnOperate.src); ++ switch (i->SW64in.UnOperate.op) ++ { ++ case SW64in_POP: ++ { ++ /*CTPOP rb(src), rc(dst) */ ++ /*opcode=0x10, func=0x58 */ ++ UInt instr = X_simreg_6_5_5_3_8_5(0x10, 0, rSrc, 0x58, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_CLZ: ++ { ++ /*CTLZ rb(src), rc(dst)*/ ++ /*opcode=0x10, func=0x59 */ ++ UInt instr = X_simreg_6_5_5_3_8_5(0x10, 0, rSrc, 0x59, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_CTZ: ++ { ++ /*CTTZ rb(src), rc(dst) */ ++ /*opcode=0x10, func=0x5A */ ++ UInt instr = X_simreg_6_5_5_3_8_5(0x10, 0, rSrc, 0x5A, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ default: ++ break; ++ } ++ goto bad; ++ } ++ ++ /*----integer data process----*/ ++ case SW64in_Logic: ++ { ++ UInt rSrcL = iregNo(i->SW64in.Logic.srcL); ++ UInt rDst = iregNo(i->SW64in.Logic.dst); ++ vassert(rSrcL < 32); ++ vassert(rDst < 32); ++ SW64RI8* srcR = i->SW64in.Logic.srcR; ++ ++ UInt func = 0x00; /* invalid */ ++ switch (i->SW64in.Logic.op) ++ { ++ case SW64in_AND: func = 0x38; break; ++ case SW64in_BIC: func = 0x39; break; ++ case SW64in_OR: func = 0x3A; break; ++ case SW64in_ORNOT: func = 0x3B; break; ++ case SW64in_XOR: func = 0x3C; break; ++ default: break; ++ } ++ vassert(func != 0); ++ switch(srcR->tag) ++ { ++ case Sri8_Imm: ++ { ++ UInt opcode = 0x12; ++ UInt imm = (UInt)srcR->Sri8.Imm.imm8; ++ UInt instr = X_simimm_6_5_8_8_5(opcode, rSrcL, imm, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case Sri8_Reg: ++ { ++ UInt opcode = 0x10; ++ UInt rb = iregNo(srcR->Sri8.Reg.reg); ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rb, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ default: break; ++ } ++ ++ goto bad; ++ } ++ case SW64in_Cmp: ++ { ++ UInt rSrcL = iregNo(i->SW64in.Cmp.srcL); ++ UInt rDst = iregNo(i->SW64in.Cmp.dst); ++ vassert(rSrcL < 32); ++ vassert(rDst < 32); ++ ++ SW64RI8 *srcR = i->SW64in.Cmp.srcR; ++ vassert(srcR->tag == Sri8_Reg || srcR->tag == Sri8_Imm); ++ ++ UInt func; ++ switch (i->SW64in.Cmp.op) { ++ case SW64in_CMPEQ: func = 0x28; break; ++ case SW64in_CMPLT: func = 0x29; break; ++ case SW64in_CMPLE: func = 0x2A; break; ++ case SW64in_CMPULT: func = 0x2B; break; ++ case SW64in_CMPULE: func = 0x2C; break; ++ default: vassert(0); ++ } ++ ++ if (srcR->tag == Sri8_Reg) { ++ UInt rSrcR = iregNo(srcR->Sri8.Reg.reg); ++ p = emit32(p, X_simreg_6_5_5_3_8_5(0x10, rSrcL, rSrcR, func, rDst)); ++ } else { ++ UInt imm = srcR->Sri8.Imm.imm8; ++ p = emit32(p, X_simimm_6_5_8_8_5(0x12, rSrcL, imm, func, rDst)); ++ } ++ ++ goto done; ++ } ++ case SW64in_Shft: ++ { ++ UInt rSrcL = iregNo(i->SW64in.Shft.srcL); ++ UInt rDst = iregNo(i->SW64in.Shft.dst); ++ vassert(rSrcL < 32); ++ vassert(rDst < 32); ++ SW64RI8* srcR = i->SW64in.Shft.srcR; ++ ++ UInt func = 0x00; /* invalid */ ++ switch (i->SW64in.Shft.op) ++ { ++ case SW64in_SLL: func = 0x48; break; ++ case SW64in_SRL: func = 0x49; break; ++ case SW64in_SRA: func = 0x4A; break; ++ default: break; ++ } ++ vassert(func != 0); ++ switch(srcR->tag) ++ { ++ case Sri8_Imm: ++ { ++ UInt opcode = 0x12; ++ UInt imm = (UInt)srcR->Sri8.Imm.imm8; ++ UInt instr = X_simimm_6_5_8_8_5(opcode, rSrcL, imm, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case Sri8_Reg: ++ { ++ UInt opcode = 0x10; ++ UInt rb = iregNo(srcR->Sri8.Reg.reg); ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rb, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ default: break; ++ } ++ ++ goto bad; ++ } ++ case SW64in_Arith: ++ { ++ UInt rSrcL = iregNo(i->SW64in.Arith.srcL); ++ UInt rDst = iregNo(i->SW64in.Arith.dst); ++ vassert(rSrcL < 32); ++ vassert(rDst < 32); ++ SW64RI8* srcR = i->SW64in.Arith.srcR; ++ ++ UInt func = 0xFF; /* invalid */ ++ switch (i->SW64in.Arith.op) ++ { ++ case SW64in_ADDW: func = 0x00; break; ++ case SW64in_SUBW: func = 0x01; break; ++ case SW64in_S4ADDW: func = 0x02; break; ++ case SW64in_S4SUBW: func = 0x03; break; ++ case SW64in_S8ADDW: func = 0x04; break; ++ case SW64in_S8SUBW: func = 0x05; break; ++ case SW64in_ADDL: func = 0x08; break; ++ case SW64in_SUBL: func = 0x09; break; ++ case SW64in_S4ADDL: func = 0x0A; break; ++ case SW64in_S4SUBL: func = 0x0B; break; ++ case SW64in_S8ADDL: func = 0x0C; break; ++ case SW64in_S8SUBL: func = 0x0D; break; ++ case SW64in_MULW: func = 0x10; break; ++ case SW64in_MULL: func = 0x18; break; ++ case SW64in_UMULH: func = 0x19; break; ++ case SW64in_ZAP: func = 0x68; break; ++ case SW64in_ZAPNOT: func = 0x69; break; ++ case SW64in_SEXTB: func = 0x6A; break; ++ case SW64in_SEXTH: func = 0x6B; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ switch(srcR->tag) ++ { ++ case Sri8_Imm: ++ { ++ UInt opcode = 0x12; ++ UInt imm = (UInt)srcR->Sri8.Imm.imm8; ++ UInt instr = X_simimm_6_5_8_8_5(opcode, rSrcL, imm, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case Sri8_Reg: ++ { ++ UInt opcode = 0x10; ++ UInt rb = iregNo(srcR->Sri8.Reg.reg); ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rb, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ default: break; ++ } ++ ++ goto bad; ++ } ++ case SW64in_IntDiv: ++ { ++ UInt rSrcL = iregNo(i->SW64in.IntDiv.srcL); ++ UInt rSrcR = iregNo(i->SW64in.IntDiv.srcR); ++ UInt rDst = iregNo(i->SW64in.IntDiv.dst); ++ ++ vassert(rSrcL < 32); ++ vassert(rSrcR < 32); ++ vassert(rDst < 32); ++ ++ UInt func = 0xFF; /* invalid */ ++ switch (i->SW64in.IntDiv.op) ++ { ++ case SW64in_DIVW: func = 0x11; break; ++ case SW64in_UDIVW: func = 0x12; break; ++ case SW64in_REMW: func = 0x13; break; ++ case SW64in_UREMW: func = 0x14; break; ++ case SW64in_DIVL: func = 0x1A; break; ++ case SW64in_UDIVL: func = 0x1B; break; ++ case SW64in_REML: func = 0x1C; break; ++ case SW64in_UREML: func = 0x1D; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ ++ UInt opcode = 0x10; ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rSrcR, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ ++ /*----float data process----*/ ++ case SW64in_FpArith: ++ { ++ UInt rSrcL = fregNo(i->SW64in.FpArith.srcL); ++ UInt rSrcR = fregNo(i->SW64in.FpArith.srcR); ++ UInt rDst = fregNo(i->SW64in.FpArith.dst); ++ vassert(rSrcL < 32); ++ vassert(rSrcR < 32); ++ vassert(rDst < 32); ++ vassert(rSrcL != rDst && rSrcR != rDst); ++ ++ UInt opcode = 0x18; ++ UInt func = 0xFF; /* INVALID */ ++ switch (i->SW64in.FpArith.op) ++ { ++ case SW64in_FADDS: func = 0x00; break; ++ case SW64in_FADDD: func = 0x01; break; ++ case SW64in_FSUBS: func = 0x02; break; ++ case SW64in_FSUBD: func = 0x03; break; ++ case SW64in_FMULS: func = 0x04; break; ++ case SW64in_FMULD: func = 0x05; break; ++ case SW64in_FDIVS: func = 0x06; break; ++ case SW64in_FDIVD: func = 0x07; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ ++ /*op fa, fb, fc*/ ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rSrcR, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ ++ /* move/convert between GPR and FPR */ ++ case SW64in_FpGpMove: ++ { ++ UInt rSrc = 32; ++ UInt rDst = 32; ++ UInt opcode = 0xFF; ++ switch(i->SW64in.FpGpMove.op) ++ { ++ case SW64in_FIMOVS: ++ case SW64in_FIMOVD: ++ case SW64in_CMOVDL: ++ case SW64in_CMOVDL_G: ++ case SW64in_CMOVDL_P: ++ case SW64in_CMOVDL_Z: ++ case SW64in_CMOVDL_N: ++ case SW64in_CMOVDLU: ++ case SW64in_CMOVDLU_G: ++ case SW64in_CMOVDLU_P: ++ case SW64in_CMOVDLU_Z: ++ case SW64in_CMOVDLU_N: ++ case SW64in_CMOVDWU: ++ case SW64in_CMOVDWU_G: ++ case SW64in_CMOVDWU_P: ++ case SW64in_CMOVDWU_Z: ++ case SW64in_CMOVDWU_N: ++ case SW64in_CMOVDW: ++ case SW64in_CMOVDW_G: ++ case SW64in_CMOVDW_P: ++ case SW64in_CMOVDW_Z: ++ case SW64in_CMOVDW_N: ++ { ++ rSrc = fregNo(i->SW64in.FpGpMove.src); ++ rDst = iregNo(i->SW64in.FpGpMove.dst); ++ opcode = 0x10; ++ break; ++ } ++ case SW64in_IFMOVS: ++ case SW64in_IFMOVD: ++ case SW64in_CMOVLS: ++ case SW64in_CMOVWS: ++ case SW64in_CMOVLD: ++ case SW64in_CMOVWD: ++ case SW64in_CMOVULS: ++ case SW64in_CMOVUWS: ++ case SW64in_CMOVULD: ++ case SW64in_CMOVUWD: ++ { ++ rSrc = iregNo(i->SW64in.FpGpMove.src); ++ rDst = fregNo(i->SW64in.FpGpMove.dst); ++ opcode = 0x18; ++ break; ++ } ++ default: break; ++ } ++ vassert(rSrc < 32); ++ vassert(rDst < 32); ++ vassert(opcode != 0xFF); ++ ++ UInt func; ++ UInt ra = 0; ++ UInt rb = 0; ++ switch (i->SW64in.FpGpMove.op) ++ { ++ case SW64in_FIMOVS: func = 0x70; ra = rSrc; break; ++ case SW64in_FIMOVD: func = 0x78; ra = rSrc; break; ++ case SW64in_IFMOVS: func = 0x40; ra = rSrc; break; ++ case SW64in_IFMOVD: func = 0x41; ra = rSrc; break; ++ case SW64in_CMOVDL: func = 0x72; rb = rSrc; break; ++ case SW64in_CMOVDL_G: func = 0x74; rb = rSrc; break; ++ case SW64in_CMOVDL_P: func = 0x7a; rb = rSrc; break; ++ case SW64in_CMOVDL_Z: func = 0x7c; rb = rSrc; break; ++ case SW64in_CMOVDL_N: func = 0x80; rb = rSrc; break; ++ case SW64in_CMOVDLU: func = 0x81; rb = rSrc; break; ++ case SW64in_CMOVDLU_G: func = 0x82; rb = rSrc; break; ++ case SW64in_CMOVDLU_P: func = 0x83; rb = rSrc; break; ++ case SW64in_CMOVDLU_Z: func = 0x84; rb = rSrc; break; ++ case SW64in_CMOVDLU_N: func = 0x85; rb = rSrc; break; ++ case SW64in_CMOVDWU: func = 0x86; rb = rSrc; break; ++ case SW64in_CMOVDWU_G: func = 0x87; rb = rSrc; break; ++ case SW64in_CMOVDWU_P: func = 0x88; rb = rSrc; break; ++ case SW64in_CMOVDWU_Z: func = 0x89; rb = rSrc; break; ++ case SW64in_CMOVDWU_N: func = 0x8a; rb = rSrc; break; ++ case SW64in_CMOVDW: func = 0x8b; rb = rSrc; break; ++ case SW64in_CMOVDW_G: func = 0x8c; rb = rSrc; break; ++ case SW64in_CMOVDW_P: func = 0x8d; rb = rSrc; break; ++ case SW64in_CMOVDW_Z: func = 0x8e; rb = rSrc; break; ++ case SW64in_CMOVDW_N: func = 0x8f; rb = rSrc; break; ++ case SW64in_CMOVLS: func = 0x48; rb = rSrc; break; ++ case SW64in_CMOVWS: func = 0x49; rb = rSrc; break; ++ case SW64in_CMOVLD: func = 0x4a; rb = rSrc; break; ++ case SW64in_CMOVWD: func = 0x4b; rb = rSrc; break; ++ case SW64in_CMOVULS: func = 0x4c; rb = rSrc; break; ++ case SW64in_CMOVUWS: func = 0x4d; rb = rSrc; break; ++ case SW64in_CMOVULD: func = 0x4e; rb = rSrc; break; ++ case SW64in_CMOVUWD: func = 0x4f; rb = rSrc; break; ++ default: vassert(0); ++ } ++ ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, ra, rb, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_FpCpy: ++ { ++ UInt rSrcA = fregNo(i->SW64in.FpCpy.src1); ++ UInt rSrcB = fregNo(i->SW64in.FpCpy.src2); ++ UInt rDst = fregNo(i->SW64in.FpCpy.dst); ++ vassert(rSrcA < 32); ++ vassert(rSrcB < 32); ++ vassert(rDst < 32); ++ vassert(rSrcA != rDst && rSrcB != rDst); ++ ++ SW64FpCpyOp op = i->SW64in.FpCpy.op; ++ UInt func = (op == SW64in_FCPYS) ? 0x30 : ++ (op == SW64in_FCPYSE) ? 0x31 : ++ (op == SW64in_FCPYSN) ? 0x32 : ++ (vassert(0), 0); ++ ++ UInt instr = X_simreg_6_5_5_3_8_5(0x18, rSrcA, rSrcB, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_FpQuary: ++ { ++ UInt rSrc1 = fregNo(i->SW64in.FpQuary.src1); //fa ++ UInt rSrc2 = fregNo(i->SW64in.FpQuary.src2); //fb ++ UInt rSrc3 = fregNo(i->SW64in.FpQuary.src3); //fc ++ UInt rDst = fregNo(i->SW64in.FpQuary.dst); //fd ++ vassert(rSrc1 < 32); ++ vassert(rSrc2 < 32); ++ vassert(rSrc3 < 32); ++ vassert(rDst < 32); ++ vassert(rSrc1 != rDst && rSrc2 != rDst && rSrc3 != rDst); ++ ++ UInt opcode = 0x19; ++ UInt func = 0xFF; /* INVALID */ ++ switch (i->SW64in.FpQuary.op) ++ { ++ case SW64in_MADDS: func = 0x00; break; ++ case SW64in_MSUBS: func = 0x02; break; ++ case SW64in_MADDD: func = 0x01; break; ++ case SW64in_MSUBD: func = 0x03; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ ++ /*op fa, fb, fc, fd*/ ++ UInt instr = X_comfloat_6_5_5_6_5_5(opcode, rSrc1, rSrc2, ++ func, rSrc3, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_FpUnary: ++ { ++ UInt rSrc = fregNo(i->SW64in.FpUnary.src); /* fb */ ++ UInt rDst = fregNo(i->SW64in.FpUnary.dst); /* fc */ ++ vassert(rSrc < 32); ++ vassert(rDst < 32); ++ vassert(rSrc != rDst); ++ ++ SW64FpUnaryOp op = i->SW64in.FpUnary.op; ++ UInt func = (op == SW64in_FSQRTS) ? 0x8 : ++ (op == SW64in_FSQRTD) ? 0x9 : ++ (op == SW64in_FRECS) ? 0x58 : ++ (op == SW64in_FRECD) ? 0x59 : ++ (op == SW64in_FRIS) ? 0x5a : ++ (op == SW64in_FRIS_G) ? 0x5b : ++ (op == SW64in_FRIS_P) ? 0x5c : ++ (op == SW64in_FRIS_Z) ? 0x5d : ++ (op == SW64in_FRIS_N) ? 0x5f : ++ (op == SW64in_FRID) ? 0x60 : ++ (op == SW64in_FRID_G) ? 0x61 : ++ (op == SW64in_FRID_P) ? 0x62 : ++ (op == SW64in_FRID_Z) ? 0x63 : ++ (op == SW64in_FRID_N) ? 0x64 : ++ (vassert(0), 0); ++ ++ UInt instr = X_simreg_6_5_5_3_8_5(0x18, rSrc, rSrc, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_FpCmp: ++ { ++ UInt rSrcL = fregNo(i->SW64in.FpCmp.srcL); ++ UInt rSrcR = fregNo(i->SW64in.FpCmp.srcR); ++ UInt rDst = fregNo(i->SW64in.FpCmp.dst); ++ vassert(rSrcL < 32); ++ vassert(rSrcR < 32); ++ vassert(rDst < 32); ++ vassert(rSrcL != rDst && rSrcR != rDst); ++ ++ UInt opcode = 0x18; ++ UInt func = 0xFF; /* INVALID */ ++ switch (i->SW64in.FpCmp.op) ++ { ++ case SW64in_CMPFEQ: func = 0x10; break; ++ case SW64in_CMPFLE: func = 0x11; break; ++ case SW64in_CMPFLT: func = 0x12; break; ++ case SW64in_CMPFUN: func = 0x13; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ ++ /*op fa, fb, fc*/ ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, rSrcL, rSrcR, func, rDst); ++ p = emit32(p, instr); ++ ++ goto done; ++ } ++ case SW64in_FpCvt: ++ { ++ UInt rSrc = fregNo(i->SW64in.FpCvt.src); ++ UInt rDst = fregNo(i->SW64in.FpCvt.dst); ++ vassert(rSrc < 32); ++ vassert(rDst < 32); ++ vassert(rSrc != rDst); ++ ++ UInt opcode = 0x18; ++ UInt func = 0xFF; /* INVALID */ ++ switch (i->SW64in.FpCvt.op) ++ { ++ case SW64in_FCVTSD: func = 0x20; break; ++ case SW64in_FCVTDS: func = 0x21; break; ++ case SW64in_FCVTDL: func = 0x27; break; ++ case SW64in_FCVTLS: func = 0x2D; break; ++ case SW64in_FCVTLD: func = 0x2F; break; ++ case SW64in_FCVTDL_G: func = 0x22; break; ++ case SW64in_FCVTDL_P: func = 0x23; break; ++ case SW64in_FCVTDL_Z: func = 0x24; break; ++ case SW64in_FCVTDL_N: func = 0x25; break; ++ default: break; ++ } ++ vassert(func != 0xFF); ++ UInt instr = X_simreg_6_5_5_3_8_5(opcode, 0, rSrc, func, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_RFPCR: ++ { ++ UInt rDst = fregNo(i->SW64in.RFPCR.dst); ++ UInt instr = X_simreg_6_5_5_3_8_5(0x18, rDst, 0, 0x50, 0); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_WFPCR: ++ { ++ UInt rSrc = fregNo(i->SW64in.WFPCR.src); ++ UInt instr = X_simreg_6_5_5_3_8_5(0x18, rSrc, 0, 0x51, 0); ++ p = emit32(p, instr); ++ goto done; ++ } ++ ++ /*----code link----*/ ++ case SW64in_XDirect: ++ { ++ /* NB: what goes on here has to be very closely coordinated ++ with the chainXDirect_SW64 and unchainXDirect_SW64 below. */ ++ /* We're generating chain-me requests here, so we need to be ++ sure this is actually allowed -- no-redir translations ++ can't use chain-me's. Hence: */ ++ vassert(disp_cp_chain_me_to_slowEP != NULL); ++ vassert(disp_cp_chain_me_to_fastEP != NULL); ++ ++ /* Use ptmp for backpatching conditional jumps. */ ++ UChar *ptmp = NULL; ++ ++ /* First off, if this is conditional, create a conditional ++ jump over the rest of it. Or at least, leave a space for ++ it that we will shortly fill in. */ ++ if (i->SW64in.XDirect.cond->code != SW64cc_AL) ++ { ++ ptmp = p; ++ p = emit32(p, 0); ++ } ++ ++ /* Update the guest PC. */ ++ /* ldi r2, XDirect.dstGA */ ++ p = do_load_imm(p, 2, i->SW64in.XDirect.dstGA, False); ++ ++ /* stl r2, XDirect.amPC */ ++ p = emit32(p, X_ldst_6_5_5_16(0x2B, 2, ++ iregNo(i->SW64in.XDirect.amPC->base), ++ toImm(i->SW64in.XDirect.amPC->disp, 16))); ++ ++ /* --- FIRST PATCHABLE BYTE follows --- */ ++ /* VG_(disp_cp_chain_me_to_{slowEP,fastEP}) (where we're ++ calling to) backs up the return address, so as to find the ++ address of the first patchable byte. So: don't change the ++ number of instructions (3) below. */ ++ /* move r2, VG_(disp_cp_chain_me_to_{slowEP,fastEP}) */ ++ ++ const void* disp_cp_chain_me ++ = i->SW64in.XDirect.toFastEP ? disp_cp_chain_me_to_fastEP ++ : disp_cp_chain_me_to_slowEP; ++ ++ /* ldi r2, disp_cp_chain_me */ ++ p = do_load_imm(p, 2, (Addr)disp_cp_chain_me, True); ++ ++ /* jmp r1, (r2) */ ++ UInt instr = X_ldst_6_5_5_16(0x3, 1, 2, 0); ++ p = emit32(p, instr); ++ /* --- END of PATCHABLE BYTES --- */ ++ ++ /* Fix up the conditional jump, if there was one. */ ++ if (i->SW64in.XDirect.cond->code != SW64cc_AL) ++ do_condition_code_link(ptmp, p - ptmp, ++ i->SW64in.XDirect.cond); ++ ++ goto done; ++ } ++ case SW64in_XIndir: ++ { ++ /* We're generating transfers that could lead indirectly to a ++ chain-me, so we need to be sure this is actually allowed -- ++ no-redir translations are not allowed to reach normal ++ translations without going through the scheduler. That means ++ no XDirects or XIndirs out from no-redir translations. ++ Hence: */ ++ vassert(disp_cp_xindir != NULL); ++ ++ /* Use ptmp for backpatching conditional jumps. */ ++ UChar *ptmp = NULL; ++ ++ /* First off, if this is conditional, create a conditional ++ jump over the rest of it. */ ++ if (i->SW64in.XIndir.cond->code != SW64cc_AL) { ++ ptmp = p; ++ p = emit32(p, 0); ++ } ++ ++ /* stl XIndir.dstGA, XIndir.amPC */ ++ p = emit32(p, X_ldst_6_5_5_16(0x2B, iregNo(i->SW64in.XIndir.dstGA), ++ iregNo(i->SW64in.XIndir.amPC->base), ++ toImm(i->SW64in.XIndir.amPC->disp, 16))); ++ ++ /* ldi r2, disp_cp_xindir */ ++ p = do_load_imm(p, 2, (ULong)disp_cp_xindir, False); ++ ++ /* jmp r31, (r2) */ ++ UInt instr = X_ldst_6_5_5_16(0x3, 31, 2, 0); ++ p = emit32(p, instr); ++ ++ /* Fix up the conditional jump, if there was one. */ ++ if (i->SW64in.XIndir.cond->code != SW64cc_AL) ++ do_condition_code_link(ptmp, p - ptmp, ++ i->SW64in.XIndir.cond); ++ ++ goto done; ++ } ++ case SW64in_XAssisted: ++ { ++ /* Use ptmp for backpatching conditional jumps. */ ++ UChar *ptmp = NULL; ++ ++ /* First off, if this is conditional, create a conditional ++ jump over the rest of it. */ ++ if (i->SW64in.XAssisted.cond->code != SW64cc_AL) ++ { ++ ptmp = p; ++ p = emit32(p, 0); ++ } ++ ++ /* stl XAssisted.dstGA, XAssisted.amPC */ ++ p = emit32(p, X_ldst_6_5_5_16(0x2B, iregNo(i->SW64in.XAssisted.dstGA), ++ iregNo(i->SW64in.XAssisted.amPC->base), ++ toImm(i->SW64in.XAssisted.amPC->disp, 16))); ++ ++ /* imm32/64 r31, $magic_number */ ++ UInt trcval = 0; ++ switch (i->SW64in.XAssisted.jk) { ++ case Ijk_ClientReq: trcval = VEX_TRC_JMP_CLIENTREQ; break; ++ case Ijk_Sys_syscall: trcval = VEX_TRC_JMP_SYS_SYSCALL; break; ++ /* case Ijk_Sys_int128: trcval = VEX_TRC_JMP_SYS_INT128; break; */ ++ case Ijk_Yield: trcval = VEX_TRC_JMP_YIELD; break; ++ case Ijk_EmWarn: trcval = VEX_TRC_JMP_EMWARN; break; ++ case Ijk_EmFail: trcval = VEX_TRC_JMP_EMFAIL; break; ++ /* case Ijk_MapFail: trcval = VEX_TRC_JMP_MAPFAIL; break; */ ++ case Ijk_NoDecode: trcval = VEX_TRC_JMP_NODECODE; break; ++ case Ijk_InvalICache: trcval = VEX_TRC_JMP_INVALICACHE; break; ++ case Ijk_NoRedir: trcval = VEX_TRC_JMP_NOREDIR; break; ++ case Ijk_SigILL: trcval = VEX_TRC_JMP_SIGILL; break; ++ case Ijk_SigTRAP: trcval = VEX_TRC_JMP_SIGTRAP; break; ++ /* case Ijk_SigSEGV: trcval = VEX_TRC_JMP_SIGSEGV; break; */ ++ case Ijk_SigBUS: trcval = VEX_TRC_JMP_SIGBUS; break; ++ case Ijk_SigFPE_IntDiv: trcval = VEX_TRC_JMP_SIGFPE_INTDIV; break; ++ case Ijk_SigFPE_IntOvf: trcval = VEX_TRC_JMP_SIGFPE_INTOVF; break; ++ case Ijk_Boring: trcval = VEX_TRC_JMP_BORING; break; ++ /* We don't expect to see the following being assisted. ++ case Ijk_Ret: ++ case Ijk_Call: ++ fallthrough */ ++ default: ++ ppIRJumpKind(i->SW64in.XAssisted.jk); ++ vpanic("emit_SW64Instr.SW64in_XAssisted: unexpected jump kind"); ++ } ++ vassert(trcval != 0); ++ ++ p = do_load_imm(p, SW64GuestStateRegno(), trcval, False); ++ ++ /* ldi r2, disp_cp_xassisted */ ++ p = do_load_imm(p, 2, (ULong)disp_cp_xassisted, False); ++ ++ /* jmp r31, (r2) */ ++ UInt instr = X_ldst_6_5_5_16(0x3, 31, 2, 0); ++ p = emit32(p, instr); ++ ++ /* Fix up the conditional jump, if there was one. */ ++ if (i->SW64in.XAssisted.cond->code != SW64cc_AL) ++ do_condition_code_link(ptmp, p - ptmp, ++ i->SW64in.XAssisted.cond); ++ ++ goto done; ++ } ++ ++ /*----cond select ----*/ ++ case SW64in_CondSel: ++ { ++ UInt rIftrue = iregNo(i->SW64in.CondSel.iftrue); ++ UInt rIffalse = iregNo(i->SW64in.CondSel.iffalse); ++ UInt rCond = iregNo(i->SW64in.CondSel.cond); ++ UInt rDst = iregNo(i->SW64in.CondSel.dst); ++ vassert(rCond < 32); ++ vassert(rIftrue < 32); ++ vassert(rIffalse < 32); ++ vassert(rDst < 32); ++ ++ UInt opcode; ++ switch (i->SW64in.CondSel.op) { ++ case SW64in_SELEQ: opcode = 0x0; break; ++ case SW64in_SELGE: opcode = 0x1; break; ++ case SW64in_SELGT: opcode = 0x2; break; ++ case SW64in_SELLE: opcode = 0x3; break; ++ case SW64in_SELLT: opcode = 0x4; break; ++ case SW64in_SELNE: opcode = 0x5; break; ++ case SW64in_SELLBC: opcode = 0x6; break; ++ case SW64in_SELLBS: opcode = 0x7; break; ++ default: vassert(0); ++ } ++ ++ UInt instr = X_comreg_6_5_5_3_3_5_5(0x11, rCond, rIftrue, opcode, rIffalse, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ case SW64in_FpSel: ++ { ++ UInt rcond = fregNo(i->SW64in.FpSel.cond); //cond, Ity_F64 ++ UInt rIftrue = fregNo(i->SW64in.FpSel.iftrue); ++ UInt rIffalse = fregNo(i->SW64in.FpSel.iffalse); ++ UInt rDst = fregNo(i->SW64in.FpSel.dst); ++ vassert(rcond < 32); ++ vassert(rIftrue < 32); ++ vassert(rIffalse < 32); ++ vassert(rDst < 32); ++ ++ UInt func = (i->SW64in.FpSel.op == SW64in_FSELEQ) ? 0x10 : ++ (i->SW64in.FpSel.op == SW64in_FSELNE) ? 0x11 : ++ (i->SW64in.FpSel.op == SW64in_FSELLT) ? 0x12 : ++ (i->SW64in.FpSel.op == SW64in_FSELLE) ? 0x13 : ++ (i->SW64in.FpSel.op == SW64in_FSELGT) ? 0x14 : ++ (i->SW64in.FpSel.op == SW64in_FSELGE) ? 0x15 : ++ (vassert(0), 0); ++ ++ UInt instr = X_comfloat_6_5_5_6_5_5(0x19, rcond, rIftrue, func, rIffalse, rDst); ++ p = emit32(p, instr); ++ goto done; ++ } ++ ++ /*----other ----*/ ++ case SW64in_EvCheck: ++ { ++ /* This requires a 32-bit dec/test in 32 mode. */ ++ /* We generate: ++ ldw r2, amCounter ++ subl r2, 1, r2 ++ stw r2, amCounter ++ bge r2, nofail ++ ldl r2, amFailAddr ++ jmp r31, (r2) ++ nofail: ++ */ ++ UChar* p0 = p; ++ UInt instr = 0; ++ /* ldw r2, amCounter */ ++ p = emit32(p, X_ldst_6_5_5_16(0x22, 2, ++ iregNo(i->SW64in.EvCheck.amCounter->base), ++ toImm(i->SW64in.EvCheck.amCounter->disp, 16))); ++ ++ /* subl r2, 1, r2 */ ++ instr = X_simimm_6_5_8_8_5(0x12, 2, 1, 0x09, 2); ++ p = emit32(p, instr); ++ ++ /* stw r2, amCounter */ ++ p = emit32(p, X_ldst_6_5_5_16(0x2A, 2, ++ iregNo(i->SW64in.EvCheck.amCounter->base), ++ toImm(i->SW64in.EvCheck.amCounter->disp, 16))); ++ ++ /* bge r2, nofail */ ++ instr = X_branch_6_5_21(0x35, 2, 2); ++ p = emit32(p, instr); ++ ++ /* ldl r2, amFailAddr */ ++ p = emit32(p, X_ldst_6_5_5_16(0x23, 2, ++ iregNo(i->SW64in.EvCheck.amFailAddr->base), ++ toImm(i->SW64in.EvCheck.amFailAddr->disp, 16))); ++ ++ /* jmp r31, (r2) */ ++ instr = X_ldst_6_5_5_16(0x3, 31, 2, 0); ++ p = emit32(p, instr); ++ /* nofail: */ ++ ++ /* Crosscheck */ ++ vassert(evCheckSzB_SW64() == (UChar*)p - (UChar*)p0); ++ goto done; ++ } ++ case SW64in_ProfInc: ++ { ++ /* Generate a code template to increment a memory location whose ++ address will be known later as an immediate value. This code ++ template will be patched once the memory location is known. ++ For now we do this with address == 0x65556555. */ ++ ++ /* 64-bit: ++ move r2, 0x6555655565556555ULL ++ ldl r1, 0(r2) ++ addl r1, 1, r1 ++ stl r1, 0(r2) */ ++ ++ UInt instr = 0; ++ ++ /* move r2, 0x6555655565556555ULL */ ++ p = do_load_imm(p, 2, 0x6555655565556555ULL, True); ++ ++ /* ldl r1, 0(r2) */ ++ instr = X_ldst_6_5_5_16(0x23, 1, 2, 0); ++ p = emit32(p, instr); ++ ++ /* addl r1, 1, r1 */ ++ instr = X_simimm_6_5_8_8_5(0x12, 1, 1, 0x08, 1); ++ p = emit32(p, instr); ++ ++ /* stl r1, 0(r2) */ ++ instr = X_ldst_6_5_5_16(0x2B, 1, 2, 0); ++ p = emit32(p, instr); ++ ++ /* Tell the caller .. */ ++ vassert(!(*is_profInc)); ++ *is_profInc = True; ++ goto done; ++ } ++ ++ case SW64in_Call: ++ { ++ if (i->SW64in.Call.cond->code != SW64cc_AL ++ && i->SW64in.Call.rloc.pri != RLPri_None) ++ { ++ /* The call might not happen (it isn't unconditional) and ++ it returns a result. In this case we will need to ++ generate a control flow diamond to put 0x555..555 in ++ the return register(s) in the case where the call ++ doesn't happen. If this ever becomes necessary, maybe ++ copy code from the ARM equivalent. Until that day, ++ just give up. */ ++ goto bad; ++ } ++ ++ /* Use ptmp for backpatching conditional jumps. */ ++ UChar *ptmp = NULL; ++ ++ /* First off, if this is conditional, create a conditional ++ jump over the rest of it. */ ++ if (i->SW64in.Call.cond->code != SW64cc_AL) ++ { ++ ptmp = p; ++ p = emit32(p, 0); ++ } ++ ++ /* ldi $27, target */ ++ p = do_load_imm(p, 27, i->SW64in.Call.target, False); ++ ++ /* prefer use call, not jmp, for better return address prediction */ ++ /* call $26, ($27) */ ++ p = emit32(p, X_ldst_6_5_5_16(0x1, 26, 27, 0)); ++ ++ /* Fix up the conditional jump, if there was one. */ ++ if (i->SW64in.Call.cond->code != SW64cc_AL) ++ do_condition_code_link(ptmp, p - ptmp, ++ i->SW64in.Call.cond); ++ ++ goto done; ++ } ++ ++ case SW64in_Mfence: ++ { ++ /* MEMB */ ++ UInt instr = X_ldst_6_5_5_16(0x06, 0x0, 0x0, 0x0); ++ p = emit32(p, instr); ++ /* IMEMB */ ++ instr = X_ldst_6_5_5_16(0x06, 0x0, 0x0, 0x1); ++ p = emit32(p, instr); ++ goto done; ++ } ++ ++ default: ++ goto bad; ++ } ++ ++ bad: ++ vex_printf("\n=> "); ++ ppSW64Instr(i); ++ vpanic("emit_SW64Instr"); ++ /* NOTREACHED */ ++ done: ++ /* debug logger */ ++ // vex_printf("\n=> "); ++ // ppSW64Instr(i); ++ ++ /* vex_printf("p-&buf[0] = %ld\n", (p - &buf[0])); */ ++ vassert(p - &buf[0] <= 256); ++ return (p - &buf[0]); ++} ++ ++ ++/* How big is an event check? See case for Min_EvCheck in ++ emit_SW64Instr just above. That crosschecks what this returns, so ++ we can tell if we're inconsistent. */ ++Int evCheckSzB_SW64 (void) ++{ ++ UInt kInstrSize = 4; ++ return 6 * kInstrSize; ++} ++ ++/* NB: what goes on here has to be very closely coordinated with the ++ emitInstr case for XDirect, above. */ ++VexInvalRange chainXDirect_SW64 ( VexEndness endness_host, ++ void* place_to_chain, ++ const void* disp_cp_chain_me_EXPECTED, ++ const void* place_to_jump_to) ++{ ++ vassert(endness_host == VexEndnessLE); ++ UChar* p = (UChar*)place_to_chain; ++ vassert(0 == (3 & (HWord)p)); ++ ++ /* What we're expecting to see is: ++ --- ++ ldi r2, disp_cp_chain_me # 20 bytes ++ jmp r1, (r2) # 4 bytes ++ --- ++ And we patch them to either: ++ --- (prefer, faster) ++ br place_to_jump_to ++ nop ++ nop ++ nop ++ nop ++ nop ++ --- (fallback) ++ ldi r2, place_to_jump_to # 20 bytes ++ jmp r31, (r2) # 4 bytes ++ --- ++ */ ++ ++ vassert(is_load_imm(p, 2, (Addr)disp_cp_chain_me_EXPECTED, True)); ++ vassert(fetch32(p + 20) == X_ldst_6_5_5_16(0x3, 1, 2, 0)); ++ ++ ULong disp = (ULong)place_to_jump_to - (ULong)place_to_chain - 4; ++ vassert((disp & 0x3) == 0); ++ disp >>= 2; ++ ++ if (disp >= ~0xFFFFFULL || disp <= 0xFFFFFULL) { ++ p = emit32(p, X_branch_6_5_21(0x4, 31, disp)); ++ p = emit32(p, X_nop()); ++ p = emit32(p, X_nop()); ++ p = emit32(p, X_nop()); ++ p = emit32(p, X_nop()); ++ p = emit32(p, X_nop()); ++ } else { ++ p = do_load_imm(p, 2, (Addr)place_to_jump_to, True); ++ p = emit32(p, X_ldst_6_5_5_16(0x3, 31, 2, 0)); ++ } ++ ++ UInt len = p - (UChar*)place_to_chain; ++ vassert(len == 24); /* stay sane */ ++ VexInvalRange vir = {(HWord)place_to_chain, len}; ++ return vir; ++} ++ ++/* NB: what goes on here has to be very closely coordinated with the ++ emitInstr case for XDirect, above. */ ++VexInvalRange unchainXDirect_SW64 ( VexEndness endness_host, ++ void* place_to_unchain, ++ const void* place_to_jump_to_EXPECTED, ++ const void* disp_cp_chain_me) ++{ ++ vassert(endness_host == VexEndnessLE); ++ UChar* p = (UChar*)place_to_unchain; ++ vassert(0 == (3 & (HWord)p)); ++ ++ /* What we're expecting to see is either: ++ --- ++ br place_to_jump_to ++ nop ++ nop ++ nop ++ nop ++ nop ++ --- or ++ ldi r2, place_to_jump_to # 20 bytes ++ jmp r31, (r2) # 4 bytes ++ --- ++ And we patch them to: ++ --- ++ ldi r2, disp_cp_chain_me # 20 bytes ++ jmp r1, (r2) # 4 bytes ++ --- ++ */ ++ ++ ULong disp = (ULong)place_to_jump_to_EXPECTED - (ULong)place_to_unchain - 4; ++ vassert((disp & 0x3) == 0); ++ disp >>= 2; ++ ++ if (disp >= ~0xFFFFFULL || disp <= 0xFFFFFULL) { ++ vassert(fetch32(p + 0) == X_branch_6_5_21(0x4, 31, disp)); ++ vassert(fetch32(p + 4) == X_nop()); ++ vassert(fetch32(p + 8) == X_nop()); ++ vassert(fetch32(p + 12) == X_nop()); ++ vassert(fetch32(p + 16) == X_nop()); ++ vassert(fetch32(p + 20) == X_nop()); ++ } else { ++ vassert(is_load_imm(p, 2, (Addr)place_to_jump_to_EXPECTED, True)); ++ vassert(fetch32(p + 20) == X_ldst_6_5_5_16(0x3, 31, 2, 0)); ++ } ++ ++ p = do_load_imm(p, 2, (Addr)disp_cp_chain_me, True); ++ p = emit32(p, X_ldst_6_5_5_16(0x3, 1, 2, 0)); ++ ++ UInt len = p - (UChar*)place_to_unchain; ++ vassert(len == 24); /* stay sane */ ++ VexInvalRange vir = {(HWord)place_to_unchain, len}; ++ return vir; ++} ++ ++/* Patch the counter address into a profile inc point, as previously ++ created by the Min_ProfInc case for emit_MIPSInstr. */ ++VexInvalRange patchProfInc_SW64 ( VexEndness endness_host, ++ void* place_to_patch, ++ const ULong* location_of_counter) ++{ ++ vassert(endness_host == VexEndnessLE); ++ vassert(sizeof(ULong*) == 8); ++ ++ UChar* p = (UChar*)place_to_patch; ++ vassert(0 == (3 & (HWord)p)); ++ ++ /* What we're expecting to see is: ++ <20 bytes generated by do_load_imm> # ldi r2, 0x6555655565556555 ++ 0x8C220000 # ldl r1, 0(r2) ++ 0x48202101 # addl r1, 1, r1 ++ 0xAC220000 # stl r1, 0(r2) ++ */ ++ vassert(is_load_imm(p, 2, 0x6555655565556555ULL, True)); ++ vassert(fetch32(p + 20 + 0) == 0x8C220000); ++ vassert(fetch32(p + 20 + 4) == 0x48202101); ++ vassert(fetch32(p + 20 + 8) == 0xAC220000); ++ ++ p = do_load_imm(p, 2, (Addr)location_of_counter, True); ++ ++ VexInvalRange vir = {(HWord)p, 8}; ++ return vir; ++} ++/*---------------------------------------------------------------*/ ++/*--- end host_sw64_defs.c ---*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/priv/host_sw64_defs.h b/VEX/priv/host_sw64_defs.h +new file mode 100644 +index 000000000..b4b81818e +--- /dev/null ++++ b/VEX/priv/host_sw64_defs.h +@@ -0,0 +1,687 @@ ++ ++/*---------------------------------------------------------------*/ ++/*--- begin host_arm64_defs.h ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2013-2017 OpenWorks ++ info@open-works.net ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#ifndef __VEX_HOST_SW64_DEFS_H ++#define __VEX_HOST_SW64_DEFS_H ++ ++#include "libvex_basictypes.h" ++#include "libvex.h" // VexArch ++#include "host_generic_regs.h" // HReg ++#include "libvex_guest_sw64.h" // VexGuestSW64State ++#include "main_util.h" // offsetof ++ ++/* --------- Registers. --------- */ ++/* ++ r0 - r2 temporary, reserved for temporary use ++ r3 - r8 temporary, available to reg-alloc ++ r9 - r12 saved, available to reg-alloc ++ r13 saved, reserved for future use ++ r14 saved, reserved for saving host fpcr ++ r15 saved, reserved for VexGuestState pointer ++ r16 - r25 temporary, available to reg-alloc ++ r26 - r27 reserved for dirty call ++ r28 - r30 reserved belong to host ++*/ ++#define ST_IN static inline ++ ++ST_IN HReg hregSW64_R16 ( void ) { return mkHReg(False, HRcInt64, 16, 0); } ++ST_IN HReg hregSW64_R17 ( void ) { return mkHReg(False, HRcInt64, 17, 1); } ++ST_IN HReg hregSW64_R18 ( void ) { return mkHReg(False, HRcInt64, 18, 2); } ++ST_IN HReg hregSW64_R19 ( void ) { return mkHReg(False, HRcInt64, 19, 3); } ++ST_IN HReg hregSW64_R20 ( void ) { return mkHReg(False, HRcInt64, 20, 4); } ++ST_IN HReg hregSW64_R21 ( void ) { return mkHReg(False, HRcInt64, 21, 5); } ++ST_IN HReg hregSW64_R22 ( void ) { return mkHReg(False, HRcInt64, 22, 6); } ++ST_IN HReg hregSW64_R23 ( void ) { return mkHReg(False, HRcInt64, 23, 7); } ++ST_IN HReg hregSW64_R24 ( void ) { return mkHReg(False, HRcInt64, 24, 8); } ++ST_IN HReg hregSW64_R25 ( void ) { return mkHReg(False, HRcInt64, 25, 9); } ++ST_IN HReg hregSW64_R3 ( void ) { return mkHReg(False, HRcInt64, 3, 10); } ++ST_IN HReg hregSW64_R4 ( void ) { return mkHReg(False, HRcInt64, 4, 11); } ++ST_IN HReg hregSW64_R5 ( void ) { return mkHReg(False, HRcInt64, 5, 12); } ++ST_IN HReg hregSW64_R6 ( void ) { return mkHReg(False, HRcInt64, 6, 13); } ++ST_IN HReg hregSW64_R7 ( void ) { return mkHReg(False, HRcInt64, 7, 14); } ++ST_IN HReg hregSW64_R8 ( void ) { return mkHReg(False, HRcInt64, 8, 15); } ++ST_IN HReg hregSW64_R9 ( void ) { return mkHReg(False, HRcInt64, 9, 16); } ++ST_IN HReg hregSW64_R10 ( void ) { return mkHReg(False, HRcInt64, 10, 17); } ++ST_IN HReg hregSW64_R11 ( void ) { return mkHReg(False, HRcInt64, 11, 18); } ++ST_IN HReg hregSW64_R12 ( void ) { return mkHReg(False, HRcInt64, 12, 19); } ++ ++ST_IN HReg hregSW64_F2 ( void ) { return mkHReg(False, HRcFlt64, 2, 20); } ++ST_IN HReg hregSW64_F3 ( void ) { return mkHReg(False, HRcFlt64, 3, 21); } ++ST_IN HReg hregSW64_F4 ( void ) { return mkHReg(False, HRcFlt64, 4, 22); } ++ST_IN HReg hregSW64_F5 ( void ) { return mkHReg(False, HRcFlt64, 5, 23); } ++ST_IN HReg hregSW64_F6 ( void ) { return mkHReg(False, HRcFlt64, 6, 24); } ++ST_IN HReg hregSW64_F7 ( void ) { return mkHReg(False, HRcFlt64, 7, 25); } ++ST_IN HReg hregSW64_F8 ( void ) { return mkHReg(False, HRcFlt64, 8, 26); } ++ST_IN HReg hregSW64_F9 ( void ) { return mkHReg(False, HRcFlt64, 9, 27); } ++ ++ST_IN HReg hregSW64_R0 ( void ) { return mkHReg(False, HRcInt64, 0, 28); } ++ST_IN HReg hregSW64_R1 ( void ) { return mkHReg(False, HRcInt64, 1, 29); } ++ST_IN HReg hregSW64_R2 ( void ) { return mkHReg(False, HRcInt64, 2, 30); } ++ST_IN HReg hregSW64_R13 ( void ) { return mkHReg(False, HRcInt64, 13, 31); } ++ST_IN HReg hregSW64_R14 ( void ) { return mkHReg(False, HRcInt64, 14, 32); } ++ST_IN HReg hregSW64_R15 ( void ) { return mkHReg(False, HRcInt64, 15, 33); } ++ ++ST_IN HReg hregSW64_R26 ( void ) { return mkHReg(False, HRcInt64, 26, 34); } ++ST_IN HReg hregSW64_R27 ( void ) { return mkHReg(False, HRcInt64, 27, 35); } ++ST_IN HReg hregSW64_R28 ( void ) { return mkHReg(False, HRcInt64, 28, 36); } ++ST_IN HReg hregSW64_R29 ( void ) { return mkHReg(False, HRcInt64, 29, 37); } ++ST_IN HReg hregSW64_R30 ( void ) { return mkHReg(False, HRcInt64, 30, 38); } ++ST_IN HReg hregSW64_R31 ( void ) { return mkHReg(False, HRcInt64, 31, 39); } ++ ++ST_IN HReg hregSW64_F31 ( void ) { return mkHReg(False, HRcFlt64, 31, 40); } ++ ++#undef ST_IN ++ ++#define SW64GuestStateHreg() hregSW64_R15() ++#define SW64GuestStateRegno() iregNo(SW64GuestStateHreg()) ++#define SW64Zero() hregSW64_R31() ++#define SW64StackPointer() hregSW64_R30() ++#define SW64_R31_OFFSET() offsetof(VexGuestSW64State, guest_r31) ++#define SW64_F31_OFFSET() offsetof(VexGuestSW64State, guest_f31) ++#define SW64_LOCKFLAG_OFFSET() offsetof(VexGuestSW64State, guest_LOCKFLAG) ++ ++/* Number of registers used arg passing in function calls */ ++#define SW64_N_ARGREGS 6 /* a0 .. a5 */ ++ ++extern UInt ppHRegSW64 ( HReg ); ++ ++/* --------- Memory address expressions (amodes). --------- */ ++ ++/*! SW64 偏移寻址模式. ++ * SW64 6B 仅支持这种寻址模式,即 <欲访问的内存地址> = <基址寄存器的值> + <偏移量立即数> ++ * 其中基址寄存器可以是任何整形通用寄存器,偏移量立即数可以是 16 位有符号整数, ++ * 若寄存器为 $r31 则退化为绝对寻址,若偏移量为 0 则退化为间接寻址 ++ */ ++typedef struct { ++ HReg base; ++ Int disp; ++} SW64AModeRI; ++ ++extern SW64AModeRI *SW64AModeRI_IR(Int, HReg); ++extern void ppSW64AModeRI (SW64AModeRI *); ++ ++//--------------------------------------------INTRUCTION---------------------------------------// ++typedef enum { ++ SW64cc_EQ, /* BEQ SELEQ */ ++ SW64cc_NE, /* BNE SELNE */ ++ SW64cc_LT, /* BLT SELLT */ ++ SW64cc_LE, /* BLE SELLE */ ++ SW64cc_GT, /* BGT SELGT */ ++ SW64cc_GE, /* BGE SELGE */ ++ SW64cc_FEQ, /* FBEQ FSELEQ */ ++ SW64cc_FNE, /* FBNE FSELNE */ ++ SW64cc_FLT, /* FBLT FSELLT */ ++ SW64cc_FLE, /* FBLE FSELLE */ ++ SW64cc_FGT, /* FBGT FSELGT */ ++ SW64cc_FGE, /* FBGE FSELGE */ ++ SW64cc_AL, /* always (unconditional) */ ++} SW64CondCode; ++ ++ ++typedef struct { ++ SW64CondCode code; ++ HReg reg; ++} SW64Cond; ++ ++extern SW64Cond *SW64Cond_Cond(SW64CondCode code, HReg reg); ++extern SW64Cond *SW64Cond_ALWAYS(void); ++ ++extern void ppSW64Cond(const SW64Cond *); ++ ++ ++/* --------- Operand, which can be a reg or a u16/s16. --------- */ ++/* ("RI8" == "Register or byte immediate") */ ++typedef enum { ++ Sri8_Imm, ++ Sri8_Reg ++} SW64RI8Tag; ++ ++typedef struct { ++ SW64RI8Tag tag; ++ union { ++ struct { ++ UChar imm8; ++ } Imm; ++ struct { ++ HReg reg; ++ } Reg; ++ } Sri8; ++} SW64RI8; ++extern void ppSW64RI8(SW64RI8 *); ++ ++extern SW64RI8 *SW64RI8_Imm(UChar); ++extern SW64RI8 *SW64RI8_Reg(HReg); ++ ++/* ----- Each Classes Instruction tags ----- */ ++ ++typedef enum { ++ SW64in_LDBU, SW64in_LDHU, SW64in_LDW, SW64in_LDL ++} SW64LoadOp; ++extern const HChar *showSW64LoadOp(SW64LoadOp); ++ ++typedef enum { ++ SW64in_STB, SW64in_STH, SW64in_STW, SW64in_STL ++} SW64StoreOp; ++extern const HChar *showSW64StoreOp(SW64StoreOp); ++ ++typedef enum { ++ SW64in_FLDS, SW64in_FLDD ++} SW64FpLoadOp; ++extern const HChar *showSW64FpLoadOp(SW64FpLoadOp); ++ ++typedef enum { ++ SW64in_FSTS, SW64in_FSTD ++} SW64FpStoreOp; ++extern const HChar *showSW64FpStoreOp(SW64FpStoreOp); ++ ++ ++typedef enum { ++ SW64in_AND, SW64in_OR, SW64in_XOR, SW64in_BIC, SW64in_ORNOT ++} SW64LogicOp; ++extern const HChar *showSW64LogicOp(SW64LogicOp); ++ ++typedef enum { ++ SW64in_ADDW, SW64in_ADDL, SW64in_SUBW, SW64in_SUBL, ++ SW64in_S4ADDW, SW64in_S4ADDL, SW64in_S4SUBW, SW64in_S4SUBL, ++ SW64in_S8ADDW, SW64in_S8ADDL, SW64in_S8SUBW, SW64in_S8SUBL, ++ SW64in_MULW, SW64in_MULL, ++ SW64in_UMULH, SW64in_ZAP, ++ SW64in_ZAPNOT, SW64in_SEXTB, SW64in_SEXTH ++} SW64ArithOp; ++extern const HChar *showSW64ArithOp(SW64ArithOp); ++ ++typedef enum { ++ SW64in_DIVW, SW64in_UDIVW, SW64in_DIVL, SW64in_UDIVL, ++ SW64in_REMW, SW64in_UREMW, SW64in_REML, SW64in_UREML, ++} SW64IntDivOp; ++extern const HChar *showSW64IntDivOp(SW64IntDivOp); ++ ++typedef enum { ++ SW64in_CMPEQ, ++ SW64in_CMPLT, SW64in_CMPLE, ++ SW64in_CMPULT, SW64in_CMPULE ++} SW64CmpOp; ++extern const HChar *showSW64CmpOp(SW64CmpOp); ++ ++typedef enum{ ++ SW64in_POP, SW64in_CLZ, SW64in_CTZ ++} SW64UnOp; ++extern const HChar *showSW64UnaryOp(SW64UnOp); ++ ++typedef enum{ ++ SW64in_SLL, SW64in_SRL, SW64in_SRA ++} SW64ShftOp; ++extern const HChar *showSW64ShftOp(SW64ShftOp); ++ ++typedef enum{ ++ SW64in_SELEQ, SW64in_SELGE, SW64in_SELGT, SW64in_SELLE, ++ SW64in_SELLT, SW64in_SELNE, SW64in_SELLBC, SW64in_SELLBS ++} SW64CondSelOp; ++extern const HChar *showSW64CondSelOp(SW64CondSelOp); ++ ++typedef enum{ ++ SW64in_FADDS, SW64in_FADDD, SW64in_FSUBS, SW64in_FSUBD, ++ SW64in_FMULS, SW64in_FMULD, SW64in_FDIVS, SW64in_FDIVD ++} SW64FpArithOp; ++extern const HChar *showSW64FpArithOp(SW64FpArithOp); ++ ++typedef enum{ ++ SW64in_FIMOVS, SW64in_FIMOVD, SW64in_IFMOVS, SW64in_IFMOVD, ++ SW64in_CMOVDL, SW64in_CMOVDL_G, SW64in_CMOVDL_P, SW64in_CMOVDL_Z, SW64in_CMOVDL_N, ++ SW64in_CMOVDLU, SW64in_CMOVDLU_G, SW64in_CMOVDLU_P, SW64in_CMOVDLU_Z, SW64in_CMOVDLU_N, ++ SW64in_CMOVDWU, SW64in_CMOVDWU_G, SW64in_CMOVDWU_P, SW64in_CMOVDWU_Z, SW64in_CMOVDWU_N, ++ SW64in_CMOVDW, SW64in_CMOVDW_G, SW64in_CMOVDW_P, SW64in_CMOVDW_Z, SW64in_CMOVDW_N, ++ SW64in_CMOVLS, SW64in_CMOVWS, SW64in_CMOVLD, SW64in_CMOVWD, ++ SW64in_CMOVULS, SW64in_CMOVUWS, SW64in_CMOVULD, SW64in_CMOVUWD ++} SW64FpGpMoveOp; ++extern const HChar *showSW64FpGpMoveOp(SW64FpGpMoveOp); ++ ++typedef enum{ ++ SW64in_FCPYS, SW64in_FCPYSE, SW64in_FCPYSN ++} SW64FpCpyOp; ++extern const HChar *showSW64FpCpyOp(SW64FpCpyOp); ++ ++typedef enum{ ++ SW64in_MADDS, SW64in_MSUBS, SW64in_MADDD, SW64in_MSUBD ++} SW64FpQuaryOp; ++extern const HChar *showSW64FpQuaryOp(SW64FpQuaryOp); ++ ++typedef enum{ ++ SW64in_FSQRTS, SW64in_FSQRTD, ++ SW64in_FRECS, SW64in_FRECD, ++ SW64in_FRIS, SW64in_FRIS_G, SW64in_FRIS_P, SW64in_FRIS_Z, SW64in_FRIS_N, ++ SW64in_FRID, SW64in_FRID_G, SW64in_FRID_P, SW64in_FRID_Z, SW64in_FRID_N ++} SW64FpUnaryOp; ++extern const HChar *showSW64FpUnaryOp(SW64FpUnaryOp); ++ ++typedef enum{ ++ SW64in_CMPFEQ, SW64in_CMPFLE, SW64in_CMPFLT, SW64in_CMPFUN ++} SW64FpCmpOp; ++extern const HChar *showSW64FpCmpOp(SW64FpCmpOp); ++ ++typedef enum{ ++ SW64in_FSELEQ, SW64in_FSELNE, SW64in_FSELLT, SW64in_FSELLE, ++ SW64in_FSELGT, SW64in_FSELGE ++} SW64FpSelOp; ++extern const HChar *showSW64FpSelOp(SW64FpSelOp); ++ ++typedef enum{ ++ SW64in_FCVTSD, SW64in_FCVTDS, SW64in_FCVTDL, SW64in_FCVTLS, SW64in_FCVTLD, ++ SW64in_FCVTDL_G, SW64in_FCVTDL_P, SW64in_FCVTDL_Z, SW64in_FCVTDL_N ++} SW64FpCvtOp; ++extern const HChar *showSW64FpCvtOp(SW64FpCvtOp); ++ ++/* ----- Instruction tags ----- */ ++typedef enum { ++ ++ /*----load/store----*/ ++ SW64in_Load, ++ SW64in_Store, ++ SW64in_FpLoad, ++ SW64in_FpStore, ++ SW64in_LoadImm, //load imm ++ ++ /*----unop data process----*/ ++ SW64in_UnOperate, ++ ++ /*----integer data process----*/ ++ SW64in_Logic, ++ SW64in_Cmp, ++ SW64in_Shft, ++ SW64in_Arith, ++ SW64in_IntDiv, ++ ++ /*----float data process----*/ ++ SW64in_FpArith, ++ SW64in_FpGpMove, ++ SW64in_FpCpy, ++ SW64in_FpQuary, ++ SW64in_FpUnary, ++ SW64in_FpSel, ++ SW64in_FpCmp, ++ SW64in_FpCvt, ++ SW64in_RFPCR, ++ SW64in_WFPCR, ++ ++ /*----code link----*/ ++ SW64in_XDirect, ++ SW64in_XIndir, ++ SW64in_XAssisted, ++ ++ /*----cond select ----*/ ++ SW64in_CondSel, ++ ++ /*----other ----*/ ++ SW64in_EvCheck, ++ SW64in_ProfInc, ++ SW64in_Call, ++ SW64in_Mfence, ++ SW64in_CAS ++} SW64InstrTag; ++ ++ ++/*--------- Structure for instructions ----------*/ ++/* Destinations are on the LEFT (first operand) */ ++ ++typedef struct { ++ SW64InstrTag tag; ++ union{ ++ /* 64/32/16/8 bit stores */ ++ struct { ++ SW64LoadOp op; ++ HReg dst; ++ SW64AModeRI *addr; ++ } Load; ++ struct { ++ SW64StoreOp op; ++ HReg src; ++ SW64AModeRI *addr; ++ } Store; ++ struct { ++ SW64FpLoadOp op; ++ HReg dst; ++ SW64AModeRI *addr; ++ } FpLoad; ++ struct { ++ SW64FpStoreOp op; ++ HReg src; ++ SW64AModeRI *addr; ++ } FpStore; ++ ++ struct{ ++ UChar sz; /* 4|8 */ ++ HReg old; ++ HReg addr; ++ HReg expd; ++ HReg data; ++ } Cas; ++ ++ struct{ ++ HReg dst; //dst ++ ULong imm64; //imm ++ } LoadImm; ++ ++ struct{ ++ HReg dst; ++ HReg src; ++ SW64UnOp op; ++ } ++ UnOperate; ++ ++ /* Integer and/or/xor. Limitations: ++ - For and/or/xor, the immediate, if it exists, ++ is an unsigned 16. ++ */ ++ struct { ++ SW64LogicOp op; ++ HReg dst; ++ HReg srcL; ++ SW64RI8 *srcR; ++ } Logic; ++ ++ /* Integer Compare, CMPEQ, CMPLT, CMPLE, CMPULT, CMPULE ++ */ ++ struct{ ++ SW64CmpOp op; ++ HReg dst; ++ HReg srcL; ++ SW64RI8* srcR; ++ } Cmp; ++ ++ /* Integer shift, SLL, SRL, SRA ++ */ ++ struct{ ++ SW64ShftOp op; ++ HReg dst; ++ HReg srcL; ++ SW64RI8* srcR; ++ } Shft; ++ ++ /* Integer arith, ADD, SUB, MUL ++ */ ++ struct{ ++ SW64ArithOp op; ++ HReg dst; ++ HReg srcL; ++ SW64RI8* srcR; ++ } Arith; ++ ++ /* Integer division, DIV, REM ++ */ ++ struct{ ++ SW64IntDivOp op; ++ HReg dst; ++ HReg srcL; ++ HReg srcR; ++ } IntDiv; ++ ++ /* Float arith, ADD, SUB, MUL, DIV, SQRT ++ */ ++ struct{ ++ SW64FpArithOp op; ++ HReg dst; ++ HReg srcL; ++ HReg srcR; ++ } FpArith; ++ ++ struct{ ++ SW64FpCpyOp op; ++ HReg dst; ++ HReg src1; ++ HReg src2; ++ } FpCpy; ++ ++ struct{ ++ SW64FpQuaryOp op; ++ HReg dst; ++ HReg src1; ++ HReg src2; ++ HReg src3; ++ } FpQuary; ++ ++ struct{ ++ SW64FpUnaryOp op; ++ HReg dst; ++ HReg src; ++ } FpUnary; ++ ++ /* move/convert between GPR and FPR */ ++ struct { ++ SW64FpGpMoveOp op; ++ HReg dst; ++ HReg src; ++ } FpGpMove; ++ ++ /*float compare for branch and select*/ ++ struct { ++ SW64FpSelOp op; ++ HReg cond; ++ HReg dst; ++ HReg iftrue; ++ HReg iffalse; ++ } FpSel; ++ ++ /*float compare*/ ++ struct { ++ SW64FpCmpOp op; ++ HReg dst; ++ HReg srcL; ++ HReg srcR; ++ } FpCmp; ++ ++ /* convert from/to fpr to/from gpr */ ++ struct { ++ SW64FpCvtOp op; ++ HReg dst; ++ HReg src; ++ } FpCvt; ++ ++ /* read FPCR to GP register */ ++ struct{ ++ HReg dst; ++ } RFPCR; ++ ++ /* write GP register to FPCR*/ ++ struct{ ++ HReg src; ++ } WFPCR; ++ ++ /* Update the guest EIP value, then exit requesting to chain ++ to it. May be conditional. Urr, use of Addr32 implicitly ++ assumes that wordsize(guest) == wordsize(host). */ ++ struct { ++ Addr64 dstGA; /* next guest address */ ++ SW64AModeRI* amPC; /* amode in guest state for PC */ ++ SW64Cond* cond; /* condiction execution */ ++ Bool toFastEP; /* chain to the slow or fast point? */ ++ } XDirect; ++ /* Boring transfer to a guest address not known at JIT time. ++ Not chainable. May be conditional. */ ++ struct { ++ HReg dstGA; ++ SW64AModeRI* amPC; ++ SW64Cond* cond; ++ } XIndir; ++ /* Assisted transfer to a guest address, most general case. ++ Not chainable. May be conditional. */ ++ struct { ++ HReg dstGA; ++ SW64AModeRI* amPC; ++ SW64Cond* cond; ++ IRJumpKind jk; ++ } XAssisted; ++ ++ /* CSEL: dst = if cond then argL else argR. cond may be anything. */ ++ struct { ++ SW64CondSelOp op; ++ HReg dst; ++ HReg iftrue; ++ HReg iffalse; ++ HReg cond; ++ } CondSel; ++ ++ struct { ++ SW64AModeRI* amCounter; ++ SW64AModeRI* amFailAddr; ++ } EvCheck; ++ struct { ++ /* No fields. The address of the counter to inc is ++ installed later, post-translation, by patching it in, ++ as it is not known at translation time. */ ++ } ProfInc; ++ ++ /* Pseudo-insn. Call target (an absolute address), on given ++ condition (which could be Mcc_ALWAYS). argiregs indicates ++ which of $16 .. $21 (sw64) ++ carries argument values for this call, ++ using a bit mask (1<. ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "libvex_basictypes.h" ++#include "libvex_ir.h" ++#include "libvex.h" ++ ++#include "main_util.h" ++#include "main_globals.h" ++#include "host_generic_regs.h" ++#include "host_sw64_defs.h" ++ ++ ++/*---------------------------------------------------------*/ ++/*--- ISelEnv ---*/ ++/*---------------------------------------------------------*/ ++ ++/* This carries around: ++ ++ - A mapping from IRTemp to IRType, giving the type of any IRTemp we ++ might encounter. This is computed before insn selection starts, ++ and does not change. ++ ++ - A mapping from IRTemp to HReg. This tells the insn selector ++ which virtual register is associated with each IRTemp temporary. ++ This is computed before insn selection starts, and does not ++ change. We expect this mapping to map precisely the same set of ++ IRTemps as the type mapping does. ++ ++ |vregmap| holds the primary register for the IRTemp. ++ |vregmapHI| is only used for 128-bit integer-typed ++ IRTemps. It holds the identity of a second ++ 64-bit virtual HReg, which holds the high half ++ of the value. ++ ++ - The code array, that is, the insns selected so far. ++ ++ - A counter, for generating new virtual registers. ++ ++ - The host hardware capabilities word. This is set at the start ++ and does not change. ++ ++ - A Bool for indicating whether we may generate chain-me ++ instructions for control flow transfers, or whether we must use ++ XAssisted. ++ ++ - The maximum guest address of any guest insn in this block. ++ Actually, the address of the highest-addressed byte from any insn ++ in this block. Is set at the start and does not change. This is ++ used for detecting jumps which are definitely forward-edges from ++ this block, and therefore can be made (chained) to the fast entry ++ point of the destination, thereby avoiding the destination's ++ event check. ++ ++ - An IRExpr*, which may be NULL, holding the IR expression (an ++ IRRoundingMode-encoded value) to which the FPU's rounding mode ++ was most recently set. Setting to NULL is always safe. Used to ++ avoid redundant settings of the FPU's rounding mode, as ++ described in set_FPCR_rounding_mode below. ++ ++ Note, this is all (well, mostly) host-independent. ++*/ ++ ++typedef ++ struct { ++ /* Constant -- are set at the start and do not change. */ ++ IRTypeEnv* type_env; //A mapping from IRTemp to IRType ++ ++ HReg* vregmap; //A mapping from IRTemp to HReg ++ HReg* vregmapHI; //is only used for 128-bit integer-typed ++ Int n_vregmap; ++ ++ UInt hwcaps; ++ ++ Bool chainingAllowed; ++ Addr64 max_ga; ++ ++ /* These are modified as we go along. */ ++ HInstrArray* code; ++ Int vreg_ctr; ++ ++ IRExpr* previous_rm; ++ } ++ ISelEnv; ++ ++static SW64Cond *iselIntExpr_Cond_wrk(ISelEnv * env, IRExpr * e); ++static SW64Cond *iselIntExpr_Cond(ISelEnv * env, IRExpr * e); ++ ++static SW64AModeRI *iselWordExpr_AMode_wrk(ISelEnv * env, IRExpr * e); ++static SW64AModeRI *iselWordExpr_AMode(ISelEnv * env, IRExpr * e); ++ ++static HReg iselIntExpr_HReg(ISelEnv * env, IRExpr * e, HReg INVALID_HREG); ++static HReg iselIntExpr(ISelEnv * env, IRExpr * e); ++ ++static SW64RI8 *iselIntExpr_RI8_wrk(ISelEnv * env, IRExpr * e); ++static SW64RI8 *iselIntExpr_RI8(ISelEnv * env, IRExpr * e); ++ ++static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e ); ++static void iselInt128Expr ( HReg* rHi, HReg* rLo, ISelEnv* env, IRExpr* e ); ++ ++static HReg iselFltExpr_HReg(ISelEnv * env, IRExpr * e, HReg INVALID_HREG); ++static HReg iselFltExpr(ISelEnv * env, IRExpr * e); ++ ++static ++Bool doHelperCall ( /*OUT*/UInt* stackAdjustAfterCall, ++ /*OUT*/RetLoc* retloc, ++ ISelEnv* env, ++ IRExpr* guard, ++ IRCallee* cee, IRType retTy, IRExpr** args ); ++ ++ ++/* Create Integer HReg */ ++static HReg newVRegI( ISelEnv * env) ++{ ++ HReg reg = mkHReg(True /*virtual reg*/, HRcInt64, 0, env->vreg_ctr); ++ env->vreg_ctr++; ++ return reg; ++} ++/* Create Float HReg */ ++static HReg newVRegF( ISelEnv * env) ++{ ++ HReg reg = mkHReg(True /*virtual reg*/, HRcFlt64, 0, env->vreg_ctr); ++ env->vreg_ctr++; ++ return reg; ++} ++ ++static void addInstr(ISelEnv * env, SW64Instr * instr) ++{ ++ addHInstr(env->code, instr); ++ if (vex_traceflags & VEX_TRACE_VCODE) { ++ ppSW64Instr(instr); ++ vex_printf("\n"); ++ } ++} ++ ++static Bool const_equal_to(IRExpr *e, ULong v) ++{ ++ if (e->tag != Iex_Const) ++ return False; ++ ++ if (e->Iex.Const.con->tag == Ico_U64) ++ return e->Iex.Const.con->Ico.U64 == v; ++ ++ if (e->Iex.Const.con->tag == Ico_U32) ++ return e->Iex.Const.con->Ico.U32 == v; ++ ++ if (e->Iex.Const.con->tag == Ico_U16) ++ return e->Iex.Const.con->Ico.U16 == v; ++ ++ if (e->Iex.Const.con->tag == Ico_U8) ++ return e->Iex.Const.con->Ico.U8 == v; ++ ++ return False; ++} ++ ++static Bool const_equal_to_float(IRExpr *e, double v) ++{ ++ if (e->tag != Iex_Const) ++ return False; ++ ++ if (e->Iex.Const.con->tag == Ico_F64) ++ return e->Iex.Const.con->Ico.F64 == v; ++ ++ if (e->Iex.Const.con->tag == Ico_F32) ++ return e->Iex.Const.con->Ico.F32 == v; ++ ++ return False; ++} ++ ++static IRExpr *foldF64ArithToF32(IRExpr const *e) ++{ ++ IRExpr *ret = deepCopyIRExpr(e); ++ IROp *op; ++ ++ switch (e->tag) { ++ case Iex_Qop: op = &ret->Iex.Qop.details->op; break; ++ case Iex_Triop: op = &ret->Iex.Triop.details->op; break; ++ case Iex_Binop: op = &ret->Iex.Binop.op; break; ++ case Iex_Unop: op = &ret->Iex.Unop.op; break; ++ default: return NULL; ++ } ++ ++ switch (*op) { ++ case Iop_AddF64: *op = Iop_AddF32; break; ++ case Iop_SubF64: *op = Iop_SubF32; break; ++ case Iop_MulF64: *op = Iop_MulF32; break; ++ case Iop_DivF64: *op = Iop_DivF32; break; ++ case Iop_MSubF64: *op = Iop_MSubF32; break; ++ case Iop_MAddF64: *op = Iop_MAddF32; break; ++ case Iop_SqrtF64: *op = Iop_SqrtF32; break; ++ case Iop_I64StoF64: *op = Iop_I64StoF32; break; ++ case Iop_I64UtoF64: *op = Iop_I64UtoF32; break; ++ default: return NULL; ++ } ++ ++ return ret; ++} ++ ++static HReg lookupIRTemp(ISelEnv * env, IRTemp tmp) ++{ ++ vassert(tmp < env->n_vregmap); ++ return env->vregmap[tmp]; ++} ++static void ++lookupIRTempPair(HReg * vrHI, HReg * vrLO, ISelEnv * env, IRTemp tmp) ++{ ++ vassert(tmp < env->n_vregmap); ++ vassert(! hregIsInvalid(env->vregmapHI[tmp])); ++ *vrLO = env->vregmap[tmp]; ++ *vrHI = env->vregmapHI[tmp]; ++} ++ ++static void set_SW64_rounding_default(ISelEnv * env) ++{ ++ HReg fpcr = newVRegF(env); ++ ++ /* restore fpcr from r14 */ ++ addInstr(env, SW64Instr_FpGpMove(SW64in_IFMOVD, fpcr, hregSW64_R14())); ++ addInstr(env, SW64Instr_WFPCR(fpcr)); ++} ++ ++static void set_SW64_rounding_mode(ISelEnv * env, IRExpr * mode) ++{ ++ /* ++ rounding mode | SW64| IR ++ ------------------------ ++ to nearest | 10 | 00 ++ to zero | 00 | 11 ++ to +infinity | 11 | 10 ++ to -infinity | 01 | 01 ++ */ ++ HReg irrm = iselIntExpr(env, mode); ++ HReg swrm = newVRegI(env); ++ HReg newfpcr = newVRegI(env); ++ HReg fpcr = newVRegF(env); ++ ++ /* save fpcr to r14 */ ++ addInstr(env, SW64Instr_RFPCR(fpcr)); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_FIMOVD, hregSW64_R14(), fpcr)); ++ ++ /* swrm = 0b11 & ((0b110110) >> (irrm << 1)) */ ++ addInstr(env, SW64Instr_LoadImm(swrm, 0b110110)); ++ addInstr(env, SW64Instr_Shft(SW64in_SLL, irrm, irrm, SW64RI8_Imm(1))); ++ addInstr(env, SW64Instr_Shft(SW64in_SRL, swrm, swrm, SW64RI8_Reg(irrm))); ++ addInstr(env, SW64Instr_Logic(SW64in_AND, swrm, swrm, SW64RI8_Imm(0b11))); ++ /* newfpcr = swrm << 58 | swrm */ ++ addInstr(env, SW64Instr_Shft(SW64in_SLL, swrm, swrm, SW64RI8_Imm(58))); ++ addInstr(env, SW64Instr_LoadImm(newfpcr, 0x600fa00000000000)); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, newfpcr, newfpcr, SW64RI8_Reg(swrm))); ++ /* set fpcr */ ++ addInstr(env, SW64Instr_FpGpMove(SW64in_IFMOVD, fpcr, newfpcr)); ++ addInstr(env, SW64Instr_WFPCR(fpcr)); ++} ++ ++ ++static HReg iselIntExpr(ISelEnv * env, IRExpr * e) ++{ ++ HReg r = iselIntExpr_HReg(env, e, INVALID_HREG); ++ /* sanity checks ... */ ++ vassert(hregClass(r) == HRcInt64); ++ vassert(hregIsVirtual(r) || sameHReg(r, SW64Zero())); ++ return r; ++} ++ ++/*! ++ * IR 表达式指令选择. ++ * 将 IR 表达式翻译为 SW64 指令序列,并将 IR 表达式的计算结果返回值写入指定的 HReg. ++ * 警告:不要修改返回的 HReg 中的值,具体而言有两点原因: ++ * 1: 若 IR 表达式求值结果为 0,此函数可能会返回 $r31,修改此寄存器没有意义 ++ * 2: 此函数可能会返回 IRTemp 中的 HReg,按照 Valgrind IR 的定义,IRTemp 是只读的,修改 ++ * IRTemp 将导致无法预料的行为 ++ * 注意:如果 IR 表达式的类型大小小于 64 位 (例如 Ity_I8 Ity_I16 Ity_I32),寄存器中的高位部分 ++ * 是不确定的,不要依赖这些的值。但对于 Ity_I1 有例外,Ity_I1 的寄存器的高位部分应为全零。 ++ * ++ * @param[in] env 上下文环境 ++ * @param[in] e IR 表达式 ++ * @param[out] d 指定的 HReg,若为 INVALID_HREG,则新分配一个 ++ * @return 保存了该 IR 表达式计算结果的 HReg ++ */ ++static HReg iselIntExpr_HReg(ISelEnv *env, IRExpr *e, HReg d) ++{ ++ IRType ty = typeOfIRExpr(env->type_env, e); ++ vassert(ty == Ity_I8 || ty == Ity_I16 || ty == Ity_I32 || ty == Ity_I1 ++ || ty == Ity_F32 || ty == Ity_I64 || ty == Ity_I128); ++ ++ switch(e->tag) { ++ case Iex_RdTmp: { ++ HReg src = lookupIRTemp(env, e->Iex.RdTmp.tmp); ++ if (hregIsInvalid(d)) { ++ return src; ++ } else { ++ addInstr(env, SW64Instr_Logic(SW64in_AND, d, src, SW64RI8_Reg(src))); ++ return d; ++ } ++ } ++ ++ case Iex_Const: { ++ HReg dst; ++ ULong val = 0; ++ IRConst* con = e->Iex.Const.con; ++ switch (con->tag) { ++ case Ico_U64: val = con->Ico.U64; break; ++ case Ico_U32: val = con->Ico.U32; break; ++ case Ico_U16: val = con->Ico.U16; break; ++ case Ico_U8: val = con->Ico.U8; break; ++ case Ico_U1: val = con->Ico.U1 ? 1:0; break; ++ default: ppIRExpr(e); vpanic("iselIntExpr_R.Iex_Const(sw64)"); ++ } ++ ++ if (val == 0 && hregIsInvalid(d)) { ++ return SW64Zero(); ++ } ++ ++ dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ addInstr(env, SW64Instr_LoadImm(dst, val)); ++ return dst; ++ } ++ ++ case Iex_Load: ++ case Iex_Get: { ++ if (ty != Ity_I8 && ty != Ity_I16 && ty != Ity_I32 && ty != Ity_I64) ++ goto irreducible; ++ ++ if(e->tag == Iex_Load && e->Iex.Load.end != Iend_LE) ++ goto irreducible; ++ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ ++ SW64AModeRI *addr = (e->tag == Iex_Load) ++ ? iselWordExpr_AMode(env, e->Iex.Load.addr) ++ : SW64AModeRI_IR(e->Iex.Get.offset, ++ SW64GuestStateHreg()); ++ ++ SW64LoadOp op = (ty == Ity_I8) ? SW64in_LDBU : ++ (ty == Ity_I16) ? SW64in_LDHU : ++ (ty == Ity_I32) ? SW64in_LDW : ++ (ty == Ity_I64) ? SW64in_LDL : ++ (vassert(0), 0); ++ ++ addInstr(env, SW64Instr_Load(op, dst, addr)); ++ return dst; ++ } ++ ++ case Iex_Unop: { ++ IROp op = e->Iex.Unop.op; ++ IRExpr *arg = e->Iex.Unop.arg; ++ ++ switch(op) { ++ /* 1-bit widening */ ++ case Iop_1Uto8: ++ case Iop_1Uto32: ++ case Iop_1Uto64: { ++ /* higher bits of Ity_I1 are all zero, just return as-is */ ++ return iselIntExpr_HReg(env, arg, d); ++ } ++ case Iop_1Sto8: ++ case Iop_1Sto16: ++ case Iop_1Sto32: ++ case Iop_1Sto64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ /* Iop_1Sto64(x) = ((uint64_t)0 - x) */ ++ addInstr(env, SW64Instr_Arith(SW64in_SUBL, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ /* 8-bits widening */ ++ case Iop_8Uto16: ++ case Iop_8Uto32: ++ case Iop_8Uto64: { ++ if (arg->tag == Iex_Load && arg->Iex.Load.ty == Ity_I8) { ++ /* already zero-extend, no need to extend again */ ++ return iselIntExpr_HReg(env, arg, d); ++ } ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, src, SW64RI8_Imm(0x1))); ++ return dst; ++ } ++ case Iop_8Sto16: ++ case Iop_8Sto32: ++ case Iop_8Sto64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_SEXTB, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ /* 16-bits widening */ ++ case Iop_16Uto32: ++ case Iop_16Uto64: { ++ if (arg->tag == Iex_Load && arg->Iex.Load.ty == Ity_I16) { ++ /* already zero-extend, no need to extend again */ ++ return iselIntExpr_HReg(env, arg, d); ++ } ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, src, SW64RI8_Imm(0x3))); ++ return dst; ++ } ++ case Iop_16Sto32: ++ case Iop_16Sto64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_SEXTH, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ /* 32-bits widening */ ++ case Iop_32Uto64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, src, SW64RI8_Imm(0xf))); ++ return dst; ++ } ++ case Iop_32Sto64: { ++ if ((arg->tag == Iex_Binop && (arg->Iex.Binop.op == Iop_Add32 || ++ arg->Iex.Binop.op == Iop_Sub32 || ++ arg->Iex.Binop.op == Iop_Mul32)) || ++ (arg->tag == Iex_Load && arg->Iex.Load.ty == Ity_I32)) { ++ /* already signed-extend, no need to extend again */ ++ return iselIntExpr_HReg(env, arg, d); ++ } ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ addInstr(env, SW64Instr_Arith(SW64in_ADDW, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ /* narrowing */ ++ case Iop_64to8: ++ case Iop_64to16: ++ case Iop_64to32: { ++ /* higher bits of Ity_I32 Ity_I16 Ity_I8 may be undefined ++ so there is a No-op */ ++ return iselIntExpr_HReg(env, arg, d); ++ } ++ ++ case Iop_Not1: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ /* higher bits of Ity_I1 are all zero, so Iop_Not1(x) = x ^ 1 */ ++ addInstr(env, SW64Instr_Logic(SW64in_XOR, dst, src, SW64RI8_Imm(0x1))); ++ return dst; ++ } ++ ++ case Iop_Not8: ++ case Iop_Not16: ++ case Iop_Not32: ++ case Iop_Not64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ ++ addInstr(env, SW64Instr_Logic(SW64in_ORNOT, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ case Iop_ClzNat64: ++ case Iop_CtzNat64: ++ case Iop_PopCount64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ SW64UnOp unop = (op == Iop_ClzNat64) ? SW64in_CLZ : ++ (op == Iop_CtzNat64) ? SW64in_CTZ : ++ (op == Iop_PopCount64) ? SW64in_POP : ++ (vassert(0), 0); ++ ++ addInstr(env, SW64Instr_UnOperate(unop, dst, src)); ++ return dst; ++ } ++ ++ case Iop_Left32: ++ case Iop_Left64: { ++ /* Left64(src) = src | -src. Left32 can use the same ++ implementation since in that case we don't care what ++ the upper 32 bits become. */ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ ++ addInstr(env, SW64Instr_Arith(SW64in_SUBL, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, dst, SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ case Iop_CmpNEZ8: ++ case Iop_CmpNEZ16: ++ case Iop_CmpNEZ32: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ UInt mask = (op == Iop_CmpNEZ8) ? 0x1 : ++ (op == Iop_CmpNEZ16) ? 0x3 : ++ (op == Iop_CmpNEZ32) ? 0xf : ++ (vassert(0), 0); ++ /* clear higher bits, then compare */ ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, src, SW64RI8_Imm(mask))); ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ return dst; ++ } ++ ++ case Iop_CmpNEZ64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, arg); ++ /* Iop_CmpNEZ64(x) = x > 0 */ ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ return dst; ++ } ++ ++ case Iop_CmpwNEZ32: ++ { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, e->Iex.Unop.arg); ++ /* Iop_CmpwNEZ32(x) = (0 - (x > 0)), need to clear higher bits */ ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, src, SW64RI8_Imm(0xf))); ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ addInstr(env, SW64Instr_Arith(SW64in_SUBW, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ return dst; ++ } ++ case Iop_CmpwNEZ64: ++ { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, e->Iex.Unop.arg); ++ /* Iop_CmpwNEZ64(x) = (0 - (x > 0)) */ ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(src))); ++ addInstr(env, SW64Instr_Arith(SW64in_SUBL, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ return dst; ++ } ++ ++ case Iop_64HIto32: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg src = iselIntExpr(env, e->Iex.Unop.arg); ++ addInstr(env, SW64Instr_Shft(SW64in_SRA, dst, src, SW64RI8_Imm(32))); ++ return dst; ++ } ++ ++ case Iop_128HIto64: { ++ HReg rHi, rLo; ++ iselInt128Expr(&rHi, &rLo, env, arg); ++ ++ /* abandon rLo */ ++ if (hregIsInvalid(d)) { ++ return rHi; ++ } else { ++ addInstr(env, SW64Instr_Logic(SW64in_AND, d, rHi, SW64RI8_Reg(rHi))); ++ return d; ++ } ++ } ++ ++ case Iop_128to64: { ++ HReg rHi, rLo; ++ iselInt128Expr(&rHi, &rLo, env, arg); ++ ++ /* abandon rHi */ ++ if (hregIsInvalid(d)) { ++ return rLo; ++ } else { ++ addInstr(env, SW64Instr_Logic(SW64in_AND, d, rLo, SW64RI8_Reg(rLo))); ++ return d; ++ } ++ } ++ ++ case Iop_ReinterpF32asI32: ++ case Iop_ReinterpF64asI64: { ++ HReg dst = newVRegI(env); ++ HReg src = iselFltExpr(env, arg); ++ SW64FpGpMoveOp movop = (op == Iop_ReinterpF32asI32) ? SW64in_FIMOVS : ++ (op == Iop_ReinterpF64asI64) ? SW64in_FIMOVD : ++ (vassert(0), 0); ++ ++ addInstr(env, SW64Instr_FpGpMove(movop, dst, src)); ++ if (hregIsInvalid(d)) { ++ return dst; ++ } else { ++ addInstr(env, SW64Instr_Logic(SW64in_OR, d, dst, SW64RI8_Reg(dst))); ++ return d; ++ } ++ } ++ ++ default: ++ goto irreducible; ++ } /* switch(op) */ ++ ++ } /* case Iex_Unop: */ ++ ++ ++ case Iex_Binop: { ++ IROp op = e->Iex.Binop.op; ++ IRExpr *arg1 = e->Iex.Binop.arg1; ++ IRExpr *arg2 = e->Iex.Binop.arg2; ++ ++ switch (op) { ++ case Iop_Or1: ++ case Iop_Or8: ++ case Iop_Or16: ++ case Iop_Or32: ++ case Iop_Or64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_And1: ++ case Iop_And8: ++ case Iop_And16: ++ case Iop_And32: ++ case Iop_And64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR; ++ ++ if (arg2->tag == Iex_Const) { ++ IRConst *con = arg2->Iex.Const.con; ++ if (con->tag == Ico_U64) { ++ /* optmize for ++ And64(x, 0xFFFF:I64) ++ And64(x, 0xFFFFFFFF:I64) ++ transform to ++ Zapnot(x, 0x3:I64) ++ Zapnot(x, 0xf:I64) ++ */ ++ if (con->Ico.U64 == 0xFFFF) { ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, srcL, SW64RI8_Imm(0x3))); ++ return dst; ++ } ++ if (con->Ico.U64 == 0xFFFFFFFF) { ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, dst, srcL, SW64RI8_Imm(0xf))); ++ return dst; ++ } ++ /* optmize for ++ And64(x, 0xFFFFFFFFFFFFFF00) ++ transform to ++ AndNot64(x, 0xFF) ++ */ ++ if (con->Ico.U64 >= 0xFFFFFFFFFFFFFF00 && con->Ico.U64 <= 0xFFFFFFFFFFFFFFFF) { ++ addInstr(env, SW64Instr_Logic(SW64in_BIC, dst, srcL, SW64RI8_Imm(~con->Ico.U64))); ++ return dst; ++ } ++ } ++ } ++ ++ srcR = iselIntExpr_RI8(env, arg2); ++ addInstr(env, SW64Instr_Logic(SW64in_AND, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_Xor8: ++ case Iop_Xor16: ++ case Iop_Xor32: ++ case Iop_Xor64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ ++ addInstr(env, SW64Instr_Logic(SW64in_XOR, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_Add32: ++ case Iop_Add64: ++ case Iop_Sub32: ++ case Iop_Sub64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ ++ if (arg1->tag == Iex_Binop && arg1->Iex.Binop.op == Iop_Shl64) { ++ if (const_equal_to(arg1->Iex.Binop.arg2, 3)) { ++ /* S8ADDW S8ADDL S8SUBW S8SUBL */ ++ HReg srcL = iselIntExpr(env, arg1->Iex.Binop.arg1); ++ SW64ArithOp ariop = (op == Iop_Add32) ? SW64in_S8ADDW : ++ (op == Iop_Add64) ? SW64in_S8ADDL : ++ (op == Iop_Sub32) ? SW64in_S8SUBW : ++ (op == Iop_Sub64) ? SW64in_S8SUBL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_Arith(ariop, dst, srcL, srcR)); ++ return dst; ++ } ++ if (const_equal_to(arg1->Iex.Binop.arg2, 2)) { ++ /* S4ADDW S4ADDL S4SUBW S4SUBL */ ++ HReg srcL = iselIntExpr(env, arg1->Iex.Binop.arg1); ++ SW64ArithOp ariop = (op == Iop_Add32) ? SW64in_S4ADDW : ++ (op == Iop_Add64) ? SW64in_S4ADDL : ++ (op == Iop_Sub32) ? SW64in_S4SUBW : ++ (op == Iop_Sub64) ? SW64in_S4SUBL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_Arith(ariop, dst, srcL, srcR)); ++ return dst; ++ } ++ } ++ ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64ArithOp ariop = (op == Iop_Add32) ? SW64in_ADDW : ++ (op == Iop_Add64) ? SW64in_ADDL : ++ (op == Iop_Sub32) ? SW64in_SUBW : ++ (op == Iop_Sub64) ? SW64in_SUBL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_Arith(ariop, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_Mul32: ++ case Iop_Mul64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ SW64ArithOp ariop = (op == Iop_Mul32) ? SW64in_MULW : ++ (op == Iop_Mul64) ? SW64in_MULL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_Arith(ariop, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_DivS32: ++ case Iop_DivU32: ++ case Iop_DivS64: ++ case Iop_DivU64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ HReg srcR = iselIntExpr(env, arg2); ++ SW64IntDivOp divop = (op == Iop_DivS32) ? SW64in_DIVW : ++ (op == Iop_DivU32) ? SW64in_UDIVW : ++ (op == Iop_DivS64) ? SW64in_DIVL : ++ (op == Iop_DivU64) ? SW64in_UDIVL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_IntDiv(divop, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_DivModS32to32: ++ case Iop_DivModU32to32: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ HReg srcR = iselIntExpr(env, arg2); ++ HReg div = newVRegI(env); ++ HReg mod = newVRegI(env); ++ if (e->Iex.Binop.op == Iop_DivModS32to32) { ++ addInstr(env, SW64Instr_IntDiv(SW64in_DIVW, div, srcL, srcR)); ++ addInstr(env, SW64Instr_IntDiv(SW64in_REMW, mod, srcL, srcR)); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, div, div, SW64RI8_Imm(0xf))); ++ } else { ++ addInstr(env, SW64Instr_IntDiv(SW64in_UDIVW, div, srcL, srcR)); ++ addInstr(env, SW64Instr_IntDiv(SW64in_UREMW, mod, srcL, srcR)); ++ } ++ addInstr(env, SW64Instr_Shft(SW64in_SLL, mod, mod, SW64RI8_Imm(32))); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, div, SW64RI8_Reg(mod))); ++ return dst; ++ } ++ ++ case Iop_Shl32: ++ case Iop_Shl64: ++ case Iop_Shr32: ++ case Iop_Shr64: ++ case Iop_Sar32: ++ case Iop_Sar64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR; ++ SW64ShftOp shop = (op == Iop_Shl32) ? SW64in_SLL : ++ (op == Iop_Shl64) ? SW64in_SLL : ++ (op == Iop_Shr32) ? SW64in_SRL : ++ (op == Iop_Shr64) ? SW64in_SRL : ++ (op == Iop_Sar32) ? SW64in_SRA : ++ (op == Iop_Sar64) ? SW64in_SRA : ++ (vassert(0), 0); ++ ++ /* fast path for ++ t0 = Shl64(t1, And8(64to8(t2), 0x3f)) ++ is equal to ++ sll %vR1, %vR2, %vR0 ++ */ ++ if (arg2->tag == Iex_Binop && arg2->Iex.Binop.op == Iop_And8 && ++ const_equal_to(arg2->Iex.Binop.arg2, 0x3F)) { ++ srcR = iselIntExpr_RI8(env, arg2->Iex.Binop.arg1); ++ } else { ++ srcR = iselIntExpr_RI8(env, arg2); ++ } ++ ++ /* becare, high 32 bit may contains garbage bits, signed-extend ++ or zero-extend dependent on arithmetic shift or logical shift */ ++ /* HReg returnd by iselIntExpr() is modify here, but this is safe, ++ because higher bits is undefined and free to modify. */ ++ if (op == Iop_Sar32) { ++ addInstr(env, SW64Instr_Arith(SW64in_ADDW, srcL, srcL, SW64RI8_Reg(SW64Zero()))); ++ } else if (op == Iop_Shr32) { ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, srcL, srcL, SW64RI8_Imm(0xf))); ++ } ++ ++ addInstr(env, SW64Instr_Shft(shop, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_Max32U: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ HReg srcR = iselIntExpr(env, arg2); ++ /* HReg returnd by iselIntExpr() is modify here, but this is safe, ++ because higher bits is undefined and free to modify. */ ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, srcL, srcL, SW64RI8_Imm(0xf))); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, srcR, srcR, SW64RI8_Imm(0xf))); ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULE, dst, srcL, SW64RI8_Reg(srcR))); ++ addInstr(env, SW64Instr_CondSel(SW64in_SELNE, dst, srcR, srcL, dst)); ++ return dst; ++ } ++ ++ /* 32-bit compare */ ++ case Iop_CmpLT32S: ++ case Iop_CmpLT32U: ++ case Iop_CmpLE32S: ++ case Iop_CmpLE32U:{ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ HReg srcR = iselIntExpr(env, arg2); ++ SW64CmpOp cmp = (op == Iop_CmpLT64S) ? SW64in_CMPLT : ++ (op == Iop_CmpLT64U) ? SW64in_CMPULT : ++ (op == Iop_CmpLE64S) ? SW64in_CMPLE : ++ (op == Iop_CmpLE64U) ? SW64in_CMPULE : ++ (vassert(0), 0); ++ /* HReg returnd by iselIntExpr() is modify here, but this is safe, ++ because higher bits is undefined and free to modify. */ ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, srcL, srcL, SW64RI8_Imm(0xf))); ++ addInstr(env, SW64Instr_Arith(SW64in_ZAPNOT, srcR, srcR, SW64RI8_Imm(0xf))); ++ addInstr(env, SW64Instr_Cmp(cmp, dst, srcL, SW64RI8_Reg(srcR))); ++ return dst; ++ } ++ case Iop_CmpEQ32: ++ case Iop_CasCmpEQ32: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ /* signed-extend to 64-bits, then compare */ ++ addInstr(env, SW64Instr_Arith(SW64in_SUBW, dst, srcL, srcR)); ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPEQ, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ return dst; ++ } ++ case Iop_CmpNE32: ++ case Iop_CasCmpNE32: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ /* signed-extend to 64-bits, then compare */ ++ addInstr(env, SW64Instr_Arith(SW64in_SUBW, dst, srcL, srcR)); ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ return dst; ++ } ++ ++ /* 64-bit compare */ ++ case Iop_CmpEQ64: ++ case Iop_CmpLT64S: ++ case Iop_CmpLT64U: ++ case Iop_CmpLE64S: ++ case Iop_CmpLE64U: ++ case Iop_CasCmpEQ64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ SW64CmpOp cmp = (op == Iop_CmpEQ64) ? SW64in_CMPEQ : ++ (op == Iop_CmpLT64S) ? SW64in_CMPLT : ++ (op == Iop_CmpLT64U) ? SW64in_CMPULT : ++ (op == Iop_CmpLE64S) ? SW64in_CMPLE : ++ (op == Iop_CmpLE64U) ? SW64in_CMPULE : ++ (op == Iop_CasCmpEQ64) ? SW64in_CMPEQ : ++ (vassert(0), 0); ++ ++ addInstr(env, SW64Instr_Cmp(cmp, dst, srcL, srcR)); ++ return dst; ++ } ++ ++ case Iop_CmpNE64: ++ case Iop_CasCmpNE64: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg srcL = iselIntExpr(env, arg1); ++ SW64RI8 *srcR = iselIntExpr_RI8(env, arg2); ++ /* Iop_CmpNE64(x, y) = (x == y) ^ 1 */ ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPEQ, dst, srcL, srcR)); ++ addInstr(env, SW64Instr_Logic(SW64in_XOR, dst, dst, SW64RI8_Imm(1))); ++ return dst; ++ } ++ ++ case Iop_CmpFEQ64: ++ case Iop_CmpFNE64: ++ case Iop_CmpFLT64: ++ case Iop_CmpFLE64: ++ case Iop_CmpFGT64: ++ case Iop_CmpFGE64: ++ case Iop_CmpFUN64: { ++ HReg srcL, srcR; ++ SW64FpCmpOp fcmp; ++ Bool swap, rev; ++ ++ switch (op) { ++ case Iop_CmpFEQ64: fcmp = SW64in_CMPFEQ; swap = 0; rev = 0; break; ++ case Iop_CmpFNE64: fcmp = SW64in_CMPFEQ; swap = 0; rev = 1; break; ++ case Iop_CmpFLT64: fcmp = SW64in_CMPFLT; swap = 0; rev = 0; break; ++ case Iop_CmpFLE64: fcmp = SW64in_CMPFLE; swap = 0; rev = 0; break; ++ case Iop_CmpFGT64: fcmp = SW64in_CMPFLT; swap = 1; rev = 0; break; ++ case Iop_CmpFGE64: fcmp = SW64in_CMPFLE; swap = 1; rev = 0; break; ++ case Iop_CmpFUN64: fcmp = SW64in_CMPFUN; swap = 0; rev = 0; break; ++ default: vassert(0); ++ } ++ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg tmp = newVRegF(env); ++ ++ if (swap == 0) { ++ srcL = iselFltExpr(env, e->Iex.Binop.arg1); ++ srcR = iselFltExpr(env, e->Iex.Binop.arg2); ++ } else { ++ srcL = iselFltExpr(env, e->Iex.Binop.arg2); ++ srcR = iselFltExpr(env, e->Iex.Binop.arg1); ++ } ++ ++ /* compare, and move the result in floatint point register to integer register */ ++ addInstr(env, SW64Instr_FpCmp(fcmp, tmp, srcL, srcR)); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_FIMOVD, dst, tmp)); ++ /* { 0.0F, 2.0F } to { 0x0, 0x1 }*/ ++ if (rev) ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPEQ, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ else ++ addInstr(env, SW64Instr_Cmp(SW64in_CMPULT, dst, hregSW64_R31(), SW64RI8_Reg(dst))); ++ ++ return dst; ++ } ++ ++ case Iop_F64toI64S: ++ { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg tmpF = newVRegF(env); ++ HReg valF = iselFltExpr(env, e->Iex.Binop.arg2); ++ ++ if (const_equal_to(e->Iex.Binop.arg1, Irrm_NEAREST)) { ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDL_G, tmpF, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_PosINF)) { ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDL_P, tmpF, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_ZERO)) { ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDL_Z, tmpF, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_NegINF)) { ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDL_N, tmpF, valF)); ++ } else { ++ /* IR rounding mode is dynamic */ ++ set_SW64_rounding_mode(env, e->Iex.Binop.arg1); ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDL, tmpF, valF)); ++ set_SW64_rounding_default(env); ++ } ++ ++ addInstr(env, SW64Instr_FpGpMove(SW64in_FIMOVD, dst, tmpF)); ++ return dst; ++ } ++ ++ case Iop_F64toI64U: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg valF = iselFltExpr(env, e->Iex.Binop.arg2); ++ if (const_equal_to(e->Iex.Binop.arg1, Irrm_NEAREST)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDLU_G, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_PosINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDLU_P, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_ZERO)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDLU_Z, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_NegINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDLU_N, dst, valF)); ++ } else { ++ /* IR rounding mode is dynamic */ ++ set_SW64_rounding_mode(env, e->Iex.Binop.arg1); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDLU, dst, valF)); ++ set_SW64_rounding_default(env); ++ } ++ return dst; ++ } ++ ++ case Iop_F64toI32U: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg valF = iselFltExpr(env, e->Iex.Binop.arg2); ++ if (const_equal_to(e->Iex.Binop.arg1, Irrm_NEAREST)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDWU_G, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_PosINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDWU_P, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_ZERO)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDWU_Z, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_NegINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDWU_N, dst, valF)); ++ } else { ++ /* IR rounding mode is dynamic */ ++ set_SW64_rounding_mode(env, e->Iex.Binop.arg1); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDWU, dst, valF)); ++ set_SW64_rounding_default(env); ++ } ++ return dst; ++ } ++ ++ case Iop_F64toI32S: { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg valF = iselFltExpr(env, e->Iex.Binop.arg2); ++ if (const_equal_to(e->Iex.Binop.arg1, Irrm_NEAREST)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDW_G, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_PosINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDW_P, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_ZERO)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDW_Z, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_NegINF)) { ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDW_N, dst, valF)); ++ } else { ++ /* IR rounding mode is dynamic */ ++ set_SW64_rounding_mode(env, e->Iex.Binop.arg1); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_CMOVDW, dst, valF)); ++ set_SW64_rounding_default(env); ++ } ++ return dst; ++ } ++ ++ case Iop_32HLto64: ++ { ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg tHi = iselIntExpr(env, e->Iex.Binop.arg1); ++ HReg tLo = iselIntExpr(env, e->Iex.Binop.arg2); ++ HReg tLo_1 = newVRegI(env); ++ HReg tHi_1 = newVRegI(env); ++ HReg mask = newVRegI(env); ++ addInstr(env, SW64Instr_Shft(SW64in_SLL, tHi_1, tHi, SW64RI8_Imm(32))); ++ addInstr(env, SW64Instr_LoadImm(mask, 0xffffffff)); ++ addInstr(env, SW64Instr_Logic(SW64in_AND, tLo_1, tLo, SW64RI8_Reg(mask))); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, tHi_1, SW64RI8_Reg(tLo_1))); ++ return dst; ++ } ++ ++ default: ++ goto irreducible; ++ } /* switch(op) */ ++ ++ } /* case Iex_Binop */ ++ ++ case Iex_CCall: { ++ vassert(ty == e->Iex.CCall.retty); ++ ++ /* be very restrictive for now. Only 64-bit ints allowed for ++ args, and 64 bits for return type. Don't forget to change ++ the RetLoc if more types are allowed in future. */ ++ if (e->Iex.CCall.retty != Ity_I64) ++ goto irreducible; ++ ++ /* Marshal args, do the call, clear stack. */ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ UInt addToSp = 0; ++ RetLoc rloc = mk_RetLoc_INVALID(); ++ Bool ok = doHelperCall( &addToSp, &rloc, env, NULL/*guard*/, ++ e->Iex.CCall.cee, e->Iex.CCall.retty, ++ e->Iex.CCall.args ); ++ ++ if (ok) { ++ vassert(is_sane_RetLoc(rloc)); ++ vassert(rloc.pri == RLPri_Int); ++ vassert(addToSp == 0); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, hregSW64_R0(), SW64RI8_Imm(0x0) )); ++ } ++ ++ return dst; ++ } /* case Iex_CCall */ ++ ++ case Iex_ITE: { ++ vassert(ty == Ity_I64 || ty == Ity_I32); ++ vassert(typeOfIRExpr(env->type_env, e->Iex.ITE.cond) == Ity_I1); ++ ++ HReg dst = hregIsInvalid(d) ? newVRegI(env) : d; ++ HReg iftrue = iselIntExpr(env, e->Iex.ITE.iftrue); ++ HReg iffalse = iselIntExpr(env, e->Iex.ITE.iffalse); ++ ++ SW64Cond *cond = iselIntExpr_Cond_wrk(env, e->Iex.ITE.cond); ++ ++ SW64CondSelOp op = (cond->code == SW64cc_EQ) ? SW64in_SELEQ : ++ (cond->code == SW64cc_GE) ? SW64in_SELGE : ++ (cond->code == SW64cc_GT) ? SW64in_SELGT : ++ (cond->code == SW64cc_LE) ? SW64in_SELLE : ++ (cond->code == SW64cc_LT) ? SW64in_SELLT : ++ (cond->code == SW64cc_NE) ? SW64in_SELNE : ++ (vassert(0), 0); ++ ++ addInstr(env, SW64Instr_CondSel(op, dst, iftrue, iffalse, cond->reg)); ++ return dst; ++ } /* case Iex_ITE */ ++ ++ default: ++ goto irreducible; ++ } /* switch (e->tag) */ ++ ++/* We get here if no pattern matched. */ ++irreducible: ++ vex_printf("--------------->\n"); ++ ppIRExpr(e); ++ vpanic("iselIntExpr(sw64): cannot isel word expr"); ++} ++ ++ ++ ++/* DO NOT CALL THIS DIRECTLY ! */ ++static void iselInt128Expr_wrk ( HReg* rHi, HReg* rLo, ++ ISelEnv* env, IRExpr* e ) ++{ ++ vassert(e); ++ vassert(typeOfIRExpr(env->type_env,e) == Ity_I128); ++ ++ /* --------- TEMP --------- */ ++ if (e->tag == Iex_RdTmp) { ++ lookupIRTempPair(rHi, rLo, env, e->Iex.RdTmp.tmp); ++ return; ++ } ++ ++ // /* --------- CONST --------- */ ++ // if (e->tag == Iex_Const) { ++ // IRConst* c = e->Iex.Const.con; ++ // vassert(c->tag == Ico_U128); ++ // if (c->Ico.U128 == 0) { ++ // // The only case we need to handle (so far) ++ // HReg zero = newVRegI(env); ++ // addInstr(env, ARM64Instr_Imm64(zero, 0)); ++ // *rHi = *rLo = zero; ++ // return; ++ // } ++ // } ++ ++ /* --------- BINARY ops --------- */ ++ if (e->tag == Iex_Binop) { ++ switch (e->Iex.Binop.op) { ++ /* 64 x 64 -> 128 multiply */ ++ case Iop_MullU64: ++ { ++ HReg argL = iselIntExpr(env, e->Iex.Binop.arg1); ++ SW64RI8* argR = iselIntExpr_RI8(env, e->Iex.Binop.arg2); ++ HReg dstLo = newVRegI(env); ++ HReg dstHi = newVRegI(env); ++ addInstr(env, SW64Instr_Arith(SW64in_MULL, dstLo, argL, argR)); ++ addInstr(env, SW64Instr_Arith(SW64in_UMULH, dstHi, argL, argR)); ++ *rHi = dstHi; ++ *rLo = dstLo; ++ return; ++ } ++ ++ /* I64,I64 -> I128, of which LO is div and HI is mod */ ++ case Iop_DivModS64to64: ++ case Iop_DivModU64to64: { ++ HReg argL = iselIntExpr(env, e->Iex.Binop.arg1); ++ HReg argR = iselIntExpr(env, e->Iex.Binop.arg2); ++ HReg dstLo = newVRegI(env); ++ HReg dstHi = newVRegI(env); ++ if (e->Iex.Binop.op == Iop_DivModS64to64) { ++ addInstr(env, SW64Instr_IntDiv(SW64in_DIVL, dstLo, argL, argR)); ++ addInstr(env, SW64Instr_IntDiv(SW64in_REML, dstHi, argL, argR)); ++ } else { ++ addInstr(env, SW64Instr_IntDiv(SW64in_UDIVL, dstLo, argL, argR)); ++ addInstr(env, SW64Instr_IntDiv(SW64in_UREML, dstHi, argL, argR)); ++ } ++ *rHi = dstHi; ++ *rLo = dstLo; ++ return; ++ } ++ ++ /* 64HLto128(e1,e2) */ ++ case Iop_64HLto128: ++ *rHi = iselIntExpr(env, e->Iex.Binop.arg1); ++ *rLo = iselIntExpr(env, e->Iex.Binop.arg2); ++ return; ++ default: ++ break; ++ } ++ } ++ ++ ppIRExpr(e); ++ vpanic("iselInt128Expr(sw64)"); ++} ++ ++/* Compute a 128-bit value into a register pair, which is returned as ++ the first two parameters. As with iselIntExpr_R, these may be ++ either real or virtual regs; in any case they must not be changed ++ by subsequent code emitted by the caller. */ ++ ++static void iselInt128Expr ( HReg* rHi, HReg* rLo, ++ ISelEnv* env, IRExpr* e ) ++{ ++ iselInt128Expr_wrk(rHi, rLo, env, e); ++# if 0 ++ vex_printf("\n"); ppIRExpr(e); vex_printf("\n"); ++# endif ++ vassert(hregClass(*rHi) == HRcInt64); ++ vassert(hregIsVirtual(*rHi) || sameHReg(*rHi, SW64Zero())); ++ vassert(hregClass(*rLo) == HRcInt64); ++ vassert(hregIsVirtual(*rLo) || sameHReg(*rLo, SW64Zero())); ++} ++ ++ ++static HReg iselFltExpr(ISelEnv * env, IRExpr * e) ++{ ++ HReg r = iselFltExpr_HReg(env, e, INVALID_HREG); ++ vassert(hregClass(r) == HRcFlt64); ++ vassert(hregIsVirtual(r) || sameHReg(r, hregSW64_F31())); ++ return r; ++} ++ ++static HReg iselFltExpr_HReg(ISelEnv *env, IRExpr *e, HReg d) ++{ ++ IRType ty = typeOfIRExpr(env->type_env, e); ++ vassert(ty == Ity_F32 || ty == Ity_F64); ++ ++ if (!hregIsInvalid(d)) ++ vassert(hregClass(d) == HRcFlt64); ++ ++ switch (e->tag) { ++ case Iex_RdTmp: { ++ HReg src = lookupIRTemp(env, e->Iex.RdTmp.tmp); ++ if (hregIsInvalid(d)) { ++ return src; ++ } else { ++ addInstr(env, SW64Instr_FpCpy(SW64in_FCPYS, d, src, src)); ++ return d; ++ } ++ } ++ ++ case Iex_Const: { ++ /* loading 0:F64 */ ++ if (const_equal_to_float(e, 0) && hregIsInvalid(d)) { ++ return hregSW64_F31(); ++ } ++ ++ IRConst* con = e->Iex.Const.con; ++ SW64FpGpMoveOp movop; ++ union { Float f32; Double f64; ULong u64; } u; ++ vassert(sizeof(u) == 8); ++ if (con->tag == Ico_F64) { ++ u.f64 = con->Ico.F64; ++ movop = SW64in_IFMOVD; ++ } else if (con->tag == Ico_F32) { ++ u.f32 = con->Ico.F32; ++ movop = SW64in_IFMOVS; ++ } else { ++ vassert(0); ++ } ++ ++ HReg tmp = newVRegI(env); ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ addInstr(env, SW64Instr_LoadImm(tmp, u.u64)); ++ addInstr(env, SW64Instr_FpGpMove(movop, dst, tmp)); ++ return dst; ++ } ++ ++ case Iex_Load: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ SW64AModeRI *addr = iselWordExpr_AMode(env, e->Iex.Load.addr); ++ if (e->Iex.Load.ty == Ity_F64) ++ addInstr(env, SW64Instr_FpLoad(SW64in_FLDD, dst, addr)); ++ else ++ addInstr(env, SW64Instr_FpLoad(SW64in_FLDS, dst, addr)); ++ return dst; ++ } ++ ++ case Iex_Get: { ++ if (ty == Ity_F64) { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ SW64AModeRI *addr = SW64AModeRI_IR(e->Iex.Get.offset, SW64GuestStateHreg()); ++ addInstr(env, SW64Instr_FpLoad(SW64in_FLDD, dst, addr)); ++ return dst; ++ } ++ vassert(0); ++ } ++ ++ case Iex_Unop: { ++ IROp iop = e->Iex.Unop.op; ++ ++ switch (iop) { ++ case Iop_F32toF64: { ++ IRExpr *arg = e->Iex.Unop.arg; ++ if (arg->tag == Iex_Unop && arg->Iex.Unop.op == Iop_TruncF64asF32) { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselFltExpr_HReg(env, e->Iex.Unop.arg, INVALID_HREG); ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTSD, dst, src)); ++ return dst; ++ } else { ++ return iselFltExpr_HReg(env, e->Iex.Unop.arg, d); ++ } ++ } ++ ++ case Iop_I32StoF64: ++ case Iop_I32UtoF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselIntExpr(env, e->Iex.Unop.arg); ++ SW64FpGpMoveOp fpop = (iop == Iop_I32StoF64) ? SW64in_CMOVWD : ++ (iop == Iop_I32UtoF64) ? SW64in_CMOVUWD : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_FpGpMove(fpop, dst, src)); ++ return dst; ++ } ++ ++ case Iop_ReinterpI32asF32: ++ case Iop_ReinterpI64asF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ SW64FpGpMoveOp swop = (iop == Iop_ReinterpI32asF32) ? SW64in_IFMOVS : ++ (iop == Iop_ReinterpI64asF64) ? SW64in_IFMOVD : ++ (vassert(0), 0); ++ HReg src = iselIntExpr(env, e->Iex.Unop.arg); ++ addInstr(env, SW64Instr_FpGpMove(swop, dst, src)); ++ return dst; ++ } ++ ++ case Iop_NegF32: ++ case Iop_NegF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselFltExpr_HReg(env, e->Iex.Unop.arg, INVALID_HREG); ++ addInstr(env, SW64Instr_FpCpy(SW64in_FCPYSN, dst, src, src)); ++ return dst; ++ } ++ ++ case Iop_AbsF32: ++ case Iop_AbsF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselFltExpr_HReg(env, e->Iex.Unop.arg, INVALID_HREG); ++ addInstr(env, SW64Instr_FpCpy(SW64in_FCPYS, dst, hregSW64_F31(), src)); ++ return dst; ++ } ++ ++ case Iop_TruncF64asF32: { ++ HReg src = iselFltExpr_HReg(env, e->Iex.Unop.arg, d); ++ return src; ++ } ++ ++ default: ++ vassert(0); ++ } ++ } ++ ++ case Iex_Binop: { ++ IROp iop = e->Iex.Binop.op; ++ ++ switch (iop) { ++ case Iop_SqrtF32: ++ case Iop_SqrtF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ SW64FpUnaryOp swop = (iop == Iop_SqrtF32) ? SW64in_FSQRTS : ++ (iop == Iop_SqrtF64) ? SW64in_FSQRTD : ++ (vassert(0), 0); ++ HReg src = iselFltExpr_HReg(env, e->Iex.Binop.arg2, INVALID_HREG); ++ addInstr(env, SW64Instr_FpUnary(swop, dst, src)); ++ return dst; ++ } ++ ++ case Iop_F64toF32: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselFltExpr_HReg(env, e->Iex.Binop.arg2, INVALID_HREG); ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDS, dst, src)); ++ return dst; ++ } ++ ++ case Iop_I32StoF32: ++ case Iop_I32UtoF32: ++ case Iop_I64UtoF32: ++ case Iop_I64UtoF64: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselIntExpr(env, e->Iex.Binop.arg2); ++ SW64FpGpMoveOp fpop = (iop == Iop_I32StoF32) ? SW64in_CMOVWS : ++ (iop == Iop_I32UtoF32) ? SW64in_CMOVUWS : ++ (iop == Iop_I64UtoF32) ? SW64in_CMOVULS : ++ (iop == Iop_I64UtoF64) ? SW64in_CMOVULD : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_FpGpMove(fpop, dst, src)); ++ return dst; ++ } ++ ++ case Iop_I64StoF32: ++ case Iop_I64StoF64: { ++ HReg src; ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ ++ if (e->Iex.Binop.arg2->tag == Iex_Unop && ++ e->Iex.Binop.arg2->Iex.Unop.op == Iop_ReinterpF64asI64) { ++ /* optimize for x = Iop_I64StoF64(Iop_ReinterpF64asI64(x)) */ ++ SW64FpCvtOp fpop = (iop == Iop_I64StoF32) ? SW64in_FCVTLS : ++ (iop == Iop_I64StoF64) ? SW64in_FCVTLD : ++ (vassert(0), 0); ++ src = iselFltExpr(env, e->Iex.Binop.arg2->Iex.Unop.arg); ++ addInstr(env, SW64Instr_FpCvt(fpop, dst, src)); ++ return dst; ++ } ++ ++ src = iselIntExpr(env, e->Iex.Binop.arg2); ++ ++ if (VEX_SW64_FAMILY(env->hwcaps) == VEX_SW64_CORE4) { ++ SW64FpGpMoveOp fpop = (iop == Iop_I64StoF32) ? SW64in_CMOVLS : ++ (iop == Iop_I64StoF64) ? SW64in_CMOVLD : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_FpGpMove(fpop, dst, src)); ++ } else { ++ HReg tmp = newVRegF(env); ++ SW64FpCvtOp fpop = (iop == Iop_I64StoF32) ? SW64in_FCVTLS : ++ (iop == Iop_I64StoF64) ? SW64in_FCVTLD : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_IFMOVD, tmp, src)); ++ addInstr(env, SW64Instr_FpCvt(fpop, dst, tmp)); ++ } ++ return dst; ++ } ++ ++ case Iop_RoundF64toF32: { ++ IRExpr *fold = foldF64ArithToF32(e->Iex.Binop.arg2); ++ if (fold) { ++ HReg src = iselFltExpr_HReg(env, fold, d); ++ return src; ++ } else { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src = iselFltExpr(env, e->Iex.Binop.arg2); ++ addInstr(env, SW64Instr_FpCvt(SW64in_FCVTDS, dst, src)); ++ return dst; ++ } ++ } ++ ++ case Iop_RoundF64toInt: { ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg valF = iselFltExpr(env, e->Iex.Binop.arg2); ++ if (const_equal_to(e->Iex.Binop.arg1, Irrm_NEAREST)) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRID_G, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_PosINF)) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRID_P, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_ZERO)) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRID_Z, dst, valF)); ++ } else if (const_equal_to(e->Iex.Binop.arg1, Irrm_NegINF)) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRID_N, dst, valF)); ++ } else { ++ /* IR rounding mode is dynamic */ ++ set_SW64_rounding_mode(env, e->Iex.Binop.arg1); ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRID, dst, valF)); ++ set_SW64_rounding_default(env); ++ } ++ return dst; ++ } ++ ++ default: ++ vassert(0); ++ } ++ } ++ ++ case Iex_Triop: { ++ IROp iop = e->Iex.Triop.details->op; ++ SW64FpArithOp swop = (iop == Iop_AddF32) ? SW64in_FADDS : ++ (iop == Iop_AddF64) ? SW64in_FADDD : ++ (iop == Iop_SubF32) ? SW64in_FSUBS : ++ (iop == Iop_SubF64) ? SW64in_FSUBD : ++ (iop == Iop_MulF32) ? SW64in_FMULS : ++ (iop == Iop_MulF64) ? SW64in_FMULD : ++ (iop == Iop_DivF32) ? SW64in_FDIVS : ++ (iop == Iop_DivF64) ? SW64in_FDIVD : ++ (vassert(0), 0); ++ ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg argR = iselFltExpr_HReg(env, e->Iex.Triop.details->arg3, INVALID_HREG); ++ if (const_equal_to(e->Iex.Triop.details->arg1, Irrm_ZERO) && ++ const_equal_to_float(e->Iex.Triop.details->arg2, 1.0) && ++ VEX_SW64_FAMILY(env->hwcaps) == VEX_SW64_CORE4) { ++ if (iop == Iop_DivF64) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRECD, dst, argR)); ++ return dst; ++ } else if (iop == Iop_DivF32) { ++ addInstr(env, SW64Instr_FpUnary(SW64in_FRECS, dst, argR)); ++ return dst; ++ } ++ /* - else - fallthrough */ ++ } ++ ++ HReg argL = iselFltExpr_HReg(env, e->Iex.Triop.details->arg2, INVALID_HREG); ++ addInstr(env, SW64Instr_FpArith(swop, dst, argL, argR)); ++ return dst; ++ } ++ ++ case Iex_Qop: { ++ IROp iop = e->Iex.Qop.details->op; ++ SW64FpQuaryOp swop = (iop == Iop_MAddF32) ? SW64in_MADDS : ++ (iop == Iop_MAddF64) ? SW64in_MADDD : ++ (iop == Iop_MSubF32) ? SW64in_MSUBS : ++ (iop == Iop_MSubF64) ? SW64in_MSUBD : ++ (vassert(0), 0); ++ ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ HReg src1 = iselFltExpr_HReg(env, e->Iex.Qop.details->arg2, INVALID_HREG); ++ HReg src2 = iselFltExpr_HReg(env, e->Iex.Qop.details->arg3, INVALID_HREG); ++ HReg src3 = iselFltExpr_HReg(env, e->Iex.Qop.details->arg4, INVALID_HREG); ++ ++ addInstr(env, SW64Instr_FpQuary(swop, dst, src1, src2, src3)); ++ return dst; ++ } ++ ++ case Iex_ITE: { ++ vassert(typeOfIRExpr(env->type_env, e->Iex.ITE.cond) == Ity_I1); ++ HReg dst = hregIsInvalid(d) ? newVRegF(env) : d; ++ ++ /* Fast path for: ITE(CmpFxx64(x), 2, 0) ++ emit FCMPxx only, no need to emit FSELxx */ ++ if (const_equal_to_float(e->Iex.ITE.iftrue, 2) && ++ const_equal_to_float(e->Iex.ITE.iffalse, 0) && ++ e->Iex.ITE.cond->tag == Iex_Binop) { ++ IROp iop = e->Iex.ITE.cond->Iex.Binop.op; ++ SW64FpCmpOp swop = (iop == Iop_CmpFEQ64) ? SW64in_CMPFEQ : ++ (iop == Iop_CmpFLE64) ? SW64in_CMPFLE : ++ (iop == Iop_CmpFLT64) ? SW64in_CMPFLT : ++ (iop == Iop_CmpFUN64) ? SW64in_CMPFUN : ++ -1; ++ if (swop != -1) { ++ HReg argL = iselFltExpr(env, e->Iex.ITE.cond->Iex.Binop.arg1); ++ HReg argR = iselFltExpr(env, e->Iex.ITE.cond->Iex.Binop.arg2); ++ addInstr(env, SW64Instr_FpCmp(swop, dst, argL, argR)); ++ return dst; ++ } ++ } ++ ++ SW64Cond *cond = iselIntExpr_Cond(env, e->Iex.ITE.cond); ++ ++ HReg iftrue = iselFltExpr(env, e->Iex.ITE.iftrue); ++ HReg iffalse = iselFltExpr(env, e->Iex.ITE.iffalse); ++ ++ SW64FpSelOp swop; ++ switch (cond->code) { ++ case SW64cc_FEQ: swop = SW64in_FSELEQ; break; ++ case SW64cc_FNE: swop = SW64in_FSELNE; break; ++ case SW64cc_FLT: swop = SW64in_FSELLT; break; ++ case SW64cc_FLE: swop = SW64in_FSELLE; break; ++ case SW64cc_FGT: swop = SW64in_FSELGT; break; ++ case SW64cc_FGE: swop = SW64in_FSELGE; break; ++ default: { ++ /* slow path */ ++ HReg cond_I = iselIntExpr(env, e->Iex.ITE.cond); ++ HReg cond_F = newVRegF(env); ++ addInstr(env, SW64Instr_FpGpMove(SW64in_IFMOVD, cond_F, cond_I)); ++ addInstr(env, SW64Instr_FpSel(SW64in_FSELNE, dst, iftrue, iffalse, cond_F)); ++ return dst; ++ } ++ } ++ ++ addInstr(env, SW64Instr_FpSel(swop, dst, iftrue, iffalse, cond->reg)); ++ return dst; ++ } ++ ++ default: ++ vassert(0); ++ } ++} ++ ++static Bool uLong_fits_in_16_bits ( ULong u ) ++{ ++ Long i = u & 0xFFFFULL; ++ i <<= 48; ++ i >>= 48; ++ return toBool(u == (ULong) i); ++} ++ ++/*! ++ * IR 表达式指令选择,而该 IR 表达式用作内存读写的目标地址. ++ * 若表达式可以直接被 SW64 的寻址模式支持,则返回的 SW64AMode 表示了该寻址模式 ++ * 否则生成额外指令,回退为简单寄存器寻址 ++ * @param[in] env 上下文环境 ++ * @param[in] e IR 表达式,其类型应为 Ity_I64 ++ * @return SW64AMode 所表示的寻址模式 ++ */ ++static ++SW64AModeRI *iselWordExpr_AMode(ISelEnv * env, IRExpr * e) ++{ ++ SW64AModeRI *am = iselWordExpr_AMode_wrk(env, e); ++ return am; ++} ++ ++static SW64AModeRI *iselWordExpr_AMode_wrk(ISelEnv * env, IRExpr * e) ++{ ++ IRType ty = typeOfIRExpr(env->type_env, e); ++ vassert(ty == Ity_I64); ++ ++ /* Add64(expr,i), where i == sign-extend of (i & 0xFFFF) */ ++ if (e->tag == Iex_Binop && e->Iex.Binop.op == Iop_Add64 ++ && e->Iex.Binop.arg2->tag == Iex_Const ++ && e->Iex.Binop.arg2->Iex.Const.con->tag == Ico_U64 ++ && uLong_fits_in_16_bits(e->Iex.Binop.arg2->Iex.Const.con->Ico.U64)) ++ { ++ /* FIXME: 必然 overflow */ ++ return SW64AModeRI_IR((Int) e->Iex.Binop.arg2->Iex.Const.con->Ico.U64, ++ iselIntExpr(env, e->Iex.Binop.arg1)); ++ } ++ ++ /* Doesn't match anything in particular. Generate it into ++ a register and use that. */ ++ return SW64AModeRI_IR(0, iselIntExpr(env, e)); ++} ++ ++/*! ++ * IR 表达式指令选择,而该 IR 表达式用作支持立即数的操作数. ++ * 若该表示式是一个小于等于 255 的立即数,则返回的 SW64RI8 表示了该立即数, ++ * 否则 SW64RI8 中的结果是一个 HReg,该 HReg 保存了 IR 表达式的计算结果 ++ * @param[in] env 上下文环境 ++ * @param[in] e IR 表达式 ++ * @return 一个小于等于 255 的立即数,或一个保存了计算结果的 HReg ++ */ ++static SW64RI8 *iselIntExpr_RI8(ISelEnv * env, IRExpr * e) ++{ ++ SW64RI8 *ri = iselIntExpr_RI8_wrk(env, e); ++ /* sanity checks ... */ ++ switch (ri->tag) { ++ case Sri8_Imm: ++ return ri; ++ case Sri8_Reg: ++ vassert(hregClass(ri->Sri8.Reg.reg) == HRcInt64); ++ vassert(hregIsVirtual(ri->Sri8.Reg.reg)); ++ return ri; ++ default: ++ vpanic("iselIntExpr_RI8: unknown sw64 RI8 tag"); ++ } ++} ++ ++static SW64RI8 *iselIntExpr_RI8_wrk(ISelEnv * env,IRExpr * e) ++{ ++ IRType ty = typeOfIRExpr(env->type_env, e); ++ vassert(ty == Ity_I1 || ty == Ity_I8 || ty == Ity_I16 || ++ ty == Ity_I32 || ty == Ity_I64); ++ ++ /* fast path: imm less than 255 */ ++ if (e->tag == Iex_Const) { ++ ULong imm; ++ IRConst *con = e->Iex.Const.con; ++ switch (con->tag) { ++ case Ico_U64: imm = con->Ico.U64; break; ++ case Ico_U32: imm = con->Ico.U32; break; ++ case Ico_U16: imm = con->Ico.U16; break; ++ case Ico_U8: imm = con->Ico.U8; break; ++ case Ico_U1: imm = con->Ico.U1; break; ++ default: vpanic("iselIntExpr_RI8.Iex_Const(sw64)"); ++ } ++ /* just use imm instead of SW64Instr_LoadImm */ ++ if (imm <= 255) { ++ return SW64RI8_Imm(imm); ++ } ++ } ++ ++ return SW64RI8_Reg(iselIntExpr(env, e)); ++} ++ ++ ++/*! ++ * IR 表达式指令选择,而该 IR 表达式用作条件执行和条件选择的条件. ++ * 若表达式可以直接被 SW64 的条件类型支持,则返回的 SW64Cond 表示条件寄存器和条件类型 ++ * 否则生成额外指令,回退为 bne / selne 指令 ++ * @param[in] env 上下文环境 ++ * @param[in] e IR 表达式,其类型应为 Ity_I1 ++ * @param[out] code 条件执行的类型 ++ * @param[out] reg 条件执行的寄存器 ++ * return 条件执行的寄存器 ++*/ ++static SW64Cond* iselIntExpr_Cond(ISelEnv *env, IRExpr *e) ++{ ++ SW64Cond *cond; ++ ++ vassert(typeOfIRExpr(env->type_env, e) == Ity_I1); ++ ++ if (e->tag == Iex_Unop && e->Iex.Unop.op == Iop_Not1) { ++ /* fast path for: ++ if (Not1(CmpEQ(x, y))) ++ if (Not1(CmpNE(x, y))) ++ ... ++ is equal to: ++ if (CmpNE(x, y)) ++ if (CmpEQ(x, y)) ++ ... ++ */ ++ vassert(typeOfIRExpr(env->type_env, e->Iex.Unop.arg) == Ity_I1); ++ cond = iselIntExpr_Cond_wrk(env, e->Iex.Unop.arg); ++ switch (cond->code) { ++ case SW64cc_EQ: cond->code = SW64cc_NE; break; ++ case SW64cc_NE: cond->code = SW64cc_EQ; break; ++ case SW64cc_LT: cond->code = SW64cc_GE; break; ++ case SW64cc_GE: cond->code = SW64cc_LT; break; ++ case SW64cc_LE: cond->code = SW64cc_GT; break; ++ case SW64cc_GT: cond->code = SW64cc_LE; break; ++ case SW64cc_FEQ: cond->code = SW64cc_FNE; break; ++ case SW64cc_FNE: cond->code = SW64cc_FEQ; break; ++ case SW64cc_FLT: cond->code = SW64cc_FGE; break; ++ case SW64cc_FLE: cond->code = SW64cc_FGT; break; ++ case SW64cc_FGT: cond->code = SW64cc_FLE; break; ++ case SW64cc_FGE: cond->code = SW64cc_FLT; break; ++ default: vassert(0); ++ } ++ } else { ++ cond = iselIntExpr_Cond_wrk(env, e); ++ } ++ ++ vassert(hregIsVirtual(cond->reg) || sameHReg(hregSW64_R31(), cond->reg)); ++ switch (cond->code) { ++ case SW64cc_EQ: ++ case SW64cc_NE: ++ case SW64cc_LT: ++ case SW64cc_GE: ++ case SW64cc_LE: ++ case SW64cc_GT: ++ vassert(hregClass(cond->reg) == HRcInt64); break; ++ case SW64cc_FEQ: ++ case SW64cc_FNE: ++ case SW64cc_FLT: ++ case SW64cc_FLE: ++ case SW64cc_FGT: ++ case SW64cc_FGE: ++ vassert(hregClass(cond->reg) == HRcFlt64); break; ++ default: ++ vassert(0); ++ } ++ ++ return cond; ++} ++ ++static SW64Cond* iselIntExpr_Cond_wrk(ISelEnv *env, IRExpr *e) ++{ ++ if (e->tag == Iex_Binop) { ++ IROp op = e->Iex.Binop.op; ++ IRExpr *argL = e->Iex.Binop.arg1; ++ IRExpr *argR = e->Iex.Binop.arg2; ++ ++ if (const_equal_to(argR, 0)) { ++ switch (op) { ++ case Iop_CmpEQ64: return SW64Cond_Cond(SW64cc_EQ, iselIntExpr(env, argL)); ++ case Iop_CmpNE64: return SW64Cond_Cond(SW64cc_NE, iselIntExpr(env, argL)); ++ case Iop_CmpLT64S: return SW64Cond_Cond(SW64cc_LT, iselIntExpr(env, argL)); ++ case Iop_CmpLE64S: return SW64Cond_Cond(SW64cc_LE, iselIntExpr(env, argL)); ++ default: break; ++ } ++ } ++ ++ if (const_equal_to(argL, 0)) { ++ switch (op) { ++ case Iop_CmpEQ64: return SW64Cond_Cond(SW64cc_EQ, iselIntExpr(env, argR)); ++ case Iop_CmpNE64: return SW64Cond_Cond(SW64cc_NE, iselIntExpr(env, argR)); ++ case Iop_CmpLT64S: return SW64Cond_Cond(SW64cc_GT, iselIntExpr(env, argR)); ++ case Iop_CmpLE64S: return SW64Cond_Cond(SW64cc_GE, iselIntExpr(env, argR)); ++ default: ++ break; ++ } ++ } ++ ++ if (const_equal_to_float(argR, 0)) { ++ switch (op) { ++ case Iop_CmpFEQ64: return SW64Cond_Cond(SW64cc_FEQ, iselFltExpr(env, argL)); ++ case Iop_CmpFNE64: return SW64Cond_Cond(SW64cc_FNE, iselFltExpr(env, argL)); ++ case Iop_CmpFLT64: return SW64Cond_Cond(SW64cc_FLT, iselFltExpr(env, argL)); ++ case Iop_CmpFLE64: return SW64Cond_Cond(SW64cc_FLE, iselFltExpr(env, argL)); ++ case Iop_CmpFGT64: return SW64Cond_Cond(SW64cc_FGT, iselFltExpr(env, argL)); ++ case Iop_CmpFGE64: return SW64Cond_Cond(SW64cc_FGE, iselFltExpr(env, argL)); ++ default: ++ break; ++ } ++ } ++ } ++ ++ return SW64Cond_Cond(SW64cc_NE, iselIntExpr(env, e)); ++} ++ ++/*---------------------------------------------------------*/ ++/*--- ISEL: Function call helpers ---*/ ++/*---------------------------------------------------------*/ ++/* Used only in doHelperCall. See big comment in doHelperCall re ++ handling of register-parameter args. This function figures out ++ whether evaluation of an expression might require use of a fixed ++ register. If in doubt return True (safe but suboptimal). ++*/ ++static ++Bool mightRequireFixedRegs ( IRExpr* e ) ++{ ++ if (UNLIKELY(is_IRExpr_VECRET_or_GSPTR(e))) { ++ // These are always "safe" -- either a copy of SP in some ++ // arbitrary vreg, or a copy of x21, respectively. ++ return False; ++ } ++ /* Else it's a "normal" expression. */ ++ switch (e->tag) { ++ case Iex_RdTmp: case Iex_Const: case Iex_Get: ++ return False; ++ default: ++ return True; ++ } ++} ++ ++ ++/* Do a complete function call. |guard| is a Ity_Bit expression ++ indicating whether or not the call happens. If guard==NULL, the ++ call is unconditional. |retloc| is set to indicate where the ++ return value is after the call. The caller (of this fn) must ++ generate code to add |stackAdjustAfterCall| to the stack pointer ++ after the call is done. Returns True iff it managed to handle this ++ combination of arg/return types, else returns False. */ ++ ++static ++Bool doHelperCall ( /*OUT*/UInt* stackAdjustAfterCall, ++ /*OUT*/RetLoc* retloc, ++ ISelEnv* env, ++ IRExpr* guard, ++ IRCallee* cee, IRType retTy, IRExpr** args ) ++{ ++ HReg argregs[SW64_N_ARGREGS]; ++ HReg tmpregs[SW64_N_ARGREGS]; ++ Bool go_fast; ++ Int n_args, i, nextArgReg; ++ UInt argiregs; ++ Addr64 target; ++ SW64Cond* cond; ++ ++ vassert(SW64_N_ARGREGS == 6); ++ ++ /* Set default returns. We'll update them later if needed. */ ++ *stackAdjustAfterCall = 0; ++ *retloc = mk_RetLoc_INVALID(); ++ ++ /* These are used for cross-checking that IR-level constraints on ++ the use of IRExpr_VECRET() and IRExpr_GSPTR() are observed. */ ++ UInt nVECRETs = 0; ++ UInt nGSPTRs = 0; ++ ++ /* Marshal args for a call and do the call. ++ ++ This function only deals with a tiny set of possibilities, which ++ cover all helpers in practice. The restrictions are that only ++ arguments in registers are supported, hence only ++ SW64_N_ARGREGS x 64 integer bits in total can be passed. In ++ fact the only supported arg type is I64. ++ ++ The return type can be I{64,32} or V128. In the V128 case, it ++ is expected that |args| will contain the special node ++ IRExpr_VECRET(), in which case this routine generates code to ++ allocate space on the stack for the vector return value. Since ++ we are not passing any scalars on the stack, it is enough to ++ preallocate the return space before marshalling any arguments, ++ in this case. ++ ++ |args| may also contain IRExpr_GSPTR(), in which case the ++ value in x21 is passed as the corresponding argument. ++ ++ Generating code which is both efficient and correct when ++ parameters are to be passed in registers is difficult, for the ++ reasons elaborated in detail in comments attached to ++ doHelperCall() in priv/host-x86/isel.c. Here, we use a variant ++ of the method described in those comments. ++ ++ The problem is split into two cases: the fast scheme and the ++ slow scheme. In the fast scheme, arguments are computed ++ directly into the target (real) registers. This is only safe ++ when we can be sure that computation of each argument will not ++ trash any real registers set by computation of any other ++ argument. ++ ++ In the slow scheme, all args are first computed into vregs, and ++ once they are all done, they are moved to the relevant real ++ regs. This always gives correct code, but it also gives a bunch ++ of vreg-to-rreg moves which are usually redundant but are hard ++ for the register allocator to get rid of. ++ ++ To decide which scheme to use, all argument expressions are ++ first examined. If they are all so simple that it is clear they ++ will be evaluated without use of any fixed registers, use the ++ fast scheme, else use the slow scheme. Note also that only ++ unconditional calls may use the fast scheme, since having to ++ compute a condition expression could itself trash real ++ registers. ++ ++ Note this requires being able to examine an expression and ++ determine whether or not evaluation of it might use a fixed ++ register. That requires knowledge of how the rest of this insn ++ selector works. Currently just the following 3 are regarded as ++ safe -- hopefully they cover the majority of arguments in ++ practice: IRExpr_Tmp IRExpr_Const IRExpr_Get. ++ */ ++ ++ /* Note that the cee->regparms field is meaningless on ARM64 hosts ++ (since there is only one calling convention) and so we always ++ ignore it. */ ++ ++ n_args = 0; ++ for (i = 0; args[i]; i++) { ++ IRExpr* arg = args[i]; ++ if (UNLIKELY(arg->tag == Iex_VECRET)) ++ { ++ nVECRETs++; ++ } else if (UNLIKELY(arg->tag == Iex_GSPTR)) ++ { ++ nGSPTRs++; ++ } ++ n_args++; ++ } ++ ++ /* If this fails, the IR is ill-formed */ ++ vassert(nGSPTRs == 0 || nGSPTRs == 1); ++ ++ /* for sw: there is no vector*/ ++ HReg r_vecRetAddr = INVALID_HREG; ++ vassert(nVECRETs == 0); ++ ++ argregs[0] = hregSW64_R16(); ++ argregs[1] = hregSW64_R17(); ++ argregs[2] = hregSW64_R18(); ++ argregs[3] = hregSW64_R19(); ++ argregs[4] = hregSW64_R20(); ++ argregs[5] = hregSW64_R21(); ++ ++ tmpregs[0] = tmpregs[1] = tmpregs[2] = INVALID_HREG; ++ tmpregs[3] = tmpregs[4] = tmpregs[5] = INVALID_HREG; ++ ++ argiregs = 0; ++ ++ /* First decide which scheme (slow or fast) is to be used. First ++ assume the fast scheme, and select slow if any contraindications ++ (wow) appear. */ ++ ++ go_fast = True; ++ ++ if (guard) { ++ if (guard->tag == Iex_Const ++ && guard->Iex.Const.con->tag == Ico_U1 ++ && guard->Iex.Const.con->Ico.U1 == True) { ++ /* unconditional */ ++ } else { ++ /* Not manifestly unconditional -- be conservative. */ ++ go_fast = False; ++ } ++ } ++ ++ if (go_fast) { ++ for (i = 0; i < n_args; i++) { ++ if (mightRequireFixedRegs(args[i])) { ++ go_fast = False; ++ break; ++ } ++ } ++ } ++ ++ if (go_fast) { ++ if (retTy == Ity_V128 || retTy == Ity_V256) ++ go_fast = False; ++ } ++ ++ /* At this point the scheme to use has been established. Generate ++ code to get the arg values into the argument rregs. If we run ++ out of arg regs, give up. */ ++ ++ if (go_fast) { ++ ++ /* FAST SCHEME */ ++ nextArgReg = 0; ++ ++ for (i = 0; i < n_args; i++) { ++ IRExpr* arg = args[i]; ++ vassert(nextArgReg < SW64_N_ARGREGS); ++ ++ IRType aTy = Ity_INVALID; ++ if (LIKELY(!is_IRExpr_VECRET_or_GSPTR(arg))) ++ aTy = typeOfIRExpr(env->type_env, args[i]); ++ ++ if (aTy == Ity_I64) { ++ addInstr(env, SW64Instr_Logic(SW64in_OR, argregs[nextArgReg], ++ iselIntExpr(env, args[i]), ++ SW64RI8_Imm(0x0))); ++ argiregs |= (1 << (nextArgReg + 0)); ++ nextArgReg++; ++ } ++ else if (arg->tag == Iex_GSPTR) { ++ addInstr(env, SW64Instr_Logic(SW64in_OR, argregs[nextArgReg], ++ SW64GuestStateHreg(), ++ SW64RI8_Imm(0x0))); ++ nextArgReg++; ++ } ++ else if (arg->tag == Iex_VECRET) { ++ // because of the go_fast logic above, we can't get here, ++ // since vector return values makes us use the slow path ++ // instead. ++ vassert(0); ++ } ++ else ++ return False; /* unhandled arg type */ ++ } ++ ++ /* Fast scheme only applies for unconditional calls. Hence: */ ++ cond = SW64Cond_ALWAYS(); ++ } else { ++ ++ /* SLOW SCHEME; move via temporaries */ ++ nextArgReg = 0; ++ ++ for (i = 0; i < n_args; i++) { ++ IRExpr* arg = args[i]; ++ vassert(nextArgReg < SW64_N_ARGREGS); ++ ++ IRType aTy = Ity_INVALID; ++ if (LIKELY(!is_IRExpr_VECRET_or_GSPTR(arg))) ++ aTy = typeOfIRExpr(env->type_env, args[i]); ++ ++ if (aTy == Ity_I64) { ++ tmpregs[nextArgReg] = iselIntExpr(env, args[i]); ++ nextArgReg++; ++ } ++ else if (arg->tag == Iex_GSPTR) { ++ vassert(0); //ATC ++ tmpregs[nextArgReg] = SW64GuestStateHreg(); ++ nextArgReg++; ++ } ++ else if (arg->tag == Iex_VECRET) { ++ vassert(!hregIsInvalid(r_vecRetAddr)); ++ tmpregs[nextArgReg] = r_vecRetAddr; ++ nextArgReg++; ++ } ++ else ++ return False; /* unhandled arg type */ ++ } ++ ++ /* Now we can compute the condition. We can't do it earlier ++ because the argument computations could trash the condition ++ codes. Be a bit clever to handle the common case where the ++ guard is 1:Bit. */ ++ if (guard) { ++ if (guard->tag == Iex_Const ++ && guard->Iex.Const.con->tag == Ico_U1 ++ && guard->Iex.Const.con->Ico.U1 == True) { ++ cond = SW64Cond_ALWAYS(); ++ } else { ++ cond = iselIntExpr_Cond(env, guard); ++ } ++ } else { ++ cond = SW64Cond_ALWAYS(); ++ } ++ ++ /* Move the args to their final destinations. */ ++ for (i = 0; i < nextArgReg; i++) ++ { ++ vassert(!(hregIsInvalid(tmpregs[i]))); ++ /* None of these insns, including any spill code that might ++ be generated, may alter the condition codes. */ ++ argiregs |= (1 << (i + 0)); ++ addInstr( env, SW64Instr_Logic(SW64in_OR, argregs[i], tmpregs[i], SW64RI8_Imm(0x0) )); ++ } ++ ++ } ++ ++ /* Should be assured by checks above */ ++ vassert(nextArgReg <= SW64_N_ARGREGS); ++ ++ /* Do final checks, set the return values, and generate the call ++ instruction proper. */ ++ vassert(nGSPTRs == 0 || nGSPTRs == 1); ++ vassert(nVECRETs == ((retTy == Ity_V128 || retTy == Ity_V256) ? 1 : 0)); ++ vassert(*stackAdjustAfterCall == 0); ++ vassert(is_RetLoc_INVALID(*retloc)); ++ switch (retTy) { ++ case Ity_INVALID: ++ /* Function doesn't return a value. */ ++ *retloc = mk_RetLoc_simple(RLPri_None); ++ break; ++ case Ity_I64: case Ity_I32: case Ity_I16: case Ity_I8: ++ *retloc = mk_RetLoc_simple(RLPri_Int); ++ break; ++ case Ity_V128: ++ *retloc = mk_RetLoc_spRel(RLPri_V128SpRel, 0); ++ *stackAdjustAfterCall = 16; ++ break; ++ case Ity_V256: ++ vassert(0); // ATC ++ *retloc = mk_RetLoc_spRel(RLPri_V256SpRel, 0); ++ *stackAdjustAfterCall = 32; ++ break; ++ default: ++ /* IR can denote other possible return types, but we don't ++ handle those here. */ ++ vassert(0); ++ } ++ ++ /* Finally, generate the call itself. This needs the *retloc value ++ set in the switch above, which is why it's at the end. */ ++ ++ /* nextArgReg doles out argument registers. Since these are ++ assigned in the order a0 .. a5, its numeric value at this point, ++ which must be between 0 and 8 inclusive, is going to be equal to ++ the number of arg regs in use for the call. Hence bake that ++ number into the call (we'll need to know it when doing register ++ allocation, to know what regs the call reads.) */ ++ ++ target = (Addr)cee->addr; ++ addInstr(env, SW64Instr_Call(cond, target, argiregs, *retloc)); ++ ++ return True; /* success */ ++} ++ ++ ++/*---------------------------------------------------------*/ ++/*--- ISEL: Statements ---*/ ++/*---------------------------------------------------------*/ ++ ++static void iselStmt(ISelEnv * env, IRStmt * stmt) ++{ ++ if (vex_traceflags & VEX_TRACE_VCODE) /* debug logger */ ++ { ++ vex_printf("\n-- "); ++ ++ ppIRStmt(stmt); ++ vex_printf("\n"); ++ } ++ ++ switch (stmt->tag) ++ { ++ /* --------- STORE --------- */ ++ case Ist_Store: ++ case Ist_Put: ++ { ++ IRExpr *data; ++ SW64AModeRI *addr; ++ if (stmt->tag == Ist_Store) { ++ data = stmt->Ist.Store.data; ++ addr = iselWordExpr_AMode(env, stmt->Ist.Store.addr); ++ } else { ++ data = stmt->Ist.Put.data; ++ addr = SW64AModeRI_IR(stmt->Ist.Put.offset, ++ SW64GuestStateHreg()); ++ } ++ ++ IRType ty = typeOfIRExpr(env->type_env, data); ++ if (ty == Ity_I8 || ty == Ity_I16 || ty == Ity_I32 || ty == Ity_I64) { ++ HReg src = iselIntExpr(env, data); ++ SW64StoreOp op = (ty == Ity_I8) ? SW64in_STB : ++ (ty == Ity_I16) ? SW64in_STH : ++ (ty == Ity_I32) ? SW64in_STW : ++ (ty == Ity_I64) ? SW64in_STL : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_Store(op, src, addr)); ++ return; ++ } ++ ++ if (ty == Ity_F32 || ty == Ity_F64) { ++ HReg src = iselFltExpr(env, data); ++ SW64FpStoreOp op = (ty == Ity_F32) ? SW64in_FSTS : ++ (ty == Ity_F64) ? SW64in_FSTD : ++ (vassert(0), 0); ++ addInstr(env, SW64Instr_FpStore(op, src, addr)); ++ return; ++ } ++ ++ goto stmt_fail; ++ } ++ ++ /* --------- WrTmp --------- */ ++ case Ist_WrTmp: //assign statement ++ { ++ IRTemp tmp = stmt->Ist.WrTmp.tmp; ++ IRType ty = typeOfIRTemp(env->type_env, tmp); ++ HReg dst = lookupIRTemp(env, tmp); ++ ++ switch (ty) { ++ case Ity_I1: ++ case Ity_I8: ++ case Ity_I16: ++ case Ity_I32: ++ case Ity_I64: { ++ iselIntExpr_HReg(env, stmt->Ist.WrTmp.data, dst); ++ return; ++ } ++ ++ case Ity_F32: ++ case Ity_F64: { ++ iselFltExpr_HReg(env, stmt->Ist.WrTmp.data, dst); ++ return; ++ } ++ ++ default: ++ goto stmt_fail; ++ } ++ } ++ ++ /* --------- INSTR MARK --------- */ ++ /* Doesn't generate any executable code ... */ ++ case Ist_IMark: ++ return; ++ ++ /* --------- ABI HINT --------- */ ++ /* These have no meaning (denotation in the IR) and so we ignore ++ them ... if any actually made it this far. */ ++ case Ist_AbiHint: ++ return; ++ ++ /* --------- NO-OP --------- */ ++ /* Fairly self-explanatory, wouldn't you say? */ ++ case Ist_NoOp: ++ return; ++ ++ /* --------- EXIT --------- */ ++ case Ist_Exit: //cond branch ++ { ++ IRConst* dst = stmt->Ist.Exit.dst; //jmp address ++ if(dst->tag != Ico_U64) ++ vpanic("iselStmt(sw64): Ist_Exit: dst is not a 64-bit value"); ++ SW64AModeRI* amPC = SW64AModeRI_IR(stmt->Ist.Exit.offsIP, ++ SW64GuestStateHreg()); ++ ++ SW64Cond* cond = iselIntExpr_Cond(env, stmt->Ist.Exit.guard); ++ ++ /* Case: boring transfer to known address */ ++ if (stmt->Ist.Exit.jk == Ijk_Boring) ++ { ++ if (env->chainingAllowed) ++ { ++ /* .. almost always true .. */ ++ /* Skip the event check at the dst if this is a forwards edge. */ ++ Bool toFastEP = ((Addr64)dst->Ico.U64) > env->max_ga; ++ addInstr(env, SW64Instr_XDirect(dst->Ico.U64, amPC, ++ cond, toFastEP)); ++ } ++ else ++ { ++ /* .. very occasionally .. */ ++ /* We can't use chaining, so ask for an assisted transfer, ++ as that's the only alternative that is allowable. */ ++ HReg r = iselIntExpr(env, IRExpr_Const(dst)); ++ addInstr(env, SW64Instr_XAssisted(r, amPC, cond, Ijk_Boring)); ++ } ++ return; ++ } ++ ++ /* Case: assisted transfer to arbitrary address */ ++ switch (stmt->Ist.Exit.jk) ++ { ++ /* Keep this list in sync with that for iselNext below */ ++ case Ijk_ClientReq: ++ case Ijk_NoDecode: ++ case Ijk_NoRedir: ++ case Ijk_Sys_syscall: ++ case Ijk_InvalICache: ++ case Ijk_FlushDCache: ++ case Ijk_SigTRAP: ++ case Ijk_SigBUS: ++ case Ijk_Yield: ++ { ++ HReg r = iselIntExpr(env, IRExpr_Const(dst)); ++ addInstr(env, SW64Instr_XAssisted(r, amPC, cond, ++ stmt->Ist.Exit.jk)); ++ return; ++ } ++ default: ++ break; ++ } ++ ++ /* Do we ever expect to see any other kind? */ ++ goto stmt_fail; ++ } ++ ++ /* --------- Call to DIRTY helper --------- */ ++ /* call complex ("dirty") helper function */ ++ case Ist_Dirty: ++ { ++ IRDirty* d = stmt->Ist.Dirty.details; ++ ++ /* Figure out the return type, if any. */ ++ IRType retty = Ity_INVALID; ++ if (d->tmp != IRTemp_INVALID) ++ retty = typeOfIRTemp(env->type_env, d->tmp); ++ ++ Bool retty_ok = False; ++ switch (retty) ++ { ++ case Ity_INVALID: /* function doesn't return anything */ ++ case Ity_I64: case Ity_I32: case Ity_I16: case Ity_I8: ++ case Ity_V128: ++ retty_ok = True; ++ break; ++ default: ++ break; ++ } ++ if (!retty_ok) ++ break; /* will go to stmt_fail: */ ++ ++ /* Marshal args, do the call, and set the return value to 0x555..555 ++ if this is a conditional call that returns a value and the ++ call is skipped. */ ++ UInt addToSp = 0; ++ RetLoc rloc = mk_RetLoc_INVALID(); ++ doHelperCall( &addToSp, &rloc, env, d->guard, d->cee, retty, d->args ); ++ vassert(is_sane_RetLoc(rloc)); ++ ++ /* Now figure out what to do with the returned value, if any. */ ++ switch (retty) ++ { ++ case Ity_INVALID: ++ { ++ /* No return value. Nothing to do. */ ++ vassert(d->tmp == IRTemp_INVALID); ++ vassert(rloc.pri == RLPri_None); ++ vassert(addToSp == 0); ++ return; ++ } ++ case Ity_I64: case Ity_I32: case Ity_I16: case Ity_I8: ++ { ++ vassert(rloc.pri == RLPri_Int); ++ vassert(addToSp == 0); ++ /* The returned value is in v0. Park it in the register ++ associated with tmp. */ ++ HReg dst = lookupIRTemp(env, d->tmp); ++ addInstr(env, SW64Instr_Logic(SW64in_OR, dst, hregSW64_R0(), SW64RI8_Imm(0x0) )); ++ return; ++ } ++ default: ++ /*NOTREACHED*/ ++ vassert(0); ++ } ++ break; ++ } ++ ++ /* --------- MEM FENCE --------- */ ++ case Ist_MBE: ++ { ++ switch (stmt->Ist.MBE.event) ++ { ++ case Imbe_Fence: ++ addInstr(env, SW64Instr_MFence()); ++ return; ++ case Imbe_CancelReservation: ++ goto stmt_fail; ++ default: ++ /*NOTREACHED*/ ++ vassert(0); ++ } ++ } ++ ++ /* --------- LL/SC --------- */ ++ case Ist_LLSC: ++ { ++ /* 不要使用宿主机上的 LL/SC,不起作用 ++ * SW64 Core 6B 的 LL 和 SC 指令对之间不能包含任何访存指令,否则 SC 必然失败 ++ * 在 valgrind 中,几乎不可能保证两条 IRExpr 之间不包含访存指令,因为 LL 指令的结果会写入客户机的寄存器状态 ++ * 而这一步写入必然需要访存 ++ */ ++ goto stmt_fail; ++ } ++ ++ /* --------- CAS ------------ */ ++ case Ist_CAS: ++ { ++ if (stmt->Ist.CAS.details->oldHi == IRTemp_INVALID) ++ { ++ IRCAS *cas = stmt->Ist.CAS.details; ++ HReg old = lookupIRTemp(env, cas->oldLo); ++ HReg addr = iselIntExpr(env, cas->addr); ++ HReg expd = iselIntExpr(env, cas->expdLo); ++ HReg data = iselIntExpr(env, cas->dataLo); ++ HReg res = newVRegI(env); ++ ++ IRType ty = typeOfIRTemp(env->type_env, cas->oldLo); ++ if (ty == Ity_I64) ++ { ++ addInstr(env, SW64Instr_Cas(8, res, old, addr, expd, data)); ++ } ++ else if (ty == Ity_I32) ++ { ++ addInstr(env, SW64Instr_Cas(4, res, old, addr, expd, data)); ++ } ++ return; ++ } ++ goto stmt_fail; ++ } ++ ++ default: ++ break; ++ } ++ ++ stmt_fail: ++ vex_printf("stmt_fail tag: 0x%x\n", stmt->tag); ++ ppIRStmt(stmt); ++ vpanic("iselStmt:\n"); ++} ++ ++ ++/*---------------------------------------------------------*/ ++/*--- ISEL: Basic block terminators (Nexts) ---*/ ++/*---------------------------------------------------------*/ ++ ++static void iselNext ( ISelEnv* env, ++ IRExpr* next, IRJumpKind jk, Int offsIP ) ++{ ++ if (vex_traceflags & VEX_TRACE_VCODE) { ++ vex_printf( "\n-- PUT(%d) = ", offsIP); ++ ppIRExpr( next ); ++ vex_printf( "; exit-"); ++ ppIRJumpKind(jk); ++ vex_printf( "\n"); ++ } ++ ++ /* Case: boring transfer to known address */ ++ if (next->tag == Iex_Const) { ++ IRConst* cdst = next->Iex.Const.con; ++ vassert(cdst->tag == Ico_U64); ++ if (jk == Ijk_Boring || jk == Ijk_Call) { ++ /* Boring transfer to known address */ ++ SW64AModeRI* amPC = SW64AModeRI_IR(offsIP, SW64GuestStateHreg()); ++ if (env->chainingAllowed) { ++ /* .. almost always true .. */ ++ /* Skip the event check at the dst if this is a forwards edge. */ ++ Bool toFastEP = ((Addr64)cdst->Ico.U64) > ((Addr64)env->max_ga); ++// if (1) vex_printf("[%s] %s\n", __func__, toFastEP ? "X" : "."); ++ addInstr(env, SW64Instr_XDirect( ++ (Addr64)cdst->Ico.U64, ++ amPC, SW64Cond_ALWAYS(), toFastEP)); ++ } else { ++ /* .. very occasionally .. */ ++ /* We can't use chaining, so ask for an assisted transfer, ++ as that's the only alternative that is allowable. */ ++ HReg r = iselIntExpr(env, next); ++ addInstr(env, SW64Instr_XAssisted(r, amPC, SW64Cond_ALWAYS(), ++ Ijk_Boring)); ++ } ++ return; ++ } ++ } ++ ++ /* Case: call/return (==boring) transfer to any address */ ++ switch (jk) ++ { ++ case Ijk_Boring: case Ijk_Ret: case Ijk_Call: ++ { ++ HReg r = iselIntExpr(env, next); ++ SW64AModeRI* amPC = SW64AModeRI_IR(offsIP, SW64GuestStateHreg()); ++ if (env->chainingAllowed) ++ { ++ addInstr(env, SW64Instr_XIndir(r, amPC, SW64Cond_ALWAYS())); ++ } ++ else ++ { ++ addInstr(env, SW64Instr_XAssisted(r, amPC, SW64Cond_ALWAYS(), Ijk_Boring)); ++ } ++ return; ++ } ++ default: ++ break; ++ } ++ ++ /* Case: assisted transfer to arbitrary address */ ++ switch (jk) { ++ /* Keep this list in sync with that for Ist_Exit above */ ++ case Ijk_ClientReq: ++ case Ijk_EmFail: ++ case Ijk_EmWarn: ++ case Ijk_NoDecode: ++ case Ijk_NoRedir: ++ case Ijk_SigBUS: ++ case Ijk_SigILL: ++ case Ijk_SigTRAP: ++ case Ijk_SigFPE_IntDiv: ++ case Ijk_SigFPE_IntOvf: ++ case Ijk_Sys_syscall: ++ case Ijk_InvalICache: ++ { ++ HReg r = iselIntExpr(env, next); ++ SW64AModeRI* amPC = SW64AModeRI_IR(offsIP, SW64GuestStateHreg()); ++ addInstr(env, SW64Instr_XAssisted(r, amPC, SW64Cond_ALWAYS(), jk)); ++ return; ++ } ++ default: ++ break; ++ } ++ ++ vex_printf("\n-- PUT(%d) = ", offsIP); ++ ppIRExpr(next ); ++ vex_printf("; exit-"); ++ ppIRJumpKind(jk); ++ vex_printf("\n"); ++ vassert(0); /* are we expecting any other kind? */ ++} ++ ++ ++/*---------------------------------------------------------*/ ++/*--- Insn selector top-level ---*/ ++/*---------------------------------------------------------*/ ++ ++/* Translate an entire SB to sw64 code. */ ++ ++HInstrArray* iselSB_SW64 ( const IRSB* bb, ++ VexArch arch_host, ++ const VexArchInfo* archinfo_host, ++ const VexAbiInfo* vbi/*UNUSED*/, ++ Int offs_Host_EvC_Counter, ++ Int offs_Host_EvC_FailAddr, ++ Bool chainingAllowed, ++ Bool addProfInc, ++ Addr max_ga ) ++{ ++ /* sanity ... */ ++ vassert(arch_host == VexArchSW64); ++ /* Check that the host's endianness is as expected. */ ++ vassert(archinfo_host->endness == VexEndnessLE); ++ /* guard against unexpected space regressions */ ++ vassert(sizeof(SW64Instr) <= 64); ++ ++ ISelEnv* env; ++ //setup env ++ { ++ env = LibVEX_Alloc_inline(sizeof(ISelEnv)); ++ env->vreg_ctr = 0; ++ env->code = newHInstrArray(); ++ env->type_env = bb->tyenv; ++ env->n_vregmap = bb->tyenv->types_used; ++ env->vregmap = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg)); ++ env->vregmapHI = LibVEX_Alloc_inline(env->n_vregmap * sizeof(HReg)); ++ env->chainingAllowed = chainingAllowed; ++ env->max_ga = max_ga; ++ env->hwcaps = archinfo_host->hwcaps; ++ } ++ ++ /* For each IR temporary, allocate a suitably-kinded virtual ++ register. */ ++ Int i, j; ++ HReg hreg, hregHI; ++ j = 0; ++ for (i = 0; i < env->n_vregmap; i++) ++ { ++ hregHI = hreg = INVALID_HREG; ++ switch (bb->tyenv->types[i]) { ++ case Ity_I1: ++ case Ity_I8: ++ case Ity_I16: ++ case Ity_I32: ++ case Ity_I64: ++ hreg = mkHReg(True, HRcInt64, 0, j++); ++ break; ++ case Ity_I128: ++ hreg = mkHReg(True, HRcInt64, 0, j++); ++ hregHI = mkHReg(True, HRcInt64, 0, j++); ++ break; ++ case Ity_F32: ++ case Ity_F64: ++ hreg = mkHReg(True, HRcFlt64, 0, j++); ++ break; ++ case Ity_V128: ++ // hreg = mkHReg(True, HRcVec128, 0, j++); ++ // break; ++ default: ++ ppIRType(bb->tyenv->types[i]); ++ vpanic("iselBB(sw64): IRTemp type"); ++ break; ++ } ++ env->vregmap[i] = hreg; ++ env->vregmapHI[i] = hregHI; ++ } ++ env->vreg_ctr = j; ++ ++ /* The very first instruction must be an event check. */ ++ SW64AModeRI *amCounter, *amFailAddr; ++ amCounter = SW64AModeRI_IR(offs_Host_EvC_Counter, SW64GuestStateHreg()); ++ amFailAddr = SW64AModeRI_IR(offs_Host_EvC_FailAddr, SW64GuestStateHreg()); ++ addInstr(env, SW64Instr_EvCheck(amCounter, amFailAddr)); ++ ++ /* Possibly a block counter increment (for profiling). At this ++ point we don't know the address of the counter, so just pretend ++ it is zero. It will have to be patched later, but before this ++ translation is used, by a call to LibVEX_patchProfCtr. */ ++ if (addProfInc) { ++ addInstr(env, SW64Instr_ProfInc()); ++ } ++ ++ /* Ok, finally we can iterate over the statements. */ ++ for (i = 0; i < bb->stmts_used; i++) ++ iselStmt(env, bb->stmts[i]); ++ ++ iselNext(env, bb->next, bb->jumpkind, bb->offsIP); ++ ++ /* record the number of vregs we used. */ ++ env->code->n_vregs = env->vreg_ctr; ++ return env->code; ++} ++ ++ ++/*---------------------------------------------------------------*/ ++/*--- end host_sw64_isel.c ---*/ ++/*---------------------------------------------------------------*/ ++ +diff --git a/VEX/priv/host_x86_defs.c b/VEX/priv/host_x86_defs.c +index b1c349afb..e8eac96aa 100644 +--- a/VEX/priv/host_x86_defs.c ++++ b/VEX/priv/host_x86_defs.c +@@ -2120,7 +2120,7 @@ static UChar* push_word_from_tags ( UChar* p, UShort tags ) + instruction was a profiler inc, set *is_profInc to True, else + leave it unchanged. */ + +-Int emit_X86Instr ( /*MB_MOD*/Bool* is_profInc, ++Int emit_X86Instr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const X86Instr* i, + Bool mode64, VexEndness endness_host, + const void* disp_cp_chain_me_to_slowEP, +diff --git a/VEX/priv/host_x86_defs.h b/VEX/priv/host_x86_defs.h +index 2455b3245..2a827b50e 100644 +--- a/VEX/priv/host_x86_defs.h ++++ b/VEX/priv/host_x86_defs.h +@@ -714,7 +714,7 @@ extern void ppX86Instr ( const X86Instr*, Bool ); + of the underlying instruction set. */ + extern void getRegUsage_X86Instr ( HRegUsage*, const X86Instr*, Bool ); + extern void mapRegs_X86Instr ( HRegRemap*, X86Instr*, Bool ); +-extern Int emit_X86Instr ( /*MB_MOD*/Bool* is_profInc, ++extern Int emit_X86Instr ( /*MB_MOD*/Bool* is_profInc,/*MB_MOD*/Bool* is_8aligned, + UChar* buf, Int nbuf, const X86Instr* i, + Bool mode64, + VexEndness endness_host, +diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c +index 2d82c41a1..96fe3a323 100644 +--- a/VEX/priv/ir_defs.c ++++ b/VEX/priv/ir_defs.c +@@ -221,6 +221,14 @@ void ppIROp ( IROp op ) + case Iop_CmpwNEZ32: vex_printf("CmpwNEZ32"); return; + case Iop_CmpwNEZ64: vex_printf("CmpwNEZ64"); return; + ++ case Iop_CmpFEQ64: vex_printf("CmpFEQ64"); return; ++ case Iop_CmpFNE64: vex_printf("CmpFNE64"); return; ++ case Iop_CmpFLT64: vex_printf("CmpFLT64"); return; ++ case Iop_CmpFLE64: vex_printf("CmpFLE64"); return; ++ case Iop_CmpFGT64: vex_printf("CmpFGT64"); return; ++ case Iop_CmpFGE64: vex_printf("CmpFGE64"); return; ++ case Iop_CmpFUN64: vex_printf("CmpFUN64"); return; ++ + case Iop_Left8: vex_printf("Left8"); return; + case Iop_Left16: vex_printf("Left16"); return; + case Iop_Left32: vex_printf("Left32"); return; +@@ -1419,6 +1427,8 @@ Bool primopMightTrap ( IROp op ) + case Iop_CmpLT32U: case Iop_CmpLT64U: case Iop_CmpLE32U: case Iop_CmpLE64U: + case Iop_CmpNEZ8: case Iop_CmpNEZ16: case Iop_CmpNEZ32: case Iop_CmpNEZ64: + case Iop_CmpwNEZ32: case Iop_CmpwNEZ64: ++ case Iop_CmpFEQ64: case Iop_CmpFNE64: case Iop_CmpFUN64: ++ case Iop_CmpFLT64: case Iop_CmpFLE64: case Iop_CmpFGT64: case Iop_CmpFGE64: + case Iop_Left8: case Iop_Left16: case Iop_Left32: case Iop_Left64: + case Iop_Max32U: case Iop_CmpORD32U: case Iop_CmpORD64U: + case Iop_CmpORD32S: case Iop_CmpORD64S: +@@ -3263,6 +3273,12 @@ void typeOfPrimop ( IROp op, + case Iop_CmpLT64U: case Iop_CmpLE64U: + COMPARISON(Ity_I64); + ++ case Iop_CmpFEQ64: case Iop_CmpFNE64: ++ case Iop_CmpFLT64: case Iop_CmpFLE64: ++ case Iop_CmpFGT64: case Iop_CmpFGE64: ++ case Iop_CmpFUN64: ++ COMPARISON(Ity_F64); ++ + case Iop_CmpNEZ8: UNARY_COMPARISON(Ity_I8); + case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16); + case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32); +diff --git a/VEX/priv/ir_opt.c b/VEX/priv/ir_opt.c +index 93dd6188e..e63914281 100644 +--- a/VEX/priv/ir_opt.c ++++ b/VEX/priv/ir_opt.c +@@ -2069,6 +2069,32 @@ static IRExpr* fold_Expr_WRK ( IRExpr** env, IRExpr* e ) + < (ULong)(e->Iex.Binop.arg2->Iex.Const.con->Ico.U64))))); + break; + ++ case Iop_CmpFEQ64: ++ e2 = IRExpr_Const(IRConst_U1(toBool( ++ ((Double)(e->Iex.Binop.arg1->Iex.Const.con->Ico.F64) ++ == (Double)(e->Iex.Binop.arg2->Iex.Const.con->Ico.F64))))); ++ break; ++ case Iop_CmpFLT64: ++ e2 = IRExpr_Const(IRConst_U1(toBool( ++ ((Double)(e->Iex.Binop.arg1->Iex.Const.con->Ico.F64) ++ < (Double)(e->Iex.Binop.arg2->Iex.Const.con->Ico.F64))))); ++ break; ++ case Iop_CmpFLE64: ++ e2 = IRExpr_Const(IRConst_U1(toBool( ++ ((Double)(e->Iex.Binop.arg1->Iex.Const.con->Ico.F64) ++ <= (Double)(e->Iex.Binop.arg2->Iex.Const.con->Ico.F64))))); ++ break; ++ case Iop_CmpFGT64: ++ e2 = IRExpr_Const(IRConst_U1(toBool( ++ ((Double)(e->Iex.Binop.arg1->Iex.Const.con->Ico.F64) ++ > (Double)(e->Iex.Binop.arg2->Iex.Const.con->Ico.F64))))); ++ break; ++ case Iop_CmpFGE64: ++ e2 = IRExpr_Const(IRConst_U1(toBool( ++ ((Double)(e->Iex.Binop.arg1->Iex.Const.con->Ico.F64) ++ >= (Double)(e->Iex.Binop.arg2->Iex.Const.con->Ico.F64))))); ++ break; ++ + /* -- CmpORD -- */ + case Iop_CmpORD32S: { + /* very paranoid */ +diff --git a/VEX/priv/main_main.c b/VEX/priv/main_main.c +index 482047c7a..e56089fe0 100644 +--- a/VEX/priv/main_main.c ++++ b/VEX/priv/main_main.c +@@ -43,6 +43,7 @@ + #include "libvex_guest_s390x.h" + #include "libvex_guest_mips32.h" + #include "libvex_guest_mips64.h" ++#include "libvex_guest_sw64.h" + + #include "main_globals.h" + #include "main_util.h" +@@ -57,6 +58,7 @@ + #include "host_s390_defs.h" + #include "host_mips_defs.h" + #include "host_nanomips_defs.h" ++#include "host_sw64_defs.h" + + #include "guest_generic_bb_to_IR.h" + #include "guest_x86_defs.h" +@@ -67,6 +69,7 @@ + #include "guest_s390_defs.h" + #include "guest_mips_defs.h" + #include "guest_nanomips_defs.h" ++#include "guest_sw64_defs.h" + + #include "host_generic_simd128.h" + +@@ -163,6 +166,14 @@ + #define NANOMIPSST(f) vassert(0) + #endif + ++#if defined(VGA_sw64) || defined(VEXMULTIARCH) ++#define SW64FN(f) f ++#define SW64ST(f) f ++#else ++#define SW64FN(f) NULL ++#define SW64ST(f) vassert(0) ++#endif ++ + /* This file contains the top level interface to the library. */ + + /* --------- fwds ... --------- */ +@@ -541,6 +552,23 @@ IRSB* LibVEX_FrontEnd ( /*MOD*/ VexTranslateArgs* vta, + vassert(sizeof( ((VexGuestMIPS32State*)0)->guest_NRADDR ) == 4); + break; + ++ case VexArchSW64: ++ preciseMemExnsFn ++ = SW64FN(guest_sw64_state_requires_precise_mem_exns); ++ disInstrFn = SW64FN(disInstr_SW64); ++ specHelper = SW64FN(guest_sw64_spechelper); ++ guest_layout = SW64FN(&sw64Guest_layout); ++ offB_CMSTART = offsetof(VexGuestSW64State,guest_CMSTART); ++ offB_CMLEN = offsetof(VexGuestSW64State,guest_CMLEN); ++ offB_GUEST_IP = offsetof(VexGuestSW64State,guest_PC); ++ szB_GUEST_IP = sizeof( ((VexGuestSW64State*)0)->guest_PC ); ++ vassert(vta->archinfo_guest.endness == VexEndnessLE); ++ vassert(0 == sizeof(VexGuestSW64State) % LibVEX_GUEST_STATE_ALIGN); ++ vassert(sizeof( ((VexGuestSW64State*)0)->guest_CMSTART) == 8); ++ vassert(sizeof( ((VexGuestSW64State*)0)->guest_CMLEN ) == 8); ++ vassert(sizeof( ((VexGuestSW64State*)0)->guest_NRADDR ) == 8); ++ break; ++ + default: + vpanic("LibVEX_Translate: unsupported guest insn set"); + } +@@ -745,7 +773,7 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + HInstrArray* (*iselSB) ( const IRSB*, VexArch, const VexArchInfo*, + const VexAbiInfo*, Int, Int, Bool, Bool, + Addr ); +- Int (*emit) ( /*MB_MOD*/Bool*, ++ Int (*emit) ( /*MB_MOD*/Bool*, /*MB_MOD*/Bool*, + UChar*, Int, const HInstr*, Bool, VexEndness, + const void*, const void*, const void*, + const void* ); +@@ -759,7 +787,7 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + Int offB_HOST_EvC_COUNTER; + Int offB_HOST_EvC_FAILADDR; + Addr max_ga; +- UChar insn_bytes[128]; ++ UChar insn_bytes[256]; /* changed from 128 */ + HInstrArray* vcode; + HInstrArray* rcode; + +@@ -878,6 +906,14 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + offB_HOST_EvC_FAILADDR = offsetof(VexGuestMIPS32State,host_EvC_FAILADDR); + break; + ++ case VexArchSW64: ++ preciseMemExnsFn ++ = SW64FN(guest_sw64_state_requires_precise_mem_exns); ++ guest_sizeB = sizeof(VexGuestSW64State); ++ offB_HOST_EvC_COUNTER = offsetof(VexGuestSW64State,host_EvC_COUNTER); ++ offB_HOST_EvC_FAILADDR = offsetof(VexGuestSW64State,host_EvC_FAILADDR); ++ break; ++ + default: + vpanic("LibVEX_Codegen: unsupported guest insn set"); + } +@@ -1052,6 +1088,22 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + || vta->archinfo_host.endness == VexEndnessBE); + break; + ++ case VexArchSW64: ++ mode64 = True; ++ rRegUniv = SW64FN(getRRegUniverse_SW64()); ++ getRegUsage ++ = CAST_TO_TYPEOF(getRegUsage) SW64FN(getRegUsage_SW64Instr); ++ mapRegs = CAST_TO_TYPEOF(mapRegs) SW64FN(mapRegs_SW64Instr); ++ genSpill = CAST_TO_TYPEOF(genSpill) SW64FN(genSpill_SW64); ++ genReload = CAST_TO_TYPEOF(genReload) SW64FN(genReload_SW64); ++ genMove = CAST_TO_TYPEOF(genMove) SW64FN(genMove_SW64); ++ ppInstr = CAST_TO_TYPEOF(ppInstr) SW64FN(ppSW64Instr); ++ ppReg = CAST_TO_TYPEOF(ppReg) SW64FN(ppHRegSW64); ++ iselSB = SW64FN(iselSB_SW64); ++ emit = CAST_TO_TYPEOF(emit) SW64FN(emit_SW64Instr); ++ vassert(vta->archinfo_host.endness == VexEndnessLE); ++ break; ++ + default: + vpanic("LibVEX_Translate: unsupported host insn set"); + } +@@ -1168,11 +1220,13 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + for (i = 0; i < rcode->arr_used; i++) { + HInstr* hi = rcode->arr[i]; + Bool hi_isProfInc = False; ++ Bool hi_is8aligned = False; + if (UNLIKELY(vex_traceflags & VEX_TRACE_ASM)) { + ppInstr(hi, mode64); + vex_printf("\n"); + } + j = emit( &hi_isProfInc, ++ &hi_is8aligned, /*add for sw64, some insn's addr need 8-aligned*/ + insn_bytes, sizeof insn_bytes, hi, + mode64, vta->archinfo_host.endness, + vta->disp_cp_chain_me_to_slowEP, +@@ -1197,10 +1251,39 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + res->offs_profInc = out_used; + } + { UChar* dst = &vta->host_bytes[out_used]; +- for (k = 0; k < j; k++) { +- dst[k] = insn_bytes[k]; +- } +- out_used += j; ++ if (vta->arch_host == VexArchSW64 && hi_is8aligned) ++ { ++ //sw64: some insn's addr must be 8-aligned,such as lstl/lstw ++ Bool is_8aligned_dst = (0 == (((ULong)(dst)) & ((ULong)0x7))); ++ Bool is_8aligned_insn = (0 == (((ULong)(&insn_bytes)) & ((ULong)0x7))); ++ if (is_8aligned_dst ^ is_8aligned_insn) ++ { ++ //add nop ++ UInt w32 = 0x43ff075f; ++ dst[0] = toUChar(w32 & 0x000000FF); ++ dst[1] = toUChar((w32 >> 8) & 0x000000FF); ++ dst[2] = toUChar((w32 >> 16) & 0x000000FF); ++ dst[3] = toUChar((w32 >> 24) & 0x000000FF); ++ for (k = 0; k < j; k++) { ++ dst[k + 4] = insn_bytes[k]; ++ } ++ out_used += j + 4; ++ } ++ else ++ { ++ //original ++ for (k = 0; k < j; k++) { ++ dst[k] = insn_bytes[k]; ++ } ++ out_used += j; ++ } ++ } else { ++ //original ++ for (k = 0; k < j; k++) { ++ dst[k] = insn_bytes[k]; ++ } ++ out_used += j; ++ } + } + } + *(vta->host_bytes_used) = out_used; +@@ -1209,7 +1292,7 @@ static void libvex_BackEnd ( const VexTranslateArgs *vta, + + vexSetAllocModeTEMP_and_clear(); + +- if (vex_traceflags) { ++ if (vex_traceflags || vta->dump_expansion_ratio) { + /* Print the expansion ratio for this SB. */ + j = 0; /* total guest bytes */ + for (i = 0; i < vta->guest_extents->n_used; i++) { +@@ -1297,6 +1380,12 @@ VexInvalRange LibVEX_Chain ( VexArch arch_host, + place_to_chain, + disp_cp_chain_me_EXPECTED, + place_to_jump_to)); ++ case VexArchSW64: ++ SW64ST(return chainXDirect_SW64(endness_host, ++ place_to_chain, ++ disp_cp_chain_me_EXPECTED, ++ place_to_jump_to)); ++ + default: + vassert(0); + } +@@ -1359,6 +1448,11 @@ VexInvalRange LibVEX_UnChain ( VexArch arch_host, + place_to_unchain, + place_to_jump_to_EXPECTED, + disp_cp_chain_me)); ++ case VexArchSW64: ++ SW64ST(return unchainXDirect_SW64(endness_host, ++ place_to_unchain, ++ place_to_jump_to_EXPECTED, ++ disp_cp_chain_me)); + default: + vassert(0); + } +@@ -1387,8 +1481,10 @@ Int LibVEX_evCheckSzB ( VexArch arch_host ) + MIPS32ST(cached = evCheckSzB_MIPS()); break; + case VexArchMIPS64: + MIPS64ST(cached = evCheckSzB_MIPS()); break; +- case VexArchNANOMIPS: ++ case VexArchNANOMIPS: + NANOMIPSST(cached = evCheckSzB_NANOMIPS()); break; ++ case VexArchSW64: ++ SW64ST(cached = evCheckSzB_SW64()); break; + default: + vassert(0); + } +@@ -1432,6 +1528,9 @@ VexInvalRange LibVEX_PatchProfInc ( VexArch arch_host, + case VexArchNANOMIPS: + NANOMIPSST(return patchProfInc_NANOMIPS(endness_host, place_to_patch, + location_of_counter)); ++ case VexArchSW64: ++ SW64ST(return patchProfInc_SW64(endness_host, place_to_patch, ++ location_of_counter)); + default: + vassert(0); + } +@@ -1515,6 +1614,7 @@ const HChar* LibVEX_ppVexArch ( VexArch arch ) + case VexArchMIPS32: return "MIPS32"; + case VexArchMIPS64: return "MIPS64"; + case VexArchNANOMIPS: return "NANOMIPS"; ++ case VexArchSW64: return "SW64"; + default: return "VexArch???"; + } + } +@@ -1585,6 +1685,7 @@ static IRType arch_word_size (VexArch arch) { + case VexArchMIPS64: + case VexArchPPC64: + case VexArchS390X: ++ case VexArchSW64: + return Ity_I64; + + default: +@@ -1925,6 +2026,18 @@ static const HChar* show_hwcaps_mips64 ( UInt hwcaps ) + return "Unsupported baseline"; + } + ++static const HChar* show_hwcaps_sw64 ( UInt hwcaps ) ++{ ++ switch (VEX_SW64_FAMILY(hwcaps)) { ++ case VEX_SW64_CORE3: ++ return "SW64-CORE3"; ++ case VEX_SW64_CORE4: ++ return "SW64-CORE4"; ++ default: ++ return "Unsupported baseline"; ++ } ++} ++ + #undef NUM_HWCAPS + + /* Thie function must not return NULL. */ +@@ -1941,6 +2054,7 @@ static const HChar* show_hwcaps ( VexArch arch, UInt hwcaps ) + case VexArchS390X: return show_hwcaps_s390x(hwcaps); + case VexArchMIPS32: return show_hwcaps_mips32(hwcaps); + case VexArchMIPS64: return show_hwcaps_mips64(hwcaps); ++ case VexArchSW64: return show_hwcaps_sw64(hwcaps); + default: return NULL; + } + } +@@ -2203,6 +2317,14 @@ static void check_hwcaps ( VexArch arch, UInt hwcaps ) + return; + invalid_hwcaps(arch, hwcaps, "Unsupported baseline\n"); + ++ case VexArchSW64: ++ switch (VEX_SW64_FAMILY(hwcaps)) { ++ case VEX_SW64_CORE3: ++ case VEX_SW64_CORE4: ++ return; ++ default: ++ invalid_hwcaps(arch, hwcaps, "Unsupported baseline\n"); ++ } + default: + vpanic("unknown architecture"); + } +diff --git a/VEX/pub/libvex.h b/VEX/pub/libvex.h +index ec50d52ca..a31fbf400 100644 +--- a/VEX/pub/libvex.h ++++ b/VEX/pub/libvex.h +@@ -60,6 +60,7 @@ typedef + VexArchMIPS32, + VexArchMIPS64, + VexArchNANOMIPS, ++ VexArchSW64, + } + VexArch; + +@@ -299,6 +300,20 @@ typedef + (VEX_MIPS_PROC_ID(x) == VEX_PRID_IMP_P5600) && \ + (VEX_MIPS_HOST_FP_MODE(x))) + ++ ++/* ++ SW64 hwcaps: ++ +----------------------------------------------------+-----------------+ ++ | undefined | cpu family | ++ +----------------------------------------------------+-----------------+ ++ |31 8|7 0| ++ +----------------------------------------------------+-----------------+ ++*/ ++ ++#define VEX_SW64_FAMILY(x) (x & 0xFF) ++#define VEX_SW64_CORE3 3 ++#define VEX_SW64_CORE4 4 ++ + /* These return statically allocated strings. */ + + extern const HChar* LibVEX_ppVexArch ( VexArch ); +@@ -796,6 +811,9 @@ typedef + /* IN: debug: trace vex activity at various points */ + Int traceflags; + ++ /* IN: debug: show instruction expansion ratio */ ++ Bool dump_expansion_ratio; ++ + /* IN: debug: print diagnostics when an illegal instr is detected */ + Bool sigill_diag; + +diff --git a/VEX/pub/libvex_basictypes.h b/VEX/pub/libvex_basictypes.h +index e3f1485d5..393d05663 100644 +--- a/VEX/pub/libvex_basictypes.h ++++ b/VEX/pub/libvex_basictypes.h +@@ -198,6 +198,10 @@ typedef unsigned long HWord; + # define VEX_HOST_WORDSIZE 4 + # define VEX_REGPARM(_n) /* */ + ++#elif defined(__sw_64__) ++# define VEX_HOST_WORDSIZE 8 ++# define VEX_REGPARM(_n) /* */ ++ + #else + # error "Vex: Fatal: Can't establish the host architecture" + #endif +diff --git a/VEX/pub/libvex_guest_sw64.h b/VEX/pub/libvex_guest_sw64.h +new file mode 100644 +index 000000000..70a300bc3 +--- /dev/null ++++ b/VEX/pub/libvex_guest_sw64.h +@@ -0,0 +1,163 @@ ++/*---------------------------------------------------------------*/ ++/*--- begin libvex_guest_sw64.h ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++ ++ Neither the names of the U.S. Department of Energy nor the ++ University of California nor the names of its contributors may be ++ used to endorse or promote products derived from this software ++ without prior written permission. ++*/ ++ ++#ifndef __LIBVEX_PUB_GUEST_SW64_H ++#define __LIBVEX_PUB_GUEST_SW64_H ++ ++#include "libvex_basictypes.h" ++ ++/*---------------------------------------------------------------*/ ++/*--- Vex's representation of the SW64 CPU state. ---*/ ++/*---------------------------------------------------------------*/ ++ ++typedef ++ struct { ++ /*SW_NOT_COMPLETE*/ ++ /* 0 */ ULong host_EvC_FAILADDR; ++ /* 8 */ UInt host_EvC_COUNTER; ++ /* 12 */ UInt _padding1; ++ ++ /* 16 */ ULong guest_PC; /* Program counter */ ++ ++ /* GP Registers */ ++ /* 24 */ ULong guest_r0; /* Values for function returns */ ++ /* 32 */ ULong guest_r1; /* Temporaries */ /* t0-t7 */ ++ /* 40 */ ULong guest_r2; ++ /* 48 */ ULong guest_r3; ++ /* 56 */ ULong guest_r4; ++ /* 64 */ ULong guest_r5; ++ /* 72 */ ULong guest_r6; ++ /* 80 */ ULong guest_r7; ++ /* 88 */ ULong guest_r8; ++ /* 96 */ ULong guest_r9; /* Saved temporaries */ /* s0-s5 */ ++ /* 104 */ ULong guest_r10; ++ /* 112 */ ULong guest_r11; ++ /* 120 */ ULong guest_r12; ++ /* 128 */ ULong guest_r13; ++ /* 136 */ ULong guest_r14; ++ /* 144 */ ULong guest_r15; /* Frame pointer */ ++ /* 152 */ ULong guest_r16; /* Function arguments */ /* a0-a5 */ ++ /* 160 */ ULong guest_r17; ++ /* 168 */ ULong guest_r18; ++ /* 176 */ ULong guest_r19; ++ /* 184 */ ULong guest_r20; ++ /* 192 */ ULong guest_r21; ++ /* 200 */ ULong guest_r22; /* Temporaries */ /* t8-t11 */ ++ /* 208 */ ULong guest_r23; ++ /* 216 */ ULong guest_r24; ++ /* 224 */ ULong guest_r25; ++ /* 232 */ ULong guest_r26; /* Return address */ ++ /* 240 */ ULong guest_r27; /* Procedure value */ ++ /* 248 */ ULong guest_r28; /* Assembler temporary */ ++ /* 256 */ ULong guest_r29; /* Global pointer */ ++ /* 264 */ ULong guest_r30; /* Stack pointer */ ++ /* 272 */ ULong guest_r31; /* Hardwired to 0. */ ++ ++ /* FP Registers */ ++ /* 280 */ ULong guest_f0; /* Return f0 */ ++ /* 288 */ ULong guest_f1; /* Return f1 */ ++ /* 296 */ ULong guest_f2; /* Saved */ /* f2-f9 */ ++ /* 304 */ ULong guest_f3; ++ /* 312 */ ULong guest_f4; ++ /* 320 */ ULong guest_f5; ++ /* 328 */ ULong guest_f6; ++ /* 336 */ ULong guest_f7; ++ /* 344 */ ULong guest_f8; ++ /* 352 */ ULong guest_f9; ++ /* 360 */ ULong guest_f10; /* Temporaries */ /* f10-f15 */ ++ /* 368 */ ULong guest_f11; ++ /* 376 */ ULong guest_f12; ++ /* 384 */ ULong guest_f13; ++ /* 392 */ ULong guest_f14; ++ /* 400 */ ULong guest_f15; ++ /* 408 */ ULong guest_f16; /* Function arguments */ /* f16-f21 */ ++ /* 416 */ ULong guest_f17; ++ /* 424 */ ULong guest_f18; ++ /* 432 */ ULong guest_f19; ++ /* 440 */ ULong guest_f20; ++ /* 448 */ ULong guest_f21; ++ /* 456 */ ULong guest_f22; /* Temporaries */ /* f22-f30 */ ++ /* 464 */ ULong guest_f23; ++ /* 472 */ ULong guest_f24; ++ /* 480 */ ULong guest_f25; ++ /* 488 */ ULong guest_f26; ++ /* 496 */ ULong guest_f27; ++ /* 504 */ ULong guest_f28; ++ /* 512 */ ULong guest_f29; ++ /* 520 */ ULong guest_f30; ++ /* 528 */ ULong guest_f31; ++ ++ /* 544 */ ULong guest_FPCR; ++ /* 536 */ ULong guest_CSR; ++ /* 552 */ ULong guest_TID; ++ /* 560 */ ULong guest_LOCKFLAG; ++ /* 568 */ ULong guest_LOCKVALID; ++ /* 576 */ ULong guest_LOCKSUCCESS; ++ /* 584 */ ULong guest_LOCKSIZE; ++ /* 592 */ ULong guest_LOCKADDR; ++ /* 600 */ ULong guest_LOCKDATA; ++ ++ /* Various pseudo-regs mandated by Vex or Valgrind. */ ++ /* Emulation notes */ ++ /* 608 */ UInt guest_EMNOTE; ++ ++ /* For clflush/clinval: record start and length of area */ ++ /* 616 */ ULong guest_CMSTART; ++ /* 624 */ ULong guest_CMLEN; ++ ++ /* Used to record the unredirected guest address at the start of ++ a translation whose start has been redirected. By reading ++ this pseudo-register shortly afterwards, the translation can ++ find out what the corresponding no-redirection address was. ++ Note, this is only set for wrap-style redirects, not for ++ replace-style ones. */ ++ /* 632 */ULong guest_NRADDR; ++} VexGuestSW64State; ++ ++/*---------------------------------------------------------------*/ ++/*--- Utility functions for SW64 guest stuff. ---*/ ++/*---------------------------------------------------------------*/ ++ ++/* ALL THE FOLLOWING ARE VISIBLE TO LIBRARY CLIENT. */ ++ ++/* Initialise all guest SW64 state. */ ++ ++extern ++void LibVEX_GuestSW64_initialise ( /*OUT*/VexGuestSW64State* vex_state ); ++ ++/* FR bit of CP0_STATUS_FR register */ ++#define SW64_CP0_STATUS_FR (1ul << 26) ++ ++#endif /* ndef __LIBVEX_PUB_GUEST_SW64_H */ ++ ++/*---------------------------------------------------------------*/ ++/*--- libvex_guest_sw64.h - --*/ ++/*---------------------------------------------------------------*/ +diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h +index 85805bb69..450d2e07b 100644 +--- a/VEX/pub/libvex_ir.h ++++ b/VEX/pub/libvex_ir.h +@@ -635,6 +635,16 @@ typedef + Iop_CmpF16, + Iop_CmpF128, + ++ /* ---- guest sw64 specifics, float compare ----*/ ++ /* :: F64 x F64 -> CmpResult(I1) */ ++ Iop_CmpFUN64, ++ Iop_CmpFLT64, ++ Iop_CmpFLE64, ++ Iop_CmpFGT64, ++ Iop_CmpFGE64, ++ Iop_CmpFEQ64, ++ Iop_CmpFNE64, ++ + /* --- Int to/from FP conversions. --- */ + + /* For the most part, these take a first argument :: Ity_I32 (as +diff --git a/cachegrind/cg_arch.c b/cachegrind/cg_arch.c +index 52e898218..b0f6d02e9 100644 +--- a/cachegrind/cg_arch.c ++++ b/cachegrind/cg_arch.c +@@ -469,6 +469,12 @@ configure_caches(cache_t *I1c, cache_t *D1c, cache_t *LLc, + *D1c = (cache_t) { 32768, 4, 32 }; + *LLc = (cache_t) { 524288, 8, 32 }; + ++#elif defined(VGA_sw64) ++ ++ *I1c = (cache_t) { 32768, 4, 128 }; ++ *D1c = (cache_t) { 32768, 4, 128 }; ++ *LLc = (cache_t) { 524288, 8, 128 }; ++ + #elif defined(VGA_x86) || defined(VGA_amd64) + + *I1c = (cache_t) { 65536, 2, 64 }; +diff --git a/cachegrind/cg_branchpred.c b/cachegrind/cg_branchpred.c +index ba433ec2c..fd5621a71 100644 +--- a/cachegrind/cg_branchpred.c ++++ b/cachegrind/cg_branchpred.c +@@ -44,7 +44,8 @@ + guaranteed to be zero? */ + #if defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ + || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ +- || defined(VGA_arm64) ++ || defined(VGA_arm64) \ ++ || defined(VGA_sw64) + # define N_IADDR_LO_ZERO_BITS 2 + #elif defined(VGA_x86) || defined(VGA_amd64) + # define N_IADDR_LO_ZERO_BITS 0 +diff --git a/cachegrind/tests/cgout-test2 b/cachegrind/tests/cgout-test2 +new file mode 100644 +index 000000000..376a3b645 +--- /dev/null ++++ b/cachegrind/tests/cgout-test2 +@@ -0,0 +1,3543 @@ ++desc: I1 cache: 32768 B, 64 B, 8-way associative ++desc: D1 cache: 32768 B, 64 B, 8-way associative ++desc: LL cache: 19922944 B, 64 B, 19-way associative ++cmd: ./a.out ++events: Ir I1mr ILmr Dr D1mr DLmr Dw D1mw DLmw ++fl=/build/glibc-OTsEL5/glibc-2.27/csu/../csu/init-first.c ++fn=_init ++52 8 1 1 0 0 0 4 0 0 ++55 4 1 1 1 1 0 1 0 0 ++62 5 1 1 4 1 0 0 0 0 ++67 1 0 0 0 0 0 1 1 1 ++68 1 0 0 0 0 0 1 0 0 ++69 2 0 0 1 1 0 1 1 1 ++81 4 0 0 0 0 0 1 0 0 ++84 1 0 0 0 0 0 1 0 0 ++89 6 0 0 5 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c ++fn=(below main) ++137 10 2 2 0 0 0 7 0 0 ++141 4 0 0 1 0 0 1 0 0 ++239 2 0 0 0 0 0 0 0 0 ++240 4 0 0 0 0 0 1 0 0 ++262 4 1 1 2 0 0 0 0 0 ++265 2 0 0 0 0 0 0 0 0 ++266 5 0 0 4 0 0 1 0 0 ++270 4 0 0 2 0 0 0 0 0 ++285 2 1 1 0 0 0 0 0 0 ++297 2 0 0 0 0 0 1 0 0 ++298 2 0 0 0 0 0 0 0 0 ++303 2 0 0 1 1 0 1 0 0 ++304 2 0 0 1 0 0 1 0 0 ++307 2 0 0 0 0 0 1 0 0 ++310 6 1 1 5 0 0 1 0 0 ++344 2 0 0 0 0 0 1 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/csu/../sysdeps/generic/dl-hash.h ++fn=_init ++43 1 0 0 0 0 0 0 0 0 ++44 1 0 0 0 0 0 0 0 0 ++45 13 0 0 4 1 0 0 0 0 ++48 12 0 0 0 0 0 0 0 0 ++62 16 0 0 0 0 0 0 0 0 ++67 1 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/csu/../sysdeps/unix/sysv/linux/x86_64/init-first.c ++fn=_init ++36 7 2 2 0 0 0 3 0 0 ++38 4 0 0 0 0 0 1 0 0 ++40 3 0 0 0 0 0 0 0 0 ++41 2 1 1 1 0 0 0 0 0 ++42 1 0 0 0 0 0 1 1 1 ++44 3 0 0 0 0 0 1 0 0 ++45 2 0 0 1 0 0 0 0 0 ++46 1 0 0 0 0 0 1 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/ctype/ctype-info.c ++fn=__ctype_init ++31 7 2 2 5 3 0 1 0 0 ++33 4 0 0 2 1 0 1 0 0 ++35 4 0 0 2 0 0 1 0 0 ++36 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/dlfcn/dlerror.c ++fn=check_free ++186 5 1 1 1 0 0 2 0 0 ++187 3 0 0 1 1 0 0 0 0 ++202 6 1 1 4 0 0 0 0 0 ++fn=fini ++209 2 1 1 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/dlfcn/dlfcn.c ++fn=init ++29 1 1 1 0 0 0 1 1 0 ++30 1 0 0 0 0 0 1 0 0 ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../elf/dl-runtime.c ++fn=_dl_fixup ++66 12 1 0 0 0 0 4 0 0 ++68 4 0 0 4 0 0 0 0 0 ++69 8 1 1 8 0 0 0 0 0 ++72 20 0 0 8 2 0 0 0 0 ++73 28 0 0 8 4 0 4 0 0 ++75 12 0 0 8 0 0 0 0 0 ++80 8 1 1 0 0 0 0 0 0 ++84 8 0 0 4 4 4 0 0 0 ++88 12 0 0 4 1 0 0 0 0 ++92 8 0 0 8 2 0 0 0 0 ++93 16 0 0 4 0 0 0 0 0 ++95 20 1 1 4 1 0 0 0 0 ++101 4 0 0 0 0 0 0 0 0 ++102 12 0 0 4 0 0 0 0 0 ++112 40 1 1 8 1 0 12 0 0 ++116 20 0 0 12 0 0 0 0 0 ++126 28 0 0 8 0 0 0 0 0 ++134 4 0 0 4 0 0 0 0 0 ++142 16 0 0 4 0 0 0 0 0 ++146 12 1 1 4 0 0 0 0 0 ++150 12 0 0 8 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../elf/dl-sysdep.c ++fn=_dl_sysdep_start ++88 8 1 1 0 0 0 6 0 0 ++89 10 1 1 4 1 1 5 0 0 ++90 1 0 0 0 0 0 0 0 0 ++112 1 0 0 0 0 0 1 0 0 ++113 303 1 1 99 13 13 4 3 3 ++116 2 0 0 0 0 0 1 1 1 ++117 1 1 1 0 0 0 1 0 0 ++119 126 5 5 32 4 4 13 1 1 ++120 110 0 0 18 3 3 0 0 0 ++123 1 0 0 1 0 0 0 0 0 ++126 1 1 1 1 0 0 0 0 0 ++129 1 1 1 1 0 0 0 0 0 ++130 1 0 0 0 0 0 0 0 0 ++132 1 0 0 1 1 1 0 0 0 ++133 1 0 0 0 0 0 0 0 0 ++153 1 1 1 1 0 0 0 0 0 ++154 1 0 0 0 0 0 0 0 0 ++156 1 0 0 1 0 0 0 0 0 ++157 1 0 0 0 0 0 0 0 0 ++159 2 2 2 1 1 1 1 0 0 ++160 1 0 0 0 0 0 1 0 0 ++165 2 0 0 1 0 0 1 0 0 ++166 1 0 0 0 0 0 1 0 0 ++181 2 1 1 1 0 0 1 0 0 ++182 1 0 0 0 0 0 1 0 0 ++224 1 0 0 0 0 0 1 0 0 ++236 2 1 1 0 0 0 2 0 0 ++238 5 0 0 0 0 0 1 0 0 ++250 3 0 0 1 0 0 0 0 0 ++253 5 1 1 1 0 0 1 0 0 ++254 1 1 0 1 1 0 0 0 0 ++255 8 0 0 7 1 0 0 0 0 ++fn=_dl_sysdep_start_cleanup ++260 1 1 1 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../elf/dl-tls.c ++fn=_dl_add_to_slotinfo ++887 4 1 1 0 0 0 3 0 0 ++893 2 1 1 1 0 0 0 0 0 ++896 1 0 0 1 1 0 0 0 0 ++901 7 0 0 2 0 0 0 0 0 ++942 1 0 0 0 0 0 1 0 0 ++943 1 1 1 0 0 0 1 0 0 ++944 4 0 0 4 0 0 0 0 0 ++fn=_dl_allocate_tls_init ++437 9 1 1 0 0 0 7 0 0 ++438 2 0 0 0 0 0 0 0 0 ++442 2 1 1 1 0 0 1 0 0 ++444 2 0 0 0 0 0 0 0 0 ++445 1 0 0 0 0 0 0 0 0 ++448 3 0 0 2 1 0 0 0 0 ++460 2 0 0 1 0 0 1 0 0 ++465 11 1 1 2 0 0 1 0 0 ++471 15 0 0 0 0 0 1 0 0 ++474 1 1 1 1 0 0 0 0 0 ++475 2 0 0 0 0 0 0 0 0 ++481 3 0 0 2 0 0 0 0 0 ++482 2 0 0 0 0 0 0 0 0 ++484 6 1 1 2 0 0 1 1 1 ++485 1 0 0 0 0 0 1 0 0 ++487 2 0 0 0 0 0 0 0 0 ++488 2 0 0 1 0 0 0 0 0 ++491 2 0 0 0 0 0 0 0 0 ++492 4 1 1 2 0 0 0 0 0 ++494 2 0 0 0 0 0 0 0 0 ++495 2 0 0 1 0 0 0 0 0 ++504 1 0 0 0 0 0 1 0 0 ++507 15 1 1 6 0 0 2 0 0 ++517 1 1 1 0 0 0 0 0 0 ++521 3 0 0 2 0 0 1 0 0 ++524 8 1 1 7 0 0 0 0 0 ++fn=_dl_allocate_tls_storage ++285 2 0 0 1 0 0 0 0 0 ++286 3 1 1 0 0 0 1 0 0 ++287 2 0 0 0 0 0 0 0 0 ++290 1 0 0 0 0 0 1 0 0 ++296 2 0 0 0 0 0 1 0 0 ++332 3 1 1 0 0 0 3 0 0 ++334 1 0 0 1 0 0 0 0 0 ++345 1 0 0 1 0 0 0 0 0 ++346 2 0 0 0 0 0 1 0 0 ++347 3 0 0 0 0 0 0 0 0 ++355 4 0 0 0 0 0 0 0 0 ++356 1 0 0 0 0 0 0 0 0 ++360 297 1 1 0 0 0 289 36 36 ++379 1 0 0 0 0 0 1 1 1 ++385 5 0 0 4 0 0 0 0 0 ++fn=_dl_count_modids ++113 2 1 1 1 0 0 0 0 0 ++114 2 0 0 2 1 1 0 0 0 ++fn=_dl_determine_tlsoffset ++135 5 0 0 0 0 0 5 0 0 ++136 2 1 1 0 0 0 0 0 0 ++137 1 0 0 0 0 0 0 0 0 ++138 1 0 0 0 0 0 0 0 0 ++141 3 2 2 1 0 0 0 0 0 ++144 2 0 0 1 0 0 0 0 0 ++178 1 0 0 0 0 0 0 0 0 ++180 13 1 1 2 0 0 0 0 0 ++182 4 0 0 1 0 0 0 0 0 ++184 3 0 0 1 0 0 0 0 0 ++185 2 1 1 1 0 0 0 0 0 ++187 2 0 0 0 0 0 0 0 0 ++189 5 1 1 1 0 0 0 0 0 ++205 8 0 0 0 0 0 0 0 0 ++207 2 0 0 0 0 0 0 0 0 ++208 2 0 0 0 0 0 0 0 0 ++217 1 0 0 0 0 0 1 0 0 ++220 1 0 0 0 0 0 1 0 0 ++221 1 0 0 0 0 0 1 0 0 ++272 1 0 0 0 0 0 1 0 0 ++273 6 0 0 6 0 0 0 0 0 ++fn=_dl_get_tls_static_info ++309 2 1 1 1 0 0 1 1 1 ++310 2 0 0 1 0 0 1 0 0 ++311 1 0 0 1 0 0 0 0 0 ++fn=_dl_next_tls_modid ++51 4 1 1 2 0 0 0 0 0 ++99 1 0 0 0 0 0 1 0 0 ++103 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../misc/sbrk.c ++fn=sbrk ++32 4 1 1 0 0 0 2 0 0 ++40 6 0 0 2 0 0 0 0 0 ++44 2 1 1 0 0 0 0 0 0 ++60 5 0 0 3 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/generic/ldsodefs.h ++fn=_dl_relocate_object ++102 399 1 1 133 0 0 0 0 0 ++fn=do_lookup_x ++102 354 1 1 118 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/posix/dl-fileid.h ++fn=_dl_map_object_from_fd ++37 30 0 0 0 0 0 5 0 0 ++40 5 0 0 5 0 0 0 0 0 ++41 10 1 1 5 0 0 5 0 0 ++49 70 1 1 40 1 1 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h ++fn=dl_main ++64 2 0 0 1 1 0 0 0 0 ++77 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c ++fn=_dl_discover_osversion ++45 4 1 1 0 0 0 3 0 0 ++47 3 0 0 1 0 0 0 0 0 ++87 5 2 2 0 0 0 1 1 1 ++102 1 0 0 0 0 0 0 0 0 ++106 1 0 0 0 0 0 0 0 0 ++107 1 0 0 0 0 0 0 0 0 ++109 12 0 0 3 1 1 0 0 0 ++111 6 0 0 0 0 0 0 0 0 ++113 17 0 0 4 0 0 0 0 0 ++115 1 0 0 0 0 0 0 0 0 ++116 2 0 0 0 0 0 0 0 0 ++119 3 0 0 0 0 0 0 0 0 ++120 3 1 1 0 0 0 0 0 0 ++121 3 0 0 0 0 0 0 0 0 ++123 13 0 0 0 0 0 0 0 0 ++128 2 0 0 0 0 0 0 0 0 ++132 5 0 0 4 0 0 0 0 0 ++fn=_dl_sysdep_start ++35 2 0 0 0 0 0 1 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/unix/sysv/linux/dl-vdso.c ++fn=_dl_vdso_vsym ++25 20 2 2 4 1 0 4 0 0 ++26 8 0 0 8 1 0 0 0 0 ++27 4 1 1 0 0 0 0 0 0 ++30 8 0 0 0 0 0 0 0 0 ++47 4 0 0 0 0 0 0 0 0 ++48 24 1 1 12 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/unix/sysv/linux/not-errno.h ++fn=_dl_important_hwcaps ++28 4 1 1 0 0 0 0 0 0 ++fn=_dl_load_cache_lookup ++28 16 0 0 0 0 0 0 0 0 ++32 12 1 1 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c ++fn=brk ++31 7 1 1 0 0 0 1 1 1 ++33 2 0 0 0 0 0 0 0 0 ++39 1 0 0 0 0 0 0 0 0 ++40 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/x86/cpu-features.c ++fn=_dl_sysdep_start ++184 1 0 0 0 0 0 1 0 0 ++185 1 1 1 0 0 0 1 0 0 ++196 3 0 0 0 0 0 1 0 0 ++199 6 0 0 0 0 0 0 0 0 ++203 1 0 0 0 0 0 0 0 0 ++205 6 2 2 0 0 0 1 0 0 ++208 3 0 0 1 0 0 0 0 0 ++210 5 1 1 4 0 0 1 0 0 ++211 7 0 0 1 1 1 0 0 0 ++217 2 1 1 0 0 0 1 0 0 ++296 3 0 0 0 0 0 1 0 0 ++305 4 0 0 0 0 0 0 0 0 ++312 8 0 0 1 0 0 1 0 0 ++366 3 1 1 1 0 0 0 0 0 ++367 1 0 0 1 0 0 0 0 0 ++370 2 0 0 0 0 0 0 0 0 ++371 1 0 0 1 0 0 0 0 0 ++377 1 0 0 0 0 0 1 0 0 ++378 1 0 0 0 0 0 1 0 0 ++379 1 0 0 0 0 0 1 0 0 ++382 4 1 1 0 0 0 1 0 0 ++384 6 0 0 1 0 0 2 0 0 ++386 6 1 1 1 0 0 2 0 0 ++388 6 0 0 1 0 0 2 0 0 ++399 1 0 0 0 0 0 1 0 0 ++400 2 0 0 1 0 0 0 0 0 ++404 3 1 1 1 0 0 0 0 0 ++423 3 1 1 0 0 0 0 0 0 ++425 4 1 1 1 0 0 0 0 0 ++428 4 0 0 1 0 0 0 0 0 ++429 2 0 0 0 0 0 0 0 0 ++432 2 0 0 0 0 0 1 0 0 ++fn=get_common_indeces.constprop.1 ++34 2 1 1 0 0 0 1 0 0 ++38 4 0 0 0 0 0 0 0 0 ++41 5 0 0 0 0 0 3 0 0 ++44 1 0 0 0 0 0 1 0 0 ++45 4 1 1 0 0 0 1 0 0 ++46 4 0 0 0 0 0 1 0 0 ++47 4 0 0 0 0 0 1 0 0 ++48 3 0 0 0 0 0 1 0 0 ++49 2 1 1 1 0 0 0 0 0 ++56 2 0 0 1 0 0 0 0 0 ++57 7 0 0 0 0 0 4 0 0 ++64 3 1 1 1 0 0 0 0 0 ++68 2 0 0 0 0 0 0 0 0 ++70 4 0 0 0 0 0 0 0 0 ++74 2 1 1 0 0 0 0 0 0 ++77 4 0 0 1 1 1 1 0 0 ++80 2 0 0 1 0 0 0 0 0 ++82 3 0 0 0 0 0 1 0 0 ++84 2 0 0 0 0 0 0 0 0 ++86 3 0 0 0 0 0 1 0 0 ++91 3 1 1 0 0 0 0 0 0 ++110 2 0 0 1 0 0 0 0 0 ++114 4 0 0 0 0 0 0 0 0 ++115 2 0 0 0 0 0 0 0 0 ++117 1 0 0 0 0 0 0 0 0 ++118 1 0 0 0 0 0 0 0 0 ++121 2 1 1 0 0 0 1 0 0 ++123 1 0 0 0 0 0 1 0 0 ++125 3 0 0 0 0 0 0 0 0 ++128 2 0 0 0 0 0 0 0 0 ++178 3 1 1 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/x86/dl-hwcap.h ++fn=_dl_important_hwcaps ++57 6 0 0 0 0 0 2 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/x86/dl-procinfo.h ++fn=_dl_load_cache_lookup ++39 16 1 1 0 0 0 4 0 0 ++42 32 0 0 0 0 0 8 2 2 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/x86_64/dl-machine.h ++fn=_dl_fixup ++242 4 0 0 0 0 0 4 0 0 ++fn=_dl_relocate_object ++76 26 0 0 7 0 0 0 0 0 ++82 8 1 1 8 3 0 0 0 0 ++86 12 0 0 4 4 3 0 0 0 ++92 4 0 0 0 0 0 4 0 0 ++100 12 1 1 4 0 0 0 0 0 ++120 8 0 0 4 0 0 0 0 0 ++122 8 0 0 0 0 0 4 0 0 ++124 16 1 1 4 0 0 0 0 0 ++131 15 1 1 5 4 1 0 0 0 ++276 300 0 0 0 0 0 0 0 0 ++297 300 0 0 0 0 0 0 0 0 ++301 300 1 1 0 0 0 0 0 0 ++308 6268 11 11 1205 125 101 918 6 0 ++310 667 0 0 268 0 0 0 0 0 ++313 536 2 2 134 0 0 0 0 0 ++316 10 1 1 4 0 0 0 0 0 ++319 4 0 0 0 0 0 0 0 0 ++320 6 0 0 2 0 0 0 0 0 ++321 4 0 0 0 0 0 0 0 0 ++325 2 1 1 0 0 0 2 0 0 ++332 8 0 0 2 0 0 2 0 0 ++335 900 0 0 150 3 3 0 0 0 ++430 60 1 1 20 0 0 0 0 0 ++434 80 0 0 20 1 0 0 0 0 ++439 60 0 0 40 2 2 0 0 0 ++448 60 0 0 20 0 0 20 8 8 ++458 520 1 1 260 17 16 130 19 13 ++481 21 0 0 0 0 0 7 0 0 ++491 12 0 0 0 0 0 6 0 0 ++535 3957 1 1 1319 333 330 0 0 0 ++540 2638 0 0 0 0 0 0 0 0 ++541 3957 0 0 1319 165 165 1319 253 246 ++551 280 0 0 140 0 0 0 0 0 ++555 202 0 0 0 0 0 0 0 0 ++557 303 0 0 101 2 0 0 0 0 ++558 101 0 0 101 15 14 0 0 0 ++575 78 0 0 78 1 1 0 0 0 ++577 39 0 0 0 0 0 39 0 0 ++578 39 0 0 0 0 0 39 2 2 ++fn=_dl_start ++59 3 0 0 1 1 1 0 0 0 ++301 27 0 0 0 0 0 0 0 0 ++310 45 0 0 18 1 1 0 0 0 ++313 36 0 0 9 7 7 0 0 0 ++335 55 0 0 9 1 1 0 0 0 ++354 27 1 1 9 1 1 9 2 2 ++422 1 0 0 0 0 0 0 0 0 ++540 78 0 0 39 5 5 0 0 0 ++541 117 1 1 39 5 5 39 21 21 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/../sysdeps/x86_64/dl-trampoline.h ++fn=_dl_runtime_resolve_xsave ++71 4 1 1 0 0 0 4 0 0 ++74 4 0 0 0 0 0 0 0 0 ++76 4 0 0 0 0 0 0 0 0 ++86 4 0 0 4 0 0 0 0 0 ++92 4 0 0 0 0 0 4 0 0 ++93 4 0 0 0 0 0 4 0 0 ++94 4 0 0 0 0 0 4 0 0 ++95 4 0 0 0 0 0 4 0 0 ++96 4 0 0 0 0 0 4 0 0 ++97 4 0 0 0 0 0 4 0 0 ++98 4 0 0 0 0 0 4 0 0 ++102 4 0 0 0 0 0 0 0 0 ++103 4 0 0 0 0 0 0 0 0 ++106 4 0 0 0 0 0 4 0 0 ++107 4 1 1 0 0 0 4 0 0 ++109 4 0 0 0 0 0 4 0 0 ++110 4 0 0 0 0 0 4 0 0 ++111 4 0 0 0 0 0 4 0 0 ++112 4 0 0 0 0 0 4 0 0 ++113 4 0 0 0 0 0 4 0 0 ++114 4 0 0 0 0 0 4 0 0 ++116 4 0 0 4 0 0 132 1 0 ++123 4 1 1 4 0 0 0 0 0 ++124 4 0 0 4 0 0 0 0 0 ++125 4 0 0 0 0 0 4 0 0 ++126 4 0 0 0 0 0 0 0 0 ++131 4 0 0 0 0 0 0 0 0 ++132 4 0 0 0 0 0 0 0 0 ++133 4 0 0 144 0 0 0 0 0 ++135 4 0 0 4 0 0 0 0 0 ++136 4 0 0 4 0 0 0 0 0 ++137 4 0 0 4 0 0 0 0 0 ++138 4 0 0 4 0 0 0 0 0 ++139 4 0 0 4 0 0 0 0 0 ++140 4 0 0 4 0 0 0 0 0 ++141 4 0 0 4 0 0 0 0 0 ++143 4 0 0 0 0 0 0 0 0 ++145 4 1 1 4 0 0 0 0 0 ++149 4 0 0 0 0 0 0 0 0 ++152 4 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/./dl-load.h ++fn=_dl_map_object_from_fd ++90 20 0 0 10 0 0 0 0 0 ++91 15 1 1 10 0 0 5 0 0 ++93 20 0 0 10 0 0 0 0 0 ++94 15 1 1 9 0 0 0 0 0 ++95 18 1 1 6 0 0 0 0 0 ++96 12 0 0 3 0 0 0 0 0 ++98 12 0 0 0 0 0 3 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/./dl-map-segments.h ++fn=_dl_map_object_from_fd ++50 10 0 0 5 0 0 0 0 0 ++56 35 1 1 15 0 0 15 1 1 ++60 15 1 1 5 0 0 0 0 0 ++63 15 0 0 5 0 0 5 0 0 ++64 10 0 0 0 0 0 5 0 0 ++66 10 0 0 0 0 0 0 0 0 ++73 60 1 1 20 0 0 5 0 0 ++80 10 0 0 10 0 0 0 0 0 ++90 50 1 1 10 0 0 0 0 0 ++92 30 0 0 15 0 0 5 0 0 ++94 50 1 1 15 0 0 5 0 0 ++104 40 0 0 20 0 0 0 0 0 ++110 10 0 0 5 0 0 0 0 0 ++111 5 0 0 0 0 0 0 0 0 ++112 25 0 0 5 0 0 0 0 0 ++113 10 0 0 0 0 0 0 0 0 ++120 10 1 1 0 0 0 0 0 0 ++123 10 0 0 5 0 0 0 0 0 ++131 45 0 0 10 0 0 15 0 0 ++137 10 1 1 0 0 0 0 0 0 ++141 16 0 0 2 0 0 2 0 0 ++144 4 0 0 0 0 0 0 0 0 ++149 10 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-cache.c ++fn=_dl_cache_libcmp ++141 86 1 1 86 29 29 0 0 0 ++142 560 0 0 0 0 0 0 0 0 ++144 1084 1 1 0 0 0 0 0 0 ++146 22 0 0 0 0 0 0 0 0 ++152 40 1 1 0 0 0 0 0 0 ++153 30 0 0 0 0 0 0 0 0 ++154 40 0 0 10 0 0 0 0 0 ++156 40 1 1 10 0 0 0 0 0 ++158 20 0 0 0 0 0 0 0 0 ++162 2 0 0 1 0 0 0 0 0 ++164 520 0 0 0 0 0 0 0 0 ++166 974 0 0 454 5 5 0 0 0 ++167 99 0 0 33 0 0 0 0 0 ++170 227 0 0 0 0 0 0 0 0 ++171 227 0 0 0 0 0 0 0 0 ++174 27 0 0 9 0 0 0 0 0 ++fn=_dl_load_cache_lookup ++187 36 1 1 0 0 0 24 0 0 ++195 8 1 1 4 0 0 0 0 0 ++198 12 0 0 4 1 1 0 0 0 ++201 5 1 1 0 0 0 1 0 0 ++209 5 1 1 1 0 0 0 0 0 ++210 7 0 0 3 1 1 0 0 0 ++214 1 0 0 0 0 0 1 0 0 ++217 4 1 1 1 0 0 0 0 0 ++220 2 0 0 0 0 0 1 0 0 ++221 3 0 0 0 0 0 0 0 0 ++222 8 1 1 3 2 2 0 0 0 ++243 16 0 0 6 0 0 0 0 0 ++249 8 0 0 0 0 0 0 0 0 ++258 12 0 0 0 0 0 4 0 0 ++260 4 0 0 4 0 0 0 0 0 ++264 24 1 1 4 0 0 8 0 0 ++266 8 0 0 0 0 0 0 0 0 ++270 56 2 2 16 0 0 12 0 0 ++271 12 0 0 4 0 0 0 0 0 ++285 970 9 9 137 29 29 76 0 0 ++297 11 2 2 4 0 0 0 0 0 ++301 8 0 0 4 0 0 0 0 0 ++305 8 0 0 4 0 0 0 0 0 ++313 36 1 1 4 0 0 4 0 0 ++314 12 0 0 0 0 0 4 0 0 ++315 8 0 0 0 0 0 4 0 0 ++316 32 0 0 28 0 0 0 0 0 ++fn=_dl_unload_cache ++325 1 0 0 0 0 0 0 0 0 ++326 4 1 1 1 1 0 0 0 0 ++328 2 0 0 1 0 0 1 0 0 ++329 1 1 1 0 0 0 1 0 0 ++331 2 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-debug.c ++fn=_dl_debug_initialize ++49 14 1 1 0 0 0 0 0 0 ++50 7 1 1 7 0 0 0 0 0 ++54 26 0 0 7 0 0 0 0 0 ++57 1 0 0 0 0 0 1 0 0 ++58 9 0 0 6 0 0 1 0 0 ++59 5 1 1 1 0 0 1 0 0 ++60 2 0 0 0 0 0 1 0 0 ++64 1 0 0 1 0 0 0 0 0 ++fn=_dl_debug_state ++74 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-deps.c ++fn=_dl_map_object_deps ++143 7 0 0 0 0 0 3 1 1 ++144 3 0 0 0 0 0 3 0 0 ++145 12 1 1 0 0 0 3 0 0 ++147 3 0 0 0 0 0 0 0 0 ++151 12 1 1 3 0 0 3 0 0 ++158 11 1 1 0 0 0 8 0 0 ++159 9 1 1 0 0 0 0 0 0 ++175 13 0 0 2 0 0 2 0 0 ++176 2 0 0 2 0 0 0 0 0 ++179 1 1 1 0 0 0 1 0 0 ++185 1 0 0 0 0 0 1 0 0 ++186 1 0 0 0 0 0 1 0 0 ++198 6 1 1 1 0 0 4 0 0 ++199 3 1 1 1 0 0 0 0 0 ++200 2 0 0 0 0 0 2 0 0 ++206 7 0 0 0 0 0 0 0 0 ++209 7 0 0 0 0 0 7 0 0 ++213 28 0 0 14 1 0 0 0 0 ++214 46 1 1 20 0 0 0 0 0 ++216 5 0 0 0 0 0 0 0 0 ++218 20 1 1 10 0 0 0 0 0 ++220 39 0 0 0 0 0 6 0 0 ++225 29 3 3 18 2 2 0 0 0 ++227 15 0 0 15 0 0 0 0 0 ++232 5 0 0 0 0 0 5 0 0 ++233 10 0 0 0 0 0 5 0 0 ++234 10 0 0 5 0 0 5 0 0 ++235 10 0 0 5 0 0 5 0 0 ++238 571 1 1 149 7 0 5 0 0 ++239 268 1 1 0 0 0 0 0 0 ++245 63 0 0 9 0 0 9 0 0 ++247 9 0 0 0 0 0 9 0 0 ++249 36 1 1 9 0 0 9 0 0 ++250 18 0 0 9 0 0 0 0 0 ++259 9 0 0 9 0 0 0 0 0 ++261 18 0 0 9 0 0 0 0 0 ++266 12 0 0 0 0 0 0 0 0 ++269 4 0 0 0 0 0 4 1 0 ++270 4 0 0 0 0 0 4 0 0 ++271 4 0 0 0 0 0 4 0 0 ++272 8 0 0 4 0 0 4 0 0 ++274 4 1 1 4 0 0 0 0 0 ++276 20 0 0 4 0 0 8 0 0 ++280 18 0 0 0 0 0 0 0 0 ++281 24 0 0 0 0 0 8 0 0 ++283 375 0 0 0 0 0 0 0 0 ++304 10 0 0 0 0 0 5 0 0 ++434 15 1 1 0 0 0 0 0 0 ++436 15 0 0 0 0 0 5 0 0 ++438 10 0 0 0 0 0 5 0 0 ++439 10 1 1 0 0 0 0 0 0 ++440 10 0 0 0 0 0 0 0 0 ++443 10 0 0 5 0 0 5 1 1 ++444 25 0 0 0 0 0 5 0 0 ++445 25 0 0 0 0 0 5 0 0 ++448 5 0 0 0 0 0 5 0 0 ++449 5 0 0 5 0 0 0 0 0 ++453 52 1 1 26 0 0 6 0 0 ++455 7 1 1 7 0 0 0 0 0 ++456 34 0 0 8 0 0 0 0 0 ++460 6 2 2 2 0 0 0 0 0 ++461 2 0 0 0 0 0 1 0 0 ++464 4 0 0 1 0 0 1 0 0 ++474 2 0 0 0 0 0 2 0 0 ++475 3 1 1 0 0 0 1 0 0 ++477 5 0 0 2 0 0 0 0 0 ++482 12 0 0 7 0 0 1 0 0 ++483 1 0 0 0 0 0 1 0 0 ++485 23 1 1 7 0 0 0 0 0 ++491 14 0 0 0 0 0 7 2 2 ++495 21 0 0 14 0 0 0 0 0 ++498 2 0 0 1 0 0 0 0 0 ++549 2 1 1 1 0 0 0 0 0 ++550 1 0 0 0 0 0 1 0 0 ++551 3 0 0 1 0 0 0 0 0 ++573 12 1 1 0 0 0 6 0 0 ++586 7 1 1 1 0 0 2 0 0 ++590 5 0 0 0 0 0 1 0 0 ++593 1 0 0 0 0 0 1 0 0 ++595 1 1 1 0 0 0 1 0 0 ++596 1 0 0 1 0 0 0 0 0 ++597 4 0 0 2 0 0 0 0 0 ++604 3 1 1 1 0 0 0 0 0 ++607 2 0 0 0 0 0 0 0 0 ++610 8 0 0 7 0 0 0 0 0 ++fn=openaux ++60 18 1 1 0 0 0 9 0 0 ++63 90 1 1 36 0 0 18 1 1 ++64 18 0 0 9 0 0 0 0 0 ++67 9 0 0 9 0 0 0 0 0 ++68 18 0 0 18 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-environ.c ++fn=_dl_next_ld_env_entry ++29 3 1 1 3 0 0 0 0 0 ++32 294 0 0 98 0 0 0 0 0 ++34 194 1 1 97 0 0 0 0 0 ++35 20 0 0 10 0 0 0 0 0 ++37 2 0 0 0 0 0 0 0 0 ++40 4 0 0 0 0 0 2 0 0 ++42 2 0 0 2 0 0 0 0 0 ++45 95 0 0 0 0 0 0 0 0 ++49 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-error-skeleton.c ++fn=_dl_catch_error ++213 14 1 1 0 0 0 6 0 0 ++215 8 0 0 0 0 0 2 0 0 ++216 4 0 0 2 0 0 2 0 0 ++217 4 0 0 2 0 0 2 0 0 ++218 4 0 0 2 0 0 2 0 0 ++220 10 1 1 8 0 0 0 0 0 ++fn=_dl_catch_exception ++175 44 1 1 0 0 0 33 0 0 ++187 22 0 0 0 0 0 22 2 2 ++188 22 0 0 0 0 0 11 0 0 ++190 22 0 0 11 0 0 11 0 0 ++191 22 1 1 0 0 0 11 0 0 ++194 66 0 0 0 0 0 11 0 0 ++196 33 0 0 22 0 0 11 0 0 ++197 22 1 1 11 0 0 11 0 0 ++198 44 0 0 11 0 0 22 0 0 ++207 44 0 0 22 0 0 0 0 0 ++fn=_dl_receive_error ++226 3 0 0 0 0 0 2 0 0 ++227 1 0 0 1 0 0 0 0 0 ++228 1 0 0 1 0 0 0 0 0 ++231 1 0 0 0 0 0 1 0 0 ++232 1 0 0 0 0 0 1 0 0 ++234 2 0 0 0 0 0 1 0 0 ++236 1 1 1 0 0 0 1 0 0 ++237 1 0 0 0 0 0 1 0 0 ++238 4 0 0 3 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-fini.c ++fn=_dl_fini ++30 8 1 1 0 0 0 6 0 0 ++47 6 0 0 0 0 0 1 0 0 ++50 7 1 1 1 0 0 0 0 0 ++53 2 1 1 1 0 0 1 0 0 ++55 1 0 0 1 0 0 0 0 0 ++58 2 0 0 0 0 0 0 0 0 ++60 8 0 0 3 0 0 1 0 0 ++65 1 0 0 0 0 0 1 0 0 ++68 7 1 1 0 0 0 0 0 0 ++73 22 0 0 7 0 0 0 0 0 ++75 14 0 0 7 0 0 0 0 0 ++77 14 0 0 0 0 0 0 0 0 ++79 14 0 0 0 0 0 7 0 0 ++80 7 0 0 0 0 0 7 3 0 ++81 7 1 1 0 0 0 0 0 0 ++85 7 0 0 7 0 0 0 0 0 ++87 6 0 0 0 0 0 0 0 0 ++88 4 0 0 0 0 0 0 0 0 ++94 10 2 2 0 0 0 1 0 0 ++104 2 0 0 1 0 0 1 0 0 ++109 22 1 1 8 0 0 1 0 0 ++111 7 1 1 7 0 0 0 0 0 ++113 21 0 0 7 0 0 0 0 0 ++116 14 0 0 0 0 0 7 0 0 ++119 21 0 0 7 1 0 0 0 0 ++120 6 0 0 2 0 0 0 0 0 ++123 10 0 0 5 0 0 0 0 0 ++134 15 0 0 10 2 0 0 0 0 ++135 5 1 1 5 0 0 0 0 0 ++136 10 0 0 5 0 0 0 0 0 ++137 54 1 1 12 1 0 5 0 0 ++138 14 0 0 7 1 0 7 0 0 ++142 10 0 0 0 0 0 0 0 0 ++143 15 0 0 10 1 0 5 0 0 ++149 42 0 0 14 0 0 0 0 0 ++165 14 0 0 7 0 0 0 0 0 ++171 6 0 0 2 0 0 0 0 0 ++177 2 0 0 1 0 0 0 0 0 ++184 8 0 0 7 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-hwcaps.c ++fn=_dl_important_hwcaps ++42 13 2 2 0 0 0 10 2 2 ++43 8 0 0 1 0 0 3 0 0 ++46 3 0 0 0 0 0 0 0 0 ++55 18 1 1 1 0 0 0 0 0 ++56 6 0 0 0 0 0 0 0 0 ++57 4 0 0 0 0 0 0 0 0 ++65 3 0 0 1 0 0 0 0 0 ++69 3 1 1 0 0 0 0 0 0 ++129 1 0 0 0 0 0 0 0 0 ++131 4 0 0 0 0 0 0 0 0 ++146 7 1 1 0 0 0 0 0 0 ++147 1 0 0 0 0 0 0 0 0 ++149 2 0 0 0 0 0 0 0 0 ++166 1 0 0 0 0 0 0 0 0 ++183 19 1 1 2 0 0 1 0 0 ++184 6 1 1 2 0 0 2 1 1 ++186 1 0 0 0 0 0 1 1 1 ++187 2 0 0 0 0 0 2 0 0 ++188 7 0 0 1 0 0 0 0 0 ++191 3 0 0 1 0 0 0 0 0 ++193 1 0 0 0 0 0 1 0 0 ++194 6 1 1 1 0 0 1 0 0 ++198 2 0 0 0 0 0 1 0 0 ++199 1 0 0 0 0 0 1 0 0 ++202 3 0 0 1 0 0 0 0 0 ++205 4 0 0 0 0 0 1 0 0 ++209 8 1 1 1 0 0 2 0 0 ++210 4 0 0 1 0 0 0 0 0 ++212 3 0 0 0 0 0 0 0 0 ++213 2 1 1 0 0 0 0 0 0 ++214 3 0 0 1 0 0 0 0 0 ++215 2 0 0 0 0 0 0 0 0 ++222 2 0 0 0 0 0 0 0 0 ++228 11 1 1 1 0 0 5 0 0 ++229 5 0 0 0 0 0 1 0 0 ++230 4 1 1 2 0 0 0 0 0 ++259 13 0 0 1 0 0 5 0 0 ++262 4 1 1 1 0 0 1 0 0 ++265 2 1 1 0 0 0 0 0 0 ++269 1 0 0 1 0 0 0 0 0 ++272 2 0 0 0 0 0 0 0 0 ++275 12 0 0 6 0 0 4 0 0 ++278 12 0 0 3 0 0 0 0 0 ++279 24 2 2 2 0 0 6 0 0 ++280 6 0 0 2 0 0 2 0 0 ++283 10 1 1 2 0 0 4 0 0 ++285 7 0 0 3 0 0 0 0 0 ++290 28 1 1 2 0 0 0 0 0 ++291 16 0 0 0 0 0 8 1 1 ++295 22 0 0 0 0 0 0 0 0 ++298 51 0 0 0 0 0 0 0 0 ++299 72 1 1 0 0 0 0 0 0 ++300 36 0 0 24 0 0 0 0 0 ++302 6 0 0 0 0 0 0 0 0 ++305 3 0 0 1 0 0 0 0 0 ++306 2 1 1 0 0 0 0 0 0 ++307 15 1 1 1 0 0 0 0 0 ++309 6 0 0 0 0 0 0 0 0 ++310 2 0 0 2 0 0 0 0 0 ++313 4 0 0 0 0 0 2 0 0 ++320 19 0 0 6 0 0 4 0 0 ++321 4 0 0 0 0 0 0 0 0 ++323 8 0 0 0 0 0 0 0 0 ++326 3 0 0 2 0 0 1 0 0 ++328 2 1 1 1 0 0 0 0 0 ++329 9 1 1 7 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-init.c ++fn=_dl_init ++30 24 1 1 8 0 0 0 0 0 ++36 14 0 0 0 0 0 7 0 0 ++39 28 1 1 14 1 0 0 0 0 ++40 3 0 0 0 0 0 0 0 0 ++44 18 1 1 6 3 0 0 0 0 ++45 3 1 1 1 0 0 0 0 0 ++49 10 0 0 5 0 0 0 0 0 ++58 36 1 1 15 5 0 6 0 0 ++61 1 0 0 1 0 0 0 0 0 ++62 10 0 0 0 0 0 0 0 0 ++68 15 1 1 10 3 0 0 0 0 ++70 14 0 0 10 1 0 0 0 0 ++71 53 1 1 9 0 0 7 0 0 ++72 33 0 0 7 1 0 7 0 0 ++79 11 2 2 0 0 0 6 0 0 ++80 1 0 0 1 1 0 0 0 0 ++81 1 0 0 1 0 0 0 0 0 ++84 3 0 0 1 0 0 0 0 0 ++87 2 0 0 0 0 0 1 0 0 ++92 2 0 0 0 0 0 0 0 0 ++117 2 0 0 1 0 0 0 0 0 ++118 24 1 1 0 0 0 0 0 0 ++119 21 0 0 14 0 0 0 0 0 ++125 8 0 0 7 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-load.c ++fn=_dl_init_paths ++623 9 1 1 0 0 0 7 0 0 ++636 6 1 1 2 0 0 2 1 1 ++640 1 0 0 0 0 0 1 0 0 ++641 2 0 0 0 0 0 1 0 0 ++642 3 0 0 0 0 0 0 0 0 ++649 4 1 1 0 0 0 0 0 0 ++650 5 0 0 1 0 0 2 0 0 ++653 6 0 0 0 0 0 2 0 0 ++655 2 0 0 0 0 0 0 0 0 ++661 1 0 0 0 0 0 1 0 0 ++662 1 0 0 0 0 0 1 0 0 ++664 1 0 0 0 0 0 0 0 0 ++670 3 0 0 0 0 0 3 0 0 ++672 8 0 0 0 0 0 4 0 0 ++673 4 2 2 0 0 0 4 3 3 ++675 5 0 0 0 0 0 4 0 0 ++676 8 0 0 3 0 0 4 1 1 ++677 7 0 0 0 0 0 0 0 0 ++680 6 0 0 3 2 2 0 0 0 ++681 24 1 1 8 0 0 4 0 0 ++684 30 0 0 3 0 0 5 0 0 ++690 1 1 1 0 0 0 1 1 1 ++691 1 0 0 0 0 0 1 0 0 ++695 1 0 0 1 0 0 0 0 0 ++696 2 0 0 0 0 0 0 0 0 ++698 4 0 0 1 0 0 0 0 0 ++700 3 0 0 1 0 0 0 0 0 ++717 2 0 0 0 0 0 1 0 0 ++719 3 1 1 1 0 0 0 0 0 ++733 2 2 2 0 0 0 1 0 0 ++738 5 1 1 2 0 0 0 0 0 ++740 12 2 2 0 0 0 2 0 0 ++744 2 0 0 0 0 0 0 0 0 ++745 145 1 1 36 0 0 0 0 0 ++746 146 0 0 0 0 0 0 0 0 ++749 1 0 0 0 0 0 1 0 0 ++750 1 0 0 0 0 0 1 0 0 ++751 2 0 0 0 0 0 0 0 0 ++757 7 0 0 0 0 0 1 0 0 ++760 3 0 0 2 0 0 0 0 0 ++766 1 0 0 0 0 0 1 0 0 ++770 8 0 0 7 0 0 0 0 0 ++fn=_dl_map_object ++601 42 2 2 14 0 0 0 0 0 ++604 4 0 0 0 0 0 0 0 0 ++607 6 1 1 2 0 0 0 0 0 ++610 15 1 1 8 0 0 2 0 0 ++2080 99 1 1 0 0 0 88 2 2 ++2082 5 0 0 0 0 0 5 0 0 ++2088 22 0 0 0 0 0 0 0 0 ++2089 44 0 0 11 1 1 0 0 0 ++2092 193 1 1 46 0 0 0 0 0 ++2097 287 1 1 41 0 0 0 0 0 ++2099 205 0 0 0 0 0 41 2 2 ++2103 70 0 0 35 0 0 0 0 0 ++2104 105 0 0 35 0 0 0 0 0 ++2107 17 0 0 17 0 0 0 0 0 ++2108 34 0 0 34 0 0 0 0 0 ++2109 68 0 0 0 0 0 17 0 0 ++2125 15 1 1 5 0 0 0 0 0 ++2135 15 0 0 5 0 0 0 0 0 ++2169 5 0 0 0 0 0 5 2 2 ++2171 29 2 2 4 0 0 5 0 0 ++2175 16 0 0 0 0 0 8 0 0 ++2177 8 0 0 0 0 0 0 0 0 ++2184 16 1 1 4 0 0 0 0 0 ++2188 16 1 1 4 0 0 4 0 0 ++2189 8 0 0 0 0 0 4 0 0 ++2193 18 0 0 6 0 0 0 0 0 ++2194 1 0 0 0 0 0 0 0 0 ++2196 28 0 0 0 0 0 12 0 0 ++2208 12 1 1 0 0 0 0 0 0 ++2209 28 1 1 4 0 0 4 0 0 ++2219 8 1 1 4 0 0 0 0 0 ++2220 60 1 1 4 0 0 16 0 0 ++2226 20 0 0 0 0 0 0 0 0 ++2227 1 0 0 0 0 0 0 0 0 ++2235 4 0 0 0 0 0 4 0 0 ++2249 8 1 1 0 0 0 0 0 0 ++2250 4 1 1 1 0 0 0 0 0 ++2251 12 0 0 4 0 0 0 0 0 ++2255 12 1 1 0 0 0 4 0 0 ++2257 8 0 0 0 0 0 0 0 0 ++2261 8 0 0 0 0 0 0 0 0 ++2269 12 0 0 4 0 0 0 0 0 ++2292 44 1 1 0 0 0 12 0 0 ++2296 20 0 0 12 0 0 0 0 0 ++2297 8 0 0 0 0 0 4 0 0 ++2314 8 1 1 4 0 0 0 0 0 ++2320 1 0 0 0 0 0 1 0 0 ++2322 6 0 0 0 0 0 1 0 0 ++2323 5 1 1 0 0 0 1 0 0 ++2327 10 0 0 0 0 0 2 0 0 ++2330 5 0 0 3 0 0 0 0 0 ++2342 19 1 1 0 0 0 0 0 0 ++2344 8 0 0 0 0 0 0 0 0 ++2388 10 0 0 5 0 0 5 0 0 ++2389 75 1 1 15 0 0 25 0 0 ++2391 99 1 1 77 0 0 0 0 0 ++fn=_dl_map_object_from_fd ++369 4 1 1 2 0 0 0 0 0 ++808 75 2 2 0 0 0 55 2 2 ++818 20 0 0 5 0 0 10 1 1 ++819 5 1 1 0 0 0 5 0 0 ++834 95 0 0 30 0 0 0 0 0 ++835 40 0 0 20 0 0 0 0 0 ++852 10 2 2 5 0 0 0 0 0 ++876 20 0 0 5 0 0 5 0 0 ++886 10 0 0 5 0 0 0 0 0 ++908 20 0 0 10 0 0 0 0 0 ++940 10 0 0 0 0 0 0 0 0 ++943 40 0 0 25 0 0 5 0 0 ++944 10 0 0 0 0 0 0 0 0 ++955 15 1 1 10 0 0 5 4 4 ++956 20 0 0 10 0 0 10 0 0 ++957 10 0 0 5 0 0 5 0 0 ++959 15 0 0 0 0 0 0 0 0 ++960 20 0 0 10 0 0 0 0 0 ++961 5 0 0 0 0 0 0 0 0 ++976 15 0 0 0 0 0 10 0 0 ++978 5 0 0 0 0 0 5 0 0 ++980 50 1 1 0 0 0 10 0 0 ++981 5 0 0 0 0 0 0 0 0 ++982 5 0 0 0 0 0 0 0 0 ++988 255 1 1 0 0 0 0 0 0 ++989 297 1 1 40 2 2 0 0 0 ++995 10 0 0 5 0 0 0 0 0 ++1000 10 0 0 5 0 0 5 0 0 ++1001 20 0 0 5 0 0 5 0 0 ++1006 4 0 0 2 0 0 2 0 0 ++1007 2 0 0 0 0 0 0 0 0 ++1012 50 1 1 20 0 0 0 0 0 ++1017 80 0 0 20 0 0 0 0 0 ++1025 40 0 0 10 0 0 0 0 0 ++1026 40 1 1 0 0 0 10 4 4 ++1027 50 0 0 10 0 0 10 0 0 ++1028 10 0 0 0 0 0 10 2 2 ++1029 20 0 0 10 0 0 10 0 0 ++1030 20 0 0 0 0 0 10 2 2 ++1034 20 1 1 0 0 0 0 0 0 ++1035 20 0 0 10 0 0 0 0 0 ++1039 20 0 0 0 0 0 0 0 0 ++1040 80 0 0 20 0 0 10 0 0 ++1050 10 1 1 0 0 0 0 0 0 ++1053 3 0 0 1 0 0 0 0 0 ++1057 1 0 0 0 0 0 1 1 1 ++1058 3 1 1 2 0 0 1 0 0 ++1059 2 0 0 0 0 0 0 0 0 ++1060 1 0 0 0 0 0 0 0 0 ++1062 3 0 0 0 0 0 1 0 0 ++1063 2 0 0 1 0 0 1 0 0 ++1066 1 0 0 0 0 0 1 0 0 ++1070 4 0 0 1 0 0 0 0 0 ++1076 3 0 0 1 0 0 2 0 0 ++1077 1 0 0 0 0 0 0 0 0 ++1085 25 0 0 5 0 0 5 0 0 ++1092 10 1 1 5 0 0 5 0 0 ++1093 5 0 0 0 0 0 0 0 0 ++1096 10 1 1 5 0 0 5 2 2 ++1097 10 0 0 5 0 0 5 0 0 ++1098 5 0 0 0 0 0 0 0 0 ++1101 20 0 0 5 0 0 0 0 0 ++1110 10 1 1 0 0 0 0 0 0 ++1120 50 0 0 20 0 0 10 0 0 ++1132 20 1 1 10 0 0 0 0 0 ++1141 15 1 1 5 0 0 5 0 0 ++1148 10 1 1 0 0 0 0 0 0 ++1163 15 0 0 5 0 0 0 0 0 ++1182 10 0 0 5 0 0 5 0 0 ++1184 25 1 1 10 0 0 0 0 0 ++1238 15 0 0 5 4 4 0 0 0 ++1239 2 0 0 1 0 0 1 0 0 ++1242 20 0 0 5 0 0 5 0 0 ++1251 10 0 0 5 0 0 0 0 0 ++1253 20 1 1 10 0 0 5 0 0 ++1255 10 0 0 5 0 0 0 0 0 ++1271 10 0 0 0 0 0 5 0 0 ++1275 10 0 0 5 0 0 0 0 0 ++1276 10 0 0 5 0 0 0 0 0 ++1293 10 1 1 5 0 0 0 0 0 ++1294 2 0 0 0 0 0 2 0 0 ++1297 15 0 0 5 0 0 10 0 0 ++1302 10 0 0 5 0 0 0 0 0 ++1312 10 0 0 5 0 0 0 0 0 ++1322 15 1 1 5 0 0 5 0 0 ++1326 15 0 0 5 0 0 0 0 0 ++1346 45 0 0 35 0 0 0 0 0 ++fn=expand_dynamic_string_token ++320 21 1 1 0 0 0 12 0 0 ++330 15 0 0 0 0 0 3 0 0 ++334 6 0 0 0 0 0 0 0 0 ++345 15 0 0 12 0 0 0 0 0 ++fn=fillin_rpath ++389 16 2 2 0 0 0 12 0 0 ++391 1 0 0 0 0 0 0 0 0 ++393 24 1 1 8 0 0 4 0 0 ++396 2 0 0 0 0 0 1 0 0 ++397 1 0 0 0 0 0 0 0 0 ++400 6 0 0 3 0 0 0 0 0 ++402 8 0 0 2 0 0 2 0 0 ++406 4 0 0 0 0 0 0 0 0 ++411 4 0 0 0 0 0 2 0 0 ++412 4 0 0 0 0 0 0 0 0 ++419 14 2 2 2 0 0 0 0 0 ++424 8 0 0 0 0 0 4 0 0 ++428 60 1 1 18 0 0 0 0 0 ++429 30 0 0 15 0 0 0 0 0 ++447 12 1 1 3 0 0 3 0 0 ++450 3 0 0 0 0 0 3 0 0 ++451 21 1 1 6 0 0 6 0 0 ++453 9 0 0 3 0 0 0 0 0 ++457 6 0 0 0 0 0 6 1 1 ++458 3 0 0 0 0 0 0 0 0 ++459 12 0 0 0 0 0 6 1 1 ++460 6 1 1 3 0 0 3 0 0 ++462 6 0 0 3 0 0 0 0 0 ++468 12 0 0 3 0 0 0 0 0 ++469 120 2 2 3 0 0 3 0 0 ++470 36 1 1 0 0 0 15 0 0 ++472 6 0 0 3 0 0 3 0 0 ++473 9 1 1 3 0 0 0 0 0 ++478 6 1 1 0 0 0 3 0 0 ++480 3 0 0 0 0 0 3 0 0 ++481 3 1 1 0 0 0 3 0 0 ++484 9 0 0 0 0 0 3 0 0 ++486 9 1 1 3 0 0 3 0 0 ++490 1 0 0 0 0 0 1 0 0 ++493 9 0 0 7 0 0 0 0 0 ++fn=open_path ++1932 32 1 1 0 0 0 24 2 2 ++1933 8 0 0 4 0 0 4 1 1 ++1936 4 1 1 0 0 0 4 0 0 ++1937 4 0 0 0 0 0 4 0 0 ++1939 8 0 0 0 0 0 0 0 0 ++1944 72 1 1 12 0 0 28 2 2 ++1947 36 0 0 24 0 0 0 0 0 ++1951 36 0 0 0 0 0 0 0 0 ++1956 48 0 0 0 0 0 12 0 0 ++1963 60 1 1 24 0 0 24 2 2 ++1964 330 1 1 0 0 0 0 0 0 ++1967 192 0 0 96 0 0 0 0 0 ++1971 510 1 1 306 0 0 102 0 0 ++1974 102 0 0 0 0 0 51 0 0 ++1977 153 0 0 51 0 0 0 0 0 ++1980 510 1 1 255 0 0 102 1 1 ++1982 255 0 0 153 0 0 0 0 0 ++1984 32 0 0 0 0 0 0 0 0 ++1989 32 1 1 16 0 0 0 0 0 ++1990 128 0 0 64 0 0 0 0 0 ++1996 289 3 3 107 0 0 28 0 0 ++1998 96 0 0 16 0 0 16 0 0 ++1999 2 0 0 1 0 0 0 0 0 ++2001 39 0 0 0 0 0 16 0 0 ++2008 140 0 0 0 0 0 0 0 0 ++2010 70 0 0 0 0 0 0 0 0 ++2018 24 0 0 0 0 0 12 0 0 ++2028 90 0 0 0 0 0 0 0 0 ++2046 8 0 0 0 0 0 0 0 0 ++2049 64 1 1 8 0 0 0 0 0 ++2054 12 0 0 12 0 0 0 0 0 ++2056 48 1 1 36 0 0 0 0 0 ++2059 12 0 0 4 0 0 0 0 0 ++2073 36 1 1 28 0 0 0 0 0 ++fn=open_verify.constprop.7 ++1598 784 1 1 56 0 0 504 5 5 ++1637 278 0 0 56 0 0 0 0 0 ++1650 51 0 0 0 0 0 0 0 0 ++1668 280 1 1 56 0 0 56 1 1 ++1670 117 0 0 0 0 0 0 0 0 ++1680 5 0 0 0 0 0 5 0 0 ++1681 10 0 0 0 0 0 5 0 0 ++1686 30 1 1 0 0 0 5 0 0 ++1688 10 0 0 0 0 0 0 0 0 ++1690 10 0 0 5 0 0 5 0 0 ++1692 10 0 0 0 0 0 0 0 0 ++1698 10 0 0 0 0 0 0 0 0 ++1714 82 5 5 46 4 4 0 0 0 ++1788 10 0 0 5 0 0 0 0 0 ++1793 10 0 0 5 0 0 0 0 0 ++1795 20 0 0 5 0 0 0 0 0 ++1801 10 0 0 0 0 0 0 0 0 ++1812 10 0 0 5 0 0 0 0 0 ++1818 20 1 1 5 0 0 0 0 0 ++1819 20 0 0 5 0 0 0 0 0 ++1820 5 0 0 0 0 0 0 0 0 ++1825 4 1 1 2 0 0 0 0 0 ++1840 187 0 0 0 0 0 0 0 0 ++1842 90 1 1 40 12 12 0 0 0 ++1855 15 1 1 0 0 0 0 0 0 ++1858 20 0 0 10 0 0 0 0 0 ++1859 5 0 0 0 0 0 0 0 0 ++1868 48 1 1 32 3 3 0 0 0 ++1870 5 0 0 0 0 0 0 0 0 ++1871 60 1 1 10 0 0 0 0 0 ++1874 15 0 0 0 0 0 0 0 0 ++1879 3 0 0 0 0 0 0 0 0 ++1880 6 0 0 0 0 0 0 0 0 ++1883 6 0 0 0 0 0 0 0 0 ++1886 6 0 0 3 0 0 0 0 0 ++1887 12 0 0 3 0 0 0 0 0 ++1888 3 0 0 3 0 0 0 0 0 ++1889 9 0 0 3 0 0 0 0 0 ++1890 9 1 1 3 0 0 0 0 0 ++1918 504 1 1 392 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-lookup.c ++fn=_dl_lookup_symbol_x ++554 268 0 0 0 0 0 0 0 0 ++555 8466 0 0 2083 109 101 0 0 0 ++556 7796 1 1 0 0 0 0 0 0 ++790 1876 2 2 134 0 0 1206 3 0 ++792 268 0 0 0 0 0 134 0 0 ++793 268 0 0 0 0 0 134 0 0 ++796 134 0 0 134 1 0 0 0 0 ++800 628 1 1 247 0 0 0 0 0 ++804 1474 1 1 268 0 0 536 0 0 ++805 402 0 0 134 4 0 0 0 0 ++811 498 0 0 166 0 0 0 0 0 ++813 1742 1 1 670 0 0 938 1 0 ++816 638 0 0 118 0 0 0 0 0 ++819 64 0 0 0 0 0 0 0 0 ++841 268 1 1 134 0 0 0 0 0 ++843 96 1 1 16 0 0 0 0 0 ++860 16 1 1 0 0 0 16 0 0 ++861 32 0 0 0 0 0 0 0 0 ++865 826 0 0 236 0 0 0 0 0 ++896 118 0 0 0 0 0 0 0 0 ++905 472 0 0 118 0 0 0 0 0 ++919 354 1 1 118 1 0 0 0 0 ++920 2 1 1 0 0 0 1 0 0 ++922 472 0 0 236 0 0 0 0 0 ++927 118 0 0 0 0 0 118 0 0 ++929 1238 0 0 938 0 0 0 0 0 ++fn=_dl_setup_hash ++939 21 1 1 7 0 0 0 0 0 ++943 7 0 0 7 0 0 0 0 0 ++947 14 0 0 7 7 7 7 1 1 ++948 7 0 0 7 0 0 0 0 0 ++949 7 0 0 7 1 1 0 0 0 ++951 21 0 0 0 0 0 0 0 0 ++952 7 0 0 0 0 0 7 0 0 ++953 21 1 1 7 0 0 7 0 0 ++955 7 0 0 0 0 0 7 0 0 ++956 14 0 0 0 0 0 0 0 0 ++958 7 0 0 0 0 0 7 0 0 ++960 21 0 0 0 0 0 7 0 0 ++961 7 0 0 7 0 0 0 0 0 ++fn=do_lookup_x ++78 826 1 1 354 10 10 0 0 0 ++90 1507 1 1 0 0 0 642 0 0 ++93 660 0 0 330 0 0 106 0 0 ++97 118 0 0 118 0 0 0 0 0 ++98 236 1 1 118 0 0 0 0 0 ++100 226 0 0 0 0 0 0 0 0 ++119 113 0 0 113 18 9 0 0 0 ++120 1017 1 1 452 4 0 0 0 0 ++121 1130 1 1 452 2 0 339 0 0 ++148 10 1 1 0 0 0 0 0 0 ++150 25 0 0 10 3 3 0 0 0 ++180 91 2 2 52 0 0 0 0 0 ++294 521 0 0 0 0 0 0 0 0 ++338 1742 1 1 134 0 0 1474 5 1 ++339 134 0 0 134 1 0 0 0 0 ++344 268 0 0 134 0 0 0 0 0 ++345 134 0 0 134 0 0 0 0 0 ++349 1278 1 1 1278 9 0 0 0 0 ++352 1278 0 0 639 0 0 0 0 0 ++356 2082 2 2 134 0 0 134 0 0 ++360 1278 0 0 639 7 0 0 0 0 ++364 1278 0 0 639 1 0 0 0 0 ++370 1917 0 0 639 6 0 0 0 0 ++374 131 0 0 0 0 0 131 0 0 ++375 131 0 0 0 0 0 131 0 0 ++378 1278 1 1 1278 14 0 0 0 0 ++379 1917 0 0 1278 3 0 639 0 0 ++382 639 0 0 639 0 0 0 0 0 ++383 1278 0 0 0 0 0 0 0 0 ++385 639 0 0 639 57 38 0 0 0 ++386 268 0 0 0 0 0 134 0 0 ++387 1278 0 0 1278 0 0 0 0 0 ++390 3195 1 1 1278 0 0 0 0 0 ++393 4473 0 0 0 0 0 0 0 0 ++396 262 0 0 262 68 59 0 0 0 ++397 393 1 1 0 0 0 0 0 0 ++398 262 0 0 0 0 0 0 0 0 ++400 393 0 0 131 0 0 131 0 0 ++403 1400 1 1 560 87 75 0 0 0 ++405 472 0 0 118 0 0 0 0 0 ++406 354 0 0 118 41 35 0 0 0 ++407 236 0 0 0 0 0 0 0 0 ++413 486 0 0 0 0 0 0 0 0 ++421 268 0 0 0 0 0 0 0 0 ++446 26 0 0 13 0 0 0 0 0 ++452 1180 1 1 590 0 0 0 0 0 ++503 236 0 0 0 0 0 0 0 0 ++506 888 1 1 118 0 0 0 0 0 ++510 42 0 0 14 1 0 0 0 0 ++522 708 1 1 354 0 0 354 0 0 ++524 118 0 0 0 0 0 0 0 0 ++540 3358 0 0 1293 1 0 0 0 0 ++541 1148 0 0 164 0 0 328 1 0 ++544 1563 0 0 0 0 0 0 0 0 ++547 32 0 0 0 0 0 0 0 0 ++548 1072 0 0 938 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-minimal.c ++fn=calloc ++92 14 1 1 0 0 0 0 0 0 ++96 14 0 0 0 0 0 0 0 0 ++99 28 0 0 0 0 0 0 0 0 ++100 42 0 0 0 0 0 0 0 0 ++103 14 1 1 0 0 0 0 0 0 ++fn=free ++111 12 0 0 6 0 0 0 0 0 ++fn=malloc ++49 6 0 0 0 0 0 4 0 0 ++50 159 1 1 79 0 0 0 0 0 ++55 5 0 0 1 0 0 1 0 0 ++56 2 1 1 1 0 0 0 0 0 ++57 2 0 0 0 0 0 0 0 0 ++61 120 1 1 0 0 0 40 0 0 ++64 272 0 0 0 0 0 0 0 0 ++69 8 1 1 2 0 0 0 0 0 ++70 4 0 0 0 0 0 0 0 0 ++72 2 0 0 0 0 0 0 0 0 ++73 16 0 0 0 0 0 2 0 0 ++75 4 0 0 0 0 0 0 0 0 ++77 6 0 0 2 0 0 0 0 0 ++79 6 0 0 0 0 0 2 0 0 ++82 40 0 0 0 0 0 40 0 0 ++83 40 1 1 0 0 0 40 0 0 ++85 86 0 0 44 0 0 0 0 0 ++fn=strsep ++265 8 1 1 4 0 0 0 0 0 ++267 4 0 0 4 0 0 0 0 0 ++268 8 0 0 0 0 0 0 0 0 ++272 186 2 2 36 0 0 0 0 0 ++277 136 0 0 68 0 0 0 0 0 ++279 198 0 0 66 0 0 0 0 0 ++283 4 0 0 0 0 0 2 0 0 ++287 33 0 0 0 0 0 0 0 0 ++290 3 0 0 0 0 0 3 0 0 ++294 4 0 0 4 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-misc.c ++fn=_dl_name_match_p ++282 1265 1 1 0 0 0 506 0 0 ++283 1012 0 0 253 3 0 253 1 1 ++284 268 0 0 0 0 0 0 0 0 ++286 253 0 0 253 0 0 0 0 0 ++288 1010 0 0 0 0 0 0 0 0 ++289 1335 1 1 267 7 0 267 0 0 ++292 252 0 0 252 0 0 0 0 0 ++294 238 0 0 0 0 0 0 0 0 ++295 1265 0 0 759 0 0 0 0 0 ++fn=_dl_sysdep_read_whole_file ++44 8 2 2 0 0 0 4 0 0 ++47 3 0 0 0 0 0 1 0 0 ++48 2 0 0 0 0 0 0 0 0 ++50 7 0 0 0 0 0 1 0 0 ++52 2 0 0 1 0 0 1 0 0 ++55 2 0 0 0 0 0 0 0 0 ++57 8 1 1 0 0 0 1 0 0 ++68 2 0 0 0 0 0 1 0 0 ++71 7 0 0 5 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-object.c ++fn=_dl_add_to_namespace_list ++31 30 1 1 0 0 0 18 0 0 ++33 18 0 0 6 0 0 6 0 0 ++35 52 0 0 6 0 0 0 0 0 ++38 60 0 0 20 0 0 0 0 0 ++40 5 0 0 0 0 0 5 0 0 ++42 5 0 0 0 0 0 5 0 0 ++45 2 0 0 0 0 0 1 0 0 ++46 18 1 1 6 0 0 0 0 0 ++47 12 0 0 6 0 0 6 0 0 ++48 12 0 0 0 0 0 6 0 0 ++50 12 0 0 6 0 0 0 0 0 ++51 18 0 0 18 0 0 0 0 0 ++fn=_dl_new_object ++59 78 1 1 0 0 0 48 3 3 ++60 36 1 1 0 0 0 18 0 0 ++66 36 0 0 6 0 0 0 0 0 ++68 12 0 0 0 0 0 0 0 0 ++73 30 1 1 0 0 0 12 0 0 ++76 12 0 0 0 0 0 0 0 0 ++79 6 0 0 0 0 0 6 4 4 ++80 18 0 0 6 0 0 6 6 6 ++84 12 1 1 0 0 0 6 2 2 ++85 48 0 0 18 0 0 18 4 4 ++87 6 0 0 0 0 0 6 0 0 ++95 36 0 0 12 0 0 6 1 1 ++96 30 0 0 6 6 6 6 0 0 ++99 12 1 1 6 0 0 0 0 0 ++100 17 1 1 5 0 0 6 6 6 ++101 6 0 0 0 0 0 6 2 2 ++105 6 0 0 0 0 0 6 0 0 ++108 49 0 0 0 0 0 0 0 0 ++110 32 1 1 0 0 0 16 4 4 ++120 12 0 0 0 0 0 6 2 2 ++121 6 0 0 0 0 0 6 6 6 ++124 1 1 1 0 0 0 0 0 0 ++126 36 1 1 6 0 0 0 0 0 ++128 15 0 0 0 0 0 5 2 2 ++131 16 1 1 0 0 0 0 0 0 ++135 21 0 0 7 0 0 0 0 0 ++139 26 0 0 0 0 0 0 0 0 ++147 1 1 1 0 0 0 1 0 0 ++150 12 0 0 0 0 0 6 0 0 ++153 18 0 0 0 0 0 6 0 0 ++155 20 0 0 5 0 0 10 0 0 ++159 20 1 1 5 0 0 0 0 0 ++163 20 0 0 0 0 0 5 0 0 ++164 10 0 0 0 0 0 0 0 0 ++172 5 0 0 0 0 0 0 0 0 ++176 5 0 0 0 0 0 0 0 0 ++209 106 0 0 5 0 0 5 0 0 ++214 91 0 0 0 0 0 0 0 0 ++215 192 0 0 91 0 0 0 0 0 ++220 10 0 0 0 0 0 5 0 0 ++223 5 0 0 0 0 0 5 0 0 ++227 54 1 1 42 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-reloc.c ++fn=_dl_relocate_object ++148 84 1 1 0 0 0 56 0 0 ++155 7 0 0 0 0 0 7 0 0 ++158 10 0 0 0 0 0 0 0 0 ++159 21 1 1 0 0 0 14 0 0 ++163 14 0 0 0 0 0 0 0 0 ++164 35 1 1 7 1 0 7 0 0 ++170 21 0 0 14 0 0 0 0 0 ++176 28 0 0 7 0 0 0 0 0 ++177 14 1 1 7 6 0 0 0 0 ++180 16 2 2 0 0 0 0 0 0 ++187 14 0 0 7 1 0 0 0 0 ++231 21 1 1 14 0 0 7 0 0 ++258 319 3 3 137 24 0 74 0 0 ++261 28 0 0 7 0 0 0 0 0 ++285 7 0 0 7 0 0 0 0 0 ++288 14 1 1 7 0 0 0 0 0 ++305 21 0 0 7 4 0 0 0 0 ++307 56 0 0 49 1 0 0 0 0 ++313 42 0 0 21 0 0 0 0 0 ++316 14 0 0 0 0 0 0 0 0 ++320 14 0 0 0 0 0 0 0 0 ++321 35 1 1 0 0 0 7 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-sort-maps.c ++fn=_dl_sort_maps ++28 18 1 1 0 0 0 14 0 0 ++30 4 0 0 0 0 0 0 0 0 ++33 2 0 0 0 0 0 0 0 0 ++34 20 1 1 0 0 0 6 0 0 ++35 50 1 1 2 0 0 12 0 0 ++39 56 1 1 14 0 0 28 0 0 ++40 42 0 0 28 0 0 0 0 0 ++42 28 0 0 14 0 0 0 0 0 ++46 28 2 1 14 0 0 0 0 0 ++54 164 2 1 62 0 0 0 0 0 ++56 102 1 1 68 2 0 0 0 0 ++57 90 0 0 0 0 0 0 0 0 ++59 234 0 0 78 4 0 0 0 0 ++60 174 0 0 0 0 0 0 0 0 ++65 18 2 1 2 0 0 10 0 0 ++66 6 0 0 0 0 0 2 0 0 ++67 2 0 0 0 0 0 2 0 0 ++69 14 0 0 10 0 0 0 0 0 ++74 2 2 1 2 0 0 0 0 0 ++77 12 0 0 4 0 0 0 0 0 ++84 14 0 0 2 0 0 6 0 0 ++85 8 1 1 6 0 0 2 0 0 ++87 4 0 0 2 0 0 0 0 0 ++90 176 3 1 48 0 0 0 0 0 ++115 66 0 0 22 0 0 0 0 0 ++118 100 0 0 20 0 0 10 0 0 ++122 26 0 0 14 0 0 4 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-tunables.c ++fn=__GI___tunables_init ++68 490 0 0 98 0 0 0 0 0 ++71 97 0 0 0 0 0 0 0 0 ++74 7253 1 1 1050 59 59 0 0 0 ++78 194 0 0 0 0 0 0 0 0 ++83 194 0 0 0 0 0 0 0 0 ++150 4 1 1 0 0 0 2 1 1 ++280 3 0 0 1 0 0 0 0 0 ++289 8 1 1 0 0 0 6 1 1 ++297 194 1 1 0 0 0 0 0 0 ++312 8633 2 2 0 0 0 0 0 0 ++318 10670 0 0 4268 0 0 0 0 0 ++330 388 1 1 97 0 0 0 0 0 ++364 8 0 0 7 0 0 0 0 0 ++fn=__tunable_get_val ++373 138 2 1 14 4 0 0 0 0 ++377 23 1 1 14 0 0 9 0 0 ++382 5 0 0 0 0 0 5 0 0 ++383 5 0 0 0 0 0 0 0 0 ++399 70 1 0 14 2 0 0 0 0 ++401 14 0 0 14 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-tunables.h ++fn=__GI___tunables_init ++120 4003 0 0 1909 8 8 0 0 0 ++121 4052 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/dl-version.c ++fn=_dl_check_all_versions ++362 8 1 1 0 0 0 4 0 0 ++364 1 0 0 0 0 0 0 0 0 ++366 24 0 0 7 0 0 0 0 0 ++368 70 1 1 7 0 0 7 0 0 ++371 7 0 0 5 0 0 0 0 0 ++fn=_dl_check_map_versions ++37 141 0 0 18 0 0 0 0 0 ++38 39 0 0 39 0 0 0 0 0 ++39 240 1 1 0 0 0 48 0 0 ++57 54 0 0 36 0 0 18 0 0 ++65 54 1 1 18 0 0 0 0 0 ++71 54 0 0 18 1 0 0 0 0 ++87 18 0 0 18 1 0 0 0 0 ++88 36 0 0 0 0 0 0 0 0 ++90 18 0 0 18 0 0 0 0 0 ++95 346 0 0 137 5 5 18 0 0 ++109 274 1 1 137 1 1 0 0 0 ++111 18 1 1 18 0 0 0 0 0 ++114 162 1 1 63 0 0 27 0 0 ++121 357 0 0 119 4 4 0 0 0 ++125 119 0 0 0 0 0 0 0 0 ++143 54 1 1 9 0 0 27 0 0 ++156 49 1 1 0 0 0 42 0 0 ++157 12 1 1 0 0 0 7 0 0 ++165 7 0 0 0 0 0 7 0 0 ++171 21 0 0 7 0 0 0 0 0 ++173 35 1 1 7 2 0 21 0 0 ++175 14 0 0 7 1 0 7 0 0 ++176 14 0 0 7 0 0 7 0 0 ++178 14 0 0 0 0 0 0 0 0 ++181 20 0 0 10 1 0 5 0 0 ++185 15 0 0 5 5 5 0 0 0 ++199 4 0 0 0 0 0 0 0 0 ++201 18 0 0 18 1 1 0 0 0 ++209 27 0 0 9 0 0 0 0 0 ++214 27 0 0 18 1 1 0 0 0 ++218 167 1 1 128 0 0 18 0 0 ++220 18 0 0 18 0 0 0 0 0 ++222 45 0 0 18 5 5 18 0 0 ++225 72 1 1 18 0 0 0 0 0 ++228 54 0 0 18 0 0 0 0 0 ++233 9 0 0 0 0 0 0 0 0 ++237 36 0 0 18 0 0 0 0 0 ++242 12 0 0 0 0 0 4 0 0 ++251 20 2 2 7 0 0 0 0 0 ++254 16 0 0 16 0 0 0 0 0 ++257 208 0 0 50 12 12 4 0 0 ++260 158 0 0 50 5 5 4 0 0 ++264 46 0 0 0 0 0 0 0 0 ++268 18 1 1 6 0 0 0 0 0 ++273 6 0 0 0 0 0 6 1 0 ++274 24 2 2 0 0 0 6 0 0 ++275 12 0 0 0 0 0 0 0 0 ++285 6 0 0 0 0 0 6 0 0 ++288 18 0 0 12 2 0 6 0 0 ++290 18 0 0 6 0 0 0 0 0 ++293 20 1 1 15 0 0 0 0 0 ++295 4 0 0 0 0 0 0 0 0 ++297 27 0 0 9 0 0 0 0 0 ++300 54 0 0 18 0 0 0 0 0 ++302 54 0 0 0 0 0 0 0 0 ++304 90 1 1 18 0 0 18 0 0 ++305 54 0 0 0 0 0 18 8 8 ++306 54 0 0 18 0 0 18 1 1 ++307 54 0 0 18 0 0 18 0 0 ++310 54 0 0 18 0 0 0 0 0 ++315 9 0 0 0 0 0 0 0 0 ++318 27 0 0 9 0 0 0 0 0 ++323 4 0 0 0 0 0 0 0 0 ++328 18 0 0 6 0 0 0 0 0 ++331 16 1 1 12 0 0 0 0 0 ++335 46 0 0 46 0 0 0 0 0 ++337 100 0 0 50 0 0 0 0 0 ++341 46 0 0 46 0 0 0 0 0 ++342 230 0 0 46 0 0 46 13 13 ++343 138 0 0 46 0 0 46 0 0 ++344 46 0 0 0 0 0 46 7 7 ++347 150 0 0 50 0 0 0 0 0 ++351 46 0 0 0 0 0 0 0 0 ++357 63 0 0 56 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/do-rel.h ++fn=_dl_relocate_object ++47 42 0 0 14 0 0 14 0 0 ++48 14 0 0 14 0 0 0 0 0 ++50 21 0 0 0 0 0 6 0 0 ++51 11 0 0 0 0 0 7 1 0 ++58 42 0 0 14 0 0 0 0 0 ++61 428 2 2 0 0 0 0 0 0 ++63 560 1 1 140 52 52 0 0 0 ++65 119 0 0 0 0 0 0 0 0 ++74 8 1 1 0 0 0 0 0 0 ++75 154 1 1 29 0 0 0 0 0 ++76 78 0 0 39 0 0 0 0 0 ++83 20 1 1 10 0 0 10 0 0 ++84 10 0 0 10 0 0 0 0 0 ++86 40 0 0 20 0 0 0 0 0 ++98 30 0 0 0 0 0 0 0 0 ++108 16 0 0 0 0 0 0 0 0 ++111 3975 1 1 0 0 0 0 0 0 ++112 2638 0 0 1319 1 0 0 0 0 ++118 30 0 0 10 7 0 0 0 0 ++121 18 0 0 9 4 0 9 0 0 ++124 453 2 2 154 1 0 0 0 0 ++127 580 1 1 145 36 33 0 0 0 ++136 580 0 0 290 48 43 0 0 0 ++137 580 1 1 145 0 0 145 1 0 ++138 520 1 1 145 1 0 0 0 0 ++139 435 0 0 290 0 0 145 0 0 ++143 30 0 0 12 1 0 0 0 0 ++160 22 2 2 8 0 0 2 0 0 ++162 20 0 0 5 1 1 0 0 0 ++170 30 0 0 5 0 0 5 0 0 ++171 15 1 1 10 0 0 5 0 0 ++174 2 0 0 0 0 0 0 0 0 ++fn=_dl_start ++83 1 0 0 1 0 0 0 0 0 ++84 1 0 0 1 0 0 0 0 0 ++111 120 0 0 0 0 0 0 0 0 ++112 78 0 0 39 5 5 0 0 0 ++116 2 0 0 1 0 0 0 0 0 ++124 31 0 0 0 0 0 0 0 0 ++136 27 1 1 9 2 2 0 0 0 ++137 18 0 0 0 0 0 0 0 0 ++139 18 0 0 9 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/get-dynamic-info.h ++fn=_dl_map_object_from_fd ++42 10 0 0 0 0 0 0 0 0 ++46 5 0 0 0 0 0 0 0 0 ++48 408 0 0 136 38 38 0 0 0 ++50 262 0 0 0 0 0 0 0 0 ++63 129 0 0 0 0 0 0 0 0 ++64 214 1 1 0 0 0 126 31 31 ++65 20 1 1 0 0 0 0 0 0 ++67 5 0 0 0 0 0 0 0 0 ++68 25 2 2 0 0 0 0 0 0 ++70 5 0 0 0 0 0 0 0 0 ++71 25 0 0 0 0 0 0 0 0 ++72 5 0 0 0 0 0 0 0 0 ++73 20 0 0 0 0 0 5 0 0 ++74 131 0 0 0 0 0 0 0 0 ++81 10 1 1 0 0 0 0 0 0 ++101 18 0 0 8 0 0 0 0 0 ++102 20 0 0 10 0 0 0 0 0 ++103 20 1 1 10 0 0 0 0 0 ++104 20 0 0 10 0 0 0 0 0 ++106 20 0 0 10 0 0 0 0 0 ++111 20 0 0 10 0 0 0 0 0 ++112 19 1 1 9 1 1 0 0 0 ++113 20 0 0 10 0 0 0 0 0 ++119 15 0 0 5 0 0 0 0 0 ++124 10 0 0 5 0 0 0 0 0 ++131 10 0 0 5 0 0 0 0 0 ++132 15 1 1 10 0 0 0 0 0 ++150 15 0 0 5 0 0 0 0 0 ++155 6 0 0 3 0 0 3 0 0 ++157 6 0 0 0 0 0 0 0 0 ++159 6 0 0 0 0 0 0 0 0 ++161 6 0 0 0 0 0 0 0 0 ++162 2 1 1 0 0 0 1 0 0 ++164 15 1 1 5 0 0 0 0 0 ++166 12 0 0 3 0 0 3 1 1 ++174 6 0 0 3 0 0 0 0 0 ++179 6 0 0 0 0 0 0 0 0 ++180 3 0 0 1 0 0 1 0 0 ++182 10 0 0 5 0 0 0 0 0 ++fn=_dl_start ++48 57 1 1 19 6 6 0 0 0 ++50 36 1 1 0 0 0 0 0 0 ++63 21 0 0 0 0 0 0 0 0 ++64 29 0 0 0 0 0 17 5 5 ++65 4 0 0 0 0 0 0 0 0 ++67 3 0 0 0 0 0 0 0 0 ++68 5 1 1 0 0 0 0 0 0 ++70 2 0 0 0 0 0 0 0 0 ++71 5 1 1 0 0 0 0 0 0 ++72 1 0 0 0 0 0 0 0 0 ++73 5 1 1 0 0 0 1 1 1 ++74 18 0 0 0 0 0 0 0 0 ++81 2 1 1 0 0 0 0 0 0 ++101 4 0 0 2 0 0 0 0 0 ++102 4 0 0 2 0 0 0 0 0 ++103 4 1 1 2 0 0 0 0 0 ++104 4 0 0 2 0 0 0 0 0 ++106 4 0 0 2 0 0 0 0 0 ++111 4 0 0 2 0 0 0 0 0 ++112 4 1 1 2 0 0 0 0 0 ++113 4 0 0 2 0 0 0 0 0 ++119 3 0 0 1 0 0 0 0 0 ++124 2 0 0 1 0 0 0 0 0 ++131 3 0 0 1 0 0 0 0 0 ++132 3 1 1 2 0 0 0 0 0 ++140 3 0 0 1 0 0 0 0 0 ++143 3 0 0 1 1 1 0 0 0 ++147 2 1 1 1 0 0 0 0 0 ++148 2 0 0 1 0 0 0 0 0 ++fn=dl_main ++33 1 0 0 1 0 0 0 0 0 ++42 2 0 0 0 0 0 0 0 0 ++46 1 0 0 0 0 0 0 0 0 ++48 72 0 0 24 6 6 0 0 0 ++50 46 0 0 0 0 0 0 0 0 ++63 25 0 0 0 0 0 0 0 0 ++64 38 0 0 0 0 0 22 6 6 ++65 4 0 0 0 0 0 0 0 0 ++67 1 0 0 0 0 0 0 0 0 ++68 5 0 0 0 0 0 0 0 0 ++70 1 1 1 0 0 0 0 0 0 ++71 5 1 1 0 0 0 0 0 0 ++72 1 0 0 0 0 0 0 0 0 ++73 4 0 0 0 0 0 1 0 0 ++74 23 0 0 0 0 0 0 0 0 ++81 3 1 1 1 0 0 0 0 0 ++101 3 0 0 1 0 0 0 0 0 ++102 4 0 0 2 0 0 0 0 0 ++103 4 0 0 2 0 0 0 0 0 ++104 4 0 0 2 0 0 0 0 0 ++106 4 1 1 2 0 0 0 0 0 ++111 3 0 0 1 0 0 0 0 0 ++112 4 0 0 2 0 0 0 0 0 ++113 4 0 0 2 0 0 0 0 0 ++119 3 1 1 1 0 0 0 0 0 ++131 2 0 0 1 0 0 0 0 0 ++132 3 0 0 2 0 0 0 0 0 ++150 3 0 0 1 0 0 0 0 0 ++155 2 0 0 1 0 0 1 1 1 ++157 2 1 1 0 0 0 0 0 0 ++159 2 0 0 0 0 0 0 0 0 ++161 2 0 0 0 0 0 0 0 0 ++162 1 0 0 0 0 0 1 0 0 ++164 3 0 0 1 0 0 0 0 0 ++166 3 0 0 1 0 0 1 0 0 ++174 2 1 1 1 0 0 0 0 0 ++179 2 0 0 0 0 0 0 0 0 ++180 2 0 0 1 0 0 1 0 0 ++182 2 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/rtld.c ++fn=_dl_start ++393 2 0 0 0 0 0 1 1 1 ++394 2 0 0 0 0 0 1 0 0 ++395 2 0 0 0 0 0 1 0 0 ++396 2 0 0 0 0 0 1 0 0 ++397 2 0 0 0 0 0 1 1 1 ++405 5 1 1 0 0 0 1 0 0 ++408 1 0 0 0 0 0 1 0 0 ++414 4 1 0 0 0 0 1 0 0 ++423 4 0 0 0 0 0 0 0 0 ++426 2 0 0 1 1 0 1 1 1 ++430 2 1 0 1 0 0 0 0 0 ++444 9 1 1 0 0 0 6 0 0 ++463 5 0 0 0 0 0 1 1 1 ++486 1 0 0 0 0 0 1 1 1 ++489 1 0 0 0 0 0 1 1 1 ++500 2 0 0 0 0 0 0 0 0 ++505 27 3 3 9 0 0 0 0 0 ++507 1 1 1 1 1 1 0 0 0 ++532 9 0 0 7 1 0 0 0 0 ++fn=dl_main ++799 1 0 0 1 0 0 0 0 0 ++801 1 0 0 0 0 0 1 0 0 ++810 1 0 0 0 0 0 1 0 0 ++812 1 1 1 0 0 0 1 0 0 ++817 1 0 0 0 0 0 1 0 0 ++870 12 2 2 0 0 0 7 1 1 ++876 1 0 0 0 0 0 0 0 0 ++879 1 0 0 0 0 0 0 0 0 ++885 1 0 0 0 0 0 1 0 0 ++887 2 0 0 0 0 0 1 1 1 ++891 2 0 0 0 0 0 1 1 1 ++892 2 0 0 0 0 0 1 0 0 ++897 2 1 1 0 0 0 1 0 0 ++907 3 0 0 1 0 0 0 0 0 ++1108 8 2 2 0 0 0 1 0 0 ++1110 2 0 0 0 0 0 0 0 0 ++1111 1 0 0 0 0 0 1 0 0 ++1112 2 0 0 1 0 0 1 0 0 ++1113 2 0 0 1 0 0 1 0 0 ++1117 3 0 0 0 0 0 1 0 0 ++1118 2 1 1 1 0 0 0 0 0 ++1139 1 0 0 0 0 0 1 0 0 ++1140 1 0 0 0 0 0 1 0 0 ++1142 1 0 0 0 0 0 1 0 0 ++1144 1 0 0 1 0 0 0 0 0 ++1147 33 1 1 1 0 0 0 0 0 ++1148 71 2 2 9 5 5 0 0 0 ++1152 3 1 1 1 0 0 1 0 0 ++1153 1 0 0 0 0 0 0 0 0 ++1157 3 0 0 2 0 0 1 0 0 ++1158 1 0 0 0 0 0 0 0 0 ++1166 2 0 0 0 0 0 1 1 1 ++1167 2 1 1 2 1 1 0 0 0 ++1169 1 0 0 0 0 0 1 0 0 ++1176 2 0 0 1 0 0 0 0 0 ++1188 1 0 0 0 0 0 0 0 0 ++1194 2 1 1 0 0 0 0 0 0 ++1202 4 0 0 2 0 0 0 0 0 ++1203 10 1 1 3 1 1 0 0 0 ++1204 4 0 0 2 0 0 0 0 0 ++1205 1 0 0 0 0 0 1 0 0 ++1208 4 0 0 2 1 1 0 0 0 ++1209 4 0 0 2 0 0 0 0 0 ++1210 2 1 1 0 0 0 2 0 0 ++1211 6 0 0 3 0 0 0 0 0 ++1212 2 0 0 0 0 0 1 0 0 ++1239 2 1 1 1 0 0 1 0 0 ++1240 1 0 0 0 0 0 0 0 0 ++1243 2 0 0 1 0 0 1 0 0 ++1244 2 0 0 1 0 0 1 0 0 ++1245 1 0 0 0 0 0 0 0 0 ++1250 3 1 1 1 1 1 0 0 0 ++1253 2 1 1 1 0 0 0 0 0 ++1255 2 0 0 1 0 0 0 0 0 ++1257 3 1 1 1 0 0 0 0 0 ++1270 3 0 0 1 0 0 0 0 0 ++1271 6 0 0 1 0 0 2 0 0 ++1273 3 0 0 3 0 0 0 0 0 ++1276 2 0 0 1 0 0 1 0 0 ++1278 1 0 0 0 0 0 1 0 0 ++1279 1 0 0 0 0 0 1 0 0 ++1281 2 1 1 1 0 0 0 0 0 ++1282 2 0 0 0 0 0 1 0 0 ++1286 2 0 0 1 0 0 0 0 0 ++1288 2 1 1 0 0 0 0 0 0 ++1293 2 0 0 0 0 0 1 0 0 ++1296 2 1 1 1 0 0 0 0 0 ++1312 5 2 2 0 0 0 2 0 0 ++1318 10 1 1 1 0 0 2 0 0 ++1323 2 1 1 1 0 0 1 0 0 ++1326 4 1 1 1 0 0 2 0 0 ++1328 1 0 0 0 0 0 1 0 0 ++1333 2 0 0 1 0 0 0 0 0 ++1336 3 0 0 2 0 0 1 0 0 ++1337 4 0 0 1 0 0 1 0 0 ++1338 2 1 1 1 0 0 1 0 0 ++1339 1 0 0 0 0 0 1 0 0 ++1340 1 0 0 1 0 0 0 0 0 ++1341 1 0 0 1 0 0 0 0 0 ++1346 2 0 0 1 0 0 0 0 0 ++1347 5 0 0 1 0 0 1 0 0 ++1364 2 0 0 1 1 1 0 0 0 ++1365 2 1 1 1 0 0 0 0 0 ++1367 3 0 0 1 0 0 0 0 0 ++1369 1 0 0 0 0 0 1 0 0 ++1370 3 0 0 1 0 0 1 0 0 ++1375 4 1 1 0 0 0 0 0 0 ++1376 5 0 0 1 1 1 0 0 0 ++1378 2 1 1 1 0 0 1 1 1 ++1379 2 0 0 1 0 0 1 0 0 ++1384 2 0 0 1 1 1 0 0 0 ++1389 1 0 0 0 0 0 1 0 0 ++1390 4 1 1 2 0 0 0 0 0 ++1391 2 0 0 0 0 0 0 0 0 ++1570 2 0 0 0 0 0 2 0 0 ++1578 3 0 0 1 0 0 0 0 0 ++1581 2 1 1 1 0 0 1 0 0 ++1585 3 0 0 1 0 0 0 0 0 ++1590 2 0 0 1 0 0 1 0 0 ++1591 1 0 0 0 0 0 1 0 0 ++1592 1 0 0 0 0 0 0 0 0 ++1596 2 0 0 1 0 0 0 0 0 ++1611 3 1 1 2 0 0 0 0 0 ++1612 1 0 0 0 0 0 0 0 0 ++1613 1 0 0 0 0 0 0 0 0 ++1615 3 0 0 1 0 0 0 0 0 ++1617 5 0 0 0 0 0 0 0 0 ++1618 3 0 0 0 0 0 1 0 0 ++1619 4 1 1 0 0 0 0 0 0 ++1621 2 0 0 1 0 0 0 0 0 ++1631 5 0 0 0 0 0 1 0 0 ++1708 4 0 0 2 0 0 0 0 0 ++1712 8 1 1 0 0 0 0 0 0 ++1713 1 0 0 0 0 0 0 0 0 ++1716 6 1 1 0 0 0 2 0 0 ++1717 2 0 0 2 0 0 0 0 0 ++1718 4 0 0 0 0 0 0 0 0 ++1719 2 0 0 0 0 0 0 0 0 ++1725 5 1 1 0 0 0 0 0 0 ++1726 8 0 0 1 0 0 1 0 0 ++1727 4 0 0 0 0 0 0 0 0 ++1729 2 1 1 1 0 0 0 0 0 ++1732 17 0 0 1 0 0 0 0 0 ++1733 25 0 0 15 0 0 0 0 0 ++1736 3 1 1 2 0 0 1 0 0 ++1737 3 0 0 1 0 0 0 0 0 ++1738 1 0 0 0 0 0 1 0 0 ++1740 24 1 1 0 0 0 0 0 0 ++1741 20 0 0 13 0 0 0 0 0 ++1751 2 1 1 0 0 0 1 0 0 ++1753 3 2 2 1 0 0 1 0 0 ++1754 2 0 0 1 0 0 0 0 0 ++1756 2 0 0 0 0 0 1 0 0 ++1758 3 0 0 0 0 0 0 0 0 ++1760 3 0 0 1 0 0 0 0 0 ++1774 4 1 1 3 0 0 0 0 0 ++1775 2 0 0 1 0 0 1 0 0 ++1776 3 0 0 1 0 0 0 0 0 ++1787 4 1 1 1 0 0 1 0 0 ++1788 1 1 1 0 0 0 1 0 0 ++1789 6 0 0 0 0 0 2 0 0 ++1799 2 0 0 1 0 0 1 0 0 ++1800 2 0 0 1 0 0 0 0 0 ++1801 2 1 1 0 0 0 2 0 0 ++1803 2 0 0 1 0 0 0 0 0 ++1808 2 0 0 1 0 0 0 0 0 ++2038 3 0 0 1 1 1 0 0 0 ++2094 2 1 1 0 0 0 1 0 0 ++2098 2 1 1 1 0 0 1 0 0 ++2104 2 0 0 1 0 0 1 0 0 ++2107 2 0 0 1 0 0 0 0 0 ++2161 3 1 1 1 0 0 0 0 0 ++2168 1 0 0 1 0 0 0 0 0 ++2170 5 0 0 0 0 0 0 0 0 ++2171 1 0 0 1 0 0 0 0 0 ++2172 30 1 1 0 0 0 0 0 0 ++2174 14 0 0 14 2 0 0 0 0 ++2179 14 0 0 14 0 0 0 0 0 ++2181 16 1 1 0 0 0 0 0 0 ++2183 1 1 1 0 0 0 1 0 0 ++2184 1 0 0 1 0 0 0 0 0 ++2187 7 0 0 7 0 0 0 0 0 ++2189 14 0 0 7 1 0 0 0 0 ++2190 48 0 0 12 5 0 6 0 0 ++2194 16 1 1 8 1 0 0 0 0 ++2195 3 0 0 0 0 0 1 0 0 ++2197 4 1 1 0 0 0 0 0 0 ++2199 3 0 0 0 0 0 1 1 0 ++2205 2 0 0 1 0 0 0 0 0 ++2210 4 0 0 2 2 0 0 0 0 ++2212 1 0 0 1 0 0 0 0 0 ++2219 3 1 1 1 0 0 1 0 0 ++2222 2 0 0 1 1 0 0 0 0 ++2231 3 1 1 2 1 0 0 0 0 ++2233 4 0 0 1 0 0 0 0 0 ++2248 5 1 1 0 0 0 0 0 0 ++2250 1 0 0 1 0 0 0 0 0 ++2251 5 0 0 1 0 0 1 0 0 ++2252 4 0 0 0 0 0 0 0 0 ++2254 2 0 0 1 0 0 0 0 0 ++2262 1 0 0 0 0 0 1 0 0 ++2266 2 0 0 1 0 0 0 0 0 ++2286 4 1 1 0 0 0 1 0 0 ++2287 1 0 0 0 0 0 1 0 0 ++2288 1 0 0 0 0 0 1 0 0 ++2289 1 0 0 0 0 0 0 0 0 ++2293 1 0 0 0 0 0 1 0 0 ++2298 8 0 0 7 2 0 0 0 0 ++2464 2 0 0 1 0 0 1 1 1 ++2466 1 0 0 0 0 0 1 0 0 ++2467 1 0 0 0 0 0 0 0 0 ++2471 8 1 1 1 0 0 2 1 1 ++2473 15 0 0 3 0 0 3 1 1 ++2475 2 0 0 0 0 0 0 0 0 ++2477 105 1 1 21 0 0 0 0 0 ++2478 19 0 0 0 0 0 0 0 0 ++2480 4 0 0 0 0 0 0 0 0 ++2486 14 0 0 2 1 1 0 0 0 ++2507 2 1 1 1 0 0 0 0 0 ++2514 6 0 0 0 0 0 1 0 0 ++2516 3 1 1 0 0 0 1 0 0 ++2562 3 1 1 1 0 0 0 0 0 ++2563 6 1 1 0 0 0 1 0 0 ++2565 3 1 1 0 0 0 1 1 1 ++2635 3 2 2 1 0 0 0 0 0 ++2667 3 0 0 1 0 0 0 0 0 ++fn=handle_ld_preload ++121 6 0 0 2 0 0 0 0 0 ++752 2 0 0 0 0 0 2 1 1 ++756 2 0 0 0 0 0 2 0 0 ++757 2 0 0 0 0 0 2 0 0 ++758 2 0 0 0 0 0 2 0 0 ++760 2 0 0 2 0 0 0 0 0 ++762 17 1 1 4 0 0 4 1 1 ++763 6 0 0 2 0 0 0 0 0 ++771 8 0 0 2 0 0 0 0 0 ++837 9 1 1 0 0 0 6 0 0 ++838 1 0 0 0 0 0 0 0 0 ++842 6 0 0 3 0 0 0 0 0 ++845 8 0 0 0 0 0 2 0 0 ++846 6 1 1 0 0 0 0 0 0 ++848 9 2 2 0 0 0 2 0 0 ++849 4 1 1 0 0 0 2 0 0 ++855 2 0 0 0 0 0 0 0 0 ++857 4 0 0 2 0 0 0 0 0 ++859 4 0 0 2 0 0 0 0 0 ++863 9 0 0 7 0 0 0 0 0 ++fn=init_tls ++681 1 0 0 0 0 0 1 0 0 ++683 2 0 0 1 0 0 1 0 0 ++687 2 0 0 1 1 0 0 0 0 ++693 2 0 0 0 0 0 1 0 0 ++696 1 0 0 0 0 0 1 0 0 ++697 4 0 0 0 0 0 1 0 0 ++702 1 0 0 0 0 0 0 0 0 ++704 1 0 0 0 0 0 1 0 0 ++708 2 1 1 1 1 1 0 0 0 ++709 1 0 0 0 0 0 0 0 0 ++710 25 1 1 1 0 0 0 0 0 ++711 14 0 0 7 0 0 0 0 0 ++712 14 0 0 7 3 0 0 0 0 ++716 2 0 0 0 0 0 1 0 0 ++718 1 0 0 0 0 0 0 0 0 ++720 2 0 0 0 0 0 0 0 0 ++723 1 1 1 0 0 0 1 0 0 ++730 2 0 0 0 0 0 1 0 0 ++731 2 0 0 0 0 0 0 0 0 ++737 2 1 1 1 0 0 1 0 0 ++740 7 0 0 0 0 0 2 0 0 ++743 1 1 1 0 0 0 1 0 0 ++745 1 0 0 0 0 0 0 0 0 ++746 3 0 0 2 0 0 0 0 0 ++fn=map_doit ++588 4 1 1 0 0 0 2 0 0 ++590 8 0 0 2 0 0 0 0 0 ++591 12 1 1 4 0 0 4 1 1 ++593 4 0 0 4 0 0 0 0 0 ++fn=rtld_lock_default_lock_recursive ++784 6 1 1 6 1 1 0 0 0 ++785 6 0 0 6 0 0 0 0 0 ++fn=rtld_lock_default_unlock_recursive ++790 6 0 0 6 0 0 0 0 0 ++791 6 0 0 6 0 0 0 0 0 ++fn=version_check_doit ++621 2 1 1 0 0 0 1 0 0 ++623 6 0 0 2 0 0 1 0 0 ++627 2 1 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/elf/setup-vdso.h ++fn=dl_main ++24 2 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/access.c ++fn=access ++27 7 2 2 0 0 0 1 0 0 ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/close.c ++fn=close ++27 24 1 1 0 0 0 0 0 0 ++28 6 0 0 6 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/open64.c ++fn=open ++36 57 0 0 0 0 0 57 2 2 ++39 342 1 1 0 0 0 0 0 0 ++47 552 1 1 0 0 0 51 0 0 ++49 57 0 0 57 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/read.c ++fn=read ++27 20 1 1 0 0 0 0 0 0 ++28 5 0 0 5 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c ++fn=_fxstat ++33 6 0 0 0 0 0 0 0 0 ++34 12 1 1 0 0 0 0 0 0 ++35 36 1 1 0 0 0 0 0 0 ++39 6 0 0 6 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c ++fn=open ++39 57 1 1 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c ++fn=_xstat ++33 16 0 0 0 0 0 0 0 0 ++34 32 1 1 0 0 0 0 0 0 ++35 156 0 0 15 0 0 15 0 0 ++39 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/libio/genops.c ++fn=_IO_cleanup ++849 10 0 0 3 0 0 1 0 0 ++850 13 2 2 5 0 0 2 0 0 ++853 12 0 0 4 0 0 0 0 0 ++855 9 0 0 3 0 0 0 0 0 ++857 6 0 0 2 0 0 0 0 0 ++863 1 0 0 1 0 0 0 0 0 ++887 1 1 1 1 0 0 0 0 0 ++893 3 0 0 0 0 0 3 0 0 ++897 9 1 1 2 0 0 2 0 0 ++898 8 1 1 2 0 0 1 0 0 ++918 10 1 1 1 0 0 7 0 0 ++921 3 1 1 0 0 0 2 0 0 ++933 12 1 1 10 0 0 0 0 0 ++fn=_IO_flush_all_lockp ++749 11 2 2 1 0 0 7 0 0 ++750 1 0 0 0 0 0 0 0 0 ++754 11 0 0 3 0 0 2 0 0 ++755 13 2 2 5 1 1 2 0 0 ++758 12 0 0 4 3 1 0 0 0 ++760 3 1 1 0 0 0 3 0 0 ++761 6 1 1 0 0 0 0 0 0 ++762 1 1 1 1 0 0 0 0 0 ++764 22 2 2 10 6 3 0 0 0 ++772 6 1 1 0 0 0 0 0 0 ++774 3 0 0 0 0 0 3 0 0 ++778 9 0 0 2 0 0 2 0 0 ++779 9 1 1 3 0 0 1 0 0 ++783 12 1 1 9 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/libio/libioP.h ++fn=_IO_cleanup ++870 4 1 1 0 0 0 0 0 0 ++fn=_IO_flush_all_lockp ++870 4 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/misc/../sysdeps/unix/syscall-template.S ++fn=mprotect ++78 48 1 1 0 0 0 0 0 0 ++79 12 0 0 12 0 0 0 0 0 ++fn=munmap ++78 4 0 0 0 0 0 0 0 0 ++79 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/misc/../sysdeps/unix/sysv/linux/mmap64.c ++fn=mmap ++41 180 0 0 0 0 0 90 3 3 ++44 30 1 1 0 0 0 0 0 0 ++47 56 2 2 5 0 0 0 0 0 ++52 150 0 0 0 0 0 0 0 0 ++54 105 0 0 105 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/misc/init-misc.c ++fn=__init_misc ++30 3 0 0 0 0 0 2 0 0 ++31 6 2 2 1 0 0 0 0 0 ++33 3 0 0 0 0 0 1 0 0 ++37 5 0 0 1 1 0 1 1 0 ++38 3 0 0 2 0 0 1 0 0 ++40 4 0 0 3 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/../include/list.h ++fn=__pthread_initialize_minimal ++44 1 1 1 0 0 0 1 0 0 ++45 1 0 0 0 0 0 1 0 0 ++46 1 0 0 0 0 0 1 0 0 ++48 1 0 0 0 0 0 1 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/../nptl/pthread_mutex_lock.c ++fn=pthread_mutex_lock ++64 1 0 0 0 0 0 0 0 0 ++65 3 1 1 1 0 0 0 0 0 ++67 1 0 0 0 0 0 0 0 0 ++69 2 0 0 0 0 0 0 0 0 ++73 4 1 1 1 0 0 0 0 0 ++82 2 1 1 0 0 0 0 0 0 ++93 4 0 0 0 0 0 0 0 0 ++97 1 0 0 1 0 0 0 0 0 ++100 2 0 0 1 0 0 0 0 0 ++113 3 1 1 1 0 0 0 0 0 ++115 3 0 0 1 0 0 0 0 0 ++116 2 0 0 0 0 0 1 0 0 ++154 1 1 1 1 0 0 0 0 0 ++157 1 0 0 0 0 0 1 0 0 ++159 1 0 0 1 0 0 0 0 0 ++162 1 0 0 0 0 0 0 0 0 ++164 1 0 0 0 0 0 0 0 0 ++165 2 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/../sysdeps/unix/sysv/linux/pthread-pids.h ++fn=__pthread_initialize_minimal ++29 4 0 0 0 0 0 1 1 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/../sysdeps/unix/sysv/linux/x86/elision-conf.c ++fn=elision_init ++107 5 1 1 1 0 0 2 0 0 ++112 5 0 0 0 0 0 1 0 0 ++114 4 1 1 0 0 0 1 0 0 ++116 4 0 0 0 0 0 1 0 0 ++118 4 0 0 0 0 0 1 0 0 ++120 4 1 1 0 0 0 1 0 0 ++124 3 0 0 1 0 0 0 0 0 ++125 1 0 0 0 0 0 1 1 0 ++126 6 0 0 4 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/../sysdeps/unix/sysv/linux/x86_64/sigaction.c ++fn=__libc_sigaction ++47 10 1 1 2 0 0 2 0 0 ++51 4 1 1 0 0 0 0 0 0 ++53 4 0 0 2 0 0 2 0 0 ++54 34 0 0 16 0 0 16 3 2 ++55 8 0 0 2 0 0 2 0 0 ++57 4 1 1 0 0 0 2 0 0 ++62 24 2 2 0 0 0 0 0 0 ++65 4 0 0 0 0 0 0 0 0 ++73 10 1 1 6 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/cleanup_defer_compat.c ++fn=_pthread_cleanup_pop_restore ++62 2 1 1 0 0 0 0 0 0 ++65 4 0 0 2 0 0 2 0 0 ++68 6 0 0 2 0 0 0 0 0 ++91 4 0 0 0 0 0 0 0 0 ++92 2 1 1 2 0 0 0 0 0 ++fn=_pthread_cleanup_push_defer ++28 2 1 1 0 0 0 2 0 0 ++29 2 0 0 0 0 0 2 0 0 ++30 4 0 0 2 0 0 2 0 0 ++32 2 0 0 2 0 0 0 0 0 ++35 4 0 0 0 0 0 0 0 0 ++52 6 0 0 0 0 0 2 0 0 ++54 2 0 0 0 0 0 2 0 0 ++55 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/libc_pthread_init.c ++fn=__libc_pthread_init ++43 2 1 1 0 0 0 1 0 0 ++45 1 0 0 0 0 0 1 1 1 ++48 6 0 0 0 0 0 1 0 0 ++67 161 0 0 0 0 0 0 0 0 ++70 159 0 0 106 4 0 0 0 0 ++71 53 0 0 0 0 0 53 6 6 ++73 1 0 0 0 0 0 1 0 0 ++79 3 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/nptl-init.c ++fn=__pthread_initialize_minimal ++285 7 1 1 1 0 0 4 0 0 ++287 1 0 0 1 0 0 0 0 0 ++289 2 1 1 0 0 0 1 1 0 ++290 1 0 0 0 0 0 1 1 0 ++294 3 0 0 2 1 0 1 0 0 ++300 2 0 0 0 0 0 1 0 0 ++302 1 0 0 0 0 0 1 0 0 ++304 1 0 0 0 0 0 1 0 0 ++308 3 1 1 0 0 0 0 0 0 ++356 3 0 0 2 2 0 1 1 0 ++359 2 0 0 0 0 0 1 1 1 ++360 1 0 0 0 0 0 0 0 0 ++364 6 0 0 1 1 0 1 0 0 ++374 2 0 0 0 0 0 1 0 0 ++375 19 1 1 0 0 0 17 0 0 ++376 4 0 0 0 0 0 1 0 0 ++381 2 0 0 0 0 0 1 0 0 ++382 1 1 1 0 0 0 1 0 0 ++383 4 0 0 0 0 0 1 0 0 ++393 2 0 0 1 0 0 0 0 0 ++397 6 0 0 0 0 0 0 0 0 ++405 3 1 1 0 0 0 1 0 0 ++408 4 0 0 1 0 0 0 0 0 ++410 1 0 0 0 0 0 1 0 0 ++412 6 1 1 1 0 0 1 0 0 ++417 5 0 0 0 0 0 1 0 0 ++418 3 0 0 1 0 0 0 0 0 ++422 1 0 0 0 0 0 0 0 0 ++425 3 0 0 0 0 0 0 0 0 ++429 2 1 1 2 0 0 0 0 0 ++430 3 0 0 1 0 0 0 0 0 ++435 7 0 0 0 0 0 1 0 0 ++436 4 1 1 1 0 0 0 0 0 ++437 2 0 0 1 0 0 1 1 1 ++438 1 0 0 0 0 0 1 1 1 ++439 2 1 1 2 0 0 0 0 0 ++444 2 0 0 0 0 0 1 1 0 ++445 2 0 0 0 0 0 1 0 0 ++446 1 0 0 1 1 0 0 0 0 ++447 1 1 1 0 0 0 1 0 0 ++448 3 0 0 0 0 0 0 0 0 ++451 2 0 0 0 0 0 1 0 0 ++454 2 0 0 0 0 0 1 0 0 ++456 2 0 0 0 0 0 1 0 0 ++460 1 0 0 0 0 0 1 0 0 ++462 4 1 1 0 0 0 1 0 0 ++466 1 0 0 0 0 0 1 0 0 ++467 8 1 1 6 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/pthread_mutex_unlock.c ++fn=pthread_mutex_unlock ++38 3 1 1 1 0 0 0 0 0 ++39 3 0 0 0 0 0 0 0 0 ++43 2 0 0 0 0 0 0 0 0 ++48 1 1 1 0 0 0 1 0 0 ++51 1 0 0 1 0 0 0 0 0 ++54 3 0 0 2 0 0 0 0 0 ++56 1 0 0 0 0 0 0 0 0 ++60 2 1 1 0 0 0 0 0 0 ++66 4 0 0 0 0 0 0 0 0 ++70 3 0 0 2 0 0 0 0 0 ++73 2 0 0 1 0 0 0 0 0 ++344 1 0 0 0 0 0 0 0 0 ++346 2 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/register-atfork.c ++fn=__register_atfork ++46 2 0 0 0 0 0 0 0 0 ++53 2 0 0 0 0 0 0 0 0 ++54 6 1 1 1 1 1 0 0 0 ++73 1 0 0 0 0 0 0 0 0 ++74 4 0 0 0 0 0 1 0 0 ++85 7 1 1 0 0 0 3 0 0 ++87 6 1 1 2 1 1 0 0 0 ++94 1 0 0 0 0 0 1 0 0 ++95 1 0 0 0 0 0 1 0 0 ++96 1 1 1 0 0 0 1 0 0 ++97 1 0 0 0 0 0 1 0 0 ++103 4 1 1 2 0 0 0 0 0 ++105 3 0 0 0 0 0 0 0 0 ++106 5 0 0 4 0 0 0 0 0 ++115 2 0 0 1 1 1 1 0 0 ++116 6 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/nptl/unregister-atfork.c ++fn=__unregister_atfork ++28 35 1 1 5 0 0 15 0 0 ++36 5 0 0 5 0 0 0 0 0 ++39 20 0 0 0 0 0 0 0 0 ++40 15 0 0 5 0 0 0 0 0 ++45 5 1 1 5 0 0 0 0 0 ++121 30 0 0 25 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/posix/../sysdeps/unix/syscall-template.S ++fn=uname ++78 4 1 1 0 0 0 0 0 0 ++79 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/posix/../sysdeps/unix/sysv/linux/_exit.c ++fn=_Exit ++27 2 1 1 1 0 0 0 0 0 ++31 4 1 1 0 0 0 0 0 0 ++33 2 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/resource/../sysdeps/unix/sysv/linux/getrlimit64.c ++fn=getrlimit ++37 1 1 1 0 0 0 0 0 0 ++38 7 0 0 0 0 0 0 0 0 ++39 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/setjmp/../sysdeps/x86_64/bsd-_setjmp.S ++fn=_setjmp ++30 1 1 1 0 0 0 0 0 0 ++32 1 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/setjmp/../sysdeps/x86_64/setjmp.S ++fn=__sigsetjmp ++26 12 2 2 0 0 0 12 0 0 ++35 12 0 0 0 0 0 0 0 0 ++36 24 1 1 12 0 0 0 0 0 ++37 12 0 0 0 0 0 12 0 0 ++41 12 0 0 0 0 0 12 0 0 ++42 12 0 0 0 0 0 12 0 0 ++43 12 0 0 0 0 0 12 0 0 ++44 12 0 0 0 0 0 12 0 0 ++45 12 0 0 0 0 0 0 0 0 ++47 24 1 1 12 0 0 0 0 0 ++49 12 0 0 0 0 0 12 1 1 ++50 12 0 0 12 0 0 0 0 0 ++51 12 0 0 0 0 0 0 0 0 ++53 24 0 0 12 0 0 0 0 0 ++55 12 1 1 0 0 0 12 0 0 ++59 11 0 0 0 0 0 0 0 0 ++60 11 0 0 11 0 0 0 0 0 ++63 1 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/setjmp/sigjmp.c ++fn=__sigjmp_save ++28 2 0 0 0 0 0 1 0 0 ++29 3 0 0 0 0 0 1 0 0 ++34 3 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/stdlib/cxa_atexit.c ++fn=__cxa_atexit ++39 7 1 1 2 1 1 0 0 0 ++40 2 1 1 0 0 0 1 0 0 ++42 2 0 0 0 0 0 0 0 0 ++49 2 0 0 1 0 0 0 0 0 ++51 1 0 0 0 0 0 1 0 0 ++52 1 0 0 0 0 0 1 0 0 ++53 1 0 0 0 0 0 1 0 0 ++54 1 0 0 0 0 0 1 0 0 ++55 4 1 1 2 0 0 0 0 0 ++56 1 0 0 0 0 0 0 0 0 ++65 8 1 1 0 0 0 4 0 0 ++67 6 0 0 5 0 0 0 0 0 ++fn=__new_exitfn ++78 3 0 0 0 0 0 2 0 0 ++79 2 0 0 0 0 0 0 0 0 ++84 2 1 1 1 1 0 0 0 0 ++89 8 2 2 2 1 0 0 0 0 ++91 3 0 0 1 1 0 0 0 0 ++99 2 0 0 0 0 0 1 0 0 ++120 1 1 1 0 0 0 0 0 0 ++121 2 0 0 0 0 0 1 0 0 ++134 1 1 1 0 0 0 1 0 0 ++135 1 0 0 1 0 0 0 0 0 ++139 4 0 0 3 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/stdlib/cxa_finalize.c ++fn=__cxa_finalize ++30 40 1 1 0 0 0 30 0 0 ++33 35 1 1 10 0 0 0 0 0 ++36 30 1 1 10 0 0 0 0 0 ++40 35 1 1 5 0 0 0 0 0 ++94 40 2 2 10 0 0 0 0 0 ++98 30 0 0 5 1 1 0 0 0 ++106 10 0 0 0 0 0 0 0 0 ++107 10 0 0 0 0 0 5 0 0 ++109 20 1 1 10 0 0 0 0 0 ++110 40 0 0 35 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/stdlib/cxa_thread_atexit_impl.c ++fn=__call_tls_dtors ++145 3 1 1 0 0 0 2 0 0 ++146 4 1 1 2 1 0 0 0 0 ++164 4 1 1 3 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/stdlib/exit.c ++fn=__run_exit_handlers ++40 10 1 1 0 0 0 7 0 0 ++45 3 0 0 0 0 0 0 0 0 ++46 2 0 0 0 0 0 1 0 0 ++53 1 1 1 0 0 0 0 0 0 ++56 14 1 1 4 0 0 0 0 0 ++59 2 0 0 2 0 0 0 0 0 ++61 5 0 0 0 0 0 0 0 0 ++65 1 0 0 0 0 0 1 0 0 ++66 4 0 0 2 0 0 0 0 0 ++70 6 1 1 2 0 0 0 0 0 ++72 2 0 0 0 0 0 1 0 0 ++73 1 0 0 1 0 0 0 0 0 ++76 4 1 1 2 0 0 0 0 0 ++77 8 2 2 1 0 0 0 0 0 ++103 1 0 0 0 0 0 1 0 0 ++106 3 0 0 2 0 0 0 0 0 ++108 3 1 1 1 0 0 1 0 0 ++109 1 0 0 0 0 0 0 0 0 ++112 6 0 0 2 0 0 0 0 0 ++114 2 0 0 1 0 0 0 0 0 ++120 2 0 0 1 0 0 1 0 0 ++121 2 0 0 0 0 0 0 0 0 ++126 4 0 0 2 0 0 0 0 0 ++129 2 1 1 1 0 0 0 0 0 ++130 14 0 0 1 1 0 1 0 0 ++132 2 0 0 0 0 0 1 0 0 ++fn=exit ++138 1 0 0 0 0 0 0 0 0 ++139 4 1 1 0 0 0 1 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../bits/stdlib-bsearch.h ++fn=intel_check_word.isra.0 ++27 24 0 0 0 0 0 0 0 0 ++28 12 0 0 0 0 0 0 0 0 ++29 288 1 1 0 0 0 0 0 0 ++31 162 0 0 0 0 0 0 0 0 ++32 81 0 0 0 0 0 0 0 0 ++37 15 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86/cacheinfo.c ++fn=handle_intel.constprop.1 ++259 30 1 1 3 0 0 21 0 0 ++261 3 0 0 3 0 0 0 0 0 ++264 9 0 0 3 0 0 0 0 0 ++270 3 1 1 0 0 0 3 0 0 ++272 3 0 0 0 0 0 3 0 0 ++273 3 0 0 0 0 0 3 0 0 ++275 12 0 0 0 0 0 0 0 0 ++281 15 0 0 0 0 0 6 0 0 ++286 6 0 0 0 0 0 0 0 0 ++288 6 1 1 0 0 0 3 0 0 ++289 3 0 0 0 0 0 0 0 0 ++293 18 0 0 0 0 0 3 0 0 ++295 6 0 0 0 0 0 0 0 0 ++298 21 1 1 0 0 0 3 0 0 ++300 6 0 0 0 0 0 0 0 0 ++319 33 2 2 27 0 0 0 0 0 ++fn=init_cacheinfo ++488 7 1 1 0 0 0 6 0 0 ++500 2 1 1 1 0 0 1 0 0 ++502 6 1 1 4 0 0 0 0 0 ++504 3 0 0 0 0 0 1 0 0 ++506 3 1 1 0 0 0 2 0 0 ++510 1 0 0 0 0 0 1 0 0 ++511 3 0 0 0 0 0 1 0 0 ++519 2 0 0 0 0 0 0 0 0 ++530 1 0 0 0 0 0 0 0 0 ++535 3 0 0 1 0 0 0 0 0 ++539 2 1 1 1 0 0 0 0 0 ++547 9 0 0 0 0 0 0 0 0 ++550 14 1 1 0 0 0 0 0 0 ++556 8 0 0 0 0 0 0 0 0 ++559 26 0 0 0 0 0 0 0 0 ++564 2 0 0 0 0 0 0 0 0 ++568 4 1 1 0 0 0 0 0 0 ++569 1 0 0 0 0 0 0 0 0 ++573 2 0 0 0 0 0 0 0 0 ++577 3 0 0 0 0 0 0 0 0 ++580 3 0 0 0 0 0 0 0 0 ++581 1 0 0 0 0 0 0 0 0 ++586 8 0 0 0 0 0 0 0 0 ++592 2 1 1 1 0 0 0 0 0 ++600 8 0 0 1 0 0 0 0 0 ++602 7 1 1 0 0 0 0 0 0 ++604 7 1 1 0 0 0 0 0 0 ++606 6 0 0 0 0 0 0 0 0 ++609 2 0 0 0 0 0 0 0 0 ++610 8 0 0 0 0 0 0 0 0 ++612 4 0 0 0 0 0 0 0 0 ++615 2 0 0 0 0 0 0 0 0 ++620 1 0 0 0 0 0 0 0 0 ++622 4 0 0 0 0 0 0 0 0 ++623 3 1 1 0 0 0 0 0 0 ++624 1 0 0 0 0 0 0 0 0 ++627 2 0 0 0 0 0 0 0 0 ++630 3 1 1 0 0 0 0 0 0 ++634 2 0 0 1 0 0 0 0 0 ++637 1 0 0 0 0 0 0 0 0 ++639 4 0 0 0 0 0 0 0 0 ++640 1 0 0 0 0 0 0 0 0 ++645 2 1 1 0 0 0 0 0 0 ++650 2 0 0 0 0 0 0 0 0 ++651 1 0 0 0 0 0 0 0 0 ++652 2 0 0 0 0 0 0 0 0 ++653 1 0 0 0 0 0 0 0 0 ++654 2 0 0 1 0 0 0 0 0 ++691 4 0 0 0 0 0 0 0 0 ++692 5 0 0 0 0 0 0 0 0 ++696 2 1 1 0 0 0 0 0 0 ++755 2 0 0 0 0 0 0 0 0 ++758 2 1 1 0 0 0 0 0 0 ++760 3 0 0 0 0 0 1 0 0 ++761 1 0 0 0 0 0 1 1 1 ++763 1 0 0 0 0 0 0 0 0 ++764 3 0 0 0 0 0 1 0 0 ++765 1 0 0 0 0 0 1 0 0 ++768 2 0 0 0 0 0 0 0 0 ++771 2 0 0 0 0 0 0 0 0 ++773 3 0 0 0 0 0 1 0 0 ++774 1 1 1 0 0 0 1 1 1 ++776 1 0 0 0 0 0 0 0 0 ++777 3 0 0 0 0 0 1 0 0 ++778 1 0 0 0 0 0 1 0 0 ++786 2 0 0 1 0 0 1 1 1 ++788 8 0 0 1 0 0 0 0 0 ++789 8 0 0 7 0 0 0 0 0 ++fn=intel_check_word.isra.0 ++119 162 0 0 81 6 6 0 0 0 ++122 81 0 0 0 0 0 0 0 0 ++128 36 0 0 0 0 0 24 0 0 ++132 12 1 1 0 0 0 0 0 0 ++134 3 1 1 0 0 0 0 0 0 ++138 42 0 0 0 0 0 0 0 0 ++140 48 1 1 0 0 0 0 0 0 ++142 15 0 0 0 0 0 0 0 0 ++144 30 0 0 0 0 0 0 0 0 ++152 30 0 0 0 0 0 0 0 0 ++161 13 1 1 0 0 0 0 0 0 ++164 30 1 1 0 0 0 0 0 0 ++167 24 0 0 0 0 0 0 0 0 ++171 16 0 0 0 0 0 0 0 0 ++173 36 0 0 0 0 0 0 0 0 ++175 14 0 0 0 0 0 0 0 0 ++177 8 0 0 0 0 0 0 0 0 ++178 14 0 0 0 0 0 0 0 0 ++179 10 0 0 0 0 0 0 0 0 ++181 3 1 1 0 0 0 0 0 0 ++183 6 0 0 0 0 0 0 0 0 ++185 9 1 1 0 0 0 0 0 0 ++186 12 1 1 0 0 0 0 0 0 ++187 9 0 0 0 0 0 0 0 0 ++188 15 0 0 0 0 0 0 0 0 ++196 5 0 0 0 0 0 0 0 0 ++203 24 0 0 0 0 0 0 0 0 ++225 12 1 1 0 0 0 0 0 0 ++250 12 0 0 0 0 0 0 0 0 ++255 36 0 0 30 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/memcmp.S ++fn=bcmp ++24 2 1 1 0 0 0 0 0 0 ++25 2 0 0 0 0 0 0 0 0 ++26 2 0 0 0 0 0 0 0 0 ++27 2 0 0 0 0 0 0 0 0 ++28 2 0 0 0 0 0 0 0 0 ++29 2 0 0 0 0 0 0 0 0 ++30 2 0 0 0 0 0 0 0 0 ++31 2 0 0 0 0 0 0 0 0 ++34 2 0 0 0 0 0 0 0 0 ++35 2 0 0 0 0 0 0 0 0 ++36 1 0 0 1 0 0 0 0 0 ++37 1 0 0 1 1 1 0 0 0 ++38 1 0 0 0 0 0 0 0 0 ++39 1 0 0 0 0 0 0 0 0 ++40 1 0 0 0 0 0 0 0 0 ++41 1 0 0 0 0 0 0 0 0 ++42 1 0 0 0 0 0 0 0 0 ++44 2 1 1 0 0 0 0 0 0 ++45 2 0 0 0 0 0 0 0 0 ++46 1 0 0 1 0 0 0 0 0 ++47 1 0 0 1 0 0 0 0 0 ++48 1 0 0 0 0 0 0 0 0 ++49 1 0 0 0 0 0 0 0 0 ++50 1 0 0 0 0 0 0 0 0 ++51 1 0 0 0 0 0 0 0 0 ++52 1 0 0 0 0 0 0 0 0 ++54 2 0 0 0 0 0 0 0 0 ++55 2 0 0 0 0 0 0 0 0 ++56 2 1 1 2 0 0 0 0 0 ++57 2 0 0 2 1 1 0 0 0 ++58 2 0 0 0 0 0 0 0 0 ++59 2 0 0 0 0 0 0 0 0 ++60 1 0 0 0 0 0 0 0 0 ++61 1 0 0 0 0 0 0 0 0 ++62 1 0 0 0 0 0 0 0 0 ++64 1 0 0 0 0 0 0 0 0 ++65 1 0 0 0 0 0 0 0 0 ++66 1 0 0 1 0 0 0 0 0 ++67 1 0 0 1 0 0 0 0 0 ++68 1 0 0 0 0 0 0 0 0 ++69 1 0 0 0 0 0 0 0 0 ++98 2 1 1 0 0 0 0 0 0 ++99 2 0 0 0 0 0 0 0 0 ++114 2 1 1 0 0 0 0 0 0 ++115 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/../strchr.S ++fn=index ++24 17 1 1 0 0 0 0 0 0 ++25 17 0 0 0 0 0 0 0 0 ++26 17 0 0 0 0 0 0 0 0 ++27 17 0 0 0 0 0 0 0 0 ++28 17 0 0 0 0 0 0 0 0 ++29 17 0 0 0 0 0 0 0 0 ++30 17 0 0 0 0 0 0 0 0 ++31 17 0 0 0 0 0 0 0 0 ++32 17 0 0 17 3 3 0 0 0 ++33 17 0 0 0 0 0 0 0 0 ++34 17 0 0 0 0 0 0 0 0 ++35 17 1 1 0 0 0 0 0 0 ++36 17 0 0 0 0 0 0 0 0 ++37 17 0 0 0 0 0 0 0 0 ++38 17 0 0 0 0 0 0 0 0 ++39 17 0 0 0 0 0 0 0 0 ++40 17 0 0 0 0 0 0 0 0 ++41 11 0 0 0 0 0 0 0 0 ++45 11 0 0 0 0 0 0 0 0 ++46 11 0 0 0 0 0 0 0 0 ++47 11 0 0 11 0 0 0 0 0 ++48 11 0 0 0 0 0 0 0 0 ++50 11 0 0 11 0 0 0 0 0 ++54 6 0 0 6 1 1 0 0 0 ++55 6 0 0 0 0 0 0 0 0 ++56 6 0 0 0 0 0 0 0 0 ++57 6 0 0 0 0 0 0 0 0 ++58 6 0 0 0 0 0 0 0 0 ++59 6 1 1 0 0 0 0 0 0 ++60 6 0 0 6 2 2 0 0 0 ++61 6 0 0 0 0 0 0 0 0 ++62 6 0 0 0 0 0 0 0 0 ++63 6 0 0 0 0 0 0 0 0 ++64 6 0 0 0 0 0 0 0 0 ++65 6 0 0 0 0 0 0 0 0 ++66 6 0 0 0 0 0 0 0 0 ++67 6 0 0 6 0 0 0 0 0 ++68 6 0 0 0 0 0 0 0 0 ++69 6 0 0 0 0 0 0 0 0 ++70 6 0 0 0 0 0 0 0 0 ++71 6 0 0 0 0 0 0 0 0 ++72 6 0 0 0 0 0 0 0 0 ++73 6 0 0 0 0 0 0 0 0 ++74 6 0 0 0 0 0 0 0 0 ++75 6 1 1 0 0 0 0 0 0 ++76 6 0 0 0 0 0 0 0 0 ++77 6 0 0 0 0 0 0 0 0 ++129 6 1 1 0 0 0 0 0 0 ++133 6 0 0 0 0 0 0 0 0 ++134 6 0 0 0 0 0 0 0 0 ++135 6 0 0 6 0 0 0 0 0 ++136 6 1 1 0 0 0 0 0 0 ++138 6 0 0 6 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/../strlen.S ++fn=strlen ++79 31 1 1 0 0 0 0 0 0 ++80 31 0 0 0 0 0 0 0 0 ++81 31 0 0 0 0 0 0 0 0 ++82 31 0 0 0 0 0 0 0 0 ++83 31 1 1 0 0 0 0 0 0 ++84 31 0 0 0 0 0 0 0 0 ++85 31 0 0 0 0 0 0 0 0 ++87 31 0 0 0 0 0 0 0 0 ++89 31 0 0 0 0 0 0 0 0 ++120 31 0 0 31 4 4 0 0 0 ++121 31 0 0 0 0 0 0 0 0 ++122 31 0 0 0 0 0 0 0 0 ++123 31 0 0 0 0 0 0 0 0 ++124 31 0 0 0 0 0 0 0 0 ++125 11 0 0 0 0 0 0 0 0 ++127 11 0 0 11 0 0 0 0 0 ++131 20 0 0 0 0 0 0 0 0 ++132 20 0 0 20 0 0 0 0 0 ++133 20 0 0 20 0 0 0 0 0 ++134 20 0 0 20 0 0 0 0 0 ++135 20 1 1 0 0 0 0 0 0 ++136 20 0 0 0 0 0 0 0 0 ++137 20 0 0 0 0 0 0 0 0 ++138 20 0 0 0 0 0 0 0 0 ++139 20 0 0 0 0 0 0 0 0 ++140 20 0 0 0 0 0 0 0 0 ++141 20 0 0 0 0 0 0 0 0 ++142 20 0 0 0 0 0 0 0 0 ++147 160 0 0 20 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-avx2.h ++fn=memchr ++30 4 0 0 0 0 0 0 0 0 ++32 3 1 1 2 0 0 0 0 0 ++fn=memrchr ++30 4 0 0 0 0 0 0 0 0 ++32 3 1 1 2 0 0 0 0 0 ++fn=rawmemchr ++30 4 0 0 0 0 0 0 0 0 ++32 3 1 1 2 0 0 0 0 0 ++fn=rindex ++30 4 0 0 0 0 0 0 0 0 ++32 3 1 1 2 0 0 0 0 0 ++fn=strchrnul ++30 4 0 0 0 0 0 0 0 0 ++32 3 1 1 2 0 0 0 0 0 ++fn=strlen ++30 8 0 0 0 0 0 0 0 0 ++32 6 1 1 4 0 0 0 0 0 ++fn=strnlen ++30 8 1 1 0 0 0 0 0 0 ++32 6 1 1 4 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-memcmp.h ++fn=bcmp ++32 2 0 0 0 0 0 0 0 0 ++33 5 1 1 3 0 0 0 0 0 ++34 2 0 0 0 0 0 0 0 0 ++35 3 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-memmove.h ++fn=memcpy@@GLIBC_2.14 ++44 5 1 1 2 0 0 0 0 0 ++47 2 0 0 0 0 0 0 0 0 ++48 2 1 1 0 0 0 0 0 0 ++59 2 0 0 0 0 0 0 0 0 ++61 5 1 1 2 0 0 0 0 0 ++fn=memmove ++44 10 2 2 4 1 0 0 0 0 ++47 4 0 0 0 0 0 0 0 0 ++48 4 0 0 0 0 0 0 0 0 ++59 4 0 0 0 0 0 0 0 0 ++61 10 1 1 4 1 0 0 0 0 ++fn=mempcpy ++44 5 1 1 2 0 0 0 0 0 ++47 2 0 0 0 0 0 0 0 0 ++48 2 1 1 0 0 0 0 0 0 ++59 2 0 0 0 0 0 0 0 0 ++61 5 1 1 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-memset.h ++fn=memset ++42 5 1 1 2 0 0 0 0 0 ++45 4 0 0 1 0 0 0 0 0 ++46 2 0 0 0 0 0 0 0 0 ++57 2 0 0 0 0 0 0 0 0 ++59 5 1 1 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-sse4_2.h ++fn=strcspn ++30 5 2 2 2 0 0 0 0 0 ++fn=strpbrk ++30 5 0 0 2 0 0 0 0 0 ++fn=strspn ++30 5 1 1 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-strcasecmp.h ++fn=strcasecmp ++32 5 1 1 2 0 0 0 0 0 ++fn=strcasecmp_l ++32 5 1 1 2 0 0 0 0 0 ++fn=strncasecmp ++32 5 0 0 2 0 0 0 0 0 ++fn=strncasecmp_l ++32 5 1 1 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/ifunc-unaligned-ssse3.h ++fn=stpcpy ++33 4 1 1 2 0 0 0 0 0 ++36 4 0 0 1 0 0 0 0 0 ++fn=stpncpy ++33 4 1 1 2 0 0 0 0 0 ++36 4 0 0 1 0 0 0 0 0 ++fn=strcat ++33 4 1 1 2 0 0 0 0 0 ++36 4 0 0 1 0 0 0 0 0 ++fn=strcpy ++33 4 0 0 2 0 0 0 0 0 ++36 4 0 0 1 0 0 0 0 0 ++fn=strncpy ++33 4 1 1 2 0 0 0 0 0 ++36 4 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/memchr.c ++fn=memchr ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/memcmp.c ++fn=bcmp ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S ++fn=memcpy ++129 35 1 1 0 0 0 0 0 0 ++131 163 0 0 0 0 0 0 0 0 ++132 163 0 0 0 0 0 0 0 0 ++133 77 0 0 0 0 0 0 0 0 ++134 77 0 0 0 0 0 0 0 0 ++139 62 0 0 62 1 0 0 0 0 ++140 62 0 0 62 0 0 0 0 0 ++141 62 0 0 0 0 0 62 8 8 ++142 62 0 0 0 0 0 62 1 1 ++147 62 0 0 62 0 0 0 0 0 ++267 86 0 0 0 0 0 0 0 0 ++268 86 0 0 0 0 0 0 0 0 ++269 34 0 0 0 0 0 0 0 0 ++270 34 0 0 0 0 0 0 0 0 ++271 17 0 0 0 0 0 0 0 0 ++272 17 0 0 0 0 0 0 0 0 ++273 15 0 0 0 0 0 0 0 0 ++274 1 0 0 1 0 0 0 0 0 ++275 1 0 0 0 0 0 1 1 1 ++277 15 0 0 15 0 0 0 0 0 ++299 52 0 0 52 0 0 0 0 0 ++300 52 0 0 52 0 0 0 0 0 ++301 52 0 0 0 0 0 52 3 3 ++302 52 0 0 0 0 0 52 0 0 ++303 52 0 0 52 0 0 0 0 0 ++306 17 1 0 17 0 0 0 0 0 ++307 17 0 0 17 0 0 0 0 0 ++308 17 0 0 0 0 0 17 0 0 ++309 17 0 0 0 0 0 17 0 0 ++310 17 0 0 17 0 0 0 0 0 ++313 2 1 1 2 1 1 0 0 0 ++314 2 0 0 2 0 0 0 0 0 ++315 2 0 0 0 0 0 2 1 1 ++316 2 0 0 0 0 0 2 0 0 ++317 2 0 0 2 0 0 0 0 0 ++327 15 0 0 0 0 0 0 0 0 ++328 15 0 0 0 0 0 0 0 0 ++329 15 0 0 0 0 0 0 0 0 ++330 15 0 0 0 0 0 0 0 0 ++352 15 1 1 15 0 0 0 0 0 ++353 15 1 1 15 0 0 0 0 0 ++354 15 0 0 15 0 0 0 0 0 ++355 15 0 0 15 0 0 0 0 0 ++356 15 0 0 0 0 0 15 3 3 ++357 15 0 0 0 0 0 15 4 4 ++358 15 0 0 0 0 0 15 3 3 ++359 15 0 0 0 0 0 15 0 0 ++361 15 0 0 15 0 0 0 0 0 ++fn=mempcpy ++116 128 1 1 0 0 0 0 0 0 ++117 128 0 0 0 0 0 0 0 0 ++118 128 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/memrchr.c ++fn=memrchr ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S ++fn=memset ++109 110 1 1 0 0 0 0 0 0 ++111 22 0 0 0 0 0 0 0 0 ++112 22 0 0 0 0 0 0 0 0 ++113 9 1 1 0 0 0 0 0 0 ++114 9 0 0 0 0 0 0 0 0 ++116 4 0 0 0 0 0 4 2 2 ++117 4 0 0 0 0 0 4 0 0 ++119 4 0 0 4 0 0 0 0 0 ++174 5 0 0 0 0 0 0 0 0 ++175 5 0 0 0 0 0 0 0 0 ++185 5 0 0 0 0 0 0 0 0 ++186 5 0 0 0 0 0 5 5 5 ++187 5 0 0 0 0 0 0 0 0 ++188 5 0 0 0 0 0 5 5 5 ++189 5 1 1 0 0 0 5 1 1 ++190 5 0 0 0 0 0 5 1 1 ++191 5 0 0 0 0 0 5 2 2 ++192 5 0 0 0 0 0 5 0 0 ++193 5 0 0 0 0 0 5 0 0 ++194 5 0 0 0 0 0 5 1 1 ++195 5 0 0 0 0 0 0 0 0 ++196 5 0 0 0 0 0 0 0 0 ++197 5 0 0 0 0 0 0 0 0 ++198 5 0 0 0 0 0 0 0 0 ++200 98 0 0 0 0 0 98 90 90 ++201 98 0 0 0 0 0 98 0 0 ++202 98 0 0 0 0 0 98 0 0 ++203 98 0 0 0 0 0 98 0 0 ++204 98 0 0 0 0 0 0 0 0 ++205 98 0 0 0 0 0 0 0 0 ++206 98 0 0 0 0 0 0 0 0 ++207 5 0 0 5 0 0 0 0 0 ++222 13 1 1 0 0 0 0 0 0 ++223 13 0 0 0 0 0 0 0 0 ++224 13 0 0 0 0 0 0 0 0 ++225 6 0 0 0 0 0 0 0 0 ++226 6 0 0 0 0 0 0 0 0 ++227 2 0 0 0 0 0 0 0 0 ++228 2 0 0 0 0 0 0 0 0 ++252 7 0 0 0 0 0 7 1 1 ++253 7 0 0 0 0 0 7 0 0 ++255 7 0 0 7 0 0 0 0 0 ++258 4 0 0 0 0 0 4 0 0 ++259 4 0 0 0 0 0 4 0 0 ++261 4 0 0 4 0 0 0 0 0 ++264 2 0 0 0 0 0 2 0 0 ++265 2 0 0 0 0 0 2 0 0 ++267 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/rawmemchr.c ++fn=rawmemchr ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/stpcpy.c ++fn=stpcpy ++33 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/stpncpy.c ++fn=stpncpy ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcasecmp.c ++fn=strcasecmp ++31 1 1 1 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcasecmp_l.c ++fn=strcasecmp_l ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcat.c ++fn=strcat ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strchr.c ++fn=index ++38 3 0 0 0 0 0 0 0 0 ++40 4 1 1 2 0 0 0 0 0 ++49 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strchrnul.c ++fn=strchrnul ++31 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcmp.c ++fn=strcmp ++38 8 1 1 4 0 0 0 0 0 ++41 8 0 0 2 0 0 0 0 0 ++47 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcpy.c ++fn=strcpy ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strcspn.c ++fn=strcspn ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strlen.c ++fn=strlen ++29 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strncase.c ++fn=strncasecmp ++31 1 1 1 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strncase_l.c ++fn=strncasecmp_l ++31 1 1 1 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strncmp.c ++fn=strncmp ++38 4 1 1 2 0 0 0 0 0 ++39 3 0 0 1 0 0 0 0 0 ++48 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strncpy.c ++fn=strncpy ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strnlen.c ++fn=strnlen ++31 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strpbrk.c ++fn=strpbrk ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strrchr-avx2.S ++fn=__strrchr_avx2 ++43 1 1 1 0 0 0 0 0 0 ++44 1 0 0 0 0 0 0 0 0 ++46 1 0 0 0 0 0 0 0 0 ++47 1 0 0 0 0 0 0 0 0 ++50 1 0 0 0 0 0 0 0 0 ++51 1 0 0 0 0 0 0 0 0 ++52 1 0 0 0 0 0 0 0 0 ++85 1 1 1 0 0 0 0 0 0 ++86 1 0 0 0 0 0 0 0 0 ++87 1 0 0 1 1 0 0 0 0 ++88 1 0 0 0 0 0 0 0 0 ++89 1 1 1 0 0 0 0 0 0 ++90 1 0 0 0 0 0 0 0 0 ++91 1 0 0 0 0 0 0 0 0 ++92 1 0 0 0 0 0 0 0 0 ++93 1 0 0 0 0 0 0 0 0 ++94 1 0 0 0 0 0 0 0 0 ++97 1 0 0 0 0 0 0 0 0 ++98 1 0 0 0 0 0 0 0 0 ++107 1 0 0 0 0 0 0 0 0 ++108 1 0 0 0 0 0 0 0 0 ++111 1 0 0 0 0 0 0 0 0 ++112 2 0 0 0 0 0 0 0 0 ++116 1 1 1 1 1 0 0 0 0 ++117 1 0 0 0 0 0 0 0 0 ++118 1 0 0 0 0 0 0 0 0 ++119 1 0 0 0 0 0 0 0 0 ++120 1 0 0 0 0 0 0 0 0 ++121 1 0 0 0 0 0 0 0 0 ++122 1 0 0 0 0 0 0 0 0 ++123 1 0 0 0 0 0 0 0 0 ++155 1 1 1 0 0 0 0 0 0 ++156 1 0 0 0 0 0 0 0 0 ++158 1 0 0 0 0 0 0 0 0 ++159 1 0 0 0 0 0 0 0 0 ++160 1 0 0 0 0 0 0 0 0 ++161 1 0 0 0 0 0 0 0 0 ++167 1 0 0 0 0 0 0 0 0 ++168 1 0 0 0 0 0 0 0 0 ++169 1 0 0 0 0 0 0 0 0 ++170 1 0 0 1 0 0 0 0 0 ++175 1 1 1 0 0 0 0 0 0 ++176 1 0 0 0 0 0 0 0 0 ++177 1 0 0 0 0 0 0 0 0 ++192 1 0 0 0 0 0 0 0 0 ++193 1 0 0 0 0 0 0 0 0 ++194 1 0 0 0 0 0 0 0 0 ++195 1 0 0 0 0 0 0 0 0 ++196 1 0 0 0 0 0 0 0 0 ++198 1 1 1 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strrchr.c ++fn=rindex ++28 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/multiarch/strspn.c ++fn=strspn ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/strcmp.S ++fn=strcmp ++144 726 1 1 0 0 0 0 0 0 ++145 726 0 0 0 0 0 0 0 0 ++147 726 0 0 0 0 0 0 0 0 ++148 726 0 0 0 0 0 0 0 0 ++169 726 0 0 0 0 0 0 0 0 ++170 726 0 0 0 0 0 0 0 0 ++171 580 0 0 0 0 0 0 0 0 ++172 580 0 0 0 0 0 0 0 0 ++173 474 0 0 474 25 16 0 0 0 ++174 474 0 0 474 13 4 0 0 0 ++175 474 0 0 474 0 0 0 0 0 ++176 474 0 0 474 0 0 0 0 0 ++197 474 0 0 0 0 0 0 0 0 ++198 474 0 0 0 0 0 0 0 0 ++199 474 0 0 0 0 0 0 0 0 ++200 474 0 0 0 0 0 0 0 0 ++201 474 0 0 0 0 0 0 0 0 ++202 474 0 0 0 0 0 0 0 0 ++203 474 0 0 0 0 0 0 0 0 ++208 13 0 0 0 0 0 0 0 0 ++209 13 0 0 0 0 0 0 0 0 ++218 265 1 1 0 0 0 0 0 0 ++219 265 0 0 0 0 0 0 0 0 ++220 265 0 0 0 0 0 0 0 0 ++221 265 0 0 0 0 0 0 0 0 ++222 265 1 1 0 0 0 0 0 0 ++223 265 0 0 0 0 0 0 0 0 ++224 265 0 0 0 0 0 0 0 0 ++225 265 0 0 0 0 0 0 0 0 ++226 198 0 0 0 0 0 0 0 0 ++227 138 0 0 0 0 0 0 0 0 ++228 138 0 0 0 0 0 0 0 0 ++229 138 0 0 0 0 0 0 0 0 ++231 198 0 0 0 0 0 0 0 0 ++232 198 0 0 0 0 0 0 0 0 ++233 198 0 0 0 0 0 0 0 0 ++234 198 0 0 198 5 2 0 0 0 ++235 198 0 0 0 0 0 0 0 0 ++236 198 0 0 0 0 0 0 0 0 ++246 67 0 0 67 2 1 0 0 0 ++247 67 0 0 0 0 0 0 0 0 ++248 67 0 0 0 0 0 0 0 0 ++250 67 0 0 67 0 0 0 0 0 ++256 67 1 1 0 0 0 0 0 0 ++257 67 0 0 0 0 0 0 0 0 ++258 67 0 0 0 0 0 0 0 0 ++259 67 0 0 0 0 0 0 0 0 ++260 67 0 0 0 0 0 0 0 0 ++265 67 0 0 0 0 0 0 0 0 ++267 64 0 0 0 0 0 0 0 0 ++268 64 0 0 0 0 0 0 0 0 ++269 128 0 0 0 0 0 0 0 0 ++277 64 0 0 64 1 0 0 0 0 ++278 64 0 0 64 0 0 0 0 0 ++281 64 0 0 0 0 0 0 0 0 ++282 64 1 1 0 0 0 0 0 0 ++283 64 0 0 0 0 0 0 0 0 ++284 64 0 0 0 0 0 0 0 0 ++285 64 0 0 0 0 0 0 0 0 ++286 64 0 0 0 0 0 0 0 0 ++317 5 1 1 0 0 0 0 0 0 ++318 5 0 0 5 1 0 0 0 0 ++319 5 0 0 5 0 0 0 0 0 ++320 5 0 0 0 0 0 0 0 0 ++321 5 0 0 0 0 0 0 0 0 ++323 5 0 0 0 0 0 0 0 0 ++324 5 0 0 0 0 0 0 0 0 ++325 5 0 0 0 0 0 0 0 0 ++326 5 0 0 0 0 0 0 0 0 ++327 5 0 0 0 0 0 0 0 0 ++328 5 0 0 0 0 0 0 0 0 ++329 5 0 0 0 0 0 0 0 0 ++330 5 1 1 5 0 0 0 0 0 ++333 5 0 0 0 0 0 0 0 0 ++334 5 0 0 0 0 0 0 0 0 ++335 5 0 0 0 0 0 0 0 0 ++341 5 0 0 0 0 0 0 0 0 ++342 5 0 0 0 0 0 0 0 0 ++343 10 0 0 0 0 0 0 0 0 ++347 5 0 0 0 0 0 0 0 0 ++348 5 0 0 0 0 0 0 0 0 ++351 5 0 0 5 0 0 0 0 0 ++352 5 1 1 5 0 0 0 0 0 ++353 5 0 0 0 0 0 0 0 0 ++356 5 0 0 0 0 0 0 0 0 ++357 5 0 0 0 0 0 0 0 0 ++358 5 0 0 0 0 0 0 0 0 ++364 5 0 0 0 0 0 0 0 0 ++365 5 0 0 0 0 0 0 0 0 ++366 5 0 0 0 0 0 0 0 0 ++367 5 0 0 0 0 0 0 0 0 ++368 5 0 0 0 0 0 0 0 0 ++369 5 0 0 0 0 0 0 0 0 ++447 1 1 1 0 0 0 0 0 0 ++448 1 0 0 1 1 1 0 0 0 ++449 1 0 0 1 0 0 0 0 0 ++450 1 0 0 0 0 0 0 0 0 ++451 1 0 0 0 0 0 0 0 0 ++453 1 0 0 0 0 0 0 0 0 ++454 1 0 0 0 0 0 0 0 0 ++455 1 0 0 0 0 0 0 0 0 ++456 1 0 0 0 0 0 0 0 0 ++457 1 0 0 0 0 0 0 0 0 ++458 1 0 0 0 0 0 0 0 0 ++459 1 0 0 0 0 0 0 0 0 ++460 1 1 1 1 0 0 0 0 0 ++463 1 0 0 0 0 0 0 0 0 ++464 1 0 0 0 0 0 0 0 0 ++465 1 0 0 0 0 0 0 0 0 ++471 1 0 0 0 0 0 0 0 0 ++472 1 0 0 0 0 0 0 0 0 ++473 2 0 0 0 0 0 0 0 0 ++477 1 0 0 0 0 0 0 0 0 ++478 1 0 0 0 0 0 0 0 0 ++481 1 0 0 1 0 0 0 0 0 ++482 1 1 1 1 0 0 0 0 0 ++483 1 0 0 0 0 0 0 0 0 ++486 1 0 0 0 0 0 0 0 0 ++487 1 0 0 0 0 0 0 0 0 ++488 1 0 0 0 0 0 0 0 0 ++494 1 0 0 0 0 0 0 0 0 ++495 1 0 0 0 0 0 0 0 0 ++496 1 0 0 0 0 0 0 0 0 ++497 1 0 0 0 0 0 0 0 0 ++498 1 0 0 0 0 0 0 0 0 ++499 1 0 0 0 0 0 0 0 0 ++506 1 0 0 0 0 0 0 0 0 ++507 1 0 0 0 0 0 0 0 0 ++509 1 0 0 0 0 0 0 0 0 ++510 1 0 0 0 0 0 0 0 0 ++512 1 1 1 1 0 0 0 0 0 ++513 1 0 0 1 0 0 0 0 0 ++514 1 0 0 0 0 0 0 0 0 ++517 1 0 0 0 0 0 0 0 0 ++518 1 0 0 0 0 0 0 0 0 ++519 1 0 0 0 0 0 0 0 0 ++525 1 0 0 0 0 0 0 0 0 ++526 1 0 0 0 0 0 0 0 0 ++527 1 0 0 0 0 0 0 0 0 ++528 1 0 0 0 0 0 0 0 0 ++529 1 0 0 0 0 0 0 0 0 ++530 1 0 0 0 0 0 0 0 0 ++696 1 1 1 0 0 0 0 0 0 ++697 1 0 0 1 0 0 0 0 0 ++698 1 0 0 1 0 0 0 0 0 ++699 1 0 0 0 0 0 0 0 0 ++700 1 0 0 0 0 0 0 0 0 ++702 1 0 0 0 0 0 0 0 0 ++703 1 0 0 0 0 0 0 0 0 ++704 1 0 0 0 0 0 0 0 0 ++705 1 0 0 0 0 0 0 0 0 ++706 1 0 0 0 0 0 0 0 0 ++707 1 0 0 0 0 0 0 0 0 ++708 1 0 0 0 0 0 0 0 0 ++709 1 1 1 1 0 0 0 0 0 ++713 1 0 0 0 0 0 0 0 0 ++714 1 0 0 0 0 0 0 0 0 ++715 1 0 0 0 0 0 0 0 0 ++721 1 0 0 0 0 0 0 0 0 ++722 1 0 0 0 0 0 0 0 0 ++723 2 0 0 0 0 0 0 0 0 ++727 1 0 0 0 0 0 0 0 0 ++728 1 0 0 0 0 0 0 0 0 ++731 1 0 0 1 0 0 0 0 0 ++732 1 1 1 1 0 0 0 0 0 ++733 1 0 0 0 0 0 0 0 0 ++736 1 0 0 0 0 0 0 0 0 ++737 1 0 0 0 0 0 0 0 0 ++738 1 0 0 0 0 0 0 0 0 ++744 1 0 0 0 0 0 0 0 0 ++745 1 0 0 0 0 0 0 0 0 ++746 1 0 0 0 0 0 0 0 0 ++747 1 0 0 0 0 0 0 0 0 ++748 1 0 0 0 0 0 0 0 0 ++749 1 0 0 0 0 0 0 0 0 ++946 87 1 1 0 0 0 0 0 0 ++947 87 0 0 87 1 0 0 0 0 ++948 87 0 0 87 1 0 0 0 0 ++949 87 0 0 0 0 0 0 0 0 ++950 87 0 0 0 0 0 0 0 0 ++952 87 0 0 0 0 0 0 0 0 ++953 87 0 0 0 0 0 0 0 0 ++954 87 0 0 0 0 0 0 0 0 ++955 87 0 0 0 0 0 0 0 0 ++956 87 0 0 0 0 0 0 0 0 ++957 87 0 0 0 0 0 0 0 0 ++958 87 0 0 0 0 0 0 0 0 ++959 6 1 1 6 0 0 0 0 0 ++963 6 0 0 0 0 0 0 0 0 ++964 6 0 0 0 0 0 0 0 0 ++965 6 0 0 0 0 0 0 0 0 ++971 6 0 0 0 0 0 0 0 0 ++972 6 0 0 0 0 0 0 0 0 ++973 12 0 0 0 0 0 0 0 0 ++977 6 0 0 0 0 0 0 0 0 ++978 6 0 0 0 0 0 0 0 0 ++981 6 0 0 6 1 1 0 0 0 ++982 6 1 1 6 1 1 0 0 0 ++983 6 0 0 0 0 0 0 0 0 ++986 6 0 0 0 0 0 0 0 0 ++987 6 0 0 0 0 0 0 0 0 ++988 6 0 0 0 0 0 0 0 0 ++994 6 0 0 0 0 0 0 0 0 ++995 6 0 0 0 0 0 0 0 0 ++996 6 0 0 0 0 0 0 0 0 ++997 6 0 0 0 0 0 0 0 0 ++998 6 0 0 0 0 0 0 0 0 ++999 6 0 0 0 0 0 0 0 0 ++1071 7 1 1 0 0 0 0 0 0 ++1072 7 0 0 7 0 0 0 0 0 ++1073 7 0 0 7 0 0 0 0 0 ++1074 7 0 0 0 0 0 0 0 0 ++1075 7 0 0 0 0 0 0 0 0 ++1077 7 0 0 0 0 0 0 0 0 ++1078 7 0 0 0 0 0 0 0 0 ++1079 7 0 0 0 0 0 0 0 0 ++1080 7 0 0 0 0 0 0 0 0 ++1081 7 0 0 0 0 0 0 0 0 ++1082 7 0 0 0 0 0 0 0 0 ++1083 7 0 0 0 0 0 0 0 0 ++1084 2 1 1 2 0 0 0 0 0 ++1088 2 0 0 0 0 0 0 0 0 ++1089 2 0 0 0 0 0 0 0 0 ++1090 2 0 0 0 0 0 0 0 0 ++1096 2 0 0 0 0 0 0 0 0 ++1097 2 0 0 0 0 0 0 0 0 ++1098 4 0 0 0 0 0 0 0 0 ++1102 2 0 0 0 0 0 0 0 0 ++1103 2 0 0 0 0 0 0 0 0 ++1106 2 0 0 2 0 0 0 0 0 ++1107 2 1 1 2 0 0 0 0 0 ++1108 2 0 0 0 0 0 0 0 0 ++1111 2 0 0 0 0 0 0 0 0 ++1112 2 0 0 0 0 0 0 0 0 ++1113 2 0 0 0 0 0 0 0 0 ++1119 2 0 0 0 0 0 0 0 0 ++1120 2 0 0 0 0 0 0 0 0 ++1121 2 0 0 0 0 0 0 0 0 ++1122 2 0 0 0 0 0 0 0 0 ++1123 2 0 0 0 0 0 0 0 0 ++1124 2 0 0 0 0 0 0 0 0 ++1196 7 1 1 0 0 0 0 0 0 ++1197 7 0 0 7 0 0 0 0 0 ++1198 7 0 0 7 1 1 0 0 0 ++1199 7 0 0 0 0 0 0 0 0 ++1200 7 0 0 0 0 0 0 0 0 ++1202 7 0 0 0 0 0 0 0 0 ++1203 7 0 0 0 0 0 0 0 0 ++1204 7 0 0 0 0 0 0 0 0 ++1205 7 0 0 0 0 0 0 0 0 ++1206 7 0 0 0 0 0 0 0 0 ++1207 7 0 0 0 0 0 0 0 0 ++1208 7 0 0 0 0 0 0 0 0 ++1209 3 1 1 3 0 0 0 0 0 ++1213 3 0 0 0 0 0 0 0 0 ++1214 3 0 0 0 0 0 0 0 0 ++1215 3 0 0 0 0 0 0 0 0 ++1221 3 0 0 0 0 0 0 0 0 ++1222 3 0 0 0 0 0 0 0 0 ++1223 6 0 0 0 0 0 0 0 0 ++1227 3 0 0 0 0 0 0 0 0 ++1228 3 0 0 0 0 0 0 0 0 ++1231 3 0 0 3 0 0 0 0 0 ++1232 3 1 1 3 0 0 0 0 0 ++1233 3 0 0 0 0 0 0 0 0 ++1236 3 0 0 0 0 0 0 0 0 ++1237 3 0 0 0 0 0 0 0 0 ++1238 3 0 0 0 0 0 0 0 0 ++1244 3 0 0 0 0 0 0 0 0 ++1245 3 0 0 0 0 0 0 0 0 ++1246 3 0 0 0 0 0 0 0 0 ++1247 3 0 0 0 0 0 0 0 0 ++1248 3 0 0 0 0 0 0 0 0 ++1249 3 0 0 0 0 0 0 0 0 ++1321 15 1 1 0 0 0 0 0 0 ++1322 15 0 0 15 1 1 0 0 0 ++1323 15 0 0 15 2 1 0 0 0 ++1324 15 0 0 0 0 0 0 0 0 ++1325 15 0 0 0 0 0 0 0 0 ++1327 15 0 0 0 0 0 0 0 0 ++1328 15 0 0 0 0 0 0 0 0 ++1329 15 0 0 0 0 0 0 0 0 ++1330 15 0 0 0 0 0 0 0 0 ++1331 15 0 0 0 0 0 0 0 0 ++1332 15 0 0 0 0 0 0 0 0 ++1333 15 0 0 0 0 0 0 0 0 ++1334 9 1 1 9 0 0 0 0 0 ++1338 9 0 0 0 0 0 0 0 0 ++1339 9 0 0 0 0 0 0 0 0 ++1340 9 0 0 0 0 0 0 0 0 ++1346 9 0 0 0 0 0 0 0 0 ++1347 9 0 0 0 0 0 0 0 0 ++1348 18 0 0 0 0 0 0 0 0 ++1352 9 0 0 0 0 0 0 0 0 ++1353 9 0 0 0 0 0 0 0 0 ++1356 9 0 0 9 0 0 0 0 0 ++1357 9 1 1 9 0 0 0 0 0 ++1358 9 0 0 0 0 0 0 0 0 ++1361 9 0 0 0 0 0 0 0 0 ++1362 9 0 0 0 0 0 0 0 0 ++1363 9 0 0 0 0 0 0 0 0 ++1369 9 0 0 0 0 0 0 0 0 ++1370 9 0 0 0 0 0 0 0 0 ++1371 9 0 0 0 0 0 0 0 0 ++1372 9 0 0 0 0 0 0 0 0 ++1373 9 0 0 0 0 0 0 0 0 ++1374 9 0 0 0 0 0 0 0 0 ++1446 12 1 1 0 0 0 0 0 0 ++1447 12 0 0 12 0 0 0 0 0 ++1448 12 0 0 12 0 0 0 0 0 ++1449 12 0 0 0 0 0 0 0 0 ++1450 12 0 0 0 0 0 0 0 0 ++1452 12 0 0 0 0 0 0 0 0 ++1453 12 0 0 0 0 0 0 0 0 ++1454 12 0 0 0 0 0 0 0 0 ++1455 12 0 0 0 0 0 0 0 0 ++1456 12 0 0 0 0 0 0 0 0 ++1457 12 0 0 0 0 0 0 0 0 ++1458 12 0 0 0 0 0 0 0 0 ++1459 12 1 1 12 0 0 0 0 0 ++1463 12 0 0 0 0 0 0 0 0 ++1464 12 0 0 0 0 0 0 0 0 ++1465 12 0 0 0 0 0 0 0 0 ++1471 12 0 0 0 0 0 0 0 0 ++1472 12 0 0 0 0 0 0 0 0 ++1473 24 0 0 0 0 0 0 0 0 ++1477 12 0 0 0 0 0 0 0 0 ++1478 12 0 0 0 0 0 0 0 0 ++1481 12 0 0 12 0 0 0 0 0 ++1482 12 1 1 12 0 0 0 0 0 ++1483 12 0 0 0 0 0 0 0 0 ++1486 12 0 0 0 0 0 0 0 0 ++1487 12 0 0 0 0 0 0 0 0 ++1488 12 0 0 0 0 0 0 0 0 ++1494 12 0 0 0 0 0 0 0 0 ++1495 12 0 0 0 0 0 0 0 0 ++1496 12 0 0 0 0 0 0 0 0 ++1497 12 0 0 0 0 0 0 0 0 ++1498 12 0 0 0 0 0 0 0 0 ++1499 12 0 0 0 0 0 0 0 0 ++1571 5 1 1 0 0 0 0 0 0 ++1572 5 0 0 5 1 1 0 0 0 ++1573 5 0 0 5 0 0 0 0 0 ++1574 5 0 0 0 0 0 0 0 0 ++1575 5 0 0 0 0 0 0 0 0 ++1577 5 0 0 0 0 0 0 0 0 ++1578 5 0 0 0 0 0 0 0 0 ++1579 5 0 0 0 0 0 0 0 0 ++1580 5 0 0 0 0 0 0 0 0 ++1581 5 0 0 0 0 0 0 0 0 ++1582 5 0 0 0 0 0 0 0 0 ++1583 5 0 0 0 0 0 0 0 0 ++1584 5 1 1 5 0 0 0 0 0 ++1588 5 0 0 0 0 0 0 0 0 ++1589 5 0 0 0 0 0 0 0 0 ++1590 5 0 0 0 0 0 0 0 0 ++1596 5 0 0 0 0 0 0 0 0 ++1597 5 0 0 0 0 0 0 0 0 ++1598 10 0 0 0 0 0 0 0 0 ++1602 5 0 0 0 0 0 0 0 0 ++1603 5 0 0 0 0 0 0 0 0 ++1606 5 0 0 5 0 0 0 0 0 ++1607 5 1 1 5 2 2 0 0 0 ++1608 5 0 0 0 0 0 0 0 0 ++1611 5 0 0 0 0 0 0 0 0 ++1612 5 0 0 0 0 0 0 0 0 ++1613 5 0 0 0 0 0 0 0 0 ++1619 5 0 0 0 0 0 0 0 0 ++1620 5 0 0 0 0 0 0 0 0 ++1621 5 0 0 0 0 0 0 0 0 ++1622 5 0 0 0 0 0 0 0 0 ++1623 5 0 0 0 0 0 0 0 0 ++1624 5 0 0 0 0 0 0 0 0 ++1696 13 1 1 0 0 0 0 0 0 ++1697 13 0 0 13 1 1 0 0 0 ++1698 13 0 0 13 2 2 0 0 0 ++1699 13 0 0 0 0 0 0 0 0 ++1700 13 0 0 0 0 0 0 0 0 ++1702 13 0 0 0 0 0 0 0 0 ++1703 13 0 0 0 0 0 0 0 0 ++1704 13 0 0 0 0 0 0 0 0 ++1705 13 0 0 0 0 0 0 0 0 ++1706 13 0 0 0 0 0 0 0 0 ++1707 13 0 0 0 0 0 0 0 0 ++1708 13 0 0 0 0 0 0 0 0 ++1709 11 1 1 11 0 0 0 0 0 ++1713 11 0 0 0 0 0 0 0 0 ++1714 11 0 0 0 0 0 0 0 0 ++1715 11 0 0 0 0 0 0 0 0 ++1721 11 0 0 0 0 0 0 0 0 ++1722 11 0 0 0 0 0 0 0 0 ++1723 22 0 0 0 0 0 0 0 0 ++1727 11 0 0 0 0 0 0 0 0 ++1728 11 0 0 0 0 0 0 0 0 ++1731 11 0 0 11 3 2 0 0 0 ++1732 11 1 1 11 1 1 0 0 0 ++1733 11 0 0 0 0 0 0 0 0 ++1736 11 0 0 0 0 0 0 0 0 ++1737 11 0 0 0 0 0 0 0 0 ++1738 11 0 0 0 0 0 0 0 0 ++1744 11 0 0 0 0 0 0 0 0 ++1745 11 0 0 0 0 0 0 0 0 ++1746 11 0 0 0 0 0 0 0 0 ++1747 11 0 0 0 0 0 0 0 0 ++1748 11 0 0 0 0 0 0 0 0 ++1749 11 0 0 0 0 0 0 0 0 ++1756 2 0 0 0 0 0 0 0 0 ++1757 2 0 0 0 0 0 0 0 0 ++1759 2 0 0 0 0 0 0 0 0 ++1760 2 0 0 0 0 0 0 0 0 ++1762 2 1 1 2 0 0 0 0 0 ++1763 2 0 0 2 0 0 0 0 0 ++1764 2 0 0 0 0 0 0 0 0 ++1767 2 0 0 0 0 0 0 0 0 ++1768 2 0 0 0 0 0 0 0 0 ++1769 2 0 0 0 0 0 0 0 0 ++1775 2 0 0 0 0 0 0 0 0 ++1776 2 0 0 0 0 0 0 0 0 ++1777 2 0 0 0 0 0 0 0 0 ++1778 2 0 0 0 0 0 0 0 0 ++1779 2 0 0 0 0 0 0 0 0 ++1780 2 0 0 0 0 0 0 0 0 ++1821 20 1 1 0 0 0 0 0 0 ++1822 20 0 0 20 1 0 0 0 0 ++1823 20 0 0 20 2 1 0 0 0 ++1824 20 0 0 0 0 0 0 0 0 ++1825 20 0 0 0 0 0 0 0 0 ++1827 20 0 0 0 0 0 0 0 0 ++1828 20 0 0 0 0 0 0 0 0 ++1829 20 0 0 0 0 0 0 0 0 ++1830 20 0 0 0 0 0 0 0 0 ++1831 20 0 0 0 0 0 0 0 0 ++1832 20 0 0 0 0 0 0 0 0 ++1833 20 0 0 0 0 0 0 0 0 ++1834 10 1 1 10 0 0 0 0 0 ++1838 10 0 0 0 0 0 0 0 0 ++1839 10 0 0 0 0 0 0 0 0 ++1840 10 0 0 0 0 0 0 0 0 ++1846 10 0 0 0 0 0 0 0 0 ++1847 10 0 0 0 0 0 0 0 0 ++1848 20 0 0 0 0 0 0 0 0 ++1852 10 0 0 0 0 0 0 0 0 ++1853 10 0 0 0 0 0 0 0 0 ++1856 10 0 0 10 2 2 0 0 0 ++1857 10 1 1 10 1 1 0 0 0 ++1858 10 0 0 0 0 0 0 0 0 ++1861 10 0 0 0 0 0 0 0 0 ++1862 10 0 0 0 0 0 0 0 0 ++1863 10 0 0 0 0 0 0 0 0 ++1869 10 0 0 0 0 0 0 0 0 ++1870 10 0 0 0 0 0 0 0 0 ++1871 10 0 0 0 0 0 0 0 0 ++1872 10 0 0 0 0 0 0 0 0 ++1873 10 0 0 0 0 0 0 0 0 ++1874 10 0 0 0 0 0 0 0 0 ++1946 14 1 1 0 0 0 0 0 0 ++1947 14 0 0 14 1 1 0 0 0 ++1948 14 0 0 14 2 1 0 0 0 ++1949 14 0 0 0 0 0 0 0 0 ++1950 14 0 0 0 0 0 0 0 0 ++1952 14 0 0 0 0 0 0 0 0 ++1953 14 0 0 0 0 0 0 0 0 ++1954 14 0 0 0 0 0 0 0 0 ++1955 14 0 0 0 0 0 0 0 0 ++1956 14 0 0 0 0 0 0 0 0 ++1957 14 0 0 0 0 0 0 0 0 ++1958 14 0 0 0 0 0 0 0 0 ++1959 4 1 1 4 0 0 0 0 0 ++1963 4 0 0 0 0 0 0 0 0 ++1964 4 0 0 0 0 0 0 0 0 ++1965 4 0 0 0 0 0 0 0 0 ++1971 4 0 0 0 0 0 0 0 0 ++1972 4 0 0 0 0 0 0 0 0 ++1973 8 0 0 0 0 0 0 0 0 ++1977 4 0 0 0 0 0 0 0 0 ++1978 4 0 0 0 0 0 0 0 0 ++1981 4 0 0 4 2 2 0 0 0 ++1982 4 1 1 4 0 0 0 0 0 ++1983 4 0 0 0 0 0 0 0 0 ++1986 4 0 0 0 0 0 0 0 0 ++1987 4 0 0 0 0 0 0 0 0 ++1988 4 0 0 0 0 0 0 0 0 ++1994 4 0 0 0 0 0 0 0 0 ++1995 4 0 0 0 0 0 0 0 0 ++1996 4 0 0 0 0 0 0 0 0 ++1997 4 0 0 0 0 0 0 0 0 ++1998 4 0 0 0 0 0 0 0 0 ++1999 4 0 0 0 0 0 0 0 0 ++2071 11 1 1 0 0 0 0 0 0 ++2072 11 0 0 11 1 1 0 0 0 ++2073 11 0 0 11 2 1 0 0 0 ++2074 11 0 0 0 0 0 0 0 0 ++2075 11 0 0 0 0 0 0 0 0 ++2077 11 0 0 0 0 0 0 0 0 ++2078 11 0 0 0 0 0 0 0 0 ++2079 11 0 0 0 0 0 0 0 0 ++2080 11 0 0 0 0 0 0 0 0 ++2081 11 0 0 0 0 0 0 0 0 ++2082 11 0 0 0 0 0 0 0 0 ++2083 11 0 0 0 0 0 0 0 0 ++2085 5 1 1 5 0 0 0 0 0 ++2089 5 0 0 0 0 0 0 0 0 ++2090 5 0 0 0 0 0 0 0 0 ++2091 5 0 0 0 0 0 0 0 0 ++2097 5 0 0 0 0 0 0 0 0 ++2098 5 0 0 0 0 0 0 0 0 ++2100 10 0 0 0 0 0 0 0 0 ++2104 5 0 0 0 0 0 0 0 0 ++2105 5 0 0 0 0 0 0 0 0 ++2108 5 0 0 5 2 1 0 0 0 ++2109 5 1 1 5 0 0 0 0 0 ++2110 5 0 0 0 0 0 0 0 0 ++2113 5 0 0 0 0 0 0 0 0 ++2114 5 0 0 0 0 0 0 0 0 ++2115 5 0 0 0 0 0 0 0 0 ++2121 5 0 0 0 0 0 0 0 0 ++2122 5 0 0 0 0 0 0 0 0 ++2123 5 0 0 0 0 0 0 0 0 ++2124 5 0 0 0 0 0 0 0 0 ++2125 5 0 0 0 0 0 0 0 0 ++2126 5 0 0 0 0 0 0 0 0 ++2200 138 0 0 0 0 0 0 0 0 ++2202 265 1 1 0 0 0 0 0 0 ++2203 265 0 0 0 0 0 0 0 0 ++2204 265 0 0 0 0 0 0 0 0 ++2205 265 0 0 0 0 0 0 0 0 ++2206 414 0 0 0 0 0 0 0 0 ++2211 726 0 0 0 0 0 0 0 0 ++2217 726 0 0 726 0 0 0 0 0 ++2218 726 0 0 726 0 0 0 0 0 ++2226 726 0 0 0 0 0 0 0 0 ++2227 726 0 0 726 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/../sysdeps/x86_64/strcspn.S ++fn=strcspn ++30 2 1 1 0 0 0 0 0 0 ++37 2 0 0 0 0 0 0 0 0 ++38 2 0 0 0 0 0 0 0 0 ++40 2 0 0 0 0 0 0 0 0 ++41 2 0 0 0 0 0 0 0 0 ++42 2 0 0 0 0 0 0 0 0 ++43 2 0 0 0 0 0 0 0 0 ++44 66 0 0 0 0 0 64 4 4 ++47 4 0 0 0 0 0 0 0 0 ++54 2 0 0 2 0 0 0 0 0 ++55 2 0 0 0 0 0 0 0 0 ++56 2 0 0 0 0 0 0 0 0 ++57 2 0 0 0 0 0 2 0 0 ++59 2 0 0 2 0 0 0 0 0 ++60 2 0 0 0 0 0 0 0 0 ++61 2 1 1 0 0 0 0 0 0 ++62 2 0 0 0 0 0 2 0 0 ++64 2 0 0 2 0 0 0 0 0 ++65 2 0 0 0 0 0 0 0 0 ++66 2 0 0 0 0 0 0 0 0 ++75 6 0 0 0 0 0 0 0 0 ++87 17 0 0 0 0 0 0 0 0 ++89 17 0 0 17 0 0 0 0 0 ++90 17 0 0 17 0 0 0 0 0 ++91 17 0 0 0 0 0 0 0 0 ++93 17 0 0 17 0 0 0 0 0 ++94 17 0 0 17 0 0 0 0 0 ++95 17 0 0 0 0 0 0 0 0 ++97 17 0 0 17 0 0 0 0 0 ++98 17 0 0 17 0 0 0 0 0 ++99 17 0 0 0 0 0 0 0 0 ++101 16 0 0 16 0 0 0 0 0 ++102 16 0 0 16 0 0 0 0 0 ++103 16 0 0 0 0 0 0 0 0 ++105 1 0 0 0 0 0 0 0 0 ++106 2 0 0 0 0 0 0 0 0 ++107 2 0 0 0 0 0 0 0 0 ++109 2 0 0 0 0 0 0 0 0 ++116 2 0 0 0 0 0 0 0 0 ++120 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/string/strdup.c ++fn=strdup ++40 28 1 1 0 0 0 14 0 0 ++41 14 0 0 0 0 0 7 0 0 ++42 14 0 0 0 0 0 7 0 0 ++44 14 0 0 0 0 0 0 0 0 ++47 28 0 0 0 0 0 0 0 0 ++48 21 0 0 14 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/time/../sysdeps/generic/dl-hash.h ++fn=gettimeofday ++43 1 0 0 0 0 0 0 0 0 ++44 1 0 0 0 0 0 0 0 0 ++45 13 0 0 4 0 0 0 0 0 ++48 12 0 0 0 0 0 0 0 0 ++62 16 0 0 0 0 0 0 0 0 ++67 1 0 0 0 0 0 0 0 0 ++fn=time ++44 1 0 0 0 0 0 0 0 0 ++45 13 0 0 4 1 1 0 0 0 ++48 12 0 0 0 0 0 0 0 0 ++62 16 1 1 0 0 0 0 0 0 ++67 1 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/time/../sysdeps/unix/sysv/linux/x86/gettimeofday.c ++fn=gettimeofday ++42 16 3 3 1 0 0 4 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/time/../sysdeps/unix/sysv/linux/x86/time.c ++fn=time ++43 17 2 2 1 0 0 4 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-avx2.h ++fn=wcschr ++30 8 0 0 0 0 0 0 0 0 ++32 6 2 2 4 0 0 0 0 0 ++fn=wcslen ++30 4 0 0 0 0 0 0 0 0 ++32 3 2 2 2 0 0 0 0 0 ++fn=wmemchr ++30 8 0 0 0 0 0 0 0 0 ++32 6 1 1 4 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-wmemset.h ++fn=wmemset ++30 6 0 0 0 0 0 0 0 0 ++32 8 1 1 4 0 0 0 0 0 ++34 8 1 1 0 0 0 0 0 0 ++35 2 0 0 0 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/wcschr.c ++fn=wcschr ++31 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/wcslen.c ++fn=wcslen ++29 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/wcsnlen.c ++fn=wcsnlen ++38 3 0 0 0 0 0 0 0 0 ++40 3 1 1 2 0 0 0 0 0 ++49 1 0 0 1 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/wmemchr.c ++fn=wmemchr ++31 2 0 0 2 0 0 0 0 0 ++fl=/build/glibc-OTsEL5/glibc-2.27/wcsmbs/../sysdeps/x86_64/multiarch/wmemset.c ++fn=wmemset ++31 2 0 0 2 0 0 0 0 0 ++fl=a.c ++fn=main ++1 2 0 0 0 0 0 1 0 0 ++2 1 1 1 0 0 0 1 0 0 ++3 6000004 0 0 1000001 0 0 1 0 0 ++4 4000000 0 0 1000000 0 0 0 0 0 ++6 6 0 0 1 0 0 0 0 0 ++7 2 0 0 2 0 0 0 0 0 ++fl=??? ++fn=??? ++0 427 41 34 172 14 0 49 1 1 ++fn=__libc_csu_init ++0 34 2 2 8 0 0 8 0 0 ++fn=_start ++0 11 2 2 2 0 0 3 0 0 ++summary: 10229753 952 931 2057955 1918 1520 18005 745 699 +diff --git a/configure.ac b/configure.ac +index 79b17f394..a07d04021 100755 +--- a/configure.ac ++++ b/configure.ac +@@ -309,11 +309,14 @@ case "${host_cpu}" in + AC_MSG_RESULT([ok (${host_cpu})]) + ARCH_MAX="nanomips" + ;; +- +- *) +- AC_MSG_RESULT([no (${host_cpu})]) +- AC_MSG_ERROR([Unsupported host architecture. Sorry]) +- ;; ++ sw_64*) ++ AC_MSG_RESULT([ok (${host_cpu})]) ++ ARCH_MAX="sw64" ++ ;; ++ *) ++ AC_MSG_RESULT([no (${host_cpu})]) ++ AC_MSG_ERROR([Unsupported host architecture. Sorry]) ++ ;; + esac + + #---------------------------------------------------------------------------- +@@ -941,6 +944,17 @@ case "$ARCH_MAX-$VGCONF_OS" in + valt_load_address_sec_inner="0xUNSET" + AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) + ;; ++ sw64-linux) ++ VGCONF_ARCH_PRI="sw64" ++ VGCONF_ARCH_SEC="" ++ VGCONF_PLATFORM_PRI_CAPS="SW64_LINUX" ++ VGCONF_PLATFORM_SEC_CAPS="" ++ valt_load_address_pri_norml="0x58000000" ++ valt_load_address_pri_inner="0x38000000" ++ valt_load_address_sec_norml="0xUNSET" ++ valt_load_address_sec_inner="0xUNSET" ++ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})]) ++ ;; + x86-solaris) + VGCONF_ARCH_PRI="x86" + VGCONF_ARCH_SEC="" +@@ -1033,6 +1047,8 @@ AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_MIPS64, + test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX ) + AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_NANOMIPS, + test x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX ) ++AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_SW64, ++ test x$VGCONF_PLATFORM_PRI_CAPS = xSW64_LINUX ) + + # Set up VGCONF_PLATFORMS_INCLUDE_. Either one or two of these + # become defined. +@@ -1063,6 +1079,8 @@ AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_MIPS64_LINUX, + test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX) + AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_NANOMIPS_LINUX, + test x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX) ++AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_SW64_LINUX, ++ test x$VGCONF_PLATFORM_PRI_CAPS = xSW64_LINUX) + AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_FREEBSD, + test x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \ + -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_FREEBSD) +@@ -1094,7 +1112,8 @@ AM_CONDITIONAL(VGCONF_OS_IS_LINUX, + -o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX \ +- -o x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX) ++ -o x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX \ ++ -o x$VGCONF_PLATFORM_PRI_CAPS = xSW64_LINUX) + AM_CONDITIONAL(VGCONF_OS_IS_FREEBSD, + test x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD) +@@ -4819,8 +4838,6 @@ AC_CHECK_FUNCS([ \ + ppoll \ + preadv \ + preadv2 \ +- process_vm_readv \ +- process_vm_writev \ + pthread_barrier_init \ + pthread_condattr_setclock \ + pthread_mutex_timedlock \ +@@ -4852,6 +4869,14 @@ AC_CHECK_FUNCS([ \ + strndup \ + ]) + ++# Ignore process_vm_readv and process_vm_writev check on sw64 ++if test x$VGCONF_PLATFORM_PRI_CAPS != xSW64_LINUX; then ++ AC_CHECK_FUNCS([ \ ++ process_vm_readv \ ++ process_vm_writev \ ++ ]) ++fi ++ + # AC_CHECK_LIB adds any library found to the variable LIBS, and links these + # libraries with any shared object and/or executable. This is NOT what we + # want for e.g. vgpreload_core-x86-linux.so +@@ -4908,7 +4933,8 @@ elif test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX \ + -o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX \ +- -o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX ; then ++ -o x$VGCONF_PLATFORM_PRI_CAPS = xS390X_LINUX \ ++ -o x$VGCONF_PLATFORM_PRI_CAPS = xSW64_LINUX ; then + mflag_primary=$FLAG_M64 + elif test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN ; then + mflag_primary="$FLAG_M32 -arch i386" +@@ -5407,6 +5433,7 @@ AC_CONFIG_FILES([ + memcheck/tests/s390x/Makefile + memcheck/tests/mips32/Makefile + memcheck/tests/mips64/Makefile ++ memcheck/tests/sw64/Makefile + memcheck/tests/vbit-test/Makefile + cachegrind/Makefile + cachegrind/tests/Makefile +@@ -5443,6 +5470,8 @@ AC_CONFIG_FILES([ + none/tests/mips32/Makefile + none/tests/mips64/Makefile + none/tests/nanomips/Makefile ++ none/tests/sw64/Makefile ++ none/tests/sw64-linux/Makefile + none/tests/linux/Makefile + none/tests/darwin/Makefile + none/tests/solaris/Makefile +diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am +index 80115f21f..6b3528565 100644 +--- a/coregrind/Makefile.am ++++ b/coregrind/Makefile.am +@@ -337,6 +337,7 @@ COREGRIND_SOURCES_COMMON = \ + m_stacks.c \ + m_stacktrace.c \ + m_syscall.c \ ++ m_swdiv.S \ + m_threadstate.c \ + m_tooliface.c \ + m_trampoline.S \ +@@ -387,6 +388,7 @@ COREGRIND_SOURCES_COMMON = \ + m_dispatch/dispatch-mips32-linux.S \ + m_dispatch/dispatch-mips64-linux.S \ + m_dispatch/dispatch-nanomips-linux.S \ ++ m_dispatch/dispatch-sw64-linux.S \ + m_dispatch/dispatch-x86-freebsd.S \ + m_dispatch/dispatch-amd64-freebsd.S \ + m_dispatch/dispatch-x86-darwin.S \ +@@ -411,6 +413,7 @@ COREGRIND_SOURCES_COMMON = \ + m_gdbserver/valgrind-low-mips32.c \ + m_gdbserver/valgrind-low-mips64.c \ + m_gdbserver/valgrind-low-nanomips.c \ ++ m_gdbserver/valgrind-low-sw64.c \ + m_gdbserver/version.c \ + m_initimg/initimg-linux.c \ + m_initimg/initimg-freebsd.c \ +@@ -438,6 +441,7 @@ COREGRIND_SOURCES_COMMON = \ + m_sigframe/sigframe-mips32-linux.c \ + m_sigframe/sigframe-mips64-linux.c \ + m_sigframe/sigframe-nanomips-linux.c \ ++ m_sigframe/sigframe-sw64-linux.c \ + m_sigframe/sigframe-x86-darwin.c \ + m_sigframe/sigframe-amd64-darwin.c \ + m_sigframe/sigframe-solaris.c \ +@@ -452,6 +456,7 @@ COREGRIND_SOURCES_COMMON = \ + m_syswrap/syscall-mips32-linux.S \ + m_syswrap/syscall-mips64-linux.S \ + m_syswrap/syscall-nanomips-linux.S \ ++ m_syswrap/syscall-sw64-linux.S \ + m_syswrap/syscall-x86-freebsd.S \ + m_syswrap/syscall-amd64-freebsd.S \ + m_syswrap/syscall-x86-darwin.S \ +@@ -477,6 +482,7 @@ COREGRIND_SOURCES_COMMON = \ + m_syswrap/syswrap-mips32-linux.c \ + m_syswrap/syswrap-mips64-linux.c \ + m_syswrap/syswrap-nanomips-linux.c \ ++ m_syswrap/syswrap-sw64-linux.c \ + m_syswrap/syswrap-x86-darwin.c \ + m_syswrap/syswrap-amd64-darwin.c \ + m_syswrap/syswrap-xen.c \ +diff --git a/coregrind/launcher-linux.c b/coregrind/launcher-linux.c +index bc95e3c11..80fb1b01d 100644 +--- a/coregrind/launcher-linux.c ++++ b/coregrind/launcher-linux.c +@@ -415,7 +415,8 @@ int main(int argc, char** argv, char** envp) + (0==strcmp(VG_PLATFORM,"s390x-linux")) || + (0==strcmp(VG_PLATFORM,"mips32-linux")) || + (0==strcmp(VG_PLATFORM,"mips64-linux")) || +- (0==strcmp(VG_PLATFORM,"nanomips-linux"))) ++ (0==strcmp(VG_PLATFORM,"nanomips-linux")) || ++ (0==strcmp(VG_PLATFORM,"sw64-linux"))) + default_platform = VG_PLATFORM; + # elif defined(VGO_solaris) + if ((0==strcmp(VG_PLATFORM,"x86-solaris")) || +@@ -474,7 +475,7 @@ int main(int argc, char** argv, char** envp) + launcher_name = ""; + break; + } +- if (r == bufsiz) continue; // buffer to small; retry ++ if (r == bufsiz) continue; // buffer too small; retry + + assert(r < bufsiz); // paranoia + +diff --git a/coregrind/m_aspacemgr/aspacemgr-common.c b/coregrind/m_aspacemgr/aspacemgr-common.c +index 816d2274f..93e07ceab 100644 +--- a/coregrind/m_aspacemgr/aspacemgr-common.c ++++ b/coregrind/m_aspacemgr/aspacemgr-common.c +@@ -157,7 +157,8 @@ SysRes VG_(am_do_mmap_NO_NOTIFY)( Addr start, SizeT length, UInt prot, + # elif defined(VGP_amd64_linux) \ + || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) \ + || defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \ +- || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) ++ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ ++ || defined(VGP_sw64_linux) + res = VG_(do_syscall6)(__NR_mmap, (UWord)start, length, + prot, flags, fd, offset); + # elif defined(VGP_x86_darwin) +diff --git a/coregrind/m_aspacemgr/aspacemgr-linux.c b/coregrind/m_aspacemgr/aspacemgr-linux.c +index ae38d8bd0..ee8f6a08c 100644 +--- a/coregrind/m_aspacemgr/aspacemgr-linux.c ++++ b/coregrind/m_aspacemgr/aspacemgr-linux.c +@@ -828,6 +828,7 @@ static void sync_check_mapping_callback ( Addr addr, SizeT len, UInt prot, + # if defined(VGA_x86) || defined (VGA_s390x) || \ + defined(VGA_mips32) || defined(VGA_mips64) + sloppyXcheck = True; ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + # else + sloppyXcheck = False; + # endif +diff --git a/coregrind/m_cache.c b/coregrind/m_cache.c +index 428a4df43..0257dac94 100644 +--- a/coregrind/m_cache.c ++++ b/coregrind/m_cache.c +@@ -539,7 +539,8 @@ get_cache_info(VexArchInfo *vai) + #elif defined(VGA_arm) || defined(VGA_ppc32) || \ + defined(VGA_ppc64be) || defined(VGA_ppc64le) || \ + defined(VGA_mips32) || defined(VGA_mips64) || \ +- defined(VGA_arm64) || defined(VGA_nanomips) ++ defined(VGA_arm64) || defined(VGA_nanomips) || \ ++ defined(VGA_sw64) + static Bool + get_cache_info(VexArchInfo *vai) + { +diff --git a/coregrind/m_coredump/coredump-elf.c b/coregrind/m_coredump/coredump-elf.c +index 4a8c29c52..ab24cdbde 100644 +--- a/coregrind/m_coredump/coredump-elf.c ++++ b/coregrind/m_coredump/coredump-elf.c +@@ -246,7 +246,7 @@ static void fill_prstatus(const ThreadState *tst, + const vki_siginfo_t *si) + { + #if defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + vki_elf_greg_t *regs; + #else + struct vki_user_regs_struct *regs; +@@ -281,7 +281,7 @@ static void fill_prstatus(const ThreadState *tst, + /* prs->pr_reg has struct type. Need to take address. */ + regs = (struct vki_user_regs_struct *)&(prs->pr_reg); + #elif defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + regs = (vki_elf_greg_t *)prs->pr_reg; + #else + regs = (struct vki_user_regs_struct *)prs->pr_reg; +@@ -489,6 +489,14 @@ static void fill_prstatus(const ThreadState *tst, + regs[VKI_MIPS32_EF_CP0_STATUS] = arch->vex.guest_CP0_status; + regs[VKI_MIPS32_EF_CP0_EPC] = arch->vex.guest_PC; + # undef DO ++#elif defined(VGP_sw64_linux) ++# define DO(n) regs[n] = arch->vex.guest_r##n ++ DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); DO(8); ++ DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); DO(16); ++ DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); DO(24); ++ DO(25); DO(28); DO(29); DO(30); DO(31); ++ regs[32] = arch->vex.guest_PC; ++# undef DO + #elif defined(VGP_amd64_freebsd) + regs->rflags = LibVEX_GuestAMD64_get_rflags( &arch->vex ); + regs->rsp = arch->vex.guest_RSP; +@@ -654,6 +662,14 @@ static void fill_fpu(const ThreadState *tst, vki_elf_fpregset_t *fpu) + # undef DO + #elif defined(VGP_nanomips_linux) + ++#elif defined(VGP_sw64_linux) ++# define DO(n) (*fpu)[n] = *(const double*)(&arch->vex.guest_f##n) ++ DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); ++ DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); ++ DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); ++ DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31); ++# undef DO ++ + #elif defined(VGP_x86_freebsd) + + #elif defined(VGP_amd64_freebsd) +diff --git a/coregrind/m_debuginfo/d3basics.c b/coregrind/m_debuginfo/d3basics.c +index e9e8944af..51048c122 100644 +--- a/coregrind/m_debuginfo/d3basics.c ++++ b/coregrind/m_debuginfo/d3basics.c +@@ -555,6 +555,9 @@ static Bool get_Dwarf_Reg( /*OUT*/Addr* a, Word regno, const RegSummary* regs ) + # elif defined(VGP_arm64_linux) + if (regno == 31) { *a = regs->sp; return True; } + if (regno == 29) { *a = regs->fp; return True; } ++# elif defined(VGP_sw64_linux) ++ if (regno == 30) { *a = regs->sp; return True; } ++ if (regno == 15) { *a = regs->fp; return True; } + # else + # error "Unknown platform" + # endif +diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c +index 2d2accc99..2edbb72b3 100644 +--- a/coregrind/m_debuginfo/debuginfo.c ++++ b/coregrind/m_debuginfo/debuginfo.c +@@ -1262,7 +1262,8 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd ) + is_ro_map = False; + + # if defined(VGA_x86) || defined(VGA_ppc32) || defined(VGA_mips32) \ +- || defined(VGA_mips64) || defined(VGA_nanomips) ++ || defined(VGA_mips64) || defined(VGA_nanomips) || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + is_rx_map = seg->hasR && seg->hasX; + is_rw_map = seg->hasR && seg->hasW; + # elif defined(VGA_amd64) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ +@@ -2987,7 +2988,8 @@ UWord evalCfiExpr ( const XArray* exprs, Int ix, + case Creg_S390_FP: return eec->uregs->fp; + case Creg_S390_LR: return eec->uregs->lr; + # elif defined(VGA_mips32) || defined(VGA_mips64) \ +- || defined(VGA_nanomips) ++ || defined(VGA_nanomips) || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + case Creg_IA_IP: return eec->uregs->pc; + case Creg_IA_SP: return eec->uregs->sp; + case Creg_IA_BP: return eec->uregs->fp; +@@ -3251,7 +3253,9 @@ static Addr compute_cfa ( const D3UnwindRegs* uregs, + case CFIC_IA_BPREL: + cfa = cfsi_m->cfa_off + uregs->fp; + break; +-# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++# elif defined(VGA_mips32) || defined(VGA_mips64) \ ++ || defined(VGA_nanomips) || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + case CFIC_IA_SPREL: + cfa = cfsi_m->cfa_off + uregs->sp; + break; +@@ -3332,7 +3336,9 @@ Addr ML_(get_CFA) ( Addr ip, Addr sp, Addr fp, + return compute_cfa(&uregs, + min_accessible, max_accessible, ce->di, ce->cfsi_m); + } +-#elif defined(VGA_mips32) || defined(VGA_mips64) ++#elif defined(VGA_mips32) || defined(VGA_mips64) \ ++ || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + { D3UnwindRegs uregs; + uregs.pc = ip; + uregs.sp = sp; +@@ -3409,7 +3415,9 @@ Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregsHere, + ipHere = uregsHere->r15; + # elif defined(VGA_s390x) + ipHere = uregsHere->ia; +-# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + ipHere = uregsHere->pc; + # elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) + # elif defined(VGP_arm64_linux) +@@ -3549,7 +3557,9 @@ Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregsHere, + COMPUTE(uregsPrev.f5, uregsHere->f5, cfsi_m->f5_how, cfsi_m->f5_off); + COMPUTE(uregsPrev.f6, uregsHere->f6, cfsi_m->f6_how, cfsi_m->f6_off); + COMPUTE(uregsPrev.f7, uregsHere->f7, cfsi_m->f7_how, cfsi_m->f7_off); +-# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + COMPUTE(uregsPrev.pc, uregsHere->pc, cfsi_m->ra_how, cfsi_m->ra_off); + COMPUTE(uregsPrev.sp, uregsHere->sp, cfsi_m->sp_how, cfsi_m->sp_off); + COMPUTE(uregsPrev.fp, uregsHere->fp, cfsi_m->fp_how, cfsi_m->fp_off); +@@ -4824,6 +4834,16 @@ SizeT VG_(DebugInfo_get_bss_size)(const DebugInfo* di) + return di->bss_present ? di->bss_size : 0; + } + ++Addr VG_(DebugInfo_get_sbss_avma)(const DebugInfo* di) ++{ ++ return di->sbss_present ? di->sbss_avma : 0; ++} ++ ++SizeT VG_(DebugInfo_get_sbss_size)(const DebugInfo* di) ++{ ++ return di->sbss_present ? di->sbss_size : 0; ++} ++ + Addr VG_(DebugInfo_get_plt_avma)(const DebugInfo* di) + { + return di->plt_present ? di->plt_avma : 0; +diff --git a/coregrind/m_debuginfo/priv_storage.h b/coregrind/m_debuginfo/priv_storage.h +index a4b90d36b..a88b99940 100644 +--- a/coregrind/m_debuginfo/priv_storage.h ++++ b/coregrind/m_debuginfo/priv_storage.h +@@ -354,7 +354,8 @@ typedef + Int f7_off; + } + DiCfSI_m; +-#elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++#elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) + typedef + struct { + UChar cfa_how; /* a CFIC_ value */ +diff --git a/coregrind/m_debuginfo/readdwarf.c b/coregrind/m_debuginfo/readdwarf.c +index 79d6764ea..784c79be8 100644 +--- a/coregrind/m_debuginfo/readdwarf.c ++++ b/coregrind/m_debuginfo/readdwarf.c +@@ -2066,6 +2066,10 @@ void ML_(read_debuginfo_dwarf1) ( + # define FP_REG 30 + # define SP_REG 29 + # define RA_REG_DEFAULT 31 ++#elif defined(VGP_sw64_linux) ++# define FP_REG 15 ++# define SP_REG 30 ++# define RA_REG_DEFAULT 26 + #else + # error "Unknown platform" + #endif +@@ -2076,7 +2080,8 @@ void ML_(read_debuginfo_dwarf1) ( + might exist, for Neon/VFP-v3. */ + #if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \ + || defined(VGP_ppc64le_linux) || defined(VGP_mips32_linux) \ +- || defined(VGP_nanomips_linux) || defined(VGP_mips64_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_mips64_linux) \ ++ || defined(VGP_sw64_linux) + # define N_CFI_REGS 72 + #elif defined(VGP_arm_linux) + # define N_CFI_REGS 320 +@@ -2392,7 +2397,8 @@ static Bool summarise_context(/*OUT*/Addr* base, + if (ctxs->cfa_is_regoff && ctxs->cfa_reg == SP_REG) { + si_m->cfa_off = ctxs->cfa_off; + # if defined(VGA_x86) || defined(VGA_amd64) || defined(VGA_s390x) \ +- || defined(VGA_mips32) || defined(VGA_nanomips) || defined(VGA_mips64) ++ || defined(VGA_mips32) || defined(VGA_nanomips) \ ++ || defined(VGA_mips64) || defined(VGA_sw64) + si_m->cfa_how = CFIC_IA_SPREL; + # elif defined(VGA_arm) + si_m->cfa_how = CFIC_ARM_R13REL; +@@ -2406,7 +2412,8 @@ static Bool summarise_context(/*OUT*/Addr* base, + if (ctxs->cfa_is_regoff && ctxs->cfa_reg == FP_REG) { + si_m->cfa_off = ctxs->cfa_off; + # if defined(VGA_x86) || defined(VGA_amd64) || defined(VGA_s390x) \ +- || defined(VGA_mips32) || defined(VGA_nanomips) || defined(VGA_mips64) ++ || defined(VGA_mips32) || defined(VGA_nanomips) \ ++ || defined(VGA_mips64) || defined(VGA_sw64) + si_m->cfa_how = CFIC_IA_BPREL; + # elif defined(VGA_arm) + si_m->cfa_how = CFIC_ARM_R12REL; +@@ -2741,7 +2748,9 @@ static Bool summarise_context(/*OUT*/Addr* base, + + return True; + +-# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + + /* --- entire tail of this fn specialised for mips --- */ + +@@ -2869,7 +2878,8 @@ static Int copy_convert_CfiExpr_tree ( XArray* dstxa, + if (dwreg == srcuc->ra_reg) + return ML_(CfiExpr_CfiReg)( dstxa, Creg_S390_IA ); + # elif defined(VGA_mips32) || defined(VGA_mips64) \ +- || defined(VGA_nanomips) ++ || defined(VGA_nanomips) || defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + if (dwreg == SP_REG) + return ML_(CfiExpr_CfiReg)( dstxa, Creg_IA_SP ); + if (dwreg == FP_REG) +diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c +index ce7b7998d..ee310bc82 100644 +--- a/coregrind/m_debuginfo/readelf.c ++++ b/coregrind/m_debuginfo/readelf.c +@@ -1780,7 +1780,8 @@ static HChar* readlink_path (const HChar *path) + + while (tries > 0) { + SysRes res; +-#if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++#if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, + (UWord)path, (UWord)buf, bufsiz); + #elif defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_freebsd) +@@ -2653,6 +2654,7 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di ) + || defined(VGP_arm_linux) || defined (VGP_s390x_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ + || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) \ + || defined(VGP_x86_solaris) || defined(VGP_amd64_solaris) \ + || defined(VGP_x86_freebsd) || defined(VGP_amd64_freebsd) + /* Accept .plt where mapped as rx (code) */ +diff --git a/coregrind/m_debuginfo/storage.c b/coregrind/m_debuginfo/storage.c +index c3fa62e96..68fa2eed4 100644 +--- a/coregrind/m_debuginfo/storage.c ++++ b/coregrind/m_debuginfo/storage.c +@@ -248,7 +248,8 @@ void ML_(ppDiCfSI) ( const XArray* /* of CfiExpr */ exprs, + SHOW_HOW(si_m->f6_how, si_m->f6_off); + VG_(printf)(" F7="); + SHOW_HOW(si_m->f7_how, si_m->f7_off); +-# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++# elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) + VG_(printf)(" SP="); + SHOW_HOW(si_m->sp_how, si_m->sp_off); + VG_(printf)(" FP="); +diff --git a/coregrind/m_debuglog.c b/coregrind/m_debuglog.c +index 355c3caf5..d4c2542db 100644 +--- a/coregrind/m_debuglog.c ++++ b/coregrind/m_debuglog.c +@@ -601,6 +601,36 @@ static UInt local_sys_getpid ( void ) + return a0; + } + ++#elif defined(VGP_sw64_linux) ++ ++static UInt local_sys_write_stderr ( const HChar* buf, Int n ) ++{ ++ register RegWord v0 asm("$0") = __NR_write; ++ register RegWord a0 asm("$16") = 2; //stderr ++ register RegWord a1 asm("$17") = (RegWord)(Addr)buf; ++ register RegWord a2 asm("$18") = n; ++ ++ __asm__ volatile ( ++ "sys_call 0x83\n\t" //0x83 HMC_callsys in include/asm/hmcall.h ++ : "+r"(v0) ++ : "r" (v0), "r"(a0), "r"(a1), "r"(a2) ++ ); ++ if((UInt)v0 < 0) ++ return (UInt)-1; ++ return (UInt)v0; ++} ++ ++static UInt local_sys_getpid ( void ) ++{ ++ register RegWord v0 asm("$0") = __NR_getpid; ++ __asm__ volatile ( ++ "sys_call 0x83\n\t" ++ : "=r" (v0) ++ : "r" (v0) ++ ); ++ return (UInt)v0; ++} ++ + #elif defined(VGP_x86_solaris) + static UInt local_sys_write_stderr ( const HChar* buf, Int n ) + { +diff --git a/coregrind/m_dispatch/dispatch-sw64-linux.S b/coregrind/m_dispatch/dispatch-sw64-linux.S +new file mode 100644 +index 000000000..12ad4c4fc +--- /dev/null ++++ b/coregrind/m_dispatch/dispatch-sw64-linux.S +@@ -0,0 +1,314 @@ ++/*--------------------------------------------------------------------*/ ++/*--- The core dispatch loop, for jumping to a code address. ---*/ ++/*--- dispatch-sw64-linux.S ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2000-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "pub_core_basics_asm.h" ++ ++#if defined(VGP_sw64_linux) ++ ++#include "pub_core_dispatch_asm.h" ++#include "pub_core_transtab_asm.h" ++#include "libvex_guest_offsets.h" /* for OFFSET_SW_PC */ ++ ++#define GUEST_STATE_REG $15 ++ ++ ++/*------------------------------------------------------------*/ ++/*--- ---*/ ++/*--- The dispatch loop. VG_(disp_run_translations) is ---*/ ++/*--- used to run all translations, ---*/ ++/*--- including no-redir ones. ---*/ ++/*--- ---*/ ++/*------------------------------------------------------------*/ ++ ++/*----------------------------------------------------*/ ++/*--- Entry and preamble (set everything up) ---*/ ++/*----------------------------------------------------*/ ++ ++/* signature: ++void VG_(disp_run_translations)( UWord* two_words, ++ void* guest_state, ++ Addr host_addr ); ++*/ ++ ++.text ++.globl VG_(disp_run_translations) ++.ent VG_(disp_run_translations) ++VG_(disp_run_translations): ++ .frame $30, 176, $26, 0 ++ .cfi_startproc ++ ++ /* a0 ($16) holds two_words */ ++ /* a1 ($17) holds guest_state */ ++ /* a2 ($18) holds host_addr */ ++ ++ /* New stack frame. Stack must remain 16 aligned (at least) */ ++ subl $30, 176, $30 ++ .cfi_def_cfa_offset 176 ++ ++ /* Save ra */ ++ stl $26, 72($30) ++ .cfi_rel_offset 26, 72 ++ ++ /* ... and s0 - s5 */ ++ stl $9, 80($30) ++ stl $10, 88($30) ++ stl $11, 96($30) ++ stl $12, 104($30) ++ stl $13, 112($30) ++ stl $14, 120($30) ++ ++ /* ... and gp, fp */ ++ stl $29, 128($30) ++ stl $15, 136($30) ++ ++ /* Save a0 ($16) on stack. In postamble it will be restored such that the ++ return values can be written */ ++ stl $16, 144($30) ++ ++ /* Load address of guest state into guest state register */ ++ mov $17, GUEST_STATE_REG ++ ++ /* prefetch guest state into cache, may improve performance */ ++ fillde 0($17) ++ fillde 128($17) ++ ++ /* and jump into the code cache. Chained translations in ++ the code cache run, until for whatever reason, they can't ++ continue. When that happens, the translation in question ++ will jump (or call) to one of the continuation points ++ VG_(cp_...) below. */ ++ jmp $26, ($18), 0 ++ /*NOTREACHED*/ ++/*----------------------------------------------------*/ ++/*--- Postamble and exit. ---*/ ++/*----------------------------------------------------*/ ++ ++postamble: ++ /* Restore $16 from stack; holds address of two_words */ ++ ldl $16, 144($30) ++ ++ /* Save return value to two_words[] */ ++ stl $0, 0($16) /* VG_TRC_* */ ++ stl $1, 8($16) /* patching address for VG_TRC_CHAIN_* */ ++ ++ /* Restore callee-saved registers... */ ++ ++ /* Restore ra */ ++ ldl $26, 72($30) ++ .cfi_restore 26 ++ ++ /* ... and s0 - s5 */ ++ ldl $9, 80($30) ++ ldl $10, 88($30) ++ ldl $11, 96($30) ++ ldl $12, 104($30) ++ ldl $13, 112($30) ++ ldl $14, 120($30) ++ ++ /* ... and gp, fp */ ++ ldl $29, 128($30) ++ ldl $15, 136($30) ++ ++ /* ... and sp */ ++ addl $30, 176, $30 ++ .cfi_def_cfa_offset 0 ++ ++ ret $31, ($26) ++ nop ++.cfi_endproc ++.end VG_(disp_run_translations) ++ ++/*----------------------------------------------------*/ ++/*--- Continuation points ---*/ ++/*----------------------------------------------------*/ ++ ++/* ------ Chain me to slow entry point ------ */ ++.global VG_(disp_cp_chain_me_to_slowEP) ++VG_(disp_cp_chain_me_to_slowEP): ++ ldi $0, VG_TRC_CHAIN_ME_TO_SLOW_EP ++ ++ /* set $1 to patching address ++ <=== patching address start here ++ ldi r2, disp_cp_chain_me_to_slowEP # 20 bytes ++ jmp r1, (r2) # 4 bytes ++ <=== r1 set to here ++ so subtract 24 */ ++ subl $1, 24, $1 ++ br $31, postamble ++ ++/* ------ Chain me to fast entry point ------ */ ++.global VG_(disp_cp_chain_me_to_fastEP) ++VG_(disp_cp_chain_me_to_fastEP): ++ ldi $0, VG_TRC_CHAIN_ME_TO_FAST_EP ++ ++ /* set $1 to patching address ++ <=== patching address start here ++ ldi r2, disp_cp_chain_me_to_fastEP # 20 bytes ++ jmp r1, (r2) # 4 bytes ++ <=== r1 set to here ++ so subtract 24 */ ++ subl $1, 24, $1 ++ br $31, postamble ++ ++/* ------ Indirect but boring jump ------ */ ++.global VG_(disp_cp_xindir) ++VG_(disp_cp_xindir): ++ ++ /* where are we going */ ++ ldl $3, OFFSET_sw64_PC(GUEST_STATE_REG) //guest_state to $3 ++ ++ /* add aspacemgr_start */ ++ // ldi $8, 0x4000000($31) /* linux: aspacemgr_start*/ ++ // addl $3, $8, $3 ++ ++ ++ /* stats only */ ++ ldw $8, VG_(stats__n_xIndirs_32) ++ addw $8, 1, $8 ++ stw $8, VG_(stats__n_xIndirs_32) ++ ++ // Compute r9 = VG_TT_FAST_HASH(guest) ++ srl $3, 2, $9 // g2 = guest >> 2 ++ srl $3, (VG_TT_FAST_BITS + 2), $8 // (g2 >> VG_TT_FAST_BITS) ++ xor $9, $8, $9 // (g2 >> VG_TT_FAST_BITS) ^ g2 ++ ldi $8, VG_TT_FAST_MASK ++ and $9, $8, $9 // setNo ++ ++ // Compute r9 = &VG_(tt_fast)[r9] ++ ldi $8, VG_(tt_fast) ++ sll $9, VG_FAST_CACHE_SET_BITS, $9 ++ addw $9, $8, $9 ++ ++ // LIVE: GUEST_STATE_REG, r3 (guest addr), r9 (cache set) ++ // try way 0 ++ ldl $7, FCS_g0($9) // .guest0 ++ ldl $8, FCS_h0($9) // .host0 ++ cmpeq $7, $3, $1 // cmp against .guest0 ++ beq $1, 1f ++ jmp ($8), 0 // hit at way 0, goto .host0 ++ /*NOTREACHED*/ ++ .long 0x0 ++ ++1: // try way 1 ++ ldl $7, FCS_g1($9) ++ cmpeq $7, $3, $1 // cmp against .guest1 ++ beq $1, 2f ++ // hit at way 1; swap upwards ++ ldl $4, FCS_g0($9) // $11 = old .guest0 ++ ldl $5, FCS_h0($9) // $12 = old .host0 ++ ldl $6, FCS_h1($9) // $13 = old .host1 ++ stl $3, FCS_g0($9) // new .guest0 = guest ++ stl $6, FCS_h0($9) // new .host0 = old .host1 ++ stl $4, FCS_g1($9) // new .guest1 = old .guest0 ++ stl $5, FCS_h1($9) // new .host1 = old .host0 ++ // stats only ++ ldw $8, VG_(stats__n_xIndir_hits1_32) ++ addw $8, 1, $8 ++ stw $8, VG_(stats__n_xIndir_hits1_32) ++ // goto old .host1 a.k.a. new .host0 ++ jmp ($6), 0 ++ /*NOTREACHED*/ ++ .long 0x0 ++ ++2: // try way 2 ++ ldl $7, FCS_g2($9) ++ cmpeq $7, $3, $1 // cmp against .guest2 ++ beq $1, 3f ++ // hit at way 2; swap upwards ++ ldl $4, FCS_g1($9) ++ ldl $5, FCS_h1($9) ++ ldl $6, FCS_h2($9) ++ stl $3, FCS_g1($9) ++ stl $6, FCS_h1($9) ++ stl $4, FCS_g2($9) ++ stl $5, FCS_h2($9) ++ // stats only ++ ldw $8, VG_(stats__n_xIndir_hits2_32) ++ addw $8, 1, $8 ++ stw $8, VG_(stats__n_xIndir_hits2_32) ++ // goto old .host2 a.k.a. new .host1 ++ jmp ($6), 0 ++ /*NOTREACHED*/ ++ .long 0x0 ++ ++3: // try way 3 ++ ldl $7, FCS_g2($9) ++ cmpeq $7, $3, $1 // cmp against .guest3 ++ beq $1, 4f ++ // hit at way 3; swap upwards ++ ldl $4, FCS_g2($9) ++ ldl $5, FCS_h2($9) ++ ldl $6, FCS_h3($9) ++ stl $3, FCS_g2($9) ++ stl $6, FCS_h2($9) ++ stl $4, FCS_g3($9) ++ stl $5, FCS_h3($9) ++ // stats only ++ ldw $8, VG_(stats__n_xIndir_hits3_32) ++ addw $8, 1, $8 ++ stw $8, VG_(stats__n_xIndir_hits3_32) ++ // goto old .host3 a.k.a. new .host2 ++ jmp ($6), 0 ++ /*NOTREACHED*/ ++ .long 0x0 ++ ++4: // fast lookup failed: ++ /* stats only */ ++ ldw $8, VG_(stats__n_xIndir_misses_32) ++ addw $8, 1, $8 ++ stw $8, VG_(stats__n_xIndir_misses_32) ++ ++ ldi $0, VG_TRC_INNER_FASTMISS ++ ldi $1, 0 ++ br $31, postamble ++ /*NOTREACHED*/ ++ .long 0x0 ++ ++/* ------ Assisted jump ------ */ ++.global VG_(disp_cp_xassisted) ++VG_(disp_cp_xassisted): ++ mov GUEST_STATE_REG, $0 ++ ldi $1, 0 ++ br $31, postamble ++ ++/* ------ Event check failed ------ */ ++.global VG_(disp_cp_evcheck_fail) ++VG_(disp_cp_evcheck_fail): ++ ldi $0, VG_TRC_INNER_COUNTERZERO ++ ldi $1, 0 ++ br $31, postamble ++ ++.size VG_(disp_run_translations), .-VG_(disp_run_translations) ++ ++#endif // defined(VGP_sw64_linux) ++ ++/* Let the linker know we don't need an executable stack */ ++MARK_STACK_NO_EXEC ++ ++/*--------------------------------------------------------------------*/ ++/*--- end ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_gdbserver/target.c b/coregrind/m_gdbserver/target.c +index 490276b6c..461b491f3 100644 +--- a/coregrind/m_gdbserver/target.c ++++ b/coregrind/m_gdbserver/target.c +@@ -867,6 +867,8 @@ void valgrind_initialize_target(void) + mips64_init_architecture(&the_low_target); + #elif defined(VGA_nanomips) + nanomips_init_architecture(&the_low_target); ++#elif defined(VGA_sw64) ++ sw64_init_architecture(&the_low_target); + #else + #error "architecture missing in target.c valgrind_initialize_target" + #endif +diff --git a/coregrind/m_gdbserver/valgrind-low-sw64.c b/coregrind/m_gdbserver/valgrind-low-sw64.c +new file mode 100644 +index 000000000..0c0bf4e7d +--- /dev/null ++++ b/coregrind/m_gdbserver/valgrind-low-sw64.c +@@ -0,0 +1,256 @@ ++/* Low level interface to valgrind, for the remote server for GDB integrated ++ in valgrind. ++ Copyright (C) 2011 ++ Free Software Foundation, Inc. ++ ++ This file is part of VALGRIND. ++ It has been inspired from a file from gdbserver in gdb 6.6. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. */ ++ ++#include "server.h" ++#include "target.h" ++#include "regdef.h" ++#include "regcache.h" ++ ++#include "pub_core_machine.h" ++#include "pub_core_debuginfo.h" ++#include "pub_core_threadstate.h" ++#include "pub_core_transtab.h" ++#include "pub_core_gdbserver.h" ++ ++#include "valgrind_low.h" ++ ++#include "libvex_guest_sw64.h" ++ ++static struct reg regs[] = { ++ { "r0", 0, 64 }, ++ { "r1", 64, 64 }, ++ { "r2", 128, 64 }, ++ { "r3", 192, 64 }, ++ { "r4", 256, 64 }, ++ { "r5", 320, 64 }, ++ { "r6", 384, 64 }, ++ { "r7", 448, 64 }, ++ { "r8", 512, 64 }, ++ { "r9", 576, 64 }, ++ { "r10", 640, 64 }, ++ { "r11", 704, 64 }, ++ { "r12", 768, 64 }, ++ { "r13", 832, 64 }, ++ { "r14", 896, 64 }, ++ { "r15", 960, 64 }, ++ { "r16", 1024, 64 }, ++ { "r17", 1088, 64 }, ++ { "r18", 1152, 64 }, ++ { "r19", 1216, 64 }, ++ { "r20", 1280, 64 }, ++ { "r21", 1344, 64 }, ++ { "r22", 1408, 64 }, ++ { "r23", 1472, 64 }, ++ { "r24", 1536, 64 }, ++ { "r25", 1600, 64 }, ++ { "r26", 1664, 64 }, ++ { "r27", 1728, 64 }, ++ { "r28", 1792, 64 }, ++ { "r29", 1856, 64 }, ++ { "r30", 1920, 64 }, ++ { "r31", 1984, 64 }, ++ ++ { "f0", 2048, 64 }, ++ { "f1", 2112, 64 }, ++ { "f2", 2176, 64 }, ++ { "f3", 2240, 64 }, ++ { "f4", 2304, 64 }, ++ { "f5", 2368, 64 }, ++ { "f6", 2432, 64 }, ++ { "f7", 2496, 64 }, ++ { "f8", 2560, 64 }, ++ { "f9", 2624, 64 }, ++ { "f10", 2688, 64 }, ++ { "f11", 2752, 64 }, ++ { "f12", 2816, 64 }, ++ { "f13", 2880, 64 }, ++ { "f14", 2944, 64 }, ++ { "f15", 3008, 64 }, ++ { "f16", 3072, 64 }, ++ { "f17", 3136, 64 }, ++ { "f18", 3200, 64 }, ++ { "f19", 3264, 64 }, ++ { "f20", 3328, 64 }, ++ { "f21", 3392, 64 }, ++ { "f22", 3456, 64 }, ++ { "f23", 3520, 64 }, ++ { "f24", 3584, 64 }, ++ { "f25", 3648, 64 }, ++ { "f26", 3712, 64 }, ++ { "f27", 3776, 64 }, ++ { "f28", 3840, 64 }, ++ { "f29", 3904, 64 }, ++ { "f30", 3968, 64 }, ++ { "fpcr", 4032, 64 }, ++ ++ { "pc", 4096, 64 }, ++ ++ { "", 4160, 64 }, ++ { "unique", 4224, 64 }, ++}; ++ ++static const char *expedite_regs[] = { "r15", "r30", "pc", 0 }; /* fp, sp, pc */ ++ ++#define num_regs (sizeof (regs) / sizeof (regs[0])) ++ ++static ++CORE_ADDR get_pc (void) ++{ ++ unsigned long pc; ++ ++ collect_register_by_name ("pc", &pc); ++ ++ dlog(1, "stop pc is %p\n", (void *) pc); ++ return pc; ++} ++ ++static ++void set_pc (CORE_ADDR newpc) ++{ ++ Bool mod; ++ supply_register_by_name ("pc", &newpc ); ++ if (mod) ++ dlog(1, "set pc to %p\n", C2v (newpc)); ++ else ++ dlog(1, "set pc not changed %p\n", C2v (newpc)); ++} ++ ++/* store registers in the guest state (gdbserver_to_valgrind) ++ or fetch register from the guest state (valgrind_to_gdbserver). */ ++static ++void transfer_register (ThreadId tid, int abs_regno, void * buf, ++ transfer_direction dir, int size, Bool *mod) ++{ ++ ThreadState* tst = VG_(get_ThreadState)(tid); ++ int set = abs_regno / num_regs; ++ int regno = abs_regno % num_regs; ++ *mod = False; ++ ++ VexGuestSW64State* sw = (VexGuestSW64State*) get_arch (set, tst); ++ ++ switch (regno) { ++ case 0: VG_(transfer) (&sw->guest_r0, buf, dir, size, mod); break; /* regnum = 0 */ ++ case 1: VG_(transfer) (&sw->guest_r1, buf, dir, size, mod); break; ++ case 2: VG_(transfer) (&sw->guest_r2, buf, dir, size, mod); break; ++ case 3: VG_(transfer) (&sw->guest_r3, buf, dir, size, mod); break; ++ case 4: VG_(transfer) (&sw->guest_r4, buf, dir, size, mod); break; ++ case 5: VG_(transfer) (&sw->guest_r5, buf, dir, size, mod); break; ++ case 6: VG_(transfer) (&sw->guest_r6, buf, dir, size, mod); break; ++ case 7: VG_(transfer) (&sw->guest_r7, buf, dir, size, mod); break; ++ case 8: VG_(transfer) (&sw->guest_r8, buf, dir, size, mod); break; ++ case 9: VG_(transfer) (&sw->guest_r9, buf, dir, size, mod); break; ++ case 10: VG_(transfer) (&sw->guest_r10, buf, dir, size, mod); break; ++ case 11: VG_(transfer) (&sw->guest_r11, buf, dir, size, mod); break; ++ case 12: VG_(transfer) (&sw->guest_r12, buf, dir, size, mod); break; ++ case 13: VG_(transfer) (&sw->guest_r13, buf, dir, size, mod); break; ++ case 14: VG_(transfer) (&sw->guest_r14, buf, dir, size, mod); break; ++ case 15: VG_(transfer) (&sw->guest_r15, buf, dir, size, mod); break; ++ case 16: VG_(transfer) (&sw->guest_r16, buf, dir, size, mod); break; ++ case 17: VG_(transfer) (&sw->guest_r17, buf, dir, size, mod); break; ++ case 18: VG_(transfer) (&sw->guest_r18, buf, dir, size, mod); break; ++ case 19: VG_(transfer) (&sw->guest_r19, buf, dir, size, mod); break; ++ case 20: VG_(transfer) (&sw->guest_r20, buf, dir, size, mod); break; ++ case 21: VG_(transfer) (&sw->guest_r21, buf, dir, size, mod); break; ++ case 22: VG_(transfer) (&sw->guest_r22, buf, dir, size, mod); break; ++ case 23: VG_(transfer) (&sw->guest_r23, buf, dir, size, mod); break; ++ case 24: VG_(transfer) (&sw->guest_r24, buf, dir, size, mod); break; ++ case 25: VG_(transfer) (&sw->guest_r25, buf, dir, size, mod); break; ++ case 26: VG_(transfer) (&sw->guest_r26, buf, dir, size, mod); break; ++ case 27: VG_(transfer) (&sw->guest_r27, buf, dir, size, mod); break; ++ case 28: VG_(transfer) (&sw->guest_r28, buf, dir, size, mod); break; ++ case 29: VG_(transfer) (&sw->guest_r29, buf, dir, size, mod); break; ++ case 30: VG_(transfer) (&sw->guest_r30, buf, dir, size, mod); break; ++ case 31: VG_(transfer) (&sw->guest_r31, buf, dir, size, mod); break; ++ ++ case 32: VG_(transfer) (&sw->guest_f0, buf, dir, size, mod); break; /* regnum = 32 */ ++ case 33: VG_(transfer) (&sw->guest_f1, buf, dir, size, mod); break; ++ case 34: VG_(transfer) (&sw->guest_f2, buf, dir, size, mod); break; ++ case 35: VG_(transfer) (&sw->guest_f3, buf, dir, size, mod); break; ++ case 36: VG_(transfer) (&sw->guest_f4, buf, dir, size, mod); break; ++ case 37: VG_(transfer) (&sw->guest_f5, buf, dir, size, mod); break; ++ case 38: VG_(transfer) (&sw->guest_f6, buf, dir, size, mod); break; ++ case 39: VG_(transfer) (&sw->guest_f7, buf, dir, size, mod); break; ++ case 40: VG_(transfer) (&sw->guest_f8, buf, dir, size, mod); break; ++ case 41: VG_(transfer) (&sw->guest_f9, buf, dir, size, mod); break; ++ case 42: VG_(transfer) (&sw->guest_f10, buf, dir, size, mod); break; ++ case 43: VG_(transfer) (&sw->guest_f11, buf, dir, size, mod); break; ++ case 44: VG_(transfer) (&sw->guest_f12, buf, dir, size, mod); break; ++ case 45: VG_(transfer) (&sw->guest_f13, buf, dir, size, mod); break; ++ case 46: VG_(transfer) (&sw->guest_f14, buf, dir, size, mod); break; ++ case 47: VG_(transfer) (&sw->guest_f15, buf, dir, size, mod); break; ++ case 48: VG_(transfer) (&sw->guest_f16, buf, dir, size, mod); break; ++ case 49: VG_(transfer) (&sw->guest_f17, buf, dir, size, mod); break; ++ case 50: VG_(transfer) (&sw->guest_f18, buf, dir, size, mod); break; ++ case 51: VG_(transfer) (&sw->guest_f19, buf, dir, size, mod); break; ++ case 52: VG_(transfer) (&sw->guest_f20, buf, dir, size, mod); break; ++ case 53: VG_(transfer) (&sw->guest_f21, buf, dir, size, mod); break; ++ case 54: VG_(transfer) (&sw->guest_f22, buf, dir, size, mod); break; ++ case 55: VG_(transfer) (&sw->guest_f23, buf, dir, size, mod); break; ++ case 56: VG_(transfer) (&sw->guest_f24, buf, dir, size, mod); break; ++ case 57: VG_(transfer) (&sw->guest_f25, buf, dir, size, mod); break; ++ case 58: VG_(transfer) (&sw->guest_f26, buf, dir, size, mod); break; ++ case 59: VG_(transfer) (&sw->guest_f27, buf, dir, size, mod); break; ++ case 60: VG_(transfer) (&sw->guest_f28, buf, dir, size, mod); break; ++ case 61: VG_(transfer) (&sw->guest_f29, buf, dir, size, mod); break; ++ case 62: VG_(transfer) (&sw->guest_f30, buf, dir, size, mod); break; ++ case 63: VG_(transfer) (&sw->guest_FPCR, buf, dir, size, mod); break; ++ ++ case 64: VG_(transfer) (&sw->guest_PC, buf, dir, size, mod); break; /* regnum = 64 */ ++ ++ case 65: *mod = False; break; /* regnum = 65, no name, don't know what is it */ ++ case 66: VG_(transfer) (&sw->guest_TID, buf, dir, size, mod); break; /* regnum = 66 */ ++ ++ default: VG_(printf)("regno: %d\n", regno); vg_assert(0); ++ } ++} ++ ++static ++const char* target_xml (Bool shadow_mode) ++{ ++ return NULL; ++} ++ ++static CORE_ADDR** target_get_dtv (ThreadState *tst) ++{ ++ VexGuestSW64State* sw64 = (VexGuestSW64State*)&tst->arch.vex; ++ return (CORE_ADDR**)((CORE_ADDR)sw64->guest_TID); ++} ++ ++static struct valgrind_target_ops low_target = { ++ num_regs, ++ regs, ++ 30, //sp = r30, which is register offset 30 in regs ++ transfer_register, ++ get_pc, ++ set_pc, ++ "sw64", ++ target_xml, ++ target_get_dtv ++}; ++ ++void sw64_init_architecture (struct valgrind_target_ops *target) ++{ ++ *target = low_target; ++ set_register_cache (regs, num_regs); ++ gdbserver_expedite_regs = expedite_regs; ++} +diff --git a/coregrind/m_gdbserver/valgrind_low.h b/coregrind/m_gdbserver/valgrind_low.h +index c6c0bb63b..b697b90c9 100644 +--- a/coregrind/m_gdbserver/valgrind_low.h ++++ b/coregrind/m_gdbserver/valgrind_low.h +@@ -108,5 +108,6 @@ extern void s390x_init_architecture (struct valgrind_target_ops *target); + extern void mips32_init_architecture (struct valgrind_target_ops *target); + extern void mips64_init_architecture (struct valgrind_target_ops *target); + extern void nanomips_init_architecture (struct valgrind_target_ops *target); ++extern void sw64_init_architecture (struct valgrind_target_ops *target); + + #endif +diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c +index 7a7d45335..b3693ed57 100644 +--- a/coregrind/m_initimg/initimg-linux.c ++++ b/coregrind/m_initimg/initimg-linux.c +@@ -547,9 +547,9 @@ Addr setup_client_stack( void* init_sp, + vg_assert(VG_IS_PAGE_ALIGNED(resvn_start)); + vg_assert(resvn_start == clstack_end + 1 - clstack_max_size); + +-# ifdef ENABLE_INNER ++#if defined(ENABLE_INNER) || defined(VGP_sw64_linux) + inner_HACK = 1024*1024; // create 1M non-fault-extending stack +-# endif ++#endif + + if (0) + VG_(printf)("%#lx 0x%lx %#lx 0x%lx\n", +@@ -913,7 +913,8 @@ Addr setup_client_stack( void* init_sp, + && !defined(VGP_ppc64le_linux) \ + && !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) \ + && !defined(VGP_nanomips_linux) \ +- && !defined(VGP_s390x_linux) ++ && !defined(VGP_s390x_linux) \ ++ && !defined(VGP_sw64_linux) + case AT_SYSINFO_EHDR: { + /* Trash this, because we don't reproduce it */ + const NSegment* ehdrseg = VG_(am_find_nsegment)((Addr)auxv->u.a_ptr); +@@ -1173,7 +1174,7 @@ IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo iicii, + starting values. This is handed the IIFinaliseImageInfo created by + VG_(ii_create_image). + */ +-void VG_(ii_finalise_image)( IIFinaliseImageInfo iifii ) ++void VG_(ii_finalise_image)( IIFinaliseImageInfo iifii , IICreateImageInfo iicii ) + { + ThreadArchState* arch = &VG_(threads)[1].arch; + +@@ -1343,6 +1344,22 @@ void VG_(ii_finalise_image)( IIFinaliseImageInfo iifii ) + arch->vex.guest_r29 = iifii.initial_client_SP; + arch->vex.guest_PC = iifii.initial_client_IP; + arch->vex.guest_r31 = iifii.initial_client_SP; ++# elif defined(VGP_sw64_linux) ++ vg_assert(0 == sizeof(VexGuestSW64State) % LibVEX_GUEST_STATE_ALIGN); ++ /* Zero out the initial state, and set up the simulated FPU in a sane way. */ ++ LibVEX_GuestSW64_initialise(&arch->vex); ++ ++ /* Zero out the shadow areas. */ ++ VG_(memset)(&arch->vex_shadow1, 0, sizeof(VexGuestSW64State)); ++ VG_(memset)(&arch->vex_shadow2, 0, sizeof(VexGuestSW64State)); ++ ++ arch->vex.guest_r30 = iifii.initial_client_SP; //sp ++ // sw: the stack growth direction is from high address to lower address ++ // arch->vex.guest_r30 = iicii.clstack_end - 16; ++ // Addr* ptr = (Addr*)(iicii.clstack_end - 16); ++ // *ptr = 1; //not true ++ arch->vex.guest_PC = iifii.initial_client_IP; //pc ++ arch->vex.guest_r26 = iifii.initial_client_SP; //ra + + # else + # error Unknown platform +diff --git a/coregrind/m_libcassert.c b/coregrind/m_libcassert.c +index 35f37f88d..7e6bf017b 100644 +--- a/coregrind/m_libcassert.c ++++ b/coregrind/m_libcassert.c +@@ -264,6 +264,28 @@ + (srP)->misc.MIPS32.r31 = (UInt)ra; \ + (srP)->misc.MIPS32.r28 = (UInt)gp; \ + } ++#elif defined(VGP_sw64_linux) ++# define GET_STARTREGS(srP) \ ++ { ULong pc, sp, fp, ra, gp; \ ++ asm(" br %0, 0f\n" /* restore pc */ \ ++ "0:\n" \ ++ " mov $30, %1\n" /* restore sp */ \ ++ " mov $15, %2\n" /* restore fp */ \ ++ " mov $26, %3\n" /* restore ra */ \ ++ " mov $29, %4\n" /* restore gp */ \ ++ : "=r" (pc), \ ++ "=r" (sp), \ ++ "=r" (fp), \ ++ "=r" (ra), \ ++ "=r" (gp) \ ++ : /* reads none */ \ ++ ); \ ++ (srP)->r_pc = (ULong)pc - 4; \ ++ (srP)->r_sp = (ULong)sp; \ ++ (srP)->misc.SW64.r15 = (ULong)fp; \ ++ (srP)->misc.SW64.r26 = (ULong)ra; \ ++ (srP)->misc.SW64.r29 = (ULong)gp; \ ++ } + #else + # error Unknown platform + #endif +diff --git a/coregrind/m_libcfile.c b/coregrind/m_libcfile.c +index 5d3a349f2..062fbdede 100644 +--- a/coregrind/m_libcfile.c ++++ b/coregrind/m_libcfile.c +@@ -268,6 +268,9 @@ SysRes VG_(mknod) ( const HChar* pathname, Int mode, UWord dev ) + /* ARM64 wants to use __NR_mknodat rather than __NR_mknod. */ + SysRes res = VG_(do_syscall4)(__NR_mknodat, + VKI_AT_FDCWD, (UWord)pathname, mode, dev); ++# elif defined(VGP_sw64_linux) ++ SysRes res = VG_(do_syscall4)(__NR_mknodat, ++ VKI_AT_FDCWD, (UWord)pathname, mode, dev); + # elif defined(VGO_linux) || defined(VGO_darwin) + SysRes res = VG_(do_syscall3)(__NR_mknod, + (UWord)pathname, mode, dev); +@@ -384,7 +387,8 @@ Int VG_(pipe) ( Int fd[2] ) + } else { + return -1; + } +-# elif defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# elif defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res = VG_(do_syscall2)(__NR_pipe2, (UWord)fd, 0); + return sr_isError(res) ? -1 : 0; + # elif defined(VGO_linux) +@@ -463,7 +467,27 @@ Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence ) + /* stat/fstat support. It's uggerly. We have impedance-match into a + 'struct vg_stat' in order to have a single structure that callers + can use consistently on all platforms. */ +- ++#if defined(VGP_sw64_linux) ++#define TRANSLATE_TO_vg_stat(_p_vgstat, _p_vkistat) \ ++ do { \ ++ (_p_vgstat)->dev = (ULong)( (_p_vkistat)->st_dev ); \ ++ (_p_vgstat)->ino = (ULong)( (_p_vkistat)->st_ino ); \ ++ (_p_vgstat)->nlink = (ULong)( (_p_vkistat)->st_nlink ); \ ++ (_p_vgstat)->mode = (UInt) ( (_p_vkistat)->st_mode ); \ ++ (_p_vgstat)->uid = (UInt) ( (_p_vkistat)->st_uid ); \ ++ (_p_vgstat)->gid = (UInt) ( (_p_vkistat)->st_gid ); \ ++ (_p_vgstat)->rdev = (ULong)( (_p_vkistat)->st_rdev ); \ ++ (_p_vgstat)->size = (Long) ( (_p_vkistat)->st_size ); \ ++ (_p_vgstat)->blksize = (ULong)( (_p_vkistat)->st_blksize ); \ ++ (_p_vgstat)->blocks = (ULong)( (_p_vkistat)->st_blocks ); \ ++ (_p_vgstat)->atime = (ULong)( (_p_vkistat)->st_atime ); \ ++ (_p_vgstat)->atime_nsec = (ULong)( 0 ); \ ++ (_p_vgstat)->mtime = (ULong)( (_p_vkistat)->st_mtime ); \ ++ (_p_vgstat)->mtime_nsec = (ULong)( 0 ); \ ++ (_p_vgstat)->ctime = (ULong)( (_p_vkistat)->st_ctime ); \ ++ (_p_vgstat)->ctime_nsec = (ULong)( 0 ); \ ++ } while (0) ++#else /* if defined(VGP_sw64_linux) */ + #define TRANSLATE_TO_vg_stat(_p_vgstat, _p_vkistat) \ + do { \ + (_p_vgstat)->dev = (ULong)( (_p_vkistat)->st_dev ); \ +@@ -483,6 +507,7 @@ Off64T VG_(lseek) ( Int fd, Off64T offset, Int whence ) + (_p_vgstat)->ctime = (ULong)( (_p_vkistat)->st_ctime ); \ + (_p_vgstat)->ctime_nsec = (ULong)( (_p_vkistat)->st_ctime_nsec ); \ + } while (0) ++#endif /* if defined(VGP_sw64_linux) */ + + #define TRANSLATE_statx_TO_vg_stat(_p_vgstat, _p_vkistat) \ + do { \ +@@ -731,7 +756,8 @@ SysRes VG_(dup) ( Int oldfd ) + + SysRes VG_(dup2) ( Int oldfd, Int newfd ) + { +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + /* We only have dup3, that means we have to mimic dup2. + The only real difference is when oldfd == newfd. + dup3 always returns an error, but dup2 returns only an +@@ -774,7 +800,8 @@ Int VG_(fcntl) ( Int fd, Int cmd, Addr arg ) + + Int VG_(rename) ( const HChar* old_name, const HChar* new_name ) + { +-# if defined(VGO_solaris) || defined(VGP_arm64_linux) ++# if defined(VGO_solaris) || defined(VGP_arm64_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res = VG_(do_syscall4)(__NR_renameat, VKI_AT_FDCWD, (UWord)old_name, + VKI_AT_FDCWD, (UWord)new_name); + # elif defined(VGP_nanomips_linux) +@@ -791,7 +818,8 @@ Int VG_(rename) ( const HChar* old_name, const HChar* new_name ) + + Int VG_(unlink) ( const HChar* file_name ) + { +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res = VG_(do_syscall2)(__NR_unlinkat, VKI_AT_FDCWD, + (UWord)file_name); + # elif defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_freebsd) +@@ -870,7 +898,8 @@ const HChar *VG_(get_startup_wd) ( void ) + SysRes VG_(poll) (struct vki_pollfd *fds, Int nfds, Int timeout) + { + SysRes res; +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + /* ARM64 wants to use __NR_ppoll rather than __NR_poll. */ + struct vki_timespec timeout_ts; + if (timeout >= 0) { +@@ -915,7 +944,8 @@ SSizeT VG_(readlink) (const HChar* path, HChar* buf, SizeT bufsiz) + { + SysRes res; + /* res = readlink( path, buf, bufsiz ); */ +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, + (UWord)path, (UWord)buf, bufsiz); + # elif defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_freebsd) +@@ -994,7 +1024,8 @@ Int VG_(access) ( const HChar* path, Bool irusr, Bool iwusr, Bool ixusr ) + UWord w = (irusr ? VKI_R_OK : 0) + | (iwusr ? VKI_W_OK : 0) + | (ixusr ? VKI_X_OK : 0); +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res = VG_(do_syscall3)(__NR_faccessat, VKI_AT_FDCWD, (UWord)path, w); + # elif defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_freebsd) + SysRes res = VG_(do_syscall2)(__NR_access, (UWord)path, w); +@@ -1140,7 +1171,8 @@ SysRes VG_(pread) ( Int fd, void* buf, Int count, OffT offset ) + return res; + # elif defined(VGP_amd64_linux) || defined(VGP_s390x_linux) \ + || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) \ +- || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) ++ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ ++ || defined(VGP_sw64_linux) + res = VG_(do_syscall4)(__NR_pread64, fd, (UWord)buf, count, offset); + return res; + # elif defined(VGP_amd64_freebsd) +@@ -1404,7 +1436,8 @@ Int VG_(socket) ( Int domain, Int type, Int protocol ) + + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) || defined(VGO_freebsd) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) || defined(VGO_freebsd) + SysRes res; + res = VG_(do_syscall3)(__NR_socket, domain, type, protocol ); + return sr_isError(res) ? -1 : sr_Res(res); +@@ -1459,7 +1492,8 @@ Int my_connect ( Int sockfd, struct vki_sockaddr_in* serv_addr, Int addrlen ) + + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) || defined(VGO_freebsd) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) || defined(VGO_freebsd) + SysRes res; + res = VG_(do_syscall3)(__NR_connect, sockfd, (UWord)serv_addr, addrlen); + return sr_isError(res) ? -1 : sr_Res(res); +@@ -1506,7 +1540,8 @@ Int VG_(write_socket)( Int sd, const void *msg, Int count ) + + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) || defined(VGO_freebsd) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) || defined(VGO_freebsd) + SysRes res; + res = VG_(do_syscall6)(__NR_sendto, sd, (UWord)msg, + count, VKI_MSG_NOSIGNAL, 0,0); +@@ -1544,7 +1579,8 @@ Int VG_(getsockname) ( Int sd, struct vki_sockaddr *name, Int *namelen) + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ + || defined(VGP_nanomips_linux) || defined(VGO_freebsd) \ +- || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) ++ || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res; + res = VG_(do_syscall3)( __NR_getsockname, + (UWord)sd, (UWord)name, (UWord)namelen ); +@@ -1583,7 +1619,8 @@ Int VG_(getpeername) ( Int sd, struct vki_sockaddr *name, Int *namelen) + + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ +- || defined(VGP_nanomips_linux) || defined(VGO_freebsd) ++ || defined(VGP_nanomips_linux) || defined(VGO_freebsd) \ ++ || defined(VGP_sw64_linux) + SysRes res; + res = VG_(do_syscall3)( __NR_getpeername, + (UWord)sd, (UWord)name, (UWord)namelen ); +@@ -1625,7 +1662,7 @@ Int VG_(getsockopt) ( Int sd, Int level, Int optname, void *optval, + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ + || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ +- || defined(VGO_freebsd) ++ || defined(VGP_sw64_linux) || defined(VGO_freebsd) + SysRes res; + res = VG_(do_syscall5)( __NR_getsockopt, + (UWord)sd, (UWord)level, (UWord)optname, +@@ -1669,7 +1706,8 @@ Int VG_(setsockopt) ( Int sd, Int level, Int optname, void *optval, + + # elif defined(VGP_amd64_linux) || defined(VGP_arm_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res; + res = VG_(do_syscall5)( __NR_setsockopt, + (UWord)sd, (UWord)level, (UWord)optname, +diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c +index 592d69bf1..adac64c10 100644 +--- a/coregrind/m_libcproc.c ++++ b/coregrind/m_libcproc.c +@@ -698,7 +698,8 @@ Int VG_(gettid)(void) + * the /proc/self link is pointing... + */ + +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + res = VG_(do_syscall4)(__NR_readlinkat, VKI_AT_FDCWD, + (UWord)"/proc/self", + (UWord)pid, sizeof(pid)); +@@ -753,7 +754,8 @@ Int VG_(getpid) ( void ) + Int VG_(getpgrp) ( void ) + { + /* ASSUMES SYSCALL ALWAYS SUCCEEDS */ +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + return sr_Res( VG_(do_syscall1)(__NR_getpgid, 0) ); + # elif defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_freebsd) + return sr_Res( VG_(do_syscall0)(__NR_getpgrp) ); +@@ -850,7 +852,7 @@ Int VG_(getgroups)( Int size, UInt* list ) + || defined(VGO_darwin) || defined(VGP_s390x_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_arm64_linux) \ + || defined(VGO_solaris) || defined(VGP_nanomips_linux) \ +- || defined(VGO_freebsd) ++ || defined(VGP_sw64_linux) || defined(VGO_freebsd) + SysRes sres; + sres = VG_(do_syscall2)(__NR_getgroups, size, (Addr)list); + if (sr_isError(sres)) +@@ -944,7 +946,8 @@ Int VG_(fork) ( void ) + fds[0] = fds[1] = -1; + } + +-# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++# if defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + SysRes res; + res = VG_(do_syscall5)(__NR_clone, VKI_SIGCHLD, + (UWord)NULL, (UWord)NULL, (UWord)NULL, (UWord)NULL); +@@ -1422,6 +1425,12 @@ void VG_(invalidate_icache) ( void *ptr, SizeT nbytes ) + + __builtin___clear_cache(ptr, (char*)ptr + nbytes); + ++# elif defined(VGA_sw64) ++ __builtin___clear_cache(ptr, (char*)ptr + nbytes); ++ ++# else ++ VG_(core_panic)( ++ "TODO: impl invalidate_icache for this architecture"); + # endif + } + +diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c +index 052b5d186..6ceae888f 100644 +--- a/coregrind/m_machine.c ++++ b/coregrind/m_machine.c +@@ -152,6 +152,15 @@ void VG_(get_UnwindStartRegs) ( /*OUT*/UnwindStartRegs* regs, + = VG_(threads)[tid].arch.vex.guest_r31; + regs->misc.MIPS64.r28 + = VG_(threads)[tid].arch.vex.guest_r28; ++# elif defined(VGA_sw64) ++ regs->r_pc = VG_(threads)[tid].arch.vex.guest_PC; ++ regs->r_sp = VG_(threads)[tid].arch.vex.guest_r30; ++ regs->misc.SW64.r15 ++ = VG_(threads)[tid].arch.vex.guest_r15; //fp ++ regs->misc.SW64.r26 ++ = VG_(threads)[tid].arch.vex.guest_r26; //ra ++ regs->misc.SW64.r29 ++ = VG_(threads)[tid].arch.vex.guest_r29; //gp + # else + # error "Unknown arch" + # endif +@@ -304,7 +313,8 @@ static void apply_to_GPs_of_tid(ThreadId tid, void (*f)(ThreadId, + (*f)(tid, "r13", vex->guest_r13); + (*f)(tid, "r14", vex->guest_r14); + (*f)(tid, "r15", vex->guest_r15); +-#elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGP_nanomips_linux) ++#elif defined(VGA_mips32) || defined(VGA_mips64) \ ++ || defined(VGP_nanomips_linux) || defined(VGA_sw64) + (*f)(tid, "r0" , vex->guest_r0 ); + (*f)(tid, "r1" , vex->guest_r1 ); + (*f)(tid, "r2" , vex->guest_r2 ); +@@ -859,6 +869,59 @@ static Bool VG_(parse_cpuinfo)(void) + + #endif /* defined(VGP_arm64_linux) */ + ++#if defined(VGP_sw64_linux) ++static Bool VG_(parse_cpuinfo)(void) ++{ ++ Int n, fh; ++ SysRes fd; ++ SizeT num_bytes, file_buf_size; ++ HChar *file_buf; ++ ++ /* Slurp contents of /proc/cpuinfo into FILE_BUF */ ++ fd = VG_(open)( "/proc/cpuinfo", 0, VKI_S_IRUSR ); ++ if ( sr_isError(fd) ) return False; ++ ++ fh = sr_Res(fd); ++ ++ /* Determine the size of /proc/cpuinfo. ++ Work around broken-ness in /proc file system implementation. ++ fstat returns a zero size for /proc/cpuinfo although it is ++ claimed to be a regular file. */ ++ num_bytes = 0; ++ file_buf_size = 1000; ++ file_buf = VG_(malloc)("cpuinfo", file_buf_size + 1); ++ while (42) { ++ n = VG_(read)(fh, file_buf, file_buf_size); ++ if (n < 0) break; ++ ++ num_bytes += n; ++ if (n < file_buf_size) break; /* reached EOF */ ++ } ++ ++ if (n < 0) num_bytes = 0; /* read error; ignore contents */ ++ ++ if (num_bytes > file_buf_size) { ++ VG_(free)( file_buf ); ++ VG_(lseek)( fh, 0, VKI_SEEK_SET ); ++ file_buf = VG_(malloc)( "cpuinfo", num_bytes + 1 ); ++ n = VG_(read)( fh, file_buf, num_bytes ); ++ if (n < 0) num_bytes = 0; ++ } ++ ++ file_buf[num_bytes] = '\0'; ++ VG_(close)(fh); ++ ++ if (VG_(strstr) (file_buf, "cpu family\t: 8\n") != NULL) { ++ vai.hwcaps |= VEX_SW64_CORE4; ++ } else { ++ vai.hwcaps |= VEX_SW64_CORE3; ++ } ++ ++ VG_(free)(file_buf); ++ return True; ++} ++#endif ++ + Bool VG_(machine_get_hwcaps)( void ) + { + vg_assert(hwcaps_done == False); +@@ -2227,6 +2290,21 @@ Bool VG_(machine_get_hwcaps)( void ) + + return True; + } ++#elif defined(VGA_sw64) ++ { ++ va = VexArchSW64; ++ vai.hwcaps = 0; ++ vai.endness = VexEndnessLE; ++ ++ if (!VG_(parse_cpuinfo)()) ++ return False; ++ ++ VG_(debugLog)(1, "machine", "hwcaps = 0x%x\n", vai.hwcaps); ++ ++ VG_(machine_get_cache_info)(&vai); ++ ++ return True; ++ } + #else + # error "Unknown arch" + #endif +@@ -2367,6 +2445,9 @@ Int VG_(machine_get_size_of_largest_guest_register) ( void ) + # elif defined(VGA_mips64) + return 8; + ++# elif defined(VGA_sw64) ++ return 8; ++ + # else + # error "Unknown arch" + # endif +@@ -2383,7 +2464,7 @@ void* VG_(fnptr_to_fnentry)( void* f ) + || defined(VGP_s390x_linux) || defined(VGP_mips32_linux) \ + || defined(VGP_mips64_linux) || defined(VGP_arm64_linux) \ + || defined(VGP_x86_solaris) || defined(VGP_amd64_solaris) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + return f; + # elif defined(VGP_ppc64be_linux) + /* ppc64-linux uses the AIX scheme, in which f is a pointer to a +diff --git a/coregrind/m_main.c b/coregrind/m_main.c +index a857e5afe..80f46d0f2 100644 +--- a/coregrind/m_main.c ++++ b/coregrind/m_main.c +@@ -257,6 +257,10 @@ static void usage_NORETURN ( int need_help ) + " --sanity-level= level of sanity checking to do [1]\n" + " --trace-flags= show generated code? (X = 0|1) [00000000]\n" + " --profile-flags= ditto, but for profiling (X = 0|1) [00000000]\n" ++" --trace-reg= show register value? (X = 0|1) [000]\n" ++" 001 ....... show control registers\n" ++" 010 ....... show interger registers\n" ++" 100 ....... show float-point registers\n" + " --profile-interval= show profile every event checks\n" + " [0, meaning only at the end of the run]\n" + " --trace-notbelow= only show BBs above [999999999]\n" +@@ -269,6 +273,7 @@ static void usage_NORETURN ( int need_help ) + " --debug-dump=syms mimic /usr/bin/readelf --syms\n" + " --debug-dump=line mimic /usr/bin/readelf --debug-dump=line\n" + " --debug-dump=frames mimic /usr/bin/readelf --debug-dump=frames\n" ++" --dump-expansion-ratio=no|yes show instruction expansion ratio? [no]\n" + " --trace-redir=no|yes show redirection details? [no]\n" + " --trace-sched=no|yes show thread scheduler details? [no]\n" + " --profile-heap=no|yes profile Valgrind's own space use\n" +@@ -660,6 +665,8 @@ else if VG_INT_CLOM(cloPD, arg, "--scheduling-quantum", + True) {} + else if VG_XACT_CLOM(cloPD, arg, "--debug-dump=frames", + VG_(clo_debug_dump_frames), True) {} ++ else if VG_BOOL_CLOM(cloPD, arg, "--dump-expansion-ratio", ++ VG_(clo_dump_expansion_ratio)) {} + else if VG_BOOL_CLOM(cloPD, arg, "--trace-redir", VG_(clo_trace_redir)) {} + + else if VG_BOOL_CLOM(cloPD, arg, "--trace-syscalls", VG_(clo_trace_syscalls)) {} +@@ -848,6 +855,22 @@ else if VG_INT_CLOM(cloPD, arg, "--scheduling-quantum", + + else if VG_INT_CLOM (cloPD, arg, "--trace-notabove", VG_(clo_trace_notabove)) {} + ++ else if VG_STR_CLOM (cloPD, arg, "--trace-reg", tmp_str) { ++ Int j; ++ if (3 != VG_(strlen)(tmp_str)) { ++ VG_(fmsg_bad_option)(arg, ++ "--trace-reg argument must have 3 digits\n"); ++ } ++ for (j = 0; j < 3; j++) { ++ if ('0' == tmp_str[j]) { /* do nothing */ } ++ else if ('1' == tmp_str[j]) VG_(clo_trace_reg) |= (1 << (2-j)); ++ else { ++ VG_(fmsg_bad_option)(arg, ++ "--trace-reg argument can only contain 0s and 1s\n"); ++ } ++ } ++ } ++ + /* "stuvwxyz" --> stuvwxyz (binary) */ + else if VG_STR_CLOM(cloPD, arg, "--profile-flags", tmp_str) { + Int j; +@@ -2108,7 +2131,7 @@ Int valgrind_main ( Int argc, HChar **argv, HChar **envp ) + vg_assert(VG_(running_tid) == VG_INVALID_THREADID); + VG_(running_tid) = tid_main; + +- VG_(ii_finalise_image)( the_iifii ); ++ VG_(ii_finalise_image)( the_iifii, the_iicii ); + + /* Clear the running thread indicator */ + VG_(running_tid) = VG_INVALID_THREADID; +@@ -2484,6 +2507,21 @@ static void final_tidyup(ThreadId tid) + sizeof(VG_(threads)[tid].arch.vex.guest_r25)); + # endif + ++/* r27 infect sub-func r29: ++ dissembly of sub-func is: ++ void VG_NOTIFY_ON_LOAD(freeres)(Vg_FreeresToRun to_run) ++ ++ 990: 02 00 bb ff ldih $r29,2($r27) ++ 994: 80 96 bd fb ldi $r29,-27008($r29) ++*/ ++/* see also in coregrind/m_translate.c: 1370*/ ++# if defined(VGP_sw64_linux) ++ VG_(threads)[tid].arch.vex.guest_r27 = freeres_wrapper; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestSW64State, guest_r27), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r27)); ++# endif ++ + /* Pass a parameter to freeres_wrapper(). */ + # if defined(VGA_x86) + Addr sp = VG_(threads)[tid].arch.vex.guest_ESP; +@@ -2519,6 +2557,11 @@ static void final_tidyup(ThreadId tid) + VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, + offsetof(VexGuestMIPS64State, guest_r4), + sizeof(VG_(threads)[tid].arch.vex.guest_r4)); ++# elif defined(VGA_sw64) ++ VG_(threads)[tid].arch.vex.guest_r16 = to_run; ++ VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, ++ offsetof(VexGuestSW64State, guest_r16), ++ sizeof(VG_(threads)[tid].arch.vex.guest_r16)); + # elif defined(VGA_ppc32) + VG_(threads)[tid].arch.vex.guest_GPR3 = to_run; + VG_TRACK(post_reg_write, Vg_CoreClientReq, tid, +@@ -3062,6 +3105,27 @@ asm( + ".set pop \n\t" + ".previous \n\t" + ); ++#elif defined(VGP_sw64_linux) ++asm("\n" ++ "\t.text\n" ++ "\t.set macro\n" ++ "\t.type _start,@function\n" ++ "\t.global _start\n" ++ "\t_start:\n" ++ "\tbr $29, 1f\n" ++ "\t1: ldgp $29, 0($29)\n" ++ "\tldih $0,vgPlain_interim_stack($29)!gprelhigh\n" ++ "\tldi $0, vgPlain_interim_stack($0) !gprellow\n" ++ "\tldi $1, "VG_STRINGIFY(VG_STACK_GUARD_SZB)"($31)\n" ++ "\taddl $0, $1, $0\n" ++ "\tldi $1, "VG_STRINGIFY(VG_DEFAULT_STACK_ACTIVE_SZB)"($31)\n" ++ "\taddl $0, $1, $0\n" ++ "\tldi $1, 0xFFFFFF00\n" ++ "\tand $0, $1, $0\n" ++ "\tmov $sp, $16\n" //$16 _start_in_C_linux, first arg ++ "\tmov $0, $sp\n" ++ "\tcall _start_in_C_linux\n" ++); + #else + # error "Unknown platform" + #endif +@@ -3107,7 +3171,7 @@ void _start_in_C_linux ( UWord* pArgc ) + # if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \ + || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + { + /* ppc32/ppc64, arm64, mips32/64 can be configured with different + page sizes. Determine this early. This is an ugly hack and really +diff --git a/coregrind/m_options.c b/coregrind/m_options.c +index 1483af2d9..d168f9424 100644 +--- a/coregrind/m_options.c ++++ b/coregrind/m_options.c +@@ -140,6 +140,7 @@ UChar VG_(clo_profyle_flags) = 0; // 00000000b + ULong VG_(clo_profyle_interval) = 0; + Int VG_(clo_trace_notbelow) = -1; // unspecified + Int VG_(clo_trace_notabove) = -1; // unspecified ++Int VG_(clo_trace_reg) = 0; + Bool VG_(clo_trace_syscalls) = False; + Bool VG_(clo_trace_signals) = False; + Bool VG_(clo_trace_symtab) = False; +@@ -148,6 +149,7 @@ Bool VG_(clo_trace_cfi) = False; + Bool VG_(clo_debug_dump_syms) = False; + Bool VG_(clo_debug_dump_line) = False; + Bool VG_(clo_debug_dump_frames) = False; ++Bool VG_(clo_dump_expansion_ratio) = False; + Bool VG_(clo_trace_redir) = False; + enum FairSchedType + VG_(clo_fair_sched) = disable_fair_sched; +@@ -203,7 +205,8 @@ UInt VG_(clo_unw_stack_scan_frames) = 5; + VgSmc VG_(clo_smc_check) = Vg_SmcAllNonFile; + #elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ + || defined(VGA_arm) || defined(VGA_arm64) \ +- || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++ || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) + VgSmc VG_(clo_smc_check) = Vg_SmcStack; + #else + # error "Unknown arch" +diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c +index 37c67f4c1..edbbfae2c 100644 +--- a/coregrind/m_redir.c ++++ b/coregrind/m_redir.c +@@ -1668,6 +1668,23 @@ void VG_(redir_initialise) ( void ) + ); + } + ++# elif defined(VGP_sw64_linux) ++ /* If we're using memcheck, use these intercepts right from ++ the start, otherwise ld.so makes a lot of noise. */ ++ if (0==VG_(strcmp)("Memcheck", VG_(details).name)) ++ { ++ add_hardwired_spec( ++ "ld-linux.so.2", "strlen", ++ (Addr)&VG_(sw64_linux_REDIR_FOR_strlen), ++ complain_about_stripped_glibc_ldso ++ ); ++ add_hardwired_spec( ++ "ld-linux.so.2", "index", ++ (Addr)&VG_(sw64_linux_REDIR_FOR_index), ++ complain_about_stripped_glibc_ldso ++ ); ++ } ++ + # elif defined(VGP_x86_solaris) + /* If we're using memcheck, use these intercepts right from + the start, otherwise ld.so makes a lot of noise. */ +diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c +index 3062c1afc..6f1dbdf0a 100644 +--- a/coregrind/m_scheduler/scheduler.c ++++ b/coregrind/m_scheduler/scheduler.c +@@ -56,6 +56,8 @@ + */ + + ++#include "libvex_basictypes.h" ++#include "libvex_guest_sw64.h" + #include "pub_core_basics.h" + #include "pub_core_debuglog.h" + #include "pub_core_vki.h" +@@ -145,6 +147,161 @@ static ULong stats__n_xIndir_misses = 0; + static UInt sanity_fast_count = 0; + static UInt sanity_slow_count = 0; + ++#if defined(VGP_sw64_linux) ++void VG_(print_guest_state) ( void * vex_ptr ) ++{ ++ static UWord ctr = 0; ++ ++ VexGuestSW64State *vex = (VexGuestSW64State *)vex_ptr; ++ Int trace_flag = VG_(clo_trace_reg); ++ ++ if (!trace_flag) { ++ return; ++ } ++ ++ const DiEpoch ep = VG_(current_DiEpoch)(); ++ Addr addr = (Addr)vex->guest_PC; ++ ++ VG_(printf)("VexGuestSW64State (%lu) {\n", ctr++); ++ ++ if (trace_flag & 1) { ++ VG_(printf)(" host_EvC_FAILADDR: %llx\n", vex->host_EvC_FAILADDR); ++ VG_(printf)(" host_EvC_COUNTER: %x\n", vex->host_EvC_COUNTER); ++ } ++ ++ /* print all interger registers */ ++ if (trace_flag & 2) { ++ for(int i = 0; i < 32; i++) { ++ ULong gpr; ++ ULong offset_gpr = i * sizeof(gpr) + offsetof(VexGuestSW64State, guest_r0); ++ VG_(memcpy)(&gpr, (char *)vex + offset_gpr, sizeof(gpr)); ++ ++ ULong shadow; ++ ULong offset_shadow = sizeof(VexGuestSW64State) + offset_gpr; ++ VG_(memcpy)(&shadow, (char *)vex + offset_shadow, sizeof(shadow)); ++ ++ VG_(printf)(" [%3llu]guest_r%-2d %16llx", offset_gpr, i, gpr); ++ ++ /* print diagnosis for $gp */ ++ if (i == 29) { ++ const DebugInfo *di; ++ Addr gpfixed = vex->guest_r29 - 0x8000; ++ ++ for (di = VG_(next_DebugInfo)(0); di; di = VG_(next_DebugInfo)(di)) { ++ if (VG_(DebugInfo_get_got_avma)(di) == gpfixed) { ++ Addr text_begin = VG_(DebugInfo_get_text_avma)(di); ++ Addr text_end = text_begin + VG_(DebugInfo_get_text_size)(di); ++ if (text_begin < addr && addr < text_end) { ++ VG_(printf)(" (good)"); ++ } else { ++ VG_(printf)(" (outdated)"); ++ } ++ break; ++ } ++ } ++ ++ if (!di) { ++ VG_(printf)(" (bad)"); ++ } ++ } ++ ++ if (shadow) { ++ const char *prompt = shadow == (ULong)(-1) ? "undefined" : "partial-defined"; ++ VG_(printf)(" [%3llu]shadow %16llx (%s)", offset_shadow, shadow, prompt); ++ } ++ ++ VG_(printf)("\n"); ++ } ++ } ++ ++ /* print all float registers */ ++ if (trace_flag & 4) { ++ for(int i = 0; i < 32; i++) { ++ ULong flt; ++ ULong offset_flt = i * sizeof(flt) + offsetof(VexGuestSW64State, guest_f0); ++ VG_(memcpy)(&flt, (char *)vex + offset_flt, sizeof(flt)); ++ ++ ULong shadow; ++ ULong offset_shadow = sizeof(VexGuestSW64State) + offset_flt; ++ VG_(memcpy)(&shadow, (char *)vex + offset_shadow, sizeof(shadow)); ++ ++ VG_(printf)(" [%03llu]guest_f%-2d %16llx", offset_flt, i, flt); ++ ++ if (shadow) { ++ const char *prompt = shadow == (ULong)(-1) ? "undefined" : "partial-defined"; ++ VG_(printf)(" [%3llu]shadow %16llx (%s)", offset_shadow, shadow, prompt); ++ } ++ ++ VG_(printf)("\n"); ++ } ++ ++ VG_(printf)(" guest_FPCR: %llx\n", vex->guest_FPCR); ++ } ++ ++ /* print all control registers */ ++ if (trace_flag & 1) { ++ VG_(printf)(" guest_CSR: %llx\n", vex->guest_CSR); ++ ++ VG_(printf)(" guest_EMNOTE: %x\n", vex->guest_EMNOTE); ++ VG_(printf)(" guest_CMSTART: %llx\n", vex->guest_CMSTART); ++ VG_(printf)(" guest_CMLEN: %llx\n", vex->guest_CMLEN); ++ ++ VG_(printf)(" guest_NRADDR: %llx\n", vex->guest_NRADDR); ++ VG_(printf)(" guest_LOCKFLAG: %llx\n", vex->guest_LOCKFLAG); ++ VG_(printf)(" guest_LOCKVALID: %llx\n", vex->guest_LOCKVALID); ++ VG_(printf)(" guest_LOCKSUCCESS: %llx\n", vex->guest_LOCKSUCCESS); ++ VG_(printf)(" guest_LOCKSIZE: %llx\n", vex->guest_LOCKSIZE); ++ VG_(printf)(" guest_LOCKADDR: %llx\n", vex->guest_LOCKADDR); ++ VG_(printf)(" guest_LOCKDATA: %llx\n", vex->guest_LOCKDATA); ++ ++ VG_(printf)(" guest_TID: %llx\n", vex->guest_TID); ++ } ++ ++ VG_(printf)(" guest_PC: %llx", vex->guest_PC); ++ ++ Bool fnok; ++ const HChar *fnname; ++ OffT fnoff; ++ fnok = VG_(get_fnname)(ep, addr, &fnname); ++ fnok = fnok && VG_(get_inst_offset_in_function)(ep, addr , &fnoff); ++ ++ Bool srcok; ++ HChar const *srcname; ++ UInt srcline; ++ srcok = VG_(get_filename)(ep, addr, &srcname); ++ srcok = srcok && VG_(get_linenum)(ep, addr, &srcline); ++ ++ ++ if (fnok && srcok) { ++ VG_(printf)( ++ " %s%c0x%lx (%s:%u)\n", ++ fnname, fnoff >= 0 ? '+' : '-', (UWord)(fnoff >= 0 ? fnoff : -fnoff), ++ srcname, srcline ++ ); ++ } else if (fnok) { ++ VG_(printf)( ++ " %s%c0x%lx\n", ++ fnname, fnoff >= 0 ? '+' : '-', (UWord)(fnoff >= 0 ? fnoff : -fnoff) ++ ); ++ } else if (srcok) { ++ VG_(printf)( ++ " (%s:%u)\n", ++ srcname, srcline ++ ); ++ } else { ++ VG_(printf)("\n"); ++ } ++ ++ VG_(printf)("}\n"); ++} ++#else /* #if defined(VGP_sw64_linux) */ ++ ++void VG_(print_guest_state) ( void * vex_ptr ) ++{ ++ (void) vex_ptr; ++} ++#endif ++ + void VG_(print_scheduler_stats)(void) + { + VG_(message)(Vg_DebugMsg, +@@ -1036,6 +1193,8 @@ void run_thread_for_a_while ( /*OUT*/HWord* two_words, + ) + ); + ++ VG_(print_guest_state)((void *)&tst->arch.vex); ++ + vg_assert(VG_(in_generated_code) == True); + VG_(in_generated_code) = False; + +@@ -1821,6 +1980,9 @@ void VG_(nuke_all_threads_except) ( ThreadId me, VgSchedReturnCode src ) + #elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) + # define VG_CLREQ_ARGS guest_r12 + # define VG_CLREQ_RET guest_r11 ++#elif defined(VGA_sw64) ++# define VG_CLREQ_ARGS guest_r5 ++# define VG_CLREQ_RET guest_r4 + #else + # error Unknown arch + #endif +diff --git a/coregrind/m_sigframe/sigframe-sw64-linux.c b/coregrind/m_sigframe/sigframe-sw64-linux.c +new file mode 100644 +index 000000000..ced89fd2d +--- /dev/null ++++ b/coregrind/m_sigframe/sigframe-sw64-linux.c +@@ -0,0 +1,224 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- Create/destroy signal delivery frames. ---*/ ++/*--- sigframe-sw64-linux.c ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#if defined(VGP_sw64_linux) ++ ++#include "pub_core_basics.h" ++#include "pub_core_vki.h" ++#include "pub_core_threadstate.h" ++#include "pub_core_aspacemgr.h" ++#include "pub_core_libcbase.h" ++#include "pub_core_libcassert.h" ++#include "pub_core_libcprint.h" ++#include "pub_core_machine.h" ++#include "pub_core_options.h" ++#include "pub_core_sigframe.h" ++#include "pub_core_signals.h" ++#include "pub_core_tooliface.h" ++#include "pub_core_trampoline.h" ++#include "priv_sigframe.h" ++ ++struct vg_sig_private { ++ UInt magicPI; ++ UInt sigNo_private; ++ VexGuestSW64State vex; ++ VexGuestSW64State vex_shadow1; ++ VexGuestSW64State vex_shadow2; ++}; ++ ++struct rt_sigframe { ++ struct vki_siginfo info; ++ struct vki_ucontext uc; ++ struct vg_sig_private vp; ++}; ++ ++/* EXPORTED */ ++void VG_(sigframe_create) ( ThreadId tid, ++ Bool on_altstack, ++ Addr sp_top_of_frame, ++ const vki_siginfo_t *siginfo, ++ const struct vki_ucontext *siguc, ++ void *handler, ++ UInt flags, ++ const vki_sigset_t *mask, ++ void *restorer ) ++{ ++ ThreadState *tst = VG_(get_ThreadState)(tid); ++ Addr sp = sp_top_of_frame; ++ Int sigNo = siginfo->si_signo; ++ UInt size = sizeof(struct rt_sigframe); ++ struct rt_sigframe *frame; ++ ++ sp -= size; ++ sp = VG_ROUNDDN(sp, 16); ++ ++ if (! ML_(sf_maybe_extend_stack)(tst, sp, size, flags)) ++ return; // Give up. No idea if this is correct ++ ++ frame = (struct rt_sigframe *)sp; ++ ++ /* save some valgrind private data */ ++ struct vg_sig_private *priv = &frame->vp; ++ priv->magicPI = 0x31415927; ++ priv->sigNo_private = siginfo->si_signo; ++ priv->vex = tst->arch.vex; ++ priv->vex_shadow1 = tst->arch.vex_shadow1; ++ priv->vex_shadow2 = tst->arch.vex_shadow2; ++ ++ /* prepard for siginfo */ ++ struct vki_siginfo *info = &frame->info; ++ VG_TRACK( pre_mem_write, Vg_CoreSignal, tst->tid, "signal handler siginfo", ++ (Addr)info, sizeof(frame->info)); ++ VG_(memcpy)(info, siginfo, sizeof(vki_siginfo_t)); ++ if (sigNo == VKI_SIGILL && siginfo->si_code > 0) { ++ frame->info._sifields._sigfault._addr ++ = (Addr*)(tst)->arch.vex.guest_PC; ++ } ++ VG_TRACK( post_mem_write, Vg_CoreSignal, tst->tid, ++ (Addr)info, sizeof(frame->info)); ++ ++ /* prepare for ucontext ++ ref: linux-4.19.y-sw/arch/sw_64/kernel/signal.c */ ++ struct vki_ucontext *uc = &frame->uc; ++ struct vki_sigcontext *sc = &uc->uc_mcontext; ++ VG_TRACK( pre_mem_write, Vg_CoreSignal, tst->tid, "signal handler frame", ++ (Addr)uc, sizeof(frame->uc)); ++ VG_(memset)(uc, 0, sizeof(*uc)); ++ uc->uc_flags = 0; ++ uc->uc_link = 0; ++ uc->uc_old_sigmask = mask->sig[0]; ++ uc->uc_sigmask = *mask; ++ uc->uc_stack = tst->altstack; ++ sc->sc_onstack = 0; ++ sc->sc_mask = mask->sig[0]; ++ sc->sc_pc = tst->arch.vex.guest_PC; ++ sc->sc_ps = 8; ++# define TO_CTX(reg) sc->sc_regs[reg] = tst->arch.vex.guest_r##reg ++ TO_CTX(0); TO_CTX(1); TO_CTX(2); TO_CTX(3); ++ TO_CTX(4); TO_CTX(5); TO_CTX(6); TO_CTX(7); ++ TO_CTX(8); TO_CTX(9); TO_CTX(10); TO_CTX(11); ++ TO_CTX(12); TO_CTX(13); TO_CTX(14); TO_CTX(15); ++ TO_CTX(16); TO_CTX(17); TO_CTX(18); TO_CTX(19); ++ TO_CTX(20); TO_CTX(21); TO_CTX(22); TO_CTX(23); ++ TO_CTX(24); TO_CTX(25); TO_CTX(26); TO_CTX(27); ++ TO_CTX(28); TO_CTX(29); TO_CTX(30); ++# undef TO_CTX ++ VG_TRACK( post_mem_write, Vg_CoreSignal, tst->tid, ++ (Addr)uc, sizeof(frame->uc)); ++ ++ /* "Return" to the handler */ ++ if (flags & VKI_SA_RESTORER) ++ tst->arch.vex.guest_r26 = (Addr)restorer; ++ else ++ tst->arch.vex.guest_r26 = (Addr)&VG_(sw64_linux_SUBST_FOR_rt_sigreturn); ++ tst->arch.vex.guest_r27 = (Addr)handler; ++ tst->arch.vex.guest_PC = (Addr)handler; ++ tst->arch.vex.guest_r16 = (Addr)sigNo; ++ if (flags & VKI_SA_SIGINFO) { ++ tst->arch.vex.guest_r17 = (Addr)&frame->info; ++ tst->arch.vex.guest_r18 = (Addr)&frame->uc; ++ } else { ++ tst->arch.vex.guest_r17 = 0; ++ tst->arch.vex.guest_r18 = (Addr)&frame->uc.uc_mcontext; ++ } ++ ++ VG_(set_SP)(tid, sp); ++ VG_TRACK( post_reg_write, Vg_CoreSignal, tid, VG_O_STACK_PTR, ++ sizeof(Addr)); ++} ++ ++ ++/*------------------------------------------------------------*/ ++/*--- Destroying signal frames ---*/ ++/*------------------------------------------------------------*/ ++ ++/* EXPORTED */ ++void VG_(sigframe_destroy)( ThreadId tid, Bool isRT ) ++{ ++ vg_assert(VG_(is_valid_tid)(tid)); ++ ++ Bool has_siginfo = isRT; ++ ThreadState* tst = VG_(get_ThreadState)(tid); ++ Addr sp = tst->arch.vex.guest_r16; ++ struct rt_sigframe* frame = (struct rt_sigframe *)sp; ++ struct vg_sig_private* priv = &frame->vp; ++ vg_assert(priv->magicPI == 0x31415927); ++ ++ tst->sig_mask = frame->uc.uc_sigmask; ++ tst->tmp_sig_mask = tst->sig_mask; ++ ++ Int sigNo = priv->sigNo_private; ++ UInt frame_size = sizeof(*frame); ++ ++ /* Restore the entire machine state from our private copy. This ++ isn't really right, but we'll now move on to pick up at least ++ some changes that the signal handler may have made to the ++ sigcontext. */ ++ tst->arch.vex = priv->vex; ++ tst->arch.vex_shadow1 = priv->vex_shadow1; ++ tst->arch.vex_shadow2 = priv->vex_shadow2; ++ ++ if (has_siginfo) { ++ /* Pick up at least some state changes from the ucontext, just ++ in case the handler changed it. The shadow values will be ++ wrong, but hey. This restores the integer registers, the ++ program counter and stack pointer. FP/Vector regs, and any ++ condition code, FP status/control bits, etc, are not ++ restored. */ ++ struct vki_sigcontext *sc =&frame->uc.uc_mcontext; ++# define FROM_CTX(reg) tst->arch.vex.guest_r##reg = sc->sc_regs[reg] ++ FROM_CTX(0); FROM_CTX(1); FROM_CTX(2); FROM_CTX(3); ++ FROM_CTX(4); FROM_CTX(5); FROM_CTX(6); FROM_CTX(7); ++ FROM_CTX(8); FROM_CTX(9); FROM_CTX(10); FROM_CTX(11); ++ FROM_CTX(12); FROM_CTX(13); FROM_CTX(14); FROM_CTX(15); ++ FROM_CTX(16); FROM_CTX(17); FROM_CTX(18); FROM_CTX(19); ++ FROM_CTX(20); FROM_CTX(21); FROM_CTX(22); FROM_CTX(23); ++ FROM_CTX(24); FROM_CTX(25); FROM_CTX(26); FROM_CTX(27); ++ FROM_CTX(28); FROM_CTX(29); FROM_CTX(30); ++# undef FROM_CTX ++ tst->arch.vex.guest_PC = sc->sc_pc; ++ } ++ ++ VG_TRACK( die_mem_stack_signal, sp - VG_STACK_REDZONE_SZB, ++ frame_size + VG_STACK_REDZONE_SZB ); ++ ++ if (VG_(clo_trace_signals)) ++ VG_(message)(Vg_DebugMsg, ++ "vg_pop_signal_frame (thread %u): " ++ "isRT=%d valid magic; PC=%#llx\n", ++ tid, has_siginfo, tst->arch.vex.guest_PC); ++ ++ /* tell the tools */ ++ VG_TRACK( post_deliver_signal, tid, sigNo ); ++} ++ ++#endif /* defined(VGP_sw64_linux) */ ++ ++/*--------------------------------------------------------------------*/ ++/*--- end sigframe-sw64-linux.c ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_signals.c b/coregrind/m_signals.c +index b3c94fcc9..9bf9cd816 100644 +--- a/coregrind/m_signals.c ++++ b/coregrind/m_signals.c +@@ -628,6 +628,25 @@ VgHashTable *ht_sigchld_ignore = NULL; + (srP)->misc.MIPS32.r28 = (uc)->uc_mcontext.sc_regs[28]; \ + } + ++#elif defined(VGP_sw64_linux) ++# define VG_UCONTEXT_INSTR_PTR(uc) (((uc)->uc_mcontext.sc_pc)) ++# define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.sc_regs[30]) ++# define VG_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.sc_regs[15]) ++# define VG_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.sc_regs[0]) ++# define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ ++ /* Convert the value in uc_mcontext.rax into a SysRes. */ \ ++ VG_(mk_SysRes_sw64_linux)((uc)->uc_mcontext.sc_regs[0], \ ++ (uc)->uc_mcontext.sc_regs[19], \ ++ (uc)->uc_mcontext.sc_regs[20]) ++ ++# define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ ++ { (srP)->r_pc = (uc)->uc_mcontext.sc_pc; \ ++ (srP)->r_sp = (uc)->uc_mcontext.sc_regs[30]; \ ++ (srP)->misc.SW64.r15 = (uc)->uc_mcontext.sc_regs[15]; \ ++ (srP)->misc.SW64.r26 = (uc)->uc_mcontext.sc_regs[26]; \ ++ (srP)->misc.SW64.r29 = (uc)->uc_mcontext.sc_regs[29]; \ ++ } ++ + #elif defined(VGP_x86_solaris) + # define VG_UCONTEXT_INSTR_PTR(uc) ((Addr)(uc)->uc_mcontext.gregs[VKI_EIP]) + # define VG_UCONTEXT_STACK_PTR(uc) ((Addr)(uc)->uc_mcontext.gregs[VKI_UESP]) +@@ -1052,6 +1071,14 @@ extern void my_sigreturn(void); + " li $t4, " #name "\n" \ + " syscall[32]\n" \ + ".previous\n" ++#elif defined(VGP_sw64_linux) ++/* Not used on sw64_linux */ ++# define _MY_SIGRETURN(name) \ ++ ".text\n" \ ++ "my_sigreturn:\n" \ ++ " ldi $0, " #name "\n" \ ++ " sys_call 0x83\n" \ ++ ".previous\n" + #elif defined(VGP_x86_solaris) || defined(VGP_amd64_solaris) + /* Not used on Solaris. */ + # define _MY_SIGRETURN(name) \ +@@ -1111,7 +1138,8 @@ static void handle_SCSS_change ( Bool force_update ) + ksa.sa_flags = skss.skss_per_sig[sig].skss_flags; + # if !defined(VGP_ppc32_linux) && \ + !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \ +- !defined(VGP_mips32_linux) && !defined(VGO_solaris) && !defined(VGO_freebsd) ++ !defined(VGP_mips32_linux) && !defined(VGO_solaris) && \ ++ !defined(VGO_freebsd) && !defined(VGP_sw64_linux) + ksa.sa_restorer = my_sigreturn; + # endif + /* Re above ifdef (also the assertion below), PaulM says: +@@ -1159,7 +1187,7 @@ static void handle_SCSS_change ( Bool force_update ) + !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \ + !defined(VGP_mips32_linux) && !defined(VGP_mips64_linux) && \ + !defined(VGP_nanomips_linux) && !defined(VGO_solaris) && \ +- !defined(VGO_freebsd) ++ !defined(VGO_freebsd) && !defined(VGP_sw64_linux) + vg_assert(ksa_old.sa_restorer == my_sigreturn); + # endif + VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGKILL ); +@@ -2296,8 +2324,9 @@ void VG_(synth_sigtrap)(ThreadId tid) + // Synthesise a SIGFPE. + void VG_(synth_sigfpe)(ThreadId tid, UInt code) + { +-// Only tested on mips32, mips64, s390x and nanomips. +-#if !defined(VGA_mips32) && !defined(VGA_mips64) && !defined(VGA_s390x) && !defined(VGA_nanomips) ++// Only tested on mips32, mips64, s390x, nanomips and sw64. ++#if !defined(VGA_mips32) && !defined(VGA_mips64) && !defined(VGA_s390x) && \ ++ !defined(VGA_nanomips) && !defined(VGA_sw64) + vg_assert(0); + #else + vki_siginfo_t info; +diff --git a/coregrind/m_stacktrace.c b/coregrind/m_stacktrace.c +index 308bebdd8..e7ca90850 100644 +--- a/coregrind/m_stacktrace.c ++++ b/coregrind/m_stacktrace.c +@@ -1502,6 +1502,102 @@ UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, + + #endif + ++/* ------------------------ sw64 ------------------------- */ ++#if defined(VGP_sw64_linux) ++UInt VG_(get_StackTrace_wrk) ( ThreadId tid_if_known, ++ /*OUT*/Addr* ips, UInt max_n_ips, ++ /*OUT*/Addr* sps, /*OUT*/Addr* fps, ++ const UnwindStartRegs* startRegs, ++ Addr fp_max_orig ) ++{ ++ Bool debug = False; ++ Int i; ++ Addr fp_max; ++ UInt n_found = 0; ++ const Int cmrf = VG_(clo_merge_recursive_frames); ++ ++ vg_assert(sizeof(Addr) == sizeof(UWord)); ++ vg_assert(sizeof(Addr) == sizeof(void*)); ++ ++ D3UnwindRegs uregs; ++ uregs.pc = startRegs->r_pc; ++ uregs.sp = startRegs->r_sp; ++ uregs.fp = startRegs->misc.SW64.r15; ++ uregs.ra = startRegs->misc.SW64.r26; ++ Addr fp_min = uregs.sp - VG_STACK_REDZONE_SZB; ++ ++ /* Snaffle IPs from the client's stack into ips[0 .. max_n_ips-1], ++ stopping when the trail goes cold, which we guess to be ++ when FP is not a reasonable stack location. */ ++ ++ fp_max = VG_PGROUNDUP(fp_max_orig); ++ if (fp_max >= sizeof(Addr)) ++ fp_max -= sizeof(Addr); ++ ++ if (debug) ++ VG_(printf)("max_n_ips=%u fp_min=0x%lx fp_max_orig=0x%lx, " ++ "fp_max=0x%lx pc=0x%lx sp=0x%lx fp=0x%lx\n", ++ max_n_ips, fp_min, fp_max_orig, fp_max, ++ uregs.pc, uregs.sp, uregs.fp); ++ ++ if (sps) sps[0] = uregs.sp; ++ if (fps) fps[0] = uregs.fp; ++ ips[0] = uregs.pc; ++ i = 1; ++ ++ /* Loop unwinding the stack. */ ++ while (True) { ++ if (debug) { ++ VG_(printf)("i: %d, pc: 0x%lx, sp: 0x%lx, ra: 0x%lx\n", ++ i, uregs.pc, uregs.sp, uregs.ra); ++ } ++ if (i >= max_n_ips) ++ break; ++ ++ D3UnwindRegs uregs_copy = uregs; ++ if (VG_(use_CF_info)( &uregs, fp_min, fp_max )) { ++ if (debug) ++ VG_(printf)("USING CFI: pc: 0x%lx, sp: 0x%lx, ra: 0x%lx\n", ++ uregs.pc, uregs.sp, uregs.ra); ++ if (0 != uregs.pc && 1 != uregs.pc) { ++ if (sps) sps[i] = uregs.sp; ++ if (fps) fps[i] = uregs.fp; ++ ips[i++] = uregs.pc - 4; ++ uregs.pc = uregs.pc - 4; ++ RECURSIVE_MERGE(cmrf,ips,i); ++ continue; ++ } else ++ uregs = uregs_copy; ++ } ++ ++ /* cfi missing, but we are in first frame, the return address should be ++ saved in RA register */ ++ if (i == 1) { ++ if (sps) { ++ sps[i] = sps[0]; ++ uregs.sp = sps[0]; ++ } ++ if (fps) { ++ fps[i] = fps[0]; ++ uregs.fp = fps[0]; ++ } ++ if (0 == uregs.ra || 1 == uregs.ra) break; ++ uregs.pc = uregs.ra; ++ ips[i++] = uregs.ra; ++ RECURSIVE_MERGE(cmrf,ips,i); ++ continue; ++ } ++ ++ /* No luck. We have to give up. */ ++ break; ++ } ++ ++ n_found = i; ++ return n_found; ++} ++ ++#endif ++ + /*------------------------------------------------------------*/ + /*--- ---*/ + /*--- END platform-dependent unwinder worker functions ---*/ +diff --git a/coregrind/m_swdiv.S b/coregrind/m_swdiv.S +new file mode 100644 +index 000000000..f9d5451b8 +--- /dev/null ++++ b/coregrind/m_swdiv.S +@@ -0,0 +1,724 @@ ++/*--------------------------------------------------------------------*/ ++/*--- sw div and rem stuff. m_swdiv.S ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2000-2017 Julian Seward ++ jseward@acm.org ++ Copyright (C) 2006-2017 OpenWorks LLP ++ info@open-works.co.uk ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "pub_core_basics_asm.h" ++ ++/* ---------------- remlu divlu for sw64 ---------------- */ ++/* sw64 defined these operation in glibc: ++ reml, remlu, remw, remwu ++ divl, divlu, divw, divwu ++ we need to define these operation by self */ ++ ++#if defined(VGP_sw64_linux) ++ ++.set noat ++.globl __reml ++__reml: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,reml_14 ++ fstd $f1,8($sp) ++ fstd $f3,48($sp) ++ fstd $f4,56($sp) ++ fstd $f5,64($sp) ++ rfpcr $f3 ++ ifmovd $r24,$f0 ++ ifmovd $r25,$f1 ++ fcvtld $f0,$f4 ++ fcvtld $f1,$f5 ++ fdivd $f4,$f5,$f0 ++ sll $r24,0xb,$r28 ++ fldd $f1,8($sp) ++ sra $r28,0xb,$r28 ++ cmpeq $r24,$r28,$r28 ++ beq $r28,reml_1 ++ fcvtdl_z $f0,$f4 ++ wfpcr $f3 ++ fimovd $f4,$r28 ++ mull $r28,$r25,$r28 ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ subl $r24,$r28,$r27 ++ ret $r31, ($r23), 0x1 ++ reml_1: ++ stl $r1,32($sp) ++ stl $r2,40($sp) ++ stl $r3,16($sp) ++ stl $r6,24($sp) ++ or $r24,$r25,$r28 ++ blt $r28,reml_12 ++ reml_2: ++ fcvtdl_z $f0,$f4 ++ fimovd $f4,$r1 ++ reml_3: ++ fldd $f0,0($sp) ++ stl $r4,0($sp) ++ mull $r1,$r25,$r4 ++ stl $r5,8($sp) ++ wfpcr $f3 ++ subl $r4,$r24,$r27 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r27,reml_8 ++ reml_4: ++ subl $r24,$r4,$r27 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r27,reml_10 ++ reml_5: ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ ldl $r3,16($sp) ++ bne $r6,reml_13 ++ reml_6: ++ ldl $r4,0($sp) ++ ldl $r5,8($sp) ++ ldl $r6,24($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ reml_7: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ reml_8: ++ cmpult $r2,$r27,$r28 ++ bne $r28,reml_7 ++ subl $r1,$r3,$r1 ++ subl $r4,$r2,$r4 ++ br reml_4 ++ reml_9: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ reml_10: ++ cmpult $r2,$r27,$r28 ++ bne $r28,reml_9 ++ reml_11: ++ addl $r1,$r3,$r4 ++ srl $r3,0x1,$r3 ++ cmpule $r2,$r27,$r28 ++ subl $r27,$r2,$r5 ++ selne $r28,$r4,$r1,$r1 ++ selne $r28,$r5,$r27,$r27 ++ srl $r2,0x1,$r2 ++ bne $r3,reml_11 ++ br reml_5 ++ reml_12: ++ xor $r24,$r25,$r2 ++ cmplt $r24,0,$r6 ++ negl $r24,$r1 ++ selne $r6,$r1,$r24,$r24 ++ cmplt $r25,0,$r28 ++ negl $r25,$r1 ++ s4addl $r28,$r6,$r6 ++ selne $r28,$r1,$r25,$r25 ++ bge $r2,reml_2 ++ fcvtdl_z $f0,$f4 ++ fimovd $f4,$r1 ++ negl $r1,$r1 ++ br reml_3 ++ reml_13: ++ and $r6,0x4,$r28 ++ negl $r25,$r5 ++ selne $r28,$r5,$r25,$r25 ++ negl $r24,$r5 ++ sellbs $r6,$r5,$r24,$r24 ++ negl $r27,$r5 ++ sellbs $r6,$r5,$r27,$r27 ++ br reml_6 ++ reml_14: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __remw ++__remw: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,remw_1 ++ fstd $f1,8($sp) ++ fstd $f2,16($sp) ++ fstd $f3,40($sp) ++ fstd $f4,48($sp) ++ rfpcr $f2 ++ addw $r31,$r24,$r27 ++ addw $r31,$r25,$r28 ++ ifmovd $r27,$f0 ++ ifmovd $r28,$f1 ++ fcvtld $f0,$f3 ++ fcvtld $f1,$f4 ++ fdivd $f3,$f4,$f0 ++ fcvtdl_z $f0,$f3 ++ wfpcr $f2 ++ fimovd $f3,$r27 ++ fldd $f0,0($sp) ++ mulw $r27,$r25,$r27 ++ fldd $f1,8($sp) ++ fldd $f2,16($sp) ++ fldd $f3,40($sp) ++ fldd $f4,48($sp) ++ ldi $sp,96($sp) ++ subw $r24,$r27,$r27 ++ ret $r31, ($r23), 0x1 ++ remw_1: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __remwu ++__remwu: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,remwu_1 ++ fstd $f1,8($sp) ++ fstd $f2,16($sp) ++ fstd $f3,40($sp) ++ fstd $f4,48($sp) ++ rfpcr $f2 ++ zapnot $r24,0xf,$r27 ++ zapnot $r25,0xf,$r28 ++ ifmovd $r27,$f0 ++ ifmovd $r28,$f1 ++ fcvtld $f0,$f3 ++ fcvtld $f1,$f4 ++ fdivd $f3,$f4,$f0 ++ fcvtdl_z $f0,$f3 ++ wfpcr $f2 ++ fimovd $f3,$r27 ++ fldd $f0,0($sp) ++ mulw $r27,$r25,$r27 ++ fldd $f1,8($sp) ++ fldd $f2,16($sp) ++ fldd $f3,40($sp) ++ fldd $f4,48($sp) ++ ldi $sp,96($sp) ++ subw $r24,$r27,$r27 ++ ret $r31, ($r23), 0x1 ++ remwu_1: ++ mov $r16,$r27 ++ ldih $r31,0($sp) ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __remlu ++__remlu: ++ ldi $sp,-96($sp) ++ subl $r25,0x1,$r28 ++ fstd $f0,0($sp) ++ and $r25,$r28,$r28 ++ fstd $f1,8($sp) ++ fstd $f3,48($sp) ++ fstd $f4,56($sp) ++ fstd $f5,64($sp) ++ beq $r28,remlu_11 ++ rfpcr $f3 ++ ifmovd $r24,$f0 ++ ifmovd $r25,$f1 ++ fcvtld $f0,$f4 ++ fcvtld $f1,$f5 ++ blt $r24,remlu_1 ++ fdivd $f4,$f5,$f0 ++ fldd $f1,8($sp) ++ blt $r25,remlu_10 ++ srl $r24,0x35,$r28 ++ bne $r28,remul_2 ++ fcvtdl_z $f0,$f4 ++ wfpcr $f3 ++ fimovd $f4,$r28 ++ mull $r28,$r25,$r28 ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ subl $r24,$r28,$r27 ++ ret $r31, ($r23), 0x1 ++ remlu_1: ++ ldih $r28,24448 ++ fstd $f2,24($sp) ++ fstd $f6,72($sp) ++ ifmovs $r28,$f2 ++ faddd $f4,$f2,$f6 ++ fdivd $f6,$f5,$f0 ++ fldd $f1,8($sp) ++ fldd $f2,24($sp) ++ fldd $f6,72($sp) ++ blt $r25,remlu_10 ++ remul_2: ++ stl $r1,32($sp) ++ stl $r2,40($sp) ++ stl $r3,16($sp) ++ stl $r4,24($sp) ++ fcvtdl_z $f0,$f4 ++ fimovd $f4,$r1 ++ mull $r1,$r25,$r4 ++ stl $r5,8($sp) ++ nop ++ fldd $f0,0($sp) ++ wfpcr $f3 ++ subl $r4,$r24,$r27 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r27,remlu_6 ++ remlu_3: ++ subl $r24,$r4,$r27 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r27,remlu_8 ++ remlu_4: ++ ldl $r5,8($sp) ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ ldl $r3,16($sp) ++ ldl $r4,24($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ remlu_5: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ remlu_6: ++ cmpult $r2,$r27,$r28 ++ bne $r28,remlu_5 ++ subl $r1,$r3,$r1 ++ subl $r4,$r2,$r4 ++ br remlu_3 ++ remlu_7: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ remlu_8: ++ cmpult $r2,$r27,$r28 ++ bne $r28,remlu_7 ++ remlu_9: ++ addl $r1,$r3,$r4 ++ srl $r3,0x1,$r3 ++ cmpule $r2,$r27,$r28 ++ subl $r27,$r2,$r5 ++ selne $r28,$r4,$r1,$r1 ++ selne $r28,$r5,$r27,$r27 ++ srl $r2,0x1,$r2 ++ bne $r3,remlu_9 ++ br remlu_4 ++ remlu_10: ++ cmpule $r25,$r24,$r28 ++ wfpcr $f3 ++ subl $r24,$r25,$r27 ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ seleq $r28,$r24,$r27,$r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ remlu_11: ++ subl $r25,0x1,$r28 ++ beq $r25,remlu_12 ++ and $r24,$r28,$r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ remlu_12: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __divl ++__divl: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,divl_14 ++ fstd $f1,8($sp) ++ fstd $f3,48($sp) ++ fstd $f4,56($sp) ++ fstd $f5,64($sp) ++ rfpcr $f3 ++ ifmovd $r24,$f0 ++ ifmovd $r25,$f1 ++ fcvtld $f0,$f4 ++ fcvtld $f1,$f5 ++ fdivd $f4,$f5,$f0 ++ sll $r24,0xb,$r28 ++ fldd $f1,8($sp) ++ sra $r28,0xb,$r28 ++ cmpeq $r24,$r28,$r28 ++ beq $r28,divl_1 ++ fcvtdl_z $f0,$f4 ++ wfpcr $f3 ++ fimovd $f4,$r27 ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ divl_1: ++ stl $r1,32($sp) ++ stl $r2,40($sp) ++ stl $r3,16($sp) ++ stl $r6,24($sp) ++ or $r24,$r25,$r28 ++ blt $r28,divl_12 ++ divl_2: ++ fcvtdl_z $f0,$f4 ++ fimovd $f4,$r27 ++ divl_3: ++ fldd $f0,0($sp) ++ stl $r4,0($sp) ++ mull $r27,$r25,$r4 ++ stl $r5,8($sp) ++ wfpcr $f3 ++ subl $r4,$r24,$r1 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r1,divl_8 ++ divl_4: ++ subl $r24,$r4,$r1 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r1,divl_10 ++ divl_5: ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ ldl $r3,16($sp) ++ bne $r6,divl_13 ++ divl_6: ++ ldl $r4,0($sp) ++ ldl $r5,8($sp) ++ ldl $r6,24($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ divl_7: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ divl_8: ++ cmpult $r2,$r1,$r28 ++ bne $r28,divl_7 ++ subl $r27,$r3,$r27 ++ subl $r4,$r2,$r4 ++ br divl_4 ++ divl_9: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ divl_10: ++ cmpult $r2,$r1,$r28 ++ bne $r28,divl_9 ++ divl_11: ++ addl $r27,$r3,$r4 ++ srl $r3,0x1,$r3 ++ cmpule $r2,$r1,$r28 ++ subl $r1,$r2,$r5 ++ selne $r28,$r4,$r27,$r27 ++ selne $r28,$r5,$r1,$r1 ++ srl $r2,0x1,$r2 ++ bne $r3,divl_11 ++ br divl_5 ++ divl_12: ++ xor $r24,$r25,$r28 ++ cmplt $r28,0,$r6 ++ cmplt $r24,0,$r28 ++ negl $r24,$r1 ++ s4addl $r28,$r6,$r6 ++ selne $r28,$r1,$r24,$r24 ++ cmplt $r25,0,$r28 ++ negl $r25,$r1 ++ s8addl $r28,$r6,$r6 ++ selne $r28,$r1,$r25,$r25 ++ blbc $r6,divl_2 ++ fcvtdl_z $f0,$f4 ++ fimovd $f4,$r27 ++ negl $r27,$r27 ++ br divl_3 ++ divl_13: ++ and $r6,0x8,$r28 ++ negl $r25,$r5 ++ selne $r28,$r5,$r25,$r25 ++ and $r6,0x4,$r28 ++ negl $r24,$r5 ++ selne $r28,$r5,$r24,$r24 ++ negl $r27,$r5 ++ sellbs $r6,$r5,$r27,$r27 ++ br divl_6 ++ divl_14: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __divw ++__divw: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,divw_1 ++ fstd $f1,8($sp) ++ fstd $f2,16($sp) ++ fstd $f3,40($sp) ++ fstd $f4,48($sp) ++ rfpcr $f2 ++ addw $r31,$r24,$r27 ++ addw $r31,$r25,$r28 ++ ifmovd $r27,$f0 ++ ifmovd $r28,$f1 ++ fcvtld $f0,$f3 ++ fcvtld $f1,$f4 ++ fdivd $f3,$f4,$f1 ++ fcvtdl_z $f1,$f0 ++ wfpcr $f2 ++ fimovd $f0,$r27 ++ fldd $f0,0($sp) ++ fldd $f1,8($sp) ++ fldd $f2,16($sp) ++ fldd $f3,40($sp) ++ fldd $f4,48($sp) ++ ldi $sp,96($sp) ++ addw $r27,0,$r27 ++ ret $r31, ($r23), 0x1 ++ ldih $r31,0($sp) ++ divw_1: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __divwu ++__divwu: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,divwu_1 ++ fstd $f1,8($sp) ++ fstd $f2,16($sp) ++ fstd $f3,40($sp) ++ fstd $f4,48($sp) ++ rfpcr $f2 ++ zapnot $r24,0xf,$r27 ++ zapnot $r25,0xf,$r28 ++ ifmovd $r27,$f0 ++ ifmovd $r28,$f1 ++ fcvtld $f0,$f3 ++ fcvtld $f1,$f4 ++ fdivd $f3,$f4,$f1 ++ fcvtdl_z $f1,$f0 ++ wfpcr $f2 ++ fimovd $f0,$r27 ++ fldd $f0,0($sp) ++ fldd $f1,8($sp) ++ fldd $f2,16($sp) ++ fldd $f3,40($sp) ++ fldd $f4,48($sp) ++ ldi $sp,96($sp) ++ addw $r27,0,$r27 ++ ret $r31, ($r23), 0x1 ++ divwu_1: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ ++.globl __divlu ++__divlu: ++ ldi $sp,-96($sp) ++ fstd $f0,0($sp) ++ beq $r25,divlu_11 ++ fstd $f1,8($sp) ++ fstd $f3,48($sp) ++ fstd $f4,56($sp) ++ fstd $f5,64($sp) ++ stl $r1,32($sp) ++ stl $r2,40($sp) ++ rfpcr $f3 ++ rfpcr $f1 ++ fimovd $f1,$r1 ++ ldi $r2,3 ++ sll $r2,0x3a,$r2 ++ bic $r1,$r2,$r1 ++ ifmovd $r1,$f1 ++ wfpcr $f1 ++ ifmovd $r24,$f0 ++ ifmovd $r25,$f1 ++ fcvtld $f0,$f4 ++ fcvtld $f1,$f5 ++ blt $r24,divlu_1 ++ fdivd $f4,$f5,$f0 ++ fldd $f1,8($sp) ++ blt $r25,divlu_10 ++ srl $r24,0x35,$r28 ++ bne $r28,divlu_2 ++ fcvtdl $f0,$f4 ++ wfpcr $f3 ++ fimovd $f4,$r27 ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ divlu_1: ++ ldih $r28,24448 ++ fstd $f2,24($sp) ++ fstd $f6,72($sp) ++ ifmovs $r28,$f2 ++ faddd $f4,$f2,$f6 ++ fdivd $f6,$f5,$f0 ++ fldd $f1,8($sp) ++ ldih $r31,0($sp) ++ fldd $f2,24($sp) ++ fldd $f6,72($sp) ++ blt $r25,divlu_10 ++ ++ divlu_2: ++ stl $r3,16($sp) ++ stl $r4,24($sp) ++ fcvtdl $f0,$f4 ++ fimovd $f4,$r27 ++ mull $r27,$r25,$r4 ++ stl $r5,8($sp) ++ fldd $f0,0($sp) ++ wfpcr $f3 ++ subl $r4,$r24,$r1 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r1,divlu_6 ++ ++ divlu_3: ++ subl $r24,$r4,$r1 ++ mov $r25,$r2 ++ mov 0x1,$r3 ++ bgt $r1,divlu_8 ++ ++ divlu_4: ++ ldl $r5,8($sp) ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ ldl $r3,16($sp) ++ ldl $r4,24($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ divlu_5: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ ++ divlu_6: ++ cmpult $r2,$r1,$r28 ++ bne $r28,divlu_5 ++ subl $r27,$r3,$r27 ++ subl $r4,$r2,$r4 ++ br divlu_3 ++ ++ divlu_7: ++ addl $r2,$r2,$r2 ++ addl $r3,$r3,$r3 ++ ++ divlu_8: ++ cmpult $r2,$r1,$r28 ++ bne $r28,divlu_7 ++ ++ divlu_9: ++ addl $r27,$r3,$r4 ++ srl $r3,0x1,$r3 ++ cmpule $r2,$r1,$r28 ++ subl $r1,$r2,$r5 ++ selne $r28,$r4,$r27,$r27 ++ selne $r28,$r5,$r1,$r1 ++ srl $r2,0x1,$r2 ++ bne $r3,divlu_9 ++ br divlu_4 ++ ++ divlu_10: ++ cmpule $r25,$r24,$r27 ++ wfpcr $f3 ++ fldd $f0,0($sp) ++ fldd $f3,48($sp) ++ fldd $f4,56($sp) ++ fldd $f5,64($sp) ++ ldl $r1,32($sp) ++ ldl $r2,40($sp) ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++ divlu_11: ++ mov $r16,$r27 ++ ldi $r16,-2 ++ sys_call 0xaa ++ mov $r27,$r16 ++ clr $r27 ++ ldi $sp,96($sp) ++ ret $r31, ($r23), 0x1 ++ ++#endif ++ ++/* Let the linker know we don't need an executable stack */ ++MARK_STACK_NO_EXEC ++/*--------------------------------------------------------------------*/ ++/*--- end ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_syscall.c b/coregrind/m_syscall.c +index 1e49ed412..526dce922 100644 +--- a/coregrind/m_syscall.c ++++ b/coregrind/m_syscall.c +@@ -204,6 +204,15 @@ SysRes VG_(mk_SysRes_arm64_linux) ( Long val ) { + return res; + } + ++SysRes VG_(mk_SysRes_sw64_linux) ( ULong v0, ULong r19, ULong r20 ) { ++ SysRes res; ++ //sw use r19 indicats failure ++ res._isError = (r19==1); ++ res._val = v0; ++ res._valEx = r20; ++ return res; ++} ++ + /* Generic constructors. */ + SysRes VG_(mk_SysRes_Success) ( UWord res ) { + SysRes r; +@@ -1034,6 +1043,25 @@ asm ( + ".previous \n\t" + ); + ++#elif defined(VGP_sw64_linux) ++extern RegWord do_syscall_WRK ( RegWord a1, RegWord a2, RegWord a3, ++ RegWord a4, RegWord a5, RegWord a6, ++ RegWord syscall_no, RegWord* r19, RegWord* r20); ++asm ( ++ ".text \n\t" ++ ".globl do_syscall_WRK \n\t" ++ ".type do_syscall_WRK, @function \n\t" ++ "do_syscall_WRK: \n\t" ++ " ldl $0, 0($30) \n\t" ++ " sys_call 0x83 \n\t" ++ " ldl $5, 8($30) \n\t" ++ " stl $19, 0($5) \n\t" /* store r19 */ ++ " ldl $5, 16($30) \n\t" ++ " stl $20, 0($5) \n\t" /* store r20 */ ++ " ret \n\t" ++ ".previous \n\t" ++); ++ + #elif defined(VGP_x86_solaris) + + extern ULong +@@ -1274,6 +1302,12 @@ SysRes VG_(do_syscall) ( UWord sysno, RegWord a1, RegWord a2, RegWord a3, + do_syscall_WRK(a1, a2, a3, a4, a5, a6, sysno, ®_a0); + return VG_(mk_SysRes_nanomips_linux)(reg_a0); + ++#elif defined(VGP_sw64_linux) ++ RegWord r19 = 0; ++ RegWord r20 = 0; ++ RegWord v0 = do_syscall_WRK(a1, a2, a3, a4, a5, a6, sysno, &r19, &r20); ++ return VG_(mk_SysRes_sw64_linux)( v0, r19, r20 ); ++ + # elif defined(VGP_x86_solaris) + UInt val, val2, err = False; + Bool restart; +diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h +index a73b6247e..148269e49 100644 +--- a/coregrind/m_syswrap/priv_syswrap-linux.h ++++ b/coregrind/m_syswrap/priv_syswrap-linux.h +@@ -508,6 +508,14 @@ extern UInt do_syscall_clone_nanomips_linux ( Word (*fn) (void *), /* a0 - 4 */ + Int* child_tid, /* a4 - 8 */ + Int* parent_tid, /* a5 - 9 */ + void* tls_ptr); /* a6 - 10 */ ++extern ULong do_syscall_clone_sw64_linux( Word(*fn)(void*), /*%1*/ ++ void* stack, /*%2*/ ++ Int flags, /*%3*/ ++ void* arg, /*%4*/ ++ Int* parent_tid, /*%5*/ ++ void* tls, /*%6*/ ++ Int* child_tid); /*%7*/ ++ + #endif // __PRIV_SYSWRAP_LINUX_H + + /*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_syswrap/priv_types_n_macros.h b/coregrind/m_syswrap/priv_types_n_macros.h +index dd241839a..7b36af9d7 100644 +--- a/coregrind/m_syswrap/priv_types_n_macros.h ++++ b/coregrind/m_syswrap/priv_types_n_macros.h +@@ -94,7 +94,7 @@ typedef + || defined(VGP_ppc32_linux) \ + || defined(VGP_arm_linux) || defined(VGP_s390x_linux) \ + || defined(VGP_arm64_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + Int o_arg1; + Int o_arg2; + Int o_arg3; +diff --git a/coregrind/m_syswrap/syscall-sw64-linux.S b/coregrind/m_syswrap/syscall-sw64-linux.S +new file mode 100644 +index 000000000..c25062e4c +--- /dev/null ++++ b/coregrind/m_syswrap/syscall-sw64-linux.S +@@ -0,0 +1,158 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- Support for doing system calls. syscall-sw64-linux.S ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#include "pub_core_basics_asm.h" ++ ++#if defined(VGP_sw64_linux) ++ ++#include "pub_core_vkiscnums_asm.h" ++#include "libvex_guest_offsets.h" ++ ++/*----------------------------------------------------------------*/ ++/* ++ Perform a syscall for the client. This will run a syscall ++ with the client's specific per-thread signal mask. ++ ++ The structure of this function is such that, if the syscall is ++ interrupted by a signal, we can determine exactly what ++ execution state we were in with respect to the execution of ++ the syscall by examining the value of PC in the signal ++ handler. This means that we can always do the appropriate ++ thing to precisely emulate the kernel's signal/syscall ++ interactions. ++ ++ The syscall number is taken from the argument, even though it ++ should also be in regs->v0. The syscall result is written ++ back to regs->v0 on completion. ++ ++ VG_(fixup_guest_state_after_syscall_interrupted) does the ++ thread state fixup in the case where we were interrupted by a ++ signal. ++ ++ Prototype: ++ ++ UWord ML_(do_syscall_for_client_WRK)( ++ Int syscallno, // $16 - a0 ++ void* guest_state, // $17 - a1 ++ const vki_sigset_t *sysmask, // $18 - a2 ++ const vki_sigset_t *postmask, // $19 - a3 ++ Int nsigwords) // $20 - a4 ++*/ ++ ++/* from vki_arch.h */ ++#define VKI_SIG_SETMASK 3 ++ ++.globl ML_(do_syscall_for_client_WRK) ++ML_(do_syscall_for_client_WRK): ++ ++ /*save regs a0-a4 on stack*/ ++ subl $30, 48, $30 ++ stl $16, 0($30) //a0 ++ stl $17, 8($30) //a1 ++ stl $18, 16($30) //a2 ++ stl $19, 24($30) //a3 ++ stl $20, 32($30) //a4 ++ ++ /*do sigprocmask*/ ++1: ldi $0, __NR_rt_sigprocmask($31) ++ ldi $16, VKI_SIG_SETMASK ++ mov $18, $17 /*sysmask*/ ++ mov $19, $18 /*postmask*/ ++ mov $20, $19 /*nsigwords*/ ++ sys_call 0x83 ++ bne $19, 7f /*r19!=0 means syscall fail*/ ++ ++ /* Actually do the client syscall */ ++ ldl $17, 8($30) /* guest_state */ ++ ldl $16, OFFSET_sw64_r16($17) /* a0 */ ++ ++ ldl $18, OFFSET_sw64_r18($17) /* a2 */ ++ ldl $19, OFFSET_sw64_r19($17) /* a3 */ ++ ldl $20, OFFSET_sw64_r20($17) /* a4 */ ++ ldl $21, OFFSET_sw64_r21($17) /* a5 */ ++ ldl $22, OFFSET_sw64_r22($17) /* a6 */ ++ ldl $23, OFFSET_sw64_r23($17) /* a7 */ ++ ++ ldl $17, OFFSET_sw64_r17($17) /* a1 */ ++ ldl $0, 0($30) /* syscallno */ ++ ++2: sys_call 0x83 ++ ++ /* Saving return values into Guest state */ ++3: ldl $17, 8($30) /* guest_state */ ++ stl $0, OFFSET_sw64_r0($17) /* v0 */ ++ stl $19, OFFSET_sw64_r19($17) /* a3 */ ++ stl $20, OFFSET_sw64_r20($17) /* a4, some syscall e.g. pipe(2) ++ use this register as 2nd return value */ ++ ++4: ldi $0, __NR_rt_sigprocmask ++ ldi $16, VKI_SIG_SETMASK ++ ldl $17, 24($30) /* postmask */ ++ mov $31, $18 /* 0 (zero) */ ++ ldl $19, 32($30) /* nsigwords */ ++ sys_call 0x83 ++ ++ bne $19, 7f /*if fail, go to error*/ ++ nop ++ ++5: /* restore 30 and return */ ++ addl $30, 48, $30 ++ jmp $31, ($26) ++ nop ++ ++ ++7: /* error */ ++ addl $30, 48, $30 ++ ldi $0, 0x8000 ++ jmp $31, ($26) ++ nop ++ ++.section .rodata ++/* export the ranges so that ++ VG_(fixup_guest_state_after_syscall_interrupted) can do the ++ right thing */ ++ ++.globl ML_(blksys_setup) ++.globl ML_(blksys_restart) ++.globl ML_(blksys_complete) ++.globl ML_(blksys_committed) ++.globl ML_(blksys_finished) ++/* those numbers are reference tags, NOT number literal */ ++ML_(blksys_setup): .quad 1b ++ML_(blksys_restart): .quad 2b ++ML_(blksys_complete): .quad 3b ++ML_(blksys_committed): .quad 4b ++ML_(blksys_finished): .quad 5b ++ ++#endif // defined(VGP_sw64_linux) ++ ++/* Let the linker know we don't need an executable stack */ ++MARK_STACK_NO_EXEC ++ ++/*--------------------------------------------------------------------*/ ++/*--- end ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c +index 26f1fbee3..c4d6a086f 100644 +--- a/coregrind/m_syswrap/syswrap-linux.c ++++ b/coregrind/m_syswrap/syswrap-linux.c +@@ -310,6 +310,16 @@ static void run_a_thread_NORETURN ( Word tidW ) + : "r" (VgTs_Empty), "n" (__NR_exit), "m" (tst->os_state.exitcode) + : "memory" , "$t4", "$a0" + ); ++#elif defined(VGP_sw64_linux) ++ asm volatile ( ++ "stw %1, %0 \n\t" /* set tst->status = VgTs_Empty (32-bit store) */ ++ "ldi $0, %2 \n\t" /* set v0 = __NR_exit */ ++ "ldl $16,%3 \n\t" /* set r16 = tst->os_state.exitcode */ ++ "sys_call 0x83 \n\t" /* exit(tst->os_state.exitcode) */ ++ "nop" ++ : "=m" (tst->status) ++ : "r" (VgTs_Empty), "n" (__NR_exit), "m" (tst->os_state.exitcode) ++ ); + #else + # error Unknown platform + #endif +@@ -535,6 +545,14 @@ static SysRes clone_new_thread ( Word (*fn)(void *), + (ML_(start_thread_NORETURN), stack, flags, ctst, + child_tidptr, parent_tidptr, NULL); + res = VG_ (mk_SysRes_nanomips_linux) (ret); ++#elif defined(VGP_sw64_linux) ++ ULong v0 = 0; ++ ctst->arch.vex.guest_r0 = 0; ++ ctst->arch.vex.guest_r19 = 0; ++ v0 = do_syscall_clone_sw64_linux ++ (ML_(start_thread_NORETURN), stack, flags, ctst, ++ parent_tidptr, NULL, child_tidptr); ++ res = VG_(mk_SysRes_sw64_linux)(v0, 0, 0); + #else + # error Unknown platform + #endif +@@ -597,6 +615,8 @@ static SysRes setup_child_tls (ThreadId ctid, Addr tlsaddr) + #elif defined(VGP_mips32_linux) || defined(VGP_nanomips_linux) + ctst->arch.vex.guest_ULR = tlsaddr; + ctst->arch.vex.guest_r27 = tlsaddr; ++#elif defined(VGP_sw64_linux) ++ ctst->arch.vex.guest_TID = tlsaddr; + #else + # error Unknown platform + #endif +@@ -759,9 +779,10 @@ static SysRes ML_(do_fork_clone) ( ThreadId tid, UInt flags, + res = VG_(do_syscall5)( __NR_clone, flags, + (UWord)NULL, (UWord)parent_tidptr, + (UWord)NULL, (UWord)child_tidptr ); +-#elif defined(VGP_amd64_linux) ++#elif defined(VGP_amd64_linux) || defined(VGP_sw64_linux) + /* note that the last two arguments are the opposite way round to x86 and + ppc32 as the amd64 kernel expects the arguments in a different order */ ++ /* also sw_64 */ + res = VG_(do_syscall5)( __NR_clone, flags, + (UWord)NULL, (UWord)parent_tidptr, + (UWord)child_tidptr, (UWord)NULL ); +@@ -828,7 +849,7 @@ PRE(sys_clone) + #define PRA_CHILD_TIDPTR PRA5 + #define ARG_TLS ARG4 + #define PRA_TLS PRA4 +-#elif defined(VGP_amd64_linux) || defined(VGP_s390x_linux) ++#elif defined(VGP_amd64_linux) || defined(VGP_s390x_linux) || defined(VGP_sw64_linux) + #define ARG_CHILD_TIDPTR ARG4 + #define PRA_CHILD_TIDPTR PRA4 + #define ARG_TLS ARG5 +@@ -4248,7 +4269,7 @@ POST(sys_sigpending) + // conditional compilation like this?) + #if defined(VGP_x86_linux) || defined(VGP_ppc32_linux) \ + || defined(VGP_arm_linux) || defined(VGP_mips32_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + PRE(sys_sigprocmask) + { + vki_old_sigset_t* set; +@@ -4435,9 +4456,12 @@ PRE(sys_rt_sigaction) + PRE_MEM_READ( "rt_sigaction(act->sa_handler)", (Addr)&sa->ksa_handler, sizeof(sa->ksa_handler)); + PRE_MEM_READ( "rt_sigaction(act->sa_mask)", (Addr)&sa->sa_mask, sizeof(sa->sa_mask)); + PRE_MEM_READ( "rt_sigaction(act->sa_flags)", (Addr)&sa->sa_flags, sizeof(sa->sa_flags)); ++ #if !defined(VGP_sw64_linux) ++ // TODO(Shaohua): Read mem + if (ML_(safe_to_deref)(sa,sizeof(vki_sigaction_toK_t)) + && (sa->sa_flags & VKI_SA_RESTORER)) + PRE_MEM_READ( "rt_sigaction(act->sa_restorer)", (Addr)&sa->sa_restorer, sizeof(sa->sa_restorer)); ++ #endif + } + if (ARG3 != 0) + PRE_MEM_WRITE( "rt_sigaction(oldact)", ARG3, sizeof(vki_sigaction_fromK_t)); +@@ -6790,7 +6814,8 @@ POST(sys_lookup_dcookie) + #endif + + #if defined(VGP_amd64_linux) || defined(VGP_s390x_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + PRE(sys_lookup_dcookie) + { + *flags |= SfMayBlock; +@@ -7084,6 +7109,9 @@ PRE(sys_ioctl) + case VKI_FIOCLEX: + case VKI_FIONCLEX: + case VKI_TIOCNOTTY: ++#if defined(VGP_sw64_linux) ++ case VKI_TIOCGPTPEER: ++#endif + + /* linux perf_event ioctls */ + case VKI_PERF_EVENT_IOC_ENABLE: +@@ -10449,6 +10477,10 @@ POST(sys_ioctl) + break; + case VKI_TIOCNOTTY: + break; ++#if defined(VGP_sw64_linux) ++ case VKI_TIOCGPTPEER: ++ break; ++#endif + case VKI_FIOASYNC: + break; + case VKI_FIONREAD: /* identical to SIOCINQ */ +diff --git a/coregrind/m_syswrap/syswrap-main.c b/coregrind/m_syswrap/syswrap-main.c +index 4f8c0fe1c..514fa90b6 100644 +--- a/coregrind/m_syswrap/syswrap-main.c ++++ b/coregrind/m_syswrap/syswrap-main.c +@@ -70,6 +70,7 @@ + mips32 v0 a0 a1 a2 a3 stack stack n/a n/a v0 (== NUM) + mips64 v0 a0 a1 a2 a3 a4 a5 a6 a7 v0 (== NUM) + arm64 x8 x0 x1 x2 x3 x4 x5 n/a n/a x0 ?? (== ARG1??) ++ sw64 v0 a0 a1 a2 a3 a4 a5 n/a n/a v0 (== NUM) + + FreeBSD: + x86 eax +4 +8 +12 +16 +20 +24 +28 +32 edx:eax, eflags.c +@@ -703,6 +704,19 @@ void getSyscallArgsFromGuestState ( /*OUT*/SyscallArgs* canonical, + canonical->arg6 = gst->guest_r9; // a5 + canonical->arg7 = gst->guest_r10; // a6 + canonical->arg8 = gst->guest_r11; // a7 ++ ++#elif defined(VGP_sw64_linux) ++ VexGuestSW64State* gst = (VexGuestSW64State*)gst_vanilla; ++ canonical->sysno = gst->guest_r0; ++ canonical->arg1 = gst->guest_r16; ++ canonical->arg2 = gst->guest_r17; ++ canonical->arg3 = gst->guest_r18; ++ canonical->arg4 = gst->guest_r19; ++ canonical->arg5 = gst->guest_r20; ++ canonical->arg6 = gst->guest_r21; ++ canonical->arg7 = 0; ++ canonical->arg8 = 0; ++ + #elif defined(VGP_x86_darwin) + VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla; + UWord *stack = (UWord *)gst->guest_ESP; +@@ -1126,6 +1140,16 @@ void putSyscallArgsIntoGuestState ( /*IN*/ SyscallArgs* canonical, + gst->guest_r10 = canonical->arg7; + gst->guest_r11 = canonical->arg8; + ++#elif defined(VGP_sw64_linux) ++ VexGuestSW64State* gst = (VexGuestSW64State*)gst_vanilla; ++ gst->guest_r0 = canonical->sysno; ++ gst->guest_r16 = canonical->arg1; ++ gst->guest_r17 = canonical->arg2; ++ gst->guest_r18 = canonical->arg3; ++ gst->guest_r19 = canonical->arg4; ++ gst->guest_r20 = canonical->arg5; ++ gst->guest_r21 = canonical->arg6; ++ + #elif defined(VGP_x86_solaris) + VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla; + UWord *stack = (UWord *)gst->guest_ESP; +@@ -1240,6 +1264,15 @@ void getSyscallStatusFromGuestState ( /*OUT*/SyscallStatus* canonical, + RegWord a0 = gst->guest_r4; // a0 + canonical->sres = VG_(mk_SysRes_nanomips_linux)(a0); + canonical->what = SsComplete; ++ ++# elif defined(VGP_sw64_linux) ++ VexGuestSW64State* gst = (VexGuestSW64State*)gst_vanilla; ++ ULong v0 = gst->guest_r0; // v0 ++ ULong r19 = gst->guest_r19; // r19 ++ ULong r20 = gst->guest_r20; // r20 ++ canonical->sres = VG_(mk_SysRes_sw64_linux)(v0, r19, r20); ++ canonical->what = SsComplete; ++ + # elif defined(VGP_amd64_freebsd) + /* duplicates logic in m_signals.VG_UCONTEXT_SYSCALL_SYSRES */ + VexGuestAMD64State* gst = (VexGuestAMD64State*)gst_vanilla; +@@ -1606,6 +1639,23 @@ void putSyscallStatusIntoGuestState ( /*IN*/ ThreadId tid, + VG_TRACK( post_reg_write, Vg_CoreSysCall, tid, + OFFSET_mips32_r4, sizeof(UWord) ); + ++# elif defined(VGP_sw64_linux) ++ VexGuestSW64State* gst = (VexGuestSW64State*)gst_vanilla; ++ vg_assert(canonical->what == SsComplete); ++ if (sr_isError(canonical->sres)) { ++ gst->guest_r0 = (Long)sr_Err(canonical->sres); ++ gst->guest_r19 = (Long) 1; ++ } else { ++ gst->guest_r0 = sr_Res(canonical->sres); ++ gst->guest_r19 = 0; ++ } ++ VG_TRACK( post_reg_write, Vg_CoreSysCall, tid, ++ OFFSET_sw64_r0, sizeof(UWord) ); ++ VG_TRACK( post_reg_write, Vg_CoreSysCall, tid, ++ OFFSET_sw64_r19, sizeof(UWord) ); ++ /* sw64: Not all syscall will touch r20, keep r20 unchanged. ++ If a special syscall do that, write gst->guest_r20 in post handler */ ++ + # elif defined(VGP_x86_solaris) + VexGuestX86State* gst = (VexGuestX86State*)gst_vanilla; + SysRes sres = canonical->sres; +@@ -1798,6 +1848,17 @@ void getSyscallArgLayout ( /*OUT*/SyscallArgLayout* layout ) + layout->o_arg7 = OFFSET_mips64_r10; + layout->o_arg8 = OFFSET_mips64_r11; + ++#elif defined(VGP_sw64_linux) ++ layout->o_sysno = OFFSET_sw64_r0; ++ layout->o_arg1 = OFFSET_sw64_r16; ++ layout->o_arg2 = OFFSET_sw64_r17; ++ layout->o_arg3 = OFFSET_sw64_r18; ++ layout->o_arg4 = OFFSET_sw64_r19; ++ layout->o_arg5 = OFFSET_sw64_r20; ++ layout->o_arg6 = OFFSET_sw64_r21; ++ layout->uu_arg7 = -1; /* impossible value */ ++ layout->uu_arg8 = -1; /* impossible value */ ++ + #elif defined(VGP_x86_darwin) + layout->o_sysno = OFFSET_x86_EAX; + // syscall parameters are on stack in C convention +@@ -2899,6 +2960,26 @@ void ML_(fixup_guest_state_to_restart_syscall) ( ThreadArchState* arch ) + arch->vex.guest_PC -= 2; + } + } ++ ++#elif defined(VGP_sw64_linux) ++ /* Make sure our caller is actually sane, and we're really backing ++ back over a syscall. ++ syscall (w/o barrier) == 83 00 00 02 ++ syscall (with barrier) == 83 00 00 00 ++ */ ++ { ++ arch->vex.guest_PC -= 4; // sizeof(sw64 instr) ++ UChar *p = (UChar *)arch->vex.guest_PC; ++ if (p[0] != 0x83 || p[1] != 0x00 || p[2] != 0x00 || (p[3] != 0x02 && p[3] != 0x00)) ++ VG_(message)( ++ Vg_DebugMsg, ++ "?! restarting over syscall at %#llx %02x %02x %02x %02x\n", ++ arch->vex.guest_PC, p[0], p[1], p[2], p[3] ++ ); ++ ++ vg_assert(p[0] == 0x83 && p[1] == 0x00 && p[2] == 0x00 && (p[3] == 0x02 || p[3] == 0x00)); ++ } ++ + #elif defined(VGP_x86_solaris) + arch->vex.guest_EIP -= 2; // sizeof(int $0x91) or sizeof(syscall) + +diff --git a/coregrind/m_syswrap/syswrap-sw64-linux.c b/coregrind/m_syswrap/syswrap-sw64-linux.c +new file mode 100644 +index 000000000..80db0fbd9 +--- /dev/null ++++ b/coregrind/m_syswrap/syswrap-sw64-linux.c +@@ -0,0 +1,973 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- Platform-specific syscalls stuff. syswrap-sw64-linux.c ----*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#if defined(VGP_sw64_linux) ++#include "libvex_guest_offsets.h" ++#include "pub_core_basics.h" ++#include "pub_core_vki.h" ++#include "pub_core_vkiscnums.h" ++#include "pub_core_threadstate.h" ++#include "pub_core_aspacemgr.h" ++#include "pub_core_debuglog.h" ++#include "pub_core_libcbase.h" ++#include "pub_core_libcassert.h" ++#include "pub_core_libcprint.h" ++#include "pub_core_libcproc.h" ++#include "pub_core_libcsignal.h" ++#include "pub_core_options.h" ++#include "pub_core_scheduler.h" ++#include "pub_core_sigframe.h" /* For VG_(sigframe_destroy)() */ ++#include "pub_core_signals.h" ++#include "pub_core_syscall.h" ++#include "pub_core_syswrap.h" ++#include "pub_core_tooliface.h" ++#include "pub_core_transtab.h" /* VG_(discard_translations) */ ++#include "priv_types_n_macros.h" ++#include "priv_syswrap-generic.h" /* for decls of generic wrappers */ ++#include "priv_syswrap-linux.h" /* for decls of linux-ish wrappers */ ++#include "priv_syswrap-main.h" ++ ++#include "pub_core_debuginfo.h" /* VG_(di_notify_*) */ ++#include "pub_core_xarray.h" ++#include "pub_core_clientstate.h" /* VG_(brk_base), VG_(brk_limit) */ ++#include "pub_core_errormgr.h" ++#include "pub_core_gdbserver.h" /* VG_(gdbserver) */ ++#include "pub_core_libcfile.h" ++#include "pub_core_machine.h" /* VG_(get_SP) */ ++#include "pub_core_mallocfree.h" ++#include "pub_core_stacktrace.h" /* For VG_(get_and_pp_StackTrace)() */ ++#include "pub_core_ume.h" ++ ++#include "config.h" ++ ++#include ++ ++/* --------------------------------------------------------------------- ++ clone() handling ++ ------------------------------------------------------------------ */ ++ ++/* Call f(arg1), but first switch stacks, using 'stack' as the new stack, and ++ use 'retaddr' as f's return-to address. Also, clear all the integer registers ++ before entering f. */ ++__attribute__ ((noreturn)) ++void ML_(call_on_new_stack_0_1) ( Addr stack, /* $16 - $a0 */ ++ Addr retaddr, /* $17 - $a1 */ ++ void (*f_desc) (Word), /* $18 - $a2 */ ++ Word arg1 ); /* $19 - $a3 */ ++asm ( ++".text\n" ++".globl vgModuleLocal_call_on_new_stack_0_1\n" ++"vgModuleLocal_call_on_new_stack_0_1:\n" ++" mov $16, $30\n" /* set stack */ ++" mov $19, $16\n" /* arg1 to $16 */ ++" mov $18, $27\n" ++" mov $17, $26\n" /* retaddr to $ra */ ++" ldi $0, 0($31)\n\t" /* zero all GP regs */ ++" ldi $1, 0($31)\n\t" ++" ldi $2, 0($31)\n\t" ++" ldi $3, 0($31)\n\t" ++" ldi $4, 0($31)\n\t" ++" ldi $5, 0($31)\n\t" ++" ldi $6, 0($31)\n\t" ++" ldi $7, 0($31)\n\t" ++" ldi $8, 0($31)\n\t" ++" ldi $9, 0($31)\n\t" ++" ldi $10,0($31)\n\t" ++" ldi $11,0($31)\n\t" ++" ldi $12,0($31)\n\t" ++" ldi $13,0($31)\n\t" ++" ldi $14,0($31)\n\t" ++" ldi $17,0($31)\n\t" ++" ldi $18,0($31)\n\t" ++" ldi $19,0($31)\n\t" ++" ldi $20,0($31)\n\t" ++" ldi $21,0($31)\n\t" ++" ldi $22,0($31)\n\t" ++" ldi $23,0($31)\n\t" ++" ldi $24,0($31)\n\t" ++" ldi $25,0($31)\n\t" ++" mov $30, $15\n\t" ++" jmp $31, ($27)\n" /* jump to f */ ++" halt\n" /* should never get here */ ++".previous\n" ++); ++ ++/* ULong do_syscall_clone_sw64_linux(Word (*fn)(void*), void *stack, Int flags, ++ void *arg, Int *parent_tid, void *tls, ++ Int *child_tid); ++ Perform a clone system call. clone is strange because it has fork()-like ++ return-twice semantics, so it needs special handling here. ++*/ ++asm( ++".text\n" ++".global do_syscall_clone_sw64_linux\n" ++".ent do_syscall_clone_sw64_linux\n" ++"do_syscall_clone_sw64_linux:\n" ++" .cfi_startproc\n" ++ ++" ldi $17, -16($17)\n" /* allocate space on child stack*/ ++" stl $16, 0($17)\n" /* save fn */ ++" stl $19, 8($17)\n" /* save arg*/ ++ ++/* arg of syscalls is clone(flags, usp, ptid, ctid, tls) ++ from /sysdeps/unix/sysv/linux/sw_64/clone.S:61 */ ++" mov $16, $1\n" ++" mov $17, $2\n" ++" mov $18, $3\n" ++" mov $19, $4\n" ++" mov $20, $5\n" ++" mov $21, $6\n" ++" ldl $7, 0($30)\n" ++" mov $3, $16\n" ++" mov $2, $17\n" ++" mov $5, $18\n" ++" mov $7, $19\n" ++" mov $6, $20\n" ++" ldi $0, " VG_STRINGIFY(__NR_clone) "\n" ++" sys_call 0x83\n" ++" bne $19, parent_or_error\n" ++" bne $0, parent_or_error\n" ++ ++/* CHILD - call thread function, then call to exit() */ ++" ldl $27, 0($30)\n" /* pop fn */ ++" ldl $16, 8($30)\n" /* pop arg */ ++" ldi $30, 16($30)\n" ++ ++" call $26, ($27), 0\n" /* call to funcion */ ++ ++" mov $0, $16\n" /* call to exit() */ ++" ldi $0, " VG_STRINGIFY(__NR_exit) "\n" ++" sys_call 0x83\n" ++ ++/* PARENT or ERROR - return */ ++"parent_or_error:\n" ++" ret $31, ($26), 0\n" ++ ++" .cfi_endproc\n" ++".end do_syscall_clone_sw64_linux\n" ++); ++ ++/* --------------------------------------------------------------------- ++ More thread stuff ++ ------------------------------------------------------------------ */ ++void VG_(cleanup_thread) ( ThreadArchState * arch ) { }; ++ ++// SysRes sys_set_tls ( ThreadId tid, Addr tlsptr ) ++// { ++// /* SW_NOT_COMPLETE */ ++// } ++ ++/* --------------------------------------------------------------------- ++ PRE/POST wrappers for sw/Linux-specific syscalls ++ ------------------------------------------------------------------ */ ++ ++#define PRE(name) DEFN_PRE_TEMPLATE(sw64_linux, name) ++#define POST(name) DEFN_POST_TEMPLATE(sw64_linux, name) ++ ++/* Add prototypes for the wrappers declared here, so that gcc doesn't harass us ++ for not having prototypes. Really this is a kludge -- the right thing to do ++ is to make these wrappers 'static' since they aren't visible outside this ++ file, but that requires even more macro magic. */ ++ ++DECL_TEMPLATE(sw64_linux, sys_ptrace); // 26 ++DECL_TEMPLATE(sw64_linux, sys_pipe); // 42 ++DECL_TEMPLATE(sw64_linux, sys_odd_sigprocmask); // 48 ++DECL_TEMPLATE(sw64_linux, sys_mmap); // 71 ++DECL_TEMPLATE(sw64_linux, sys_gethostname); // 87 ++DECL_TEMPLATE(sw64_linux, sys_sethostname); // 88 ++DECL_TEMPLATE(sw64_linux, sys_sigreturn); // 103 ++DECL_TEMPLATE(sw64_linux, sys_sigsuspend); // 111 ++DECL_TEMPLATE(sw64_linux, sys_setdomainname); // 166 ++DECL_TEMPLATE(sw64_linux, sys_sysfs); // 254 ++DECL_TEMPLATE(sw64_linux, sys_getsysinfo); // 256 ++DECL_TEMPLATE(sw64_linux, sys_setsysinfo); // 257 ++DECL_TEMPLATE(sw64_linux, sys_swapoff); // 304 ++DECL_TEMPLATE(sw64_linux, sys_reboot); // 311 ++DECL_TEMPLATE(sw64_linux, sys_swapon); // 322 ++DECL_TEMPLATE(sw64_linux, sys_ustat); // 327 ++DECL_TEMPLATE(sw64_linux, sys_sched_rr_get_interval); // 337 ++DECL_TEMPLATE(sw64_linux, sys_rt_sigreturn); // 351 ++DECL_TEMPLATE(sw64_linux, sys_fadvise64); // 413 ++DECL_TEMPLATE(sw64_linux, sys_stat64); // 425 ++DECL_TEMPLATE(sw64_linux, sys_lstat64); // 426 ++DECL_TEMPLATE(sw64_linux, sys_fstat64); // 427 ++DECL_TEMPLATE(sw64_linux, sys_fstatat64); // 455 ++DECL_TEMPLATE(sw64_linux, sys_vmsplice); // 471 ++ ++PRE(sys_ptrace) ++{ ++ PRINT("sys_ptrace ( %ld, %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ++ SARG1, SARG2, ARG3, ARG4); ++ PRE_REG_READ4(int, "ptrace", ++ long, request, long, pid, unsigned long, addr, ++ unsigned long, data); ++ switch (ARG1) { ++ case VKI_PTRACE_PEEKTEXT: ++ case VKI_PTRACE_PEEKDATA: ++ case VKI_PTRACE_PEEKUSR: ++ PRE_MEM_WRITE("ptrace(peek)", ARG4, sizeof(long)); ++ break; ++ case VKI_PTRACE_GETEVENTMSG: ++ PRE_MEM_WRITE("ptrace(geteventmsg)", ARG4, sizeof(unsigned long)); ++ break; ++ case VKI_PTRACE_GETSIGINFO: ++ PRE_MEM_WRITE("ptrace(getsiginfo)", ARG4, sizeof(vki_siginfo_t)); ++ break; ++ case VKI_PTRACE_SETSIGINFO: ++ PRE_MEM_READ("ptrace(setsiginfo)", ARG4, sizeof(vki_siginfo_t)); ++ break; ++ case VKI_PTRACE_GETREGSET: ++ ML_(linux_PRE_getregset)(tid, ARG3, ARG4); ++ break; ++ default: ++ break; ++ } ++} ++POST(sys_ptrace) ++{ ++ switch (ARG1) { ++ case VKI_PTRACE_TRACEME: ++ ML_(linux_POST_traceme)(tid); ++ break; ++ case VKI_PTRACE_PEEKTEXT: ++ case VKI_PTRACE_PEEKDATA: ++ case VKI_PTRACE_PEEKUSR: ++ POST_MEM_WRITE (ARG4, sizeof(long)); ++ break; ++ case VKI_PTRACE_GETEVENTMSG: ++ POST_MEM_WRITE (ARG4, sizeof(unsigned long)); ++ break; ++ case VKI_PTRACE_GETSIGINFO: ++ POST_MEM_WRITE (ARG4, sizeof(vki_siginfo_t)); ++ break; ++ case VKI_PTRACE_GETREGSET: ++ ML_(linux_POST_getregset)(tid, ARG3, ARG4); ++ break; ++ default: ++ break; ++ } ++} ++ ++PRE(sys_pipe) ++{ ++ PRINT("sys_pipe ( %#" FMT_REGWORD "x )", ARG1); ++ PRE_REG_READ1(int, "pipe", int *, filedes); ++ PRE_MEM_WRITE( "pipe(filedes)", ARG1, 2*sizeof(int) ); ++} ++POST(sys_pipe) ++{ ++ Int p0, p1; ++ ThreadState *gst; ++ ++ vg_assert(SUCCESS); ++ p0 = sr_Res(status->sres); ++ p1 = sr_ResEx(status->sres); ++ ++ if (!ML_(fd_allowed)(p0, "pipe", tid, True) || ++ !ML_(fd_allowed)(p1, "pipe", tid, True)) { ++ VG_(close)(p0); ++ VG_(close)(p1); ++ SET_STATUS_Failure( VKI_EMFILE ); ++ } else { ++ if (VG_(clo_track_fds)) { ++ ML_(record_fd_open_nameless)(tid, p0); ++ ML_(record_fd_open_nameless)(tid, p1); ++ } ++ } ++ ++ gst = VG_(get_ThreadState)(tid); ++ gst->arch.vex.guest_r20 = p1; ++ VG_TRACK( post_reg_write, Vg_CoreSysCall, tid, ++ OFFSET_sw64_r20, sizeof(UWord) ); ++} ++ ++PRE(sys_odd_sigprocmask) ++{ ++ /* see linux-4.19.y-sw/arch/sw_64/kernel/signal.c ++ SYSCALL_DEFINE2(odd_sigprocmask, int, how, unsigned long, newmask) ++ ++ these code is copy from valgrind-sw/coregrind/m_syswrap/syswrap-linux.c ++ in PRE(sys_sigprocmask) ++ */ ++ vki_old_sigset_t* set; ++ vki_sigset_t bigger_set; ++ ++ PRINT("sys_odd_sigprocmask ( %ld, %#lx )", SARG1, ARG2); ++ PRE_REG_READ2(long, "sys_odd_sigprocmask", ++ int, how, vki_old_sigset_t *, set); ++ if (ARG2 != 0) ++ PRE_MEM_READ( "sigprocmask(set)", ARG2, sizeof(vki_old_sigset_t)); ++ ++ // Nb: We must convert the smaller vki_old_sigset_t params into bigger ++ // vki_sigset_t params. ++ set = (vki_old_sigset_t*)(Addr)ARG2; ++ ++ VG_(memset)(&bigger_set, 0, sizeof(vki_sigset_t)); ++ if (set) ++ bigger_set.sig[0] = *(vki_old_sigset_t*)set; ++ ++ SET_STATUS_from_SysRes( ++ VG_(do_sys_sigprocmask) ( tid, ++ ARG1 /*how*/, ++ set ? &bigger_set : NULL, /*set*/ ++ NULL) ++ ); ++ ++ if (SUCCESS) ++ *flags |= SfPollAfter; ++} ++ ++PRE(sys_mmap) ++{ ++ SysRes r; ++ PRINT("sys_mmap ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld, %ld, %ld, %" ++ FMT_REGWORD "u )", ++ ARG1, ARG2, SARG3, SARG4, SARG5, ARG6); ++ PRE_REG_READ6(long, "mmap", unsigned long, start, vki_size_t, length, ++ int, prot, int, flags, int, fd, unsigned long, offset); ++ r = ML_(generic_PRE_sys_mmap)(tid, ARG1, ARG2, ARG3, ARG4, ARG5, ++ (Off64T) ARG6); ++ SET_STATUS_from_SysRes(r); ++} ++ ++PRE(sys_gethostname) ++{ ++ PRINT ("sys_gethostname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); ++ PRE_REG_READ2 (long, "gethostname", void *, name, int, len); ++} ++ ++PRE(sys_sethostname) ++{ ++ PRINT ("sys_sethostname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); ++ PRE_REG_READ2 (long, "sethostname", const void *, name, int, len); ++} ++ ++PRE(sys_sigreturn) ++{ ++ /* See comments on PRE(sys_rt_sigreturn) in syswrap-s390x-linux.c for ++ an explanation of what follows. */ ++ ThreadState* tst; ++ PRINT("sys_rt_sigreturn ( )"); ++ ++ vg_assert(VG_(is_valid_tid)(tid)); ++ vg_assert(tid >= 1 && tid < VG_N_THREADS); ++ vg_assert(VG_(is_running_thread)(tid)); ++ ++ tst = VG_(get_ThreadState)(tid); ++ ++ /* This is only so that the IA is (might be) useful to report if ++ something goes wrong in the sigreturn */ ++ ML_(fixup_guest_state_to_restart_syscall)(&tst->arch); ++ ++ /* Restore register state from frame and remove it */ ++ VG_(sigframe_destroy)(tid, False); ++ ++ /* Tell the driver not to update the guest state with the "result", ++ and set a bogus result to keep it happy. */ ++ *flags |= SfNoWriteResult; ++ SET_STATUS_Success(0); ++ ++ /* Check to see if any signals arose as a result of this. */ ++ *flags |= SfPollAfter; ++} ++ ++/* NB: This is an almost identical clone of versions for x86-linux and ++ arm-linux, which are themselves literally identical. */ ++PRE(sys_sigsuspend) ++{ ++ /* The C library interface to sigsuspend just takes a pointer to ++ a signal mask but this system call only takes the first word of ++ the signal mask as an argument so only 32 signals are supported. ++ ++ In fact glibc normally uses rt_sigsuspend if it is available as ++ that takes a pointer to the signal mask so supports more signals. ++ */ ++ *flags |= SfMayBlock; ++ PRINT("sys_sigsuspend ( %lu )", ARG1 ); ++ PRE_REG_READ1(int, "sigsuspend", vki_old_sigset_t, mask); ++} ++ ++PRE(sys_setdomainname) ++{ ++ PRINT ("sys_setdomainname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); ++ PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len); ++} ++ ++PRE(sys_sysfs) ++{ ++ PRINT("sys_sysfs ( %ld, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ++ SARG1, ARG2, ARG3); ++ PRE_REG_READ3(long, "sysfs", int, flags, int, desc, const void *, path); ++} ++ ++PRE(sys_swapoff) ++{ ++ PRINT("sys_swapoff ( %#" FMT_REGWORD "x )", ARG1); ++ PRE_REG_READ1(long, "swapoff", const void *, path); ++} ++ ++PRE(sys_reboot) ++{ ++ PRINT("sys_reboot ( %ld, %" FMT_REGWORD "u, %" FMT_REGWORD "u, %#" ++ FMT_REGWORD "x )", SARG1, ARG2, ARG3, ARG4); ++ // An approximation. ARG4 is only read conditionally by the kernel ++ PRE_REG_READ4(int, "reboot", ++ int, magic1, int, magic2, unsigned int, cmd, ++ void *, arg); ++ ++ *flags |= SfMayBlock; ++} ++ ++PRE(sys_swapon) ++{ ++ PRINT("sys_swapon ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2); ++ PRE_REG_READ2(long, "swapon", const void *, path, int, flags); ++} ++ ++PRE(sys_ustat) ++{ ++ PRINT("sys_ustat ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x)", ARG1, ARG2); ++ PRE_REG_READ2(long, "ustat", int, flags, const void *, path); ++} ++ ++PRE(sys_sched_rr_get_interval) ++{ ++ PRINT("sys_sched_rr_get_interval ( %ld, %#" FMT_REGWORD "x)", SARG1, ARG2); ++ PRE_REG_READ2(long, "sched_rr_get_interval", vki_pid_t, pid, ++ struct timespec *, timer); ++ *flags |= SfMayBlock; ++} ++ ++PRE(sys_rt_sigreturn) ++{ ++ /* See comments on PRE(sys_rt_sigreturn) in syswrap-s390x-linux.c for ++ an explanation of what follows. */ ++ ThreadState* tst; ++ PRINT("sys_rt_sigreturn ( )"); ++ ++ vg_assert(VG_(is_valid_tid)(tid)); ++ vg_assert(tid >= 1 && tid < VG_N_THREADS); ++ vg_assert(VG_(is_running_thread)(tid)); ++ ++ tst = VG_(get_ThreadState)(tid); ++ ++ /* This is only so that the IA is (might be) useful to report if ++ something goes wrong in the sigreturn */ ++ ML_(fixup_guest_state_to_restart_syscall)(&tst->arch); ++ ++ /* Restore register state from frame and remove it */ ++ VG_(sigframe_destroy)(tid, True); ++ ++ /* Tell the driver not to update the guest state with the "result", ++ and set a bogus result to keep it happy. */ ++ *flags |= SfNoWriteResult; ++ SET_STATUS_Success(0); ++ ++ /* Check to see if any signals arose as a result of this. */ ++ *flags |= SfPollAfter; ++} ++ ++PRE(sys_fadvise64) ++{ ++ PRINT("sys_fadvise64 ( %ld, %ld, %" FMT_REGWORD "u, %ld )", SARG1, SARG2, ++ ARG3, SARG4); ++ PRE_REG_READ4(long, "fadvise64", ++ int, fd, vki_loff_t, offset, vki_loff_t, len, int, advice); ++} ++ ++PRE(sys_stat64) ++{ ++ PRINT("sys_stat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2); ++ PRE_REG_READ2(long, "stat64", char *, file_name, struct stat64 *, buf); ++ PRE_MEM_RASCIIZ( "stat64(file_name)", ARG1 ); ++ PRE_MEM_WRITE( "stat64(buf)", ARG2, sizeof(struct vki_stat64) ); ++} ++ ++POST(sys_stat64) ++{ ++ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); ++} ++ ++PRE(sys_lstat64) ++{ ++ PRINT("sys_lstat64 ( %#lx(%s), %#lx )",ARG1,(char*)ARG1,ARG2); ++ PRE_REG_READ2(long, "lstat64", char *, file_name, struct stat64 *, buf); ++ PRE_MEM_RASCIIZ( "lstat64(file_name)", ARG1 ); ++ PRE_MEM_WRITE( "lstat64(buf)", ARG2, sizeof(struct vki_stat64) ); ++} ++ ++POST(sys_lstat64) ++{ ++ vg_assert(SUCCESS); ++ if (RES == 0) { ++ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); ++ } ++} ++ ++PRE(sys_fstat64) ++{ ++ PRINT("sys_fstat64 ( %lx, %#lx )",ARG1,ARG2); ++ PRE_REG_READ2(long, "fstat64", unsigned long, fd, struct stat64 *, buf); ++ PRE_MEM_WRITE( "fstat64(buf)", ARG2, sizeof(struct vki_stat64) ); ++} ++ ++POST(sys_fstat64) ++{ ++ POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) ); ++} ++ ++PRE(sys_fstatat64) ++{ ++ // ARG4 = int flags; Flags are or'ed together, therefore writing them ++ // as a hex constant is more meaningful. ++ PRINT("sys_fstatat64 ( %ld, %#lx(%s), %#lx, %#lx )", ++ SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4); ++ PRE_REG_READ4(long, "fstatat64", ++ int, dfd, char *, file_name, struct stat64 *, buf, int, flags); ++ PRE_MEM_RASCIIZ ("fstatat64(file_name)", ARG2); ++ PRE_MEM_WRITE ("fstatat64(buf)", ARG3, sizeof (struct vki_stat64)); ++} ++POST(sys_fstatat64) ++{ ++ POST_MEM_WRITE (ARG3, sizeof (struct vki_stat64)); ++} ++ ++PRE(sys_vmsplice) ++{ ++ PRINT("sys_vmsplice ( %ld, %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %ld )", ++ SARG1, ARG2, ARG3, SARG4); ++ PRE_REG_READ4(long, "sys_vmsplice", int, fdin, struct vki_iovec *, v, ++ vki_size_t, len, int, flags); ++} ++ ++// SYSCALL_DEFINE5(getsysinfo, unsigned long, op, void __user *, buffer, ++// unsigned long, nbytes, int __user *, start, void __user *, arg); ++PRE(sys_getsysinfo) ++{ ++ PRINT("sys_getsysinfo ( %ld, %#lx, %ld, %#lx, %#lx )", ++ SARG1, ARG2, SARG3, ARG4, ARG5); ++ PRE_REG_READ5(long, "sys_getsysinfo", unsigned long, op, void *, buffer, ++ unsigned long, nbytes, int *, start, void *, arg); ++} ++ ++POST(sys_getsysinfo) ++{ ++ POST_MEM_WRITE (ARG2, sizeof (unsigned long)); ++} ++ ++// SYSCALL_DEFINE5(setsysinfo, unsigned long, op, void __user *, buffer, ++// unsigned long, nbytes, int __user *, start, void __user *, arg) ++PRE(sys_setsysinfo) ++{ ++ PRINT("sys_setsysinfo ( %ld, %#lx, %ld, %#lx, %#lx )", ++ SARG1, ARG2, SARG3, ARG4, ARG5); ++ PRE_REG_READ5(long, "sys_setsysinfo", unsigned long, op, void *, buffer, ++ unsigned long, nbytes, int *, start, void *, arg); ++} ++ ++#undef PRE ++#undef POST ++ ++/* --------------------------------------------------------------------- ++ The sw64/Linux syscall table ++ ------------------------------------------------------------------ */ ++ ++/* Add an sw64-linux specific wrapper to a syscall table. */ ++#define PLAX_(sysno, name) WRAPPER_ENTRY_X_(sw64_linux, sysno, name) ++#define PLAXY(sysno, name) WRAPPER_ENTRY_XY(sw64_linux, sysno, name) ++ ++static SyscallTableEntry syscall_main_table[] = { ++ GENX_(__NR_exit, sys_exit), // 1 ++ GENX_(__NR_fork, sys_fork), // 2 ++ GENXY(__NR_read, sys_read), // 3 ++ GENX_(__NR_write, sys_write), // 4 ++ GENXY(__NR_close, sys_close), // 6 ++ GENX_(__NR_link, sys_link), // 9 ++ GENX_(__NR_unlink, sys_unlink), // 10 ++ GENX_(__NR_chdir, sys_chdir), // 12 ++ GENX_(__NR_fchdir, sys_fchdir), // 13 ++ GENX_(__NR_mknod, sys_mknod), // 14 ++ GENX_(__NR_chmod, sys_chmod), // 15 ++ GENX_(__NR_chown, sys_chown), // 16 ++ GENX_(__NR_brk, sys_brk), // 17 ++ LINX_(__NR_lseek, sys_lseek), // 19 ++ GENX_(__NR_getxpid, sys_getpid), // 20 ++ LINX_(__NR_umount2, sys_umount), // 22 ++ GENX_(__NR_setuid, sys_setuid), // 23 ++ GENX_(__NR_getxuid, sys_getuid), // 24 ++ PLAXY(__NR_ptrace, sys_ptrace), // 26 ++ GENX_(__NR_access, sys_access), // 33 ++ GENX_(__NR_sync, sys_sync), // 36 ++ GENX_(__NR_kill, sys_kill), // 37 ++ GENX_(__NR_setpgid, sys_setpgid), // 39 ++ GENXY(__NR_dup, sys_dup), // 41 ++ PLAXY(__NR_pipe, sys_pipe), // 42 ++ GENXY(__NR_open, sys_open), // 45 ++ GENX_(__NR_getxgid, sys_getgid), // 47 ++ PLAX_(__NR_odd_sigprocmask, sys_odd_sigprocmask), // 48 ++ GENX_(__NR_acct, sys_acct), // 51 ++ LINXY(__NR_sigpending, sys_sigpending), // 52 ++ LINXY(__NR_ioctl, sys_ioctl), // 54 ++ GENX_(__NR_symlink, sys_symlink), // 57 ++ GENX_(__NR_readlink, sys_readlink), // 58 ++ GENX_(__NR_execve, sys_execve), // 59 ++ GENX_(__NR_umask, sys_umask), // 60 ++ GENX_(__NR_chroot, sys_chroot), // 61 ++ GENX_(__NR_getpgrp, sys_getpgrp), // 63 ++ GENX_(__NR_vfork, sys_fork), // 66 ++ GENXY(__NR_stat, sys_newstat), // 67 ++ GENXY(__NR_lstat, sys_newlstat), // 68 ++ PLAX_(__NR_mmap, sys_mmap), // 71 ++ GENXY(__NR_munmap, sys_munmap), // 73 ++ GENXY(__NR_mprotect, sys_mprotect), // 74 ++ GENX_(__NR_madvise, sys_madvise), // 75 ++ LINX_(__NR_vhangup, sys_vhangup), // 76 ++ GENXY(__NR_getgroups, sys_getgroups), // 79 ++ GENX_(__NR_setgroups, sys_setgroups), // 80 ++ GENX_(__NR_setpgrp, sys_setpgid), // 82 ++ PLAX_(__NR_gethostname, sys_gethostname), // 87 ++ PLAX_(__NR_sethostname, sys_sethostname), // 88 ++ GENXY(__NR_dup2, sys_dup2), // 90 ++ GENXY(__NR_fstat, sys_newfstat), // 91 ++ LINXY(__NR_fcntl, sys_fcntl), // 92 ++ GENXY(__NR_poll, sys_poll), // 94 ++ GENX_(__NR_fsync, sys_fsync), // 95 ++ GENX_(__NR_setpriority, sys_setpriority), // 96 ++ LINXY(__NR_socket, sys_socket), // 97 ++ LINX_(__NR_connect, sys_connect), // 98 ++ LINXY(__NR_accept, sys_accept), // 99 ++ // _____(__NR_odd_getpriority, sys_unknow), // 100 ++ LINX_(__NR_send, sys_send), // 101 ++ LINXY(__NR_recv, sys_recv), // 102 ++ PLAX_(__NR_sigreturn, sys_sigreturn), // 103 ++ LINX_(__NR_bind, sys_bind), // 104 ++ LINX_(__NR_setsockopt, sys_setsockopt), // 105 ++ LINX_(__NR_listen, sys_listen), // 106 ++ PLAX_(__NR_sigsuspend, sys_sigsuspend), // 111 ++ LINXY(__NR_recvmsg, sys_recvmsg), // 113 ++ LINX_(__NR_sendmsg, sys_sendmsg), // 114 ++ LINXY(__NR_getsockopt, sys_getsockopt), // 118 ++ LINX_(__NR_socketcall, sys_socketcall), // 119 ++ GENXY(__NR_readv, sys_readv), // 120 ++ GENX_(__NR_writev, sys_writev), // 121 ++ GENX_(__NR_fchown, sys_fchown), // 123 ++ GENX_(__NR_fchmod, sys_fchmod), // 124 ++ LINXY(__NR_recvfrom, sys_recvfrom), // 125 ++ GENX_(__NR_setreuid, sys_setreuid), // 126 ++ GENX_(__NR_setregid, sys_setregid), // 127 ++ GENX_(__NR_rename, sys_rename), // 128 ++ GENX_(__NR_truncate, sys_truncate), // 129 ++ GENX_(__NR_ftruncate, sys_ftruncate), // 130 ++ GENX_(__NR_flock, sys_flock), // 131 ++ GENX_(__NR_setgid, sys_setgid), // 132 ++ LINX_(__NR_sendto, sys_sendto), // 133 ++ LINX_(__NR_shutdown, sys_shutdown), // 134 ++ LINXY(__NR_socketpair, sys_socketpair), // 135 ++ GENX_(__NR_mkdir, sys_mkdir), // 136 ++ GENX_(__NR_rmdir, sys_rmdir), // 137 ++ LINXY(__NR_getpeername, sys_getpeername), // 141 ++ GENXY(__NR_getrlimit, sys_getrlimit), // 144 ++ GENX_(__NR_setrlimit, sys_setrlimit), // 145 ++ GENX_(__NR_setsid, sys_setsid), // 147 ++ LINX_(__NR_quotactl, sys_quotactl), // 148 ++ LINXY(__NR_getsockname, sys_getsockname), // 150 ++ LINXY(__NR_sigaction, sys_sigaction), // 156 ++ PLAX_(__NR_setdomainname, sys_setdomainname), // 166 ++ LINXY(__NR_bpf, sys_bpf), // 170 ++ // _____(__NR_userfaultfd, sys_unknow), // 171 ++ LINX_(__NR_membarrier, sys_membarrier), // 172 ++ // _____(__NR_mlock2, sys_unknow), // 173 ++ GENX_(__NR_getpid, sys_getpid), // 174 ++ GENX_(__NR_getppid, sys_getppid), // 175 ++ GENX_(__NR_getuid, sys_getuid), // 176 ++ GENX_(__NR_geteuid, sys_geteuid), // 177 ++ GENX_(__NR_getgid, sys_getgid), // 178 ++ GENX_(__NR_getegid, sys_getegid), // 179 ++ LINXY(__NR_msgctl, sys_msgctl), // 200 ++ LINX_(__NR_msgget, sys_msgget), // 201 ++ LINXY(__NR_msgrcv, sys_msgrcv), // 202 ++ LINX_(__NR_msgsnd, sys_msgsnd), // 203 ++ LINXY(__NR_semctl, sys_semctl), // 204 ++ LINX_(__NR_semget, sys_semget), // 205 ++ LINX_(__NR_semop, sys_semop), // 206 ++ GENX_(__NR_lchown, sys_lchown), // 208 ++ LINXY(__NR_shmat, sys_shmat), // 209 ++ LINXY(__NR_shmctl, sys_shmctl), // 210 ++ LINXY(__NR_shmdt, sys_shmdt), // 211 ++ LINX_(__NR_shmget, sys_shmget), // 212 ++ GENX_(__NR_msync, sys_msync), // 217 ++ GENXY(__NR_statfs64, sys_statfs64), // 229 ++ GENXY(__NR_fstatfs64, sys_fstatfs64), // 230 ++ GENX_(__NR_getpgid, sys_getpgid), // 233 ++ GENX_(__NR_getsid, sys_getsid), // 234 ++ GENXY(__NR_sigaltstack, sys_sigaltstack), // 235 ++ PLAX_(__NR_sysfs, sys_sysfs), // 254 ++ PLAX_(__NR_getsysinfo, sys_getsysinfo), // 256 ++ PLAX_(__NR_setsysinfo, sys_setsysinfo), // 257 ++ GENX_(266, sys_ni_syscall), // 266 ++ GENX_(__NR_getpriority, sys_getpriority), // 298 ++ LINXY(__NR_sigprocmask, sys_sigprocmask), // 299 ++ // _____(__NR_bdflush, sys_unknow), //300 ++ LINX_(__NR_mount, sys_mount), // 302 ++ PLAX_(__NR_swapoff, sys_swapoff), // 304 ++ GENXY(__NR_getdents, sys_getdents), // 305 ++ GENX_(__NR_create_module, sys_ni_syscall), // 306 ++ LINX_(__NR_init_module, sys_init_module), // 307 ++ LINX_(__NR_delete_module, sys_delete_module), // 308 ++ GENX_(__NR_get_kernel_syms, sys_ni_syscall), // 309 ++ LINXY(__NR_syslog, sys_syslog), // 310 ++ PLAX_(__NR_reboot, sys_reboot), // 311 ++ LINX_(__NR_clone, sys_clone), // 312 ++ // _____(__NR_uselib, sys_unknow), // 313 ++ GENX_(__NR_mlock, sys_mlock), // 314 ++ GENX_(__NR_munlock, sys_munlock), // 315 ++ GENX_(__NR_mlockall, sys_mlockall), // 316 ++ LINX_(__NR_munlockall, sys_munlockall), // 317 ++ LINXY(__NR_sysinfo, sys_sysinfo), // 318 ++ LINXY(__NR__sysctl, sys_sysctl), // 319 ++ LINX_(__NR_oldumount, sys_oldumount), // 321 ++ PLAX_(__NR_swapon, sys_swapon), // 322 ++ GENXY(__NR_times, sys_times), // 323 ++ LINX_(__NR_personality, sys_personality), // 324 ++ LINX_(__NR_setfsuid, sys_setfsuid), // 325 ++ LINX_(__NR_setfsgid, sys_setfsgid), // 326 ++ PLAX_(__NR_ustat, sys_ustat), // 327 ++ GENXY(__NR_statfs, sys_statfs), // 328 ++ GENXY(__NR_fstatfs, sys_fstatfs), // 329 ++ LINXY(__NR_sched_setparam, sys_sched_setparam), // 330 ++ LINXY(__NR_sched_getparam, sys_sched_getparam), // 331 ++ LINX_(__NR_sched_setscheduler, sys_sched_setscheduler), // 332 ++ LINX_(__NR_sched_getscheduler, sys_sched_getscheduler), // 333 ++ LINX_(__NR_sched_yield, sys_sched_yield), // 334 ++ LINX_(__NR_sched_get_priority_max, sys_sched_get_priority_max), // 335 ++ LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min), // 336 ++ PLAX_(__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 337 ++ GENX_(__NR_afs_syscall, sys_ni_syscall), // 338 ++ GENXY(__NR_uname, sys_newuname), // 339 ++ GENXY(__NR_nanosleep, sys_nanosleep), // 340 ++ GENX_(__NR_mremap, sys_mremap), // 341 ++ GENX_(__NR_nfsservctl, sys_ni_syscall), // 342 ++ LINX_(__NR_setresuid, sys_setresuid), // 343 ++ LINXY(__NR_getresuid, sys_getresuid), // 344 ++ // _____(__NR_pciconfig_read, sys_unknow), // 345 ++ // _____(__NR_pciconfig_write, sys_unknow), // 346 ++ GENX_(__NR_query_module, sys_ni_syscall), // 347 ++ LINXY(__NR_prctl, sys_prctl), // 348 ++ GENXY(__NR_pread64, sys_pread64), // 349 ++ GENX_(__NR_pwrite64, sys_pwrite64), // 350 ++ PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 351 ++ LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 352 ++ LINXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 353 ++ LINXY(__NR_rt_sigpending, sys_rt_sigpending), // 354 ++ LINXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait), // 355 ++ LINXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo), // 356 ++ LINX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 357 ++ GENX_(__NR_select, sys_select), // 358 ++ GENXY(__NR_gettimeofday, sys_gettimeofday), // 359 ++ GENX_(__NR_settimeofday, sys_settimeofday), // 360 ++ GENXY(__NR_getitimer, sys_getitimer), // 361 ++ GENXY(__NR_setitimer, sys_setitimer), // 362 ++ GENX_(__NR_utimes, sys_utimes), // 363 ++ GENXY(__NR_getrusage, sys_getrusage), // 364 ++ GENXY(__NR_wait4, sys_wait4), // 365 ++ LINXY(__NR_adjtimex, sys_adjtimex), // 366 ++ GENXY(__NR_getcwd, sys_getcwd), // 367 ++ LINXY(__NR_capget, sys_capget), // 368 ++ LINX_(__NR_capset, sys_capset), // 369 ++ LINXY(__NR_sendfile, sys_sendfile), // 370 ++ LINX_(__NR_setresgid, sys_setresgid), // 371 ++ LINXY(__NR_getresgid, sys_getresgid), // 372 ++ GENX_(__NR_dipc, sys_ni_syscall), // 373 ++ LINX_(__NR_pivot_root, sys_pivot_root), // 374 ++ GENXY(__NR_mincore, sys_mincore), // 375 ++ // _____(__NR_pciconfig_iobase, sys_unknow), // 376 ++ GENXY(__NR_getdents64, sys_getdents64), // 377 ++ LINX_(__NR_gettid, sys_gettid), // 378 ++ LINX_(__NR_readahead, sys_readahead), // 379 ++ LINXY(__NR_tkill, sys_tkill), // 381 ++ LINX_(__NR_setxattr, sys_setxattr), // 382 ++ LINX_(__NR_lsetxattr, sys_lsetxattr), // 383 ++ LINX_(__NR_fsetxattr, sys_fsetxattr), // 384 ++ LINXY(__NR_getxattr, sys_getxattr), // 385 ++ LINXY(__NR_lgetxattr, sys_lgetxattr), // 386 ++ LINXY(__NR_fgetxattr, sys_fgetxattr), // 387 ++ LINXY(__NR_listxattr, sys_listxattr), // 388 ++ LINXY(__NR_llistxattr, sys_llistxattr), // 389 ++ LINXY(__NR_flistxattr, sys_flistxattr), // 390 ++ LINX_(__NR_removexattr, sys_removexattr), // 391 ++ LINX_(__NR_lremovexattr, sys_lremovexattr), // 392 ++ LINX_(__NR_fremovexattr, sys_fremovexattr), // 393 ++ LINXY(__NR_futex, sys_futex), // 394 ++ LINX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 395 ++ LINXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 396 ++ GENX_(__NR_tuxcall, sys_ni_syscall), // 397 ++ LINXY(__NR_io_setup, sys_io_setup), // 398 ++ LINX_(__NR_io_destroy, sys_io_destroy), // 399 ++ LINXY(__NR_io_getevents, sys_io_getevents), // 400 ++ LINX_(__NR_io_submit, sys_io_submit), // 401 ++ LINXY(__NR_io_cancel, sys_io_cancel), // 402 ++ // _____(__NR_io_pgetevents, sys_unknow), // 403 ++ GENX_(__NR_rseq, sys_ni_syscall), // 404 ++ LINX_(__NR_exit_group, sys_exit_group), // 405 ++ LINXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 406 ++ LINXY(__NR_epoll_create, sys_epoll_create), // 407 ++ LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 408 ++ LINXY(__NR_epoll_wait, sys_epoll_wait), // 409 ++ // _____(__NR_remap_file_pages, sys_unknow), // 410 ++ LINX_(__NR_set_tid_address, sys_set_tid_address), // 411 ++ // _____(__NR_restart_syscall, sys_unknow), // 412 ++ PLAX_(__NR_fadvise64, sys_fadvise64), // 413 ++ LINXY(__NR_timer_create, sys_timer_create), // 414 ++ LINXY(__NR_timer_settime, sys_timer_settime), // 415 ++ LINXY(__NR_timer_gettime, sys_timer_gettime), // 416 ++ LINX_(__NR_timer_getoverrun, sys_timer_getoverrun), // 417 ++ LINX_(__NR_timer_delete, sys_timer_delete), // 418 ++ LINX_(__NR_clock_settime, sys_clock_settime), // 419 ++ LINXY(__NR_clock_gettime, sys_clock_gettime), // 420 ++ LINXY(__NR_clock_getres, sys_clock_getres), // 421 ++ LINXY(__NR_clock_nanosleep, sys_clock_nanosleep), // 422 ++ LINX_(__NR_semtimedop, sys_semtimedop), // 423 ++ LINX_(__NR_tgkill, sys_tgkill), // 424 ++ PLAXY(__NR_stat64, sys_stat64), // 425 ++ PLAXY(__NR_lstat64, sys_lstat64), // 426 ++ PLAXY(__NR_fstat64, sys_fstat64), // 427 ++ GENX_(__NR_vserver, sys_ni_syscall), // 428 ++ LINX_(__NR_mbind, sys_mbind), // 429 ++ LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 430 ++ LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 431 ++ LINXY(__NR_mq_open, sys_mq_open), // 432 ++ LINX_(__NR_mq_unlink, sys_mq_unlink), // 433 ++ LINX_(__NR_mq_timedsend, sys_mq_timedsend), // 434 ++ LINXY(__NR_mq_timedreceive, sys_mq_timedreceive), // 435 ++ LINX_(__NR_mq_notify, sys_mq_notify), // 436 ++ LINXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 437 ++ LINXY(__NR_waitid, sys_waitid), // 438 ++ LINX_(__NR_add_key, sys_add_key), // 439 ++ LINX_(__NR_request_key, sys_request_key), // 440 ++ LINXY(__NR_keyctl, sys_keyctl), // 441 ++ LINX_(__NR_ioprio_set, sys_ioprio_set), // 442 ++ LINX_(__NR_ioprio_get, sys_ioprio_get), // 443 ++ LINX_(__NR_inotify_init, sys_inotify_init), // 444 ++ LINX_(__NR_inotify_add_watch, sys_inotify_add_watch), // 445 ++ LINX_(__NR_inotify_rm_watch, sys_inotify_rm_watch), // 446 ++ GENX_(__NR_fdatasync, sys_fdatasync), // 447 ++ // _____(__NR_kexec_load, sys_unknow), // 448 ++ // _____(__NR_migrate_pages, sys_unknow), // 449 ++ LINXY(__NR_openat, sys_openat), // 450 ++ LINX_(__NR_mkdirat, sys_mkdirat), // 451 ++ LINX_(__NR_mknodat, sys_mknodat), // 452 ++ LINX_(__NR_fchownat, sys_fchownat), // 453 ++ LINX_(__NR_futimesat, sys_futimesat), // 454 ++ PLAXY(__NR_fstatat64, sys_fstatat64), // 455 ++ LINX_(__NR_unlinkat, sys_unlinkat), // 456 ++ LINX_(__NR_renameat, sys_renameat), // 457 ++ LINX_(__NR_linkat, sys_linkat), // 458 ++ LINX_(__NR_symlinkat, sys_symlinkat), // 459 ++ LINX_(__NR_readlinkat, sys_readlinkat), // 460 ++ LINX_(__NR_fchmodat, sys_fchmodat), // 461 ++ LINX_(__NR_faccessat, sys_faccessat), // 462 ++ LINXY(__NR_pselect6, sys_pselect6), // 463 ++ LINXY(__NR_ppoll, sys_ppoll), // 464 ++ LINX_(__NR_unshare, sys_unshare), // 465 ++ LINX_(__NR_set_robust_list, sys_set_robust_list), // 466 ++ LINXY(__NR_get_robust_list, sys_get_robust_list), // 467 ++ LINX_(__NR_splice, sys_splice), // 468 ++ LINX_(__NR_sync_file_range, sys_sync_file_range), // 469 ++ LINX_(__NR_tee, sys_tee), // 470 ++ PLAX_(__NR_vmsplice, sys_vmsplice), // 471 ++ LINXY(__NR_move_pages, sys_move_pages), // 472 ++ LINXY(__NR_getcpu, sys_getcpu), // 473 ++ LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 474 ++ LINX_(__NR_utimensat, sys_utimensat), // 475 ++ LINXY(__NR_signalfd, sys_signalfd), // 476 ++ GENX_(__NR_timerfd, sys_ni_syscall), // 477 ++ LINXY(__NR_eventfd, sys_eventfd), // 478 ++ LINXY(__NR_recvmmsg, sys_recvmmsg), // 479 ++ LINX_(__NR_fallocate, sys_fallocate), // 480 ++ LINXY(__NR_timerfd_create, sys_timerfd_create), // 481 ++ LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 483 ++ LINXY(__NR_timerfd_settime, sys_timerfd_settime), // 482 ++ LINXY(__NR_signalfd4, sys_signalfd4), // 484 ++ LINXY(__NR_eventfd2, sys_eventfd2), // 485 ++ LINXY(__NR_epoll_create1, sys_epoll_create1), // 486 ++ LINXY(__NR_dup3, sys_dup3), // 487 ++ LINXY(__NR_pipe2, sys_pipe2), // 488 ++ LINX_(__NR_inotify_init1, sys_inotify_init1), // 489 ++ LINXY(__NR_preadv, sys_preadv), // 490 ++ LINX_(__NR_pwritev, sys_pwritev), // 491 ++ LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo), // 492 ++ LINXY(__NR_perf_event_open, sys_perf_event_open), // 493 ++ LINXY(__NR_fanotify_init, sys_fanotify_init), // 494 ++ LINX_(__NR_fanotify_mark, sys_fanotify_mark), // 495 ++ LINXY(__NR_prlimit64, sys_prlimit64), // 496 ++ LINXY(__NR_name_to_handle_at, sys_name_to_handle_at), // 497 ++ LINXY(__NR_open_by_handle_at, sys_open_by_handle_at), // 498 ++ LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 499 ++ LINX_(__NR_syncfs, sys_syncfs), // 500 ++ LINX_(__NR_setns, sys_setns), // 501 ++ LINXY(__NR_accept4, sys_accept4), // 502 ++ LINXY(__NR_sendmmsg, sys_sendmmsg), // 503 ++ LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 504 ++ LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 505 ++ LINX_(__NR_kcmp, sys_kcmp), // 506 ++ LINX_(__NR_finit_module, sys_finit_module), // 507 ++ LINX_(__NR_sched_setattr, sys_sched_setattr), // 508 ++ LINXY(__NR_sched_getattr, sys_sched_getattr), // 509 ++ LINX_(__NR_renameat2, sys_renameat2), // 510 ++ LINXY(__NR_getrandom, sys_getrandom), // 511 ++ LINXY(__NR_memfd_create, sys_memfd_create), // 512 ++ LINX_(__NR_execveat, sys_execveat), // 513 ++ // _____(__NR_seccomp, sys_unknow), // 514 ++ LINX_(__NR_copy_file_range, sys_copy_file_range), // 515 ++ LINXY(__NR_preadv2, sys_preadv2), // 516 ++ LINX_(__NR_pwritev2, sys_pwritev2), // 517 ++ LINXY(__NR_statx, sys_statx) // 518 ++}; ++ ++SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) ++{ ++ const UInt syscall_main_table_size ++ = sizeof(syscall_main_table) / sizeof(syscall_main_table[0]); ++ ++ /* Is it in the contiguous initial section of the table? */ ++ if (sysno < syscall_main_table_size) { ++ SyscallTableEntry* sys = &syscall_main_table[sysno]; ++ if (sys->before == NULL) ++ return NULL; /* no entry */ ++ else ++ return sys; ++ } ++ ++ /* Can't find a wrapper */ ++ return NULL; ++} ++ ++#endif /* defined(VGP_sw64_linux) */ ++ ++/*--------------------------------------------------------------------*/ ++/*--- end syswrap-sw64-linux.c ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/coregrind/m_trampoline.S b/coregrind/m_trampoline.S +index da9697232..0ba6fb849 100644 +--- a/coregrind/m_trampoline.S ++++ b/coregrind/m_trampoline.S +@@ -1520,6 +1520,67 @@ VG_(trampoline_stuff_end): + # undef UD2_1024 + # undef UD2_PAGE + ++/*---------------------- sw64-linux ----------------------*/ ++#else ++#if defined(VGP_sw64_linux) ++ ++.global VG_(trampoline_stuff_start) ++VG_(trampoline_stuff_start): ++ ++/* ref: glibc-2.28-sw/sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S */ ++.global VG_(sw64_linux_SUBST_FOR_rt_sigreturn) ++VG_(sw64_linux_SUBST_FOR_rt_sigreturn): ++ mov $30, $16 ++ ldi $0,__NR_rt_sigreturn ++ sys_call 0x83 ++ nop ++ .long 0 /*illegal insn*/ ++ ++/* There's no particular reason that this needs to be handwritten ++ assembly, but since that's what this file contains, here's a ++ simple index() and strlen() implementations. ++*/ ++ ++.set noat ++.set noreorder ++ ++.global VG_(sw64_linux_REDIR_FOR_index) ++.type VG_(sw64_linux_REDIR_FOR_index), @function ++VG_(sw64_linux_REDIR_FOR_index): ++ mov $16, $0 /* current pos */ ++ and $17, 0xff, $17 /* target character */ ++1: ++ ldbu $1, 0($0) ++ cmpeq $1, $17, $2 ++ bne $2, 3f /* found */ ++ beq $1, 2f /* not found */ ++ ldi $0, 1($0) ++ br $31, 1b /* loop */ ++2: ++ mov $31, $0 ++3: ++ ret $31, ($26), 1 ++ ++.size VG_(sw64_linux_REDIR_FOR_index), .-VG_(sw64_linux_REDIR_FOR_index) ++ ++.global VG_(sw64_linux_REDIR_FOR_strlen) ++.type VG_(sw64_linux_REDIR_FOR_strlen), @function ++VG_(sw64_linux_REDIR_FOR_strlen): ++ mov $16, $0 /* current pos */ ++1: ++ ldbu $1, 0($0) ++ beq $1, 2f /* return */ ++ ldi $0, 1($0) ++ br $31, 1b /* loop */ ++2: ++ subl $0, $16, $0 ++ ret $31, ($26), 1 ++ ++.size VG_(sw64_linux_REDIR_FOR_strlen), .-VG_(sw64_linux_REDIR_FOR_strlen) ++ ++.global VG_(trampoline_stuff_end) ++VG_(trampoline_stuff_end): ++ + /*---------------- x86-solaris ----------------*/ + #else + #if defined(VGP_x86_solaris) +@@ -1699,6 +1760,74 @@ VG_(amd64_solaris_REDIR_FOR_strlen): + .global VG_(trampoline_stuff_end) + VG_(trampoline_stuff_end): + ++/*---------------------- sw_64-linux ----------------------*/ ++#else ++#if defined(VGP_sw_64_linux) ++ ++# define UD2_16 trap ; trap ; trap; trap ++# define UD2_64 UD2_16 ; UD2_16 ; UD2_16 ; UD2_16 ++# define UD2_256 UD2_64 ; UD2_64 ; UD2_64 ; UD2_64 ++# define UD2_1024 UD2_256 ; UD2_256 ; UD2_256 ; UD2_256 ++# define UD2_PAGE UD2_1024 ; UD2_1024 ; UD2_1024 ; UD2_1024 ++ ++.global VG_(trampoline_stuff_start) ++VG_(trampoline_stuff_start): ++ ++.global VG_(sw_64_linux_SUBST_FOR_rt_sigreturn) ++VG_(sw_64_linux_SUBST_FOR_rt_sigreturn): ++ ldi $16,__NR_rt_sigreturn($31) ++ sys_call 0x83 ++ nop ++ .long 0 /*illegal insn*/ ++ ++/* There's no particular reason that this needs to be handwritten ++ assembly, but since that's what this file contains, here's a ++ simple index() and strlen() implementations. ++*/ ++.set noreorder ++ ++.global VG_(sw_64_linux_REDIR_FOR_index) ++ .type VG_(sw_64_linux_REDIR_FOR_index), @function ++ VG_(sw_64_linux_REDIR_FOR_index): ++ mov $16, $18 ++ ldl $1, 0($16) ++ cmpeq $17,$1,$2 ++ beq $2, index_end ++ ++index_loop: ++ addl $18,1,$18 ++ ldl $1, 0($18) ++ cmpeq $17,$1,$2 ++ bne $2, index_loop ++ mov $18, $0 ++ ret $31,($26),1 ++index_end: ++ ldi $0,0($31) ++ ret $31,($26),1 ++.size VG_(sw_64_linux_REDIR_FOR_index), .-VG_(sw_64_linux_REDIR_FOR_index) ++ ++.global VG_(sw_64_linux_REDIR_FOR_strlen) ++ .type VG_(sw_64_linux_REDIR_FOR_strlen), @function ++ VG_(sw_64_linux_REDIR_FOR_strlen): ++ ++ ldl $1, 0($16) ++ beq $1, end ++ ldi $0, 0($31) ++loop: ++ addl $0,1,$0 ++ addl $16,1,$16 ++ ldl $1, 0($16) ++ bne $1, loop ++ ret $31,($26),1 ++end: ++ ldi $0,0($31) ++ ret $31,($26),1 ++ ++.size VG_(sw_64_linux_REDIR_FOR_strlen), .-VG_(sw_64_linux_REDIR_FOR_strlen) ++ ++.global VG_(trampoline_stuff_end) ++VG_(trampoline_stuff_end): ++ + /*---------------- unknown ----------------*/ + #else + # error Unknown platform +@@ -1719,6 +1848,8 @@ VG_(trampoline_stuff_end): + #endif + #endif + #endif ++#endif ++#endif + + /* Let the linker know we don't need an executable stack */ + MARK_STACK_NO_EXEC +diff --git a/coregrind/m_translate.c b/coregrind/m_translate.c +index 8ae06d2a6..0d0d1c2ca 100644 +--- a/coregrind/m_translate.c ++++ b/coregrind/m_translate.c +@@ -1363,6 +1363,13 @@ Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRSB* bb ) + VgCallbackClosure* closure = (VgCallbackClosure*)closureV; + Int offB_GPR25 = offsetof(VexGuestMIPS64State, guest_r25); + addStmtToIRSB(bb, IRStmt_Put(offB_GPR25, mkU64(closure->readdr))); ++ // r27 needs to be set to point to the start of the redirected function. ++ // see also in coregrind/m_main.c:2451 ++# endif ++# if defined(VGP_sw64_linux) ++ VgCallbackClosure* closure = (VgCallbackClosure*)closureV; ++ Int offB_GPR27 = offsetof(VexGuestSW64State, guest_r27); ++ addStmtToIRSB(bb, IRStmt_Put(offB_GPR27, mkU64(closure->readdr))); + # endif + # if defined(VG_PLAT_USES_PPCTOC) + { VgCallbackClosure* closure = (VgCallbackClosure*)closureV; +@@ -1423,6 +1430,10 @@ Bool mk_preamble__set_NRADDR_to_nraddr ( void* closureV, IRSB* bb ) + Int offB_GPR25 = offsetof(VexGuestMIPS64State, guest_r25); + addStmtToIRSB(bb, IRStmt_Put(offB_GPR25, mkU64(closure->readdr))); + # endif ++# if defined(VGP_sw64_linux) ++ Int offB_GPR27 = offsetof(VexGuestSW64State, guest_r27); ++ addStmtToIRSB(bb, IRStmt_Put(offB_GPR27, mkU64(closure->readdr))); ++# endif + # if defined(VG_PLAT_USES_PPCTOC) + addStmtToIRSB( + bb, +@@ -1582,7 +1593,7 @@ Bool VG_(translate) ( ThreadId tid, + tid, "(translator)", addr, 1 ); + + /* If doing any code printing, print a basic block start marker */ +- if (VG_(clo_trace_flags) || debugging_translation) { ++ if (VG_(clo_trace_flags) || debugging_translation/*debug logger */) { + const HChar* objname = "UNKNOWN_OBJECT"; + OffT objoff = 0; + const DiEpoch ep = VG_(current_DiEpoch)(); +@@ -1796,6 +1807,7 @@ Bool VG_(translate) ( ThreadId tid, + vta.needs_self_check = needs_self_check; + vta.preamble_function = preamble_fn; + vta.traceflags = verbosity; ++ vta.dump_expansion_ratio = VG_(clo_dump_expansion_ratio); + vta.sigill_diag = VG_(clo_sigill_diag); + vta.addProfInc = VG_(clo_profyle_sbs) && kind != T_NoRedir; + +diff --git a/coregrind/m_vki.c b/coregrind/m_vki.c +index 0cc1882a1..0f2bb59e9 100644 +--- a/coregrind/m_vki.c ++++ b/coregrind/m_vki.c +@@ -43,7 +43,7 @@ + #if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \ + || defined(VGP_ppc64le_linux) || defined(VGP_arm64_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_nanomips_linux) ++ || defined(VGP_nanomips_linux) || defined(VGP_sw64_linux) + unsigned long VKI_PAGE_SHIFT = 12; + unsigned long VKI_PAGE_SIZE = 1UL << 12; + #endif +diff --git a/coregrind/pub_core_aspacemgr.h b/coregrind/pub_core_aspacemgr.h +index b867108a2..ecd6a1691 100644 +--- a/coregrind/pub_core_aspacemgr.h ++++ b/coregrind/pub_core_aspacemgr.h +@@ -335,7 +335,8 @@ extern Bool VG_(am_relocate_nooverlap_client)( /*OUT*/Bool* need_discard, + #if defined(VGP_ppc32_linux) \ + || defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux) \ + || defined(VGP_mips32_linux) || defined(VGP_mips64_linux) \ +- || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) ++ || defined(VGP_arm64_linux) || defined(VGP_nanomips_linux) \ ++ || defined(VGP_sw64_linux) + # define VG_STACK_GUARD_SZB 65536 // 1 or 16 pages + #else + # define VG_STACK_GUARD_SZB 8192 // 2 pages +diff --git a/coregrind/pub_core_basics.h b/coregrind/pub_core_basics.h +index abc5a066a..d8d779763 100644 +--- a/coregrind/pub_core_basics.h ++++ b/coregrind/pub_core_basics.h +@@ -102,6 +102,11 @@ typedef + ULong r31; /* Return address of the last subroutine call */ + ULong r28; + } MIPS64; ++ struct { ++ ULong r15; /* fp */ ++ ULong r26; /* ra */ ++ ULong r29; /* gp */ ++ } SW64; + } misc; + } + UnwindStartRegs; +diff --git a/coregrind/pub_core_debuginfo.h b/coregrind/pub_core_debuginfo.h +index 938ed00cc..0f9890825 100644 +--- a/coregrind/pub_core_debuginfo.h ++++ b/coregrind/pub_core_debuginfo.h +@@ -128,6 +128,10 @@ typedef + Addr f4; Addr f5; Addr f6; Addr f7; } + D3UnwindRegs; + #elif defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips) ++typedef ++ struct { Addr pc; Addr sp; Addr fp; Addr ra; } ++ D3UnwindRegs; ++#elif defined(VGA_sw64) + typedef + struct { Addr pc; Addr sp; Addr fp; Addr ra; } + D3UnwindRegs; +diff --git a/coregrind/pub_core_initimg.h b/coregrind/pub_core_initimg.h +index cfbd41f8b..7718b9885 100644 +--- a/coregrind/pub_core_initimg.h ++++ b/coregrind/pub_core_initimg.h +@@ -58,7 +58,7 @@ IIFinaliseImageInfo VG_(ii_create_image)( IICreateImageInfo, + starting values. This is handed the IIFinaliseImageInfo created by + VG_(ii_create_image). */ + extern +-void VG_(ii_finalise_image)( IIFinaliseImageInfo ); ++void VG_(ii_finalise_image)( IIFinaliseImageInfo, IICreateImageInfo ); + + /* Note that both IICreateImageInfo and IIFinaliseImageInfo are + OS-specific. We now go on to give instantiations of them +diff --git a/coregrind/pub_core_machine.h b/coregrind/pub_core_machine.h +index a9b7dd8b1..e9319ae88 100644 +--- a/coregrind/pub_core_machine.h ++++ b/coregrind/pub_core_machine.h +@@ -126,6 +126,11 @@ + # define VG_ELF_MACHINE EM_NANOMIPS + # define VG_ELF_CLASS ELFCLASS32 + # undef VG_PLAT_USES_PPCTOC ++#elif defined(VGP_sw64_linux) ++# define VG_ELF_DATA2XXX ELFDATA2LSB ++# define VG_ELF_MACHINE EM_SW_64 ++# define VG_ELF_CLASS ELFCLASS64 ++# undef VG_PLAT_USES_PPCTOC + #else + # error Unknown platform + #endif +@@ -163,6 +168,10 @@ + # define VG_INSTR_PTR guest_PC + # define VG_STACK_PTR guest_r29 + # define VG_FRAME_PTR guest_r30 ++#elif defined(VGA_sw64) ++# define VG_INSTR_PTR guest_PC ++# define VG_STACK_PTR guest_r30 ++# define VG_FRAME_PTR guest_r15 + #else + # error Unknown arch + #endif +diff --git a/coregrind/pub_core_mallocfree.h b/coregrind/pub_core_mallocfree.h +index b5922ca50..61dcaf435 100644 +--- a/coregrind/pub_core_mallocfree.h ++++ b/coregrind/pub_core_mallocfree.h +@@ -83,6 +83,7 @@ typedef Int ArenaId; + defined(VGP_x86_darwin) || \ + defined(VGP_amd64_darwin) || \ + defined(VGP_arm64_linux) || \ ++ defined(VGP_sw64_linux) || \ + defined(VGP_amd64_solaris) + # define VG_MIN_MALLOC_SZB 16 + #else +diff --git a/coregrind/pub_core_options.h b/coregrind/pub_core_options.h +index e949311af..d1d1742da 100644 +--- a/coregrind/pub_core_options.h ++++ b/coregrind/pub_core_options.h +@@ -188,6 +188,8 @@ extern ULong VG_(clo_profyle_interval); + extern Int VG_(clo_trace_notbelow); + /* DEBUG: if tracing codegen, be quiet after this bb */ + extern Int VG_(clo_trace_notabove); ++/* DEBUG: print register after sched, defualt: NO */ ++extern Int VG_(clo_trace_reg); + /* DEBUG: print system calls? default: NO */ + extern Bool VG_(clo_trace_syscalls); + /* DEBUG: print signal details? default: NO */ +@@ -204,6 +206,8 @@ extern Bool VG_(clo_debug_dump_syms); + extern Bool VG_(clo_debug_dump_line); + /* DEBUG: mimic /usr/bin/readelf --debug-dump=frames? default: NO */ + extern Bool VG_(clo_debug_dump_frames); ++/* Show instruction expansion ratio. default: NO */ ++extern Bool VG_(clo_dump_expansion_ratio); + /* DEBUG: print redirection details? default: NO */ + extern Bool VG_(clo_trace_redir); + /* Enable fair scheduling on multicore systems? default: NO */ +diff --git a/coregrind/pub_core_scheduler.h b/coregrind/pub_core_scheduler.h +index d74eb0629..f8e5bf96a 100644 +--- a/coregrind/pub_core_scheduler.h ++++ b/coregrind/pub_core_scheduler.h +@@ -110,6 +110,9 @@ extern void VG_(force_vgdb_poll) ( void ); + /* Stats ... */ + extern void VG_(print_scheduler_stats) ( void ); + ++/* States */ ++extern void VG_(print_guest_state) ( void * vex_ptr ); ++ + /* If False, a fault is Valgrind-internal (ie, a bug) */ + extern Bool VG_(in_generated_code); + +diff --git a/coregrind/pub_core_syscall.h b/coregrind/pub_core_syscall.h +index 6c4f82591..6709e8f9b 100644 +--- a/coregrind/pub_core_syscall.h ++++ b/coregrind/pub_core_syscall.h +@@ -105,6 +105,7 @@ extern SysRes VG_(mk_SysRes_mips32_linux)( UWord v0, UWord v1, + extern SysRes VG_(mk_SysRes_mips64_linux)( ULong v0, ULong v1, + ULong a3 ); + extern SysRes VG_(mk_SysRes_nanomips_linux)( UWord a0); ++extern SysRes VG_(mk_SysRes_sw64_linux)( ULong v0, ULong r19, ULong r20 ); + extern SysRes VG_(mk_SysRes_x86_solaris) ( Bool isErr, UInt val, UInt val2 ); + extern SysRes VG_(mk_SysRes_amd64_solaris) ( Bool isErr, ULong val, ULong val2 ); + extern SysRes VG_(mk_SysRes_Error) ( UWord val ); +diff --git a/coregrind/pub_core_trampoline.h b/coregrind/pub_core_trampoline.h +index 54c575a72..42d6f88a2 100644 +--- a/coregrind/pub_core_trampoline.h ++++ b/coregrind/pub_core_trampoline.h +@@ -171,6 +171,12 @@ extern Char* VG_(nanomips_linux_REDIR_FOR_index)( const Char*, Int ); + extern UInt VG_(nanomips_linux_REDIR_FOR_strlen)( void* ); + #endif + ++#if defined(VGP_sw64_linux) ++extern Addr VG_(sw64_linux_SUBST_FOR_rt_sigreturn); ++extern Char* VG_(sw64_linux_REDIR_FOR_index)( const Char*, Int ); ++extern UInt VG_(sw64_linux_REDIR_FOR_strlen)( void* ); ++#endif ++ + #if defined(VGP_x86_solaris) + extern SizeT VG_(x86_solaris_REDIR_FOR_strcmp)(const HChar *, const HChar *); + extern SizeT VG_(x86_solaris_REDIR_FOR_strlen)(const HChar *); +diff --git a/coregrind/pub_core_transtab.h b/coregrind/pub_core_transtab.h +index 6cc11f658..95152ebff 100644 +--- a/coregrind/pub_core_transtab.h ++++ b/coregrind/pub_core_transtab.h +@@ -81,7 +81,8 @@ static inline UWord VG_TT_FAST_HASH ( Addr guest ) { + } + + #elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ +- || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64) ++ || defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_arm64) \ ++ || defined(VGA_sw64) + static inline UWord VG_TT_FAST_HASH ( Addr guest ) { + // Instructions are 4-byte aligned. + UWord merged = ((UWord)guest) >> 2; +diff --git a/coregrind/pub_core_transtab_asm.h b/coregrind/pub_core_transtab_asm.h +index 8b585f17d..e4761c2e7 100644 +--- a/coregrind/pub_core_transtab_asm.h ++++ b/coregrind/pub_core_transtab_asm.h +@@ -83,7 +83,7 @@ + #if defined(VGA_amd64) || defined(VGA_arm64) \ + || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ + || (defined(VGA_mips64) && defined(VGABI_64)) \ +- || defined(VGA_s390x) ++ || defined(VGA_s390x) || defined(VGA_sw64) + // And all other 64-bit hosts + # define VG_FAST_CACHE_SET_BITS 6 + // These FCS_{g,h}{0,1,2,3} are the values of +diff --git a/coregrind/vgdb-invoker-ptrace.c b/coregrind/vgdb-invoker-ptrace.c +index 78a6a168c..7cce16491 100644 +--- a/coregrind/vgdb-invoker-ptrace.c ++++ b/coregrind/vgdb-invoker-ptrace.c +@@ -874,6 +874,9 @@ Bool invoker_invoke_gdbserver (pid_t pid) + sp = p[29]; + #elif defined(VGA_mips64) + sp = user_mod.regs[29]; ++#elif defined(VGA_sw64) ++ //user defined in sys/user.h ++ sp = user_mod.regs[30]; + #else + I_die_here : (sp) architecture missing in vgdb-invoker-ptrace.c + #endif +@@ -961,6 +964,8 @@ Bool invoker_invoke_gdbserver (pid_t pid) + + #elif defined(VGA_mips64) + assert(0); // cannot vgdb a 32 bits executable with a 64 bits exe ++#elif defined(VGA_sw64) ++ assert(0); // cannot vgdb a 32 bits executable with a 64 bits exe + #else + I_die_here : architecture missing in vgdb-invoker-ptrace.c + #endif +@@ -1068,6 +1073,8 @@ Bool invoker_invoke_gdbserver (pid_t pid) + user_mod.regs[31] = bad_return; + user_mod.regs[34] = shared64->invoke_gdbserver; + user_mod.regs[25] = shared64->invoke_gdbserver; ++#elif defined(VGA_sw64) ++ /* TODO(Shaohua): SW_NOT_COMPLETE */ + #else + I_die_here: architecture missing in vgdb-invoker-ptrace.c + #endif +diff --git a/drd/drd_bitmap.h b/drd/drd_bitmap.h +index 3b71d749a..7f8cea5dd 100644 +--- a/drd/drd_bitmap.h ++++ b/drd/drd_bitmap.h +@@ -140,7 +140,8 @@ Addr make_address(const UWord a1, const UWord a0) + #define BITS_PER_BITS_PER_UWORD 5 + #elif defined(VGA_amd64) || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ + || defined(VGA_s390x) || (defined(VGA_mips64) && !defined(VGABI_N32)) \ +- || defined(VGA_arm64) ++ || defined(VGA_arm64) || defined(VGA_tilegx) || defined(VGA_sw64) ++/* TODO(Shaohua): SW_NOT_COMPLETE */ + #define BITS_PER_BITS_PER_UWORD 6 + #else + #error Unknown platform. +diff --git a/drd/drd_load_store.c b/drd/drd_load_store.c +index fba1dac71..3665b3fc3 100644 +--- a/drd/drd_load_store.c ++++ b/drd/drd_load_store.c +@@ -53,6 +53,8 @@ + #define STACK_POINTER_OFFSET OFFSET_mips32_r29 + #elif defined(VGA_mips64) + #define STACK_POINTER_OFFSET OFFSET_mips64_r29 ++#elif defined(VGA_sw64) ++#define STACK_POINTER_OFFSET OFFSET_sw64_r30 + #else + #error Unknown architecture. + #endif +diff --git a/drd/drd_main.c b/drd/drd_main.c +index 2161e0316..588cc4fd5 100644 +--- a/drd/drd_main.c ++++ b/drd/drd_main.c +@@ -459,6 +459,21 @@ static void DRD_(suppress_relocation_conflicts)(const Addr a, const SizeT len) + DRD_(start_suppression)(avma, avma + size, ".plt"); + } + ++ /* ++ * Same as above, for some architecture (e.g. sw_64) place some ++ * global variable in .sbss instead of .bss ++ */ ++ avma = VG_(DebugInfo_get_sbss_avma)(di); ++ size = VG_(DebugInfo_get_sbss_size)(di); ++ tl_assert((avma && size) || (avma == 0 && size == 0)); ++ if (size > 0 && ++ VG_(strcmp)(VG_(DebugInfo_get_soname)(di), "libpthread.so.0") == 0) { ++ if (trace_sectsuppr) ++ VG_(dmsg)("Suppressing .sbss @ 0x%lx size %lu\n", avma, size); ++ tl_assert(VG_(DebugInfo_sect_kind)(NULL, avma) == Vg_SectBSS); ++ DRD_(start_suppression)(avma, avma + size, ".sbss"); ++ } ++ + avma = VG_(DebugInfo_get_gotplt_avma)(di); + size = VG_(DebugInfo_get_gotplt_size)(di); + tl_assert((avma && size) || (avma == 0 && size == 0)); +diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am +index 7ea83cbf7..04feb1f6f 100755 +--- a/drd/tests/Makefile.am ++++ b/drd/tests/Makefile.am +@@ -309,6 +309,7 @@ EXTRA_DIST = \ + tc04_free_lock.stderr.exp-x86 \ + tc04_free_lock.stderr.exp-ppc \ + tc04_free_lock.stderr.exp-s390 \ ++ tc04_free_lock.stderr.exp-sw64 \ + tc04_free_lock.vgtest \ + tc05_simple_race.stderr.exp \ + tc05_simple_race.vgtest \ +@@ -327,6 +328,7 @@ EXTRA_DIST = \ + tc09_bad_unlock.stderr.exp-solaris \ + tc09_bad_unlock.stderr.exp-freebsd \ + tc09_bad_unlock.stderr.exp-freebsd-clang \ ++ tc09_bad_unlock.stderr.exp-sw64 \ + tc09_bad_unlock.vgtest \ + tc10_rec_lock.stderr.exp \ + tc10_rec_lock.vgtest \ +diff --git a/drd/tests/tc04_free_lock.stderr.exp-sw64 b/drd/tests/tc04_free_lock.stderr.exp-sw64 +new file mode 100644 +index 000000000..a22ea5ee9 +--- /dev/null ++++ b/drd/tests/tc04_free_lock.stderr.exp-sw64 +@@ -0,0 +1,26 @@ ++ ++Destroying locked mutex: mutex 0x........, recursion count 1, owner 1. ++ at 0x........: free (vg_replace_malloc.c:...) ++ by 0x........: main (tc04_free_lock.c:24) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: main (tc04_free_lock.c:20) ++ ++Destroying locked mutex: mutex 0x........, recursion count 1, owner 1. ++ at 0x........: bar (tc04_free_lock.c:40) ++ by 0x........: (below main) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?) ++ by 0x........: bar (tc04_free_lock.c:38) ++ by 0x........: main (tc04_free_lock.c:26) ++ ++Destroying locked mutex: mutex 0x........, recursion count 1, owner 1. ++ at 0x........: foo (tc04_free_lock.c:49) ++ by 0x........: (below main) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: foo (tc04_free_lock.c:46) ++ by 0x........: main (tc04_free_lock.c:27) ++ ++ ++ERROR SUMMARY: 4 errors from 3 contexts (suppressed: 0 from 0) +diff --git a/drd/tests/tc09_bad_unlock.stderr.exp-sw64 b/drd/tests/tc09_bad_unlock.stderr.exp-sw64 +new file mode 100644 +index 000000000..06e322b04 +--- /dev/null ++++ b/drd/tests/tc09_bad_unlock.stderr.exp-sw64 +@@ -0,0 +1,51 @@ ++ ++Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1. ++ at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:28) ++ by 0x........: main (tc09_bad_unlock.c:52) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:24) ++ by 0x........: main (tc09_bad_unlock.c:52) ++ ++Thread 2: ++Mutex not locked by calling thread: mutex 0x........, recursion count 1, owner 1. ++ at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) ++ by 0x........: child_fn (tc09_bad_unlock.c:12) ++ by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:32) ++ by 0x........: main (tc09_bad_unlock.c:52) ++ ++Thread 1: ++The object at address 0x........ is not a mutex. ++ at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:43) ++ by 0x........: main (tc09_bad_unlock.c:52) ++ ++Destroying locked mutex: mutex 0x........, recursion count 1, owner 1. ++ at 0x........: nearly_main (tc09_bad_unlock.c:48) ++ by 0x........: (below main) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:32) ++ by 0x........: main (tc09_bad_unlock.c:52) ++ ++--------------------- ++Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1. ++ at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:28) ++ by 0x........: main (tc09_bad_unlock.c:53) ++mutex 0x........ was first observed at: ++ at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:24) ++ by 0x........: main (tc09_bad_unlock.c:53) ++ ++The object at address 0x........ is not a mutex. ++ at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) ++ by 0x........: nearly_main (tc09_bad_unlock.c:43) ++ by 0x........: main (tc09_bad_unlock.c:53) ++ ++ ++ERROR SUMMARY: 8 errors from 6 contexts (suppressed: 0 from 0) +diff --git a/gdbserver_tests/Makefile.am b/gdbserver_tests/Makefile.am +index fbcb6596d..ccbfbd85e 100755 +--- a/gdbserver_tests/Makefile.am ++++ b/gdbserver_tests/Makefile.am +@@ -29,6 +29,7 @@ EXTRA_DIST = \ + hgtls.stderr.exp \ + hgtls.stdinB.gdb \ + hgtls.stdoutB.exp \ ++ hgtls.stdoutB.exp-sw64 \ + hgtls.vgtest \ + mcblocklistsearch.stderr.exp \ + mcblocklistsearch.stdinB.gdb \ +@@ -151,6 +152,7 @@ EXTRA_DIST = \ + nlvgdbsigqueue.stderr.exp \ + nlvgdbsigqueue.stdinB.gdb \ + nlvgdbsigqueue.stdoutB.exp \ ++ nlvgdbsigqueue.stdoutB.exp-sw64 \ + nlvgdbsigqueue.stdoutB.exp-solaris1 \ + nlvgdbsigqueue.stdoutB.exp-solaris2 + +diff --git a/gdbserver_tests/hgtls.stdinB.gdb b/gdbserver_tests/hgtls.stdinB.gdb +index 2541e9ea4..db165fc97 100644 +--- a/gdbserver_tests/hgtls.stdinB.gdb ++++ b/gdbserver_tests/hgtls.stdinB.gdb +@@ -34,4 +34,6 @@ continue + end + # continue till the end + continue ++continue ++continue + quit +diff --git a/gdbserver_tests/hgtls.stdoutB.exp-sw64 b/gdbserver_tests/hgtls.stdoutB.exp-sw64 +new file mode 100644 +index 000000000..0b5c9ae46 +--- /dev/null ++++ b/gdbserver_tests/hgtls.stdoutB.exp-sw64 +@@ -0,0 +1,45 @@ ++Breakpoint 1 at 0x........: file tls.c, line 55. ++Continuing. ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test race tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test race tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++Continuing. ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++Continuing. ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test global tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test global tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test static_extern tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test static_extern tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_extern tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_extern tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_local tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_local tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_global tls_ip 0x........ ip 0x........ equal 1 ++Breakpoint 1, tls_ptr (p=0x........) at tls.c:55 ++55 int here = 0; ++test so_global tls_ip 0x........ ip 0x........ equal 1 ++Program exited normally. +diff --git a/gdbserver_tests/nlcontrolc.vgtest b/gdbserver_tests/nlcontrolc.vgtest +index 09edfcaba..3ae8eafed 100644 +--- a/gdbserver_tests/nlcontrolc.vgtest ++++ b/gdbserver_tests/nlcontrolc.vgtest +@@ -13,7 +13,7 @@ args: 1000000000 0 100000 BSBSBSBS 1 + vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-nlcontrolc + stderr_filter: filter_stderr + # Bug 338633 nlcontrol hangs on arm64 currently. +-prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/os_test solaris ++prereq: test -e gdb -a -f vgdb.invoker && ! ../tests/os_test solaris && ! ../tests/arch_test sw64 + progB: gdb + argsB: --quiet -l 60 --nx ./sleepers + stdinB: nlcontrolc.stdinB.gdb +diff --git a/gdbserver_tests/nlvgdbsigqueue.stderr.exp b/gdbserver_tests/nlvgdbsigqueue.stderr.exp +index 52b10c9db..b63a9a988 100644 +--- a/gdbserver_tests/nlvgdbsigqueue.stderr.exp ++++ b/gdbserver_tests/nlvgdbsigqueue.stderr.exp +@@ -3,7 +3,7 @@ Nulgrind, the minimal Valgrind tool + (action at startup) vgdb me ... + + +-loops/sleep_ms/burn/threads_spec/affinity: 1000000000 1000000000 1 BSBSBSBS 1 ++loops/sleep_ms/burn/threads_spec/affinity: 1000000000 0 100000 BSBSBSBS 1 + Brussels ready to sleep and/or burn + London ready to sleep and/or burn + Petaouchnok ready to sleep and/or burn +diff --git a/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-sw64 b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-sw64 +new file mode 100644 +index 000000000..eef4b2001 +--- /dev/null ++++ b/gdbserver_tests/nlvgdbsigqueue.stdoutB.exp-sw64 +@@ -0,0 +1,19 @@ ++continuing to have vgdb interrupted by simulate_control_c ++Continuing. ++Program received signal SIGTRAP, Trace/breakpoint trap. ++do_burn () at sleepers.c:40 ++40 for (i = 0; i < burn; i++) loopnr++; ++attachedwaitingforsigusr1 ++sending signal ++sending signal ++continuing to receive first SIGUSR1 ++Continuing. ++Program received signal SIGUSR1, User defined signal 1. ++do_burn () at sleepers.c:40 ++40 for (i = 0; i < burn; i++) loopnr++; ++continuing to receive second SIGUSR1 ++Continuing. ++Program received signal SIGTRAP, Trace/breakpoint trap. ++do_burn () at sleepers.c:40 ++40 for (i = 0; i < burn; i++) loopnr++; ++Kill the program being debugged? (y or n) [answered Y; input not from terminal] +diff --git a/gdbserver_tests/nlvgdbsigqueue.vgtest b/gdbserver_tests/nlvgdbsigqueue.vgtest +index 877568211..7b9437bdc 100644 +--- a/gdbserver_tests/nlvgdbsigqueue.vgtest ++++ b/gdbserver_tests/nlvgdbsigqueue.vgtest +@@ -3,7 +3,7 @@ + # vgdb must queue these signals and deliver them before PTRACE_DETACHing. + # sleepers is started with argument so that it will mostly sleep. + prog: sleepers +-args: 1000000000 1000000000 1 BSBSBSBS 1 ++args: 1000000000 0 100000 BSBSBSBS 1 + vgopts: --tool=none --vgdb=yes --vgdb-error=0 --vgdb-prefix=./vgdb-prefix-nlvgdbsigqueue + stderr_filter: filter_stderr + prereq: test -e gdb -a -f vgdb.invoker +diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am +index 5338ea4d6..139c15564 100755 +--- a/helgrind/tests/Makefile.am ++++ b/helgrind/tests/Makefile.am +@@ -125,6 +125,7 @@ EXTRA_DIST = \ + tc20_verifywrap.stderr.exp-mips32-b \ + tc20_verifywrap.stderr.exp-s390x \ + tc20_verifywrap.stderr.exp-solaris \ ++ tc20_verifywrap.stderr.exp-sw64 \ + tc21_pthonce.vgtest tc21_pthonce.stdout.exp tc21_pthonce.stderr.exp \ + tc22_exit_w_lock.vgtest tc22_exit_w_lock.stdout.exp \ + tc22_exit_w_lock.stderr.exp \ +diff --git a/helgrind/tests/annotate_hbefore.c b/helgrind/tests/annotate_hbefore.c +index 259d3b64c..3e7cb179c 100644 +--- a/helgrind/tests/annotate_hbefore.c ++++ b/helgrind/tests/annotate_hbefore.c +@@ -314,6 +314,37 @@ UWord do_acasW ( UWord* addr, UWord expected, UWord nyu ) + return success; + } + ++#elif defined(VGA_sw64) ++ ++// sw64 ++/* return 1 if success, 0 if failure */ ++UWord do_acasW ( UWord* addr, UWord expected, UWord nyu ) ++{ ++ UWord succ, cmp, prev; ++ ++ __asm__ __volatile__( ++ "0: lldl %[prev], 0(%[addr])\n" ++ " cmpeq %[prev], %[exp], %[cmp]\n" ++ " wr_f %[cmp]\n" ++ " mov %[nyu], %[succ]\n" ++ " lstl %[succ], 0(%[addr])\n" ++ " rd_f %[succ]\n" ++ " beq %[cmp], 1f\n" ++ " beq %[succ], 0b\n" ++ "1:\n" ++ : [succ] "=&r"(succ), ++ [prev] "=&r"(prev), ++ [cmp] "=&r"(cmp) ++ : [nyu] "r"(nyu), ++ [addr] "r"(addr), ++ [exp] "r"(expected) ++ : "memory" ++ ); ++ ++ assert(succ == 0 || succ == 1); ++ return succ; ++} ++ + #endif + + void atomic_incW ( UWord* w ) +diff --git a/helgrind/tests/tc07_hbl1.c b/helgrind/tests/tc07_hbl1.c +index 54297dee6..d2958377e 100644 +--- a/helgrind/tests/tc07_hbl1.c ++++ b/helgrind/tests/tc07_hbl1.c +@@ -18,6 +18,7 @@ + #undef PLAT_arm64_linux + #undef PLAT_s390x_linux + #undef PLAT_mips32_linux ++#undef PLAT_sw64_linux + #undef PLAT_x86_solaris + #undef PLAT_amd64_solaris + +@@ -47,6 +48,8 @@ + # define PLAT_mips32_linux 1 + #elif defined(__linux__) && defined(__nanomips__) + # define PLAT_nanomips_linux 1 ++#elif defined(__linux__) && defined(__sw_64__) ++# define PLAT_sw64_linux 1 + #elif defined(__sun__) && defined(__i386__) + # define PLAT_x86_solaris 1 + #elif defined(__sun__) && defined(__x86_64__) +@@ -131,6 +134,22 @@ + : /*out*/ : /*in*/ "r"(&(_lval)) \ + : /*trash*/ "$t0", "$t1", "memory" \ + ) ++#elif defined(PLAT_sw64_linux) ++# define INC(_lval,_lqual) \ ++ __asm__ __volatile__ ( \ ++ "0:\n" \ ++ " lldw $5, 0(%0)\n" \ ++ " ldi $8, 1\n" \ ++ " wr_f $8\n" \ ++ " addw $5, 1, $5\n" \ ++ " memb \n" \ ++ " lstw $5, 0(%0)\n" \ ++ " rd_f $5\n" \ ++ " beq $5, 0b\n" \ ++ : /*out*/ \ ++ : /*in*/ "r"(&(_lval)) \ ++ : /*trash*/ "$5", "$8", "memory" \ ++ ) + #else + # error "Fix Me for this platform" + #endif +diff --git a/helgrind/tests/tc08_hbl2.c b/helgrind/tests/tc08_hbl2.c +index c3a2ec794..e82c44cd4 100644 +--- a/helgrind/tests/tc08_hbl2.c ++++ b/helgrind/tests/tc08_hbl2.c +@@ -35,6 +35,7 @@ + #undef PLAT_s390x_linux + #undef PLAT_mips32_linux + #undef PLAT_mips64_linux ++#undef PLAT_sw64_linux + #undef PLAT_x86_solaris + #undef PLAT_amd64_solaris + +@@ -68,6 +69,8 @@ + #endif + #elif defined(__linux__) && defined(__nanomips__) + # define PLAT_nanomips_linux 1 ++#elif defined(__linux__) && defined(__sw_64__) ++# define PLAT_sw64_linux 1 + #elif defined(__sun__) && defined(__i386__) + # define PLAT_x86_solaris 1 + #elif defined(__sun__) && defined(__x86_64__) +@@ -151,6 +154,22 @@ + : /*out*/ : /*in*/ "r"(&(_lval)) \ + : /*trash*/ "$t0", "$t1", "memory" \ + ) ++#elif defined(PLAT_sw64_linux) ++# define INC(_lval,_lqual) \ ++ __asm__ __volatile__ ( \ ++ "0:\n" \ ++ " lldw $5, 0(%0)\n" \ ++ " ldi $8, 1\n" \ ++ " wr_f $8\n" \ ++ " addw $5, 1, $5\n" \ ++ " memb \n" \ ++ " lstw $5, 0(%0)\n" \ ++ " rd_f $5\n" \ ++ " beq $5, 0b\n" \ ++ : /*out*/ \ ++ : /*in*/ "r"(&(_lval)) \ ++ : /*trash*/ "$5", "$8", "memory" \ ++ ) + #else + # error "Fix Me for this platform" + #endif +diff --git a/helgrind/tests/tc11_XCHG.c b/helgrind/tests/tc11_XCHG.c +index f6ff1c984..44e425df8 100644 +--- a/helgrind/tests/tc11_XCHG.c ++++ b/helgrind/tests/tc11_XCHG.c +@@ -20,6 +20,7 @@ + #undef PLAT_arm_linux + #undef PLAT_s390x_linux + #undef PLAT_mips32_linux ++#undef PLAT_sw64_linux + #undef PLAT_x86_solaris + #undef PLAT_amd64_solaris + +@@ -49,6 +50,8 @@ + # define PLAT_mips32_linux 1 + #elif defined(__linux__) && defined(__nanomips__) + # define PLAT_nanomips_linux 1 ++#elif defined(__linux__) && defined(__sw_64__) ++# define PLAT_sw64_linux 1 + #elif defined(__sun__) && defined(__i386__) + # define PLAT_x86_solaris 1 + #elif defined(__sun__) && defined(__x86_64__) +@@ -146,6 +149,26 @@ + # define XCHG_M_R_with_redundant_LOCK(_addr,_lval) \ + XCHG_M_R(_addr,_lval) + ++#elif defined(PLAT_sw64_linux) ++# define XCHG_M_R(_addr,_lval) \ ++ __asm__ __volatile__( \ ++ "0:\n" \ ++ " lldw $5, 0(%1)\n" \ ++ " ldi $8, 1\n" \ ++ " wr_f $8\n" \ ++ " memb \n" \ ++ " lstw %0, 0(%1)\n" \ ++ " rd_f %0\n" \ ++ " beq %0, 0b\n" \ ++ " mov $5, %0\n" \ ++ : /*out*/ "+r"(_lval) \ ++ : /*in*/ "r"(&_addr) \ ++ : "$5", "$8", "memory" \ ++ ) ++ ++# define XCHG_M_R_with_redundant_LOCK(_addr,_lval) \ ++ XCHG_M_R(_addr,_lval) ++ + #else + # error "Unsupported architecture" + +diff --git a/helgrind/tests/tc20_verifywrap.stderr.exp-sw64 b/helgrind/tests/tc20_verifywrap.stderr.exp-sw64 +new file mode 100644 +index 000000000..90e746a40 +--- /dev/null ++++ b/helgrind/tests/tc20_verifywrap.stderr.exp-sw64 +@@ -0,0 +1,250 @@ ++ ++ ++ ++------ This is output for >= glibc 2.4 ------ ++ ++---------------- pthread_create/join ---------------- ++ ++---Thread-Announcement------------------------------------------ ++ ++Thread #x is the program's root thread ++ ++---Thread-Announcement------------------------------------------ ++ ++Thread #x was created ++ ... ++ by 0x........: pthread_create@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:86) ++ ++---------------------------------------------------------------- ++ ++Possible data race during write of size 2 at 0x........ by thread #x ++Locks held: none ++ at 0x........: main (tc20_verifywrap.c:88) ++ ++This conflicts with a previous write of size 2 by thread #x ++Locks held: none ++ at 0x........: racy_child (tc20_verifywrap.c:44) ++ by 0x........: mythread_wrapper (hg_intercepts.c:...) ++ ... ++ Location 0x........ is 0 bytes inside global var "unprotected" ++ declared at tc20_verifywrap.c:37 ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_join failed ++ with error code 11 (EDEADLK: Resource deadlock would occur) ++ at 0x........: pthread_join_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_join (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:93) ++ ++ ++---------------- pthread_mutex_lock et al ---------------- ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_init failed ++ with error code 45 (EOPNOTSUPP: Operation not supported on transport endpoint) ++ at 0x........: pthread_mutex_init (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:107) ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_mutex_destroy of a locked mutex ++ at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:117) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_destroy failed ++ with error code 16 (EBUSY: Device or resource busy) ++ at 0x........: mutex_destroy_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_destroy (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:117) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_lock failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: mutex_lock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_lock (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:123) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_trylock failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: mutex_trylock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_trylock (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:131) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_timedlock failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: mutex_timedlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:136) ++ ++---------------------------------------------------------------- ++ ++Thread #x unlocked an invalid lock at 0x........ ++ at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:140) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_mutex_unlock failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: mutex_unlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_mutex_unlock (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:140) ++ ++ ++---------------- pthread_cond_wait et al ---------------- ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_cond_{timed}wait called with un-held mutex ++ at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:162) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_cond_wait failed ++ with error code 1 (EPERM: Operation not permitted) ++ at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:162) ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread ++ at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:167) ++ ++ ++FIXME: can't figure out how to verify wrap of pthread_cond_signal ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread ++ at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:173) ++ ++ ++FIXME: can't figure out how to verify wrap of pthread_broadcast_signal ++ ++---------------------------------------------------------------- ++ ++Thread #x: pthread_cond_{timed}wait called with un-held mutex ++ at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:180) ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to pthread_cond_timedwait failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:180) ++ ++ ++---------------- pthread_rwlock_* ---------------- ++ ++---------------------------------------------------------------- ++ ++Thread #x unlocked a not-locked lock at 0x........ ++ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) ++ ... ++ by 0x........: main (tc20_verifywrap.c:194) ++ Lock at 0x........ was first observed ++ at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_init (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:193) ++ Location 0x........ is 0 bytes inside local var "rwl" ++ declared at tc20_verifywrap.c:57, in frame #x of thread x ++ ++ ++(1) no error on next line ++(2) no error on next line ++(3) ERROR on next line ++---------------------------------------------------------------- ++ ++Thread #x unlocked a not-locked lock at 0x........ ++ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) ++ ... ++ by 0x........: main (tc20_verifywrap.c:211) ++ Lock at 0x........ was first observed ++ at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_init (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:201) ++ Location 0x........ is 0 bytes inside local var "rwl2" ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ ++(4) no error on next line ++(5) no error on next line ++(6) no error on next line ++(7) no error on next line ++(8) ERROR on next line ++---------------------------------------------------------------- ++ ++Thread #x unlocked a not-locked lock at 0x........ ++ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) ++ ... ++ by 0x........: main (tc20_verifywrap.c:232) ++ Lock at 0x........ was first observed ++ at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) ++ by 0x........: pthread_rwlock_init (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:201) ++ Location 0x........ is 0 bytes inside local var "rwl2" ++ declared at tc20_verifywrap.c:58, in frame #x of thread x ++ ++ ++ ++---------------- pthread_spin_* ---------------- ++ ++ ++---------------- sem_* ---------------- ++ ++---------------------------------------------------------------- ++ ++Thread #x's call to sem_init failed ++ with error code 22 (EINVAL: Invalid argument) ++ at 0x........: sem_init_WRK (hg_intercepts.c:...) ++ by 0x........: sem_init@* (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:267) ++ ++ ++FIXME: can't figure out how to verify wrap of sem_destroy ++ ++---------------------------------------------------------------- ++ ++Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post ++ at 0x........: sem_wait_WRK (hg_intercepts.c:...) ++ by 0x........: sem_wait (hg_intercepts.c:...) ++ by 0x........: main (tc20_verifywrap.c:281) ++ ++ ++FIXME: can't figure out how to verify wrap of sem_post ++ ++ ++------------ dealloc of mem holding locks ------------ ++ ++---------------------------------------------------------------- ++ ++Thread #x: Exiting thread still holds 1 lock ++ ... ++ ++ ++ERROR SUMMARY: 22 errors from 22 contexts (suppressed: 0 from 0) +diff --git a/include/Makefile.am b/include/Makefile.am +index 972d394b8..059bc486c 100644 +--- a/include/Makefile.am ++++ b/include/Makefile.am +@@ -63,6 +63,7 @@ nobase_pkginclude_HEADERS = \ + vki/vki-posixtypes-mips32-linux.h \ + vki/vki-posixtypes-mips64-linux.h \ + vki/vki-posixtypes-nanomips-linux.h \ ++ vki/vki-posixtypes-sw64-linux.h \ + vki/vki-amd64-linux.h \ + vki/vki-arm64-linux.h \ + vki/vki-ppc32-linux.h \ +@@ -75,6 +76,7 @@ nobase_pkginclude_HEADERS = \ + vki/vki-mips32-linux.h \ + vki/vki-mips64-linux.h \ + vki/vki-nanomips-linux.h \ ++ vki/vki-sw64-linux.h \ + vki/vki-scnums-amd64-linux.h \ + vki/vki-scnums-arm64-linux.h \ + vki/vki-scnums-ppc32-linux.h \ +@@ -86,6 +88,7 @@ nobase_pkginclude_HEADERS = \ + vki/vki-scnums-mips32-linux.h \ + vki/vki-scnums-mips64-linux.h \ + vki/vki-scnums-nanomips-linux.h \ ++ vki/vki-scnums-sw64-linux.h \ + vki/vki-scnums-darwin.h \ + vki/vki-scnums-solaris.h \ + vki/vki-scnums-shared-linux.h \ +diff --git a/include/pub_tool_basics.h b/include/pub_tool_basics.h +index d22a42523..dbc461e37 100644 +--- a/include/pub_tool_basics.h ++++ b/include/pub_tool_basics.h +@@ -208,6 +208,7 @@ typedef + struct { + Bool _isError; + UWord _val; ++ UWord _valEx; + } + SysRes; + +@@ -321,6 +322,12 @@ static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) { + && sr1._isError == sr2._isError; + } + ++#if defined(VGP_sw64_linux) ++static inline UWord sr_ResEx ( SysRes sr ) { ++ return sr._isError ? 0 : sr._valEx; ++} ++#endif ++ + #elif defined(VGO_freebsd) + + static inline Bool sr_isError ( SysRes sr ) { +@@ -442,7 +449,8 @@ static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) { + + #if defined(VGA_x86) || defined(VGA_amd64) || defined (VGA_arm) \ + || ((defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips)) \ +- && defined (_MIPSEL)) || defined(VGA_arm64) || defined(VGA_ppc64le) ++ && defined (_MIPSEL)) || defined(VGA_arm64) || defined(VGA_ppc64le) \ ++ || defined(VGA_sw64) + # define VG_LITTLEENDIAN 1 + #elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_s390x) \ + || ((defined(VGA_mips32) || defined(VGA_mips64) || defined(VGA_nanomips)) \ +@@ -490,7 +498,8 @@ static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) { + || defined(VGA_ppc64be) || defined(VGA_ppc64le) \ + || defined(VGA_arm) || defined(VGA_s390x) \ + || defined(VGA_mips32) || defined(VGA_mips64) \ +- || defined(VGA_arm64) || defined(VGA_nanomips) ++ || defined(VGA_arm64) || defined(VGA_nanomips) \ ++ || defined(VGA_sw64) + # define VG_REGPARM(n) /* */ + #else + # error Unknown arch +diff --git a/include/pub_tool_debuginfo.h b/include/pub_tool_debuginfo.h +index 078c562b8..e0f85209a 100644 +--- a/include/pub_tool_debuginfo.h ++++ b/include/pub_tool_debuginfo.h +@@ -270,6 +270,8 @@ Addr VG_(DebugInfo_get_text_avma) ( const DebugInfo *di ); + SizeT VG_(DebugInfo_get_text_size) ( const DebugInfo *di ); + Addr VG_(DebugInfo_get_bss_avma) ( const DebugInfo *di ); + SizeT VG_(DebugInfo_get_bss_size) ( const DebugInfo *di ); ++Addr VG_(DebugInfo_get_sbss_avma) ( const DebugInfo *di ); ++SizeT VG_(DebugInfo_get_sbss_size) ( const DebugInfo *di ); + Addr VG_(DebugInfo_get_plt_avma) ( const DebugInfo *di ); + SizeT VG_(DebugInfo_get_plt_size) ( const DebugInfo *di ); + Addr VG_(DebugInfo_get_gotplt_avma) ( const DebugInfo *di ); +diff --git a/include/pub_tool_guest.h b/include/pub_tool_guest.h +index 08a72efac..fe6671e7d 100644 +--- a/include/pub_tool_guest.h ++++ b/include/pub_tool_guest.h +@@ -62,6 +62,9 @@ + #elif defined(VGA_mips64) + # include "libvex_guest_mips64.h" + typedef VexGuestMIPS64State VexGuestArchState; ++#elif defined(VGA_sw64) ++# include "libvex_guest_sw64.h" ++ typedef VexGuestSW64State VexGuestArchState; + #else + # error Unknown arch + #endif +diff --git a/include/pub_tool_machine.h b/include/pub_tool_machine.h +index 9bdd4f514..efeb3a395 100644 +--- a/include/pub_tool_machine.h ++++ b/include/pub_tool_machine.h +@@ -108,6 +108,12 @@ + # define VG_CLREQ_SZB 20 + # define VG_STACK_REDZONE_SZB 0 + ++#elif defined(VGP_sw64_linux) ++# define VG_MIN_INSTR_SZB 4 ++# define VG_MAX_INSTR_SZB 4 ++# define VG_CLREQ_SZB 20 ++# define VG_STACK_REDZONE_SZB 0 ++ + #else + # error Unknown platform + #endif +diff --git a/include/pub_tool_vkiscnums_asm.h b/include/pub_tool_vkiscnums_asm.h +index 14b483c4d..63b5fbd17 100644 +--- a/include/pub_tool_vkiscnums_asm.h ++++ b/include/pub_tool_vkiscnums_asm.h +@@ -74,6 +74,10 @@ + # include "vki/vki-scnums-shared-linux.h" + # include "vki/vki-scnums-mips64-linux.h" + ++#elif defined(VGP_sw64_linux) ++# include "vki/vki-scnums-shared-linux.h" ++# include "vki/vki-scnums-sw64-linux.h" ++ + #elif defined(VGP_x86_freebsd) || defined(VGP_amd64_freebsd) + # include "vki/vki-scnums-freebsd.h" + +diff --git a/include/valgrind.h.in b/include/valgrind.h.in +index aa0b43125..2b4a47754 100644 +--- a/include/valgrind.h.in ++++ b/include/valgrind.h.in +@@ -125,6 +125,7 @@ + #undef PLAT_mips32_linux + #undef PLAT_mips64_linux + #undef PLAT_nanomips_linux ++#undef PLAT_sw64_linux + #undef PLAT_x86_solaris + #undef PLAT_amd64_solaris + +@@ -169,6 +170,8 @@ + # define PLAT_mips32_linux 1 + #elif defined(__linux__) && defined(__nanomips__) + # define PLAT_nanomips_linux 1 ++#elif defined(__linux__) && defined(__sw_64__) ++# define PLAT_sw64_linux 1 + #elif defined(__sun) && defined(__i386__) + # define PLAT_x86_solaris 1 + #elif defined(__sun) && defined(__x86_64__) +@@ -1057,6 +1060,79 @@ typedef + + #endif /* PLAT_mips64_linux */ + ++/* ------------------------- sw64-linux ---------------- */ ++ ++#if defined(PLAT_sw64_linux) ++ ++typedef ++ struct { ++ unsigned long nraddr; /* where's the code? */ ++ } ++ OrigFn; ++ ++/* sll $31,3, $31 ++ * sll $31,13,$31 ++ * sll $31,29,$31 ++ * sll $31,19,$31 */ ++ /* write r31 means noop, others copied and modified from mips64 */ ++#define __SPECIAL_INSTRUCTION_PREAMBLE \ ++ "sll $31,3, $31; sll $31,13,$31\n\t" \ ++ "sll $31,29,$31; sll $31,19,$31\n\t" ++ ++#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ ++ _zzq_default, _zzq_request, \ ++ _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ ++ __extension__ \ ++ ({ volatile unsigned long int _zzq_args[6]; \ ++ volatile unsigned long int _zzq_result; \ ++ _zzq_args[0] = (unsigned long int)(_zzq_request); \ ++ _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ ++ _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ ++ _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ ++ _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ ++ _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ ++ __asm__ volatile("mov %1, $4\n\t" /*default*/ \ ++ "mov %2, $5\n\t" /*ptr*/ \ ++ __SPECIAL_INSTRUCTION_PREAMBLE \ ++ /* $4 = client_request ( $5 ) */ \ ++ "bis $6, $6, $6\n\t" \ ++ "mov $4, %0\n\t" /*result*/ \ ++ : "=r" (_zzq_result) \ ++ : "r" (_zzq_default), "r" (&_zzq_args[0]) \ ++ : "$4", "$5", "memory"); \ ++ _zzq_result; \ ++ }) ++ ++#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ ++ { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ ++ volatile unsigned long int __addr; \ ++ __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ ++ /* $4 = guest_NRADDR */ \ ++ "bis $7, $7, $7\n\t" \ ++ "mov $4, %0" /*result*/ \ ++ : "=r" (__addr) \ ++ : \ ++ : "$4"); \ ++ _zzq_orig->nraddr = __addr; \ ++ } ++ ++#define VALGRIND_CALL_NOREDIR_T9 \ ++ __SPECIAL_INSTRUCTION_PREAMBLE \ ++ /* branch-and-link-to-noredir r27 */ \ ++ "bis $8, $8, $8\n\t" \ ++ ".set macro\n\t" \ ++ "br $gp, 0f\n" \ ++ "0: ldgp $gp, 0($gp)\n\t" ++ ++#define VALGRIND_VEX_INJECT_IR() \ ++ do { \ ++ __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ ++ "bis $4, $4, $4\n\t" \ ++ ); \ ++ } while (0) ++ ++#endif /* PLAT_sw64_linux */ ++ + #if defined(PLAT_nanomips_linux) + + typedef +@@ -6603,6 +6679,443 @@ typedef + + #endif /* PLAT_mips64_linux */ + ++ ++/* ------------------------ sw64-linux ------------------------ */ ++ ++#if defined(PLAT_sw64_linux) ++ ++/* These regs are trashed by the hidden call. */ ++#define __CALLER_SAVED_REGS \ ++ "$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ ++ "$16", "$17", "$18", "$19", "$20", "$21", \ ++ "$22", "$23", "$24", "$25", \ ++ "$27", "$28" ++ ++/* These CALL_FN_ macros assume that on sw64-linux, ++ sizeof(long) == 8. */ ++ ++#define CALL_FN_W_v(lval, orig) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[1]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ __asm__ volatile( \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "0" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_W(lval, orig, arg1) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[2]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ __asm__ volatile( \ ++ "ldl $16, 8(%1)\n\t" /* arg1*/ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[3]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = _orig.nraddr; \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ __asm__ volatile( \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++ ++#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[4]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = _orig.nraddr; \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ __asm__ volatile( \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[5]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ __asm__ volatile( \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[6]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ __asm__ volatile( \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[7]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ __asm__ volatile( \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ ++ arg7) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[8]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ ++ arg7,arg8) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[9]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ _argvec[8] = (unsigned long)(arg8); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 64(%1)\n\t" /* arg8 */ \ ++ "stl $0, 8($30)\n\t" /* arg8 */ \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ ++ arg7,arg8,arg9) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[10]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ _argvec[8] = (unsigned long)(arg8); \ ++ _argvec[9] = (unsigned long)(arg9); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 72(%1)\n\t" /* arg9 */ \ ++ "stl $0, 16($30)\n\t" /* arg9 */ \ ++ "ldl $0, 64(%1)\n\t" /* arg8 */ \ ++ "stl $0, 8($30)\n\t" /* arg8 */ \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ ++ arg7,arg8,arg9,arg10) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[11]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ _argvec[8] = (unsigned long)(arg8); \ ++ _argvec[9] = (unsigned long)(arg9); \ ++ _argvec[10] = (unsigned long)(arg10); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 80(%1)\n\t" /* arg10 */ \ ++ "stl $0, 24($30)\n\t" /* arg10 */ \ ++ "ldl $0, 72(%1)\n\t" /* arg9 */ \ ++ "stl $0, 16($30)\n\t" /* arg9 */ \ ++ "ldl $0, 64(%1)\n\t" /* arg8 */ \ ++ "stl $0, 8($30)\n\t" /* arg8 */ \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ ++ arg6,arg7,arg8,arg9,arg10, \ ++ arg11) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[12]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ _argvec[8] = (unsigned long)(arg8); \ ++ _argvec[9] = (unsigned long)(arg9); \ ++ _argvec[10] = (unsigned long)(arg10); \ ++ _argvec[11] = (unsigned long)(arg11); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 88(%1)\n\t" /* arg11 */ \ ++ "stl $0, 32($30)\n\t" /* arg11 */ \ ++ "ldl $0, 80(%1)\n\t" /* arg10 */ \ ++ "stl $0, 24($30)\n\t" /* arg10 */ \ ++ "ldl $0, 72(%1)\n\t" /* arg9 */ \ ++ "stl $0, 16($30)\n\t" /* arg9 */ \ ++ "ldl $0, 64(%1)\n\t" /* arg8 */ \ ++ "stl $0, 8($30)\n\t" /* arg8 */ \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ ++ arg6,arg7,arg8,arg9,arg10, \ ++ arg11,arg12) \ ++ do { \ ++ volatile OrigFn _orig = (orig); \ ++ volatile unsigned long _argvec[13]; \ ++ volatile unsigned long _res; \ ++ _argvec[0] = (unsigned long)(_orig.nraddr); \ ++ _argvec[1] = (unsigned long)(arg1); \ ++ _argvec[2] = (unsigned long)(arg2); \ ++ _argvec[3] = (unsigned long)(arg3); \ ++ _argvec[4] = (unsigned long)(arg4); \ ++ _argvec[5] = (unsigned long)(arg5); \ ++ _argvec[6] = (unsigned long)(arg6); \ ++ _argvec[7] = (unsigned long)(arg7); \ ++ _argvec[8] = (unsigned long)(arg8); \ ++ _argvec[9] = (unsigned long)(arg9); \ ++ _argvec[10] = (unsigned long)(arg10); \ ++ _argvec[11] = (unsigned long)(arg11); \ ++ _argvec[12] = (unsigned long)(arg12); \ ++ __asm__ volatile( \ ++ "ldi $30, -64($30)\n\t" \ ++ "ldl $0, 96(%1)\n\t" /* arg12 */ \ ++ "stl $0, 40($30)\n\t" /* arg12 */ \ ++ "ldl $0, 88(%1)\n\t" /* arg11 */ \ ++ "stl $0, 32($30)\n\t" /* arg11 */ \ ++ "ldl $0, 80(%1)\n\t" /* arg10 */ \ ++ "stl $0, 24($30)\n\t" /* arg10 */ \ ++ "ldl $0, 72(%1)\n\t" /* arg9 */ \ ++ "stl $0, 16($30)\n\t" /* arg9 */ \ ++ "ldl $0, 64(%1)\n\t" /* arg8 */ \ ++ "stl $0, 8($30)\n\t" /* arg8 */ \ ++ "ldl $0, 56(%1)\n\t" /* arg7 */ \ ++ "stl $0, 0($30)\n\t" /* arg7 */ \ ++ "ldl $21, 48(%1)\n\t" /* arg6 */ \ ++ "ldl $20, 40(%1)\n\t" /* arg5 */ \ ++ "ldl $19, 32(%1)\n\t" /* arg4 */ \ ++ "ldl $18, 24(%1)\n\t" /* arg3 */ \ ++ "ldl $17, 16(%1)\n\t" /* arg2 */ \ ++ "ldl $16, 8(%1)\n\t" /* arg1 */ \ ++ "ldl $27, 0(%1)\n\t" \ ++ VALGRIND_CALL_NOREDIR_T9 \ ++ "ldi $30, 64($30)\n\t" \ ++ "mov $0, %0\n" \ ++ : /*out*/ "=r" (_res) \ ++ : /*in*/ "r" (&_argvec[0]) \ ++ : /*trash*/ "memory", __CALLER_SAVED_REGS \ ++ ); \ ++ lval = (__typeof__(lval)) (long)_res; \ ++ } while (0) ++ ++#endif /* PLAT_sw64_linux */ ++ ++ + /* ------------------------------------------------------------------ */ + /* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ + /* */ +diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h +index be3d76690..aeea87a0b 100644 +--- a/include/vki/vki-linux.h ++++ b/include/vki/vki-linux.h +@@ -97,6 +97,8 @@ + # include "vki-posixtypes-mips64-linux.h" + #elif defined(VGA_nanomips) + # include "vki-posixtypes-nanomips-linux.h" ++#elif defined(VGA_sw64) ++# include "vki-posixtypes-sw64-linux.h" + #else + # error Unknown platform + #endif +@@ -225,6 +227,8 @@ typedef unsigned int vki_uint; + # include "vki-mips64-linux.h" + #elif defined(VGA_nanomips) + # include "vki-nanomips-linux.h" ++#elif defined(VGA_sw64) ++# include "vki-sw64-linux.h" + #else + # error Unknown platform + #endif +@@ -1317,6 +1321,13 @@ struct vki_seminfo { + #define VKI_EDOM 33 /* Math argument out of domain of func */ + #define VKI_ERANGE 34 /* Math result not representable */ + ++#if defined( VGP_sw64_linux ) ++/* From arch/sw_64/include/uapi/asm/errno.h */ ++#undef VKI_EAGAIN /* 11 in errno-base.h */ ++#define VKI_EDEADLK 11 /* Resource deadlock would occur */ ++#define VKI_EAGAIN 35 /* Try again */ ++#endif ++ + //---------------------------------------------------------------------- + // From linux-2.6.8.1/include/asm-generic/errno.h + //---------------------------------------------------------------------- +diff --git a/include/vki/vki-posixtypes-sw64-linux.h b/include/vki/vki-posixtypes-sw64-linux.h +new file mode 100644 +index 000000000..af84e6506 +--- /dev/null ++++ b/include/vki/vki-posixtypes-sw64-linux.h +@@ -0,0 +1,74 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- sw64/Linux-specific kernel interface: posix types. ---*/ ++/*--- vki-posixtypes-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++*/ ++ ++#ifndef __VKI_POSIXTYPES_SW64_LINUX_H ++#define __VKI_POSIXTYPES_SW64_LINUX_H ++ ++typedef unsigned int __vki_kernel_ino_t; ++typedef unsigned long __vki_kernel_sigset_t; ++ ++typedef long __vki_kernel_long_t; ++typedef unsigned long __vki_kernel_ulong_t; ++typedef unsigned int __vki_kernel_mode_t; ++ ++typedef int __vki_kernel_pid_t; ++typedef int __vki_kernel_ipc_pid_t; ++typedef unsigned int __vki_kernel_uid_t; ++typedef unsigned int __vki_kernel_gid_t; ++typedef long __vki_kernel_suseconds_t; ++typedef int __vki_kernel_daddr_t; ++typedef unsigned int __vki_kernel_uid32_t; ++typedef unsigned int __vki_kernel_gid32_t; ++typedef __vki_kernel_uid_t __vki_kernel_old_uid_t; ++typedef __vki_kernel_gid_t __vki_kernel_old_gid_t; ++typedef unsigned int __vki_kernel_old_dev_t; ++ ++typedef unsigned long __vki_kernel_size_t; ++typedef long __vki_kernel_ssize_t; ++typedef long __vki_kernel_ptrdiff_t; ++ ++ ++ ++typedef long __vki_kernel_time_t; ++typedef long long __vki_kernel_time64_t; ++typedef long __vki_kernel_clock_t; ++typedef int __vki_kernel_timer_t; ++typedef int __vki_kernel_clockid_t; ++typedef char * __vki_kernel_caddr_t; ++typedef unsigned short __vki_kernel_uid16_t; ++typedef unsigned short __vki_kernel_gid16_t; ++typedef long long __vki_kernel_loff_t; ++typedef long __vki_kernel_off_t; ++ ++typedef struct { ++ int val[2]; ++} __vki_kernel_fsid_t; ++ ++#endif // __VKI_POSIXTYPES_SW64_LINUX_H ++ ++/*--------------------------------------------------------------------*/ ++/*--- end vki-posixtypes-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/include/vki/vki-scnums-sw64-linux.h b/include/vki/vki-scnums-sw64-linux.h +new file mode 100644 +index 000000000..e0bbec202 +--- /dev/null ++++ b/include/vki/vki-scnums-sw64-linux.h +@@ -0,0 +1,390 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- System call numbers for sw64-linux. ---*/ ++/*--- vki-scnums-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2013-2017 OpenWorks ++ info@open-works.net ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++ ++ The GNU General Public License is contained in the file COPYING. ++*/ ++ ++#ifndef __VKI_SCNUMS_SW64_LINUX_H ++#define __VKI_SCNUMS_SW64_LINUX_H ++ ++/* ++ From linux-4.19.y/arch/sw_64/include/generated/uapi/asm/unistd_64.h ++ which is not exists in source tree, and it was generated from ++ linux-4.19.y/arch/sw_64/kernel/syscalls/syscall.tbl ++*/ ++ ++#define __NR_exit 1 ++#define __NR_fork 2 ++#define __NR_read 3 ++#define __NR_write 4 ++#define __NR_close 6 ++#define __NR_link 9 ++#define __NR_unlink 10 ++#define __NR_chdir 12 ++#define __NR_fchdir 13 ++#define __NR_mknod 14 ++#define __NR_chmod 15 ++#define __NR_chown 16 ++#define __NR_brk 17 ++#define __NR_lseek 19 ++#define __NR_getxpid 20 ++#define __NR_umount2 22 ++#define __NR_setuid 23 ++#define __NR_getxuid 24 ++#define __NR_ptrace 26 ++#define __NR_access 33 ++#define __NR_sync 36 ++#define __NR_kill 37 ++#define __NR_setpgid 39 ++#define __NR_dup 41 ++#define __NR_pipe 42 ++#define __NR_open 45 ++#define __NR_getxgid 47 ++#define __NR_odd_sigprocmask 48 ++#define __NR_acct 51 ++#define __NR_sigpending 52 ++#define __NR_ioctl 54 ++#define __NR_symlink 57 ++#define __NR_readlink 58 ++#define __NR_execve 59 ++#define __NR_umask 60 ++#define __NR_chroot 61 ++#define __NR_getpgrp 63 ++#define __NR_vfork 66 ++#define __NR_stat 67 ++#define __NR_lstat 68 ++#define __NR_mmap 71 ++#define __NR_munmap 73 ++#define __NR_mprotect 74 ++#define __NR_madvise 75 ++#define __NR_vhangup 76 ++#define __NR_getgroups 79 ++#define __NR_setgroups 80 ++#define __NR_setpgrp 82 ++#define __NR_gethostname 87 ++#define __NR_sethostname 88 ++#define __NR_dup2 90 ++#define __NR_fstat 91 ++#define __NR_fcntl 92 ++#define __NR_poll 94 ++#define __NR_fsync 95 ++#define __NR_setpriority 96 ++#define __NR_socket 97 ++#define __NR_connect 98 ++#define __NR_accept 99 ++#define __NR_odd_getpriority 100 ++#define __NR_send 101 ++#define __NR_recv 102 ++#define __NR_sigreturn 103 ++#define __NR_bind 104 ++#define __NR_setsockopt 105 ++#define __NR_listen 106 ++#define __NR_sigsuspend 111 ++#define __NR_recvmsg 113 ++#define __NR_sendmsg 114 ++#define __NR_getsockopt 118 ++#define __NR_socketcall 119 ++#define __NR_readv 120 ++#define __NR_writev 121 ++#define __NR_fchown 123 ++#define __NR_fchmod 124 ++#define __NR_recvfrom 125 ++#define __NR_setreuid 126 ++#define __NR_setregid 127 ++#define __NR_rename 128 ++#define __NR_truncate 129 ++#define __NR_ftruncate 130 ++#define __NR_flock 131 ++#define __NR_setgid 132 ++#define __NR_sendto 133 ++#define __NR_shutdown 134 ++#define __NR_socketpair 135 ++#define __NR_mkdir 136 ++#define __NR_rmdir 137 ++#define __NR_getpeername 141 ++#define __NR_getrlimit 144 ++#define __NR_setrlimit 145 ++#define __NR_setsid 147 ++#define __NR_quotactl 148 ++#define __NR_getsockname 150 ++#define __NR_sigaction 156 ++#define __NR_setdomainname 166 ++#define __NR_bpf 170 ++#define __NR_userfaultfd 171 ++#define __NR_membarrier 172 ++#define __NR_mlock2 173 ++#define __NR_getpid 174 ++#define __NR_getppid 175 ++#define __NR_getuid 176 ++#define __NR_geteuid 177 ++#define __NR_getgid 178 ++#define __NR_getegid 179 ++#define __NR_msgctl 200 ++#define __NR_msgget 201 ++#define __NR_msgrcv 202 ++#define __NR_msgsnd 203 ++#define __NR_semctl 204 ++#define __NR_semget 205 ++#define __NR_semop 206 ++#define __NR_lchown 208 ++#define __NR_shmat 209 ++#define __NR_shmctl 210 ++#define __NR_shmdt 211 ++#define __NR_shmget 212 ++#define __NR_msync 217 ++#define __NR_statfs64 229 ++#define __NR_fstatfs64 230 ++#define __NR_getpgid 233 ++#define __NR_getsid 234 ++#define __NR_sigaltstack 235 ++#define __NR_sysfs 254 ++#define __NR_getsysinfo 256 ++#define __NR_setsysinfo 257 ++#define __NR_getpriority 298 ++#define __NR_sigprocmask 299 ++#define __NR_bdflush 300 ++#define __NR_mount 302 ++#define __NR_swapoff 304 ++#define __NR_getdents 305 ++#define __NR_create_module 306 ++#define __NR_init_module 307 ++#define __NR_delete_module 308 ++#define __NR_get_kernel_syms 309 ++#define __NR_syslog 310 ++#define __NR_reboot 311 ++#define __NR_clone 312 ++#define __NR_uselib 313 ++#define __NR_mlock 314 ++#define __NR_munlock 315 ++#define __NR_mlockall 316 ++#define __NR_munlockall 317 ++#define __NR_sysinfo 318 ++#define __NR__sysctl 319 ++#define __NR_oldumount 321 ++#define __NR_swapon 322 ++#define __NR_times 323 ++#define __NR_personality 324 ++#define __NR_setfsuid 325 ++#define __NR_setfsgid 326 ++#define __NR_ustat 327 ++#define __NR_statfs 328 ++#define __NR_fstatfs 329 ++#define __NR_sched_setparam 330 ++#define __NR_sched_getparam 331 ++#define __NR_sched_setscheduler 332 ++#define __NR_sched_getscheduler 333 ++#define __NR_sched_yield 334 ++#define __NR_sched_get_priority_max 335 ++#define __NR_sched_get_priority_min 336 ++#define __NR_sched_rr_get_interval 337 ++#define __NR_afs_syscall 338 ++#define __NR_uname 339 ++#define __NR_nanosleep 340 ++#define __NR_mremap 341 ++#define __NR_nfsservctl 342 ++#define __NR_setresuid 343 ++#define __NR_getresuid 344 ++#define __NR_pciconfig_read 345 ++#define __NR_pciconfig_write 346 ++#define __NR_query_module 347 ++#define __NR_prctl 348 ++#define __NR_pread64 349 ++#define __NR_pwrite64 350 ++#define __NR_rt_sigreturn 351 ++#define __NR_rt_sigaction 352 ++#define __NR_rt_sigprocmask 353 ++#define __NR_rt_sigpending 354 ++#define __NR_rt_sigtimedwait 355 ++#define __NR_rt_sigqueueinfo 356 ++#define __NR_rt_sigsuspend 357 ++#define __NR_select 358 ++#define __NR_gettimeofday 359 ++#define __NR_settimeofday 360 ++#define __NR_getitimer 361 ++#define __NR_setitimer 362 ++#define __NR_utimes 363 ++#define __NR_getrusage 364 ++#define __NR_wait4 365 ++#define __NR_adjtimex 366 ++#define __NR_getcwd 367 ++#define __NR_capget 368 ++#define __NR_capset 369 ++#define __NR_sendfile 370 ++#define __NR_setresgid 371 ++#define __NR_getresgid 372 ++#define __NR_dipc 373 ++#define __NR_pivot_root 374 ++#define __NR_mincore 375 ++#define __NR_pciconfig_iobase 376 ++#define __NR_getdents64 377 ++#define __NR_gettid 378 ++#define __NR_readahead 379 ++#define __NR_tkill 381 ++#define __NR_setxattr 382 ++#define __NR_lsetxattr 383 ++#define __NR_fsetxattr 384 ++#define __NR_getxattr 385 ++#define __NR_lgetxattr 386 ++#define __NR_fgetxattr 387 ++#define __NR_listxattr 388 ++#define __NR_llistxattr 389 ++#define __NR_flistxattr 390 ++#define __NR_removexattr 391 ++#define __NR_lremovexattr 392 ++#define __NR_fremovexattr 393 ++#define __NR_futex 394 ++#define __NR_sched_setaffinity 395 ++#define __NR_sched_getaffinity 396 ++#define __NR_tuxcall 397 ++#define __NR_io_setup 398 ++#define __NR_io_destroy 399 ++#define __NR_io_getevents 400 ++#define __NR_io_submit 401 ++#define __NR_io_cancel 402 ++#define __NR_io_pgetevents 403 ++#define __NR_rseq 404 ++#define __NR_exit_group 405 ++#define __NR_lookup_dcookie 406 ++#define __NR_epoll_create 407 ++#define __NR_epoll_ctl 408 ++#define __NR_epoll_wait 409 ++#define __NR_remap_file_pages 410 ++#define __NR_set_tid_address 411 ++#define __NR_restart_syscall 412 ++#define __NR_fadvise64 413 ++#define __NR_timer_create 414 ++#define __NR_timer_settime 415 ++#define __NR_timer_gettime 416 ++#define __NR_timer_getoverrun 417 ++#define __NR_timer_delete 418 ++#define __NR_clock_settime 419 ++#define __NR_clock_gettime 420 ++#define __NR_clock_getres 421 ++#define __NR_clock_nanosleep 422 ++#define __NR_semtimedop 423 ++#define __NR_tgkill 424 ++#define __NR_stat64 425 ++#define __NR_lstat64 426 ++#define __NR_fstat64 427 ++#define __NR_vserver 428 ++#define __NR_mbind 429 ++#define __NR_get_mempolicy 430 ++#define __NR_set_mempolicy 431 ++#define __NR_mq_open 432 ++#define __NR_mq_unlink 433 ++#define __NR_mq_timedsend 434 ++#define __NR_mq_timedreceive 435 ++#define __NR_mq_notify 436 ++#define __NR_mq_getsetattr 437 ++#define __NR_waitid 438 ++#define __NR_add_key 439 ++#define __NR_request_key 440 ++#define __NR_keyctl 441 ++#define __NR_ioprio_set 442 ++#define __NR_ioprio_get 443 ++#define __NR_inotify_init 444 ++#define __NR_inotify_add_watch 445 ++#define __NR_inotify_rm_watch 446 ++#define __NR_fdatasync 447 ++#define __NR_kexec_load 448 ++#define __NR_migrate_pages 449 ++#define __NR_openat 450 ++#define __NR_mkdirat 451 ++#define __NR_mknodat 452 ++#define __NR_fchownat 453 ++#define __NR_futimesat 454 ++#define __NR_fstatat64 455 ++#define __NR_unlinkat 456 ++#define __NR_renameat 457 ++#define __NR_linkat 458 ++#define __NR_symlinkat 459 ++#define __NR_readlinkat 460 ++#define __NR_fchmodat 461 ++#define __NR_faccessat 462 ++#define __NR_pselect6 463 ++#define __NR_ppoll 464 ++#define __NR_unshare 465 ++#define __NR_set_robust_list 466 ++#define __NR_get_robust_list 467 ++#define __NR_splice 468 ++#define __NR_sync_file_range 469 ++#define __NR_tee 470 ++#define __NR_vmsplice 471 ++#define __NR_move_pages 472 ++#define __NR_getcpu 473 ++#define __NR_epoll_pwait 474 ++#define __NR_utimensat 475 ++#define __NR_signalfd 476 ++#define __NR_timerfd 477 ++#define __NR_eventfd 478 ++#define __NR_recvmmsg 479 ++#define __NR_fallocate 480 ++#define __NR_timerfd_create 481 ++#define __NR_timerfd_settime 482 ++#define __NR_timerfd_gettime 483 ++#define __NR_signalfd4 484 ++#define __NR_eventfd2 485 ++#define __NR_epoll_create1 486 ++#define __NR_dup3 487 ++#define __NR_pipe2 488 ++#define __NR_inotify_init1 489 ++#define __NR_preadv 490 ++#define __NR_pwritev 491 ++#define __NR_rt_tgsigqueueinfo 492 ++#define __NR_perf_event_open 493 ++#define __NR_fanotify_init 494 ++#define __NR_fanotify_mark 495 ++#define __NR_prlimit64 496 ++#define __NR_name_to_handle_at 497 ++#define __NR_open_by_handle_at 498 ++#define __NR_clock_adjtime 499 ++#define __NR_syncfs 500 ++#define __NR_setns 501 ++#define __NR_accept4 502 ++#define __NR_sendmmsg 503 ++#define __NR_process_vm_readv 504 ++#define __NR_process_vm_writev 505 ++#define __NR_kcmp 506 ++#define __NR_finit_module 507 ++#define __NR_sched_setattr 508 ++#define __NR_sched_getattr 509 ++#define __NR_renameat2 510 ++#define __NR_getrandom 511 ++#define __NR_memfd_create 512 ++#define __NR_execveat 513 ++#define __NR_seccomp 514 ++#define __NR_copy_file_range 515 ++#define __NR_preadv2 516 ++#define __NR_pwritev2 517 ++#define __NR_statx 518 ++#define NR_SYSCALLS 519 ++#define NR_syscalls NR_SYSCALLS ++ ++#endif /* __VKI_SCNUMS_SW64_LINUX_H */ ++ ++/*--------------------------------------------------------------------*/ ++/*--- end vki-scnums-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/include/vki/vki-sw64-linux.h b/include/vki/vki-sw64-linux.h +new file mode 100644 +index 000000000..007e54e0d +--- /dev/null ++++ b/include/vki/vki-sw64-linux.h +@@ -0,0 +1,977 @@ ++ ++/*--------------------------------------------------------------------*/ ++/*--- sw64/Linux-specific kernel interface. vki-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ ++ ++/* ++ This file is part of Valgrind, a dynamic binary instrumentation ++ framework. ++ ++ Copyright (C) 2010-2017 RT-RK ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, see . ++*/ ++ ++#ifndef __VKI_SW64_LINUX_H ++#define __VKI_SW64_LINUX_H ++ ++#include ++ ++// sw64 endian ++#define VKI_LITTLE_ENDIAN 1 ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/int-ll64.h ++//---------------------------------------------------------------------- ++ ++typedef __signed__ char __vki_s8; ++typedef unsigned char __vki_u8; ++ ++typedef __signed__ short __vki_s16; ++typedef unsigned short __vki_u16; ++ ++typedef __signed__ int __vki_s32; ++typedef unsigned int __vki_u32; ++ ++typedef __signed__ long long __vki_s64; ++typedef unsigned long long __vki_u64; ++ ++typedef unsigned short vki_u16; ++ ++typedef unsigned int vki_u32; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/page.h ++//---------------------------------------------------------------------- ++ ++extern UWord VKI_PAGE_SHIFT; ++extern UWord VKI_PAGE_SIZE; ++#define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1)) ++#define VKI_MAX_PAGE_SHIFT 13 ++#define VKI_MAX_PAGE_SIZE (1UL << VKI_MAX_PAGE_SHIFT) ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/shmparam.h ++//---------------------------------------------------------------------- ++ ++#define VKI_SHMLBA VKI_PAGE_SIZE ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/signal.h ++//---------------------------------------------------------------------- ++ ++#define _VKI_NSIG 64 ++#define _VKI_NSIG_BPW 64 ++#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW) ++ ++#define VKI_SIGHUP 1 ++#define VKI_SIGINT 2 ++#define VKI_SIGQUIT 3 ++#define VKI_SIGILL 4 ++#define VKI_SIGTRAP 5 ++#define VKI_SIGABRT 6 ++#define VKI_SIGEMT 7 ++#define VKI_SIGFPE 8 ++#define VKI_SIGKILL 9 ++#define VKI_SIGBUS 10 ++#define VKI_SIGSEGV 11 ++#define VKI_SIGSYS 12 ++#define VKI_SIGPIPE 13 ++#define VKI_SIGALRM 14 ++#define VKI_SIGTERM 15 ++#define VKI_SIGURG 16 ++#define VKI_SIGSTOP 17 ++#define VKI_SIGTSTP 18 ++#define VKI_SIGCONT 19 ++#define VKI_SIGCHLD 20 ++#define VKI_SIGTTIN 21 ++#define VKI_SIGTTOU 22 ++#define VKI_SIGIO 23 ++#define VKI_SIGXCPU 24 ++#define VKI_SIGXFSZ 25 ++#define VKI_SIGVTALRM 26 ++#define VKI_SIGPROF 27 ++#define VKI_SIGWINCH 28 ++#define VKI_SIGINFO 29 ++#define VKI_SIGUSR1 30 ++#define VKI_SIGUSR2 31 ++ ++#define VKI_SIGPOLL VKI_SIGIO ++//#define VKI_SIGPWR VKI_SIGINFO ++#define VKI_SIGIOT VKI_SIGABRT ++ ++/* These should not be considered constants from userland. */ ++#define VKI_SIGRTMIN 32 ++#define VKI_SIGRTMAX _VKI_NSIG ++ ++/* ++ * SA_FLAGS values: ++ * ++ * SA_ONSTACK indicates that a registered stack_t will be used. ++ * SA_RESTART flag to get restarting signals (which were the default long ago) ++ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. ++ * SA_RESETHAND clears the handler when the signal is delivered. ++ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. ++ * SA_NODEFER prevents the current signal from being masked in the handler. ++ * ++ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single ++ * Unix names RESETHAND and NODEFER respectively. ++ */ ++#define VKI_SA_ONSTACK 0x00000001 ++#define VKI_SA_RESTART 0x00000002 ++#define VKI_SA_NOCLDSTOP 0x00000004 ++#define VKI_SA_NODEFER 0x00000008 ++#define VKI_SA_RESETHAND 0x00000010 ++#define VKI_SA_NOCLDWAIT 0x00000020 ++#define VKI_SA_SIGINFO 0x00000040 ++ ++#define VKI_SA_NOMASK VKI_SA_NODEFER ++#define VKI_SA_ONESHOT VKI_SA_RESETHAND ++ ++// This is obsolete and should not be defined for new archs ++#define VKI_SA_RESTORER 0x04000000 ++ ++#define VKI_SS_ONSTACK 1 ++#define VKI_SS_DISABLE 2 ++ ++#define VKI_MINSIGSTKSZ 4096 ++#define VKI_SIGSTKSZ 16384 ++#define VKI_SIG_BLOCK 1 /* for blocking signals */ ++#define VKI_SIG_UNBLOCK 2 /* for unblocking signals */ ++#define VKI_SIG_SETMASK 3 /* for setting the signal mask */ ++ ++typedef struct { ++ unsigned long sig[_VKI_NSIG_WORDS]; ++} vki_sigset_t; ++ ++/* not actually used, but required for linux/syscalls.h */ ++typedef unsigned long vki_old_sigset_t; ++ ++typedef void __vki_signalfn_t(int); ++typedef __vki_signalfn_t __user *__vki_sighandler_t; ++ ++typedef void __vki_restorefn_t(void); ++typedef __vki_restorefn_t __user *__vki_sigrestore_t; ++ ++#define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */ ++#define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */ ++#define VKI_SIG_ERR ((__vki_sighandler_t)-1) ++ ++struct vki_sigaction_base { ++ __vki_sighandler_t ksa_handler; ++ unsigned int sa_flags; ++ vki_sigset_t sa_mask; ++ __vki_sigrestore_t sa_restorer; ++}; ++ ++/* On Linux we use the same type for passing sigactions to ++ and from the kernel. Hence: */ ++typedef struct vki_sigaction_base vki_sigaction_toK_t; ++typedef struct vki_sigaction_base vki_sigaction_fromK_t; ++ ++typedef struct vki_sigaltstack { ++ void __user *ss_sp; ++ int ss_flags; ++ vki_size_t ss_size; ++} vki_stack_t; ++ ++struct vki_old_sigaction { ++ // [[Nb: a 'k' prefix is added to "sa_handler" because ++ // bits/sigaction.h (which gets dragged in somehow via signal.h) ++ // #defines it as something else. Since that is done for glibc's ++ // purposes, which we don't care about here, we use our own name.]] ++ unsigned long sa_flags; ++ __vki_sighandler_t ksa_handler; ++ vki_old_sigset_t sa_mask; ++ __vki_sigrestore_t sa_restorer; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/upi/asm/sigcontext.h ++//---------------------------------------------------------------------- ++ ++struct vki_sigcontext { ++ /* ++ * What should we have here? I'd probably better use the same ++ * stack layout as OSF/1, just in case we ever want to try ++ * running their binaries.. ++ * ++ * This is the basic layout, but I don't know if we'll ever ++ * actually fill in all the values.. ++ */ ++ long sc_onstack; ++ long sc_mask; ++ long sc_pc; ++ long sc_ps; ++ long sc_regs[32]; ++ long sc_ownedfp; ++ long sc_fpregs[128]; /* SIMD-FP */ ++ unsigned long sc_fpcr; ++ unsigned long sc_fp_control; ++ unsigned long sc_reserved1, sc_reserved2; ++ unsigned long sc_ssize; ++ char *sc_sbase; ++ unsigned long sc_traparg_a0; ++ unsigned long sc_traparg_a1; ++ unsigned long sc_traparg_a2; ++ unsigned long sc_fp_trap_pc; ++ unsigned long sc_fp_trigger_sum; ++ unsigned long sc_fp_trigger_inst; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/siginfo.h ++//---------------------------------------------------------------------- ++ ++#define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/upi/asm/mman.h ++//---------------------------------------------------------------------- ++ ++#define VKI_PROT_READ 0x1 /* page can be read */ ++#define VKI_PROT_WRITE 0x2 /* page can be written */ ++#define VKI_PROT_EXEC 0x4 /* page can be executed */ ++#define VKI_PROT_SEM 0x8 /* page may be used for atomic ops */ ++#define VKI_PROT_NONE 0x0 /* page can not be accessed */ ++#define VKI_PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start ++ of growsdown vma */ ++#define VKI_PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end ++ of growsup vma */ ++ ++#define VKI_MAP_SHARED 0x01 /* Share changes */ ++#define VKI_MAP_PRIVATE 0x02 /* Changes are private */ ++#define VKI_MAP_SHARED_VALIDATE 0x03 /* share + validate extension flags */ ++//#define VKI_MAP_TYPE 0x0f /* Mask for type of mapping */ ++#define VKI_MAP_FIXED 0x100 /* Interpret addr exactly */ ++#define VKI_MAP_ANONYMOUS 0x10 /* do not use a file*/ ++#define VKI_MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could be uninitialized */ ++ ++/* These are linux-specific */ ++#define VKI_MAP_GROWSDOWN 0x01000 /* stack-like segment */ ++#define VKI_MAP_DENYWRITE 0x02000 /* ETXTBSY */ ++#define VKI_MAP_EXECUTABLE 0x04000 /* mark it as an executable */ ++#define VKI_MAP_LOCKED 0x08000 /* lock the mapping */ ++#define VKI_MAP_NORESERVE 0x10000 /* don't check for reservations */ ++#define VKI_MAP_POPULATE 0x20000 /* populate (prefault) pagetables */ ++#define VKI_MAP_NONBLOCK 0x40000 /* do not block on IO */ ++#define VKI_MAP_STACK 0x80000 /* give out an address that is best suited for process/thread stacks */ ++#define VKI_MAP_HUGETLB 0x100000 /* create a huge page mapping */ ++#define VKI_MAP_FIXED_NOREPLACE 0x200000 /* MAP_FIXED which doesn't unmap underlying mapping */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/fcntl.h ++//---------------------------------------------------------------------- ++#define VKI_O_RDONLY 00 ++#define VKI_O_WRONLY 01 ++#define VKI_O_RDWR 02 ++#define VKI_O_ACCMODE 03 ++ ++#define VKI_O_CREAT 01000 /* not fcntl */ ++#define VKI_O_TRUNC 02000 /* not fcntl */ ++#define VKI_O_EXCL 04000 /* not fcntl */ ++#define VKI_O_NOCTTY 010000 /* not fcntl */ ++ ++#define VKI_O_NONBLOCK 00004 ++#define VKI_O_APPEND 00010 ++#define VKI_O_DSYNC 040000 /* used to be O_SYNC, see below */ ++#define VKI_O_DIRECTORY 0100000 /* must be a directory */ ++#define VKI_O_NOFOLLOW 0200000 /* don't follow links */ ++#define VKI_O_LARGEFILE 0400000 /* will be set by the kernel on every open */ ++#define VKI_O_DIRECT 02000000 /* direct disk access - should check with OSF/1 */ ++#define VKI_O_NOATIME 04000000 ++#define VKI_O_CLOEXEC 010000000 /* set close_on_exec */ ++ ++#define VKI_AT_FDCWD -100 ++ ++#define VKI_F_DUPFD 0 /* dup */ ++#define VKI_F_GETFD 1 /* get close_on_exec */ ++#define VKI_F_SETFD 2 /* set/clear close_on_exec */ ++#define VKI_F_GETFL 3 /* get file->f_flags */ ++#define VKI_F_SETFL 4 /* set file->f_flags */ ++ ++#define VKI_F_GETLK 7 ++#define VKI_F_SETLK 8 ++#define VKI_F_SETLKW 9 ++ ++#define VKI_F_SETOWN 5 /* for sockets. */ ++#define VKI_F_GETOWN 6 /* for sockets. */ ++#define VKI_F_SETSIG 10 /* for sockets. */ ++#define VKI_F_GETSIG 11 /* for sockets. */ ++ ++#define VKI_F_GETLK64 12 /* using 'struct flock64' */ ++#define VKI_F_SETLK64 13 ++#define VKI_F_SETLKW64 14 ++ ++#define VKI_F_SETOWN_EX 15 ++#define VKI_F_GETOWN_EX 16 ++#define VKI_F_GETOWNER_UIDS 17 ++ ++#define VKI_F_OFD_GETLK 36 ++#define VKI_F_OFD_SETLK 37 ++#define VKI_F_OFD_SETLKW 38 ++ ++/* for F_[GET|SET]FL */ ++#define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */ ++ ++#define VKI_F_LINUX_SPECIFIC_BASE 1024 ++ ++struct vki_f_owner_ex { ++ int type; ++ __vki_kernel_pid_t pid; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/resource.h ++//---------------------------------------------------------------------- ++ ++#define VKI_RLIMIT_DATA 2 /* max data size */ ++#define VKI_RLIMIT_STACK 3 /* max stack size */ ++#define VKI_RLIMIT_CORE 4 /* max core file size */ ++#define VKI_RLIMIT_NOFILE 6 /* max number of open files */ ++#define VKI_RLIMIT_AS 7 /* address space limit */ ++#define VKI_RLIMIT_NPROC 8 /* max number of processes */ ++#define VKI_RLIMIT_MEMLOCK 9 /* max locked-in-memory address space */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.y/arch/sw_64/include/uapi/asm/socket.h ++//---------------------------------------------------------------------- ++ ++#define VKI_SOL_SOCKET 0xffff ++#define VKI_SO_TYPE 0x1008 ++#define VKI_SO_ATTACH_FILTER 26 ++#define VKI_SOCK_NONBLOCK 0x40000000 ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/sockios.h ++//---------------------------------------------------------------------- ++ ++#define VKI_SIOCATMARK _VKI_IOR('s', 7, int) ++#define VKI_SIOCSPGRP _VKI_IOW('s', 8, vki_pid_t) ++#define VKI_SIOCGPGRP _VKI_IOR('s', 9, vki_pid_t) ++#define VKI_SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ ++#define VKI_SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/uapi/asm/stat.h ++//---------------------------------------------------------------------- ++ ++struct vki_stat { ++ unsigned int st_dev; ++ unsigned int st_ino; ++ unsigned int st_mode; ++ unsigned int st_nlink; ++ unsigned int st_uid; ++ unsigned int st_gid; ++ unsigned int st_rdev; ++ long st_size; ++ unsigned long st_atime; ++ unsigned long st_mtime; ++ unsigned long st_ctime; ++ unsigned int st_blksize; ++ unsigned int st_blocks; ++ unsigned int st_flags; ++ unsigned int st_gen; ++}; ++ ++/* The stat64 structure increases the size of dev_t, blkcnt_t, adds ++ nanosecond resolution times, and padding for expansion. */ ++ ++struct vki_stat64 { ++ unsigned long st_dev; ++ unsigned long st_ino; ++ unsigned long st_rdev; ++ long st_size; ++ unsigned long st_blocks; ++ ++ unsigned int st_mode; ++ unsigned int st_uid; ++ unsigned int st_gid; ++ unsigned int st_blksize; ++ unsigned int st_nlink; ++ unsigned int __pad0; ++ ++ unsigned long st_atime; ++ unsigned long st_atime_nsec; ++ unsigned long st_mtime; ++ unsigned long st_mtime_nsec; ++ unsigned long st_ctime; ++ unsigned long st_ctime_nsec; ++ long __unused[3]; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/statfs.h ++//---------------------------------------------------------------------- ++ ++struct vki_statfs { ++ long f_type; ++ long f_bsize; ++ long f_blocks; ++ long f_bfree; ++ long f_bavail; ++ long f_files; ++ long f_ffree; ++ __vki_kernel_fsid_t f_fsid; ++ long f_namelen; ++ long f_frsize; ++ long f_flags; ++ long f_spare[4]; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/termios.h ++//---------------------------------------------------------------------- ++ ++struct vki_winsize { ++ unsigned short ws_row; ++ unsigned short ws_col; ++ unsigned short ws_xpixel; ++ unsigned short ws_ypixel; ++}; ++ ++struct vki_sgttyb { ++ char sg_ispeed; ++ char sg_ospeed; ++ char sg_erase; ++ char sg_kill; ++ short sg_flags; ++}; ++ ++struct vki_tchars { ++ char t_intrc; ++ char t_quitc; ++ char t_startc; ++ char t_stopc; ++ char t_eofc; ++ char t_brkc; ++}; ++ ++struct vki_ltchars { ++ char t_suspc; ++ char t_dsuspc; ++ char t_rprntc; ++ char t_flushc; ++ char t_werasc; ++ char t_lnextc; ++}; ++ ++#define VKI_NCC 8 ++#define VKI_NCCS 19 /* arch/sw_64/include/uapi/asm/termbits.h */ ++ ++struct vki_termio { ++ unsigned short c_iflag; /* input mode flags */ ++ unsigned short c_oflag; /* output mode flags */ ++ unsigned short c_cflag; /* control mode flags */ ++ unsigned short c_lflag; /* local mode flags */ ++ unsigned char c_line; /* line discipline */ ++ unsigned char c_cc[VKI_NCC]; /* control characters */ ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/termbits.h ++//---------------------------------------------------------------------- ++ ++typedef unsigned char vki_cc_t; ++typedef unsigned int vki_speed_t; ++typedef unsigned int vki_tcflag_t; ++ ++struct vki_termios { ++ vki_tcflag_t c_iflag; /* input mode flags */ ++ vki_tcflag_t c_oflag; /* output mode flags */ ++ vki_tcflag_t c_cflag; /* control mode flags */ ++ vki_tcflag_t c_lflag; /* local mode flags */ ++ vki_cc_t c_cc[VKI_NCCS]; /* control characters */ ++ vki_cc_t c_line; /* line discipline */ ++ vki_speed_t c_ispeed; /* input speed */ ++ vki_speed_t c_ospeed; /* output speed */ ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/ioctl.h ++//---------------------------------------------------------------------- ++ ++#define _VKI_IOC_NRBITS 8 ++#define _VKI_IOC_TYPEBITS 8 ++#define _VKI_IOC_SIZEBITS 13 ++#define _VKI_IOC_DIRBITS 3 ++ ++#define _VKI_IOC_NRMASK ((1 << _VKI_IOC_NRBITS)-1) ++#define _VKI_IOC_TYPEMASK ((1 << _VKI_IOC_TYPEBITS)-1) ++#define _VKI_IOC_SIZEMASK ((1 << _VKI_IOC_SIZEBITS)-1) ++#define _VKI_IOC_DIRMASK ((1 << _VKI_IOC_DIRBITS)-1) ++ ++#define _VKI_IOC_NRSHIFT 0 ++#define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS) ++#define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS) ++#define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS) ++ ++#define _VKI_IOC_NONE 1U ++#define _VKI_IOC_READ 2U ++#define _VKI_IOC_WRITE 4U ++ ++#define _VKI_IOC(dir,type,nr,size) \ ++ ((unsigned int) \ ++ (((dir) << _VKI_IOC_DIRSHIFT) | \ ++ ((type) << _VKI_IOC_TYPESHIFT) | \ ++ ((nr) << _VKI_IOC_NRSHIFT) | \ ++ ((size) << _VKI_IOC_SIZESHIFT))) ++ ++/* provoke compile error for invalid uses of size argument */ ++extern unsigned int __VKI_invalid_size_argument_for_IOC; ++/* used to create numbers */ ++#define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0) ++#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr), sizeof(size)) ++#define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), sizeof(size)) ++#define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type), (nr), sizeof(size)) ++ ++/* used to decode ioctl numbers.. */ ++#define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK) ++#define _VKI_IOC_TYPE(nr) (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK) ++#define _VKI_IOC_NR(nr) (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK) ++#define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK) ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/ioctls.h ++//---------------------------------------------------------------------- ++ ++#define VKI_FIOCLEX _VKI_IO('f', 1) ++#define VKI_FIONCLEX _VKI_IO('f', 2) ++#define VKI_FIOASYNC _VKI_IOW('f', 125, int) ++#define VKI_FIONBIO _VKI_IOW('f', 126, int) ++#define VKI_FIONREAD _VKI_IOR('f', 127, int) ++#define VKI_TIOCINQ VKI_FIONREAD ++#define VKI_FIOQSIZE _VKI_IOR('f', 128, vki_loff_t) ++ ++#define VKI_IOCGETP _VKI_IOR('t', 8, struct vki_sgttyb) ++#define VKI_TIOCSETP _VKI_IOW('t', 9, struct vki_sgttyb) ++#define VKI_TIOCSETN _VKI_IOW('t', 10, struct vki_sgttyb) /* TIOCSETP wo flush */ ++ ++#define VKI_TIOCSETC _VKI_IOW('t', 17, struct vki_tchars) ++#define VKI_TIOCGETC _VKI_IOR('t', 18, struct vki_tchars) ++#define VKI_TCGETS _VKI_IOR('t', 19, struct vki_termios) ++#define VKI_TCSETS _VKI_IOW('t', 20, struct vki_termios) ++#define VKI_TCSETSW _VKI_IOW('t', 21, struct vki_termios) ++#define VKI_TCSETSF _VKI_IOW('t', 22, struct vki_termios) ++ ++#define VKI_TCGETA _VKI_IOR('t', 23, struct vki_termio) ++#define VKI_TCSETA _VKI_IOW('t', 24, struct vki_termio) ++#define VKI_TCSETAW _VKI_IOW('t', 25, struct vki_termio) ++#define VKI_TCSETAF _VKI_IOW('t', 28, struct vki_termio) ++ ++#define VKI_TCSBRK _VKI_IO('t', 29) ++#define VKI_TCXONC _VKI_IO('t', 30) ++#define VKI_TCFLSH _VKI_IO('t', 31) ++ ++#define VKI_TIOCSWINSZ _VKI_IOW('t', 103, struct vki_winsize) ++#define VKI_TIOCGWINSZ _VKI_IOR('t', 104, struct vki_winsize) ++#define VKI_TIOCSTART _VKI_IO('t', 110) /* start output, like ^Q */ ++#define VKI_TIOCSTOP _VKI_IO('t', 111) /* stop output, like ^S */ ++#define VKI_TIOCOUTQ _VKI_IOR('t', 115, int) /* output queue size */ ++ ++#define VKI_TIOCGLTC _VKI_IOR('t', 116, struct vki_ltchars) ++#define VKI_TIOCSLTC _VKI_IOW('t', 117, struct vki_ltchars) ++#define VKI_TIOCSPGRP _VKI_IOW('t', 118, int) ++#define VKI_TIOCGPGRP _VKI_IOR('t', 119, int) ++ ++#define VKI_TIOCEXCL 0x540C ++#define VKI_TIOCNXCL 0x540D ++#define VKI_TIOCSCTTY 0x540E ++ ++#define VKI_TIOCSTI 0x5412 ++#define VKI_TIOCMGET 0x5415 ++#define VKI_TIOCMBIS 0x5416 ++#define VKI_TIOCMBIC 0x5417 ++#define VKI_TIOCMSET 0x5418 ++#define VKI_TIOCM_LE 0x001 ++#define VKI_TIOCM_DTR 0x002 ++#define VKI_TIOCM_RTS 0x004 ++#define VKI_TIOCM_ST 0x008 ++#define VKI_TIOCM_SR 0x010 ++#define VKI_TIOCM_CTS 0x020 ++#define VKI_TIOCM_CAR 0x040 ++#define VKI_TIOCM_RNG 0x080 ++#define VKI_TIOCM_DSR 0x100 ++#define VKI_TIOCM_CD VKI_TIOCM_CAR ++#define VKI_TIOCM_RI VKI_TIOCM_RNG ++#define VKI_TIOCM_OUT1 0x2000 ++#define VKI_TIOCM_OUT2 0x4000 ++#define VKI_TIOCM_LOOP 0x8000 ++ ++#define VKI_TIOCGSOFTCAR 0x5419 ++#define VKI_TIOCSSOFTCAR 0x541A ++#define VKI_TIOCLINUX 0x541C ++#define VKI_TIOCCONS 0x541D ++#define VKI_TIOCGSERIAL 0x541E ++#define VKI_TIOCSSERIAL 0x541F ++#define VKI_TIOCPKT 0x5420 ++#define VKI_TIOCPKT_DATA 0 ++#define VKI_TIOCPKT_FLUSHREAD 1 ++#define VKI_TIOCPKT_FLUSHWRITE 2 ++#define VKI_TIOCPKT_STOP 4 ++#define VKI_TIOCPKT_START 8 ++#define VKI_TIOCPKT_NOSTOP 16 ++#define VKI_TIOCPKT_DOSTOP 32 ++#define VKI_TIOCPKT_IOCTL 64 ++ ++ ++#define VKI_TIOCNOTTY 0x5422 ++#define VKI_TIOCSETD 0x5423 ++#define VKI_TIOCGETD 0x5424 ++#define VKI_TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ ++#define VKI_TIOCSBRK 0x5427 /* BSD compatibility */ ++#define VKI_TIOCCBRK 0x5428 /* BSD compatibility */ ++#define VKI_TIOCGSID 0x5429 /* Return the session ID of FD */ ++#define VKI_TIOCGRS485 _VKI_IOR('T', 0x2E, struct vki_serial_rs485) ++#define VKI_TIOCSRS485 _VKI_IOWR('T', 0x2F, struct vki_serial_rs485) ++#define VKI_TIOCGPTN _VKI_IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ ++#define VKI_TIOCSPTLCK _VKI_IOW('T', 0x31, int) /* Lock/unlock Pty */ ++#define VKI_TIOCGDEV _VKI_IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */ ++#define VKI_TIOCSIG _VKI_IOW('T', 0x36, int) /* Generate signal on Pty slave */ ++#define VKI_TIOCVHANGUP 0x5437 ++#define VKI_TIOCGPKT _VKI_IOR('T', 0x38, int) /* Get packet mode state */ ++#define VKI_TIOCGPTLCK _VKI_IOR('T', 0x39, int) /* Get Pty lock state */ ++#define VKI_TIOCGEXCL _VKI_IOR('T', 0x40, int) /* Get exclusive mode state */ ++#define VKI_TIOCGPTPEER _VKI_IO('T', 0x41) /* Safely open the slave */ ++ ++#define VKI_TIOCSERCONFIG 0x5453 ++#define VKI_TIOCSERGWILD 0x5454 ++#define VKI_TIOCSERSWILD 0x5455 ++#define VKI_TIOCGLCKTRMIOS 0x5456 ++#define VKI_TIOCSLCKTRMIOS 0x5457 ++#define VKI_TIOCSERGSTRUCT 0x5458 /* For debugging only */ ++#define VKI_TIOCSERGETLSR 0x5459 /* Get line status register */ ++/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ ++#define VKI_TIOCSER_TEMT 0x01 /* Transmitter physically empty */ ++#define VKI_TIOCSERGETMULTI 0x545A /* Get multiport config */ ++#define VKI_TIOCSERSETMULTI 0x545B /* Set multiport config */ ++ ++#define VKI_TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ ++#define VKI_TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ ++ ++//---------------------------------------------------------------------- ++// From asm-generic/poll.h ++//---------------------------------------------------------------------- ++ ++/* These are specified by iBCS2 */ ++#define VKI_POLLIN 0x0001 ++ ++struct vki_pollfd { ++ int fd; ++ short events; ++ short revents; ++}; ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/elf.h ++//---------------------------------------------------------------------- ++ ++#define VKI_ELF_NGREG 33 /* includes nip, msr, lr, etc. */ ++#define VKI_ELF_NFPREG 32 /* includes fpscr */ ++ ++typedef unsigned long vki_elf_greg_t; ++typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG]; ++ ++typedef double vki_elf_fpreg_t; ++typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG]; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/ucontext.h ++//---------------------------------------------------------------------- ++ ++struct vki_ucontext { ++ unsigned long uc_flags; ++ struct vki_ucontext *uc_link; ++ vki_old_sigset_t uc_old_sigmask; ++ vki_stack_t uc_stack; ++ struct vki_sigcontext uc_mcontext; ++ vki_sigset_t uc_sigmask; /* mask last for extensibility */ ++}; ++ ++typedef char vki_modify_ldt_t; /* ldt.h */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/ipcbuf.h ++//---------------------------------------------------------------------- ++ ++struct vki_ipc64_perm { ++ __vki_kernel_key_t key; ++ __vki_kernel_uid32_t uid; ++ __vki_kernel_gid32_t gid; ++ __vki_kernel_uid32_t cuid; ++ __vki_kernel_gid32_t cgid; ++ __vki_kernel_mode_t mode; ++ unsigned char __pad1[4 - sizeof(__vki_kernel_mode_t)]; ++ unsigned short seq; ++ unsigned short __pad2; ++ __vki_kernel_ulong_t __unused1; ++ __vki_kernel_ulong_t __unused2; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/asm/sembuf.h ++//---------------------------------------------------------------------- ++ ++struct vki_semid64_ds { ++ struct vki_ipc64_perm sem_perm; /* permissions .. see ipc.h */ ++ __vki_kernel_time_t sem_otime; /* last semop time */ ++ __vki_kernel_time_t sem_ctime; /* last change time */ ++ unsigned long sem_nsems; /* no. of semaphores in array */ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/uapi/asm/msgbuf.h ++//---------------------------------------------------------------------- ++ ++struct vki_msqid64_ds { ++ struct vki_ipc64_perm msg_perm; ++ __vki_kernel_time_t msg_stime; /* last msgsnd time */ ++ __vki_kernel_time_t msg_rtime; /* last msgrcv time */ ++ __vki_kernel_time_t msg_ctime; /* last change time */ ++ unsigned long msg_cbytes; /* current number of bytes on queue */ ++ unsigned long msg_qnum; /* number of messages in queue */ ++ unsigned long msg_qbytes; /* max number of bytes on queue */ ++ __vki_kernel_pid_t msg_lspid; /* pid of last msgsnd */ ++ __vki_kernel_pid_t msg_lrpid; /* last receive pid */ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/linux/ipc.h ++//---------------------------------------------------------------------- ++ ++struct vki_ipc_kludge { ++ struct vki_msgbuf __user *msgp; ++ long msgtyp; ++}; ++ ++#define VKI_SEMOP 1 ++#define VKI_SEMGET 2 ++#define VKI_SEMCTL 3 ++#define VKI_SEMTIMEDOP 4 ++#define VKI_MSGSND 11 ++#define VKI_MSGRCV 12 ++#define VKI_MSGGET 13 ++#define VKI_MSGCTL 14 ++#define VKI_SHMAT 21 ++#define VKI_SHMDT 22 ++#define VKI_SHMGET 23 ++#define VKI_SHMCTL 24 ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/uapi/asm/shmbuf.h ++//---------------------------------------------------------------------- ++ ++struct vki_shmid64_ds { ++ struct vki_ipc64_perm shm_perm; /* operation perms */ ++ vki_size_t shm_segsz; /* size of segment (bytes) */ ++ __vki_kernel_time_t shm_atime; /* last attach time */ ++ __vki_kernel_time_t shm_dtime; /* last detach time */ ++ __vki_kernel_time_t shm_ctime; /* last change time */ ++ __vki_kernel_pid_t shm_cpid; /* pid of creator */ ++ __vki_kernel_pid_t shm_lpid; /* pid of last operator */ ++ unsigned long shm_nattch; /* no. of current attaches */ ++ unsigned long __unused1; ++ unsigned long __unused2; ++}; ++ ++struct vki_shminfo64 { ++ unsigned long shmmax; ++ unsigned long shmmin; ++ unsigned long shmmni; ++ unsigned long shmseg; ++ unsigned long shmall; ++ unsigned long __unused1; ++ unsigned long __unused2; ++ unsigned long __unused3; ++ unsigned long __unused4; ++}; ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/uapi/asm/ptrace.h ++//---------------------------------------------------------------------- ++ ++struct vki_pt_regs { ++ unsigned long r0; ++ unsigned long r1; ++ unsigned long r2; ++ unsigned long r3; ++ unsigned long r4; ++ unsigned long r5; ++ unsigned long r6; ++ unsigned long r7; ++ unsigned long r8; ++ unsigned long r19; ++ unsigned long r20; ++ unsigned long r21; ++ unsigned long r22; ++ unsigned long r23; ++ unsigned long r24; ++ unsigned long r25; ++ unsigned long r26; ++ unsigned long r27; ++ unsigned long r28; ++ unsigned long hae; ++/* JRP - These are the values provided to a0-a2 by HMcode */ ++ unsigned long trap_a0; ++ unsigned long trap_a1; ++ unsigned long trap_a2; ++/* These are saved by HMcode: */ ++ unsigned long ps; ++ unsigned long pc; ++ unsigned long gp; ++ unsigned long r16; ++ unsigned long r17; ++ unsigned long r18; ++}; ++ ++#define VKI_PTRACE_GETREGS 12 /* get general purpose registers */ ++#define VKI_PTRACE_SETREGS 13 /* set general purpose registers */ ++#define VKI_PTRACE_GETFPREGS 14 /* get floating-point registers */ ++#define VKI_PTRACE_SETFPREGS 15 /* set floating-point registers */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/arch/sw_64/include/uapi/asm/errno.h ++//---------------------------------------------------------------------- ++ ++#define VKI_EOPNOTSUPP 45 /* Operation not supported on transport endpoint */ ++#define VKI_ENOSYS 78 /* Function not implemented */ ++#define VKI_EOVERFLOW 112 /* Value too large for defined data type */ ++ ++//---------------------------------------------------------------------- ++// From linux-4.19.180/include/uapi/asm-generic/siginfo.h ++//---------------------------------------------------------------------- ++ ++#define HAVE_ARCH_SIGINFO_T ++#define __VKI_ARCH_SI_TRAPNO ++typedef union vki_sigval { ++ int sival_int; ++ void __user *sival_ptr; ++} vki_sigval_t; ++ ++#ifndef __VKI_ARCH_SI_PREAMBLE_SIZE ++#define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) ++#endif ++ ++#define VKI_SI_MAX_SIZE 128 ++ ++#ifndef VKI_SI_PAD_SIZE ++#define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int)) ++#endif ++ ++#ifndef __VKI_ARCH_SI_UID_T ++#define __VKI_ARCH_SI_UID_T vki_uid_t ++#endif ++ ++#ifndef __VKI_ARCH_SI_BAND_T ++#define __VKI_ARCH_SI_BAND_T long ++#endif ++ ++#ifndef __VKI_ARCH_SI_CLOCK_T ++#define __VKI_ARCH_SI_CLOCK_T __vki_kernel_clock_t ++#endif ++ ++#ifndef __VKI_ARCH_SI_ATTRIBUTES ++#define __VKI_ARCH_SI_ATTRIBUTES ++#endif ++ ++typedef struct vki_siginfo { ++ int si_signo; ++ int si_errno; ++ int si_code; ++ ++ union { ++ int _pad[VKI_SI_PAD_SIZE]; ++ ++ /* kill() */ ++ struct { ++ __vki_kernel_pid_t _pid; /* sender's pid */ ++ __vki_kernel_uid32_t _uid; /* sender's uid */ ++ } _kill; ++ ++ /* POSIX.1b timers */ ++ struct { ++ __vki_kernel_timer_t _tid; /* timer id */ ++ int _overrun; /* overrun count */ ++ vki_sigval_t _sigval; /* same as below */ ++ int _sys_private; /* not to be passed to user */ ++ } _timer; ++ ++ /* POSIX.1b signals */ ++ struct { ++ __vki_kernel_pid_t _pid; /* sender's pid */ ++ __vki_kernel_uid32_t _uid; /* sender's uid */ ++ vki_sigval_t _sigval; ++ } _rt; ++ ++ /* SIGCHLD */ ++ struct { ++ __vki_kernel_pid_t _pid; /* which child */ ++ __vki_kernel_uid32_t _uid; /* sender's uid */ ++ int _status; /* exit code */ ++ __VKI_ARCH_SI_CLOCK_T _utime; ++ __VKI_ARCH_SI_CLOCK_T _stime; ++ } _sigchld; ++ ++ /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGTRAP, SIGEMT */ ++ struct { ++ void __user *_addr; /* faulting insn/memory ref. */ ++#ifdef __VKI_ARCH_SI_TRAPNO ++ int _trapno; /* TRAP # which caused the signal */ ++#endif ++ ++#define __VKI_ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? \ ++ sizeof(short) : __alignof__(void *)) ++ union { ++ /* ++ * used when si_code=BUS_MCEERR_AR or ++ * used when si_code=BUS_MCEERR_AO ++ */ ++ short _addr_lsb; /* LSB of the reported address */ ++ /* used when si_code=SEGV_BNDERR */ ++ struct { ++ char _dummy_bnd[__VKI_ADDR_BND_PKEY_PAD]; ++ void __user *_lower; ++ void __user *_upper; ++ } _addr_bnd; ++ /* used when si_code=SEGV_PKUERR */ ++ struct { ++ char _dummy_pkey[__VKI_ADDR_BND_PKEY_PAD]; ++ __vki_u32 _pkey; ++ } _addr_pkey; ++ }; ++ } _sigfault; ++ ++ /* SIGPOLL */ ++ struct { ++ __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */ ++ int _fd; ++ } _sigpoll; ++ ++ /* SIGSYS */ ++ struct { ++ void __user *_call_addr; /* calling user insn */ ++ int _syscall; /* triggering system call number */ ++ unsigned int _arch; /* AUDIT_ARCH_* of syscall */ ++ } _sigsys; ++ } _sifields; ++} __VKI_ARCH_SI_ATTRIBUTES vki_siginfo_t; ++ ++#endif // __VKI_SW64_LINUX_H ++ ++/*--------------------------------------------------------------------*/ ++/*--- end vki-sw64-linux.h ---*/ ++/*--------------------------------------------------------------------*/ +diff --git a/massif/tests/Makefile.am b/massif/tests/Makefile.am +index 84c9b1273..99aafdb5c 100644 +--- a/massif/tests/Makefile.am ++++ b/massif/tests/Makefile.am +@@ -9,6 +9,7 @@ EXTRA_DIST = \ + basic.post.exp basic.stderr.exp basic.vgtest \ + basic2.post.exp basic2.stderr.exp basic2.vgtest \ + big-alloc.post.exp big-alloc.post.exp-64bit big-alloc.post.exp-ppc64 \ ++ big-alloc.post.exp-sw64 \ + big-alloc.stderr.exp big-alloc.vgtest \ + big-alloc.post.exp-x86-freebsd \ + deep-A.post.exp deep-A.stderr.exp deep-A.vgtest \ +diff --git a/massif/tests/big-alloc.post.exp-sw64 b/massif/tests/big-alloc.post.exp-sw64 +new file mode 100644 +index 000000000..601ddee4f +--- /dev/null ++++ b/massif/tests/big-alloc.post.exp-sw64 +@@ -0,0 +1,54 @@ ++-------------------------------------------------------------------------------- ++Command: ./big-alloc ++Massif arguments: --stacks=no --time-unit=B --massif-out-file=massif.out --ignore-fn=__part_load_locale --ignore-fn=__time_load_locale --ignore-fn=dwarf2_unwind_dyld_add_image_hook --ignore-fn=get_or_create_key_element ++ms_print arguments: massif.out ++-------------------------------------------------------------------------------- ++ ++ ++ MB ++100.1^ : ++ | : ++ | @@@@@@@: ++ | @ : ++ | :::::::@ : ++ | : @ : ++ | :::::::: @ : ++ | : : @ : ++ | :::::::: : @ : ++ | : : : @ : ++ | :::::::: : : @ : ++ | : : : : @ : ++ | ::::::::: : : : @ : ++ | : : : : : @ : ++ | :::::::: : : : : @ : ++ | : : : : : : @ : ++ | :::::::: : : : : : @ : ++ | : : : : : : : @ : ++ | :::::::: : : : : : : @ : ++ | : : : : : : : : @ : ++ 0 +----------------------------------------------------------------------->MB ++ 0 100.1 ++ ++Number of snapshots: 11 ++ Detailed snapshots: [9] ++ ++-------------------------------------------------------------------------------- ++ n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B) ++-------------------------------------------------------------------------------- ++ 0 0 0 0 0 0 ++ 1 10,493,896 10,493,896 10,485,760 8,136 0 ++ 2 20,987,792 20,987,792 20,971,520 16,272 0 ++ 3 31,481,688 31,481,688 31,457,280 24,408 0 ++ 4 41,975,584 41,975,584 41,943,040 32,544 0 ++ 5 52,469,480 52,469,480 52,428,800 40,680 0 ++ 6 62,963,376 62,963,376 62,914,560 48,816 0 ++ 7 73,457,272 73,457,272 73,400,320 56,952 0 ++ 8 83,951,168 83,951,168 83,886,080 65,088 0 ++ 9 94,445,064 94,445,064 94,371,840 73,224 0 ++99.92% (94,371,840B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc. ++->99.92% (94,371,840B) 0x........: main (big-alloc.c:12) ++ ++-------------------------------------------------------------------------------- ++ n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B) ++-------------------------------------------------------------------------------- ++ 10 104,938,960 104,938,960 104,857,600 81,360 0 +diff --git a/memcheck/mc_machine.c b/memcheck/mc_machine.c +index 176c8e5cb..6da932334 100644 +--- a/memcheck/mc_machine.c ++++ b/memcheck/mc_machine.c +@@ -1394,6 +1394,82 @@ static Int get_otrack_shadow_offset_wrk ( Int offset, Int szB ) + offset,szB); + tl_assert(0); + # undef GOF ++# undef SZB ++ ++ /* --------------------- sw64 --------------------- */ ++ ++# elif defined(VGA_sw64) ++ ++# define GOF(_fieldname) \ ++ (offsetof(VexGuestSW64State,guest_##_fieldname)) ++# define SZB(_fieldname) \ ++ (sizeof(((VexGuestSW64State*)0)->guest_##_fieldname)) ++ ++ Int o = offset; ++ Int sz = szB; ++ tl_assert(sz > 0); ++ tl_assert(host_is_little_endian()); ++ ++ if (o >= GOF(r0) && sz <= 8 && o <= (GOF(r31) + 8 - sz)) ++ return GOF(r0) + ((o-GOF(r0)) & -8) ; ++ ++ if (o == GOF(PC) && sz == SZB(PC)) return -1; /* slot unused */ ++ if (o == GOF(CSR) && sz == SZB(CSR)) return -1; /* slot unused */ ++ ++ if (o >= GOF(f0) && o+sz <= GOF(f0) +SZB(f0)) return GOF(f0); ++ if (o >= GOF(f1) && o+sz <= GOF(f1) +SZB(f1)) return GOF(f1); ++ if (o >= GOF(f2) && o+sz <= GOF(f2) +SZB(f2)) return GOF(f2); ++ if (o >= GOF(f3) && o+sz <= GOF(f3) +SZB(f3)) return GOF(f3); ++ if (o >= GOF(f4) && o+sz <= GOF(f4) +SZB(f4)) return GOF(f4); ++ if (o >= GOF(f5) && o+sz <= GOF(f5) +SZB(f5)) return GOF(f5); ++ if (o >= GOF(f6) && o+sz <= GOF(f6) +SZB(f6)) return GOF(f6); ++ if (o >= GOF(f7) && o+sz <= GOF(f7) +SZB(f7)) return GOF(f7); ++ if (o >= GOF(f8) && o+sz <= GOF(f8) +SZB(f8)) return GOF(f8); ++ if (o >= GOF(f9) && o+sz <= GOF(f9) +SZB(f9)) return GOF(f9); ++ if (o >= GOF(f10) && o+sz <= GOF(f10)+SZB(f10)) return GOF(f10); ++ if (o >= GOF(f11) && o+sz <= GOF(f11)+SZB(f11)) return GOF(f11); ++ if (o >= GOF(f12) && o+sz <= GOF(f12)+SZB(f12)) return GOF(f12); ++ if (o >= GOF(f13) && o+sz <= GOF(f13)+SZB(f13)) return GOF(f13); ++ if (o >= GOF(f14) && o+sz <= GOF(f14)+SZB(f14)) return GOF(f14); ++ if (o >= GOF(f15) && o+sz <= GOF(f15)+SZB(f15)) return GOF(f15); ++ if (o >= GOF(f16) && o+sz <= GOF(f16)+SZB(f16)) return GOF(f16); ++ if (o >= GOF(f17) && o+sz <= GOF(f17)+SZB(f17)) return GOF(f17); ++ if (o >= GOF(f18) && o+sz <= GOF(f18)+SZB(f18)) return GOF(f18); ++ if (o >= GOF(f19) && o+sz <= GOF(f19)+SZB(f19)) return GOF(f19); ++ if (o >= GOF(f20) && o+sz <= GOF(f20)+SZB(f20)) return GOF(f20); ++ if (o >= GOF(f21) && o+sz <= GOF(f21)+SZB(f21)) return GOF(f21); ++ if (o >= GOF(f22) && o+sz <= GOF(f22)+SZB(f22)) return GOF(f22); ++ if (o >= GOF(f23) && o+sz <= GOF(f23)+SZB(f23)) return GOF(f23); ++ if (o >= GOF(f24) && o+sz <= GOF(f24)+SZB(f24)) return GOF(f24); ++ if (o >= GOF(f25) && o+sz <= GOF(f25)+SZB(f25)) return GOF(f25); ++ if (o >= GOF(f26) && o+sz <= GOF(f26)+SZB(f26)) return GOF(f26); ++ if (o >= GOF(f27) && o+sz <= GOF(f27)+SZB(f27)) return GOF(f27); ++ if (o >= GOF(f28) && o+sz <= GOF(f28)+SZB(f28)) return GOF(f28); ++ if (o >= GOF(f29) && o+sz <= GOF(f29)+SZB(f29)) return GOF(f29); ++ if (o >= GOF(f30) && o+sz <= GOF(f30)+SZB(f30)) return GOF(f30); ++ if (o >= GOF(f31) && o+sz <= GOF(f31)+SZB(f31)) return GOF(f31); ++ ++ if (o == GOF(FPCR) && sz == SZB(FPCR)) return -1; ++ ++ if (o == GOF(EMNOTE) && sz == SZB(EMNOTE)) return -1; ++ ++ if (o == GOF(CMSTART) && sz == SZB(CMSTART)) return -1; ++ if (o == GOF(CMLEN) && sz == SZB(CMLEN)) return -1; ++ ++ if (o == GOF(NRADDR) && sz == SZB(NRADDR)) return -1; ++ if (o == GOF(LOCKFLAG) && sz == SZB(LOCKFLAG)) return -1; ++ if (o == GOF(LOCKVALID) && sz == SZB(LOCKVALID)) return -1; ++ if (o == GOF(LOCKSUCCESS) && sz == SZB(LOCKSUCCESS)) return -1; ++ if (o == GOF(LOCKSIZE) && sz == SZB(LOCKSIZE)) return -1; ++ if (o == GOF(LOCKADDR) && sz == SZB(LOCKADDR)) return -1; ++ if (o == GOF(LOCKDATA) && sz == SZB(LOCKDATA)) return -1; ++ ++ if (o == GOF(TID) && sz == SZB(TID)) return -1; ++ ++ VG_(printf)("MC_(get_otrack_shadow_offset)(sw)(off=%d,sz=%d)\n", ++ offset,szB); ++ tl_assert(0); ++# undef GOF + # undef SZB + + # else +@@ -1517,6 +1593,13 @@ IRType MC_(get_otrack_reg_array_equiv_int_type) ( IRRegArray* arr ) + VG_(printf)("\n"); + tl_assert(0); + ++ /* --------------------- sw64 --------------------- */ ++# elif defined(VGA_sw64) ++ VG_(printf)("get_reg_array_equiv_int_type(sw64): unhandled: "); ++ ppIRRegArray(arr); ++ VG_(printf)("\n"); ++ tl_assert(0); ++ + # else + # error "FIXME: not implemented for this architecture" + # endif +diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c +index 72ccb3c8c..82f31d453 100644 +--- a/memcheck/mc_translate.c ++++ b/memcheck/mc_translate.c +@@ -4755,6 +4755,21 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, + cheap_cmp8: + return mkPCastTo(mce, Ity_I1, mkUifU8(mce, vatom1,vatom2)); + ++ ++ ////---- CmpFXX64 ++ // Iop_CmpFUN64, ++ // Iop_CmpFLT64, ++ // Iop_CmpFLE64, ++ // Iop_CmpFGT64, ++ // Iop_CmpFGE64, ++ // Iop_CmpFEQ64, ++ // Iop_CmpFNE64, ++ case Iop_CmpFEQ64: case Iop_CmpFNE64: ++ case Iop_CmpFLT64: case Iop_CmpFLE64: ++ case Iop_CmpFGT64: case Iop_CmpFGE64: ++ case Iop_CmpFUN64: ++ return mkPCastTo(mce, Ity_I1, mkUifU64(mce, vatom1,vatom2)); ++ + ////---- end CmpXX{64,32,16,8} + + case Iop_CasCmpEQ8: case Iop_CasCmpNE8: +@@ -8648,6 +8663,8 @@ IRSB* MC_(instrument) ( VgCallbackClosure* closure, + mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; + # elif defined(VGA_arm) + mce.dlbo.dl_CmpEQ32_CmpNE32 = DLexpensive; ++# elif defined(VGA_sw64) ++ mce.dlbo.dl_CmpEQ64_CmpNE64 = DLexpensive; + # endif + + /* preInstrumentationAnalysis() will allocate &mce.tmpHowUsed and then +diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am +index 9bbbe7bec..2b3d832e6 100644 +--- a/memcheck/tests/Makefile.am ++++ b/memcheck/tests/Makefile.am +@@ -25,6 +25,9 @@ endif + if VGCONF_ARCHS_INCLUDE_S390X + SUBDIRS += s390x + endif ++if VGCONF_ARCHS_INCLUDE_SW64 ++SUBDIRS += sw64 ++endif + + # OS-specific tests + if VGCONF_OS_IS_LINUX +@@ -318,10 +321,11 @@ EXTRA_DIST = \ + sh-mem-random.stdout.exp sh-mem-random.vgtest \ + sigaltstack.stderr.exp sigaltstack.vgtest \ + sigkill.stderr.exp sigkill.stderr.exp-darwin sigkill.stderr.exp-freebsd sigkill.stderr.exp-mips32 \ +- sigkill.stderr.exp-solaris \ ++ sigkill.stderr.exp-solaris sigkill.stderr.exp-sw64 \ + sigkill.stderr.exp-glibc-2.28 sigkill.vgtest \ + signal2.stderr.exp signal2.stdout.exp signal2.vgtest \ + sigprocmask.stderr.exp sigprocmask.stderr.exp2 sigprocmask.vgtest \ ++ sigprocmask.stderr.exp-sw64 \ + sized_delete.stderr.exp sized_delete.stderr.exp-x86 sized_delete.vgtest \ + static_malloc.stderr.exp static_malloc.vgtest \ + stpncpy.vgtest stpncpy.stderr.exp stpncpy.stdout.exp \ +diff --git a/memcheck/tests/atomic_incs.c b/memcheck/tests/atomic_incs.c +index 1c738c530..7a718f897 100644 +--- a/memcheck/tests/atomic_incs.c ++++ b/memcheck/tests/atomic_incs.c +@@ -245,6 +245,26 @@ __attribute__((noinline)) void atomic_add_8bit ( char* p, int n ) + ); + } while (block[2] != 1); + #endif ++#elif defined(VGA_sw64) ++ __asm__ __volatile__( ++ " bic %0, 0x7, $22\n" ++ "0: \n" ++ " lldl $5, 0($r22)\n" ++ " ldi $8, 1\n" ++ " wr_f $8\n" ++ " extlb $5, %0, $6\n" ++ " addl $6, %1, $6\n" ++ " inslb $6, %0, $6\n" ++ " masklb $5, %0, $5\n" ++ " or $5, $6, $5\n" ++ " memb \n" ++ " lstl $5, 0($22)\n" ++ " rd_f $5\n" ++ " beq $5, 0b\n" ++ : ++ : "r"(p), "r"(n) ++ : "memory", "$5", "$6", "$8", "$22" ++ ); + #else + # error "Unsupported arch" + #endif +@@ -461,6 +481,26 @@ __attribute__((noinline)) void atomic_add_16bit ( short* p, int n ) + ); + } while (block[2] != 1); + #endif ++#elif defined(VGA_sw64) ++ __asm__ __volatile__( ++ " bic %0, 0x7, $22\n" ++ "0: \n" ++ " lldl $5, 0($r22)\n" ++ " ldi $8, 1\n" ++ " wr_f $8\n" ++ " extlh $5, %0, $6\n" ++ " addl $6, %1, $6\n" ++ " inslh $6, %0, $6\n" ++ " masklh $5, %0, $5\n" ++ " or $5, $6, $5\n" ++ " memb \n" ++ " lstl $5, 0($22)\n" ++ " rd_f $5\n" ++ " beq $5, 0b\n" ++ : ++ : "r"(p), "r"(n) ++ : "memory", "$5", "$6", "$8", "$22" ++ ); + #else + # error "Unsupported arch" + #endif +@@ -616,6 +656,21 @@ __attribute__((noinline)) void atomic_add_32bit ( int* p, int n ) + : /*trash*/ "memory", "t0", "t1", "t2", "t3" + ); + } while (block[2] != 1); ++#elif defined(VGA_sw64) ++ __asm__ __volatile__ ( ++ "0:\n" ++ " lldw $5, 0(%0)\n" ++ " ldi $8, 1\n" ++ " wr_f $8\n" ++ " addw $5, %1, $5\n" ++ " memb \n" ++ " lstw $5, 0(%0)\n" ++ " rd_f $5\n" ++ " beq $5, 0b\n" ++ : /*out*/ ++ : /*in*/ "r"(p), "r"(n) ++ : /*trash*/ "$5", "$8", "memory" ++ ); + #else + # error "Unsupported arch" + #endif +@@ -718,6 +773,21 @@ __attribute__((noinline)) void atomic_add_64bit ( long long int* p, int n ) + : /*trash*/ "memory", "t0", "t1", "t2", "t3" + ); + } while (block[2] != 1); ++#elif defined(VGA_sw64) ++ __asm__ __volatile__ ( ++ "0:\n" ++ " lldl $5, 0(%0)\n" ++ " ldi $8, 1\n" ++ " wr_f $8\n" ++ " addl $5, %1, $5\n" ++ " memb \n" ++ " lstl $5, 0(%0)\n" ++ " rd_f $5\n" ++ " beq $5, 0b\n" ++ : /*out*/ ++ : /*in*/ "r"(p), "r"(n) ++ : /*trash*/ "$5", "$8", "memory" ++ ); + #else + # error "Unsupported arch" + #endif +@@ -752,6 +822,8 @@ __attribute__((noinline)) void atomic_add_128bit ( MyU128* p, + : /*trash*/ "memory", "cc", "x5", "x7", "x8", "x9", "x10", "x4" + ); + } while (block[2] != 0); ++#elif defined(VGA_sw64) ++ // TODO(Shaohua): Impl atomic_add_128bit() + #else + # error "Unsupported arch" + #endif +diff --git a/memcheck/tests/badjump2.c b/memcheck/tests/badjump2.c +index ae858e773..a6faef7d2 100644 +--- a/memcheck/tests/badjump2.c ++++ b/memcheck/tests/badjump2.c +@@ -26,7 +26,7 @@ int main(void) + memset(&sigsegv_new, 0, sizeof(sigsegv_new)); + sigsegv_new.sa_handler = SIGSEGV_handler; + sigsegv_new.sa_flags = 0; +-#if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) ++#if !defined(__APPLE__) && !defined(__sun) && !defined(__FreeBSD__) && !defined(__sw_64__) + sigsegv_new.sa_restorer = NULL; + #endif + res = sigemptyset( &sigsegv_new.sa_mask ); +diff --git a/memcheck/tests/leak-segv-jmp.c b/memcheck/tests/leak-segv-jmp.c +index 97bddaf23..444aedd61 100644 +--- a/memcheck/tests/leak-segv-jmp.c ++++ b/memcheck/tests/leak-segv-jmp.c +@@ -308,7 +308,9 @@ asm( + " ret\n" + ".previous\n" + ); +- ++#elif defined(VGP_sw64_linux) ++extern UWord do_syscall_WRK(UWord syscall_no, UWord a1, UWord a2, ++ UWord a3, UWord a4, UWord a5, UWord a6); + #else + // Ensure the file compiles even if the syscall nr is not defined. + #ifndef __NR_mprotect +@@ -324,8 +326,6 @@ UWord do_syscall_WRK (UWord syscall_no, + } + #endif + +- +- + char **b10; + char *interior_ptrs[3]; + int mprotect_result = 0; +@@ -470,3 +470,27 @@ int main(void) + + return 0; + } ++ ++/* ++ HACK: The line number recorded in .exp file will be mismatch if we put this ++ code block in top of file, so here we are ++*/ ++#if defined(VGP_sw64_linux) ++#define __NR_mprotect 74 ++asm ( ++ ".text \n\t" ++ ".globl do_syscall_WRK \n\t" ++ ".type do_syscall_WRK, @function \n\t" ++ "do_syscall_WRK: \n\t" ++ " mov $16, $0 \n\t" ++ " mov $17, $16 \n\t" ++ " mov $18, $17 \n\t" ++ " mov $19, $18 \n\t" ++ " mov $20, $19 \n\t" ++ " mov $21, $20 \n\t" ++ " ldl $21, 0($30) \n\t" ++ " sys_call 0x83 \n\t" ++ " ret \n\t" ++ ".previous \n\t" ++); ++#endif +diff --git a/memcheck/tests/leak.h b/memcheck/tests/leak.h +index 79e3cd6ac..16931d272 100644 +--- a/memcheck/tests/leak.h ++++ b/memcheck/tests/leak.h +@@ -143,6 +143,35 @@ + "$8", "$9", "$10", "$11", "$12", "$13", \ + "$14", "$15", "$24", "$25", "$31"); \ + } while (0) ++#elif defined(__sw_64__) ++#define CLEAR_CALLER_SAVED_REGS \ ++ do { \ ++ __asm__ __volatile__ ("ldi $0, 0 \n\t" /* v0 = 0 */ \ ++ "ldi $1, 0 \n\t" /* t0 = 0 */ \ ++ "ldi $2, 0 \n\t" /* t1 = 0 */ \ ++ "ldi $3, 0 \n\t" /* t2 = 0 */ \ ++ "ldi $4, 0 \n\t" /* t3 = 0 */ \ ++ "ldi $5, 0 \n\t" /* t4 = 0 */ \ ++ "ldi $6, 0 \n\t" /* t5 = 0 */ \ ++ "ldi $7, 0 \n\t" /* t6 = 0 */ \ ++ "ldi $8, 0 \n\t" /* t7 = 0 */ \ ++ "ldi $16, 0 \n\t" /* a0 = 0 */ \ ++ "ldi $17, 0 \n\t" /* a1 = 0 */ \ ++ "ldi $18, 0 \n\t" /* a2 = 0 */ \ ++ "ldi $19, 0 \n\t" /* a3 = 0 */ \ ++ "ldi $20, 0 \n\t" /* a4 = 0 */ \ ++ "ldi $21, 0 \n\t" /* a5 = 0 */ \ ++ "ldi $22, 0 \n\t" /* t8 = 0 */ \ ++ "ldi $23, 0 \n\t" /* t9 = 0 */ \ ++ "ldi $24, 0 \n\t" /* t10 = 0 */ \ ++ "ldi $25, 0 \n\t" /* t11 = 0 */ \ ++ "ldi $27, 0 \n\t" /* pv = 0 */ \ ++ "ldi $31, 0 \n\t" /* zero= 0 */ \ ++ : : : "$0", "$1", "$2", "$3", "$4", "$5", "$6", \ ++ "$7", "$8", "$16", "$17", "$18", "$19", \ ++ "$20", "$21", "$22", "$23", "$24", "$25", \ ++ "$27"); \ ++ } while (0) + #elif defined (__clang__) && defined(VGA_x86) + #define CLEAR_CALLER_SAVED_REGS \ + do { \ +diff --git a/memcheck/tests/sigkill.stderr.exp-sw64 b/memcheck/tests/sigkill.stderr.exp-sw64 +new file mode 100644 +index 000000000..f37c709c8 +--- /dev/null ++++ b/memcheck/tests/sigkill.stderr.exp-sw64 +@@ -0,0 +1,197 @@ ++ ++setting signal 1: Success ++getting signal 1: Success ++ ++setting signal 2: Success ++getting signal 2: Success ++ ++setting signal 3: Success ++getting signal 3: Success ++ ++setting signal 4: Success ++getting signal 4: Success ++ ++setting signal 5: Success ++getting signal 5: Success ++ ++setting signal 6: Success ++getting signal 6: Success ++ ++setting signal 7: Success ++getting signal 7: Success ++ ++setting signal 8: Success ++getting signal 8: Success ++ ++setting signal 9: Warning: ignored attempt to set SIGKILL handler in sigaction(); ++ the SIGKILL signal is uncatchable ++Invalid argument ++getting signal 9: Success ++ ++setting signal 10: Success ++getting signal 10: Success ++ ++setting signal 11: Success ++getting signal 11: Success ++ ++setting signal 12: Success ++getting signal 12: Success ++ ++setting signal 13: Success ++getting signal 13: Success ++ ++setting signal 14: Success ++getting signal 14: Success ++ ++setting signal 15: Success ++getting signal 15: Success ++ ++setting signal 16: Success ++getting signal 16: Success ++ ++setting signal 17: Warning: ignored attempt to set SIGSTOP handler in sigaction(); ++ the SIGSTOP signal is uncatchable ++Invalid argument ++getting signal 17: Success ++ ++setting signal 18: Success ++getting signal 18: Success ++ ++setting signal 19: Success ++getting signal 19: Success ++ ++setting signal 20: Success ++getting signal 20: Success ++ ++setting signal 21: Success ++getting signal 21: Success ++ ++setting signal 22: Success ++getting signal 22: Success ++ ++setting signal 23: Success ++getting signal 23: Success ++ ++setting signal 24: Success ++getting signal 24: Success ++ ++setting signal 25: Success ++getting signal 25: Success ++ ++setting signal 26: Success ++getting signal 26: Success ++ ++setting signal 27: Success ++getting signal 27: Success ++ ++setting signal 28: Success ++getting signal 28: Success ++ ++setting signal 29: Success ++getting signal 29: Success ++ ++setting signal 30: Success ++getting signal 30: Success ++ ++setting signal 31: Success ++getting signal 31: Success ++ ++setting signal 34: Success ++getting signal 34: Success ++ ++setting signal 35: Success ++getting signal 35: Success ++ ++setting signal 36: Success ++getting signal 36: Success ++ ++setting signal 37: Success ++getting signal 37: Success ++ ++setting signal 38: Success ++getting signal 38: Success ++ ++setting signal 39: Success ++getting signal 39: Success ++ ++setting signal 40: Success ++getting signal 40: Success ++ ++setting signal 41: Success ++getting signal 41: Success ++ ++setting signal 42: Success ++getting signal 42: Success ++ ++setting signal 43: Success ++getting signal 43: Success ++ ++setting signal 44: Success ++getting signal 44: Success ++ ++setting signal 45: Success ++getting signal 45: Success ++ ++setting signal 46: Success ++getting signal 46: Success ++ ++setting signal 47: Success ++getting signal 47: Success ++ ++setting signal 48: Success ++getting signal 48: Success ++ ++setting signal 49: Success ++getting signal 49: Success ++ ++setting signal 50: Success ++getting signal 50: Success ++ ++setting signal 51: Success ++getting signal 51: Success ++ ++setting signal 52: Success ++getting signal 52: Success ++ ++setting signal 53: Success ++getting signal 53: Success ++ ++setting signal 54: Success ++getting signal 54: Success ++ ++setting signal 55: Success ++getting signal 55: Success ++ ++setting signal 56: Success ++getting signal 56: Success ++ ++setting signal 57: Success ++getting signal 57: Success ++ ++setting signal 58: Success ++getting signal 58: Success ++ ++setting signal 59: Success ++getting signal 59: Success ++ ++setting signal 60: Success ++getting signal 60: Success ++ ++setting signal 61: Success ++getting signal 61: Success ++ ++setting signal 62: Success ++getting signal 62: Success ++ ++setting signal 65: Invalid argument ++getting signal 65: Invalid argument ++ ++ ++HEAP SUMMARY: ++ in use at exit: ... bytes in ... blocks ++ total heap usage: ... allocs, ... frees, ... bytes allocated ++ ++For a detailed leak analysis, rerun with: --leak-check=full ++ ++For lists of detected and suppressed errors, rerun with: -s ++ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) +diff --git a/memcheck/tests/sigprocmask.stderr.exp-sw64 b/memcheck/tests/sigprocmask.stderr.exp-sw64 +new file mode 100644 +index 000000000..bf809cab6 +--- /dev/null ++++ b/memcheck/tests/sigprocmask.stderr.exp-sw64 +@@ -0,0 +1,6 @@ ++before ++11111111 89abcdef 22222222 33333333 0 44444444 ++after1 ++11111111 89abcdef 22222222 33333333 0 44444444 ++after2 ++11111111 89abcdef 22222222 33333333 89aaccef 66666666 +diff --git a/memcheck/tests/sw64/Makefile b/memcheck/tests/sw64/Makefile +new file mode 100644 +index 000000000..eb94182e9 +--- /dev/null ++++ b/memcheck/tests/sw64/Makefile +@@ -0,0 +1,871 @@ ++# Makefile.in generated by automake 1.16.5 from Makefile.am. ++# memcheck/tests/sw64/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2021 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# This file is used for tool tests, and also in perf/Makefile.am. ++ ++# This file should be included (directly or indirectly) by every ++# Makefile.am that builds programs. And also the top-level Makefile.am. ++ ++#---------------------------------------------------------------------------- ++# Global stuff ++#---------------------------------------------------------------------------- ++ ++ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/valgrind ++pkgincludedir = $(includedir)/valgrind ++pkglibdir = $(libdir)/valgrind ++pkglibexecdir = $(libexecdir)/valgrind ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = sw_64-sunway-linux-gnu ++host_triplet = sw_64-sunway-linux-gnu ++#am__append_1 = -Wno-cast-align -Wno-self-assign \ ++# -Wno-tautological-compare ++ ++##am__append_2 = -Wno-expansion-to-defined ++#am__append_3 = -DVGABI_ ++##am__append_4 = -DVGABI_ ++#am__append_5 = -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile ++ ++# The Android toolchain includes all kinds of stdlib helpers present in ++# bionic which is bad because we are not linking with it and the Android ++# linker will panic. ++#am__append_6 = -nostdlib ++#am__append_7 = -DVGA_SEC_=1 \ ++# -DVGP_SEC_sw64_linux=1 ++ ++#am__append_8 = -DVGABI_ ++ ++# Make sure that all test programs have threaded errno. ++# Disable largefile support as there are test cases explicitly enabling it. ++#am__append_9 = -D_REENTRANT ++#am__append_10 = -Wno-format-extra-args \ ++# -Wno-literal-range \ ++# -Wno-tautological-constant-out-of-range-compare \ ++# -Wno-self-assign -Wno-string-plus-int \ ++# -Wno-uninitialized -Wno-unused-value # \ ++# clang 3.0.0 ++#am__append_11 = -Wno-unused-private-field # drd/tests/tsan_unittest.cpp ++subdir = memcheck/tests/sw64 ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(am__DIST_COMMON) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++SCRIPTS = $(dist_noinst_SCRIPTS) ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/Makefile.all.am \ ++ $(top_srcdir)/Makefile.tool-tests.am ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' aclocal-1.16 ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = /usr/bin/ar ++AUTOCONF = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' autoconf ++AUTOHEADER = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' autoheader ++AUTOMAKE = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' automake-1.16 ++AWK = gawk ++BOOST_CFLAGS = ++BOOST_LIBS = ++CC = gcc ++CCAS = gcc ++CCASDEPMODE = depmode=gcc3 ++CCASFLAGS = ++CCDEPMODE = depmode=gcc3 ++CFLAGS = ++CFLAGS_MPI = -g -O -fno-omit-frame-pointer -Wall -fpic ++CPP = gcc -E ++CPPFLAGS = ++CSCOPE = cscope ++CTAGS = ctags ++CXX = g++ ++CXXDEPMODE = depmode=gcc3 ++CXXFLAGS = ++CYGPATH_W = echo ++DEFAULT_SUPP = ./xfree-3.supp ./xfree-4.supp glibc-2.X-drd.supp glibc-2.X-helgrind.supp glibc-2.X.supp ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DIFF = diff -u ++DIS_PATH = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /usr/bin/grep -E ++ETAGS = etags ++EXEEXT = ++FLAG_FALIGNED_NEW = -faligned-new ++FLAG_FINLINE_FUNCTIONS = -finline-functions ++FLAG_FNO_IPA_ICF = -fno-ipa-icf ++FLAG_FNO_STACK_PROTECTOR = -fno-stack-protector ++FLAG_FSANITIZE = ++FLAG_FSIZED_DEALLOCATION = -fsized-deallocation ++FLAG_M32 = ++FLAG_M64 = ++FLAG_MLONG_DOUBLE_128 = -mlong-double-128 ++FLAG_MMMX = ++FLAG_MSA = ++FLAG_MSSE = ++FLAG_NO_BUILD_ID = ++FLAG_NO_PIE = -no-pie ++FLAG_OCTEON = ++FLAG_OCTEON2 = ++FLAG_PIE = -pie ++FLAG_T_TEXT = -Ttext-segment ++FLAG_UNLIMITED_INLINE_UNIT_GROWTH = --param inline-unit-growth=900 ++FLAG_W_CAST_ALIGN = -Wcast-align ++FLAG_W_CAST_QUAL = -Wcast-qual ++FLAG_W_EMPTY_BODY = -Wempty-body ++FLAG_W_ENUM_CONVERSION = -Wenum-conversion ++FLAG_W_EXTRA = -Wextra ++FLAG_W_FORMAT = -Wformat ++FLAG_W_FORMAT_SECURITY = -Wformat-security ++FLAG_W_FORMAT_SIGNEDNESS = -Wformat-signedness ++FLAG_W_IGNORED_QUALIFIERS = -Wignored-qualifiers ++FLAG_W_IMPLICIT_FALLTHROUGH = -Wimplicit-fallthrough=2 ++FLAG_W_LOGICAL_OP = -Wlogical-op ++FLAG_W_MISSING_PARAMETER_TYPE = -Wmissing-parameter-type ++FLAG_W_NO_EXPANSION_TO_DEFINED = -Wno-expansion-to-defined ++FLAG_W_NO_INFINITE_RECURSION = ++FLAG_W_NO_MEMSET_TRANSPOSED_ARGS = -Wno-memset-transposed-args ++FLAG_W_NO_MISMATCHED_NEW_DELETE = ++FLAG_W_NO_NONNULL = -Wno-nonnull ++FLAG_W_NO_OVERFLOW = -Wno-overflow ++FLAG_W_NO_POINTER_SIGN = -Wno-pointer-sign ++FLAG_W_NO_STATIC_LOCAL_IN_INLINE = ++FLAG_W_NO_UNINITIALIZED = -Wno-uninitialized ++FLAG_W_NO_UNUSED_FUNCTION = -Wno-unused-function ++FLAG_W_OLD_STYLE_DECLARATION = -Wold-style-declaration ++FLAG_W_WRITE_STRINGS = -Wwrite-strings ++GDB = /usr/local/bin/gdb ++GLIBC_LIBC_PATH = */lib*/libc.so.6 ++GLIBC_LIBPTHREAD_PATH = */lib*/libc.so.6 ++GLIBC_VERSION = 2.34 ++GREP = /usr/bin/grep ++HWCAP_HAS_ALTIVEC = ++HWCAP_HAS_DFP = ++HWCAP_HAS_HTM = ++HWCAP_HAS_ISA_2_05 = ++HWCAP_HAS_ISA_2_06 = ++HWCAP_HAS_ISA_2_07 = ++HWCAP_HAS_ISA_3_00 = ++HWCAP_HAS_ISA_3_1 = ++HWCAP_HAS_MMA = ++HWCAP_HAS_VSX = ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++LDFLAGS = ++LDFLAGS_MPI = -fpic -shared ++LIBOBJS = ++LIBS = ++LIB_UBSAN = ++LN_S = ln -s ++LTLIBOBJS = ++LTO_AR = /usr/bin/ar ++LTO_CFLAGS = ++LTO_RANLIB = ranlib ++MAINT = # ++MAKEINFO = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' makeinfo ++MKDIR_P = /usr/bin/mkdir -p ++MPI_CC = /usr/bin/mpicc ++OBJEXT = o ++PACKAGE = valgrind ++PACKAGE_BUGREPORT = valgrind-users@lists.sourceforge.net ++PACKAGE_NAME = Valgrind ++PACKAGE_STRING = Valgrind 3.19.0-sw1.0.0 ++PACKAGE_TARNAME = valgrind ++PACKAGE_URL = ++PACKAGE_VERSION = 3.19.0-sw1.0.0 ++PATH_SEPARATOR = : ++PERL = /usr/bin/perl ++PREFERRED_STACK_BOUNDARY_2 = ++RANLIB = ranlib ++SED = /usr/bin/sed ++SET_MAKE = ++SHELL = /bin/sh ++SOLARIS_UNDEF_LARGESOURCE = ++STRIP = ++VALT_LOAD_ADDRESS_PRI = 0x58000000 ++VALT_LOAD_ADDRESS_SEC = 0xUNSET ++VERSION = 3.19.0-sw1.0.0 ++VGCONF_ABI = ++VGCONF_ARCH_PRI = sw64 ++VGCONF_ARCH_SEC = ++VGCONF_OS = linux ++VGCONF_PLATFORM_PRI_CAPS = SW64_LINUX ++VGCONF_PLATFORM_SEC_CAPS = ++VGCONF_PLATVARIANT = vanilla ++VG_DATE = 11 Apr 2022 ++VG_TMPDIR = /tmp ++VG_VER_MAJOR = 3 ++VG_VER_MINOR = 19 ++XCODE_DIR = ++XCRUN = ++abs_builddir = /home/zlh/valgrind-sw/valgrind-3.19.0/memcheck/tests/sw64 ++abs_srcdir = /home/zlh/valgrind-sw/valgrind-3.19.0/memcheck/tests/sw64 ++abs_top_builddir = /home/zlh/valgrind-sw/valgrind-3.19.0 ++abs_top_srcdir = /home/zlh/valgrind-sw/valgrind-3.19.0 ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = $${TAR-tar} chof - "$$tardir" ++am__untar = $${TAR-tar} xf - ++bindir = ${exec_prefix}/bin ++build = sw_64-sunway-linux-gnu ++build_alias = ++build_cpu = sw_64 ++build_os = linux-gnu ++build_vendor = sunway ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = sw_64-sunway-linux-gnu ++host_alias = ++host_cpu = sw_64 ++host_os = linux-gnu ++host_vendor = sunway ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${datarootdir}/info ++install_sh = ${SHELL} /home/zlh/valgrind-sw/valgrind-3.19.0/install-sh ++libdir = ${exec_prefix}/lib ++libexecdir = ${exec_prefix}/libexec ++localedir = ${datarootdir}/locale ++localstatedir = ${prefix}/var ++mandir = ${datarootdir}/man ++mkdir_p = $(MKDIR_P) ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++prefix = /usr/local ++program_transform_name = s,x,x, ++psdir = ${docdir} ++runstatedir = ${localstatedir}/run ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = ${prefix}/etc ++target_alias = ++top_build_prefix = ../../../ ++top_builddir = ../../.. ++top_srcdir = ../../.. ++inplacedir = $(top_builddir)/.in_place ++ ++#---------------------------------------------------------------------------- ++# Flags ++#---------------------------------------------------------------------------- ++ ++# Baseline flags for all compilations. Aim here is to maximise ++# performance and get whatever useful warnings we can out of gcc. ++# -fno-builtin is important for defeating LLVM's idiom recognition ++# that somehow causes VG_(memset) to get into infinite recursion. ++AM_CFLAGS_BASE = -O2 -g -Wall -Wmissing-prototypes -Wshadow \ ++ -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations \ ++ -Wcast-align -Wcast-qual -Wwrite-strings \ ++ -Wempty-body -Wformat -Wformat-signedness \ ++ -Wformat-security -Wignored-qualifiers \ ++ -Wmissing-parameter-type -Wlogical-op \ ++ -Wenum-conversion -Wimplicit-fallthrough=2 \ ++ -Wold-style-declaration -finline-functions \ ++ -fno-stack-protector \ ++ -fno-strict-aliasing -fno-builtin $(am__append_1) \ ++ $(am__append_2) ++#ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_ISA_3_00 ++ ++# Power ISA flag for use by guest_ppc_helpers.c ++##ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_DARN -DHAS_ISA_3_00 ++ISA_3_0_BUILD_FLAG = ++AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++ -fpic -fno-builtin -fno-ipa-icf ++ ++#AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++# -fpic -fPIC -fno-builtin ++ ++ ++# These flags are used for building the preload shared objects (PSOs). ++# The aim is to give reasonable performance but also to have good ++# stack traces, since users often see stack traces extending ++# into (and through) the preloads. Also, we must use any ++# -mpreferred-stack-boundary flag to build the preload shared ++# objects, since that risks misaligning the client's stack and ++# results in segfaults like (eg) #324050. ++#AM_CFLAGS_PSO_BASE = -dynamic \ ++# -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++# -fpic -fPIC -fno-builtin -fno-ipa-icf ++ ++ ++# Flags for specific targets. ++# ++# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. ++# For building the core, coregrind/Makefile.am files add some extra things. ++AM_CPPFLAGS_SW64_LINUX = -I$(top_srcdir) \ ++ -I$(top_srcdir)/include -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_sw64=1 -DVGO_linux=1 \ ++ -DVGP_sw64_linux=1 \ ++ -DVGPV_sw64_linux_vanilla=1 \ ++ $(am__append_3) ++#AM_CPPFLAGS_ = \ ++# -I$(top_srcdir) \ ++# -I$(top_srcdir)/include \ ++# -I$(top_builddir)/include \ ++# -I$(top_srcdir)/VEX/pub \ ++# -I$(top_builddir)/VEX/pub \ ++# -DVGA_=1 \ ++# -DVGO_linux=1 \ ++# -DVGP__linux=1 \ ++# -DVGPV__linux_vanilla=1 \ ++# $(am__append_4) ++AM_FLAG_M3264_X86_LINUX = ++AM_CFLAGS_X86_LINUX = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_LINUX = -g ++AM_FLAG_M3264_AMD64_LINUX = ++AM_CFLAGS_AMD64_LINUX = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_LINUX = -g ++AM_FLAG_M3264_PPC32_LINUX = ++AM_CFLAGS_PPC32_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC32_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC32_LINUX = -g ++AM_FLAG_M3264_PPC64BE_LINUX = ++AM_CFLAGS_PPC64BE_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64BE_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64BE_LINUX = -g ++AM_FLAG_M3264_PPC64LE_LINUX = ++AM_CFLAGS_PPC64LE_LINUX = $(AM_CFLAGS_BASE) $(ISA_3_0_BUILD_FLAG) ++AM_CFLAGS_PSO_PPC64LE_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64LE_LINUX = -g ++AM_FLAG_M3264_X86_FREEBSD = ++AM_CFLAGS_X86_FREEBSD = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_FREEBSD = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_FREEBSD = -g ++AM_FLAG_M3264_ARM_LINUX = ++AM_CFLAGS_ARM_LINUX = \ ++ $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 ++ ++AM_CFLAGS_PSO_ARM_LINUX = $(AM_CFLAGS_BASE) \ ++ -marm -mcpu=cortex-a8 $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_ARM_LINUX = \ ++ -marm -mcpu=cortex-a8 -g ++ ++AM_FLAG_M3264_ARM64_LINUX = ++AM_CFLAGS_ARM64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_ARM64_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_ARM64_LINUX = -g ++AM_FLAG_M3264_AMD64_FREEBSD = ++AM_CFLAGS_AMD64_FREEBSD = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_FREEBSD = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_FREEBSD = -g ++AM_FLAG_M3264_X86_DARWIN = -arch i386 ++AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 \ ++ -fno-pic -fno-PIC ++ ++AM_CFLAGS_PSO_X86_DARWIN = $(AM_CFLAGS_X86_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_DARWIN = -arch i386 -g ++AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 ++AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 ++ ++AM_CFLAGS_PSO_AMD64_DARWIN = $(AM_CFLAGS_AMD64_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_DARWIN = -arch x86_64 -g ++AM_FLAG_M3264_S390X_LINUX = ++AM_CFLAGS_S390X_LINUX = $(AM_CFLAGS_BASE) -fomit-frame-pointer ++AM_CFLAGS_PSO_S390X_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_S390X_LINUX = -g -mzarch -march=z900 ++AM_FLAG_M3264_MIPS32_LINUX = ++AM_CFLAGS_MIPS32_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS32_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS32_LINUX = -g ++AM_FLAG_M3264_NANOMIPS_LINUX = ++AM_CFLAGS_NANOMIPS_LINUX = $(AM_CFLAGS_BASE) -mno-jump-table-opt ++AM_CFLAGS_PSO_NANOMIPS_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_NANOMIPS_LINUX = -g ++AM_FLAG_M3264_MIPS64_LINUX = ++AM_CFLAGS_MIPS64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS64_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS64_LINUX = -g ++AM_FLAG_M3264_SW64_LINUX = ++AM_CFLAGS_SW64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_SW64_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_SW64_LINUX = -g ++AM_FLAG_M3264_X86_SOLARIS = ++AM_CFLAGS_X86_SOLARIS = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_SOLARIS = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_SOLARIS = -g -D_ASM ++AM_FLAG_M3264_AMD64_SOLARIS = ++AM_CFLAGS_AMD64_SOLARIS = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_SOLARIS = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_SOLARIS = -g -D_ASM ++ ++# Flags for the primary target. These must be used to build the ++# regtests and performance tests. In fact, these must be used to ++# build anything which is built only once on a dual-arch build. ++# ++AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_SW64_LINUX) ++AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_SW64_LINUX) ++AM_CFLAGS_PRI = $(AM_CFLAGS_SW64_LINUX) ++AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_SW64_LINUX) ++AM_FLAG_M3264_SEC = ++#AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_) ++ ++# Baseline link flags for making vgpreload shared objects. ++# ++PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_6) ++PRELOAD_LDFLAGS_COMMON_FREEBSD = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst ++PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load ++PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_5) ++PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_X86_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) ++PRELOAD_LDFLAGS_AMD64_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) ++PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 ++PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 ++PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_NANOMIPS_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_SW64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) ++PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) ++AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_sw64=1 -DVGO_linux=1 \ ++ -DVGP_sw64_linux=1 \ ++ -DVGPV_sw64_linux_vanilla=1 \ ++ $(am__append_7) $(am__append_8) ++ ++# Nb: Tools need to augment these flags with an arch-selection option, such ++# as $(AM_FLAG_M3264_PRI). ++AM_CFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ -fno-stack-protector $(am__append_9) $(am__append_10) \ ++ $(am__empty) ++AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ -fno-stack-protector $(am__append_11) ++# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of ++# automake; see comments in Makefile.all.am for more detail. ++AM_CCASFLAGS = $(AM_CPPFLAGS) ++#noinst_DSYMS = $(check_PROGRAMS) ++dist_noinst_SCRIPTS = filter_stderr ++EXTRA_DIST = \ ++ arith-fp.vgtest arith-fp.stdout.exp arith-fp.stdout.exp-8a arith-fp.stderr.exp \ ++ arith-int-imm.vgtest arith-int-imm.stdout.exp arith-int-imm.stderr.exp \ ++ arith-int-reg.vgtest arith-int-reg.stdout.exp arith-int-reg.stderr.exp \ ++ branch.vgtest branch.stdout.exp branch.stderr.exp \ ++ loadstore-fp.vgtest loadstore-fp.stdout.exp loadstore-fp.stderr.exp \ ++ stack.vgtest stack.stdout.exp stack.stderr.exp ++ ++all: all-am ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign memcheck/tests/sw64/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign memcheck/tests/sw64/Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ ++ esac; ++$(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__empty): ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++tags TAGS: ++ ++ctags CTAGS: ++ ++cscope cscopelist: ++ ++distdir: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) distdir-am ++ ++distdir-am: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++ $(MAKE) $(AM_MAKEFLAGS) check-local ++check: check-am ++all-am: Makefile $(SCRIPTS) ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-generic clean-local mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: check-am install-am install-strip ++ ++.PHONY: all all-am check check-am check-local clean clean-generic \ ++ clean-local cscopelist-am ctags-am distclean distclean-generic \ ++ distdir dvi dvi-am html html-am info info-am install \ ++ install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ ++ uninstall-am ++ ++.PRECIOUS: Makefile ++ ++ ++# This used to be required when Vex had a handwritten Makefile. It ++# shouldn't be needed any more, though. ++ ++#---------------------------------------------------------------------------- ++# noinst_PROGRAMS and noinst_DSYMS targets ++#---------------------------------------------------------------------------- ++ ++# On Darwin, for a program 'p', the DWARF debug info is stored in the ++# directory 'p.dSYM'. This must be generated after the executable is ++# created, with 'dsymutil p'. We could redefine LINK with a script that ++# executes 'dsymutil' after linking, but that's a pain. Instead we use this ++# hook so that every time "make check" is run, we subsequently invoke ++# 'dsymutil' on all the executables that lack a .dSYM directory, or that are ++# newer than their corresponding .dSYM directory. ++build-noinst_DSYMS: $(noinst_DSYMS) ++ for f in $(noinst_DSYMS); do \ ++ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ ++ echo "dsymutil $$f"; \ ++ dsymutil $$f; \ ++ fi; \ ++ done ++ ++# This is used by coregrind/Makefile.am and Makefile.tool.am for doing ++# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. ++# It needs to be depended on by an 'all-local' rule. ++inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_PROGRAMS) ; do \ ++ rm -f $(inplacedir)/$$f; \ ++ ln -f -s ../$(subdir)/$$f $(inplacedir); \ ++ done ++ ++# Similar to inplace-noinst_PROGRAMS ++inplace-noinst_DSYMS: build-noinst_DSYMS ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(inplacedir)/$$f.dSYM; \ ++ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make install". It copies $(noinst_PROGRAMS) into $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'install-exec-local' rule. ++install-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_PROGRAMS); do \ ++ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'uninstall-local' rule. ++uninstall-noinst_PROGRAMS: ++ for f in $(noinst_PROGRAMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f; \ ++ done ++ ++# Similar to install-noinst_PROGRAMS. ++# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with ++# directories. XXX: not sure whether the resulting permissions will be ++# correct when using 'cp -R'... ++install-noinst_DSYMS: build-noinst_DSYMS ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_DSYMS); do \ ++ cp -R $$f.dSYM $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# Similar to uninstall-noinst_PROGRAMS. ++uninstall-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f.dSYM; \ ++ done ++ ++# This needs to be depended on by a 'clean-local' rule. ++clean-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -rf $$f.dSYM; \ ++ done ++ ++check-local: build-noinst_DSYMS ++ ++clean-local: clean-noinst_DSYMS ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff --git a/memcheck/tests/sw64/Makefile.am b/memcheck/tests/sw64/Makefile.am +new file mode 100644 +index 000000000..ccb147ae2 +--- /dev/null ++++ b/memcheck/tests/sw64/Makefile.am +@@ -0,0 +1,16 @@ ++ ++include $(top_srcdir)/Makefile.tool-tests.am ++ ++dist_noinst_SCRIPTS = filter_stderr ++ ++EXTRA_DIST = \ ++ arith-fp.vgtest arith-fp.stdout.exp arith-fp.stdout.exp-8a arith-fp.stderr.exp \ ++ arith-int-imm.vgtest arith-int-imm.stdout.exp arith-int-imm.stderr.exp \ ++ arith-int-reg.vgtest arith-int-reg.stdout.exp arith-int-reg.stderr.exp \ ++ branch.vgtest branch.stdout.exp branch.stderr.exp \ ++ loadstore-fp.vgtest loadstore-fp.stdout.exp loadstore-fp.stderr.exp \ ++ stack.vgtest stack.stdout.exp stack.stderr.exp ++ ++AM_CFLAGS += @FLAG_M64@ ++AM_CXXFLAGS += @FLAG_M64@ ++AM_CCASFLAGS += @FLAG_M64@ +diff --git a/memcheck/tests/sw64/Makefile.in b/memcheck/tests/sw64/Makefile.in +new file mode 100644 +index 000000000..02aaa8faf +--- /dev/null ++++ b/memcheck/tests/sw64/Makefile.in +@@ -0,0 +1,871 @@ ++# Makefile.in generated by automake 1.16.5 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994-2021 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++ ++# This file is used for tool tests, and also in perf/Makefile.am. ++ ++# This file should be included (directly or indirectly) by every ++# Makefile.am that builds programs. And also the top-level Makefile.am. ++ ++#---------------------------------------------------------------------------- ++# Global stuff ++#---------------------------------------------------------------------------- ++ ++VPATH = @srcdir@ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++@COMPILER_IS_CLANG_TRUE@am__append_1 = -Wno-cast-align -Wno-self-assign \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-compare ++ ++@COMPILER_IS_CLANG_TRUE@@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@am__append_2 = @FLAG_W_NO_EXPANSION_TO_DEFINED@ ++@VGCONF_HAVE_ABI_TRUE@am__append_3 = -DVGABI_@VGCONF_ABI@ ++@VGCONF_HAVE_ABI_TRUE@@VGCONF_HAVE_PLATFORM_SEC_TRUE@am__append_4 = -DVGABI_@VGCONF_ABI@ ++@SOLARIS_XPG_SYMBOLS_PRESENT_TRUE@am__append_5 = -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile ++ ++# The Android toolchain includes all kinds of stdlib helpers present in ++# bionic which is bad because we are not linking with it and the Android ++# linker will panic. ++@VGCONF_PLATVARIANT_IS_ANDROID_TRUE@am__append_6 = -nostdlib ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@am__append_7 = -DVGA_SEC_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_SEC_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 ++ ++@VGCONF_HAVE_ABI_TRUE@am__append_8 = -DVGABI_@VGCONF_ABI@ ++ ++# Make sure that all test programs have threaded errno. ++# Disable largefile support as there are test cases explicitly enabling it. ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_9 = -D_REENTRANT @SOLARIS_UNDEF_LARGESOURCE@ ++@COMPILER_IS_CLANG_TRUE@am__append_10 = -Wno-format-extra-args \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-literal-range \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-constant-out-of-range-compare \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-self-assign -Wno-string-plus-int \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-uninitialized -Wno-unused-value # \ ++@COMPILER_IS_CLANG_TRUE@ clang 3.0.0 ++@COMPILER_IS_CLANG_TRUE@am__append_11 = -Wno-unused-private-field # drd/tests/tsan_unittest.cpp ++subdir = memcheck/tests/sw64 ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(am__DIST_COMMON) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++SCRIPTS = $(dist_noinst_SCRIPTS) ++AM_V_P = $(am__v_P_@AM_V@) ++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_@AM_V@) ++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_@AM_V@) ++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) ++am__v_at_0 = @ ++am__v_at_1 = ++SOURCES = ++DIST_SOURCES = ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/Makefile.all.am \ ++ $(top_srcdir)/Makefile.tool-tests.am ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ++AR = @AR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ ++BOOST_CFLAGS = @BOOST_CFLAGS@ ++BOOST_LIBS = @BOOST_LIBS@ ++CC = @CC@ ++CCAS = @CCAS@ ++CCASDEPMODE = @CCASDEPMODE@ ++CCASFLAGS = @CCASFLAGS@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ ++CFLAGS_MPI = @CFLAGS_MPI@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CSCOPE = @CSCOPE@ ++CTAGS = @CTAGS@ ++CXX = @CXX@ ++CXXDEPMODE = @CXXDEPMODE@ ++CXXFLAGS = @CXXFLAGS@ ++CYGPATH_W = @CYGPATH_W@ ++DEFAULT_SUPP = @DEFAULT_SUPP@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++DIFF = @DIFF@ ++DIS_PATH = @DIS_PATH@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++ETAGS = @ETAGS@ ++EXEEXT = @EXEEXT@ ++FLAG_FALIGNED_NEW = @FLAG_FALIGNED_NEW@ ++FLAG_FINLINE_FUNCTIONS = @FLAG_FINLINE_FUNCTIONS@ ++FLAG_FNO_IPA_ICF = @FLAG_FNO_IPA_ICF@ ++FLAG_FNO_STACK_PROTECTOR = @FLAG_FNO_STACK_PROTECTOR@ ++FLAG_FSANITIZE = @FLAG_FSANITIZE@ ++FLAG_FSIZED_DEALLOCATION = @FLAG_FSIZED_DEALLOCATION@ ++FLAG_M32 = @FLAG_M32@ ++FLAG_M64 = @FLAG_M64@ ++FLAG_MLONG_DOUBLE_128 = @FLAG_MLONG_DOUBLE_128@ ++FLAG_MMMX = @FLAG_MMMX@ ++FLAG_MSA = @FLAG_MSA@ ++FLAG_MSSE = @FLAG_MSSE@ ++FLAG_NO_BUILD_ID = @FLAG_NO_BUILD_ID@ ++FLAG_NO_PIE = @FLAG_NO_PIE@ ++FLAG_OCTEON = @FLAG_OCTEON@ ++FLAG_OCTEON2 = @FLAG_OCTEON2@ ++FLAG_PIE = @FLAG_PIE@ ++FLAG_T_TEXT = @FLAG_T_TEXT@ ++FLAG_UNLIMITED_INLINE_UNIT_GROWTH = @FLAG_UNLIMITED_INLINE_UNIT_GROWTH@ ++FLAG_W_CAST_ALIGN = @FLAG_W_CAST_ALIGN@ ++FLAG_W_CAST_QUAL = @FLAG_W_CAST_QUAL@ ++FLAG_W_EMPTY_BODY = @FLAG_W_EMPTY_BODY@ ++FLAG_W_ENUM_CONVERSION = @FLAG_W_ENUM_CONVERSION@ ++FLAG_W_EXTRA = @FLAG_W_EXTRA@ ++FLAG_W_FORMAT = @FLAG_W_FORMAT@ ++FLAG_W_FORMAT_SECURITY = @FLAG_W_FORMAT_SECURITY@ ++FLAG_W_FORMAT_SIGNEDNESS = @FLAG_W_FORMAT_SIGNEDNESS@ ++FLAG_W_IGNORED_QUALIFIERS = @FLAG_W_IGNORED_QUALIFIERS@ ++FLAG_W_IMPLICIT_FALLTHROUGH = @FLAG_W_IMPLICIT_FALLTHROUGH@ ++FLAG_W_LOGICAL_OP = @FLAG_W_LOGICAL_OP@ ++FLAG_W_MISSING_PARAMETER_TYPE = @FLAG_W_MISSING_PARAMETER_TYPE@ ++FLAG_W_NO_EXPANSION_TO_DEFINED = @FLAG_W_NO_EXPANSION_TO_DEFINED@ ++FLAG_W_NO_INFINITE_RECURSION = @FLAG_W_NO_INFINITE_RECURSION@ ++FLAG_W_NO_MEMSET_TRANSPOSED_ARGS = @FLAG_W_NO_MEMSET_TRANSPOSED_ARGS@ ++FLAG_W_NO_MISMATCHED_NEW_DELETE = @FLAG_W_NO_MISMATCHED_NEW_DELETE@ ++FLAG_W_NO_NONNULL = @FLAG_W_NO_NONNULL@ ++FLAG_W_NO_OVERFLOW = @FLAG_W_NO_OVERFLOW@ ++FLAG_W_NO_POINTER_SIGN = @FLAG_W_NO_POINTER_SIGN@ ++FLAG_W_NO_STATIC_LOCAL_IN_INLINE = @FLAG_W_NO_STATIC_LOCAL_IN_INLINE@ ++FLAG_W_NO_UNINITIALIZED = @FLAG_W_NO_UNINITIALIZED@ ++FLAG_W_NO_UNUSED_FUNCTION = @FLAG_W_NO_UNUSED_FUNCTION@ ++FLAG_W_OLD_STYLE_DECLARATION = @FLAG_W_OLD_STYLE_DECLARATION@ ++FLAG_W_WRITE_STRINGS = @FLAG_W_WRITE_STRINGS@ ++GDB = @GDB@ ++GLIBC_LIBC_PATH = @GLIBC_LIBC_PATH@ ++GLIBC_LIBPTHREAD_PATH = @GLIBC_LIBPTHREAD_PATH@ ++GLIBC_VERSION = @GLIBC_VERSION@ ++GREP = @GREP@ ++HWCAP_HAS_ALTIVEC = @HWCAP_HAS_ALTIVEC@ ++HWCAP_HAS_DFP = @HWCAP_HAS_DFP@ ++HWCAP_HAS_HTM = @HWCAP_HAS_HTM@ ++HWCAP_HAS_ISA_2_05 = @HWCAP_HAS_ISA_2_05@ ++HWCAP_HAS_ISA_2_06 = @HWCAP_HAS_ISA_2_06@ ++HWCAP_HAS_ISA_2_07 = @HWCAP_HAS_ISA_2_07@ ++HWCAP_HAS_ISA_3_00 = @HWCAP_HAS_ISA_3_00@ ++HWCAP_HAS_ISA_3_1 = @HWCAP_HAS_ISA_3_1@ ++HWCAP_HAS_MMA = @HWCAP_HAS_MMA@ ++HWCAP_HAS_VSX = @HWCAP_HAS_VSX@ ++INSTALL = @INSTALL@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++LDFLAGS = @LDFLAGS@ ++LDFLAGS_MPI = @LDFLAGS_MPI@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LIB_UBSAN = @LIB_UBSAN@ ++LN_S = @LN_S@ ++LTLIBOBJS = @LTLIBOBJS@ ++LTO_AR = @LTO_AR@ ++LTO_CFLAGS = @LTO_CFLAGS@ ++LTO_RANLIB = @LTO_RANLIB@ ++MAINT = @MAINT@ ++MAKEINFO = @MAKEINFO@ ++MKDIR_P = @MKDIR_P@ ++MPI_CC = @MPI_CC@ ++OBJEXT = @OBJEXT@ ++PACKAGE = @PACKAGE@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_URL = @PACKAGE_URL@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ ++PERL = @PERL@ ++PREFERRED_STACK_BOUNDARY_2 = @PREFERRED_STACK_BOUNDARY_2@ ++RANLIB = @RANLIB@ ++SED = @SED@ ++SET_MAKE = @SET_MAKE@ ++SHELL = @SHELL@ ++SOLARIS_UNDEF_LARGESOURCE = @SOLARIS_UNDEF_LARGESOURCE@ ++STRIP = @STRIP@ ++VALT_LOAD_ADDRESS_PRI = @VALT_LOAD_ADDRESS_PRI@ ++VALT_LOAD_ADDRESS_SEC = @VALT_LOAD_ADDRESS_SEC@ ++VERSION = @VERSION@ ++VGCONF_ABI = @VGCONF_ABI@ ++VGCONF_ARCH_PRI = @VGCONF_ARCH_PRI@ ++VGCONF_ARCH_SEC = @VGCONF_ARCH_SEC@ ++VGCONF_OS = @VGCONF_OS@ ++VGCONF_PLATFORM_PRI_CAPS = @VGCONF_PLATFORM_PRI_CAPS@ ++VGCONF_PLATFORM_SEC_CAPS = @VGCONF_PLATFORM_SEC_CAPS@ ++VGCONF_PLATVARIANT = @VGCONF_PLATVARIANT@ ++VG_DATE = @VG_DATE@ ++VG_TMPDIR = @VG_TMPDIR@ ++VG_VER_MAJOR = @VG_VER_MAJOR@ ++VG_VER_MINOR = @VG_VER_MINOR@ ++XCODE_DIR = @XCODE_DIR@ ++XCRUN = @XCRUN@ ++abs_builddir = @abs_builddir@ ++abs_srcdir = @abs_srcdir@ ++abs_top_builddir = @abs_top_builddir@ ++abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_CXX = @ac_ct_CXX@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++am__tar = @am__tar@ ++am__untar = @am__untar@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++builddir = @builddir@ ++datadir = @datadir@ ++datarootdir = @datarootdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ ++exec_prefix = @exec_prefix@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++htmldir = @htmldir@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localedir = @localedir@ ++localstatedir = @localstatedir@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++psdir = @psdir@ ++runstatedir = @runstatedir@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++srcdir = @srcdir@ ++sysconfdir = @sysconfdir@ ++target_alias = @target_alias@ ++top_build_prefix = @top_build_prefix@ ++top_builddir = @top_builddir@ ++top_srcdir = @top_srcdir@ ++inplacedir = $(top_builddir)/.in_place ++ ++#---------------------------------------------------------------------------- ++# Flags ++#---------------------------------------------------------------------------- ++ ++# Baseline flags for all compilations. Aim here is to maximise ++# performance and get whatever useful warnings we can out of gcc. ++# -fno-builtin is important for defeating LLVM's idiom recognition ++# that somehow causes VG_(memset) to get into infinite recursion. ++AM_CFLAGS_BASE = -O2 -g -Wall -Wmissing-prototypes -Wshadow \ ++ -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations \ ++ @FLAG_W_CAST_ALIGN@ @FLAG_W_CAST_QUAL@ @FLAG_W_WRITE_STRINGS@ \ ++ @FLAG_W_EMPTY_BODY@ @FLAG_W_FORMAT@ @FLAG_W_FORMAT_SIGNEDNESS@ \ ++ @FLAG_W_FORMAT_SECURITY@ @FLAG_W_IGNORED_QUALIFIERS@ \ ++ @FLAG_W_MISSING_PARAMETER_TYPE@ @FLAG_W_LOGICAL_OP@ \ ++ @FLAG_W_ENUM_CONVERSION@ @FLAG_W_IMPLICIT_FALLTHROUGH@ \ ++ @FLAG_W_OLD_STYLE_DECLARATION@ @FLAG_FINLINE_FUNCTIONS@ \ ++ @FLAG_FNO_STACK_PROTECTOR@ @FLAG_FSANITIZE@ \ ++ -fno-strict-aliasing -fno-builtin $(am__append_1) \ ++ $(am__append_2) ++@HAS_DARN_FALSE@@HAS_XSCVHPDP_TRUE@ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_ISA_3_00 ++ ++# Power ISA flag for use by guest_ppc_helpers.c ++@HAS_DARN_TRUE@@HAS_XSCVHPDP_TRUE@ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_DARN -DHAS_ISA_3_00 ++@HAS_XSCVHPDP_FALSE@ISA_3_0_BUILD_FLAG = ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_FALSE@AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_FALSE@ -fpic -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@ -fpic -fPIC -fno-builtin ++ ++ ++# These flags are used for building the preload shared objects (PSOs). ++# The aim is to give reasonable performance but also to have good ++# stack traces, since users often see stack traces extending ++# into (and through) the preloads. Also, we must use any ++# -mpreferred-stack-boundary flag to build the preload shared ++# objects, since that risks misaligning the client's stack and ++# results in segfaults like (eg) #324050. ++@VGCONF_OS_IS_DARWIN_TRUE@AM_CFLAGS_PSO_BASE = -dynamic \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -fpic -fPIC -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++ ++# Flags for specific targets. ++# ++# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. ++# For building the core, coregrind/Makefile.am files add some extra things. ++AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = -I$(top_srcdir) \ ++ -I$(top_srcdir)/include -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++ $(am__append_3) ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir) \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/include \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_builddir)/include \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_builddir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGA_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGO_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGPV_@VGCONF_ARCH_SEC@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(am__append_4) ++AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ ++AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ ++AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ ++AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC32_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_PPC64BE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64BE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC64LE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(ISA_3_0_BUILD_FLAG) ++AM_CFLAGS_PSO_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64LE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_FREEBSD = @FLAG_M32@ ++AM_CFLAGS_X86_FREEBSD = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_FREEBSD = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_FREEBSD = @FLAG_M32@ -g ++AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ ++AM_CFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 ++ ++AM_CFLAGS_PSO_ARM_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ -marm -mcpu=cortex-a8 $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ -marm -mcpu=cortex-a8 -g ++ ++AM_FLAG_M3264_ARM64_LINUX = @FLAG_M64@ ++AM_CFLAGS_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_ARM64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_AMD64_FREEBSD = @FLAG_M64@ ++AM_CFLAGS_AMD64_FREEBSD = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_FREEBSD = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_FREEBSD = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_DARWIN = -arch i386 ++AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 \ ++ -fno-pic -fno-PIC ++ ++AM_CFLAGS_PSO_X86_DARWIN = $(AM_CFLAGS_X86_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_DARWIN = -arch i386 -g ++AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 ++AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 ++ ++AM_CFLAGS_PSO_AMD64_DARWIN = $(AM_CFLAGS_AMD64_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_DARWIN = -arch x86_64 -g ++AM_FLAG_M3264_S390X_LINUX = @FLAG_M64@ ++AM_CFLAGS_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++AM_CFLAGS_PSO_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_S390X_LINUX = @FLAG_M64@ -g -mzarch -march=z900 ++AM_FLAG_M3264_MIPS32_LINUX = @FLAG_M32@ ++AM_CFLAGS_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS32_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_NANOMIPS_LINUX = @FLAG_M32@ ++AM_CFLAGS_NANOMIPS_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) -mno-jump-table-opt ++AM_CFLAGS_PSO_NANOMIPS_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_NANOMIPS_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_MIPS64_LINUX = @FLAG_M64@ ++AM_CFLAGS_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_SW64_LINUX = @FLAG_M64@ ++AM_CFLAGS_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_SW64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@ ++AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer @SOLARIS_UNDEF_LARGESOURCE@ ++ ++AM_CFLAGS_PSO_X86_SOLARIS = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_SOLARIS = @FLAG_M32@ -g -D_ASM ++AM_FLAG_M3264_AMD64_SOLARIS = @FLAG_M64@ ++AM_CFLAGS_AMD64_SOLARIS = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_SOLARIS = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_SOLARIS = @FLAG_M64@ -g -D_ASM ++ ++# Flags for the primary target. These must be used to build the ++# regtests and performance tests. In fact, these must be used to ++# build anything which is built only once on a dual-arch build. ++# ++AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++@VGCONF_HAVE_PLATFORM_SEC_FALSE@AM_FLAG_M3264_SEC = ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) ++ ++# Baseline link flags for making vgpreload shared objects. ++# ++PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_6) ++PRELOAD_LDFLAGS_COMMON_FREEBSD = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst ++PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load ++PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_5) ++PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 ++PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 ++PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_NANOMIPS_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_SW64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@ ++AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++ $(am__append_7) $(am__append_8) ++ ++# Nb: Tools need to augment these flags with an arch-selection option, such ++# as $(AM_FLAG_M3264_PRI). ++AM_CFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_9) $(am__append_10) \ ++ @FLAG_M64@ $(am__empty) ++AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_11) @FLAG_M64@ ++# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of ++# automake; see comments in Makefile.all.am for more detail. ++AM_CCASFLAGS = $(AM_CPPFLAGS) @FLAG_M64@ ++@VGCONF_OS_IS_DARWIN_TRUE@noinst_DSYMS = $(check_PROGRAMS) ++dist_noinst_SCRIPTS = filter_stderr ++EXTRA_DIST = \ ++ arith-fp.vgtest arith-fp.stdout.exp arith-fp.stdout.exp-8a arith-fp.stderr.exp \ ++ arith-int-imm.vgtest arith-int-imm.stdout.exp arith-int-imm.stderr.exp \ ++ arith-int-reg.vgtest arith-int-reg.stdout.exp arith-int-reg.stderr.exp \ ++ branch.vgtest branch.stdout.exp branch.stderr.exp \ ++ loadstore-fp.vgtest loadstore-fp.stdout.exp loadstore-fp.stderr.exp \ ++ stack.vgtest stack.stdout.exp stack.stderr.exp ++ ++all: all-am ++ ++.SUFFIXES: ++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign memcheck/tests/sw64/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign memcheck/tests/sw64/Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ ++ esac; ++$(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__empty): ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++tags TAGS: ++ ++ctags CTAGS: ++ ++cscope cscopelist: ++ ++distdir: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) distdir-am ++ ++distdir-am: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++ $(MAKE) $(AM_MAKEFLAGS) check-local ++check: check-am ++all-am: Makefile $(SCRIPTS) ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-generic clean-local mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: check-am install-am install-strip ++ ++.PHONY: all all-am check check-am check-local clean clean-generic \ ++ clean-local cscopelist-am ctags-am distclean distclean-generic \ ++ distdir dvi dvi-am html html-am info info-am install \ ++ install-am install-data install-data-am install-dvi \ ++ install-dvi-am install-exec install-exec-am install-html \ ++ install-html-am install-info install-info-am install-man \ ++ install-pdf install-pdf-am install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ ++ uninstall-am ++ ++.PRECIOUS: Makefile ++ ++ ++# This used to be required when Vex had a handwritten Makefile. It ++# shouldn't be needed any more, though. ++ ++#---------------------------------------------------------------------------- ++# noinst_PROGRAMS and noinst_DSYMS targets ++#---------------------------------------------------------------------------- ++ ++# On Darwin, for a program 'p', the DWARF debug info is stored in the ++# directory 'p.dSYM'. This must be generated after the executable is ++# created, with 'dsymutil p'. We could redefine LINK with a script that ++# executes 'dsymutil' after linking, but that's a pain. Instead we use this ++# hook so that every time "make check" is run, we subsequently invoke ++# 'dsymutil' on all the executables that lack a .dSYM directory, or that are ++# newer than their corresponding .dSYM directory. ++build-noinst_DSYMS: $(noinst_DSYMS) ++ for f in $(noinst_DSYMS); do \ ++ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ ++ echo "dsymutil $$f"; \ ++ dsymutil $$f; \ ++ fi; \ ++ done ++ ++# This is used by coregrind/Makefile.am and Makefile.tool.am for doing ++# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. ++# It needs to be depended on by an 'all-local' rule. ++inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_PROGRAMS) ; do \ ++ rm -f $(inplacedir)/$$f; \ ++ ln -f -s ../$(subdir)/$$f $(inplacedir); \ ++ done ++ ++# Similar to inplace-noinst_PROGRAMS ++inplace-noinst_DSYMS: build-noinst_DSYMS ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(inplacedir)/$$f.dSYM; \ ++ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make install". It copies $(noinst_PROGRAMS) into $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'install-exec-local' rule. ++install-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_PROGRAMS); do \ ++ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'uninstall-local' rule. ++uninstall-noinst_PROGRAMS: ++ for f in $(noinst_PROGRAMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f; \ ++ done ++ ++# Similar to install-noinst_PROGRAMS. ++# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with ++# directories. XXX: not sure whether the resulting permissions will be ++# correct when using 'cp -R'... ++install-noinst_DSYMS: build-noinst_DSYMS ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_DSYMS); do \ ++ cp -R $$f.dSYM $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# Similar to uninstall-noinst_PROGRAMS. ++uninstall-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f.dSYM; \ ++ done ++ ++# This needs to be depended on by a 'clean-local' rule. ++clean-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -rf $$f.dSYM; \ ++ done ++ ++check-local: build-noinst_DSYMS ++ ++clean-local: clean-noinst_DSYMS ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff --git a/memcheck/tests/sw64/arith-fp.stderr.exp b/memcheck/tests/sw64/arith-fp.stderr.exp +new file mode 120000 +index 000000000..2283ae8c5 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-fp.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-fp.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-fp.stdout.exp b/memcheck/tests/sw64/arith-fp.stdout.exp +new file mode 120000 +index 000000000..0aba8cf45 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-fp.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-fp.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-fp.stdout.exp-8a b/memcheck/tests/sw64/arith-fp.stdout.exp-8a +new file mode 120000 +index 000000000..89062894c +--- /dev/null ++++ b/memcheck/tests/sw64/arith-fp.stdout.exp-8a +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-fp.stdout.exp-8a +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-fp.vgtest b/memcheck/tests/sw64/arith-fp.vgtest +new file mode 100644 +index 000000000..c1db70340 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-fp.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/arith-fp ++prog: ../../../none/tests/sw64/arith-fp ++vgopts: -q +diff --git a/memcheck/tests/sw64/arith-int-imm.stderr.exp b/memcheck/tests/sw64/arith-int-imm.stderr.exp +new file mode 120000 +index 000000000..9c380d8c0 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-imm.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-int-imm.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-int-imm.stdout.exp b/memcheck/tests/sw64/arith-int-imm.stdout.exp +new file mode 120000 +index 000000000..bb5eb65e8 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-imm.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-int-imm.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-int-imm.vgtest b/memcheck/tests/sw64/arith-int-imm.vgtest +new file mode 100644 +index 000000000..3104d9d2a +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-imm.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/arith-int-imm ++prog: ../../../none/tests/sw64/arith-int-imm ++vgopts: -q +diff --git a/memcheck/tests/sw64/arith-int-reg.stderr.exp b/memcheck/tests/sw64/arith-int-reg.stderr.exp +new file mode 120000 +index 000000000..dcb40ceca +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-reg.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-int-reg.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-int-reg.stdout.exp b/memcheck/tests/sw64/arith-int-reg.stdout.exp +new file mode 120000 +index 000000000..80c58b959 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-reg.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/arith-int-reg.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/arith-int-reg.vgtest b/memcheck/tests/sw64/arith-int-reg.vgtest +new file mode 100644 +index 000000000..fb7bfade6 +--- /dev/null ++++ b/memcheck/tests/sw64/arith-int-reg.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/arith-int-reg ++prog: ../../../none/tests/sw64/arith-int-reg ++vgopts: -q +diff --git a/memcheck/tests/sw64/branch.stderr.exp b/memcheck/tests/sw64/branch.stderr.exp +new file mode 120000 +index 000000000..e1a9340ef +--- /dev/null ++++ b/memcheck/tests/sw64/branch.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/branch.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/branch.stdout.exp b/memcheck/tests/sw64/branch.stdout.exp +new file mode 120000 +index 000000000..f533c62f6 +--- /dev/null ++++ b/memcheck/tests/sw64/branch.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/branch.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/branch.vgtest b/memcheck/tests/sw64/branch.vgtest +new file mode 100644 +index 000000000..c4d9b51b4 +--- /dev/null ++++ b/memcheck/tests/sw64/branch.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/branch ++prog: ../../../none/tests/sw64/branch ++vgopts: -q +diff --git a/memcheck/tests/sw64/filter_stderr b/memcheck/tests/sw64/filter_stderr +new file mode 100755 +index 000000000..a778e971f +--- /dev/null ++++ b/memcheck/tests/sw64/filter_stderr +@@ -0,0 +1,3 @@ ++#! /bin/sh ++ ++../filter_stderr "$@" +diff --git a/memcheck/tests/sw64/loadstore-fp.stderr.exp b/memcheck/tests/sw64/loadstore-fp.stderr.exp +new file mode 120000 +index 000000000..3b98563c9 +--- /dev/null ++++ b/memcheck/tests/sw64/loadstore-fp.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/loadstore-fp.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/loadstore-fp.stdout.exp b/memcheck/tests/sw64/loadstore-fp.stdout.exp +new file mode 120000 +index 000000000..2edd1ff27 +--- /dev/null ++++ b/memcheck/tests/sw64/loadstore-fp.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/loadstore-fp.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/loadstore-fp.vgtest b/memcheck/tests/sw64/loadstore-fp.vgtest +new file mode 100644 +index 000000000..436c8fb9c +--- /dev/null ++++ b/memcheck/tests/sw64/loadstore-fp.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/loadstore-fp ++prog: ../../../none/tests/sw64/loadstore-fp ++vgopts: -q +diff --git a/memcheck/tests/sw64/stack.stderr.exp b/memcheck/tests/sw64/stack.stderr.exp +new file mode 120000 +index 000000000..ec63fe029 +--- /dev/null ++++ b/memcheck/tests/sw64/stack.stderr.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/stack.stderr.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/stack.stdout.exp b/memcheck/tests/sw64/stack.stdout.exp +new file mode 120000 +index 000000000..66be6236f +--- /dev/null ++++ b/memcheck/tests/sw64/stack.stdout.exp +@@ -0,0 +1 @@ ++../../../none/tests/sw64/stack.stdout.exp +\ No newline at end of file +diff --git a/memcheck/tests/sw64/stack.vgtest b/memcheck/tests/sw64/stack.vgtest +new file mode 100644 +index 000000000..d361c251e +--- /dev/null ++++ b/memcheck/tests/sw64/stack.vgtest +@@ -0,0 +1,3 @@ ++prereq: test -e ../../../none/tests/sw64/stack ++prog: ../../../none/tests/sw64/stack ++vgopts: -q +diff --git a/memcheck/tests/unit_libcbase.c b/memcheck/tests/unit_libcbase.c +index 0ce65be26..b61b7e034 100644 +--- a/memcheck/tests/unit_libcbase.c ++++ b/memcheck/tests/unit_libcbase.c +@@ -11,7 +11,8 @@ + + /* On PPC, MIPS and ARM64 Linux VKI_PAGE_SIZE is a variable, not a macro. */ + #if defined(VGP_ppc32_linux) || defined(VGP_ppc64be_linux) \ +- || defined(VGP_ppc64le_linux) ++ || defined(VGP_ppc64le_linux) || defined(VGP_sw64_linux) ++// TODO(Shaohua): PAGE_SIZE = 8192 on sw64 + unsigned long VKI_PAGE_SIZE = 1UL << 12; + #elif defined(VGP_arm64_linux) + unsigned long VKI_PAGE_SIZE = 1UL << 16; +diff --git a/memcheck/tests/vbit-test/irops.c b/memcheck/tests/vbit-test/irops.c +index a09470905..171fb0bca 100644 +--- a/memcheck/tests/vbit-test/irops.c ++++ b/memcheck/tests/vbit-test/irops.c +@@ -49,16 +49,16 @@ static irop_t irops[] = { + { DEFOP(Iop_Or1, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Or8, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Or16, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_Or32, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, ++ { DEFOP(Iop_Or32, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, + { DEFOP(Iop_Or64, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts + { DEFOP(Iop_And1, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_And8, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_And16, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_And32, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_And64, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, ++ { DEFOP(Iop_And64, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, + { DEFOP(Iop_Xor8, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Xor16, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_Xor32, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, ++ { DEFOP(Iop_Xor32, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, + { DEFOP(Iop_Xor64, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Shl8, UNDEF_SHL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 }, + { DEFOP(Iop_Shl16, UNDEF_SHL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 }, +@@ -74,12 +74,14 @@ static irop_t irops[] = { + { DEFOP(Iop_Sar64, UNDEF_SAR), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 1, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32 asserts + { DEFOP(Iop_CmpEQ8, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, + { DEFOP(Iop_CmpEQ16, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_CmpEQ32, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_CmpEQ64, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert ++ { DEFOP(Iop_CmpEQ32, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, ++ { DEFOP(Iop_CmpEQ64, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .sw64 = 1 }, // ppc32, mips assert ++ // + { DEFOP(Iop_CmpNE8, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, + { DEFOP(Iop_CmpNE16, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, +- { DEFOP(Iop_CmpNE32, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +- { DEFOP(Iop_CmpNE64, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert ++ { DEFOP(Iop_CmpNE32, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, ++ { DEFOP(Iop_CmpNE64, UNDEF_CMP_EQ_NE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1, .sw64 = 1 }, // ppc32, mips assert ++ // + { DEFOP(Iop_Not1, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Not8, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_Not16, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, +@@ -119,13 +121,20 @@ static irop_t irops[] = { + { DEFOP(Iop_PopCount64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 0 }, + { DEFOP(Iop_PopCount32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 =0, .mips64 = 0 }, + { DEFOP(Iop_CmpLT32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 }, +- { DEFOP(Iop_CmpLT64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc, mips assert ++ { DEFOP(Iop_CmpLT64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1, .sw64 = 1 }, // ppc, mips assert + { DEFOP(Iop_CmpLE32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 }, +- { DEFOP(Iop_CmpLE64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc, mips assert ++ { DEFOP(Iop_CmpLE64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1, .sw64 = 1 }, // ppc, mips assert + { DEFOP(Iop_CmpLT32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 }, + { DEFOP(Iop_CmpLT64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 1}, // ppc32, mips assert + { DEFOP(Iop_CmpLE32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 }, + { DEFOP(Iop_CmpLE64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 0 }, // ppc32 asserts ++ { DEFOP(Iop_CmpFUN64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, // sw64 asserts ++ { DEFOP(Iop_CmpFLT64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, ++ { DEFOP(Iop_CmpFLE64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, ++ { DEFOP(Iop_CmpFGT64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, ++ { DEFOP(Iop_CmpFGE64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, ++ { DEFOP(Iop_CmpFEQ64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, ++ { DEFOP(Iop_CmpFNE64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0, .sw64 = 1 }, + { DEFOP(Iop_CmpNEZ8, UNDEF_ALL), }, // not supported by mc_translate + { DEFOP(Iop_CmpNEZ16, UNDEF_ALL), }, // not supported by mc_translate + { DEFOP(Iop_CmpNEZ32, UNDEF_ALL), }, // not supported by mc_translate +@@ -218,7 +227,7 @@ static irop_t irops[] = { + { DEFOP(Iop_SqrtF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts + { DEFOP(Iop_SqrtF32, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 1, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 }, + { DEFOP(Iop_SqrtF16, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .arm64 = 1, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, +- { DEFOP(Iop_CmpF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 }, ++ { DEFOP(Iop_CmpF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1, .sw64 = 1 }, + { DEFOP(Iop_CmpF32, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // mips asserts + { DEFOP(Iop_CmpF16, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .arm64 = 1, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, + { DEFOP(Iop_CmpF128, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, +diff --git a/memcheck/tests/vbit-test/vtest.h b/memcheck/tests/vbit-test/vtest.h +index c724f4142..81a43b1f5 100644 +--- a/memcheck/tests/vbit-test/vtest.h ++++ b/memcheck/tests/vbit-test/vtest.h +@@ -188,6 +188,7 @@ typedef struct { + unsigned x86 : 1; + unsigned mips32 : 1; + unsigned mips64 : 1; ++ unsigned sw64 : 1; + } irop_t; + + +diff --git a/none/tests/Makefile.am b/none/tests/Makefile.am +index c0dd7c21d..b3d0f7802 100644 +--- a/none/tests/Makefile.am ++++ b/none/tests/Makefile.am +@@ -35,7 +35,9 @@ endif + if VGCONF_ARCHS_INCLUDE_NANOMIPS + SUBDIRS += nanomips + endif +- ++if VGCONF_ARCHS_INCLUDE_SW64 ++SUBDIRS += sw64 ++endif + + # OS-specific tests + if VGCONF_OS_IS_LINUX +@@ -73,8 +75,12 @@ endif + if VGCONF_PLATFORMS_INCLUDE_X86_FREEBSD + SUBDIRS += x86-freebsd + endif ++if VGCONF_PLATFORMS_INCLUDE_SW64_LINUX ++SUBDIRS += sw64-linux ++endif + + DIST_SUBDIRS = x86 amd64 ppc32 ppc64 arm arm64 s390x mips32 mips64 nanomips \ ++ sw64 sw64-linux \ + linux darwin solaris freebsd amd64-linux x86-linux amd64-darwin \ + x86-darwin amd64-solaris x86-solaris x86-freebsd scripts . + +@@ -197,6 +203,7 @@ EXTRA_DIST = \ + require-text-symbol-2.stderr.exp-libcso1 \ + require-text-symbol-2.stderr.exp-libcso6 \ + require-text-symbol-2.stderr.exp-freebsd \ ++ require-text-symbol-2.stderr.exp-sw64 \ + res_search.stderr.exp res_search.stdout.exp res_search.vgtest \ + resolv.stderr.exp resolv.stdout.exp resolv.vgtest \ + rlimit_nofile.stderr.exp rlimit_nofile.stdout.exp rlimit_nofile.vgtest \ +@@ -294,8 +301,11 @@ if HAVE_ANSI + check_PROGRAMS += ansi + endif + +-if BUILD_IFUNC_TESTS +- check_PROGRAMS += ifunc ++# Disable ifunc on sw64, as glibc-2.28 does not support that attr. ++if !VGCONF_ARCHS_INCLUDE_SW64 ++ if BUILD_IFUNC_TESTS ++ check_PROGRAMS += ifunc ++ endif + endif + + AM_CFLAGS += $(AM_FLAG_M3264_PRI) +diff --git a/none/tests/allexec_prepare_prereq b/none/tests/allexec_prepare_prereq +index a541f4299..ad016f22b 100755 +--- a/none/tests/allexec_prepare_prereq ++++ b/none/tests/allexec_prepare_prereq +@@ -34,5 +34,6 @@ pair s390x_unexisting_in_32bits s390x + pair arm arm64 + pair mips32 mips64 + pair nanomips nanoMIPS_unexisting_in_64bits ++pair sw64_unexisting_in_32bits sw64 + + exit 0 +diff --git a/none/tests/cmdline2.stdout.exp b/none/tests/cmdline2.stdout.exp +index 241d33afa..7e0fdb4fd 100644 +--- a/none/tests/cmdline2.stdout.exp ++++ b/none/tests/cmdline2.stdout.exp +@@ -167,6 +167,10 @@ usage: valgrind [options] prog-and-args + --stats=no|yes show tool and core statistics [no] + --sanity-level= level of sanity checking to do [1] + --trace-flags= show generated code? (X = 0|1) [00000000] ++ --trace-reg= show register value? (X = 0|1) [000] ++ 001 ....... show control registers ++ 010 ....... show interger registers ++ 100 ....... show float-point registers + --profile-flags= ditto, but for profiling (X = 0|1) [00000000] + --profile-interval= show profile every event checks + [0, meaning only at the end of the run] +@@ -180,6 +184,7 @@ usage: valgrind [options] prog-and-args + --debug-dump=syms mimic /usr/bin/readelf --syms + --debug-dump=line mimic /usr/bin/readelf --debug-dump=line + --debug-dump=frames mimic /usr/bin/readelf --debug-dump=frames ++ --dump-expansion-ratio=no|yes show instruction expansion ratio? [no] + --trace-redir=no|yes show redirection details? [no] + --trace-sched=no|yes show thread scheduler details? [no] + --profile-heap=no|yes profile Valgrind's own space use +diff --git a/none/tests/libvex_test.c b/none/tests/libvex_test.c +index 5b57a4c2e..b3a38536e 100644 +--- a/none/tests/libvex_test.c ++++ b/none/tests/libvex_test.c +@@ -76,6 +76,8 @@ __attribute__((noinline)) static void get_guest_arch(VexArch *ga) + *ga = VexArchMIPS64; + #elif defined(VGA_nanomips) + *ga = VexArchNANOMIPS; ++#elif defined(VGA_sw64) ++ *ga = VexArchSW64; + #else + missing arch; + #endif +@@ -113,6 +115,7 @@ static VexEndness arch_endness (VexArch va) { + else + return VexEndnessBE; + } ++ case VexArchSW64: return VexEndnessLE; + default: failure_exit(); + } + } +@@ -139,6 +142,7 @@ static UInt arch_hwcaps (VexArch va) { + case VexArchMIPS64: return VEX_PRID_COMP_MIPS | VEX_MIPS_HOST_FR; + #endif + case VexArchNANOMIPS: return 0; ++ case VexArchSW64: return VEX_SW64_CORE3; + default: failure_exit(); + } + } +@@ -156,6 +160,7 @@ static Bool mode64 (VexArch va) { + case VexArchMIPS32: return False; + case VexArchMIPS64: return True; + case VexArchNANOMIPS: return False; ++ case VexArchSW64: return True; + default: failure_exit(); + } + } +diff --git a/none/tests/pause.c b/none/tests/pause.c +new file mode 100644 +index 000000000..5276aa651 +--- /dev/null ++++ b/none/tests/pause.c +@@ -0,0 +1,9 @@ ++ ++#include ++#include ++ ++int main() { ++ printf("Will pause()\n"); ++ pause(); ++ return 0; ++} +diff --git a/none/tests/require-text-symbol-2.stderr.exp-sw64 b/none/tests/require-text-symbol-2.stderr.exp-sw64 +new file mode 100644 +index 000000000..18aaa22d7 +--- /dev/null ++++ b/none/tests/require-text-symbol-2.stderr.exp-sw64 +@@ -0,0 +1,9 @@ ++ ++valgrind: Fatal error at when loading library with soname ++valgrind: libc.so.6.1 ++valgrind: Cannot find any text symbol with a name that matches the pattern ++valgrind: doesntexist ++valgrind: as required by a --require-text-symbol= specification. ++ ++valgrind: Cannot continue -- exiting now. ++ +diff --git a/none/tests/simple-func b/none/tests/simple-func +new file mode 100755 +index 0000000000000000000000000000000000000000..276693409c08829f679f81e4330011c9f44e264c +GIT binary patch +literal 9048 +zcmeHN&ubG=5T1=~Q^ndcjiwBJ+3hL)?UpBu1O|(mRx%V+mEqq(y)WIi8|fSv%KdU +z$70>mjC?=U&}!N5X*s^mWW26V0F0DN_V_3Z=Zt%zoqvbwmvEiI)qJ!AZ{9C|{x!ON +zx%U0(xlh}p=Nn(P7EW}bB#8o|fG8jehytR3C?E=m0-}H@APR^Ar=Y;jgO5kUXJ1d@ +zCb>cs5Cud5Q9u+B1w;W+Kok%KL;+Di6c7deR|V*en#_6q1e`zp>i%7E $@.lst ++ ++clean: ++ rm -rf \ ++ *.o \ ++ *.lst \ ++ $(targets) +diff --git a/none/tests/sw64-insn/README.md b/none/tests/sw64-insn/README.md +new file mode 100644 +index 000000000..327e74b36 +--- /dev/null ++++ b/none/tests/sw64-insn/README.md +@@ -0,0 +1,5 @@ ++ ++# How to ++First build all tests with `make`. ++ ++Then run `./test-all.sh` in current directory. +diff --git a/none/tests/sw64-insn/addl-48.S b/none/tests/sw64-insn/addl-48.S +new file mode 100644 +index 000000000..4c7855eae +--- /dev/null ++++ b/none/tests/sw64-insn/addl-48.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ addl $17, $18, $16 ++ subl $16, 3, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/addli-119.S b/none/tests/sw64-insn/addli-119.S +new file mode 100644 +index 000000000..372b65721 +--- /dev/null ++++ b/none/tests/sw64-insn/addli-119.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ addl $17, 1, $16 ++ subl $16, 3, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/addw-42.S b/none/tests/sw64-insn/addw-42.S +new file mode 100644 +index 000000000..30287b2b6 +--- /dev/null ++++ b/none/tests/sw64-insn/addw-42.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ addw $17, $18, $16 ++ subw $16, 3, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/addwi-113.S b/none/tests/sw64-insn/addwi-113.S +new file mode 100644 +index 000000000..64c0f8d63 +--- /dev/null ++++ b/none/tests/sw64-insn/addwi-113.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ addw $17, 1, $16 ++ subw $16, 3, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/and-62.S b/none/tests/sw64-insn/and-62.S +new file mode 100644 +index 000000000..4419e1636 +--- /dev/null ++++ b/none/tests/sw64-insn/and-62.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ and $17, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/andi-133.S b/none/tests/sw64-insn/andi-133.S +new file mode 100644 +index 000000000..79c192ada +--- /dev/null ++++ b/none/tests/sw64-insn/andi-133.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ and $17, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/basic-insn-list b/none/tests/sw64-insn/basic-insn-list +new file mode 100644 +index 000000000..1a2fdef92 +--- /dev/null ++++ b/none/tests/sw64-insn/basic-insn-list +@@ -0,0 +1,253 @@ ++sys_call_b-1 ++sys_call-2 ++call-3 ++ret-4 ++jmp-5 ++br-6 ++bsr-7 ++memb-8 ++imemb-9 ++rtc-10 ++rcid-11 ++halt-12 ++rd_f-13 ++wr_f-14 ++rtid-15 ++pri_rcsr-16 ++pri_wcsr-17 ++pri_ret-18 ++lldw-19 ++lldl-20 ++ldw_inc-21 ++ldl_inc-22 ++ldw_dec-23 ++ldl_dec-24 ++ldw_set-25 ++ldl_set-26 ++lstw-27 ++lstl-28 ++ldw_nc-29 ++ldl_nc-30 ++ldd_nc-31 ++stw_nc-32 ++stl_nc-33 ++std_nc-34 ++addw-42 ++subw-43 ++s4addw-44 ++s4subw-45 ++s8addw-46 ++s8subw-47 ++addl-48 ++subl-49 ++s4addl-50 ++s4subl-51 ++s8addl-52 ++s8subl-53 ++mulw-54 ++mull-55 ++umulh-56 ++cmpeq-57 ++cmplt-58 ++cmple-59 ++cmpult-60 ++cmpule-61 ++and-62 ++bic-63 ++bis-64 ++ornot-65 ++xor-66 ++eqv-67 ++inslb-68 ++inslh-69 ++inslw-70 ++insll-71 ++inshb-72 ++inshh-73 ++inshw-74 ++inshl-75 ++sll-76 ++srl-77 ++sra-78 ++extlb-79 ++extlh-80 ++extlw-81 ++extll-82 ++exthb-83 ++exthh-84 ++exthw-85 ++exthl-86 ++ctpop-87 ++ctlz-88 ++cttz-89 ++masklb-90 ++masklh-91 ++masklw-92 ++maskll-93 ++maskhb-94 ++maskhh-95 ++maskhw-96 ++maskhl-97 ++zap-98 ++zapnot-99 ++sextb-100 ++sexth-101 ++cmpgeb-102 ++fimovs-103 ++fimovd-104 ++seleq-105 ++selge-106 ++selgt-107 ++selle-108 ++sellt-109 ++selne-110 ++sellbc-111 ++sellbs-112 ++addwi-113 ++subwi-114 ++s4addwi-115 ++s4subwi-116 ++s8addwi-117 ++s8subwi-118 ++addli-119 ++subli-120 ++s4addli-121 ++s4subli-122 ++s8addli-123 ++s8subli-124 ++mulwi-125 ++mulli-126 ++umulhi-127 ++cmpeqi-128 ++cmplti-129 ++cmplei-130 ++cmpulti-131 ++cmpulei-132 ++andi-133 ++bici-134 ++bisi-135 ++ornoti-136 ++xori-137 ++eqvi-138 ++inslbi-139 ++inslhi-140 ++inslwi-141 ++inslli-142 ++inshbi-143 ++inshhi-144 ++inshwi-145 ++inshli-146 ++slli-147 ++srli-148 ++srai-149 ++extlbi-150 ++extlhi-151 ++extlwi-152 ++extlli-153 ++exthbi-154 ++exthhi-155 ++exthwi-156 ++exthli-157 ++masklbi-158 ++masklhi-159 ++masklwi-160 ++masklli-161 ++maskhbi-162 ++maskhhi-163 ++maskhwi-164 ++maskhli-165 ++zapi-166 ++zapnoti-167 ++sextbi-168 ++sexthi-169 ++cmpgebi-170 ++seleqi-171 ++selgei-172 ++selgti-173 ++sellei-174 ++sellti-175 ++selnei-176 ++sellbci-177 ++sellbsi-178 ++fadds-180 ++faddd-181 ++fsubs-182 ++fsubd-183 ++fmuls-184 ++fmuld-185 ++fdivs-186 ++fdivd-187 ++fsqrts-188 ++fsqrtd-189 ++fcmpeq-190 ++fcmple-191 ++fcmplt-192 ++fcmpun-193 ++fcvtsd-194 ++fcvtds-195 ++fcvtdl_g-196 ++fcvtdl_p-197 ++fcvtdl_z-198 ++fcvtdl_n-199 ++fcvtdl-200 ++fcvtwl-201 ++fcvtlw-202 ++fcvtls-203 ++fcvtld-204 ++fcpys-205 ++fcpyse-206 ++fcpysn-207 ++ifmovs-208 ++ifmovd-209 ++rfpcr-210 ++wfpcr-211 ++setfpec0-212 ++setfpec1-213 ++setfpec2-214 ++setfpec3-215 ++fmas-216 ++fmad-217 ++fmss-218 ++fmsd-219 ++fnmas-220 ++fnmad-221 ++fnmss-222 ++fnmsd-223 ++fseleq-224 ++fselne-225 ++fsellt-226 ++fselle-227 ++fselgt-228 ++fselge-229 ++ldbu-336 ++ldhu-337 ++ldw-338 ++ldl-339 ++ldl_u-340 ++pri_ld-341 ++flds-342 ++fldd-343 ++stb-344 ++sth-345 ++stw-346 ++stl-347 ++stl_u-348 ++pri_st-349 ++fsts-350 ++fstd-351 ++beq-352 ++bne-353 ++blt-354 ++ble-355 ++bgt-356 ++bge-357 ++blbc-358 ++blbs-359 ++fbeq-360 ++fbne-361 ++fblt-362 ++fble-363 ++fbgt-364 ++fbge-365 ++ldi-366 ++ldih-367 +diff --git a/none/tests/sw64-insn/beq-352.S b/none/tests/sw64-insn/beq-352.S +new file mode 100644 +index 000000000..d70369101 +--- /dev/null ++++ b/none/tests/sw64-insn/beq-352.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ beq $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bge-357.S b/none/tests/sw64-insn/bge-357.S +new file mode 100644 +index 000000000..aa6d20c1f +--- /dev/null ++++ b/none/tests/sw64-insn/bge-357.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, -2 ++ bge $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bgt-356.S b/none/tests/sw64-insn/bgt-356.S +new file mode 100644 +index 000000000..9fa0e6a98 +--- /dev/null ++++ b/none/tests/sw64-insn/bgt-356.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, -2 ++ bgt $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bic-63.S b/none/tests/sw64-insn/bic-63.S +new file mode 100644 +index 000000000..fc6be15e1 +--- /dev/null ++++ b/none/tests/sw64-insn/bic-63.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ bic $17, $18, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bici-134.S b/none/tests/sw64-insn/bici-134.S +new file mode 100644 +index 000000000..131f46882 +--- /dev/null ++++ b/none/tests/sw64-insn/bici-134.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ bic $17, 1, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bis-64.S b/none/tests/sw64-insn/bis-64.S +new file mode 100644 +index 000000000..e4c7ff379 +--- /dev/null ++++ b/none/tests/sw64-insn/bis-64.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ bis $17, $18, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bisi-135.S b/none/tests/sw64-insn/bisi-135.S +new file mode 100644 +index 000000000..65f299879 +--- /dev/null ++++ b/none/tests/sw64-insn/bisi-135.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ bis $17, 1, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/blbc-358.S b/none/tests/sw64-insn/blbc-358.S +new file mode 100644 +index 000000000..0540c7e10 +--- /dev/null ++++ b/none/tests/sw64-insn/blbc-358.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1001 ++ blbc $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/blbs-359.S b/none/tests/sw64-insn/blbs-359.S +new file mode 100644 +index 000000000..0540c7e10 +--- /dev/null ++++ b/none/tests/sw64-insn/blbs-359.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1001 ++ blbc $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ble-355.S b/none/tests/sw64-insn/ble-355.S +new file mode 100644 +index 000000000..fa4293382 +--- /dev/null ++++ b/none/tests/sw64-insn/ble-355.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ble $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/blt-354.S b/none/tests/sw64-insn/blt-354.S +new file mode 100644 +index 000000000..3691ed586 +--- /dev/null ++++ b/none/tests/sw64-insn/blt-354.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ blt $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bne-353.S b/none/tests/sw64-insn/bne-353.S +new file mode 100644 +index 000000000..601b65caa +--- /dev/null ++++ b/none/tests/sw64-insn/bne-353.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0 ++ bne $17, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/br-6.S b/none/tests/sw64-insn/br-6.S +new file mode 100644 +index 000000000..407b74bc0 +--- /dev/null ++++ b/none/tests/sw64-insn/br-6.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $16, 0 ++ br exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/bsr-7.S b/none/tests/sw64-insn/bsr-7.S +new file mode 100644 +index 000000000..28abeb3aa +--- /dev/null ++++ b/none/tests/sw64-insn/bsr-7.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $16, 0 ++ bsr $26, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/call-3.S b/none/tests/sw64-insn/call-3.S +new file mode 100644 +index 000000000..f0fb2cc7b +--- /dev/null ++++ b/none/tests/sw64-insn/call-3.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $16, 0 ++ call $26, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpeq-57.S b/none/tests/sw64-insn/cmpeq-57.S +new file mode 100644 +index 000000000..aca76e65a +--- /dev/null ++++ b/none/tests/sw64-insn/cmpeq-57.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 42 ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpeqi-128.S b/none/tests/sw64-insn/cmpeqi-128.S +new file mode 100644 +index 000000000..7cfe65fd4 +--- /dev/null ++++ b/none/tests/sw64-insn/cmpeqi-128.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ cmpeq $17, 42, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpgeb-102.S b/none/tests/sw64-insn/cmpgeb-102.S +new file mode 100644 +index 000000000..e8f5c7caa +--- /dev/null ++++ b/none/tests/sw64-insn/cmpgeb-102.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ ldi $18, 0xf0f2f1 ++ cmpgeb $17, $18, $16 ++ subl $16, 0xfd, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpgebi-170.S b/none/tests/sw64-insn/cmpgebi-170.S +new file mode 100644 +index 000000000..dbe5c2fe2 +--- /dev/null ++++ b/none/tests/sw64-insn/cmpgebi-170.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0 ++ cmpgeb $17, 0xf0, $16 ++ subl $16, 0xff, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmple-59.S b/none/tests/sw64-insn/cmple-59.S +new file mode 100644 +index 000000000..baf5d9919 +--- /dev/null ++++ b/none/tests/sw64-insn/cmple-59.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 42 ++ cmple $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmplei-130.S b/none/tests/sw64-insn/cmplei-130.S +new file mode 100644 +index 000000000..b4851cc53 +--- /dev/null ++++ b/none/tests/sw64-insn/cmplei-130.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ cmple $17, 42, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmplt-58.S b/none/tests/sw64-insn/cmplt-58.S +new file mode 100644 +index 000000000..3cee2bcd5 +--- /dev/null ++++ b/none/tests/sw64-insn/cmplt-58.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 43 ++ cmplt $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmplti-129.S b/none/tests/sw64-insn/cmplti-129.S +new file mode 100644 +index 000000000..8822945ed +--- /dev/null ++++ b/none/tests/sw64-insn/cmplti-129.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ cmplt $17, 43, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpule-61.S b/none/tests/sw64-insn/cmpule-61.S +new file mode 100644 +index 000000000..5a585ae21 +--- /dev/null ++++ b/none/tests/sw64-insn/cmpule-61.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 42 ++ cmpule $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpulei-132.S b/none/tests/sw64-insn/cmpulei-132.S +new file mode 100644 +index 000000000..e76779678 +--- /dev/null ++++ b/none/tests/sw64-insn/cmpulei-132.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ cmpule $17, 42, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpult-60.S b/none/tests/sw64-insn/cmpult-60.S +new file mode 100644 +index 000000000..0bde80a7d +--- /dev/null ++++ b/none/tests/sw64-insn/cmpult-60.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 43 ++ cmpult $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/cmpulti-131.S b/none/tests/sw64-insn/cmpulti-131.S +new file mode 100644 +index 000000000..6d7daffb0 +--- /dev/null ++++ b/none/tests/sw64-insn/cmpulti-131.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ cmpult $17, 43, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ctlz-88.S b/none/tests/sw64-insn/ctlz-88.S +new file mode 100644 +index 000000000..b162156d7 +--- /dev/null ++++ b/none/tests/sw64-insn/ctlz-88.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ sll $17, 16, $17 ++ ctlz $17, $16 ++ subl $16, 32, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ctlzow-247.S b/none/tests/sw64-insn/ctlzow-247.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/ctlzow-247.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ctpop-87.S b/none/tests/sw64-insn/ctpop-87.S +new file mode 100644 +index 000000000..3373f00d4 +--- /dev/null ++++ b/none/tests/sw64-insn/ctpop-87.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf1 ++ ctpop $17, $16 ++ subl $16, 5, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ctpopow-246.S b/none/tests/sw64-insn/ctpopow-246.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/ctpopow-246.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/cttz-89.S b/none/tests/sw64-insn/cttz-89.S +new file mode 100644 +index 000000000..90e50981f +--- /dev/null ++++ b/none/tests/sw64-insn/cttz-89.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f0 ++ cttz $17, $16 ++ subl $16, 4, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/eqv-67.S b/none/tests/sw64-insn/eqv-67.S +new file mode 100644 +index 000000000..f2860b8ee +--- /dev/null ++++ b/none/tests/sw64-insn/eqv-67.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ eqv $17, $18, $16 ++ addl $16, 4 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/eqvi-138.S b/none/tests/sw64-insn/eqvi-138.S +new file mode 100644 +index 000000000..acf1dd856 +--- /dev/null ++++ b/none/tests/sw64-insn/eqvi-138.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ eqv $17, 1, $16 ++ addl $16, 4 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthb-83.S b/none/tests/sw64-insn/exthb-83.S +new file mode 100644 +index 000000000..7bf8f50a4 +--- /dev/null ++++ b/none/tests/sw64-insn/exthb-83.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 0 ++ exthb $17, $18, $16 ++ subl $16, 0xf1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthbi-154.S b/none/tests/sw64-insn/exthbi-154.S +new file mode 100644 +index 000000000..3bdf8c4d8 +--- /dev/null ++++ b/none/tests/sw64-insn/exthbi-154.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ exthb $17, 0, $16 ++ subl $16, 0xf1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthh-84.S b/none/tests/sw64-insn/exthh-84.S +new file mode 100644 +index 000000000..ba913b866 +--- /dev/null ++++ b/none/tests/sw64-insn/exthh-84.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 0 ++ exthh $17, $18, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthhi-155.S b/none/tests/sw64-insn/exthhi-155.S +new file mode 100644 +index 000000000..6acb0b981 +--- /dev/null ++++ b/none/tests/sw64-insn/exthhi-155.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ exthh $17, 0, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthl-86.S b/none/tests/sw64-insn/exthl-86.S +new file mode 100644 +index 000000000..f8ce13164 +--- /dev/null ++++ b/none/tests/sw64-insn/exthl-86.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 7 ++ exthl $17, $18, $16 ++ srl $16, 16, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthli-157.S b/none/tests/sw64-insn/exthli-157.S +new file mode 100644 +index 000000000..4c572a3e7 +--- /dev/null ++++ b/none/tests/sw64-insn/exthli-157.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ exthl $17, 7, $16 ++ srl $16, 16, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthw-85.S b/none/tests/sw64-insn/exthw-85.S +new file mode 100644 +index 000000000..e52fb45f1 +--- /dev/null ++++ b/none/tests/sw64-insn/exthw-85.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 7 ++ exthw $17, $18, $16 ++ srl $16, 16, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/exthwi-156.S b/none/tests/sw64-insn/exthwi-156.S +new file mode 100644 +index 000000000..ba5beb643 +--- /dev/null ++++ b/none/tests/sw64-insn/exthwi-156.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ exthw $17, 7, $16 ++ srl $16, 16, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlb-79.S b/none/tests/sw64-insn/extlb-79.S +new file mode 100644 +index 000000000..050cc79cb +--- /dev/null ++++ b/none/tests/sw64-insn/extlb-79.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ extlb $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlbi-150.S b/none/tests/sw64-insn/extlbi-150.S +new file mode 100644 +index 000000000..3be682a7f +--- /dev/null ++++ b/none/tests/sw64-insn/extlbi-150.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ extlb $17, 1, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlh-80.S b/none/tests/sw64-insn/extlh-80.S +new file mode 100644 +index 000000000..fd17aabc0 +--- /dev/null ++++ b/none/tests/sw64-insn/extlh-80.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ extlh $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlhi-151.S b/none/tests/sw64-insn/extlhi-151.S +new file mode 100644 +index 000000000..d55c60f3c +--- /dev/null ++++ b/none/tests/sw64-insn/extlhi-151.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ extlh $17, 1, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extll-82.S b/none/tests/sw64-insn/extll-82.S +new file mode 100644 +index 000000000..9dc29c68e +--- /dev/null ++++ b/none/tests/sw64-insn/extll-82.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ extll $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlli-153.S b/none/tests/sw64-insn/extlli-153.S +new file mode 100644 +index 000000000..99391ab1d +--- /dev/null ++++ b/none/tests/sw64-insn/extlli-153.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ extll $17, 1, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlw-81.S b/none/tests/sw64-insn/extlw-81.S +new file mode 100644 +index 000000000..16f45a72e +--- /dev/null ++++ b/none/tests/sw64-insn/extlw-81.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ extlw $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/extlwi-152.S b/none/tests/sw64-insn/extlwi-152.S +new file mode 100644 +index 000000000..e5d038eba +--- /dev/null ++++ b/none/tests/sw64-insn/extlwi-152.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ extlw $17, 1, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/faddd-181.S b/none/tests/sw64-insn/faddd-181.S +new file mode 100644 +index 000000000..ffc0111f3 +--- /dev/null ++++ b/none/tests/sw64-insn/faddd-181.S +@@ -0,0 +1,15 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ fcvtld $f17, $f18 ++ faddd $f18, $f18, $f17 ++ fcvtdl $f17, $f16 ++ fimovd $f16, $16 ++ cmpeq $16, 84, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fadds-180.S b/none/tests/sw64-insn/fadds-180.S +new file mode 100644 +index 000000000..f9a44f1fe +--- /dev/null ++++ b/none/tests/sw64-insn/fadds-180.S +@@ -0,0 +1,16 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 1078523331 /* 3.14 */ ++ ldi $18, 1076719780 /* 2.71 */ ++ ldi $19, 1086010164 /* 5.85 */ ++ ifmovs $17, $f17 ++ ifmovs $18, $f18 ++ fadds $f17, $f18, $f16 ++ fimovs $f16, $16 ++ cmpeq $16, $19, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fbeq-360.S b/none/tests/sw64-insn/fbeq-360.S +new file mode 100644 +index 000000000..1e19ead6f +--- /dev/null ++++ b/none/tests/sw64-insn/fbeq-360.S +@@ -0,0 +1,14 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ fcvtld $f17, $f18 ++ fsubd $f18, $f18, $f17 ++ ldi $16, 0 ++ fbeq $f17, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fbge-365.S b/none/tests/sw64-insn/fbge-365.S +new file mode 100644 +index 000000000..4ca2b59ed +--- /dev/null ++++ b/none/tests/sw64-insn/fbge-365.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ ldi $16, 0 ++ fbge $f21, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fbgt-364.S b/none/tests/sw64-insn/fbgt-364.S +new file mode 100644 +index 000000000..3fd4d4a79 +--- /dev/null ++++ b/none/tests/sw64-insn/fbgt-364.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ ldi $16, 0 ++ fbgt $f21, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fble-363.S b/none/tests/sw64-insn/fble-363.S +new file mode 100644 +index 000000000..86ca7d14d +--- /dev/null ++++ b/none/tests/sw64-insn/fble-363.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f18, $f17, $f21 ++ ldi $16, 0 ++ fble $f21, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fblt-362.S b/none/tests/sw64-insn/fblt-362.S +new file mode 100644 +index 000000000..354fd9547 +--- /dev/null ++++ b/none/tests/sw64-insn/fblt-362.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f18, $f17, $f21 ++ ldi $16, 0 ++ fblt $f21, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fbne-361.S b/none/tests/sw64-insn/fbne-361.S +new file mode 100644 +index 000000000..66adedc40 +--- /dev/null ++++ b/none/tests/sw64-insn/fbne-361.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ ldi $16, 0 ++ fbne $f21, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcmpeq-190.S b/none/tests/sw64-insn/fcmpeq-190.S +new file mode 100644 +index 000000000..67f846286 +--- /dev/null ++++ b/none/tests/sw64-insn/fcmpeq-190.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcmpeq $f17, $f18, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcmple-191.S b/none/tests/sw64-insn/fcmple-191.S +new file mode 100644 +index 000000000..a8915cc2f +--- /dev/null ++++ b/none/tests/sw64-insn/fcmple-191.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcmple $f17, $f18, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcmplt-192.S b/none/tests/sw64-insn/fcmplt-192.S +new file mode 100644 +index 000000000..325c33896 +--- /dev/null ++++ b/none/tests/sw64-insn/fcmplt-192.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcmplt $f18, $f17, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcmpun-193.S b/none/tests/sw64-insn/fcmpun-193.S +new file mode 100644 +index 000000000..9b162d2dd +--- /dev/null ++++ b/none/tests/sw64-insn/fcmpun-193.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcmpun $f17, $f18, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcpys-205.S b/none/tests/sw64-insn/fcpys-205.S +new file mode 100644 +index 000000000..239bd20a2 +--- /dev/null ++++ b/none/tests/sw64-insn/fcpys-205.S +@@ -0,0 +1,39 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.772453784942627 = 0x3ffc 5bf8 8000 0000 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcpys $f17, $f18, $f20 ++ fsubd $f18, $f20, $f1 ++ ldi $16, 0 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcpyse-206.S b/none/tests/sw64-insn/fcpyse-206.S +new file mode 100644 +index 000000000..c5a924ef9 +--- /dev/null ++++ b/none/tests/sw64-insn/fcpyse-206.S +@@ -0,0 +1,39 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.772453784942627 = 0x3ffc 5bf8 8000 0000 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcpyse $f17, $f18, $f20 ++ fsubd $f18, $f20, $f1 ++ ldi $16, 0 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcpysn-207.S b/none/tests/sw64-insn/fcpysn-207.S +new file mode 100644 +index 000000000..83bd676c2 +--- /dev/null ++++ b/none/tests/sw64-insn/fcpysn-207.S +@@ -0,0 +1,39 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.772453784942627 = 0x3ffc 5bf8 8000 0000 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcpysn $f17, $f18, $f20 ++ faddd $f18, $f20, $f1 ++ ldi $16, 0 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtdl-200.S b/none/tests/sw64-insn/fcvtdl-200.S +new file mode 100644 +index 000000000..a073e1b56 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtdl-200.S +@@ -0,0 +1,18 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f16 ++ fcvtld $f16, $f17 ++ ldi $18, 2 ++ ifmovd $18, $f16 ++ fcvtld $f16, $f18 ++ fmuld $f17, $f18, $f19 ++ fcvtdl $f19, $f16 ++ fimovd $f16, $16 ++ cmpeq $16, 84, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtdl_g-196.S b/none/tests/sw64-insn/fcvtdl_g-196.S +new file mode 100644 +index 000000000..0f4ff787f +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtdl_g-196.S +@@ -0,0 +1,37 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtdl_g $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtdl_n-199.S b/none/tests/sw64-insn/fcvtdl_n-199.S +new file mode 100644 +index 000000000..fe99e49ad +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtdl_n-199.S +@@ -0,0 +1,37 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtdl_n $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtdl_p-197.S b/none/tests/sw64-insn/fcvtdl_p-197.S +new file mode 100644 +index 000000000..d872c82e4 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtdl_p-197.S +@@ -0,0 +1,37 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtdl_p $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, 4 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtdl_z-198.S b/none/tests/sw64-insn/fcvtdl_z-198.S +new file mode 100644 +index 000000000..7925c4081 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtdl_z-198.S +@@ -0,0 +1,37 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtdl_z $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtds-195.S b/none/tests/sw64-insn/fcvtds-195.S +new file mode 100644 +index 000000000..b51203274 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtds-195.S +@@ -0,0 +1,19 @@ ++ .text ++ .global _start ++_start: ++ ++.run: ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ fcvtld $f17, $f18 ++ fcvtds $f18, $f19 ++ ++ fcvtls $f17, $f20 ++ ldi $16, 0 ++ fsubd $f19, $f20, $f1 ++ fbeq $f1, .exit ++ ldi $16, 1 ++ ++.exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtld-204.S b/none/tests/sw64-insn/fcvtld-204.S +new file mode 100644 +index 000000000..a073e1b56 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtld-204.S +@@ -0,0 +1,18 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f16 ++ fcvtld $f16, $f17 ++ ldi $18, 2 ++ ifmovd $18, $f16 ++ fcvtld $f16, $f18 ++ fmuld $f17, $f18, $f19 ++ fcvtdl $f19, $f16 ++ fimovd $f16, $16 ++ cmpeq $16, 84, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtls-203.S b/none/tests/sw64-insn/fcvtls-203.S +new file mode 100644 +index 000000000..79e0b87c1 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtls-203.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 0x43d0 0248 8000 0000 */ ++ ldi $19, 0x43d00248 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ++run: ++ fcvtls $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, $19 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtlw-202.S b/none/tests/sw64-insn/fcvtlw-202.S +new file mode 100644 +index 000000000..e63335d0f +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtlw-202.S +@@ -0,0 +1,36 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 0x41a2 5b09 4000 0000 */ ++ ldi $19, 0x41a25b09 ++ sll $19, 16 ++ ldi $19, 0x4000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ++run: ++ fcvtlw $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, $19 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtsd-194.S b/none/tests/sw64-insn/fcvtsd-194.S +new file mode 100644 +index 000000000..079858291 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtsd-194.S +@@ -0,0 +1,38 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtsd $f1, $f2 ++ fcmpeq $f2, $f17, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fcvtwl-201.S b/none/tests/sw64-insn/fcvtwl-201.S +new file mode 100644 +index 000000000..d45d073b1 +--- /dev/null ++++ b/none/tests/sw64-insn/fcvtwl-201.S +@@ -0,0 +1,31 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ ldi $19, 0x40490fda ++ ++run: ++ fcvtwl $f17, $f16 ++ fimovd $f16, $16 ++ subl $16, $19 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fdivd-187.S b/none/tests/sw64-insn/fdivd-187.S +new file mode 100644 +index 000000000..3e6e01ee0 +--- /dev/null ++++ b/none/tests/sw64-insn/fdivd-187.S +@@ -0,0 +1,18 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f16 ++ fcvtld $f16, $f17 ++ ldi $18, 2 ++ ifmovd $18, $f16 ++ fcvtld $f16, $f18 ++ fdivd $f17, $f18, $f19 ++ fcvtdl $f19, $f16 ++ fimovd $f16, $16 ++ cmpeq $16, 21, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fdivs-186.S b/none/tests/sw64-insn/fdivs-186.S +new file mode 100644 +index 000000000..4bd38e9ba +--- /dev/null ++++ b/none/tests/sw64-insn/fdivs-186.S +@@ -0,0 +1,42 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.1557279825210571 = 0x3ff27ddca0000000 */ ++ ldi $19, 0x3ff27ddc ++ sll $19, 16 ++ ldi $19, 0xa000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fdivs $f1, $f2, $f4 ++ ldi $16, 0 ++ fsubs $f4, $f3, $f1 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fimovd-104.S b/none/tests/sw64-insn/fimovd-104.S +new file mode 100644 +index 000000000..bf5a9292c +--- /dev/null ++++ b/none/tests/sw64-insn/fimovd-104.S +@@ -0,0 +1,12 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 1078523331 ++ ifmovd $17, $f16 ++ fimovd $f16, $18 ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fimovs-103.S b/none/tests/sw64-insn/fimovs-103.S +new file mode 100644 +index 000000000..050f2b58e +--- /dev/null ++++ b/none/tests/sw64-insn/fimovs-103.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1078523331 ++ ifmovs $17, $f16 ++ fimovs $f16, $18 ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/fldd-343.S b/none/tests/sw64-insn/fldd-343.S +new file mode 100644 +index 000000000..763a14d6f +--- /dev/null ++++ b/none/tests/sw64-insn/fldd-343.S +@@ -0,0 +1,51 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ ldi $sp, -8($sp) ++ fstd $f17, 0($sp) ++ fldd $f21, 0($sp) ++ fsubd $f17, $f21, $f16 ++ fimovd $f16, $16 ++ ldi $sp, 8($sp) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/flds-342.S b/none/tests/sw64-insn/flds-342.S +new file mode 100644 +index 000000000..1c3ff831e +--- /dev/null ++++ b/none/tests/sw64-insn/flds-342.S +@@ -0,0 +1,17 @@ ++ .text ++ .global _start ++_start: ++ ldi $sp, -8($sp) ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ fcvtds $f17, $f21 ++ fsts $f21, 0($sp) ++ flds $f22, 0($sp) ++ fsubd $f22, $f21, $f16 ++ ldi $16, 0 ++ fbeq $f16, .exit ++ ldi $16, 1 ++ ++.exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmad-217.S b/none/tests/sw64-insn/fmad-217.S +new file mode 100644 +index 000000000..912789198 +--- /dev/null ++++ b/none/tests/sw64-insn/fmad-217.S +@@ -0,0 +1,48 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fmad $f17, $f18, $f19, $f21 ++ fsubd $f20, $f21, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmas-216.S b/none/tests/sw64-insn/fmas-216.S +new file mode 100644 +index 000000000..d95aeeea2 +--- /dev/null ++++ b/none/tests/sw64-insn/fmas-216.S +@@ -0,0 +1,52 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539422988891602 = 0x4023 e86b 2000 0000 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x2000($20) ++ sll $20, 16 ++ ldi $20, 0x0000($20) ++ ifmovd $20, $f20 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fcvtds $f20, $f21 ++ fmas $f1, $f2, $f3, $f4 ++ fsubs $f4, $f21, $f16 ++ fimovs $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmsd-219.S b/none/tests/sw64-insn/fmsd-219.S +new file mode 100644 +index 000000000..b9e919c33 +--- /dev/null ++++ b/none/tests/sw64-insn/fmsd-219.S +@@ -0,0 +1,48 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 7.125514732728 = 0x401c 8086 ef20 ee88 */ ++ ldi $20, 0x401c ++ sll $20, 16 ++ ldi $20, 0x8086($20) ++ sll $20, 16 ++ ldi $20, 0xef20($20) ++ sll $20, 16 ++ ldi $20, 0xee88($20) ++ ifmovd $20, $f20 ++ ++run: ++ fmsd $f17, $f18, $f19, $f21 ++ fsubd $f20, $f21, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmss-218.S b/none/tests/sw64-insn/fmss-218.S +new file mode 100644 +index 000000000..7dd42e57c +--- /dev/null ++++ b/none/tests/sw64-insn/fmss-218.S +@@ -0,0 +1,52 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 7.1255145072937012 = 0x401c 8086 e000 0000 */ ++ ldi $20, 0x401c ++ sll $20, 16 ++ ldi $20, 0x8086($20) ++ sll $20, 16 ++ ldi $20, 0xe000($20) ++ sll $20, 16 ++ ldi $20, 0x0000($20) ++ ifmovd $20, $f20 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fcvtds $f20, $f21 ++ fmss $f1, $f2, $f3, $f4 ++ fsubs $f4, $f21, $f16 ++ fimovs $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmuld-185.S b/none/tests/sw64-insn/fmuld-185.S +new file mode 100644 +index 000000000..a073e1b56 +--- /dev/null ++++ b/none/tests/sw64-insn/fmuld-185.S +@@ -0,0 +1,18 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f16 ++ fcvtld $f16, $f17 ++ ldi $18, 2 ++ ifmovd $18, $f16 ++ fcvtld $f16, $f18 ++ fmuld $f17, $f18, $f19 ++ fcvtdl $f19, $f16 ++ fimovd $f16, $16 ++ cmpeq $16, 84, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fmuls-184.S b/none/tests/sw64-insn/fmuls-184.S +new file mode 100644 +index 000000000..9c3ca4632 +--- /dev/null ++++ b/none/tests/sw64-insn/fmuls-184.S +@@ -0,0 +1,40 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 8.5397281646728516 = 0x4021145740000000 */ ++ ldi $19, 0x40211457 ++ sll $19, 32 ++ ldi $19, 0x40000000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fmuls $f1, $f2, $f4 ++ ldi $16, 0 ++ fsubs $f4, $f3, $f1 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fnmad-221.S b/none/tests/sw64-insn/fnmad-221.S +new file mode 100644 +index 000000000..817af484a +--- /dev/null ++++ b/none/tests/sw64-insn/fnmad-221.S +@@ -0,0 +1,48 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* -7.125514732728 = 0xc01c 8086 ef20 ee88 */ ++ ldi $20, 0xc01c ++ sll $20, 16 ++ ldi $20, 0x8086($20) ++ sll $20, 16 ++ ldi $20, 0xef20($20) ++ sll $20, 16 ++ ldi $20, 0xee88($20) ++ ifmovd $20, $f20 ++ ++run: ++ fnmad $f17, $f18, $f19, $f21 ++ fsubd $f20, $f21, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fnmas-220.S b/none/tests/sw64-insn/fnmas-220.S +new file mode 100644 +index 000000000..77244870c +--- /dev/null ++++ b/none/tests/sw64-insn/fnmas-220.S +@@ -0,0 +1,52 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* -7.1255145072937012 = 0xc01c 8086 e000 0000 */ ++ ldi $20, 0xc01c ++ sll $20, 16 ++ ldi $20, 0x8086($20) ++ sll $20, 16 ++ ldi $20, 0xe000($20) ++ sll $20, 16 ++ ldi $20, 0x0000($20) ++ ifmovd $20, $f20 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fcvtds $f20, $f21 ++ fnmas $f1, $f2, $f3, $f4 ++ fsubs $f4, $f21, $f16 ++ fimovs $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fnmsd-223.S b/none/tests/sw64-insn/fnmsd-223.S +new file mode 100644 +index 000000000..472cbc2ba +--- /dev/null ++++ b/none/tests/sw64-insn/fnmsd-223.S +@@ -0,0 +1,48 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* -9.9539419327280001 = 0xc023 e86b 13b6 b318 */ ++ ldi $20, 0xc023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fnmsd $f17, $f18, $f19, $f21 ++ fsubd $f20, $f21, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fnmss-222.S b/none/tests/sw64-insn/fnmss-222.S +new file mode 100644 +index 000000000..c7735a762 +--- /dev/null ++++ b/none/tests/sw64-insn/fnmss-222.S +@@ -0,0 +1,52 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* -9.9539422988891602 = 0xc023 e86b 2000 0000 */ ++ ldi $20, 0xc023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x2000($20) ++ sll $20, 16 ++ ldi $20, 0x0000($20) ++ ifmovd $20, $f20 ++ ++run: ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fcvtds $f20, $f21 ++ fnmss $f1, $f2, $f3, $f4 ++ fsubs $f4, $f21, $f16 ++ fimovs $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fseleq-224.S b/none/tests/sw64-insn/fseleq-224.S +new file mode 100644 +index 000000000..b1f98f0cc +--- /dev/null ++++ b/none/tests/sw64-insn/fseleq-224.S +@@ -0,0 +1,15 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ ldi $18, 0 ++ ifmovd $18, $f18 ++ fseleq $f18, $f18, $f17, $f19 ++ ldi $16, 0 ++ fbeq $f19, .exit ++ ldi $16, 1 ++ ++.exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fselge-229.S b/none/tests/sw64-insn/fselge-229.S +new file mode 100644 +index 000000000..d41fb8e27 +--- /dev/null ++++ b/none/tests/sw64-insn/fselge-229.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ fselge $f21, $f17, $f18, $f22 ++ fsubd $f17, $f22, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fselgt-228.S b/none/tests/sw64-insn/fselgt-228.S +new file mode 100644 +index 000000000..4c7657e14 +--- /dev/null ++++ b/none/tests/sw64-insn/fselgt-228.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ fselgt $f21, $f17, $f18, $f22 ++ fsubd $f17, $f22, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fselle-227.S b/none/tests/sw64-insn/fselle-227.S +new file mode 100644 +index 000000000..c80328f40 +--- /dev/null ++++ b/none/tests/sw64-insn/fselle-227.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ fselle $f21, $f17, $f18, $f22 ++ fsubd $f18, $f22, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsellt-226.S b/none/tests/sw64-insn/fsellt-226.S +new file mode 100644 +index 000000000..ca3ba3b30 +--- /dev/null ++++ b/none/tests/sw64-insn/fsellt-226.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ fsellt $f21, $f17, $f18, $f22 ++ fsubd $f18, $f22, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fselne-225.S b/none/tests/sw64-insn/fselne-225.S +new file mode 100644 +index 000000000..2e24d8826 +--- /dev/null ++++ b/none/tests/sw64-insn/fselne-225.S +@@ -0,0 +1,49 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ fsubd $f17, $f18, $f21 ++ fselne $f21, $f17, $f18, $f22 ++ fsubd $f17, $f22, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsqrtd-189.S b/none/tests/sw64-insn/fsqrtd-189.S +new file mode 100644 +index 000000000..8a0142297 +--- /dev/null ++++ b/none/tests/sw64-insn/fsqrtd-189.S +@@ -0,0 +1,39 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.7724538357881143 = 0x3ffc 5bf8 8da6 1346 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8da6($19) ++ sll $19, 16 ++ ldi $19, 0x1346($19) ++ ifmovd $19, $f19 ++ ++run: ++ fsqrtd $f17, $f20 ++ fsubd $f20, $f19, $f16 ++ ldi $16, 0 ++ fbeq $f16, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsqrts-188.S b/none/tests/sw64-insn/fsqrts-188.S +new file mode 100644 +index 000000000..eba144a6a +--- /dev/null ++++ b/none/tests/sw64-insn/fsqrts-188.S +@@ -0,0 +1,42 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.772453784942627 = 0x3ffc 5bf8 8000 0000 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ fcvtds $f17, $f1 ++ #fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fsqrts $f1, $f4 ++ fsubs $f4, $f3, $f1 ++ ldi $16, 0 ++ fbeq $f1, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fstd-351.S b/none/tests/sw64-insn/fstd-351.S +new file mode 100644 +index 000000000..763a14d6f +--- /dev/null ++++ b/none/tests/sw64-insn/fstd-351.S +@@ -0,0 +1,51 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ ldi $sp, -8($sp) ++ fstd $f17, 0($sp) ++ fldd $f21, 0($sp) ++ fsubd $f17, $f21, $f16 ++ fimovd $f16, $16 ++ ldi $sp, 8($sp) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsts-350.S b/none/tests/sw64-insn/fsts-350.S +new file mode 100644 +index 000000000..a64538159 +--- /dev/null ++++ b/none/tests/sw64-insn/fsts-350.S +@@ -0,0 +1,52 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++x3: ++ /* 1.4142136 = 0x3ff6 a09e 7098 ef50 */ ++ ldi $19, 0x3ff6a09e ++ sll $19, 16 ++ ldi $19, 0x7098($19) ++ sll $19, 16 ++ ldi $19, 0xef50($19) ++ ifmovd $19, $f19 ++ ++result: ++ /* 9.9539419327280001 = 0x4023 e86b 13b6 b318 */ ++ ldi $20, 0x4023 ++ sll $20, 16 ++ ldi $20, 0xe86b($20) ++ sll $20, 16 ++ ldi $20, 0x13b6($20) ++ sll $20, 16 ++ ldi $20, 0xb318($20) ++ ifmovd $20, $f20 ++ ++run: ++ ldi $sp, -8($sp) ++ fcvtds $f17, $f21 ++ fsts $f21, 0($sp) ++ flds $f22, 0($sp) ++ fsubd $f22, $f21, $f16 ++ fimovd $f16, $16 ++ ldi $sp, 8($sp) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsubd-183.S b/none/tests/sw64-insn/fsubd-183.S +new file mode 100644 +index 000000000..6da04ae43 +--- /dev/null ++++ b/none/tests/sw64-insn/fsubd-183.S +@@ -0,0 +1,13 @@ ++ .text ++ .global _start ++_start: ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ fcvtld $f17, $f18 ++ fsubd $f18, $f18, $f17 ++ fcvtdl $f17, $f16 ++ fimovd $f16, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/fsubs-182.S b/none/tests/sw64-insn/fsubs-182.S +new file mode 100644 +index 000000000..7b57b66b8 +--- /dev/null ++++ b/none/tests/sw64-insn/fsubs-182.S +@@ -0,0 +1,41 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 8.5397281646728516 = 0x4021145740000000 */ ++ ldi $19, 0x4005bf09 ++ sll $19, 16 ++ ldi $19, 0x95aa($19) ++ sll $19, 16 ++ ldi $19, 0xf790($19) ++ ifmovd $19, $f19 ++ ++ fcvtds $f17, $f1 ++ fcvtds $f18, $f2 ++ fcvtds $f19, $f3 ++ fmuls $f1, $f2, $f4 ++ ldi $16, 1 ++ fsubs $f4, $f3, $f1 ++ fbeq $f1, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/halt-12.S b/none/tests/sw64-insn/halt-12.S +new file mode 100644 +index 000000000..f66bb4e15 +--- /dev/null ++++ b/none/tests/sw64-insn/halt-12.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ unop ++ halt ++ ++exit: ++ ldi $0, 1 ++ ldi $16, 0 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ifmovd-209.S b/none/tests/sw64-insn/ifmovd-209.S +new file mode 120000 +index 000000000..5a582e3e3 +--- /dev/null ++++ b/none/tests/sw64-insn/ifmovd-209.S +@@ -0,0 +1 @@ ++fimovd-104.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ifmovs-208.S b/none/tests/sw64-insn/ifmovs-208.S +new file mode 120000 +index 000000000..7549c2b3b +--- /dev/null ++++ b/none/tests/sw64-insn/ifmovs-208.S +@@ -0,0 +1 @@ ++fimovs-103.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/imemb-9.S b/none/tests/sw64-insn/imemb-9.S +new file mode 100644 +index 000000000..7b1782d7e +--- /dev/null ++++ b/none/tests/sw64-insn/imemb-9.S +@@ -0,0 +1,62 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ imemb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ imemb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshb-72.S b/none/tests/sw64-insn/inshb-72.S +new file mode 100644 +index 000000000..fe0ed2456 +--- /dev/null ++++ b/none/tests/sw64-insn/inshb-72.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ ldi $18, 1 ++ inshb $17, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshbi-143.S b/none/tests/sw64-insn/inshbi-143.S +new file mode 100644 +index 000000000..66061cc5d +--- /dev/null ++++ b/none/tests/sw64-insn/inshbi-143.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ inshb $17, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshh-73.S b/none/tests/sw64-insn/inshh-73.S +new file mode 100644 +index 000000000..1bdb1ecce +--- /dev/null ++++ b/none/tests/sw64-insn/inshh-73.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ ldi $18, 7 ++ inshh $17, $18, $16 ++ subl $16, 0xf1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshhi-144.S b/none/tests/sw64-insn/inshhi-144.S +new file mode 100644 +index 000000000..885a0959c +--- /dev/null ++++ b/none/tests/sw64-insn/inshhi-144.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ inshh $17, 7, $16 ++ subl $16, 0xf1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshl-75.S b/none/tests/sw64-insn/inshl-75.S +new file mode 100644 +index 000000000..72e1bf3ac +--- /dev/null ++++ b/none/tests/sw64-insn/inshl-75.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ ldi $18, 6 ++ inshl $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshli-146.S b/none/tests/sw64-insn/inshli-146.S +new file mode 100644 +index 000000000..25ab03169 +--- /dev/null ++++ b/none/tests/sw64-insn/inshli-146.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ inshl $17, 6, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshw-74.S b/none/tests/sw64-insn/inshw-74.S +new file mode 100644 +index 000000000..6f9051b41 +--- /dev/null ++++ b/none/tests/sw64-insn/inshw-74.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ ldi $18, 6 ++ inshw $17, $18, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inshwi-145.S b/none/tests/sw64-insn/inshwi-145.S +new file mode 100644 +index 000000000..3b95832fe +--- /dev/null ++++ b/none/tests/sw64-insn/inshwi-145.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1f2 ++ inshw $17, 6, $16 ++ subl $16, 0xf0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslb-68.S b/none/tests/sw64-insn/inslb-68.S +new file mode 100644 +index 000000000..84c10994d +--- /dev/null ++++ b/none/tests/sw64-insn/inslb-68.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ ldi $18, 1 ++ inslb $17, $18, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslbi-139.S b/none/tests/sw64-insn/inslbi-139.S +new file mode 100644 +index 000000000..4335feb3d +--- /dev/null ++++ b/none/tests/sw64-insn/inslbi-139.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ inslb $17, 1, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslh-69.S b/none/tests/sw64-insn/inslh-69.S +new file mode 100644 +index 000000000..f51da7de5 +--- /dev/null ++++ b/none/tests/sw64-insn/inslh-69.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ ldi $18, 1 ++ inslh $17, $18, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslhi-140.S b/none/tests/sw64-insn/inslhi-140.S +new file mode 100644 +index 000000000..4e175d74e +--- /dev/null ++++ b/none/tests/sw64-insn/inslhi-140.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ inslh $17, 1, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/insll-71.S b/none/tests/sw64-insn/insll-71.S +new file mode 100644 +index 000000000..39e10ef9d +--- /dev/null ++++ b/none/tests/sw64-insn/insll-71.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ ldi $18, 1 ++ insll $17, $18, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslli-142.S b/none/tests/sw64-insn/inslli-142.S +new file mode 100644 +index 000000000..d66643c49 +--- /dev/null ++++ b/none/tests/sw64-insn/inslli-142.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ insll $17, 1, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslw-70.S b/none/tests/sw64-insn/inslw-70.S +new file mode 100644 +index 000000000..f5ac75d09 +--- /dev/null ++++ b/none/tests/sw64-insn/inslw-70.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ ldi $18, 1 ++ inslw $17, $18, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/inslwi-141.S b/none/tests/sw64-insn/inslwi-141.S +new file mode 100644 +index 000000000..557d6583a +--- /dev/null ++++ b/none/tests/sw64-insn/inslwi-141.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 1 ++ inslw $17, 1, $16 ++ srl $16, 8 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/insn-list b/none/tests/sw64-insn/insn-list +new file mode 100644 +index 000000000..b9a525007 +--- /dev/null ++++ b/none/tests/sw64-insn/insn-list +@@ -0,0 +1,367 @@ ++sys_call_b-1 ++sys_call-2 ++call-3 ++ret-4 ++jmp-5 ++br-6 ++bsr-7 ++memb-8 ++imemb-9 ++rtc-10 ++rcid-11 ++halt-12 ++rd_f-13 ++wr_f-14 ++rtid-15 ++pri_rcsr-16 ++pri_wcsr-17 ++pri_ret-18 ++lldw-19 ++lldl-20 ++ldw_inc-21 ++ldl_inc-22 ++ldw_dec-23 ++ldl_dec-24 ++ldw_set-25 ++ldl_set-26 ++lstw-27 ++lstl-28 ++ldw_nc-29 ++ldl_nc-30 ++ldd_nc-31 ++stw_nc-32 ++stl_nc-33 ++std_nc-34 ++ldwe-35 ++ldse-36 ++ldde-37 ++vlds-38 ++vldd-39 ++vsts-40 ++vstd-41 ++addw-42 ++subw-43 ++s4addw-44 ++s4subw-45 ++s8addw-46 ++s8subw-47 ++addl-48 ++subl-49 ++s4addl-50 ++s4subl-51 ++s8addl-52 ++s8subl-53 ++mulw-54 ++mull-55 ++umulh-56 ++cmpeq-57 ++cmplt-58 ++cmple-59 ++cmpult-60 ++cmpule-61 ++and-62 ++bic-63 ++bis-64 ++ornot-65 ++xor-66 ++eqv-67 ++inslb-68 ++inslh-69 ++inslw-70 ++insll-71 ++inshb-72 ++inshh-73 ++inshw-74 ++inshl-75 ++sll-76 ++srl-77 ++sra-78 ++extlb-79 ++extlh-80 ++extlw-81 ++extll-82 ++exthb-83 ++exthh-84 ++exthw-85 ++exthl-86 ++ctpop-87 ++ctlz-88 ++cttz-89 ++masklb-90 ++masklh-91 ++masklw-92 ++maskll-93 ++maskhb-94 ++maskhh-95 ++maskhw-96 ++maskhl-97 ++zap-98 ++zapnot-99 ++sextb-100 ++sexth-101 ++cmpgeb-102 ++fimovs-103 ++fimovd-104 ++seleq-105 ++selge-106 ++selgt-107 ++selle-108 ++sellt-109 ++selne-110 ++sellbc-111 ++sellbs-112 ++addwi-113 ++subwi-114 ++s4addwi-115 ++s4subwi-116 ++s8addwi-117 ++s8subwi-118 ++addli-119 ++subli-120 ++s4addli-121 ++s4subli-122 ++s8addli-123 ++s8subli-124 ++mulwi-125 ++mulli-126 ++umulhi-127 ++cmpeqi-128 ++cmplti-129 ++cmplei-130 ++cmpulti-131 ++cmpulei-132 ++andi-133 ++bici-134 ++bisi-135 ++ornoti-136 ++xori-137 ++eqvi-138 ++inslbi-139 ++inslhi-140 ++inslwi-141 ++inslli-142 ++inshbi-143 ++inshhi-144 ++inshwi-145 ++inshli-146 ++slli-147 ++srli-148 ++srai-149 ++extlbi-150 ++extlhi-151 ++extlwi-152 ++extlli-153 ++exthbi-154 ++exthhi-155 ++exthwi-156 ++exthli-157 ++masklbi-158 ++masklhi-159 ++masklwi-160 ++masklli-161 ++maskhbi-162 ++maskhhi-163 ++maskhwi-164 ++maskhli-165 ++zapi-166 ++zapnoti-167 ++sextbi-168 ++sexthi-169 ++cmpgebi-170 ++seleqi-171 ++selgei-172 ++selgti-173 ++sellei-174 ++sellti-175 ++selnei-176 ++sellbci-177 ++sellbsi-178 ++vlogzz-179 ++fadds-180 ++faddd-181 ++fsubs-182 ++fsubd-183 ++fmuls-184 ++fmuld-185 ++fdivs-186 ++fdivd-187 ++fsqrts-188 ++fsqrtd-189 ++fcmpeq-190 ++fcmple-191 ++fcmplt-192 ++fcmpun-193 ++fcvtsd-194 ++fcvtds-195 ++fcvtdl_g-196 ++fcvtdl_p-197 ++fcvtdl_z-198 ++fcvtdl_n-199 ++fcvtdl-200 ++fcvtwl-201 ++fcvtlw-202 ++fcvtls-203 ++fcvtld-204 ++fcpys-205 ++fcpyse-206 ++fcpysn-207 ++ifmovs-208 ++ifmovd-209 ++rfpcr-210 ++wfpcr-211 ++setfpec0-212 ++setfpec1-213 ++setfpec2-214 ++setfpec3-215 ++fmas-216 ++fmad-217 ++fmss-218 ++fmsd-219 ++fnmas-220 ++fnmad-221 ++fnmss-222 ++fnmsd-223 ++fseleq-224 ++fselne-225 ++fsellt-226 ++fselle-227 ++fselgt-228 ++fselge-229 ++vaddw-230 ++vsubw-231 ++vcmpgew-232 ++vcmpeqw-233 ++vcmplew-234 ++vcmpltw-235 ++vcmpulew-236 ++vcmpultw-237 ++vsllw-238 ++vsrlw-239 ++vsraw-240 ++vrolw-241 ++sllow-242 ++srlow-243 ++vaddl-244 ++vsubl-245 ++ctpopow-246 ++ctlzow-247 ++vucaddw-248 ++vucsubw-249 ++vucaddh-250 ++vucsubh-251 ++vucaddb-252 ++vucsubb-253 ++vaddwi-254 ++vsubwi-255 ++vcmpgewi-256 ++vcmpeqwi-257 ++vcmplewi-258 ++vcmpltwi-259 ++vcmpulewi-260 ++vcmpultwi-261 ++vsllwi-262 ++vsrlwi-263 ++vsrawi-264 ++vrolwi-265 ++sllowi-266 ++srlowi-267 ++vaddli-268 ++vsubli-269 ++vucaddwi-270 ++vucsubwi-271 ++vucaddhi-272 ++vucsubhi-273 ++vucaddbi-274 ++vucsubbi-275 ++vadds-276 ++vaddd-277 ++vsubs-278 ++vsubd-279 ++vmuls-280 ++vmuld-281 ++vdivs-282 ++vdivd-283 ++vsqrts-284 ++vsqrtd-285 ++vfcmpeq-286 ++vfcmple-287 ++vfcmplt-288 ++vfcmpun-289 ++vcpys-290 ++vcpyse-291 ++vcpysn-292 ++vmas-293 ++vmad-294 ++vmss-295 ++vmsd-296 ++vnmas-297 ++vnmad-298 ++vnmss-299 ++vnmsd-300 ++vfseleq-301 ++vfsellt-302 ++vfselle-303 ++vseleqw-304 ++vsellbcw-305 ++vselltw-306 ++vsellew-307 ++vinsw-308 ++vinsf-309 ++vextw-310 ++vextf-311 ++vcpyw-312 ++vcpyf-313 ++vconw-314 ++vshfw-315 ++vcons-316 ++vcond-317 ++vseleqwi-318 ++vsellbcwi-319 ++vselltwi-320 ++vsellewi-321 ++vldw_u-322 ++vstw_u-323 ++vlds_u-324 ++vsts_u-325 ++vldd_u-326 ++vstd_u-327 ++vstw_ul-328 ++vstw_uh-329 ++vsts_ul-330 ++vsts_uh-331 ++vstd_ul-332 ++vstd_uh-333 ++vldd_nc-334 ++vstd_nc-335 ++ldbu-336 ++ldhu-337 ++ldw-338 ++ldl-339 ++ldl_u-340 ++pri_ld-341 ++flds-342 ++fldd-343 ++stb-344 ++sth-345 ++stw-346 ++stl-347 ++stl_u-348 ++pri_st-349 ++fsts-350 ++fstd-351 ++beq-352 ++bne-353 ++blt-354 ++ble-355 ++bgt-356 ++bge-357 ++blbc-358 ++blbs-359 ++fbeq-360 ++fbne-361 ++fblt-362 ++fble-363 ++fbgt-364 ++fbge-365 ++ldi-366 ++ldih-367 +diff --git a/none/tests/sw64-insn/jmp-5.S b/none/tests/sw64-insn/jmp-5.S +new file mode 100644 +index 000000000..75e2b2184 +--- /dev/null ++++ b/none/tests/sw64-insn/jmp-5.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $16, 0 ++ jmp $26, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ldbu-336.S b/none/tests/sw64-insn/ldbu-336.S +new file mode 120000 +index 000000000..904ba1366 +--- /dev/null ++++ b/none/tests/sw64-insn/ldbu-336.S +@@ -0,0 +1 @@ ++stb-344.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldd_nc-31.S b/none/tests/sw64-insn/ldd_nc-31.S +new file mode 100644 +index 000000000..ed9b33f2d +--- /dev/null ++++ b/none/tests/sw64-insn/ldd_nc-31.S +@@ -0,0 +1,19 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ std_nc $f17, 0($sp) ++ ldd_nc $f18, 0($sp) ++ ldi $sp, 16($sp) ++ fcmpeq $f17, $f18, $f16 ++ ldi $16, 0 ++ fbne $f16, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldde-37.S b/none/tests/sw64-insn/ldde-37.S +new file mode 100644 +index 000000000..584bf54ac +--- /dev/null ++++ b/none/tests/sw64-insn/ldde-37.S +@@ -0,0 +1,52 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 0.0 */ ++ ldi $18, 0x0 ++ ifmovd $18, $f18 ++ ++result: ++ /* 25.132740800000001 = 0x4039 21fb 4d12 d84a */ ++ ldi $19, 0x403921fb ++ sll $19, 16 ++ ldi $19, 0x4d12($19) ++ sll $19, 16 ++ ldi $19, 0xd84a($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fstd $f17, 0($sp) ++ ldde $f1, 0($sp) ++ vaddd $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vstd $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $17, 0($sp) ++ ldi $23, 4 ++sum: ++ fldd $f2, 0($17) ++ faddd $f18, $f2 ++ subl $23, 1 ++ ldi $17, 8($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ fcmpeq $f18, $f19, $f16 ++ ldi $16, 1 ++ fbeq $f16, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ldhu-337.S b/none/tests/sw64-insn/ldhu-337.S +new file mode 120000 +index 000000000..9901b1edc +--- /dev/null ++++ b/none/tests/sw64-insn/ldhu-337.S +@@ -0,0 +1 @@ ++sth-345.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldi-366.S b/none/tests/sw64-insn/ldi-366.S +new file mode 100644 +index 000000000..f75e1fa26 +--- /dev/null ++++ b/none/tests/sw64-insn/ldi-366.S +@@ -0,0 +1,11 @@ ++ ++.text ++ .global _start ++_start: ++ ldih $29, 0($27) !gpdisp!1 ++ ldi $29, 0($29) !gpdisp!1 ++ ++exit: ++ ldi $0, 1 ++ ldi $16, 0 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldih-367.S b/none/tests/sw64-insn/ldih-367.S +new file mode 120000 +index 000000000..8ab4dc5e7 +--- /dev/null ++++ b/none/tests/sw64-insn/ldih-367.S +@@ -0,0 +1 @@ ++ldi-366.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldl-339.S b/none/tests/sw64-insn/ldl-339.S +new file mode 120000 +index 000000000..5e197a67c +--- /dev/null ++++ b/none/tests/sw64-insn/ldl-339.S +@@ -0,0 +1 @@ ++stl-347.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldl_dec-24.S b/none/tests/sw64-insn/ldl_dec-24.S +new file mode 120000 +index 000000000..1ec4cb5a5 +--- /dev/null ++++ b/none/tests/sw64-insn/ldl_dec-24.S +@@ -0,0 +1 @@ ++ldl_inc-22.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldl_inc-22.S b/none/tests/sw64-insn/ldl_inc-22.S +new file mode 100644 +index 000000000..76fca28fd +--- /dev/null ++++ b/none/tests/sw64-insn/ldl_inc-22.S +@@ -0,0 +1,17 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldl $17, 42 ++ stw $17, 0($sp) ++ #ldl_set $18, 0($sp) ++ #ldl_inc $19, 0($sp) ++ #ldl_dec $20, 0$($sp) ++ ldi $sp, 16($sp) ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldl_nc-30.S b/none/tests/sw64-insn/ldl_nc-30.S +new file mode 100644 +index 000000000..d3b776276 +--- /dev/null ++++ b/none/tests/sw64-insn/ldl_nc-30.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl_nc $17, 0($sp) ++ ldl_nc $18, 0($sp) ++ ldi $sp, 16($sp) ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldl_set-26.S b/none/tests/sw64-insn/ldl_set-26.S +new file mode 120000 +index 000000000..1ec4cb5a5 +--- /dev/null ++++ b/none/tests/sw64-insn/ldl_set-26.S +@@ -0,0 +1 @@ ++ldl_inc-22.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldl_u-340.S b/none/tests/sw64-insn/ldl_u-340.S +new file mode 120000 +index 000000000..4962302c4 +--- /dev/null ++++ b/none/tests/sw64-insn/ldl_u-340.S +@@ -0,0 +1 @@ ++stl_u-348.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldse-36.S b/none/tests/sw64-insn/ldse-36.S +new file mode 100644 +index 000000000..44c3d5e89 +--- /dev/null ++++ b/none/tests/sw64-insn/ldse-36.S +@@ -0,0 +1,56 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 2.71828 = 0x4005bf0995aaf790 */ ++ ldi $18, 0x4005bf09 ++ sll $18, 16 ++ ldi $18, 0x95aa($18) ++ sll $18, 16 ++ ldi $18, 0xf790($18) ++ ifmovd $18, $f18 ++ ++result: ++ /* 1.772453784942627 = 0x3ffc 5bf8 8000 0000 */ ++ ldi $19, 0x3ffc5bf8 ++ sll $19, 16 ++ ldi $19, 0x8000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fcvtds $f17, $f20 ++ fsts $f20, 0($sp) ++ ldse $f1, 0($sp) ++ vadds $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vsts $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $16, 0 ++ ldi $17, 0($sp) ++ ldi $23, 8 ++sum: ++ ldw $18, 0($17) ++ addw $16, $18 ++ subl $23, 1 ++ ldi $17, 4($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ ldi $17, 52707176 ++ subl $16, $17 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ldw-338.S b/none/tests/sw64-insn/ldw-338.S +new file mode 120000 +index 000000000..56a1155d1 +--- /dev/null ++++ b/none/tests/sw64-insn/ldw-338.S +@@ -0,0 +1 @@ ++stw-346.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldw_dec-23.S b/none/tests/sw64-insn/ldw_dec-23.S +new file mode 120000 +index 000000000..b9dc71db5 +--- /dev/null ++++ b/none/tests/sw64-insn/ldw_dec-23.S +@@ -0,0 +1 @@ ++ldw_inc-21.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldw_inc-21.S b/none/tests/sw64-insn/ldw_inc-21.S +new file mode 100644 +index 000000000..ff745ee3a +--- /dev/null ++++ b/none/tests/sw64-insn/ldw_inc-21.S +@@ -0,0 +1,17 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stw $17, 0($sp) ++ #ldw_set $18, 0($sp) ++ #ldw_inc $19, 0($sp) ++ #ldw_dec $20, 0$($sp) ++ ldi $sp, 16($sp) ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldw_nc-29.S b/none/tests/sw64-insn/ldw_nc-29.S +new file mode 100644 +index 000000000..884f708d8 +--- /dev/null ++++ b/none/tests/sw64-insn/ldw_nc-29.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stw_nc $17, 0($sp) ++ ldw_nc $18, 0($sp) ++ ldi $sp, 16($sp) ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/ldw_set-25.S b/none/tests/sw64-insn/ldw_set-25.S +new file mode 120000 +index 000000000..b9dc71db5 +--- /dev/null ++++ b/none/tests/sw64-insn/ldw_set-25.S +@@ -0,0 +1 @@ ++ldw_inc-21.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/ldwe-35.S b/none/tests/sw64-insn/ldwe-35.S +new file mode 100644 +index 000000000..7b51203d7 +--- /dev/null ++++ b/none/tests/sw64-insn/ldwe-35.S +@@ -0,0 +1,29 @@ ++ ++ .global _start ++_start: ++ ldi $sp, -256($sp) ++ ldi $17, 2 ++ stl $17, 0($sp) ++ ldwe $f1, 0($sp) ++ vaddw $f1, $f1, $f2 /* 2 + 2 = 4 */ ++ vstw_u $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $16, 0 ++ ldi $17, 0($sp) ++ ldi $23, 8 ++sum: ++ ldw $18, 0($17) ++ addw $16, $18 ++ subl $23, 1 ++ ldi $17, 4($17) ++ bne $23, sum ++ ++result: ++ ldi $sp, 256($sp) ++ subl $16, 32 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/lldl-20.S b/none/tests/sw64-insn/lldl-20.S +new file mode 100644 +index 000000000..2b589a3c2 +--- /dev/null ++++ b/none/tests/sw64-insn/lldl-20.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u64 ++xchg_u64: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldl $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstl $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u64 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/lldw-19.S b/none/tests/sw64-insn/lldw-19.S +new file mode 100644 +index 000000000..1b1e2d823 +--- /dev/null ++++ b/none/tests/sw64-insn/lldw-19.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/lstl-28.S b/none/tests/sw64-insn/lstl-28.S +new file mode 100644 +index 000000000..bddd21c74 +--- /dev/null ++++ b/none/tests/sw64-insn/lstl-28.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u64 ++xchg_u64: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldl $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstl $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u64 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/lstw-27.S b/none/tests/sw64-insn/lstw-27.S +new file mode 100644 +index 000000000..1b1e2d823 +--- /dev/null ++++ b/none/tests/sw64-insn/lstw-27.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhb-94.S b/none/tests/sw64-insn/maskhb-94.S +new file mode 100644 +index 000000000..11d6643b0 +--- /dev/null ++++ b/none/tests/sw64-insn/maskhb-94.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ maskhb $17, $18, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhbi-162.S b/none/tests/sw64-insn/maskhbi-162.S +new file mode 100644 +index 000000000..df326d56c +--- /dev/null ++++ b/none/tests/sw64-insn/maskhbi-162.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ maskhb $17, 1, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhh-95.S b/none/tests/sw64-insn/maskhh-95.S +new file mode 100644 +index 000000000..d7ed1bb71 +--- /dev/null ++++ b/none/tests/sw64-insn/maskhh-95.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ maskhh $17, $18, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhhi-163.S b/none/tests/sw64-insn/maskhhi-163.S +new file mode 100644 +index 000000000..b12dc6bd1 +--- /dev/null ++++ b/none/tests/sw64-insn/maskhhi-163.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ maskhh $17, 1, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhl-97.S b/none/tests/sw64-insn/maskhl-97.S +new file mode 100644 +index 000000000..29d0243ce +--- /dev/null ++++ b/none/tests/sw64-insn/maskhl-97.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ maskhl $17, $18, $16 ++ cttz $16, $16 ++ subl $16, 12, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhli-165.S b/none/tests/sw64-insn/maskhli-165.S +new file mode 100644 +index 000000000..86462f0ad +--- /dev/null ++++ b/none/tests/sw64-insn/maskhli-165.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ maskhl $17, 1, $16 ++ cttz $16, $16 ++ subl $16, 12, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhw-96.S b/none/tests/sw64-insn/maskhw-96.S +new file mode 100644 +index 000000000..1cbe62404 +--- /dev/null ++++ b/none/tests/sw64-insn/maskhw-96.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ maskhw $17, $18, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskhwi-164.S b/none/tests/sw64-insn/maskhwi-164.S +new file mode 100644 +index 000000000..f9abb0e8b +--- /dev/null ++++ b/none/tests/sw64-insn/maskhwi-164.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ maskhw $17, 1, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklb-90.S b/none/tests/sw64-insn/masklb-90.S +new file mode 100644 +index 000000000..63c5da1eb +--- /dev/null ++++ b/none/tests/sw64-insn/masklb-90.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ masklb $17, $18, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklbi-158.S b/none/tests/sw64-insn/masklbi-158.S +new file mode 100644 +index 000000000..f6335a188 +--- /dev/null ++++ b/none/tests/sw64-insn/masklbi-158.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ masklb $17, 1, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklh-91.S b/none/tests/sw64-insn/masklh-91.S +new file mode 100644 +index 000000000..e8a80019a +--- /dev/null ++++ b/none/tests/sw64-insn/masklh-91.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ masklh $17, $18, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklhi-159.S b/none/tests/sw64-insn/masklhi-159.S +new file mode 100644 +index 000000000..9dfcb4329 +--- /dev/null ++++ b/none/tests/sw64-insn/masklhi-159.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ masklh $17, 1, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/maskll-93.S b/none/tests/sw64-insn/maskll-93.S +new file mode 100644 +index 000000000..8ccf02966 +--- /dev/null ++++ b/none/tests/sw64-insn/maskll-93.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ maskll $17, $18, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklli-161.S b/none/tests/sw64-insn/masklli-161.S +new file mode 100644 +index 000000000..141929444 +--- /dev/null ++++ b/none/tests/sw64-insn/masklli-161.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ maskll $17, 1, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklw-92.S b/none/tests/sw64-insn/masklw-92.S +new file mode 100644 +index 000000000..6d5657478 +--- /dev/null ++++ b/none/tests/sw64-insn/masklw-92.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 1 ++ masklw $17, $18, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/masklwi-160.S b/none/tests/sw64-insn/masklwi-160.S +new file mode 100644 +index 000000000..869038a97 +--- /dev/null ++++ b/none/tests/sw64-insn/masklwi-160.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ masklw $17, 1, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/memb-8.S b/none/tests/sw64-insn/memb-8.S +new file mode 100644 +index 000000000..1b1e2d823 +--- /dev/null ++++ b/none/tests/sw64-insn/memb-8.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/mull-55.S b/none/tests/sw64-insn/mull-55.S +new file mode 100644 +index 000000000..e115b8ede +--- /dev/null ++++ b/none/tests/sw64-insn/mull-55.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ ldi $18, 2 ++ mull $17, $18, $16 ++ subl $16, 6, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/mulli-126.S b/none/tests/sw64-insn/mulli-126.S +new file mode 100644 +index 000000000..5db44faca +--- /dev/null ++++ b/none/tests/sw64-insn/mulli-126.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ mull $17, 2, $16 ++ subl $16, 6, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/mulw-54.S b/none/tests/sw64-insn/mulw-54.S +new file mode 100644 +index 000000000..0b62cdbec +--- /dev/null ++++ b/none/tests/sw64-insn/mulw-54.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ ldi $18, 2 ++ mulw $17, $18, $16 ++ subw $16, 6, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/mulwi-125.S b/none/tests/sw64-insn/mulwi-125.S +new file mode 100644 +index 000000000..0649da3a1 +--- /dev/null ++++ b/none/tests/sw64-insn/mulwi-125.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ mulw $17, 2, $16 ++ subw $16, 6, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/not-found-insn.S b/none/tests/sw64-insn/not-found-insn.S +new file mode 100644 +index 000000000..5db70971d +--- /dev/null ++++ b/none/tests/sw64-insn/not-found-insn.S +@@ -0,0 +1,74 @@ ++ ++ .global _start ++_start: ++ addwi $16 ++ subwi $16 ++ s4addwi $16 ++ s4subwi $16 ++ s8addwi $16 ++ s8subwi $16 ++ addli $16 ++ subli $16 ++ s4addli $16 ++ s4subli $16 ++ s8addli $16 ++ s8subli $16 ++ mulwi $16 ++ mulli $16 ++ umulhi $16 ++ cmpeqi $16 ++ cmplti $16 ++ cmplei $16 ++ cmpulti $16 ++ cmpulei $16 ++ andi $16 ++ bici $16 ++ bisi $16 ++ ornoti $16 ++ xori $16 ++ eqvi $16 ++ inslbi $16 ++ inslhi $16 ++ inslwi $16 ++ inslli $16 ++ inshbi $16 ++ inshhi $16 ++ inshwi $16 ++ inshli $16 ++ slli $16 ++ srli $16 ++ srai $16 ++ extlbi $16 ++ extlhi $16 ++ extlwi $16 ++ extlli $16 ++ exthbi $16 ++ exthhi $16 ++ exthwi $16 ++ exthli $16 ++ masklbi $16 ++ masklhi $16 ++ masklwi $16 ++ masklli $16 ++ maskhbi $16 ++ maskhhi $16 ++ maskhwi $16 ++ maskhli $16 ++ zapi $16 ++ zapnoti $16 ++ sextbi $16 ++ sexthi $16 ++ cmpgebi $16 ++ seleqi $16 ++ selgei $16 ++ selgti $16 ++ sellei $16 ++ sellti $16 ++ selnei $16 ++ sellbci $16 ++ sellbsi $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ornot-65.S b/none/tests/sw64-insn/ornot-65.S +new file mode 100644 +index 000000000..fac47d9e7 +--- /dev/null ++++ b/none/tests/sw64-insn/ornot-65.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ ornot $17, $18, $16 ++ addl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ornoti-136.S b/none/tests/sw64-insn/ornoti-136.S +new file mode 100644 +index 000000000..fd558c0cb +--- /dev/null ++++ b/none/tests/sw64-insn/ornoti-136.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ornot $17, 1, $16 ++ addl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/pri_ld-341.S b/none/tests/sw64-insn/pri_ld-341.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/pri_ld-341.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/pri_rcsr-16.S b/none/tests/sw64-insn/pri_rcsr-16.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/pri_rcsr-16.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/pri_ret-18.S b/none/tests/sw64-insn/pri_ret-18.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/pri_ret-18.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/pri_st-349.S b/none/tests/sw64-insn/pri_st-349.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/pri_st-349.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/pri_wcsr-17.S b/none/tests/sw64-insn/pri_wcsr-17.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/pri_wcsr-17.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/rcid-11.S b/none/tests/sw64-insn/rcid-11.S +new file mode 100644 +index 000000000..45eb62638 +--- /dev/null ++++ b/none/tests/sw64-insn/rcid-11.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $16, 1($31) ++ rcid $16 ++ bgt $16, exit ++ ldi $16, 0($31) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/rd_f-13.S b/none/tests/sw64-insn/rd_f-13.S +new file mode 100644 +index 000000000..1b1e2d823 +--- /dev/null ++++ b/none/tests/sw64-insn/rd_f-13.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/ret-4.S b/none/tests/sw64-insn/ret-4.S +new file mode 100644 +index 000000000..ff188d0d1 +--- /dev/null ++++ b/none/tests/sw64-insn/ret-4.S +@@ -0,0 +1,18 @@ ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $16, 1 ++ call $26, noop ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ ++noop: ++ ret $31, ($26), 0x1 +diff --git a/none/tests/sw64-insn/rfpcr-210.S b/none/tests/sw64-insn/rfpcr-210.S +new file mode 100644 +index 000000000..8ca9cb274 +--- /dev/null ++++ b/none/tests/sw64-insn/rfpcr-210.S +@@ -0,0 +1,31 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ rfpcr $f16 ++ fsubd $f16, $f1, $f17 ++ ldi $16, 0 ++ fbeq $f17, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/rtc-10.S b/none/tests/sw64-insn/rtc-10.S +new file mode 100644 +index 000000000..85e63a56e +--- /dev/null ++++ b/none/tests/sw64-insn/rtc-10.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $16, -1($31) ++ rtc $16 ++ blt $16, exit ++ ldi $16, 0($31) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/rtid-15.S b/none/tests/sw64-insn/rtid-15.S +new file mode 100644 +index 000000000..52602263c +--- /dev/null ++++ b/none/tests/sw64-insn/rtid-15.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $16, -1($31) ++ rtid $16 ++ ble $16, exit ++ ldi $16, 0($31) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4addl-50.S b/none/tests/sw64-insn/s4addl-50.S +new file mode 100644 +index 000000000..3ecdb5e04 +--- /dev/null ++++ b/none/tests/sw64-insn/s4addl-50.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s4addl $17, $18, $16 ++ subl $16, 9, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4addli-121.S b/none/tests/sw64-insn/s4addli-121.S +new file mode 100644 +index 000000000..6367420ad +--- /dev/null ++++ b/none/tests/sw64-insn/s4addli-121.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s4addl $17, 1, $16 ++ subl $16, 9, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4addw-44.S b/none/tests/sw64-insn/s4addw-44.S +new file mode 100644 +index 000000000..b99135a6a +--- /dev/null ++++ b/none/tests/sw64-insn/s4addw-44.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s4addw $17, $18, $16 ++ subw $16, 9, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4addwi-115.S b/none/tests/sw64-insn/s4addwi-115.S +new file mode 100644 +index 000000000..16983f88c +--- /dev/null ++++ b/none/tests/sw64-insn/s4addwi-115.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s4addw $17, 1, $16 ++ subw $16, 9, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4subl-51.S b/none/tests/sw64-insn/s4subl-51.S +new file mode 100644 +index 000000000..7d7ff2cea +--- /dev/null ++++ b/none/tests/sw64-insn/s4subl-51.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s4subl $17, $18, $16 ++ subl $16, 7, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4subli-122.S b/none/tests/sw64-insn/s4subli-122.S +new file mode 100644 +index 000000000..f5b9f60ce +--- /dev/null ++++ b/none/tests/sw64-insn/s4subli-122.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s4subl $17, 1, $16 ++ subl $16, 7, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4subw-45.S b/none/tests/sw64-insn/s4subw-45.S +new file mode 100644 +index 000000000..c25bc8d3c +--- /dev/null ++++ b/none/tests/sw64-insn/s4subw-45.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s4subw $17, $18, $16 ++ subw $16, 7, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s4subwi-116.S b/none/tests/sw64-insn/s4subwi-116.S +new file mode 100644 +index 000000000..9b5097d1e +--- /dev/null ++++ b/none/tests/sw64-insn/s4subwi-116.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s4subw $17, 1, $16 ++ subw $16, 7, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8addl-52.S b/none/tests/sw64-insn/s8addl-52.S +new file mode 100644 +index 000000000..d913eac9e +--- /dev/null ++++ b/none/tests/sw64-insn/s8addl-52.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s8addl $17, $18, $16 ++ subl $16, 17, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8addli-123.S b/none/tests/sw64-insn/s8addli-123.S +new file mode 100644 +index 000000000..570661b98 +--- /dev/null ++++ b/none/tests/sw64-insn/s8addli-123.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s8addl $17, 1, $16 ++ subl $16, 17, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8addw-46.S b/none/tests/sw64-insn/s8addw-46.S +new file mode 100644 +index 000000000..0058af6cb +--- /dev/null ++++ b/none/tests/sw64-insn/s8addw-46.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s8addw $17, $18, $16 ++ subw $16, 17, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8addwi-117.S b/none/tests/sw64-insn/s8addwi-117.S +new file mode 100644 +index 000000000..f27423ebc +--- /dev/null ++++ b/none/tests/sw64-insn/s8addwi-117.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s8addw $17, 1, $16 ++ subw $16, 17, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8subl-53.S b/none/tests/sw64-insn/s8subl-53.S +new file mode 100644 +index 000000000..cbf56ec71 +--- /dev/null ++++ b/none/tests/sw64-insn/s8subl-53.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s8subl $17, $18, $16 ++ subl $16, 15, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8subli-124.S b/none/tests/sw64-insn/s8subli-124.S +new file mode 100644 +index 000000000..3c134f28d +--- /dev/null ++++ b/none/tests/sw64-insn/s8subli-124.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s8subl $17, 1, $16 ++ subl $16, 15, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8subw-47.S b/none/tests/sw64-insn/s8subw-47.S +new file mode 100644 +index 000000000..8d770798a +--- /dev/null ++++ b/none/tests/sw64-insn/s8subw-47.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ s8subw $17, $18, $16 ++ subw $16, 15, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/s8subwi-118.S b/none/tests/sw64-insn/s8subwi-118.S +new file mode 100644 +index 000000000..929c3831c +--- /dev/null ++++ b/none/tests/sw64-insn/s8subwi-118.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ s8subw $17, 1, $16 ++ subw $16, 15, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/seleq-105.S b/none/tests/sw64-insn/seleq-105.S +new file mode 100644 +index 000000000..8d12907e5 +--- /dev/null ++++ b/none/tests/sw64-insn/seleq-105.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ ldi $19, 1 ++ seleq $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/seleqi-171.S b/none/tests/sw64-insn/seleqi-171.S +new file mode 100644 +index 000000000..338ac28f5 +--- /dev/null ++++ b/none/tests/sw64-insn/seleqi-171.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ seleq $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selge-106.S b/none/tests/sw64-insn/selge-106.S +new file mode 100644 +index 000000000..2ee09fa30 +--- /dev/null ++++ b/none/tests/sw64-insn/selge-106.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, -42 ++ ldi $18, 0 ++ ldi $19, 3 ++ selge $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selgei-172.S b/none/tests/sw64-insn/selgei-172.S +new file mode 100644 +index 000000000..87c603595 +--- /dev/null ++++ b/none/tests/sw64-insn/selgei-172.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, -42 ++ ldi $18, 0 ++ selge $17, 3, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selgt-107.S b/none/tests/sw64-insn/selgt-107.S +new file mode 100644 +index 000000000..1619bf441 +--- /dev/null ++++ b/none/tests/sw64-insn/selgt-107.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, -42 ++ ldi $18, 0 ++ ldi $19, 3 ++ selgt $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selgti-173.S b/none/tests/sw64-insn/selgti-173.S +new file mode 100644 +index 000000000..8fd00be70 +--- /dev/null ++++ b/none/tests/sw64-insn/selgti-173.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, -42 ++ ldi $18, 0 ++ selgt $17, 3, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellbc-111.S b/none/tests/sw64-insn/sellbc-111.S +new file mode 100644 +index 000000000..978a670ee +--- /dev/null ++++ b/none/tests/sw64-insn/sellbc-111.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1001 ++ ldi $18, 0 ++ ldi $19, 1 ++ sellbc $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellbci-177.S b/none/tests/sw64-insn/sellbci-177.S +new file mode 100644 +index 000000000..1d87f0f5f +--- /dev/null ++++ b/none/tests/sw64-insn/sellbci-177.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1001 ++ ldi $18, 0 ++ sellbc $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellbs-112.S b/none/tests/sw64-insn/sellbs-112.S +new file mode 100644 +index 000000000..db3ff272c +--- /dev/null ++++ b/none/tests/sw64-insn/sellbs-112.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1010 ++ ldi $18, 0 ++ ldi $19, 1 ++ sellbs $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellbsi-178.S b/none/tests/sw64-insn/sellbsi-178.S +new file mode 100644 +index 000000000..0deb3746a +--- /dev/null ++++ b/none/tests/sw64-insn/sellbsi-178.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0b1010 ++ ldi $18, 0 ++ sellbs $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selle-108.S b/none/tests/sw64-insn/selle-108.S +new file mode 100644 +index 000000000..58a0bebad +--- /dev/null ++++ b/none/tests/sw64-insn/selle-108.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ ldi $19, 1 ++ selle $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellei-174.S b/none/tests/sw64-insn/sellei-174.S +new file mode 100644 +index 000000000..59bbe5c21 +--- /dev/null ++++ b/none/tests/sw64-insn/sellei-174.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ selle $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellt-109.S b/none/tests/sw64-insn/sellt-109.S +new file mode 100644 +index 000000000..a4cb2a442 +--- /dev/null ++++ b/none/tests/sw64-insn/sellt-109.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ ldi $19, 1 ++ sellt $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sellti-175.S b/none/tests/sw64-insn/sellti-175.S +new file mode 100644 +index 000000000..08ae05d9f +--- /dev/null ++++ b/none/tests/sw64-insn/sellti-175.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 42 ++ ldi $18, 0 ++ sellt $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selne-110.S b/none/tests/sw64-insn/selne-110.S +new file mode 100644 +index 000000000..0e616b131 +--- /dev/null ++++ b/none/tests/sw64-insn/selne-110.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0 ++ ldi $18, 0 ++ ldi $19, 1 ++ selne $17, $19, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/selnei-176.S b/none/tests/sw64-insn/selnei-176.S +new file mode 100644 +index 000000000..9d14f0b6f +--- /dev/null ++++ b/none/tests/sw64-insn/selnei-176.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0 ++ ldi $18, 0 ++ selne $17, 1, $18, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/setfpec0-212.S b/none/tests/sw64-insn/setfpec0-212.S +new file mode 100644 +index 000000000..58cd7bd1d +--- /dev/null ++++ b/none/tests/sw64-insn/setfpec0-212.S +@@ -0,0 +1,30 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ setfpec0 ++ rfpcr $f16 ++ fimovd $f16, $16 ++ subl $16, $1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/setfpec1-213.S b/none/tests/sw64-insn/setfpec1-213.S +new file mode 100644 +index 000000000..1c7252c7d +--- /dev/null ++++ b/none/tests/sw64-insn/setfpec1-213.S +@@ -0,0 +1,30 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ setfpec1 ++ rfpcr $f16 ++ fimovd $f16, $16 ++ subl $16, $2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/setfpec2-214.S b/none/tests/sw64-insn/setfpec2-214.S +new file mode 100644 +index 000000000..c6bac4d1d +--- /dev/null ++++ b/none/tests/sw64-insn/setfpec2-214.S +@@ -0,0 +1,30 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ setfpec2 ++ rfpcr $f16 ++ fimovd $f16, $16 ++ subl $16, $3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/setfpec3-215.S b/none/tests/sw64-insn/setfpec3-215.S +new file mode 100644 +index 000000000..ac089f2e1 +--- /dev/null ++++ b/none/tests/sw64-insn/setfpec3-215.S +@@ -0,0 +1,30 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ setfpec3 ++ rfpcr $f16 ++ fimovd $f16, $16 ++ subl $16, $4 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/sextb-100.S b/none/tests/sw64-insn/sextb-100.S +new file mode 100644 +index 000000000..06183ca83 +--- /dev/null ++++ b/none/tests/sw64-insn/sextb-100.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf1 ++ sextb $17, $16 ++ addl $16, 0xf, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sextbi-168.S b/none/tests/sw64-insn/sextbi-168.S +new file mode 100644 +index 000000000..dff7b550f +--- /dev/null ++++ b/none/tests/sw64-insn/sextbi-168.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ sextb 0xf1, $16 ++ addl $16, 0xf, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sexth-101.S b/none/tests/sw64-insn/sexth-101.S +new file mode 100644 +index 000000000..f8c386cfd +--- /dev/null ++++ b/none/tests/sw64-insn/sexth-101.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf1 ++ sexth $17, $16 ++ addl $16, 0xf, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sexthi-169.S b/none/tests/sw64-insn/sexthi-169.S +new file mode 100644 +index 000000000..b7fbe57c1 +--- /dev/null ++++ b/none/tests/sw64-insn/sexthi-169.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ sexth 0xf1, $16 ++ addl $16, 0xf, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sll-76.S b/none/tests/sw64-insn/sll-76.S +new file mode 100644 +index 000000000..3187a3b00 +--- /dev/null ++++ b/none/tests/sw64-insn/sll-76.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 2 ++ sll $17, $18, $16 ++ subl $16, 8 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/slli-147.S b/none/tests/sw64-insn/slli-147.S +new file mode 100644 +index 000000000..221575f7b +--- /dev/null ++++ b/none/tests/sw64-insn/slli-147.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ sll $17, 2, $16 ++ subl $16, 8 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sllow-242.S b/none/tests/sw64-insn/sllow-242.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/sllow-242.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/sllowi-266.S b/none/tests/sw64-insn/sllowi-266.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/sllowi-266.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/sra-78.S b/none/tests/sw64-insn/sra-78.S +new file mode 100644 +index 000000000..b9e2964a0 +--- /dev/null ++++ b/none/tests/sw64-insn/sra-78.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 4 ++ ldi $18, 1 ++ sra $17, $18, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/srai-149.S b/none/tests/sw64-insn/srai-149.S +new file mode 100644 +index 000000000..c10a4fe64 +--- /dev/null ++++ b/none/tests/sw64-insn/srai-149.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 4 ++ sra $17, 1, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/srl-77.S b/none/tests/sw64-insn/srl-77.S +new file mode 100644 +index 000000000..33b428fa8 +--- /dev/null ++++ b/none/tests/sw64-insn/srl-77.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 4 ++ ldi $18, 1 ++ srl $17, $18, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/srli-148.S b/none/tests/sw64-insn/srli-148.S +new file mode 100644 +index 000000000..f5407e823 +--- /dev/null ++++ b/none/tests/sw64-insn/srli-148.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 4 ++ srl $17, 1, $16 ++ subl $16, 2 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/srlow-243.S b/none/tests/sw64-insn/srlow-243.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/srlow-243.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/srlowi-267.S b/none/tests/sw64-insn/srlowi-267.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/srlowi-267.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/stb-344.S b/none/tests/sw64-insn/stb-344.S +new file mode 100644 +index 000000000..e00a35aa0 +--- /dev/null ++++ b/none/tests/sw64-insn/stb-344.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldi $30, -1($30) ++ ldi $16, 42($31) ++ bis $31, $16, $17 ++ stb $16, 0($30) ++ ldbu $16, 0($30) ++ xor $17, $16, $16 ++ ldi $30, 1($30) ++ ++exit: ++ ldi $0, 1 ++ #ldi $16, 0 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/std_nc-34.S b/none/tests/sw64-insn/std_nc-34.S +new file mode 100644 +index 000000000..ed9b33f2d +--- /dev/null ++++ b/none/tests/sw64-insn/std_nc-34.S +@@ -0,0 +1,19 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ ifmovd $17, $f17 ++ std_nc $f17, 0($sp) ++ ldd_nc $f18, 0($sp) ++ ldi $sp, 16($sp) ++ fcmpeq $f17, $f18, $f16 ++ ldi $16, 0 ++ fbne $f16, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/sth-345.S b/none/tests/sw64-insn/sth-345.S +new file mode 100644 +index 000000000..1c6fb6605 +--- /dev/null ++++ b/none/tests/sw64-insn/sth-345.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldi $30, -2($30) ++ ldi $16, 8770($31) ++ bis $31, $16, $17 ++ sth $16, 0($30) ++ ldhu $16, 0($30) ++ xor $17, $16, $16 ++ ldi $30, 2($30) ++ ++exit: ++ ldi $0, 1 ++ #ldi $16, 0 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/stl-347.S b/none/tests/sw64-insn/stl-347.S +new file mode 100644 +index 000000000..0868878a4 +--- /dev/null ++++ b/none/tests/sw64-insn/stl-347.S +@@ -0,0 +1,23 @@ ++ ++ .section .rodata ++$BIG: ++ .quad 1311768467284833366 ++ ++ .text ++ .global _start ++_start: ++ ldi $30, -8($30) ++ # ($16) = 0x1234567890123456 ++ ldih $16, $BIG($29) !gprelhigh ++ ldi $16, $BIG($16) !gprellow ++ bis $31, $16, $17 ++ stl $16, 0($30) ++ ldl $16, 0($30) ++ xor $17, $16, $16 ++ ldi $30, 8($30) ++ ++exit: ++ ldi $0, 1 ++ #ldi $16, 0 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/stl_nc-33.S b/none/tests/sw64-insn/stl_nc-33.S +new file mode 100644 +index 000000000..d3b776276 +--- /dev/null ++++ b/none/tests/sw64-insn/stl_nc-33.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl_nc $17, 0($sp) ++ ldl_nc $18, 0($sp) ++ ldi $sp, 16($sp) ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/stl_u-348.S b/none/tests/sw64-insn/stl_u-348.S +new file mode 100644 +index 000000000..c2e5881e1 +--- /dev/null ++++ b/none/tests/sw64-insn/stl_u-348.S +@@ -0,0 +1,23 @@ ++ ++ .section .rodata ++$BIG: ++ .quad 1311768467284833366 ++ ++ .text ++ .global _start ++_start: ++ ldi $30, -8($30) ++ # ($16) = 0x1234567890123456 ++ ldih $16, $BIG($29) !gprelhigh ++ ldi $16, $BIG($16) !gprellow ++ bis $31, $16, $17 ++ stl_u $16, 0($30) ++ ldl_u $16, 0($30) ++ xor $17, $16, $16 ++ ldi $30, 8($30) ++ ++exit: ++ ldi $0, 1 ++ #ldi $16, 0 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/stw-346.S b/none/tests/sw64-insn/stw-346.S +new file mode 100644 +index 000000000..f9548b481 +--- /dev/null ++++ b/none/tests/sw64-insn/stw-346.S +@@ -0,0 +1,18 @@ ++ ++ .global _start ++_start: ++ ldi $30, -4($30) ++ # ($16) = 4220421102 ++ ldih $16, -1137($31) ++ ldi $16, -31762($16) ++ bis $31, $16, $17 ++ stw $16, 0($30) ++ ldw $16, 0($30) ++ xor $17, $16, $16 ++ ldi $30, 4($30) ++ ++exit: ++ ldi $0, 1 ++ #ldi $16, 0 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/stw_nc-32.S b/none/tests/sw64-insn/stw_nc-32.S +new file mode 100644 +index 000000000..884f708d8 +--- /dev/null ++++ b/none/tests/sw64-insn/stw_nc-32.S +@@ -0,0 +1,16 @@ ++ ++ .global _start ++_start: ++ ldgp $29,0($27) ++ unop ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stw_nc $17, 0($sp) ++ ldw_nc $18, 0($sp) ++ ldi $sp, 16($sp) ++ cmpeq $17, $18, $16 ++ subl $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/subl-49.S b/none/tests/sw64-insn/subl-49.S +new file mode 100644 +index 000000000..02ce4b332 +--- /dev/null ++++ b/none/tests/sw64-insn/subl-49.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ subl $17, $18, $16 ++ subl $16, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/subli-120.S b/none/tests/sw64-insn/subli-120.S +new file mode 100644 +index 000000000..6b8c38441 +--- /dev/null ++++ b/none/tests/sw64-insn/subli-120.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ subl $17, 1, $16 ++ subl $16, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/subw-43.S b/none/tests/sw64-insn/subw-43.S +new file mode 100644 +index 000000000..b6ceaa78a +--- /dev/null ++++ b/none/tests/sw64-insn/subw-43.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ subw $17, $18, $16 ++ subw $16, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/subwi-114.S b/none/tests/sw64-insn/subwi-114.S +new file mode 100644 +index 000000000..8d4a0ea7f +--- /dev/null ++++ b/none/tests/sw64-insn/subwi-114.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ subw $17, 1, $16 ++ subw $16, 1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sys_call-2.S b/none/tests/sw64-insn/sys_call-2.S +new file mode 100644 +index 000000000..f3ef0909d +--- /dev/null ++++ b/none/tests/sw64-insn/sys_call-2.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ unop ++ ++exit: ++ ldi $0, 1 ++ ldi $16, 0 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/sys_call_b-1.S b/none/tests/sw64-insn/sys_call_b-1.S +new file mode 100644 +index 000000000..2f1d96c7a +--- /dev/null ++++ b/none/tests/sw64-insn/sys_call_b-1.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ unop ++ ++exit: ++ ldi $0, 1 ++ ldi $16, 0 ++ sys_call/b 0x83 ++ +diff --git a/none/tests/sw64-insn/test-all.sh b/none/tests/sw64-insn/test-all.sh +new file mode 100755 +index 000000000..0acdb1181 +--- /dev/null ++++ b/none/tests/sw64-insn/test-all.sh +@@ -0,0 +1,31 @@ ++#!/bin/bash ++ ++# Colors ++readonly RED='\033[0;31m' ++readonly GREEN='\033[0;32m' ++readonly NC='\033[0m' # No Color ++ ++readonly OK_FILE=ok.log ++readonly FAILED_FILE=failed.log ++readonly TOOL=none ++ ++ ++> ${OK_FILE} ++> ${FAILED_FILE} ++ ++readonly INSN_LIST=$(dirname "${BASH_SOURCE[0]}")/insn-list ++echo "INSN_LIST: ${INSN_LIST}" ++ ++for target in $(cat ${INSN_LIST}); do ++ echo -n "Run ${target}" ++ sh -c "../../../vg-in-place --log-file=${target}.log --tool=${TOOL} ./${target}" ++ if [ x$? == x0 ]; then ++ echo -e " ${GREEN}OK${NC}" ++ echo "OK" >> ${target}.log ++ echo ${target} >> ${OK_FILE} ++ else ++ echo -e " ${RED}FAILED${NC}" ++ echo "FAILED" >> ${target}.log ++ echo ${target} >> ${FAILED_FILE} ++ fi ++done +diff --git a/none/tests/sw64-insn/test-basic.sh b/none/tests/sw64-insn/test-basic.sh +new file mode 100755 +index 000000000..96465cbfc +--- /dev/null ++++ b/none/tests/sw64-insn/test-basic.sh +@@ -0,0 +1,31 @@ ++#!/bin/bash ++ ++# Colors ++readonly RED='\033[0;31m' ++readonly GREEN='\033[0;32m' ++readonly NC='\033[0m' # No Color ++ ++readonly OK_FILE=basicok.log ++readonly FAILED_FILE=basic-failed.log ++readonly TOOL=none ++ ++ ++> ${OK_FILE} ++> ${FAILED_FILE} ++ ++readonly INSN_LIST=$(dirname "${BASH_SOURCE[0]}")/basic-insn-list ++echo "INSN_LIST: ${INSN_LIST}" ++ ++for target in $(cat ${INSN_LIST}); do ++ echo -n "Run ${target}" ++ sh -c "../../../vg-in-place --log-file=${target}.log --tool=${TOOL} ./${target}" ++ if [ x$? == x0 ]; then ++ echo -e " ${GREEN}OK${NC}" ++ echo "OK" >> ${target}.log ++ echo ${target} >> ${OK_FILE} ++ else ++ echo -e " ${RED}FAILED${NC}" ++ echo "FAILED" >> ${target}.log ++ echo ${target} >> ${FAILED_FILE} ++ fi ++done +diff --git a/none/tests/sw64-insn/tmp.S b/none/tests/sw64-insn/tmp.S +new file mode 100644 +index 000000000..d66621dfb +--- /dev/null ++++ b/none/tests/sw64-insn/tmp.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ nop ++ ++exit: ++ ldi $0, 1 ++ ldi $16, 1 # Set status code to 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/umulh-56.S b/none/tests/sw64-insn/umulh-56.S +new file mode 100644 +index 000000000..b9a3fc3be +--- /dev/null ++++ b/none/tests/sw64-insn/umulh-56.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ ldi $18, 2 ++ umulh $17, $18, $16 # higher 64 part is 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/umulhi-127.S b/none/tests/sw64-insn/umulhi-127.S +new file mode 100644 +index 000000000..df9817648 +--- /dev/null ++++ b/none/tests/sw64-insn/umulhi-127.S +@@ -0,0 +1,10 @@ ++ ++ .global _start ++_start: ++ ldi $17, 3 ++ umulh $17, 2, $16 # higher 64 part is 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vaddd-277.S b/none/tests/sw64-insn/vaddd-277.S +new file mode 100644 +index 000000000..584bf54ac +--- /dev/null ++++ b/none/tests/sw64-insn/vaddd-277.S +@@ -0,0 +1,52 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 0.0 */ ++ ldi $18, 0x0 ++ ifmovd $18, $f18 ++ ++result: ++ /* 25.132740800000001 = 0x4039 21fb 4d12 d84a */ ++ ldi $19, 0x403921fb ++ sll $19, 16 ++ ldi $19, 0x4d12($19) ++ sll $19, 16 ++ ldi $19, 0xd84a($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fstd $f17, 0($sp) ++ ldde $f1, 0($sp) ++ vaddd $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vstd $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $17, 0($sp) ++ ldi $23, 4 ++sum: ++ fldd $f2, 0($17) ++ faddd $f18, $f2 ++ subl $23, 1 ++ ldi $17, 8($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ fcmpeq $f18, $f19, $f16 ++ ldi $16, 1 ++ fbeq $f16, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vaddl-244.S b/none/tests/sw64-insn/vaddl-244.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vaddl-244.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vaddli-268.S b/none/tests/sw64-insn/vaddli-268.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vaddli-268.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vadds-276.S b/none/tests/sw64-insn/vadds-276.S +new file mode 120000 +index 000000000..339c4856d +--- /dev/null ++++ b/none/tests/sw64-insn/vadds-276.S +@@ -0,0 +1 @@ ++ldse-36.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vaddw-230.S b/none/tests/sw64-insn/vaddw-230.S +new file mode 120000 +index 000000000..b03fca413 +--- /dev/null ++++ b/none/tests/sw64-insn/vaddw-230.S +@@ -0,0 +1 @@ ++ldwe-35.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vaddwi-254.S b/none/tests/sw64-insn/vaddwi-254.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vaddwi-254.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpeqw-233.S b/none/tests/sw64-insn/vcmpeqw-233.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpeqw-233.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpeqwi-257.S b/none/tests/sw64-insn/vcmpeqwi-257.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpeqwi-257.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpgew-232.S b/none/tests/sw64-insn/vcmpgew-232.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpgew-232.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpgewi-256.S b/none/tests/sw64-insn/vcmpgewi-256.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpgewi-256.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmplew-234.S b/none/tests/sw64-insn/vcmplew-234.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmplew-234.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmplewi-258.S b/none/tests/sw64-insn/vcmplewi-258.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmplewi-258.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpltw-235.S b/none/tests/sw64-insn/vcmpltw-235.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpltw-235.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpltwi-259.S b/none/tests/sw64-insn/vcmpltwi-259.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpltwi-259.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpulew-236.S b/none/tests/sw64-insn/vcmpulew-236.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpulew-236.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpulewi-260.S b/none/tests/sw64-insn/vcmpulewi-260.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpulewi-260.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpultw-237.S b/none/tests/sw64-insn/vcmpultw-237.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpultw-237.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcmpultwi-261.S b/none/tests/sw64-insn/vcmpultwi-261.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcmpultwi-261.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcond-317.S b/none/tests/sw64-insn/vcond-317.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcond-317.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcons-316.S b/none/tests/sw64-insn/vcons-316.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcons-316.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vconw-314.S b/none/tests/sw64-insn/vconw-314.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vconw-314.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcpyf-313.S b/none/tests/sw64-insn/vcpyf-313.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcpyf-313.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcpys-290.S b/none/tests/sw64-insn/vcpys-290.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcpys-290.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcpyse-291.S b/none/tests/sw64-insn/vcpyse-291.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcpyse-291.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcpysn-292.S b/none/tests/sw64-insn/vcpysn-292.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcpysn-292.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vcpyw-312.S b/none/tests/sw64-insn/vcpyw-312.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vcpyw-312.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vdivd-283.S b/none/tests/sw64-insn/vdivd-283.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vdivd-283.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vdivs-282.S b/none/tests/sw64-insn/vdivs-282.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vdivs-282.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vextf-311.S b/none/tests/sw64-insn/vextf-311.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vextf-311.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vextw-310.S b/none/tests/sw64-insn/vextw-310.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vextw-310.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfcmpeq-286.S b/none/tests/sw64-insn/vfcmpeq-286.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfcmpeq-286.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfcmple-287.S b/none/tests/sw64-insn/vfcmple-287.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfcmple-287.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfcmplt-288.S b/none/tests/sw64-insn/vfcmplt-288.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfcmplt-288.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfcmpun-289.S b/none/tests/sw64-insn/vfcmpun-289.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfcmpun-289.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfseleq-301.S b/none/tests/sw64-insn/vfseleq-301.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfseleq-301.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfselle-303.S b/none/tests/sw64-insn/vfselle-303.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfselle-303.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vfsellt-302.S b/none/tests/sw64-insn/vfsellt-302.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vfsellt-302.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vinsf-309.S b/none/tests/sw64-insn/vinsf-309.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vinsf-309.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vinsw-308.S b/none/tests/sw64-insn/vinsw-308.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vinsw-308.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vldd-39.S b/none/tests/sw64-insn/vldd-39.S +new file mode 100644 +index 000000000..f6736a240 +--- /dev/null ++++ b/none/tests/sw64-insn/vldd-39.S +@@ -0,0 +1,52 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 0.0 */ ++ ldi $18, 0x0 ++ ifmovd $18, $f18 ++ ++result: ++ /* 6.2831852000000001 = 0x4019 21fb 4d12 d84a */ ++ ldi $19, 0x401921fb ++ sll $19, 16 ++ ldi $19, 0x4d12($19) ++ sll $19, 16 ++ ldi $19, 0xd84a($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fstd $f17, 0($sp) ++ vldd $f1, 0($sp) ++ vaddd $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vstd $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $17, 0($sp) ++ ldi $23, 4 ++sum: ++ fldd $f2, 0($17) ++ faddd $f18, $f2 ++ subl $23, 1 ++ ldi $17, 8($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ fcmpeq $f18, $f19, $f16 ++ ldi $16, 1 ++ fbeq $f16, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vldd_nc-334.S b/none/tests/sw64-insn/vldd_nc-334.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vldd_nc-334.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vldd_u-326.S b/none/tests/sw64-insn/vldd_u-326.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vldd_u-326.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vlds-38.S b/none/tests/sw64-insn/vlds-38.S +new file mode 100644 +index 000000000..7c4654ae9 +--- /dev/null ++++ b/none/tests/sw64-insn/vlds-38.S +@@ -0,0 +1,53 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 0.0 */ ++ ldi $18, 0x0 ++ ifmovd $18, $f18 ++ ++result: ++ /* 6.2831850051879883 = 0x4019 21fb 4000 0000 */ ++ ldi $19, 0x401921fb ++ sll $19, 16 ++ ldi $19, 0x4000($19) ++ sll $19, 16 ++ ldi $19, 0x0000($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fcvtds $f17, $f20 ++ fsts $f20, 0($sp) ++ vlds $f1, 0($sp) ++ vadds $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vsts $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $17, 0($sp) ++ ldi $23, 4 ++sum: ++ flds $f2, 0($17) ++ fadds $f18, $f2 ++ subl $23, 1 ++ ldi $17, 8($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ fcmpeq $f18, $f19, $f16 ++ ldi $16, 1 ++ fbeq $f16, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vlds_u-324.S b/none/tests/sw64-insn/vlds_u-324.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vlds_u-324.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vldw_u-322.S b/none/tests/sw64-insn/vldw_u-322.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vldw_u-322.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vlogzz-179.S b/none/tests/sw64-insn/vlogzz-179.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vlogzz-179.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmad-294.S b/none/tests/sw64-insn/vmad-294.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmad-294.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmas-293.S b/none/tests/sw64-insn/vmas-293.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmas-293.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmsd-296.S b/none/tests/sw64-insn/vmsd-296.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmsd-296.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmss-295.S b/none/tests/sw64-insn/vmss-295.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmss-295.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmuld-281.S b/none/tests/sw64-insn/vmuld-281.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmuld-281.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vmuls-280.S b/none/tests/sw64-insn/vmuls-280.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vmuls-280.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vnmad-298.S b/none/tests/sw64-insn/vnmad-298.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vnmad-298.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vnmas-297.S b/none/tests/sw64-insn/vnmas-297.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vnmas-297.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vnmsd-300.S b/none/tests/sw64-insn/vnmsd-300.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vnmsd-300.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vnmss-299.S b/none/tests/sw64-insn/vnmss-299.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vnmss-299.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vrolw-241.S b/none/tests/sw64-insn/vrolw-241.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vrolw-241.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vrolwi-265.S b/none/tests/sw64-insn/vrolwi-265.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vrolwi-265.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vseleqw-304.S b/none/tests/sw64-insn/vseleqw-304.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vseleqw-304.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vseleqwi-318.S b/none/tests/sw64-insn/vseleqwi-318.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vseleqwi-318.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsellbcw-305.S b/none/tests/sw64-insn/vsellbcw-305.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsellbcw-305.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsellbcwi-319.S b/none/tests/sw64-insn/vsellbcwi-319.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsellbcwi-319.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsellew-307.S b/none/tests/sw64-insn/vsellew-307.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsellew-307.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsellewi-321.S b/none/tests/sw64-insn/vsellewi-321.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsellewi-321.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vselltw-306.S b/none/tests/sw64-insn/vselltw-306.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vselltw-306.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vselltwi-320.S b/none/tests/sw64-insn/vselltwi-320.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vselltwi-320.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vshfw-315.S b/none/tests/sw64-insn/vshfw-315.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vshfw-315.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsllw-238.S b/none/tests/sw64-insn/vsllw-238.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsllw-238.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsllwi-262.S b/none/tests/sw64-insn/vsllwi-262.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsllwi-262.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsqrtd-285.S b/none/tests/sw64-insn/vsqrtd-285.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsqrtd-285.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsqrts-284.S b/none/tests/sw64-insn/vsqrts-284.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsqrts-284.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsraw-240.S b/none/tests/sw64-insn/vsraw-240.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsraw-240.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsrawi-264.S b/none/tests/sw64-insn/vsrawi-264.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsrawi-264.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsrlw-239.S b/none/tests/sw64-insn/vsrlw-239.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsrlw-239.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsrlwi-263.S b/none/tests/sw64-insn/vsrlwi-263.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsrlwi-263.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstd-41.S b/none/tests/sw64-insn/vstd-41.S +new file mode 100644 +index 000000000..584bf54ac +--- /dev/null ++++ b/none/tests/sw64-insn/vstd-41.S +@@ -0,0 +1,52 @@ ++ ++ .global _start ++_start: ++x1: ++ /* 3.1415926 = 0x400921fb4d12d84a */ ++ ldi $17, 0x400921fb ++ sll $17, 32 ++ ldi $17, 0x4d12d84a($17) ++ ifmovd $17, $f17 ++ ++x2: ++ /* 0.0 */ ++ ldi $18, 0x0 ++ ifmovd $18, $f18 ++ ++result: ++ /* 25.132740800000001 = 0x4039 21fb 4d12 d84a */ ++ ldi $19, 0x403921fb ++ sll $19, 16 ++ ldi $19, 0x4d12($19) ++ sll $19, 16 ++ ldi $19, 0xd84a($19) ++ ifmovd $19, $f19 ++ ++run: ++ ldi $sp, -256($sp) ++ fstd $f17, 0($sp) ++ ldde $f1, 0($sp) ++ vaddd $f1, $f1, $f2 /* 3.14 + 3.14 */ ++ vstd $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $17, 0($sp) ++ ldi $23, 4 ++sum: ++ fldd $f2, 0($17) ++ faddd $f18, $f2 ++ subl $23, 1 ++ ldi $17, 8($17) ++ bne $23, sum ++ ++sum_end: ++ ldi $sp, 256($sp) ++ fcmpeq $f18, $f19, $f16 ++ ldi $16, 1 ++ fbeq $f16, exit ++ ldi $16, 0 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vstd_nc-335.S b/none/tests/sw64-insn/vstd_nc-335.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstd_nc-335.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstd_u-327.S b/none/tests/sw64-insn/vstd_u-327.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstd_u-327.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstd_uh-333.S b/none/tests/sw64-insn/vstd_uh-333.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstd_uh-333.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstd_ul-332.S b/none/tests/sw64-insn/vstd_ul-332.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstd_ul-332.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsts-40.S b/none/tests/sw64-insn/vsts-40.S +new file mode 120000 +index 000000000..339c4856d +--- /dev/null ++++ b/none/tests/sw64-insn/vsts-40.S +@@ -0,0 +1 @@ ++ldse-36.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsts_u-325.S b/none/tests/sw64-insn/vsts_u-325.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsts_u-325.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsts_uh-331.S b/none/tests/sw64-insn/vsts_uh-331.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsts_uh-331.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsts_ul-330.S b/none/tests/sw64-insn/vsts_ul-330.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsts_ul-330.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstw_u-323.S b/none/tests/sw64-insn/vstw_u-323.S +new file mode 120000 +index 000000000..b03fca413 +--- /dev/null ++++ b/none/tests/sw64-insn/vstw_u-323.S +@@ -0,0 +1 @@ ++ldwe-35.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstw_uh-329.S b/none/tests/sw64-insn/vstw_uh-329.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstw_uh-329.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vstw_ul-328.S b/none/tests/sw64-insn/vstw_ul-328.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vstw_ul-328.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsubd-279.S b/none/tests/sw64-insn/vsubd-279.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsubd-279.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsubl-245.S b/none/tests/sw64-insn/vsubl-245.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsubl-245.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsubli-269.S b/none/tests/sw64-insn/vsubli-269.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsubli-269.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsubs-278.S b/none/tests/sw64-insn/vsubs-278.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsubs-278.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vsubw-231.S b/none/tests/sw64-insn/vsubw-231.S +new file mode 100644 +index 000000000..40ecdd2c1 +--- /dev/null ++++ b/none/tests/sw64-insn/vsubw-231.S +@@ -0,0 +1,28 @@ ++ ++ .global _start ++_start: ++ ldi $sp, -256($sp) ++ ldi $17, 2 ++ stl $17, 0($sp) ++ ldwe $f1, 0($sp) ++ vsubw $f1, $f1, $f2 /* 2 - 2 = 0 */ ++ vstw_u $f2, 0($sp) ++ ++sum_wrapper: ++ ldi $16, 0 ++ ldi $17, 0($sp) ++ ldi $23, 8 ++sum: ++ ldw $18, 0($17) ++ addw $16, $18 ++ subl $23, 1 ++ ldi $17, 4($17) ++ bne $23, sum ++ ++result: ++ ldi $sp, 256($sp) ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/vsubwi-255.S b/none/tests/sw64-insn/vsubwi-255.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vsubwi-255.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddb-252.S b/none/tests/sw64-insn/vucaddb-252.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddb-252.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddbi-274.S b/none/tests/sw64-insn/vucaddbi-274.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddbi-274.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddh-250.S b/none/tests/sw64-insn/vucaddh-250.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddh-250.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddhi-272.S b/none/tests/sw64-insn/vucaddhi-272.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddhi-272.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddw-248.S b/none/tests/sw64-insn/vucaddw-248.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddw-248.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucaddwi-270.S b/none/tests/sw64-insn/vucaddwi-270.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucaddwi-270.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubb-253.S b/none/tests/sw64-insn/vucsubb-253.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubb-253.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubbi-275.S b/none/tests/sw64-insn/vucsubbi-275.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubbi-275.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubh-251.S b/none/tests/sw64-insn/vucsubh-251.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubh-251.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubhi-273.S b/none/tests/sw64-insn/vucsubhi-273.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubhi-273.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubw-249.S b/none/tests/sw64-insn/vucsubw-249.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubw-249.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/vucsubwi-271.S b/none/tests/sw64-insn/vucsubwi-271.S +new file mode 120000 +index 000000000..9fa5b2a7a +--- /dev/null ++++ b/none/tests/sw64-insn/vucsubwi-271.S +@@ -0,0 +1 @@ ++tmp.S +\ No newline at end of file +diff --git a/none/tests/sw64-insn/wfpcr-211.S b/none/tests/sw64-insn/wfpcr-211.S +new file mode 100644 +index 000000000..8ca9cb274 +--- /dev/null ++++ b/none/tests/sw64-insn/wfpcr-211.S +@@ -0,0 +1,31 @@ ++ .text ++ .global _start ++_start: ++ ++x1: ++ ldi $1, 0x00 ++ ifmovd $1, $f1 ++ ++x2: ++ ldi $2, 0x01 ++ ifmovd $2, $f2 ++ ++x3: ++ ldi $3, 0x02 ++ ifmovd $3, $f3 ++ ++x4: ++ ldi $4, 0x03 ++ ifmovd $4, $f4 ++ ++run: ++ wfpcr $f1 ++ rfpcr $f16 ++ fsubd $f16, $f1, $f17 ++ ldi $16, 0 ++ fbeq $f17, exit ++ ldi $16, 1 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 +diff --git a/none/tests/sw64-insn/wr_f-14.S b/none/tests/sw64-insn/wr_f-14.S +new file mode 100644 +index 000000000..1b1e2d823 +--- /dev/null ++++ b/none/tests/sw64-insn/wr_f-14.S +@@ -0,0 +1,60 @@ ++ .text ++ ++ .globl xchg_u32 ++xchg_u32: ++ ldi $30,-64($30) ++ stl $26,0($30) ++ stl $15,8($30) ++ mov $30,$15 ++ stl $16,48($15) ++ stl $17,56($15) ++ ldl $5,48($15) ++ ldl $1,56($15) ++ ldl $2,48($15) ++ memb ++ ldi $6, 0($2) ++ ++f1: ++ lldw $4, 0($6) ++ ldi $3, 1 ++ wr_f $3 ++ bis $31, $1, $3 ++ memb ++ lstw $3, 0($6) ++ rd_f $3 ++ bne $3, f2 ++ br f1 ++ ++f2: ++ mov $6,$2 ++ stl $4,56($15) ++ stl $3,32($15) ++ stl $2,40($15) ++ ldl $1,56($15) ++ mov $1,$0 ++ mov $15,$30 ++ ldl $26,0($30) ++ ldl $15,8($30) ++ ldi $30,64($30) ++ ret $31,($26),1 ++ ++ .global _start ++_start: ++ br $29, 1f ++1: ldgp $29, 0($29) ++ subl $30, 16, $30 ++ mov 0, $15 ++ ++ ldi $sp, -16($sp) ++ ldi $17, 42 ++ stl $17, 0($sp) ++ ldi $16, 0($sp) ++ ldi $17, 43 ++ call $26, xchg_u32 ++ mov $0, $16 ++ subl $16, 42 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/xor-66.S b/none/tests/sw64-insn/xor-66.S +new file mode 100644 +index 000000000..751c9374b +--- /dev/null ++++ b/none/tests/sw64-insn/xor-66.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ ldi $18, 1 ++ xor $17, $18, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/xori-137.S b/none/tests/sw64-insn/xori-137.S +new file mode 100644 +index 000000000..4942a3bdc +--- /dev/null ++++ b/none/tests/sw64-insn/xori-137.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 2 ++ xor $17, 1, $16 ++ subl $16, 3 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/zap-98.S b/none/tests/sw64-insn/zap-98.S +new file mode 100644 +index 000000000..00efadfe5 +--- /dev/null ++++ b/none/tests/sw64-insn/zap-98.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 0b1110 ++ zap $17, $18, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/zapi-166.S b/none/tests/sw64-insn/zapi-166.S +new file mode 100644 +index 000000000..1faf8cbdf +--- /dev/null ++++ b/none/tests/sw64-insn/zapi-166.S +@@ -0,0 +1,11 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ zap $17, 0b1110, $16 ++ subl $16, 0xf1, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/zapnot-99.S b/none/tests/sw64-insn/zapnot-99.S +new file mode 100644 +index 000000000..ccf55c1d4 +--- /dev/null ++++ b/none/tests/sw64-insn/zapnot-99.S +@@ -0,0 +1,13 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ ldi $18, 0b1110 ++ zapnot $17, $18, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-insn/zapnoti-167.S b/none/tests/sw64-insn/zapnoti-167.S +new file mode 100644 +index 000000000..c71fb63ca +--- /dev/null ++++ b/none/tests/sw64-insn/zapnoti-167.S +@@ -0,0 +1,12 @@ ++ ++ .global _start ++_start: ++ ldi $17, 0xf0f1 ++ zapnot $17, 0b1110, $16 ++ srl $16, 8, $16 ++ subl $16, 0xf0, $16 ++ ++exit: ++ ldi $0, 1 ++ sys_call 0x83 ++ +diff --git a/none/tests/sw64-linux/.deps/getcontext.Po b/none/tests/sw64-linux/.deps/getcontext.Po +new file mode 100644 +index 000000000..5dd61b3e1 +--- /dev/null ++++ b/none/tests/sw64-linux/.deps/getcontext.Po +@@ -0,0 +1,49 @@ ++getcontext.o: getcontext.c /usr/include/stdc-predef.h \ ++ /usr/include/stdio.h /usr/include/bits/libc-header-start.h \ ++ /usr/include/features.h /usr/include/features-time64.h \ ++ /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ ++ /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ ++ /usr/include/gnu/stubs.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h \ ++ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ ++ /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ ++ /usr/include/bits/types/__mbstate_t.h \ ++ /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ ++ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ ++ /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ ++ /usr/include/bits/floatn-common.h /usr/include/bits/stdio-ldbl.h \ ++ /usr/include/ucontext.h /usr/include/bits/indirect-return.h \ ++ /usr/include/sys/ucontext.h /usr/include/bits/types/sigset_t.h \ ++ /usr/include/bits/types/__sigset_t.h /usr/include/bits/types/stack_t.h ++/usr/include/stdc-predef.h: ++/usr/include/stdio.h: ++/usr/include/bits/libc-header-start.h: ++/usr/include/features.h: ++/usr/include/features-time64.h: ++/usr/include/bits/wordsize.h: ++/usr/include/bits/timesize.h: ++/usr/include/sys/cdefs.h: ++/usr/include/bits/long-double.h: ++/usr/include/gnu/stubs.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h: ++/usr/include/bits/types.h: ++/usr/include/bits/typesizes.h: ++/usr/include/bits/time64.h: ++/usr/include/bits/types/__fpos_t.h: ++/usr/include/bits/types/__mbstate_t.h: ++/usr/include/bits/types/__fpos64_t.h: ++/usr/include/bits/types/__FILE.h: ++/usr/include/bits/types/FILE.h: ++/usr/include/bits/types/struct_FILE.h: ++/usr/include/bits/stdio_lim.h: ++/usr/include/bits/floatn.h: ++/usr/include/bits/floatn-common.h: ++/usr/include/bits/stdio-ldbl.h: ++/usr/include/ucontext.h: ++/usr/include/bits/indirect-return.h: ++/usr/include/sys/ucontext.h: ++/usr/include/bits/types/sigset_t.h: ++/usr/include/bits/types/__sigset_t.h: ++/usr/include/bits/types/stack_t.h: +diff --git a/none/tests/sw64-linux/.deps/gethostname.Po b/none/tests/sw64-linux/.deps/gethostname.Po +new file mode 100644 +index 000000000..07df9561b +--- /dev/null ++++ b/none/tests/sw64-linux/.deps/gethostname.Po +@@ -0,0 +1,123 @@ ++gethostname.o: gethostname.c /usr/include/stdc-predef.h \ ++ /usr/include/stdio.h /usr/include/bits/libc-header-start.h \ ++ /usr/include/features.h /usr/include/features-time64.h \ ++ /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ ++ /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ ++ /usr/include/gnu/stubs.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h \ ++ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ ++ /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ ++ /usr/include/bits/types/__mbstate_t.h \ ++ /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ ++ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ ++ /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ ++ /usr/include/bits/floatn-common.h /usr/include/bits/stdio-ldbl.h \ ++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ ++ /usr/include/bits/waitstatus.h /usr/include/sys/types.h \ ++ /usr/include/bits/types/clock_t.h /usr/include/bits/types/clockid_t.h \ ++ /usr/include/bits/types/time_t.h /usr/include/bits/types/timer_t.h \ ++ /usr/include/bits/stdint-intn.h /usr/include/endian.h \ ++ /usr/include/bits/endian.h /usr/include/bits/endianness.h \ ++ /usr/include/bits/byteswap.h /usr/include/bits/uintn-identity.h \ ++ /usr/include/sys/select.h /usr/include/bits/select.h \ ++ /usr/include/bits/types/sigset_t.h /usr/include/bits/types/__sigset_t.h \ ++ /usr/include/bits/types/struct_timeval.h \ ++ /usr/include/bits/types/struct_timespec.h \ ++ /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ ++ /usr/include/bits/pthreadtypes-arch.h /usr/include/bits/struct_mutex.h \ ++ /usr/include/bits/struct_rwlock.h /usr/include/alloca.h \ ++ /usr/include/bits/stdlib-float.h /usr/include/bits/stdlib-ldbl.h \ ++ /usr/include/string.h /usr/include/bits/types/locale_t.h \ ++ /usr/include/bits/types/__locale_t.h /usr/include/strings.h \ ++ /usr/include/fcntl.h /usr/include/bits/fcntl.h \ ++ /usr/include/bits/fcntl-linux.h /usr/include/bits/stat.h \ ++ /usr/include/bits/struct_stat.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/limits.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/syslimits.h \ ++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ ++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ ++ /usr/include/bits/pthread_stack_min-dynamic.h \ ++ /usr/include/bits/pthread_stack_min.h /usr/include/bits/posix2_lim.h \ ++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ ++ /usr/include/bits/environments.h /usr/include/bits/confname.h \ ++ /usr/include/bits/getopt_posix.h /usr/include/bits/getopt_core.h \ ++ /usr/include/bits/unistd_ext.h ++/usr/include/stdc-predef.h: ++/usr/include/stdio.h: ++/usr/include/bits/libc-header-start.h: ++/usr/include/features.h: ++/usr/include/features-time64.h: ++/usr/include/bits/wordsize.h: ++/usr/include/bits/timesize.h: ++/usr/include/sys/cdefs.h: ++/usr/include/bits/long-double.h: ++/usr/include/gnu/stubs.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h: ++/usr/include/bits/types.h: ++/usr/include/bits/typesizes.h: ++/usr/include/bits/time64.h: ++/usr/include/bits/types/__fpos_t.h: ++/usr/include/bits/types/__mbstate_t.h: ++/usr/include/bits/types/__fpos64_t.h: ++/usr/include/bits/types/__FILE.h: ++/usr/include/bits/types/FILE.h: ++/usr/include/bits/types/struct_FILE.h: ++/usr/include/bits/stdio_lim.h: ++/usr/include/bits/floatn.h: ++/usr/include/bits/floatn-common.h: ++/usr/include/bits/stdio-ldbl.h: ++/usr/include/stdlib.h: ++/usr/include/bits/waitflags.h: ++/usr/include/bits/waitstatus.h: ++/usr/include/sys/types.h: ++/usr/include/bits/types/clock_t.h: ++/usr/include/bits/types/clockid_t.h: ++/usr/include/bits/types/time_t.h: ++/usr/include/bits/types/timer_t.h: ++/usr/include/bits/stdint-intn.h: ++/usr/include/endian.h: ++/usr/include/bits/endian.h: ++/usr/include/bits/endianness.h: ++/usr/include/bits/byteswap.h: ++/usr/include/bits/uintn-identity.h: ++/usr/include/sys/select.h: ++/usr/include/bits/select.h: ++/usr/include/bits/types/sigset_t.h: ++/usr/include/bits/types/__sigset_t.h: ++/usr/include/bits/types/struct_timeval.h: ++/usr/include/bits/types/struct_timespec.h: ++/usr/include/bits/pthreadtypes.h: ++/usr/include/bits/thread-shared-types.h: ++/usr/include/bits/pthreadtypes-arch.h: ++/usr/include/bits/struct_mutex.h: ++/usr/include/bits/struct_rwlock.h: ++/usr/include/alloca.h: ++/usr/include/bits/stdlib-float.h: ++/usr/include/bits/stdlib-ldbl.h: ++/usr/include/string.h: ++/usr/include/bits/types/locale_t.h: ++/usr/include/bits/types/__locale_t.h: ++/usr/include/strings.h: ++/usr/include/fcntl.h: ++/usr/include/bits/fcntl.h: ++/usr/include/bits/fcntl-linux.h: ++/usr/include/bits/stat.h: ++/usr/include/bits/struct_stat.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/limits.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/syslimits.h: ++/usr/include/limits.h: ++/usr/include/bits/posix1_lim.h: ++/usr/include/bits/local_lim.h: ++/usr/include/linux/limits.h: ++/usr/include/bits/pthread_stack_min-dynamic.h: ++/usr/include/bits/pthread_stack_min.h: ++/usr/include/bits/posix2_lim.h: ++/usr/include/unistd.h: ++/usr/include/bits/posix_opt.h: ++/usr/include/bits/environments.h: ++/usr/include/bits/confname.h: ++/usr/include/bits/getopt_posix.h: ++/usr/include/bits/getopt_core.h: ++/usr/include/bits/unistd_ext.h: +diff --git a/none/tests/sw64-linux/.deps/prctl.Po b/none/tests/sw64-linux/.deps/prctl.Po +new file mode 100644 +index 000000000..46d2dd73d +--- /dev/null ++++ b/none/tests/sw64-linux/.deps/prctl.Po +@@ -0,0 +1,71 @@ ++prctl.o: prctl.c /usr/include/stdc-predef.h /usr/include/stdio.h \ ++ /usr/include/bits/libc-header-start.h /usr/include/features.h \ ++ /usr/include/features-time64.h /usr/include/bits/wordsize.h \ ++ /usr/include/bits/timesize.h /usr/include/sys/cdefs.h \ ++ /usr/include/bits/long-double.h /usr/include/gnu/stubs.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h \ ++ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ ++ /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ ++ /usr/include/bits/types/__mbstate_t.h \ ++ /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ ++ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ ++ /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ ++ /usr/include/bits/floatn-common.h /usr/include/bits/stdio-ldbl.h \ ++ /usr/include/string.h /usr/include/bits/types/locale_t.h \ ++ /usr/include/bits/types/__locale_t.h /usr/include/strings.h \ ++ /usr/include/errno.h /usr/include/bits/errno.h \ ++ /usr/include/linux/errno.h /usr/include/asm/errno.h \ ++ /usr/include/asm-generic/errno-base.h /usr/include/sys/prctl.h \ ++ /usr/include/linux/prctl.h /usr/include/linux/types.h \ ++ /usr/include/asm/types.h /usr/include/asm-generic/types.h \ ++ /usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \ ++ /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ ++ /usr/include/linux/stddef.h /usr/include/asm/posix_types.h \ ++ /usr/include/asm-generic/posix_types.h ++/usr/include/stdc-predef.h: ++/usr/include/stdio.h: ++/usr/include/bits/libc-header-start.h: ++/usr/include/features.h: ++/usr/include/features-time64.h: ++/usr/include/bits/wordsize.h: ++/usr/include/bits/timesize.h: ++/usr/include/sys/cdefs.h: ++/usr/include/bits/long-double.h: ++/usr/include/gnu/stubs.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h: ++/usr/include/bits/types.h: ++/usr/include/bits/typesizes.h: ++/usr/include/bits/time64.h: ++/usr/include/bits/types/__fpos_t.h: ++/usr/include/bits/types/__mbstate_t.h: ++/usr/include/bits/types/__fpos64_t.h: ++/usr/include/bits/types/__FILE.h: ++/usr/include/bits/types/FILE.h: ++/usr/include/bits/types/struct_FILE.h: ++/usr/include/bits/stdio_lim.h: ++/usr/include/bits/floatn.h: ++/usr/include/bits/floatn-common.h: ++/usr/include/bits/stdio-ldbl.h: ++/usr/include/string.h: ++/usr/include/bits/types/locale_t.h: ++/usr/include/bits/types/__locale_t.h: ++/usr/include/strings.h: ++/usr/include/errno.h: ++/usr/include/bits/errno.h: ++/usr/include/linux/errno.h: ++/usr/include/asm/errno.h: ++/usr/include/asm-generic/errno-base.h: ++/usr/include/sys/prctl.h: ++/usr/include/linux/prctl.h: ++/usr/include/linux/types.h: ++/usr/include/asm/types.h: ++/usr/include/asm-generic/types.h: ++/usr/include/asm-generic/int-ll64.h: ++/usr/include/asm/bitsperlong.h: ++/usr/include/asm-generic/bitsperlong.h: ++/usr/include/linux/posix_types.h: ++/usr/include/linux/stddef.h: ++/usr/include/asm/posix_types.h: ++/usr/include/asm-generic/posix_types.h: +diff --git a/none/tests/sw64-linux/.deps/readahead.Po b/none/tests/sw64-linux/.deps/readahead.Po +new file mode 100644 +index 000000000..87db80490 +--- /dev/null ++++ b/none/tests/sw64-linux/.deps/readahead.Po +@@ -0,0 +1,70 @@ ++readahead.o: readahead.c /usr/include/stdc-predef.h /usr/include/fcntl.h \ ++ /usr/include/features.h /usr/include/features-time64.h \ ++ /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ ++ /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ ++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ ++ /usr/include/bits/typesizes.h /usr/include/bits/time64.h \ ++ /usr/include/bits/fcntl.h /usr/include/bits/fcntl-linux.h \ ++ /usr/include/bits/types/struct_iovec.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h \ ++ /usr/include/linux/falloc.h /usr/include/bits/types/struct_timespec.h \ ++ /usr/include/bits/endian.h /usr/include/bits/endianness.h \ ++ /usr/include/bits/types/time_t.h /usr/include/bits/stat.h \ ++ /usr/include/bits/struct_stat.h /usr/include/unistd.h \ ++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ ++ /usr/include/bits/confname.h /usr/include/bits/getopt_posix.h \ ++ /usr/include/bits/getopt_core.h /usr/include/bits/unistd_ext.h \ ++ /usr/include/linux/close_range.h /usr/include/stdio.h \ ++ /usr/include/bits/libc-header-start.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h \ ++ /usr/include/bits/types/__fpos_t.h /usr/include/bits/types/__mbstate_t.h \ ++ /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ ++ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ ++ /usr/include/bits/types/cookie_io_functions_t.h \ ++ /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ ++ /usr/include/bits/floatn-common.h /usr/include/bits/stdio-ldbl.h ++/usr/include/stdc-predef.h: ++/usr/include/fcntl.h: ++/usr/include/features.h: ++/usr/include/features-time64.h: ++/usr/include/bits/wordsize.h: ++/usr/include/bits/timesize.h: ++/usr/include/sys/cdefs.h: ++/usr/include/bits/long-double.h: ++/usr/include/gnu/stubs.h: ++/usr/include/bits/types.h: ++/usr/include/bits/typesizes.h: ++/usr/include/bits/time64.h: ++/usr/include/bits/fcntl.h: ++/usr/include/bits/fcntl-linux.h: ++/usr/include/bits/types/struct_iovec.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h: ++/usr/include/linux/falloc.h: ++/usr/include/bits/types/struct_timespec.h: ++/usr/include/bits/endian.h: ++/usr/include/bits/endianness.h: ++/usr/include/bits/types/time_t.h: ++/usr/include/bits/stat.h: ++/usr/include/bits/struct_stat.h: ++/usr/include/unistd.h: ++/usr/include/bits/posix_opt.h: ++/usr/include/bits/environments.h: ++/usr/include/bits/confname.h: ++/usr/include/bits/getopt_posix.h: ++/usr/include/bits/getopt_core.h: ++/usr/include/bits/unistd_ext.h: ++/usr/include/linux/close_range.h: ++/usr/include/stdio.h: ++/usr/include/bits/libc-header-start.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h: ++/usr/include/bits/types/__fpos_t.h: ++/usr/include/bits/types/__mbstate_t.h: ++/usr/include/bits/types/__fpos64_t.h: ++/usr/include/bits/types/__FILE.h: ++/usr/include/bits/types/FILE.h: ++/usr/include/bits/types/struct_FILE.h: ++/usr/include/bits/types/cookie_io_functions_t.h: ++/usr/include/bits/stdio_lim.h: ++/usr/include/bits/floatn.h: ++/usr/include/bits/floatn-common.h: ++/usr/include/bits/stdio-ldbl.h: +diff --git a/none/tests/sw64-linux/.deps/sigsuspend.Po b/none/tests/sw64-linux/.deps/sigsuspend.Po +new file mode 100644 +index 000000000..657cac6c1 +--- /dev/null ++++ b/none/tests/sw64-linux/.deps/sigsuspend.Po +@@ -0,0 +1,106 @@ ++sigsuspend.o: sigsuspend.c /usr/include/stdc-predef.h \ ++ /usr/include/unistd.h /usr/include/features.h \ ++ /usr/include/features-time64.h /usr/include/bits/wordsize.h \ ++ /usr/include/bits/timesize.h /usr/include/sys/cdefs.h \ ++ /usr/include/bits/long-double.h /usr/include/gnu/stubs.h \ ++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ ++ /usr/include/bits/types.h /usr/include/bits/typesizes.h \ ++ /usr/include/bits/time64.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h \ ++ /usr/include/bits/confname.h /usr/include/bits/getopt_posix.h \ ++ /usr/include/bits/getopt_core.h /usr/include/bits/unistd_ext.h \ ++ /usr/include/linux/close_range.h /usr/include/signal.h \ ++ /usr/include/bits/signum-generic.h /usr/include/bits/signum-arch.h \ ++ /usr/include/bits/types/sig_atomic_t.h \ ++ /usr/include/bits/types/sigset_t.h /usr/include/bits/types/__sigset_t.h \ ++ /usr/include/bits/types/struct_timespec.h /usr/include/bits/endian.h \ ++ /usr/include/bits/endianness.h /usr/include/bits/types/time_t.h \ ++ /usr/include/bits/types/siginfo_t.h /usr/include/bits/types/__sigval_t.h \ ++ /usr/include/bits/siginfo-arch.h /usr/include/bits/siginfo-consts.h \ ++ /usr/include/bits/siginfo-consts-arch.h \ ++ /usr/include/bits/types/sigval_t.h /usr/include/bits/types/sigevent_t.h \ ++ /usr/include/bits/sigevent-consts.h /usr/include/bits/sigaction.h \ ++ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ ++ /usr/include/bits/types/stack_t.h /usr/include/sys/ucontext.h \ ++ /usr/include/bits/sigstack.h /usr/include/bits/sigstksz.h \ ++ /usr/include/bits/ss_flags.h /usr/include/bits/types/struct_sigstack.h \ ++ /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ ++ /usr/include/bits/pthreadtypes-arch.h /usr/include/bits/struct_mutex.h \ ++ /usr/include/bits/struct_rwlock.h /usr/include/bits/sigthread.h \ ++ /usr/include/bits/signal_ext.h /usr/include/stdio.h \ ++ /usr/include/bits/libc-header-start.h \ ++ /usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h \ ++ /usr/include/bits/types/__fpos_t.h /usr/include/bits/types/__mbstate_t.h \ ++ /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ ++ /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ ++ /usr/include/bits/types/cookie_io_functions_t.h \ ++ /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ ++ /usr/include/bits/floatn-common.h /usr/include/bits/stdio-ldbl.h ++/usr/include/stdc-predef.h: ++/usr/include/unistd.h: ++/usr/include/features.h: ++/usr/include/features-time64.h: ++/usr/include/bits/wordsize.h: ++/usr/include/bits/timesize.h: ++/usr/include/sys/cdefs.h: ++/usr/include/bits/long-double.h: ++/usr/include/gnu/stubs.h: ++/usr/include/bits/posix_opt.h: ++/usr/include/bits/environments.h: ++/usr/include/bits/types.h: ++/usr/include/bits/typesizes.h: ++/usr/include/bits/time64.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stddef.h: ++/usr/include/bits/confname.h: ++/usr/include/bits/getopt_posix.h: ++/usr/include/bits/getopt_core.h: ++/usr/include/bits/unistd_ext.h: ++/usr/include/linux/close_range.h: ++/usr/include/signal.h: ++/usr/include/bits/signum-generic.h: ++/usr/include/bits/signum-arch.h: ++/usr/include/bits/types/sig_atomic_t.h: ++/usr/include/bits/types/sigset_t.h: ++/usr/include/bits/types/__sigset_t.h: ++/usr/include/bits/types/struct_timespec.h: ++/usr/include/bits/endian.h: ++/usr/include/bits/endianness.h: ++/usr/include/bits/types/time_t.h: ++/usr/include/bits/types/siginfo_t.h: ++/usr/include/bits/types/__sigval_t.h: ++/usr/include/bits/siginfo-arch.h: ++/usr/include/bits/siginfo-consts.h: ++/usr/include/bits/siginfo-consts-arch.h: ++/usr/include/bits/types/sigval_t.h: ++/usr/include/bits/types/sigevent_t.h: ++/usr/include/bits/sigevent-consts.h: ++/usr/include/bits/sigaction.h: ++/usr/include/bits/sigcontext.h: ++/usr/include/asm/sigcontext.h: ++/usr/include/bits/types/stack_t.h: ++/usr/include/sys/ucontext.h: ++/usr/include/bits/sigstack.h: ++/usr/include/bits/sigstksz.h: ++/usr/include/bits/ss_flags.h: ++/usr/include/bits/types/struct_sigstack.h: ++/usr/include/bits/pthreadtypes.h: ++/usr/include/bits/thread-shared-types.h: ++/usr/include/bits/pthreadtypes-arch.h: ++/usr/include/bits/struct_mutex.h: ++/usr/include/bits/struct_rwlock.h: ++/usr/include/bits/sigthread.h: ++/usr/include/bits/signal_ext.h: ++/usr/include/stdio.h: ++/usr/include/bits/libc-header-start.h: ++/usr/lib/gcc/sw_64-linux-gnu/10.3.1/include/stdarg.h: ++/usr/include/bits/types/__fpos_t.h: ++/usr/include/bits/types/__mbstate_t.h: ++/usr/include/bits/types/__fpos64_t.h: ++/usr/include/bits/types/__FILE.h: ++/usr/include/bits/types/FILE.h: ++/usr/include/bits/types/struct_FILE.h: ++/usr/include/bits/types/cookie_io_functions_t.h: ++/usr/include/bits/stdio_lim.h: ++/usr/include/bits/floatn.h: ++/usr/include/bits/floatn-common.h: ++/usr/include/bits/stdio-ldbl.h: +diff --git a/none/tests/sw64-linux/Makefile b/none/tests/sw64-linux/Makefile +new file mode 100644 +index 000000000..d4573bb38 +--- /dev/null ++++ b/none/tests/sw64-linux/Makefile +@@ -0,0 +1,1041 @@ ++# Makefile.in generated by automake 1.16.5 from Makefile.am. ++# none/tests/sw64-linux/Makefile. Generated from Makefile.in by configure. ++ ++# Copyright (C) 1994-2021 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++ ++ ++# This file is used for tool tests, and also in perf/Makefile.am. ++ ++# This file should be included (directly or indirectly) by every ++# Makefile.am that builds programs. And also the top-level Makefile.am. ++ ++#---------------------------------------------------------------------------- ++# Global stuff ++#---------------------------------------------------------------------------- ++ ++ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/valgrind ++pkgincludedir = $(includedir)/valgrind ++pkglibdir = $(libdir)/valgrind ++pkglibexecdir = $(libexecdir)/valgrind ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = sw_64-sunway-linux-gnu ++host_triplet = sw_64-sunway-linux-gnu ++#am__append_1 = -Wno-cast-align -Wno-self-assign \ ++# -Wno-tautological-compare ++ ++##am__append_2 = -Wno-expansion-to-defined ++#am__append_3 = -DVGABI_ ++##am__append_4 = -DVGABI_ ++#am__append_5 = -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile ++ ++# The Android toolchain includes all kinds of stdlib helpers present in ++# bionic which is bad because we are not linking with it and the Android ++# linker will panic. ++#am__append_6 = -nostdlib ++#am__append_7 = -DVGA_SEC_=1 \ ++# -DVGP_SEC_sw64_linux=1 ++ ++#am__append_8 = -DVGABI_ ++ ++# Make sure that all test programs have threaded errno. ++# Disable largefile support as there are test cases explicitly enabling it. ++#am__append_9 = -D_REENTRANT ++#am__append_10 = -Wno-format-extra-args \ ++# -Wno-literal-range \ ++# -Wno-tautological-constant-out-of-range-compare \ ++# -Wno-self-assign -Wno-string-plus-int \ ++# -Wno-uninitialized -Wno-unused-value # \ ++# clang 3.0.0 ++#am__append_11 = -Wno-unused-private-field # drd/tests/tsan_unittest.cpp ++check_PROGRAMS = getcontext$(EXEEXT) gethostname$(EXEEXT) \ ++ prctl$(EXEEXT) readahead$(EXEEXT) sigsuspend$(EXEEXT) ++subdir = none/tests/sw64-linux ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(am__DIST_COMMON) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++getcontext_SOURCES = getcontext.c ++getcontext_OBJECTS = getcontext.$(OBJEXT) ++getcontext_LDADD = $(LDADD) ++gethostname_SOURCES = gethostname.c ++gethostname_OBJECTS = gethostname.$(OBJEXT) ++gethostname_LDADD = $(LDADD) ++prctl_SOURCES = prctl.c ++prctl_OBJECTS = prctl.$(OBJEXT) ++prctl_LDADD = $(LDADD) ++readahead_SOURCES = readahead.c ++readahead_OBJECTS = readahead.$(OBJEXT) ++readahead_LDADD = $(LDADD) ++sigsuspend_SOURCES = sigsuspend.c ++sigsuspend_OBJECTS = sigsuspend.$(OBJEXT) ++sigsuspend_LDADD = $(LDADD) ++SCRIPTS = $(dist_noinst_SCRIPTS) ++AM_V_P = $(am__v_P_$(V)) ++am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_$(V)) ++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_$(V)) ++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) ++am__v_at_0 = @ ++am__v_at_1 = ++DEFAULT_INCLUDES = -I. -I$(top_builddir) ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__maybe_remake_depfiles = depfiles ++am__depfiles_remade = ./$(DEPDIR)/getcontext.Po \ ++ ./$(DEPDIR)/gethostname.Po ./$(DEPDIR)/prctl.Po \ ++ ./$(DEPDIR)/readahead.Po ./$(DEPDIR)/sigsuspend.Po ++am__mv = mv -f ++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ ++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++AM_V_CC = $(am__v_CC_$(V)) ++am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) ++am__v_CC_0 = @echo " CC " $@; ++am__v_CC_1 = ++CCLD = $(CC) ++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++AM_V_CCLD = $(am__v_CCLD_$(V)) ++am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) ++am__v_CCLD_0 = @echo " CCLD " $@; ++am__v_CCLD_1 = ++SOURCES = getcontext.c gethostname.c prctl.c readahead.c sigsuspend.c ++DIST_SOURCES = getcontext.c gethostname.c prctl.c readahead.c \ ++ sigsuspend.c ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/Makefile.all.am \ ++ $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/depcomp ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' aclocal-1.16 ++AMTAR = $${TAR-tar} ++AM_DEFAULT_VERBOSITY = 1 ++AR = /usr/bin/ar ++AUTOCONF = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' autoconf ++AUTOHEADER = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' autoheader ++AUTOMAKE = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' automake-1.16 ++AWK = gawk ++BOOST_CFLAGS = ++BOOST_LIBS = ++CC = gcc ++CCAS = gcc ++CCASDEPMODE = depmode=gcc3 ++CCASFLAGS = ++CCDEPMODE = depmode=gcc3 ++CFLAGS = ++CFLAGS_MPI = -g -O -fno-omit-frame-pointer -Wall -fpic ++CPP = gcc -E ++CPPFLAGS = ++CSCOPE = cscope ++CTAGS = ctags ++CXX = g++ ++CXXDEPMODE = depmode=gcc3 ++CXXFLAGS = ++CYGPATH_W = echo ++DEFAULT_SUPP = ./xfree-3.supp ./xfree-4.supp glibc-2.X-drd.supp glibc-2.X-helgrind.supp glibc-2.X.supp ++DEFS = -DHAVE_CONFIG_H ++DEPDIR = .deps ++DIFF = diff -u ++DIS_PATH = ++ECHO_C = ++ECHO_N = -n ++ECHO_T = ++EGREP = /usr/bin/grep -E ++ETAGS = etags ++EXEEXT = ++FLAG_FALIGNED_NEW = -faligned-new ++FLAG_FINLINE_FUNCTIONS = -finline-functions ++FLAG_FNO_IPA_ICF = -fno-ipa-icf ++FLAG_FNO_STACK_PROTECTOR = -fno-stack-protector ++FLAG_FSANITIZE = ++FLAG_FSIZED_DEALLOCATION = -fsized-deallocation ++FLAG_M32 = ++FLAG_M64 = ++FLAG_MLONG_DOUBLE_128 = -mlong-double-128 ++FLAG_MMMX = ++FLAG_MSA = ++FLAG_MSSE = ++FLAG_NO_BUILD_ID = ++FLAG_NO_PIE = -no-pie ++FLAG_OCTEON = ++FLAG_OCTEON2 = ++FLAG_PIE = -pie ++FLAG_T_TEXT = -Ttext-segment ++FLAG_UNLIMITED_INLINE_UNIT_GROWTH = --param inline-unit-growth=900 ++FLAG_W_CAST_ALIGN = -Wcast-align ++FLAG_W_CAST_QUAL = -Wcast-qual ++FLAG_W_EMPTY_BODY = -Wempty-body ++FLAG_W_ENUM_CONVERSION = -Wenum-conversion ++FLAG_W_EXTRA = -Wextra ++FLAG_W_FORMAT = -Wformat ++FLAG_W_FORMAT_SECURITY = -Wformat-security ++FLAG_W_FORMAT_SIGNEDNESS = -Wformat-signedness ++FLAG_W_IGNORED_QUALIFIERS = -Wignored-qualifiers ++FLAG_W_IMPLICIT_FALLTHROUGH = -Wimplicit-fallthrough=2 ++FLAG_W_LOGICAL_OP = -Wlogical-op ++FLAG_W_MISSING_PARAMETER_TYPE = -Wmissing-parameter-type ++FLAG_W_NO_EXPANSION_TO_DEFINED = -Wno-expansion-to-defined ++FLAG_W_NO_INFINITE_RECURSION = ++FLAG_W_NO_MEMSET_TRANSPOSED_ARGS = -Wno-memset-transposed-args ++FLAG_W_NO_MISMATCHED_NEW_DELETE = ++FLAG_W_NO_NONNULL = -Wno-nonnull ++FLAG_W_NO_OVERFLOW = -Wno-overflow ++FLAG_W_NO_POINTER_SIGN = -Wno-pointer-sign ++FLAG_W_NO_STATIC_LOCAL_IN_INLINE = ++FLAG_W_NO_UNINITIALIZED = -Wno-uninitialized ++FLAG_W_NO_UNUSED_FUNCTION = -Wno-unused-function ++FLAG_W_OLD_STYLE_DECLARATION = -Wold-style-declaration ++FLAG_W_WRITE_STRINGS = -Wwrite-strings ++GDB = /usr/local/bin/gdb ++GLIBC_LIBC_PATH = */lib*/libc.so.6 ++GLIBC_LIBPTHREAD_PATH = */lib*/libc.so.6 ++GLIBC_VERSION = 2.34 ++GREP = /usr/bin/grep ++HWCAP_HAS_ALTIVEC = ++HWCAP_HAS_DFP = ++HWCAP_HAS_HTM = ++HWCAP_HAS_ISA_2_05 = ++HWCAP_HAS_ISA_2_06 = ++HWCAP_HAS_ISA_2_07 = ++HWCAP_HAS_ISA_3_00 = ++HWCAP_HAS_ISA_3_1 = ++HWCAP_HAS_MMA = ++HWCAP_HAS_VSX = ++INSTALL = /usr/bin/install -c ++INSTALL_DATA = ${INSTALL} -m 644 ++INSTALL_PROGRAM = ${INSTALL} ++INSTALL_SCRIPT = ${INSTALL} ++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s ++LDFLAGS = ++LDFLAGS_MPI = -fpic -shared ++LIBOBJS = ++LIBS = ++LIB_UBSAN = ++LN_S = ln -s ++LTLIBOBJS = ++LTO_AR = /usr/bin/ar ++LTO_CFLAGS = ++LTO_RANLIB = ranlib ++MAINT = # ++MAKEINFO = ${SHELL} '/home/zlh/valgrind-sw/valgrind-3.19.0/missing' makeinfo ++MKDIR_P = /usr/bin/mkdir -p ++MPI_CC = /usr/bin/mpicc ++OBJEXT = o ++PACKAGE = valgrind ++PACKAGE_BUGREPORT = valgrind-users@lists.sourceforge.net ++PACKAGE_NAME = Valgrind ++PACKAGE_STRING = Valgrind 3.19.0-sw1.0.0 ++PACKAGE_TARNAME = valgrind ++PACKAGE_URL = ++PACKAGE_VERSION = 3.19.0-sw1.0.0 ++PATH_SEPARATOR = : ++PERL = /usr/bin/perl ++PREFERRED_STACK_BOUNDARY_2 = ++RANLIB = ranlib ++SED = /usr/bin/sed ++SET_MAKE = ++SHELL = /bin/sh ++SOLARIS_UNDEF_LARGESOURCE = ++STRIP = ++VALT_LOAD_ADDRESS_PRI = 0x58000000 ++VALT_LOAD_ADDRESS_SEC = 0xUNSET ++VERSION = 3.19.0-sw1.0.0 ++VGCONF_ABI = ++VGCONF_ARCH_PRI = sw64 ++VGCONF_ARCH_SEC = ++VGCONF_OS = linux ++VGCONF_PLATFORM_PRI_CAPS = SW64_LINUX ++VGCONF_PLATFORM_SEC_CAPS = ++VGCONF_PLATVARIANT = vanilla ++VG_DATE = 11 Apr 2022 ++VG_TMPDIR = /tmp ++VG_VER_MAJOR = 3 ++VG_VER_MINOR = 19 ++XCODE_DIR = ++XCRUN = ++abs_builddir = /home/zlh/valgrind-sw/valgrind-3.19.0/none/tests/sw64-linux ++abs_srcdir = /home/zlh/valgrind-sw/valgrind-3.19.0/none/tests/sw64-linux ++abs_top_builddir = /home/zlh/valgrind-sw/valgrind-3.19.0 ++abs_top_srcdir = /home/zlh/valgrind-sw/valgrind-3.19.0 ++ac_ct_CC = gcc ++ac_ct_CXX = g++ ++am__include = include ++am__leading_dot = . ++am__quote = ++am__tar = $${TAR-tar} chof - "$$tardir" ++am__untar = $${TAR-tar} xf - ++bindir = ${exec_prefix}/bin ++build = sw_64-sunway-linux-gnu ++build_alias = ++build_cpu = sw_64 ++build_os = linux-gnu ++build_vendor = sunway ++builddir = . ++datadir = ${datarootdir} ++datarootdir = ${prefix}/share ++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} ++dvidir = ${docdir} ++exec_prefix = ${prefix} ++host = sw_64-sunway-linux-gnu ++host_alias = ++host_cpu = sw_64 ++host_os = linux-gnu ++host_vendor = sunway ++htmldir = ${docdir} ++includedir = ${prefix}/include ++infodir = ${datarootdir}/info ++install_sh = ${SHELL} /home/zlh/valgrind-sw/valgrind-3.19.0/install-sh ++libdir = ${exec_prefix}/lib ++libexecdir = ${exec_prefix}/libexec ++localedir = ${datarootdir}/locale ++localstatedir = ${prefix}/var ++mandir = ${datarootdir}/man ++mkdir_p = $(MKDIR_P) ++oldincludedir = /usr/include ++pdfdir = ${docdir} ++prefix = /usr/local ++program_transform_name = s,x,x, ++psdir = ${docdir} ++runstatedir = ${localstatedir}/run ++sbindir = ${exec_prefix}/sbin ++sharedstatedir = ${prefix}/com ++srcdir = . ++sysconfdir = ${prefix}/etc ++target_alias = ++top_build_prefix = ../../../ ++top_builddir = ../../.. ++top_srcdir = ../../.. ++inplacedir = $(top_builddir)/.in_place ++ ++#---------------------------------------------------------------------------- ++# Flags ++#---------------------------------------------------------------------------- ++ ++# Baseline flags for all compilations. Aim here is to maximise ++# performance and get whatever useful warnings we can out of gcc. ++# -fno-builtin is important for defeating LLVM's idiom recognition ++# that somehow causes VG_(memset) to get into infinite recursion. ++AM_CFLAGS_BASE = -O2 -g -Wall -Wmissing-prototypes -Wshadow \ ++ -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations \ ++ -Wcast-align -Wcast-qual -Wwrite-strings \ ++ -Wempty-body -Wformat -Wformat-signedness \ ++ -Wformat-security -Wignored-qualifiers \ ++ -Wmissing-parameter-type -Wlogical-op \ ++ -Wenum-conversion -Wimplicit-fallthrough=2 \ ++ -Wold-style-declaration -finline-functions \ ++ -fno-stack-protector \ ++ -fno-strict-aliasing -fno-builtin $(am__append_1) \ ++ $(am__append_2) ++#ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_ISA_3_00 ++ ++# Power ISA flag for use by guest_ppc_helpers.c ++##ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_DARN -DHAS_ISA_3_00 ++ISA_3_0_BUILD_FLAG = ++AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++ -fpic -fno-builtin -fno-ipa-icf ++ ++#AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++# -fpic -fPIC -fno-builtin ++ ++ ++# These flags are used for building the preload shared objects (PSOs). ++# The aim is to give reasonable performance but also to have good ++# stack traces, since users often see stack traces extending ++# into (and through) the preloads. Also, we must use any ++# -mpreferred-stack-boundary flag to build the preload shared ++# objects, since that risks misaligning the client's stack and ++# results in segfaults like (eg) #324050. ++#AM_CFLAGS_PSO_BASE = -dynamic \ ++# -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++# -fpic -fPIC -fno-builtin -fno-ipa-icf ++ ++ ++# Flags for specific targets. ++# ++# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. ++# For building the core, coregrind/Makefile.am files add some extra things. ++AM_CPPFLAGS_SW64_LINUX = -I$(top_srcdir) \ ++ -I$(top_srcdir)/include -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_sw64=1 -DVGO_linux=1 \ ++ -DVGP_sw64_linux=1 \ ++ -DVGPV_sw64_linux_vanilla=1 \ ++ $(am__append_3) ++#AM_CPPFLAGS_ = \ ++# -I$(top_srcdir) \ ++# -I$(top_srcdir)/include \ ++# -I$(top_builddir)/include \ ++# -I$(top_srcdir)/VEX/pub \ ++# -I$(top_builddir)/VEX/pub \ ++# -DVGA_=1 \ ++# -DVGO_linux=1 \ ++# -DVGP__linux=1 \ ++# -DVGPV__linux_vanilla=1 \ ++# $(am__append_4) ++AM_FLAG_M3264_X86_LINUX = ++AM_CFLAGS_X86_LINUX = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_LINUX = -g ++AM_FLAG_M3264_AMD64_LINUX = ++AM_CFLAGS_AMD64_LINUX = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_LINUX = -g ++AM_FLAG_M3264_PPC32_LINUX = ++AM_CFLAGS_PPC32_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC32_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC32_LINUX = -g ++AM_FLAG_M3264_PPC64BE_LINUX = ++AM_CFLAGS_PPC64BE_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64BE_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64BE_LINUX = -g ++AM_FLAG_M3264_PPC64LE_LINUX = ++AM_CFLAGS_PPC64LE_LINUX = $(AM_CFLAGS_BASE) $(ISA_3_0_BUILD_FLAG) ++AM_CFLAGS_PSO_PPC64LE_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64LE_LINUX = -g ++AM_FLAG_M3264_X86_FREEBSD = ++AM_CFLAGS_X86_FREEBSD = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_FREEBSD = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_FREEBSD = -g ++AM_FLAG_M3264_ARM_LINUX = ++AM_CFLAGS_ARM_LINUX = \ ++ $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 ++ ++AM_CFLAGS_PSO_ARM_LINUX = $(AM_CFLAGS_BASE) \ ++ -marm -mcpu=cortex-a8 $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_ARM_LINUX = \ ++ -marm -mcpu=cortex-a8 -g ++ ++AM_FLAG_M3264_ARM64_LINUX = ++AM_CFLAGS_ARM64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_ARM64_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_ARM64_LINUX = -g ++AM_FLAG_M3264_AMD64_FREEBSD = ++AM_CFLAGS_AMD64_FREEBSD = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_FREEBSD = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_FREEBSD = -g ++AM_FLAG_M3264_X86_DARWIN = -arch i386 ++AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 \ ++ -fno-pic -fno-PIC ++ ++AM_CFLAGS_PSO_X86_DARWIN = $(AM_CFLAGS_X86_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_DARWIN = -arch i386 -g ++AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 ++AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 ++ ++AM_CFLAGS_PSO_AMD64_DARWIN = $(AM_CFLAGS_AMD64_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_DARWIN = -arch x86_64 -g ++AM_FLAG_M3264_S390X_LINUX = ++AM_CFLAGS_S390X_LINUX = $(AM_CFLAGS_BASE) -fomit-frame-pointer ++AM_CFLAGS_PSO_S390X_LINUX = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_S390X_LINUX = -g -mzarch -march=z900 ++AM_FLAG_M3264_MIPS32_LINUX = ++AM_CFLAGS_MIPS32_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS32_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS32_LINUX = -g ++AM_FLAG_M3264_NANOMIPS_LINUX = ++AM_CFLAGS_NANOMIPS_LINUX = $(AM_CFLAGS_BASE) -mno-jump-table-opt ++AM_CFLAGS_PSO_NANOMIPS_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_NANOMIPS_LINUX = -g ++AM_FLAG_M3264_MIPS64_LINUX = ++AM_CFLAGS_MIPS64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS64_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS64_LINUX = -g ++AM_FLAG_M3264_SW64_LINUX = ++AM_CFLAGS_SW64_LINUX = $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_SW64_LINUX = $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_SW64_LINUX = -g ++AM_FLAG_M3264_X86_SOLARIS = ++AM_CFLAGS_X86_SOLARIS = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_SOLARIS = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_SOLARIS = -g -D_ASM ++AM_FLAG_M3264_AMD64_SOLARIS = ++AM_CFLAGS_AMD64_SOLARIS = \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_SOLARIS = $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_SOLARIS = -g -D_ASM ++ ++# Flags for the primary target. These must be used to build the ++# regtests and performance tests. In fact, these must be used to ++# build anything which is built only once on a dual-arch build. ++# ++AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_SW64_LINUX) ++AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_SW64_LINUX) ++AM_CFLAGS_PRI = $(AM_CFLAGS_SW64_LINUX) ++AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_SW64_LINUX) ++AM_FLAG_M3264_SEC = ++#AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_) ++ ++# Baseline link flags for making vgpreload shared objects. ++# ++PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_6) ++PRELOAD_LDFLAGS_COMMON_FREEBSD = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst ++PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load ++PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_5) ++PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_X86_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) ++PRELOAD_LDFLAGS_AMD64_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) ++PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 ++PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 ++PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_NANOMIPS_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_SW64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) ++PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) ++PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) ++AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_sw64=1 -DVGO_linux=1 \ ++ -DVGP_sw64_linux=1 \ ++ -DVGPV_sw64_linux_vanilla=1 \ ++ $(am__append_7) $(am__append_8) ++ ++# Nb: Tools need to augment these flags with an arch-selection option, such ++# as $(AM_FLAG_M3264_PRI). ++AM_CFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ -fno-stack-protector $(am__append_9) $(am__append_10) \ ++ $(am__empty) ++AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ -fno-stack-protector $(am__append_11) ++# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of ++# automake; see comments in Makefile.all.am for more detail. ++AM_CCASFLAGS = $(AM_CPPFLAGS) ++#noinst_DSYMS = $(check_PROGRAMS) ++dist_noinst_SCRIPTS = filter_stderr ++EXTRA_DIST = \ ++ getcontext.stderr.exp getcontext.stdout.exp getcontext.vgtest \ ++ gethostname.stderr.exp gethostname.vgtest \ ++ prctl.stderr.exp prctl.vgtest \ ++ readahead.stderr.exp readahead.vgtest \ ++ sigsuspend.stderr.exp sigsuspend.vgtest ++ ++all: all-am ++ ++.SUFFIXES: ++.SUFFIXES: .c .o .obj ++$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign none/tests/sw64-linux/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign none/tests/sw64-linux/Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ ++ esac; ++$(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__empty): ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: # $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): # $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++clean-checkPROGRAMS: ++ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) ++ ++getcontext$(EXEEXT): $(getcontext_OBJECTS) $(getcontext_DEPENDENCIES) $(EXTRA_getcontext_DEPENDENCIES) ++ @rm -f getcontext$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(getcontext_OBJECTS) $(getcontext_LDADD) $(LIBS) ++ ++gethostname$(EXEEXT): $(gethostname_OBJECTS) $(gethostname_DEPENDENCIES) $(EXTRA_gethostname_DEPENDENCIES) ++ @rm -f gethostname$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(gethostname_OBJECTS) $(gethostname_LDADD) $(LIBS) ++ ++prctl$(EXEEXT): $(prctl_OBJECTS) $(prctl_DEPENDENCIES) $(EXTRA_prctl_DEPENDENCIES) ++ @rm -f prctl$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(prctl_OBJECTS) $(prctl_LDADD) $(LIBS) ++ ++readahead$(EXEEXT): $(readahead_OBJECTS) $(readahead_DEPENDENCIES) $(EXTRA_readahead_DEPENDENCIES) ++ @rm -f readahead$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(readahead_OBJECTS) $(readahead_LDADD) $(LIBS) ++ ++sigsuspend$(EXEEXT): $(sigsuspend_OBJECTS) $(sigsuspend_DEPENDENCIES) $(EXTRA_sigsuspend_DEPENDENCIES) ++ @rm -f sigsuspend$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(sigsuspend_OBJECTS) $(sigsuspend_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++include ./$(DEPDIR)/getcontext.Po # am--include-marker ++include ./$(DEPDIR)/gethostname.Po # am--include-marker ++include ./$(DEPDIR)/prctl.Po # am--include-marker ++include ./$(DEPDIR)/readahead.Po # am--include-marker ++include ./$(DEPDIR)/sigsuspend.Po # am--include-marker ++ ++$(am__depfiles_remade): ++ @$(MKDIR_P) $(@D) ++ @echo '# dummy' >$@-t && $(am__mv) $@-t $@ ++ ++am--depfiles: $(am__depfiles_remade) ++ ++.c.o: ++ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ ++ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ ++ $(am__mv) $$depbase.Tpo $$depbase.Po ++# $(AM_V_CC)source='$<' object='$@' libtool=no \ ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ ++# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< ++ ++.c.obj: ++ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ ++ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ ++ $(am__mv) $$depbase.Tpo $$depbase.Po ++# $(AM_V_CC)source='$<' object='$@' libtool=no \ ++# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ ++# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-am ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-am ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-am ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++distdir: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) distdir-am ++ ++distdir-am: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) ++ $(MAKE) $(AM_MAKEFLAGS) check-local ++check: check-am ++all-am: Makefile $(SCRIPTS) ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-checkPROGRAMS clean-generic clean-local mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f ./$(DEPDIR)/getcontext.Po ++ -rm -f ./$(DEPDIR)/gethostname.Po ++ -rm -f ./$(DEPDIR)/prctl.Po ++ -rm -f ./$(DEPDIR)/readahead.Po ++ -rm -f ./$(DEPDIR)/sigsuspend.Po ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-tags ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f ./$(DEPDIR)/getcontext.Po ++ -rm -f ./$(DEPDIR)/gethostname.Po ++ -rm -f ./$(DEPDIR)/prctl.Po ++ -rm -f ./$(DEPDIR)/readahead.Po ++ -rm -f ./$(DEPDIR)/sigsuspend.Po ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: check-am install-am install-strip ++ ++.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am \ ++ check-local clean clean-checkPROGRAMS clean-generic \ ++ clean-local cscopelist-am ctags ctags-am distclean \ ++ distclean-compile distclean-generic distclean-tags distdir dvi \ ++ dvi-am html html-am info info-am install install-am \ ++ install-data install-data-am install-dvi install-dvi-am \ ++ install-exec install-exec-am install-html install-html-am \ ++ install-info install-info-am install-man install-pdf \ ++ install-pdf-am install-ps install-ps-am install-strip \ ++ installcheck installcheck-am installdirs maintainer-clean \ ++ maintainer-clean-generic mostlyclean mostlyclean-compile \ ++ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ ++ uninstall-am ++ ++.PRECIOUS: Makefile ++ ++ ++# This used to be required when Vex had a handwritten Makefile. It ++# shouldn't be needed any more, though. ++ ++#---------------------------------------------------------------------------- ++# noinst_PROGRAMS and noinst_DSYMS targets ++#---------------------------------------------------------------------------- ++ ++# On Darwin, for a program 'p', the DWARF debug info is stored in the ++# directory 'p.dSYM'. This must be generated after the executable is ++# created, with 'dsymutil p'. We could redefine LINK with a script that ++# executes 'dsymutil' after linking, but that's a pain. Instead we use this ++# hook so that every time "make check" is run, we subsequently invoke ++# 'dsymutil' on all the executables that lack a .dSYM directory, or that are ++# newer than their corresponding .dSYM directory. ++build-noinst_DSYMS: $(noinst_DSYMS) ++ for f in $(noinst_DSYMS); do \ ++ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ ++ echo "dsymutil $$f"; \ ++ dsymutil $$f; \ ++ fi; \ ++ done ++ ++# This is used by coregrind/Makefile.am and Makefile.tool.am for doing ++# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. ++# It needs to be depended on by an 'all-local' rule. ++inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_PROGRAMS) ; do \ ++ rm -f $(inplacedir)/$$f; \ ++ ln -f -s ../$(subdir)/$$f $(inplacedir); \ ++ done ++ ++# Similar to inplace-noinst_PROGRAMS ++inplace-noinst_DSYMS: build-noinst_DSYMS ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(inplacedir)/$$f.dSYM; \ ++ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make install". It copies $(noinst_PROGRAMS) into $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'install-exec-local' rule. ++install-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_PROGRAMS); do \ ++ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'uninstall-local' rule. ++uninstall-noinst_PROGRAMS: ++ for f in $(noinst_PROGRAMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f; \ ++ done ++ ++# Similar to install-noinst_PROGRAMS. ++# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with ++# directories. XXX: not sure whether the resulting permissions will be ++# correct when using 'cp -R'... ++install-noinst_DSYMS: build-noinst_DSYMS ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_DSYMS); do \ ++ cp -R $$f.dSYM $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# Similar to uninstall-noinst_PROGRAMS. ++uninstall-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f.dSYM; \ ++ done ++ ++# This needs to be depended on by a 'clean-local' rule. ++clean-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -rf $$f.dSYM; \ ++ done ++ ++check-local: build-noinst_DSYMS ++ ++clean-local: clean-noinst_DSYMS ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff --git a/none/tests/sw64-linux/Makefile.am b/none/tests/sw64-linux/Makefile.am +new file mode 100644 +index 000000000..c48d2ff23 +--- /dev/null ++++ b/none/tests/sw64-linux/Makefile.am +@@ -0,0 +1,22 @@ ++ ++include $(top_srcdir)/Makefile.tool-tests.am ++ ++dist_noinst_SCRIPTS = filter_stderr ++ ++EXTRA_DIST = \ ++ getcontext.stderr.exp getcontext.stdout.exp getcontext.vgtest \ ++ gethostname.stderr.exp gethostname.vgtest \ ++ prctl.stderr.exp prctl.vgtest \ ++ readahead.stderr.exp readahead.vgtest \ ++ sigsuspend.stderr.exp sigsuspend.vgtest ++ ++check_PROGRAMS = \ ++ getcontext \ ++ gethostname \ ++ prctl \ ++ readahead \ ++ sigsuspend ++ ++AM_CFLAGS += @FLAG_M64@ ++AM_CXXFLAGS += @FLAG_M64@ ++AM_CCASFLAGS += @FLAG_M64@ +diff --git a/none/tests/sw64-linux/Makefile.in b/none/tests/sw64-linux/Makefile.in +new file mode 100644 +index 000000000..dc4928e44 +--- /dev/null ++++ b/none/tests/sw64-linux/Makefile.in +@@ -0,0 +1,1041 @@ ++# Makefile.in generated by automake 1.16.5 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994-2021 Free Software Foundation, Inc. ++ ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++ ++# This file is used for tool tests, and also in perf/Makefile.am. ++ ++# This file should be included (directly or indirectly) by every ++# Makefile.am that builds programs. And also the top-level Makefile.am. ++ ++#---------------------------------------------------------------------------- ++# Global stuff ++#---------------------------------------------------------------------------- ++ ++VPATH = @srcdir@ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++am__make_running_with_option = \ ++ case $${target_option-} in \ ++ ?) ;; \ ++ *) echo "am__make_running_with_option: internal error: invalid" \ ++ "target option '$${target_option-}' specified" >&2; \ ++ exit 1;; \ ++ esac; \ ++ has_opt=no; \ ++ sane_makeflags=$$MAKEFLAGS; \ ++ if $(am__is_gnu_make); then \ ++ sane_makeflags=$$MFLAGS; \ ++ else \ ++ case $$MAKEFLAGS in \ ++ *\\[\ \ ]*) \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ ++ esac; \ ++ fi; \ ++ skip_next=no; \ ++ strip_trailopt () \ ++ { \ ++ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ ++ }; \ ++ for flg in $$sane_makeflags; do \ ++ test $$skip_next = yes && { skip_next=no; continue; }; \ ++ case $$flg in \ ++ *=*|--*) continue;; \ ++ -*I) strip_trailopt 'I'; skip_next=yes;; \ ++ -*I?*) strip_trailopt 'I';; \ ++ -*O) strip_trailopt 'O'; skip_next=yes;; \ ++ -*O?*) strip_trailopt 'O';; \ ++ -*l) strip_trailopt 'l'; skip_next=yes;; \ ++ -*l?*) strip_trailopt 'l';; \ ++ -[dEDm]) skip_next=yes;; \ ++ -[JT]) skip_next=yes;; \ ++ esac; \ ++ case $$flg in \ ++ *$$target_option*) has_opt=yes; break;; \ ++ esac; \ ++ done; \ ++ test $$has_opt = yes ++am__make_dryrun = (target_option=n; $(am__make_running_with_option)) ++am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++@COMPILER_IS_CLANG_TRUE@am__append_1 = -Wno-cast-align -Wno-self-assign \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-compare ++ ++@COMPILER_IS_CLANG_TRUE@@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@am__append_2 = @FLAG_W_NO_EXPANSION_TO_DEFINED@ ++@VGCONF_HAVE_ABI_TRUE@am__append_3 = -DVGABI_@VGCONF_ABI@ ++@VGCONF_HAVE_ABI_TRUE@@VGCONF_HAVE_PLATFORM_SEC_TRUE@am__append_4 = -DVGABI_@VGCONF_ABI@ ++@SOLARIS_XPG_SYMBOLS_PRESENT_TRUE@am__append_5 = -Wl,-M,$(top_srcdir)/solaris/vgpreload-solaris.mapfile ++ ++# The Android toolchain includes all kinds of stdlib helpers present in ++# bionic which is bad because we are not linking with it and the Android ++# linker will panic. ++@VGCONF_PLATVARIANT_IS_ANDROID_TRUE@am__append_6 = -nostdlib ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@am__append_7 = -DVGA_SEC_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_SEC_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 ++ ++@VGCONF_HAVE_ABI_TRUE@am__append_8 = -DVGABI_@VGCONF_ABI@ ++ ++# Make sure that all test programs have threaded errno. ++# Disable largefile support as there are test cases explicitly enabling it. ++@VGCONF_OS_IS_SOLARIS_TRUE@am__append_9 = -D_REENTRANT @SOLARIS_UNDEF_LARGESOURCE@ ++@COMPILER_IS_CLANG_TRUE@am__append_10 = -Wno-format-extra-args \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-literal-range \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-tautological-constant-out-of-range-compare \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-self-assign -Wno-string-plus-int \ ++@COMPILER_IS_CLANG_TRUE@ -Wno-uninitialized -Wno-unused-value # \ ++@COMPILER_IS_CLANG_TRUE@ clang 3.0.0 ++@COMPILER_IS_CLANG_TRUE@am__append_11 = -Wno-unused-private-field # drd/tests/tsan_unittest.cpp ++check_PROGRAMS = getcontext$(EXEEXT) gethostname$(EXEEXT) \ ++ prctl$(EXEEXT) readahead$(EXEEXT) sigsuspend$(EXEEXT) ++subdir = none/tests/sw64-linux ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(am__DIST_COMMON) ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++CONFIG_CLEAN_VPATH_FILES = ++getcontext_SOURCES = getcontext.c ++getcontext_OBJECTS = getcontext.$(OBJEXT) ++getcontext_LDADD = $(LDADD) ++gethostname_SOURCES = gethostname.c ++gethostname_OBJECTS = gethostname.$(OBJEXT) ++gethostname_LDADD = $(LDADD) ++prctl_SOURCES = prctl.c ++prctl_OBJECTS = prctl.$(OBJEXT) ++prctl_LDADD = $(LDADD) ++readahead_SOURCES = readahead.c ++readahead_OBJECTS = readahead.$(OBJEXT) ++readahead_LDADD = $(LDADD) ++sigsuspend_SOURCES = sigsuspend.c ++sigsuspend_OBJECTS = sigsuspend.$(OBJEXT) ++sigsuspend_LDADD = $(LDADD) ++SCRIPTS = $(dist_noinst_SCRIPTS) ++AM_V_P = $(am__v_P_@AM_V@) ++am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) ++am__v_P_0 = false ++am__v_P_1 = : ++AM_V_GEN = $(am__v_GEN_@AM_V@) ++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) ++am__v_GEN_0 = @echo " GEN " $@; ++am__v_GEN_1 = ++AM_V_at = $(am__v_at_@AM_V@) ++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) ++am__v_at_0 = @ ++am__v_at_1 = ++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__maybe_remake_depfiles = depfiles ++am__depfiles_remade = ./$(DEPDIR)/getcontext.Po \ ++ ./$(DEPDIR)/gethostname.Po ./$(DEPDIR)/prctl.Po \ ++ ./$(DEPDIR)/readahead.Po ./$(DEPDIR)/sigsuspend.Po ++am__mv = mv -f ++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ ++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++AM_V_CC = $(am__v_CC_@AM_V@) ++am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) ++am__v_CC_0 = @echo " CC " $@; ++am__v_CC_1 = ++CCLD = $(CC) ++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ ++AM_V_CCLD = $(am__v_CCLD_@AM_V@) ++am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) ++am__v_CCLD_0 = @echo " CCLD " $@; ++am__v_CCLD_1 = ++SOURCES = getcontext.c gethostname.c prctl.c readahead.c sigsuspend.c ++DIST_SOURCES = getcontext.c gethostname.c prctl.c readahead.c \ ++ sigsuspend.c ++am__can_run_installinfo = \ ++ case $$AM_UPDATE_INFO_DIR in \ ++ n|no|NO) false;; \ ++ *) (install-info --version) >/dev/null 2>&1;; \ ++ esac ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++# Read a list of newline-separated strings from the standard input, ++# and print each of them once, without duplicates. Input order is ++# *not* preserved. ++am__uniquify_input = $(AWK) '\ ++ BEGIN { nonempty = 0; } \ ++ { items[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in items) print i; }; } \ ++' ++# Make sure the list of sources is unique. This is necessary because, ++# e.g., the same source file might be shared among _SOURCES variables ++# for different programs/libraries. ++am__define_uniq_tagged_files = \ ++ list='$(am__tagged_files)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | $(am__uniquify_input)` ++am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/Makefile.all.am \ ++ $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/depcomp ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ++AR = @AR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ ++BOOST_CFLAGS = @BOOST_CFLAGS@ ++BOOST_LIBS = @BOOST_LIBS@ ++CC = @CC@ ++CCAS = @CCAS@ ++CCASDEPMODE = @CCASDEPMODE@ ++CCASFLAGS = @CCASFLAGS@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ ++CFLAGS_MPI = @CFLAGS_MPI@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CSCOPE = @CSCOPE@ ++CTAGS = @CTAGS@ ++CXX = @CXX@ ++CXXDEPMODE = @CXXDEPMODE@ ++CXXFLAGS = @CXXFLAGS@ ++CYGPATH_W = @CYGPATH_W@ ++DEFAULT_SUPP = @DEFAULT_SUPP@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++DIFF = @DIFF@ ++DIS_PATH = @DIS_PATH@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++ETAGS = @ETAGS@ ++EXEEXT = @EXEEXT@ ++FLAG_FALIGNED_NEW = @FLAG_FALIGNED_NEW@ ++FLAG_FINLINE_FUNCTIONS = @FLAG_FINLINE_FUNCTIONS@ ++FLAG_FNO_IPA_ICF = @FLAG_FNO_IPA_ICF@ ++FLAG_FNO_STACK_PROTECTOR = @FLAG_FNO_STACK_PROTECTOR@ ++FLAG_FSANITIZE = @FLAG_FSANITIZE@ ++FLAG_FSIZED_DEALLOCATION = @FLAG_FSIZED_DEALLOCATION@ ++FLAG_M32 = @FLAG_M32@ ++FLAG_M64 = @FLAG_M64@ ++FLAG_MLONG_DOUBLE_128 = @FLAG_MLONG_DOUBLE_128@ ++FLAG_MMMX = @FLAG_MMMX@ ++FLAG_MSA = @FLAG_MSA@ ++FLAG_MSSE = @FLAG_MSSE@ ++FLAG_NO_BUILD_ID = @FLAG_NO_BUILD_ID@ ++FLAG_NO_PIE = @FLAG_NO_PIE@ ++FLAG_OCTEON = @FLAG_OCTEON@ ++FLAG_OCTEON2 = @FLAG_OCTEON2@ ++FLAG_PIE = @FLAG_PIE@ ++FLAG_T_TEXT = @FLAG_T_TEXT@ ++FLAG_UNLIMITED_INLINE_UNIT_GROWTH = @FLAG_UNLIMITED_INLINE_UNIT_GROWTH@ ++FLAG_W_CAST_ALIGN = @FLAG_W_CAST_ALIGN@ ++FLAG_W_CAST_QUAL = @FLAG_W_CAST_QUAL@ ++FLAG_W_EMPTY_BODY = @FLAG_W_EMPTY_BODY@ ++FLAG_W_ENUM_CONVERSION = @FLAG_W_ENUM_CONVERSION@ ++FLAG_W_EXTRA = @FLAG_W_EXTRA@ ++FLAG_W_FORMAT = @FLAG_W_FORMAT@ ++FLAG_W_FORMAT_SECURITY = @FLAG_W_FORMAT_SECURITY@ ++FLAG_W_FORMAT_SIGNEDNESS = @FLAG_W_FORMAT_SIGNEDNESS@ ++FLAG_W_IGNORED_QUALIFIERS = @FLAG_W_IGNORED_QUALIFIERS@ ++FLAG_W_IMPLICIT_FALLTHROUGH = @FLAG_W_IMPLICIT_FALLTHROUGH@ ++FLAG_W_LOGICAL_OP = @FLAG_W_LOGICAL_OP@ ++FLAG_W_MISSING_PARAMETER_TYPE = @FLAG_W_MISSING_PARAMETER_TYPE@ ++FLAG_W_NO_EXPANSION_TO_DEFINED = @FLAG_W_NO_EXPANSION_TO_DEFINED@ ++FLAG_W_NO_INFINITE_RECURSION = @FLAG_W_NO_INFINITE_RECURSION@ ++FLAG_W_NO_MEMSET_TRANSPOSED_ARGS = @FLAG_W_NO_MEMSET_TRANSPOSED_ARGS@ ++FLAG_W_NO_MISMATCHED_NEW_DELETE = @FLAG_W_NO_MISMATCHED_NEW_DELETE@ ++FLAG_W_NO_NONNULL = @FLAG_W_NO_NONNULL@ ++FLAG_W_NO_OVERFLOW = @FLAG_W_NO_OVERFLOW@ ++FLAG_W_NO_POINTER_SIGN = @FLAG_W_NO_POINTER_SIGN@ ++FLAG_W_NO_STATIC_LOCAL_IN_INLINE = @FLAG_W_NO_STATIC_LOCAL_IN_INLINE@ ++FLAG_W_NO_UNINITIALIZED = @FLAG_W_NO_UNINITIALIZED@ ++FLAG_W_NO_UNUSED_FUNCTION = @FLAG_W_NO_UNUSED_FUNCTION@ ++FLAG_W_OLD_STYLE_DECLARATION = @FLAG_W_OLD_STYLE_DECLARATION@ ++FLAG_W_WRITE_STRINGS = @FLAG_W_WRITE_STRINGS@ ++GDB = @GDB@ ++GLIBC_LIBC_PATH = @GLIBC_LIBC_PATH@ ++GLIBC_LIBPTHREAD_PATH = @GLIBC_LIBPTHREAD_PATH@ ++GLIBC_VERSION = @GLIBC_VERSION@ ++GREP = @GREP@ ++HWCAP_HAS_ALTIVEC = @HWCAP_HAS_ALTIVEC@ ++HWCAP_HAS_DFP = @HWCAP_HAS_DFP@ ++HWCAP_HAS_HTM = @HWCAP_HAS_HTM@ ++HWCAP_HAS_ISA_2_05 = @HWCAP_HAS_ISA_2_05@ ++HWCAP_HAS_ISA_2_06 = @HWCAP_HAS_ISA_2_06@ ++HWCAP_HAS_ISA_2_07 = @HWCAP_HAS_ISA_2_07@ ++HWCAP_HAS_ISA_3_00 = @HWCAP_HAS_ISA_3_00@ ++HWCAP_HAS_ISA_3_1 = @HWCAP_HAS_ISA_3_1@ ++HWCAP_HAS_MMA = @HWCAP_HAS_MMA@ ++HWCAP_HAS_VSX = @HWCAP_HAS_VSX@ ++INSTALL = @INSTALL@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++LDFLAGS = @LDFLAGS@ ++LDFLAGS_MPI = @LDFLAGS_MPI@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LIB_UBSAN = @LIB_UBSAN@ ++LN_S = @LN_S@ ++LTLIBOBJS = @LTLIBOBJS@ ++LTO_AR = @LTO_AR@ ++LTO_CFLAGS = @LTO_CFLAGS@ ++LTO_RANLIB = @LTO_RANLIB@ ++MAINT = @MAINT@ ++MAKEINFO = @MAKEINFO@ ++MKDIR_P = @MKDIR_P@ ++MPI_CC = @MPI_CC@ ++OBJEXT = @OBJEXT@ ++PACKAGE = @PACKAGE@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_URL = @PACKAGE_URL@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ ++PERL = @PERL@ ++PREFERRED_STACK_BOUNDARY_2 = @PREFERRED_STACK_BOUNDARY_2@ ++RANLIB = @RANLIB@ ++SED = @SED@ ++SET_MAKE = @SET_MAKE@ ++SHELL = @SHELL@ ++SOLARIS_UNDEF_LARGESOURCE = @SOLARIS_UNDEF_LARGESOURCE@ ++STRIP = @STRIP@ ++VALT_LOAD_ADDRESS_PRI = @VALT_LOAD_ADDRESS_PRI@ ++VALT_LOAD_ADDRESS_SEC = @VALT_LOAD_ADDRESS_SEC@ ++VERSION = @VERSION@ ++VGCONF_ABI = @VGCONF_ABI@ ++VGCONF_ARCH_PRI = @VGCONF_ARCH_PRI@ ++VGCONF_ARCH_SEC = @VGCONF_ARCH_SEC@ ++VGCONF_OS = @VGCONF_OS@ ++VGCONF_PLATFORM_PRI_CAPS = @VGCONF_PLATFORM_PRI_CAPS@ ++VGCONF_PLATFORM_SEC_CAPS = @VGCONF_PLATFORM_SEC_CAPS@ ++VGCONF_PLATVARIANT = @VGCONF_PLATVARIANT@ ++VG_DATE = @VG_DATE@ ++VG_TMPDIR = @VG_TMPDIR@ ++VG_VER_MAJOR = @VG_VER_MAJOR@ ++VG_VER_MINOR = @VG_VER_MINOR@ ++XCODE_DIR = @XCODE_DIR@ ++XCRUN = @XCRUN@ ++abs_builddir = @abs_builddir@ ++abs_srcdir = @abs_srcdir@ ++abs_top_builddir = @abs_top_builddir@ ++abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_CXX = @ac_ct_CXX@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++am__tar = @am__tar@ ++am__untar = @am__untar@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++builddir = @builddir@ ++datadir = @datadir@ ++datarootdir = @datarootdir@ ++docdir = @docdir@ ++dvidir = @dvidir@ ++exec_prefix = @exec_prefix@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++htmldir = @htmldir@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localedir = @localedir@ ++localstatedir = @localstatedir@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++pdfdir = @pdfdir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++psdir = @psdir@ ++runstatedir = @runstatedir@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++srcdir = @srcdir@ ++sysconfdir = @sysconfdir@ ++target_alias = @target_alias@ ++top_build_prefix = @top_build_prefix@ ++top_builddir = @top_builddir@ ++top_srcdir = @top_srcdir@ ++inplacedir = $(top_builddir)/.in_place ++ ++#---------------------------------------------------------------------------- ++# Flags ++#---------------------------------------------------------------------------- ++ ++# Baseline flags for all compilations. Aim here is to maximise ++# performance and get whatever useful warnings we can out of gcc. ++# -fno-builtin is important for defeating LLVM's idiom recognition ++# that somehow causes VG_(memset) to get into infinite recursion. ++AM_CFLAGS_BASE = -O2 -g -Wall -Wmissing-prototypes -Wshadow \ ++ -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations \ ++ @FLAG_W_CAST_ALIGN@ @FLAG_W_CAST_QUAL@ @FLAG_W_WRITE_STRINGS@ \ ++ @FLAG_W_EMPTY_BODY@ @FLAG_W_FORMAT@ @FLAG_W_FORMAT_SIGNEDNESS@ \ ++ @FLAG_W_FORMAT_SECURITY@ @FLAG_W_IGNORED_QUALIFIERS@ \ ++ @FLAG_W_MISSING_PARAMETER_TYPE@ @FLAG_W_LOGICAL_OP@ \ ++ @FLAG_W_ENUM_CONVERSION@ @FLAG_W_IMPLICIT_FALLTHROUGH@ \ ++ @FLAG_W_OLD_STYLE_DECLARATION@ @FLAG_FINLINE_FUNCTIONS@ \ ++ @FLAG_FNO_STACK_PROTECTOR@ @FLAG_FSANITIZE@ \ ++ -fno-strict-aliasing -fno-builtin $(am__append_1) \ ++ $(am__append_2) ++@HAS_DARN_FALSE@@HAS_XSCVHPDP_TRUE@ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_ISA_3_00 ++ ++# Power ISA flag for use by guest_ppc_helpers.c ++@HAS_DARN_TRUE@@HAS_XSCVHPDP_TRUE@ISA_3_0_BUILD_FLAG = -DHAS_XSCVHPDP -DHAS_DARN -DHAS_ISA_3_00 ++@HAS_XSCVHPDP_FALSE@ISA_3_0_BUILD_FLAG = ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_FALSE@AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_FALSE@ -fpic -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_FALSE@@VGCONF_OS_IS_FREEBSD_TRUE@ -fpic -fPIC -fno-builtin ++ ++ ++# These flags are used for building the preload shared objects (PSOs). ++# The aim is to give reasonable performance but also to have good ++# stack traces, since users often see stack traces extending ++# into (and through) the preloads. Also, we must use any ++# -mpreferred-stack-boundary flag to build the preload shared ++# objects, since that risks misaligning the client's stack and ++# results in segfaults like (eg) #324050. ++@VGCONF_OS_IS_DARWIN_TRUE@AM_CFLAGS_PSO_BASE = -dynamic \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -O -g -fno-omit-frame-pointer -fno-strict-aliasing \ ++@VGCONF_OS_IS_DARWIN_TRUE@ -fpic -fPIC -fno-builtin @FLAG_FNO_IPA_ICF@ ++ ++ ++# Flags for specific targets. ++# ++# Nb: the AM_CPPFLAGS_* values are suitable for building tools and auxprogs. ++# For building the core, coregrind/Makefile.am files add some extra things. ++AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@ = -I$(top_srcdir) \ ++ -I$(top_srcdir)/include -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++ $(am__append_3) ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_CPPFLAGS_@VGCONF_PLATFORM_SEC_CAPS@ = \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir) \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/include \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_builddir)/include \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_srcdir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -I$(top_builddir)/VEX/pub \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGA_@VGCONF_ARCH_SEC@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGO_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGP_@VGCONF_ARCH_SEC@_@VGCONF_OS@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ -DVGPV_@VGCONF_ARCH_SEC@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@ $(am__append_4) ++AM_FLAG_M3264_X86_LINUX = @FLAG_M32@ ++AM_CFLAGS_X86_LINUX = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_AMD64_LINUX = @FLAG_M64@ ++AM_CFLAGS_AMD64_LINUX = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC32_LINUX = @FLAG_M32@ ++AM_CFLAGS_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC32_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_PPC64BE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_PPC64BE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64BE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_PPC64LE_LINUX = @FLAG_M64@ ++AM_CFLAGS_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(ISA_3_0_BUILD_FLAG) ++AM_CFLAGS_PSO_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_PPC64LE_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_FREEBSD = @FLAG_M32@ ++AM_CFLAGS_X86_FREEBSD = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_X86_FREEBSD = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_FREEBSD = @FLAG_M32@ -g ++AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@ ++AM_CFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ $(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8 ++ ++AM_CFLAGS_PSO_ARM_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ -marm -mcpu=cortex-a8 $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_ARM_LINUX = @FLAG_M32@ \ ++ -marm -mcpu=cortex-a8 -g ++ ++AM_FLAG_M3264_ARM64_LINUX = @FLAG_M64@ ++AM_CFLAGS_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_ARM64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_AMD64_FREEBSD = @FLAG_M64@ ++AM_CFLAGS_AMD64_FREEBSD = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_FREEBSD = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_FREEBSD = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_DARWIN = -arch i386 ++AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 \ ++ -fno-pic -fno-PIC ++ ++AM_CFLAGS_PSO_X86_DARWIN = $(AM_CFLAGS_X86_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_DARWIN = -arch i386 -g ++AM_FLAG_M3264_AMD64_DARWIN = -arch x86_64 ++AM_CFLAGS_AMD64_DARWIN = $(WERROR) -arch x86_64 $(AM_CFLAGS_BASE) \ ++ -mmacosx-version-min=10.6 ++ ++AM_CFLAGS_PSO_AMD64_DARWIN = $(AM_CFLAGS_AMD64_DARWIN) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_DARWIN = -arch x86_64 -g ++AM_FLAG_M3264_S390X_LINUX = @FLAG_M64@ ++AM_CFLAGS_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++AM_CFLAGS_PSO_S390X_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_S390X_LINUX = @FLAG_M64@ -g -mzarch -march=z900 ++AM_FLAG_M3264_MIPS32_LINUX = @FLAG_M32@ ++AM_CFLAGS_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS32_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS32_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_NANOMIPS_LINUX = @FLAG_M32@ ++AM_CFLAGS_NANOMIPS_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) -mno-jump-table-opt ++AM_CFLAGS_PSO_NANOMIPS_LINUX = @FLAG_M32@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_NANOMIPS_LINUX = @FLAG_M32@ -g ++AM_FLAG_M3264_MIPS64_LINUX = @FLAG_M64@ ++AM_CFLAGS_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_MIPS64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_MIPS64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_SW64_LINUX = @FLAG_M64@ ++AM_CFLAGS_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) ++AM_CFLAGS_PSO_SW64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) \ ++ $(AM_CFLAGS_PSO_BASE) ++ ++AM_CCASFLAGS_SW64_LINUX = @FLAG_M64@ -g ++AM_FLAG_M3264_X86_SOLARIS = @FLAG_M32@ ++AM_CFLAGS_X86_SOLARIS = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer @SOLARIS_UNDEF_LARGESOURCE@ ++ ++AM_CFLAGS_PSO_X86_SOLARIS = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_X86_SOLARIS = @FLAG_M32@ -g -D_ASM ++AM_FLAG_M3264_AMD64_SOLARIS = @FLAG_M64@ ++AM_CFLAGS_AMD64_SOLARIS = @FLAG_M64@ \ ++ $(AM_CFLAGS_BASE) -fomit-frame-pointer ++ ++AM_CFLAGS_PSO_AMD64_SOLARIS = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE) ++AM_CCASFLAGS_AMD64_SOLARIS = @FLAG_M64@ -g -D_ASM ++ ++# Flags for the primary target. These must be used to build the ++# regtests and performance tests. In fact, these must be used to ++# build anything which is built only once on a dual-arch build. ++# ++AM_FLAG_M3264_PRI = $(AM_FLAG_M3264_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CPPFLAGS_PRI = $(AM_CPPFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CFLAGS_PRI = $(AM_CFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++AM_CCASFLAGS_PRI = $(AM_CCASFLAGS_@VGCONF_PLATFORM_PRI_CAPS@) ++@VGCONF_HAVE_PLATFORM_SEC_FALSE@AM_FLAG_M3264_SEC = ++@VGCONF_HAVE_PLATFORM_SEC_TRUE@AM_FLAG_M3264_SEC = $(AM_FLAG_M3264_@VGCONF_PLATFORM_SEC_CAPS@) ++ ++# Baseline link flags for making vgpreload shared objects. ++# ++PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_6) ++PRELOAD_LDFLAGS_COMMON_FREEBSD = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst ++PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load ++PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared \ ++ -Wl,-z,interpose,-z,initfirst $(am__append_5) ++PRELOAD_LDFLAGS_X86_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_PPC64BE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386 ++PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64 ++PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_MIPS32_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_NANOMIPS_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@ ++PRELOAD_LDFLAGS_MIPS64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_SW64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@ ++PRELOAD_LDFLAGS_X86_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M32@ ++PRELOAD_LDFLAGS_AMD64_SOLARIS = $(PRELOAD_LDFLAGS_COMMON_SOLARIS) @FLAG_M64@ ++AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/include \ ++ -I$(top_srcdir)/coregrind -I$(top_builddir)/include \ ++ -I$(top_srcdir)/VEX/pub -I$(top_builddir)/VEX/pub \ ++ -DVGA_@VGCONF_ARCH_PRI@=1 -DVGO_@VGCONF_OS@=1 \ ++ -DVGP_@VGCONF_ARCH_PRI@_@VGCONF_OS@=1 \ ++ -DVGPV_@VGCONF_ARCH_PRI@_@VGCONF_OS@_@VGCONF_PLATVARIANT@=1 \ ++ $(am__append_7) $(am__append_8) ++ ++# Nb: Tools need to augment these flags with an arch-selection option, such ++# as $(AM_FLAG_M3264_PRI). ++AM_CFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_9) $(am__append_10) \ ++ @FLAG_M64@ $(am__empty) ++AM_CXXFLAGS = -Winline -Wall -Wshadow -Wno-long-long -g \ ++ @FLAG_FNO_STACK_PROTECTOR@ $(am__append_11) @FLAG_M64@ ++# Include AM_CPPFLAGS in AM_CCASFLAGS to allow for older versions of ++# automake; see comments in Makefile.all.am for more detail. ++AM_CCASFLAGS = $(AM_CPPFLAGS) @FLAG_M64@ ++@VGCONF_OS_IS_DARWIN_TRUE@noinst_DSYMS = $(check_PROGRAMS) ++dist_noinst_SCRIPTS = filter_stderr ++EXTRA_DIST = \ ++ getcontext.stderr.exp getcontext.stdout.exp getcontext.vgtest \ ++ gethostname.stderr.exp gethostname.vgtest \ ++ prctl.stderr.exp prctl.vgtest \ ++ readahead.stderr.exp readahead.vgtest \ ++ sigsuspend.stderr.exp sigsuspend.vgtest ++ ++all: all-am ++ ++.SUFFIXES: ++.SUFFIXES: .c .o .obj ++$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ ++ && { if test -f $@; then exit 0; else break; fi; }; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign none/tests/sw64-linux/Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign none/tests/sw64-linux/Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ ++ esac; ++$(top_srcdir)/Makefile.tool-tests.am $(top_srcdir)/Makefile.all.am $(am__empty): ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++ ++$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(am__aclocal_m4_deps): ++ ++clean-checkPROGRAMS: ++ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) ++ ++getcontext$(EXEEXT): $(getcontext_OBJECTS) $(getcontext_DEPENDENCIES) $(EXTRA_getcontext_DEPENDENCIES) ++ @rm -f getcontext$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(getcontext_OBJECTS) $(getcontext_LDADD) $(LIBS) ++ ++gethostname$(EXEEXT): $(gethostname_OBJECTS) $(gethostname_DEPENDENCIES) $(EXTRA_gethostname_DEPENDENCIES) ++ @rm -f gethostname$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(gethostname_OBJECTS) $(gethostname_LDADD) $(LIBS) ++ ++prctl$(EXEEXT): $(prctl_OBJECTS) $(prctl_DEPENDENCIES) $(EXTRA_prctl_DEPENDENCIES) ++ @rm -f prctl$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(prctl_OBJECTS) $(prctl_LDADD) $(LIBS) ++ ++readahead$(EXEEXT): $(readahead_OBJECTS) $(readahead_DEPENDENCIES) $(EXTRA_readahead_DEPENDENCIES) ++ @rm -f readahead$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(readahead_OBJECTS) $(readahead_LDADD) $(LIBS) ++ ++sigsuspend$(EXEEXT): $(sigsuspend_OBJECTS) $(sigsuspend_DEPENDENCIES) $(EXTRA_sigsuspend_DEPENDENCIES) ++ @rm -f sigsuspend$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(sigsuspend_OBJECTS) $(sigsuspend_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcontext.Po@am__quote@ # am--include-marker ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gethostname.Po@am__quote@ # am--include-marker ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl.Po@am__quote@ # am--include-marker ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readahead.Po@am__quote@ # am--include-marker ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigsuspend.Po@am__quote@ # am--include-marker ++ ++$(am__depfiles_remade): ++ @$(MKDIR_P) $(@D) ++ @echo '# dummy' >$@-t && $(am__mv) $@-t $@ ++ ++am--depfiles: $(am__depfiles_remade) ++ ++.c.o: ++@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ ++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ ++@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< ++ ++.c.obj: ++@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ ++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ ++@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++ID: $(am__tagged_files) ++ $(am__define_uniq_tagged_files); mkid -fID $$unique ++tags: tags-am ++TAGS: tags ++ ++tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ set x; \ ++ here=`pwd`; \ ++ $(am__define_uniq_tagged_files); \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: ctags-am ++ ++CTAGS: ctags ++ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) ++ $(am__define_uniq_tagged_files); \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-am ++ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ ++ case "$(srcdir)" in \ ++ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ ++ *) sdir=$(subdir)/$(srcdir) ;; \ ++ esac; \ ++ for i in $$list; do \ ++ if test -f "$$i"; then \ ++ echo "$(subdir)/$$i"; \ ++ else \ ++ echo "$$sdir/$$i"; \ ++ fi; \ ++ done >> $(top_builddir)/cscope.files ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++distdir: $(BUILT_SOURCES) ++ $(MAKE) $(AM_MAKEFLAGS) distdir-am ++ ++distdir-am: $(DISTFILES) ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++check-am: all-am ++ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) ++ $(MAKE) $(AM_MAKEFLAGS) check-local ++check: check-am ++all-am: Makefile $(SCRIPTS) ++installdirs: ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ if test -z '$(STRIP)'; then \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ install; \ ++ else \ ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ ++ fi ++mostlyclean-generic: ++ ++clean-generic: ++ ++distclean-generic: ++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) ++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-checkPROGRAMS clean-generic clean-local mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f ./$(DEPDIR)/getcontext.Po ++ -rm -f ./$(DEPDIR)/gethostname.Po ++ -rm -f ./$(DEPDIR)/prctl.Po ++ -rm -f ./$(DEPDIR)/readahead.Po ++ -rm -f ./$(DEPDIR)/sigsuspend.Po ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-tags ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f ./$(DEPDIR)/getcontext.Po ++ -rm -f ./$(DEPDIR)/gethostname.Po ++ -rm -f ./$(DEPDIR)/prctl.Po ++ -rm -f ./$(DEPDIR)/readahead.Po ++ -rm -f ./$(DEPDIR)/sigsuspend.Po ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: ++ ++.MAKE: check-am install-am install-strip ++ ++.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am \ ++ check-local clean clean-checkPROGRAMS clean-generic \ ++ clean-local cscopelist-am ctags ctags-am distclean \ ++ distclean-compile distclean-generic distclean-tags distdir dvi \ ++ dvi-am html html-am info info-am install install-am \ ++ install-data install-data-am install-dvi install-dvi-am \ ++ install-exec install-exec-am install-html install-html-am \ ++ install-info install-info-am install-man install-pdf \ ++ install-pdf-am install-ps install-ps-am install-strip \ ++ installcheck installcheck-am installdirs maintainer-clean \ ++ maintainer-clean-generic mostlyclean mostlyclean-compile \ ++ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ ++ uninstall-am ++ ++.PRECIOUS: Makefile ++ ++ ++# This used to be required when Vex had a handwritten Makefile. It ++# shouldn't be needed any more, though. ++ ++#---------------------------------------------------------------------------- ++# noinst_PROGRAMS and noinst_DSYMS targets ++#---------------------------------------------------------------------------- ++ ++# On Darwin, for a program 'p', the DWARF debug info is stored in the ++# directory 'p.dSYM'. This must be generated after the executable is ++# created, with 'dsymutil p'. We could redefine LINK with a script that ++# executes 'dsymutil' after linking, but that's a pain. Instead we use this ++# hook so that every time "make check" is run, we subsequently invoke ++# 'dsymutil' on all the executables that lack a .dSYM directory, or that are ++# newer than their corresponding .dSYM directory. ++build-noinst_DSYMS: $(noinst_DSYMS) ++ for f in $(noinst_DSYMS); do \ ++ if [ ! -e $$f.dSYM -o $$f -nt $$f.dSYM ] ; then \ ++ echo "dsymutil $$f"; \ ++ dsymutil $$f; \ ++ fi; \ ++ done ++ ++# This is used by coregrind/Makefile.am and Makefile.tool.am for doing ++# "in-place" installs. It copies $(noinst_PROGRAMS) into $inplacedir. ++# It needs to be depended on by an 'all-local' rule. ++inplace-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_PROGRAMS) ; do \ ++ rm -f $(inplacedir)/$$f; \ ++ ln -f -s ../$(subdir)/$$f $(inplacedir); \ ++ done ++ ++# Similar to inplace-noinst_PROGRAMS ++inplace-noinst_DSYMS: build-noinst_DSYMS ++ mkdir -p $(inplacedir); \ ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(inplacedir)/$$f.dSYM; \ ++ ln -f -s ../$(subdir)/$$f.dSYM $(inplacedir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make install". It copies $(noinst_PROGRAMS) into $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'install-exec-local' rule. ++install-noinst_PROGRAMS: $(noinst_PROGRAMS) ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_PROGRAMS); do \ ++ $(INSTALL_PROGRAM) $$f $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# This is used by coregrind/Makefile.am and by /Makefile.am for doing ++# "make uninstall". It removes $(noinst_PROGRAMS) from $prefix/libexec/valgrind/. ++# It needs to be depended on by an 'uninstall-local' rule. ++uninstall-noinst_PROGRAMS: ++ for f in $(noinst_PROGRAMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f; \ ++ done ++ ++# Similar to install-noinst_PROGRAMS. ++# Nb: we don't use $(INSTALL_PROGRAM) here because it doesn't work with ++# directories. XXX: not sure whether the resulting permissions will be ++# correct when using 'cp -R'... ++install-noinst_DSYMS: build-noinst_DSYMS ++ $(mkinstalldirs) $(DESTDIR)$(pkglibexecdir); \ ++ for f in $(noinst_DSYMS); do \ ++ cp -R $$f.dSYM $(DESTDIR)$(pkglibexecdir); \ ++ done ++ ++# Similar to uninstall-noinst_PROGRAMS. ++uninstall-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -f $(DESTDIR)$(pkglibexecdir)/$$f.dSYM; \ ++ done ++ ++# This needs to be depended on by a 'clean-local' rule. ++clean-noinst_DSYMS: ++ for f in $(noinst_DSYMS); do \ ++ rm -rf $$f.dSYM; \ ++ done ++ ++check-local: build-noinst_DSYMS ++ ++clean-local: clean-noinst_DSYMS ++ ++# Tell versions [3.59,3.63) of GNU make to not export all variables. ++# Otherwise a system limit (for SysV at least) may be exceeded. ++.NOEXPORT: +diff --git a/none/tests/sw64-linux/filter_stderr b/none/tests/sw64-linux/filter_stderr +new file mode 100755 +index 000000000..616ce05e1 +--- /dev/null ++++ b/none/tests/sw64-linux/filter_stderr +@@ -0,0 +1,4 @@ ++#! /bin/sh ++ ++../filter_stderr ++ +diff --git a/none/tests/sw64-linux/getcontext b/none/tests/sw64-linux/getcontext +new file mode 100755 +index 0000000000000000000000000000000000000000..6c3416814314844fbb1db29928a0811bfac728cf +GIT binary patch +literal 14840 +zcmeHOeQaCR6~E8Uvz^9CoCZotzg|aSVIp=?Do9~1`Dkd;hBhr_>Q>;zv0q}Vj&1qb +zZNrBeO-MtP`1+?STQ|D>v1!^EonTwF(ZSfHjY%6!L*ioybz*3+{Zl3lN(1$N=e~QM +z?H314nzVoB6ZxHcKJU5b-sgAx?#?qFv6e3D-uj+59ygaYQ$C&3KmPt>=GRdAyI$Jst +zwR6#p&Ui0_Uz*$PyY3J>Klt(SG4uJk`R;EWd-v(Cuiv+DB17>~-{gmM2uPpPPMGGG +z&#VTqbG1FctmG +zW5U8gg)`}@`;w9UiUtvb0N#C?yf +zL^~u-LU*D4!}1fIm&)bNPw@E|p9Oq476+f|^og_O)vE8^!E-ysGBMfFzHUGh=EddT +z8`-fZxN*n`-7;l>e+nNV)?DhHk31X^TaR^#yD#1zED!I)=Z@gHVIkgnisBbC{sVN^ +z`b^09L*qRCwX+N7%Wol+H3)6X$289KMxcGSYwUpk7s!9V +z$A8xn{)LJ+B(^>&#FkIU@8tZo^Y|)~agM^zi)AOqR~|o$*lxK1`6-GOHV=8@Jq;b| +ze*ktbl^5DMH$0w4AwT`mTQpY8|0VQ!>7yQFCnk{XEfyC{&J*Be-rdcmQb>;Dp?m~L2(Z2Wy{BQ9r=Y5)K__UK*sTs +zoD0PF&_uwQ4_Z$&A1_1CS;x-$rExjAsH|Ju_=$rz8CU0*RedXTUu)zJ*3#4QbOv7^ +zLR;m(nZD!c9@~$_On3XcSUqG67yHe_H +zfQa-SfWK!+Z@BH{@X*(Or#t%|R#XqKN> +z^s`E?-2KncE0wrqpRXzUO%MN^qUY7TbAYFHC-0LAYjOvJrP%Ww9=^%w#?J4xMqh9A +zdTeq!b1C;Jkc91n8?@`=eeU^#{mKu`w^xT{jO*#}x;v%ft*66lalcxV^>jY3WQ^JPN`2l>0K0Q+xRnl$#_gq)j7V^8UJa2}9pH2z-CMVl$9G +z6nqEzO(DHW$A+`;YoVJ#`+dO^gqnhXC!__oNTyErfj^|b3ls>=5upXPK@^<#>&;&U +z9r`{g1}~?!5Y5!Zckx+9jdtOSAx?kDKM%@BXDXV4mytNwrC-^69*xk4FxOYN44^GS +zYoMX8X&$0>h`u89wc#G1i17WCsCD{tKrIjIft#Dd&<$M!GO(pB10+Jv!Bt?ZBtoH2 +zh`2=(ktWh44~$8w +zR}a&A4eXFqzaGXmAE?jKmAMG+|vKauc{SLLKym +z-zVa(wx@y4=vX3jj>kuR1n$G)>P; +zwiI)|9AoKhB2!9QLh33aHkB^gvEp3bvTOPFoGq$$lcO{R0%uZ^)^s#QU7Dtyp0TZ> +zSp<#TdnnqXW>HBUT!A7z0`-V!_VGNf(1R&G@MT?J|HK3OvO~JI-WR~YDyLo0vu&fV +zdn{q6a)qKnUpPdXKnXLKmAl~xXGR{1DOk2uIAkUJ7I8L``gGo;U<$d6kOyZZt6irte*#SX3ve!&5J0nK~0qdeU%SU|>Rk0Ay#|txNyqCPVR9_9Xkvval +z;uuIN3rATiX(Uqdg3~dq(laww!L&=Wf_)=@cyt=WeK)G7r_nQ;$d|U*hx_A3&y3MC +zoz3;g0rlhyxuTUQ=HO0Ff!hVmg=r#BZa?w7na7M_2=1`m-qV;X#Oa)3Licj;HNI%3 +z^JMM#u&3fSrX8s~i~&tM5=@oNLzRc15(g0jFF#tQp9X%cT|O6Bt>?!Y9#?f;E#EKl +zb@@$homi`{3$71q`2oRoWGz1^>eXj{RHaFQFTczzXRtcHG{sms=<$wb6l6#@;h-}vYtMw +zWuqRya-Oc%&kB*RtB=P+9q{8+%aOYJ_-d{Le!;&kYK4Bmze2ox{`KMIuc>8#qFgnJ +z_sd=ZRe2g_nAfMF6zB|MJ$=V>Sa3b9)CE;`RQ++i&3roNNPPZ1#{5w}XCL`Fw)lR$k@#NcpeLlC#s2SF +zLO%n3hwpNcGBg8C7v_jx=UnQ8OZfQ)_z|oJ@BQ)&>CacbXXH6D^zv<`?;Y&(Fc{@GTxMRkq8I)%iY56pDS(9G({OskB*)&j>K=VrhCBMMl!X137IM +z@supinh89cP!gGDGKazu)tb`BG;iHIc-x3MvTK`Z3Ugxb?%|PbckCT8$H#W< +z9Na!)?i(B$AAw}s7k3TbHZ~0Bc&M8rqsne{+g@RAAKyJRIBxE~_14=*_PG|`L&O7o +zRv4#&O)D8M#)TXQTvi`0cGaL|l9qE0Ssqe$Wil^z&P>I#$&BSa&s-UyYk+di$|m7) +zib?=F*zDA2c(6;tH22*$%vqq62@$pDW{dGD;9|kSDQ=-Gu?l$+&7y3Hq5_UimC`t0 +zo=z&(;LunPO}~_-;&w_zlXF@4b8xZXNDf&AJDtnc5GG^=D-)0AGer@VkwoR8>?qAS +zWI36+sFhN)oJzuiDaXQ@ZXqqWjsD}a=>+=9!LRK&v5^fC#d4d)DssY*BZ&e&X`t%^Uk8exdF{;dww1QOE4VdUcL6)Ao&3A%DDeW +zRlNr+f&1t8f%M$1hFu`&-5=X?{Rb@JQ3nZne@J6zdwx&&1@P#H5!-W}2rL1My#~Db +zyBkt^_s8~JPXbGj?{(1P_*swfLCEM`BGX)V0!x^1(4zPiTik;N<#b3f_YW>~1YU=1 +z=C!B!t+wa-8CXI$8!GIL|2X($&-v#%8(2cjLGG1wtKpjl*ToM! +z_FT6EOGvqzPQx4jPr$~j6uE{;gX??#KOnC@(~Mt$O?#C+{|*>kOWrE$#i1%R+y4Oq +zT03gFy1y6r|E&1`sd#;{9na&du%-O5z5Bbu0244NuayhiGv`e-l)ZF0X=nz~lLjsT +z?#H1j@iYB48sroGOI5Cm@`j^9zN*1XzXu`ldaIStW_xd~$o7o?30*bS(gW9V4;YdZ +z^s=rRyz7VFN3ySKz4`SH<&Dd$d&Ls=rZ;i$KdtqpwRZ(Q=RSQ +zk;&xMj^RHX ++#include ++ ++int main(void) { ++ ucontext_t uc; ++ if (getcontext(&uc) == 0) { ++ printf("stack: %p\n", uc.uc_stack); ++ printf("getcontext() ok\n"); ++ } else { ++ printf("getcontext() failed\n"); ++ } ++ return 0; ++} +diff --git a/none/tests/sw64-linux/getcontext.stderr.diff b/none/tests/sw64-linux/getcontext.stderr.diff +new file mode 100644 +index 000000000..443dff38d +--- /dev/null ++++ b/none/tests/sw64-linux/getcontext.stderr.diff +@@ -0,0 +1,8 @@ ++--- getcontext.stderr.exp 2024-12-11 09:09:14.959567395 +0000 +++++ getcontext.stderr.out 2025-01-15 16:06:41.882864265 +0000 ++@@ -0,0 +1,5 @@ +++ +++Process terminating with default action of signal 4 (SIGILL) +++ Illegal opcode at address 0x........ +++ at 0x........: __getcontext_x (getcontext.S:99) +++ by 0x........: main (getcontext.c:7) +diff --git a/none/tests/sw64-linux/getcontext.stderr.exp b/none/tests/sw64-linux/getcontext.stderr.exp +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/sw64-linux/getcontext.stderr.out b/none/tests/sw64-linux/getcontext.stderr.out +new file mode 100644 +index 000000000..b9abbdc60 +--- /dev/null ++++ b/none/tests/sw64-linux/getcontext.stderr.out +@@ -0,0 +1,5 @@ ++ ++Process terminating with default action of signal 4 (SIGILL) ++ Illegal opcode at address 0x........ ++ at 0x........: __getcontext_x (getcontext.S:99) ++ by 0x........: main (getcontext.c:7) +diff --git a/none/tests/sw64-linux/getcontext.stdout.diff b/none/tests/sw64-linux/getcontext.stdout.diff +new file mode 100644 +index 000000000..988615f47 +--- /dev/null ++++ b/none/tests/sw64-linux/getcontext.stdout.diff +@@ -0,0 +1,5 @@ ++--- getcontext.stdout.exp 2024-12-11 09:09:14.959567395 +0000 +++++ getcontext.stdout.out 2025-01-15 16:06:41.222864265 +0000 ++@@ -1,2 +0,0 @@ ++-stack: (nil) ++-getcontext() ok +diff --git a/none/tests/sw64-linux/getcontext.stdout.exp b/none/tests/sw64-linux/getcontext.stdout.exp +new file mode 100644 +index 000000000..b3a889a33 +--- /dev/null ++++ b/none/tests/sw64-linux/getcontext.stdout.exp +@@ -0,0 +1,2 @@ ++stack: (nil) ++getcontext() ok +diff --git a/none/tests/sw64-linux/getcontext.stdout.out b/none/tests/sw64-linux/getcontext.stdout.out +new file mode 100644 +index 000000000..e69de29bb +diff --git a/none/tests/sw64-linux/getcontext.vgtest b/none/tests/sw64-linux/getcontext.vgtest +new file mode 100644 +index 000000000..44a7cba09 +--- /dev/null ++++ b/none/tests/sw64-linux/getcontext.vgtest +@@ -0,0 +1,3 @@ ++prog: getcontext ++# Test srlow SIMD instruction is properly handled. ++vgopts: -q +diff --git a/none/tests/sw64-linux/gethostname b/none/tests/sw64-linux/gethostname +new file mode 100755 +index 0000000000000000000000000000000000000000..d6d1dffb7d75dbb13d0956b060f94958306a1c22 +GIT binary patch +literal 15376 +zcmeHOeQX@Zb$@%u3NlzIkund-LYa?B1K5;hCO+ogPgi1s+=R8dK9gG8ji?#ngIP +z5WEi3QS&IZQZ?u*!L#e5KRf`;oH(Ng;oE!Z+s0%d%&VS +zg?FHiL1C6<*#Fafg3F6#KY)dv!Ve26B88RS0qC)xzbFKy;6d5md~vxW`=_uZDV$0U +zg;R;PR5D#S70P8o>+Jq6hFu=p-n~a?^^IfGZL9zMtIuq0d9#lW8I!L)_HFi;+h#i~ +z!@%+??2L6>T<`Q}5CnkvS9kxz4KB|It5MNZp_1cOiQfT!V+Hx1dF0vmN_JZ3;SbEi +z-#!nY``t)OXu`1Pry5@}`}di-d?J}P3pp!6BUXMilgp=LV-{ttSb{R+R+>x`!xD#F +zESopSV#zc?#mZ(Wp33Ab8a|m#<}L8D>G;?i{sfcBIv&AelJ~s}uVUCdG|K9LHHO`f7L<9M6$A~NzZ?wivw~&DEMLtD +zu8X+%PE5e>aPi&mg+3SGnMaTxbn*S56^t6Q?W$*(>pb))#XGNGzqd_$e>c$!#mK~S +z=ZTJ83($MlJT&-c*B(6WN11u&8Lxz#Mt5tJ-HqDw-5Omkp4K*YKfnC)J)-B&x1b!L +z%h0*k@ZZJnHa{p9n?J*KAJ;uxcX54+YX%qI#LXVMUQ9_J_W5t`rbRT^*zkp@M&{k7 +zw|aIR@UQDK0^5fS@TYMRJ@Ozr5qu>`+g@Hq$L=2T7rPJRI^w_GP4w|K?gxo}Jk25S +zn5a`1_m|Mto#MxE&yAu;@C;ZaSQP}xG(e`l_WHs78gZgRq6*}k2{Uy=P3&la` +zeOSELpkkx?bNkZudl9t9?F8t-RmAx!;(XPhU%$GBzH>D~@4=4;pLY5mbocu|=^mu; +zOebx>yB}rl*BaPWF}ny`2N0(Ri1W>)hM2ri>~PiRQQwJi`+&k%aGlktbp}5rA8;Qs +zbh{aLXWpgo+qfo+#nzd3WO+aEQTn%Q`)S`~>s!5jM}g~-(Y`(YwkYZ*Ym-JF>qH^f +z2f3(}>jSQV+;0DqQPfQ?l5!1bxAi5XPs8=7_NUzxJTnvXJ!a2^JKJW6KDkD>TW7xM +zdo+5#c;*JtPp%#F|D>B^K+wH{cG&-SY2Pa-zoKFhaP{@|{xPj-ol&&;du&tLI_k2u1-5QNmScYqeq3?2x!)zXShiU&=E~Ol%O+YU;qT-j +zjMZX1Ux@Qv9-F_BV`I2T3QsF)KUisuG% +z33GAVIn1SVm`mp{m(F1>o%p@kO*VmP}a*BcCx)Z75mf9oh=-=4Hh1KB7rHxe?%p@q#)Etls&wr#ytM4)rQcdI`Ovw= +zoplYKi$DI+5C7r^AO2mf%()=B01FXVh`>Sw79y|^frSVxL|`ET3lUg|z(NETBCrsF +zg$OJ}U?Bnv5m<=8|3L(T_~6R>F*ooLp0V1S;XNOQS{soe_lL3hBj6p~mgjvQ2DPuc +z!X`=WsqlUe!!o&#s`fEe{eM0vX1IPz?w6`Pohx43zS_%qSJumIQp&LsKyAG6cSeSX +zY~4#_Avkm+|-CvaBdRF4{W+x?os;vH^q$6_vD7{OPe_7%|Ij@4w{8A%e +zYxH(^Z!*?kXLzmA9to`vwS&zu72lH)q~6X|+WJ_#b3P#;?NpL+>OMzC&Er1lUnM(g +zZr_x1{PSd#Y$X}h#?jAdOSN%Jw)I8y-Hs4j#6GBuulRm0IHk8fOmKUDG@!kQs@hYy +zT|wX~DSCbf6`sFZx(zbkHr%QLeiJNTpt{PJOy{Xe3k-m+^7!v?ZIwU4lvcf0Fnz1w +zSyjMS2jt*2KBG9&d$aAK#b}ya7~}^ +zdR$-2M86>NdOH)lYB>0(^vg`_Y2pY?==E%1Z$ljD8+wcz-4{3l^i6#$iydgNK%CXT +z#Kc$XUWC|`o@e6erQ@i%r2jJ$zt-{`h-v*0?p4nScdqFF!8ONpKDzLZ&cUxT7xAdR +ztN$hwgTl8PdXdG30({ct1M-AW<@2|^1+*y0HBZ*p`~e7mUc%r-U94cKv!3tG`wMyC`G!1O)Q`D#RLA +z;il<6o(ARfRlEE}Ozj{x(@9$t;Ij9^)S1TN1Zj1mW1b87;Hyy78iN~wJQqeAhYG`_ +zH3hZ^;iJ{Tx4F8xhQ0G#IAy!am7-fwYI+0p&EjFWfcF$EX^+=8*Ldq!)HiBP{vdt} +zJWI%1zo}+(&BmI3?E86F6QinCR8zAJf(T^;is+u?;Gy+1hou6|nzz2D#@5!r(Cb{r +zI-s>^);eO^jM^>uJ+0NW{$`f1Yej2e$kjjPQrzCcLJc8pdy8`IiI)Cm_Bgui)vgxS +z47wFO_$_J#BcS@hj3#aby%$Y@rbYzXiwT0>Y4_^uNCR;A@IPG0WySfQk$60uJ85os +z%033vHj*xc?YDL~nU1Fl35$fRB*H_7|HWWeOtp)W|fM@^~aZ~MFvU+s&&>hJn$xB7w+Um)yT +z>{;9FtG?>1-R5iD>hlix{3m?XZ~J_$w|t9!=+nZUT7-ZP;qYl2b0~)6H0FtXY$#=! +znc?A_l@}*;M5UEZ2!dTv2XI(ZoW7B&ATc{lA<70!m;QJ@OJ;nOkMEe~cr5XyvS^rN +z8AR4(wGB@}@pxBZcz{p;@DZWd3CnIGEj$&>u~_!FmF4qRMtA#{Y(}sgX@#Agd*-YMw=QCN#jb^fWqma%eN7C3T=AQ(o5!K67CVrf~w;Rck +zICf+Xr(z?yb!28z2`4@*Not>&9INPQmQtDYh#_tcU$quTZ{sJ>!Z7x$(;49b$Ic!D +zGnY#~Yq10ILe`9DQiZWJVds0y3O}0~4WEdmMzYCtqAhoFwv4o5V<-|%XVO+UZ{_ki +z%wjc(h53`ogk>gT`4}3_T2|J|@o14*Nb}*VbuMp}llIthOzfB`{tyCM7?-|^px6!Y +zK`c`Yv}z!g%%KxPo7?&Yz>8-=otJcrd+}hXbB3jSFX1=D;OE#4UOXaG75P3=d3LFM +zHK}~Ol<%iXd8-#0oXU4g<#igYkmq`Fz{!YN1O;CHrcXR;uGAwVEsEt5sY%pOd$_;H8ywm^>$|=--Rw6`b{I7-2PU +z4Jp89Fe}O1E!L4*Ur2HKf+*CHT7M}1I?2Bw*9eN=hk{0PtI`{^!#*NbXwh8=3Wz>anh!Wl`nKPdcg5UJ=+~@Zw^IiI?n4E`y +zM%bV0&m{Pb$nwq_rGE0E_)7M9X;taG?jH&JOXoaaf5~FD>ReEIWxljYCW +z%}IxU4F01P?EE$Ojh?yv`h@MMpt$hQng8tZ<6rnX&PdmA4W&b6imZ +zzxL^*8Ovs4r;#P)v!`h|i^I-lqA)gg8Y(Wzgk-)%)OFqsZkguJgPnVN%$~hFOq0z0 +z2lsXN>^O3;#~kS2ySuZu$2{EGHPC~a9behoxu?Gy3P_dAo<6D9x8oq0y#xEYItR>s +zJ9i%HIqYbZpSO;xlhimr&AFgMM`R-CVwjf9FyOvCn(eA}b-~3&sF0P|2fR6Mxr{j) +zOD9s6IREVy$VU&4s +z<%SI)-1_Qw8(4s0Bj;YOzXLV@g>Rs$eU+C23sCK=@51(1F~=P3MUlS&D}9x}0t?{p +zSPWR+i#RELl_C8y_*g|c`YO)_7Lc=%b1#qIG1TxkUDdwIhk*sC@5{=6C8zLlNbxsf +zMXS6SSU|)^bNrWVdKLv1Rr-T6zXled`l;G4@BfQZzsnYP@^Iwi0+@bfx&ABQ +zaZEVA3@Tp-7SLfM=dSb><0TZ_`YNvn77(?Oa}PQtyKoW6tv@Z-1;7G=vL80ZIYueG +z4$`f!)(OA@)|84n{a5U16j)!yU#%yA1#GsFb7xsMaD3hRDjx$DP@ZX*b%*}2Okb@} +zfCc1jhHtK5 +zxH;=0_4jwTWx&+@QhI6}KY=cbD19g2G{6K*i2LkK=_}4Zp&<2z$q7R6|0@b?6YUF8mCsEXwglU9Lpl9(R5CB(7D8F+m*;RwU*Y?Z<@c`wwZ41PusK}s +zhVuE-1VhS}TW-45rpo;)mu;O#|0AhC;0%myuUx-v9{q ++#include ++#include ++#include ++#include ++#include ++ ++int main(void) { ++ char hostname[HOST_NAME_MAX + 1]; ++ gethostname(hostname, HOST_NAME_MAX + 1); ++ ++ int fd = open("/etc/hostname", O_RDONLY); ++ if (fd == -1) { ++ return EXIT_FAILURE; ++ } ++ const size_t kBufLen = HOST_NAME_MAX + 1; ++ char buf[kBufLen]; ++ ssize_t n_read = read(fd, buf, kBufLen); ++ if (n_read > 1) { ++ // Ignores new line char. ++ n_read -= 1; ++ buf[n_read] = '\0'; ++ } ++ close(fd); ++ ++ if (strncmp(hostname, buf, n_read) == 0) { ++ fprintf(stderr, "gethostname() is ok\n"); ++ } else { ++ fprintf(stderr, "Failed to get hostname\n"); ++ } ++ ++ return EXIT_SUCCESS; ++} +diff --git a/none/tests/sw64-linux/gethostname.stderr.diff b/none/tests/sw64-linux/gethostname.stderr.diff +new file mode 100644 +index 000000000..fe030076d +--- /dev/null ++++ b/none/tests/sw64-linux/gethostname.stderr.diff +@@ -0,0 +1,6 @@ ++--- gethostname.stderr.exp 2024-12-11 09:09:14.959567395 +0000 +++++ gethostname.stderr.out 2025-01-15 16:06:42.382864265 +0000 ++@@ -1,3 +1,2 @@ ++ ++-gethostname() is ok ++ +diff --git a/none/tests/sw64-linux/gethostname.stderr.exp b/none/tests/sw64-linux/gethostname.stderr.exp +new file mode 100644 +index 000000000..2e0ae69fb +--- /dev/null ++++ b/none/tests/sw64-linux/gethostname.stderr.exp +@@ -0,0 +1,3 @@ ++ ++gethostname() is ok ++ +diff --git a/none/tests/sw64-linux/gethostname.stderr.out b/none/tests/sw64-linux/gethostname.stderr.out +new file mode 100644 +index 000000000..139597f9c +--- /dev/null ++++ b/none/tests/sw64-linux/gethostname.stderr.out +@@ -0,0 +1,2 @@ ++ ++ +diff --git a/none/tests/sw64-linux/gethostname.vgtest b/none/tests/sw64-linux/gethostname.vgtest +new file mode 100644 +index 000000000..d0bf6c246 +--- /dev/null ++++ b/none/tests/sw64-linux/gethostname.vgtest +@@ -0,0 +1,4 @@ ++prog: gethostname ++# test gethostname() syscall ++vgopts: ++stderr_filter: filter_stderr +diff --git a/none/tests/sw64-linux/prctl b/none/tests/sw64-linux/prctl +new file mode 100755 +index 0000000000000000000000000000000000000000..b44f785e3b37e975ee00009cb01a28f196a8b117 +GIT binary patch +literal 15160 +zcmeHOeQX@Zb)UTt-mNH-M^TnY$sfy9b|}=mBV|RVWJ%_SD3P)(QncJUaH8e$ZjX1- +z@s7URlPKAanZ`gB*S2J!aAj9Tlp-kH)Q%G%2#mB2gd~3?{eazn3O6WR1x3@Q>4(xF +zts*J9{@%>I<=yg_w*M3;aF4is^FC+h&Ft>mnc;KeM-B!ILofuyrq_tN5Ed5UVJ&!P +zhb~CokT4$L=bX*)~XF}|uB#+ds@eWTwI?GISi +z$M^tb1dK_SVEXUfG?g!FN5ImK@tsmj2*zx840hDc|0%?@;*73ut+-s%{bQ_2k;v!f +z68Ut0K3AwL#mmJw<_EQ9BYrfthmJljzW8TP75*r{>$BSre(Hq+`O=DggXU(vgFze$y`A|#VM75N7Z@5K(np&EYeb7G=~@69XdPuK7xpcw+TfA{8o +z<6Dmi@oaTq`RVgQoOnAbzWH`Q%zpc;x1WrlOuX}i?}nZsZnW+;o*6U5rRo`D_t=YD +zF5ML3ne#m;N5v)R-t73#>gT&|SF2sW!0#4*H}SiH-_P+=bzklZh5gDhFgU79r6){ +z4~+h|g?KU&5Z|bN@Y=iR--+`v@!?JCJNYDkSHRc4Zj)c-Yw!m79W(|;M{?HT!5@9} +zaHr8bdThIO82-OS{-=HZm)7t<3qJXciv4d1vF{h;cWHV1azwXt7Jj~0Rc+h}T|+#4 +z9rDZ6R@l7cZ*NT2^KA7A*u7W1*}<{l{#?8G?#=g6AJr2Tx8FjXQSa@a-$tyS$o5|E +z6Nxt|<}>)A{Bno52Yr3EIt+gtt2g0e1mm$yB;LU9T)S-RzFV>7-WP@Feeto#55`(C +zzG&+W@|(#T(uY;!BMTo}#8u1_&+a9vXQ)Q!fUXBV&rQQ8$@^;L+q8TJGODMP?Y%J_ +z`H|G?uF<>oJJjCl*s%2Ro*ZZN9kJX0(tsXsny)n8??YGJC+hy7xT#pL+!x2kA3NTE +zbmY3qV7<;|t +zeE4&rk+zQKzW3hu*Xy@FWKC#Bpc#Q?1ey_OMxYsiW(1lMXhxtJfo24n5okuB8G&X5 +znh|J5pc#Q?1pdEA0E_6f6#5k`$`hs^!K}Orv0meDy+4f29|^;HpOW@<2zXz0t0Lvz +z9TjOGhoD>Uqw+o`?d=i#>~^(C_=4UqC6X?n{_ePs532Cg1ge}zk$|BS}VKE3BPeNJOb&m;CTt>+Uqb@jaB$SaLQV`F=) +zKI{l@w+08|55xz-rdY~#dj#ju$Ts7Fu20GoaY|;}dbhIM{^c&_lRXPnEjJ +znu;`tk!TTDsrv#7Qnw3SlC@JiT7IjY1d%8;6cgsJVUPKC5U3-DixCNrLgJsI#--Rl +zkTlwH3D$vEmO4w0D-5%363T&B&;g^YJ +zPuCm9WEbhT^}=BSdhI)F3?J?xrH;7qa1S@_qdk*d)Z*dpS4Sa>)v5>Z&gcXq%Do_l +z_z8thd=uA@akITm7yu9ypG2ixlIL*dQ>jGxw7qMmI*!vnU#KM1Q#6q)r1F)tBc!e- +z5_37Xyqc46&n!Cie7x-F{7Iaq6CF88JDGTv>Xxb~VtjA}rIK>(gOf+b!3YYmQlfJ# +zMKI~X6pjfqz$4uq?x=*j_Jv#C3WpOPg!k_ahcn@I(T!oFHxNM=ZM&Gs?AmF&!an6D +z=kgBGWlRD(9fJ+xwCxnqqMSSHKt&&gA(1@vV$UVZIQar{u9A_8p4FmDCuJ6s>5mC} +zp@^{9sVtqQAq8r-*IiYk4l|nd{X?y&?j~bxu;}7m}ru +zPN^*9ksmvgPtKQj2)me1d+{JmX`)oop-Rb474ww^ob@Rd<}G2 +ziqZo`ONK6yEiO2Tv-xb|R5Cx0^F-U$xXCe<(cz%XA#{~RJ)pAtvZYF04km(iI+u3rbka>q +znVcPJ2FOU$ApJKG#Ej;1hqbCfOm9A~SI-ZMMV)`v^Fv{pY{B8wRx*23L;D9{KsRW5JYy*IZ8dh&C9#$`R#&pq8kvpCmKpB~7o +zAt-vp1*?&N{@SUx2@3uy^7Hv?$j`s4o}sCrSbaQ&VjB`asrn5li=?xAJZ~+nKxY#h +z>8l#?b;o(T*1t#MHsR&-nvdh3fHv>DQM1Ja3Wiu6&*PH6dK{mYhN#!~{qUPofAxI$ +z1MnNQf31FfS^DV|+sxJTu#ulXk@~Cei@%cm)${Fd!Kbel|2+S9segxe&QYr262*W~ +zTm7&IzC~ZJR{gxX7yM4YGU#1v_@Tr-hI6L=`TXmo|HA6~mr}e&?I}nH?O*n-d@8$W&9hKSDs609g{y@L;w5QzdsH?B>i)3t8&mE +zga45R{(lO7XJB<4s^sT|2G7-0$sLU21#2hga<-eC7hsg#N+yG(3P*UIdAui`lII1>}cuB<}IK +zN)G4hb7{>Q8J+B>X(MIXWH~G1=`#iRQy2-Yl$=7ENawq22^+GKlTVU?E-mI=5tnU> +zyUr5IGLG?5QARcHWc57BreVvJvQQI7S#TMSlMA^NYAwQ7Sve^qE+UQzyMTG98YKG^ +zPr7a?H&;QH7UoyTTp?5RM00Z`=M+=;Hv@;uh+KmQ;Qx|EZ(!WAdW}W? +zABsgZ@<0jrsH+2#)xxiUkcX)?lk-Gi3EMQE5q$#H!Y&ZC_WWK3mS8F5UH$e4Ao&lh +z6>4=a@4VovpVv>-Dw5|;97Pe|t6u*(KLwWXfkJrwt2nVeXF$IOKECxld(LBlCGdKz +zqLdFV6Fz|-t$lL)Io}1A!0#Y#KkG3*2`ySnWt#J1U}5rbqu_uq73?_wq~& +zOu&*t-j(f{@k11}y>!X{$FyWA4X%gv{r3L?0r613ROP(voTV&u^A&-spZ=-l4R{)= +z!1nz7U@_Y>z6AmA-H;A{zg@D35`yHl;GaJm;D~+I>Rs$rl)qhmU0Uw-^T_hM+Wuep +z#?a3Fy8Ua|e|?)W__4NQpi +xu}|4A>4|HB9K?_34?mYp@VvQ;GQ(^_mBK#fTrca ++#include ++#include ++#include ++ ++int main(void) { ++ const char* name = "TEST-NAME-001"; ++ const int ret = prctl(PR_SET_NAME, name, NULL, NULL); ++ if (ret == 0) { ++ fprintf(stderr, "prctl() ok\n"); ++ } else { ++ fprintf(stderr, "prctl() failed, reason: %s\n", strerror(errno)); ++ } ++ return 0; ++} +diff --git a/none/tests/sw64-linux/prctl.stderr.exp b/none/tests/sw64-linux/prctl.stderr.exp +new file mode 100644 +index 000000000..eb14fcd75 +--- /dev/null ++++ b/none/tests/sw64-linux/prctl.stderr.exp +@@ -0,0 +1,3 @@ ++ ++prctl() ok ++ +diff --git a/none/tests/sw64-linux/prctl.vgtest b/none/tests/sw64-linux/prctl.vgtest +new file mode 100644 +index 000000000..3556b4f2a +--- /dev/null ++++ b/none/tests/sw64-linux/prctl.vgtest +@@ -0,0 +1,4 @@ ++prog: prctl ++# test prctl syscall ++vgopts: ++stderr_filter: filter_stderr +diff --git a/none/tests/sw64-linux/readahead b/none/tests/sw64-linux/readahead +new file mode 100755 +index 0000000000000000000000000000000000000000..2ad00af53632da9a55cc6f06ba3c2fdfc60cd29a +GIT binary patch +literal 15144 +zcmeHOYiu0Xb-uI9;qH(kxfC6ll4^PADvp$zyQHKllw?_ah>|E#PfMvBJ031~hup1} +zyPJJTlw-rp1C8P+mRzKX?HGs>6se5Fu~DRf;UIBj +zO0u@!x%Zyo>~M*;e+m@XBh8$9p7-1{cV^Gby?kN76tI6kE@+Yw22wzjji9pkGyFvdJS8XFyx+8?m&kMVBE +z2pE$t!I6Kdq^bR?b_6W#82^sc5`rU{u{QL^FmxB*Mu(E;hBj9y6;BQ$*pJHs}XU8)9_%eJNN4Hod +zinf|>e7%G-ao8zW(%HOIExTz^D7ty!ILK-W>}09p%q6pV0S&iQ5~*CF?24H)rEJ9& +zB{!K)W^fXuO}XDH_D)WWjyap+o4wY6*V;^D3?a+(uLTFiWB`u?^E~LuW;^H#9@e~= +zq{HGNO@IHHui|oqL<%&4ZL9IDMw_o4@nf3525stxVS}yoiBH#?VaQ(Od%1z|h>!2T +z-%tAZ-u!@mNc^z2@9RIh`GE2I0U@5K*$bb(AjG3DN5x;h91>H1_1Cu_j-XAv3xwA} +z&k#4-w;7L*8RCW7S!3JS&(^$fQ;5eetVTO3UV!e+uHV+a(Q~_2>-hl3EgUy-+`xe@ +zHC*Zmi67P8d|vf^ICAxXXcJT2U3U)~!nv{X#qs?|Bb!F;=&orS{7X25xa;=7LhR|7 +zc;KmC@#u{QBek*PI8H>ajtTMJ%M`zm@jpycKIA~g2aR(IeO;@)hfwZ9XghDwIIle! +zyK(KwzUziLFx)EaH^@g6KEfEg5D!N};7)tB_VcxKz@r08y6xv +z&Xe%-lbVY0^UyWKuIrFrqF7<`?PeF}hQ~7u`P=A^`iY9$==1h} +z9>rL1BUdLg2FCS7Z3ApMFEQwkAour)#AO`kYBlHjhlR05?6afY}a*LB)&^NZE^T%is1-+Q2)a|n~Sia{(H49 +z>+JLCF)cKRX#lnz6i;9*y*|4O4eYLejpC|}4a=C{l5+?7{PKXF +zKbV{HzIz*b>b_I=8(jx=?H2E|gj-1^ipg^MOj_(oW^-=Zt`ux~>e-5G&w$w`A8vLk +znaa3!;Z&PXwODfd>B*<{jJ4q%^czUeo^!Y{=^59HyWtUF0)DO;j~x>&^IgW;j&+jP +z3)v*})1)-s(N(XvM(WuRk>2-l)92_RHr6>X`h4pJbEKmybo{M%SLj**k|s1W(9A$H +z1I-LHGtkUHGXu>GG&9i5Kr;i)3^X&)%s?{(%?va%(9A$H1OIO_@CrWe(T3k}#~-DQP{3fY(*mDpK&eD6Rhx^y+m~UdLqlf84GWNPbbTm-5=r +zd|36zYd)`Pc^fGM@(PJ|jp_R>0j&r6A(@y+o;IHDZN@A62>-jVgj=H#HaAK|k0 +z(@2M9j2r3jyuIeTUQ7DYbNQskjr`oNWsDo?a39#PAn&P0I^0J_`@0WgS96lIh2Z?k +zbqL9+Kiz_|S~rav-+^ew8JsR6ag7W^M)X05LZQgNK`Yb}`6oir$UhP?T2DxsX~Jc= +z#mwd_keT;V2eeKfdUo}rKrJ67t>@NK+l;pS5mB#8sx|tI^79CIEnmbb{I_?Gf)#m| +z?9LJQXFX36<3*gJAI0e%b1*uB9;~}@GB-#506bxR5+`%3^(COFbr%sIlSEA3P3Dj! +zdadmw*(M3wN|1x?lGtGV7JZpJBr#x}CE|Wb3|SLovr`ho@@y)!&*~xvBa(N-3X#pI +zBu-j=MC@Mm2`Efiv=PGGbH@~jjP*J4wogV~w6>9CLJ}2ggoyp^E)?diIU)|Oq&2Dq +ztCMUFbx|OnwGL3HhodtK) +zamm_=v-wFG&SmRel00fX0h?E>Kcs$~Hp>007P&E}WNcTgeYEy5B-W>h?f^ +zE^y~&m_@$SNrJ8|P&V33y4b;KYP=AeNeiQ0h8lY2@$NOG8;kuZbVJV+yPpF#y1V~E +zk{N0nAMWgF4|lHZ>^4?LVt8JM){FM`2f)Gv)J@z=EvrPhb9?)a_HFGGSP3<|poHiN +z5goZ#5Q_E~;m-DUrDuR)b@@Y~Vtwcv|`HZu5i`uBuKbx;6)N_^%l&-d}Bc!WDJ6c4yGWm96HpAkoIpY`IdZrYg>!iOF#=@Qhk)(Y}|0(h}whVTE`Wge_y% +zZ2g959xzw@#EcD?YZ7MoC9}0^nu&MJw!blrzECTMPMc?FG1!?-Vqc7Nx{{pExlUnb +zrtDVa&KfCn^Jz&?$Gnq>i@t +z%ZML?+PVc2xu3|H$t7pYn}k!yrM-NSDK4GvFqKJS*vLx?Lr$HBuT-@JB3GTm4kev0 +zm3OCH&OYYCcOp}ma}$r{GKtg4+-xbEPxqJ4EVl8pzAZkG$QSZ%qT-e-Wz0#QlG5dw +zY}$3w$x0GwExB&VEz?yIPBl-PqYy5F!fvR=i$|kYS)u&MsF1{JQD0R#N|i{KtBWo# +zDR+^>WEGBdL%sdCKs%>+f1+PGjH%E2`s(>%fqjMYx4)j>;?=kHd{b~;ThDJ5T>sYd +zBcf5A7)Axf^<}-jCAdzl=ePOmTTc{5HO=*s$3!DcZvncdspofiby_{YQ}FviJ-`PU_Osa{?hCCX=#Xl1OC4t^_R|v +zZ-d_`{^iE?=h9EN7_yem!$y9tNd2Yv#k-QfbiVx@e0s|X&hy_${SSHjD5V-sD{#Rm +z)*yTWe4E~K?fQAO5&Z6;GU)B#$FLtYm}jb2S3b4$KHW?F27XRTKTG>{!S4>O67zw0 +zO3V294Cy!6A4{(=G0cbH{qkqzXJPRG(in4b&(3tdlI2l4nsPR7z*X +zOer~sU)k#1+*z3TC$_o?{~i$DQ#*yB$Y3M~)pH8{d86*tjz}ap=Iv +z-f`#n$mrxaB)cCvG;(la3!r41{cywgaIlO1jgX70Ni{N(WVQ(Ar +z7G1A-9E{S{1p=bgTcQ0@Sw5(()0B{M!O0}^>6|NfR{IrE!BG9F_g(ACZ@OI8wyI3> +z934M6rbq7O#B;V;$jqtT*&cU5ho1ZCoqUq_9dzvZyRe{TGWUj$|_rGP)FDY(GdP$MMbsVq+ +zyt>r^>H6V!LCDS6n#uJZu!QxR&j{~3b+8qb-=2S8fhE`qdFP=0Zb*KEZ-X5FMO{|{ +zOW^+bdnx^n`{57>yp?+6=Q$Ip6^50^ps?YV9O +zmJqCnby__aKM2_KdjznAw5O>Wn(c9~pw)>(PdD#&hK;JWfF +zHc>*5+z-L|vl5QjmtXH0;Kpa@-. All rights reserved. ++// Use of this source is governed by GNU General Public License ++// that can be found in the LICENSE file. ++ ++#define _GNU_SOURCE ++#include ++#include ++#include ++ ++int main() { ++ int fd = open("/etc/passwd", O_RDONLY); ++ if (fd < 0) { ++ fprintf(stderr, "Failed to open passwd file\n"); ++ return 1; ++ } ++ const size_t kCount = 4096; ++ const ssize_t n_read = readahead(fd, 0, kCount); ++ close(fd); ++ if (n_read == 0) { ++ fprintf(stderr, "read cache ok\n"); ++ } else { ++ fprintf(stderr, "Failed to pre-read file\n"); ++ } ++ return 0; ++} +diff --git a/none/tests/sw64-linux/readahead.stderr.exp b/none/tests/sw64-linux/readahead.stderr.exp +new file mode 100644 +index 000000000..7efd4e565 +--- /dev/null ++++ b/none/tests/sw64-linux/readahead.stderr.exp +@@ -0,0 +1,3 @@ ++ ++read cache ok ++ +diff --git a/none/tests/sw64-linux/readahead.vgtest b/none/tests/sw64-linux/readahead.vgtest +new file mode 100644 +index 000000000..3603acb6e +--- /dev/null ++++ b/none/tests/sw64-linux/readahead.vgtest +@@ -0,0 +1,4 @@ ++prog: readahead ++# test SYS_readahead is wrapped ++vgopts: ++stderr_filter: filter_stderr +\ No newline at end of file +diff --git a/none/tests/sw64-linux/sigsuspend b/none/tests/sw64-linux/sigsuspend +new file mode 100755 +index 0000000000000000000000000000000000000000..c7e928c30479674205ba60d3947d5740eb3bb50f +GIT binary patch +literal 15448 +zcmeHOdu$xXd7r%pZz+<;BPmOy6-i4+uB4_sl9HlOmL>5aN~A37WjR$UN6X{gl04`h +z%snL14~U4{hH)K>M%_eqRa7W~Kn0T6d7ucADlrnbi2H!sCItkyHI$~Wv?#!$X)8;P +z*xxrZ-*RtxG>ZOF^pE?b+i$+-%zQJu`_0bq((utk0mBds0kQ67qNc;bBHXV9H+SlS +zK2jN7yxV{Regu$E~g?NF9@ +ztX^>$3!yCON^Om8Qu5d)L+Uf0(e0SknC*xpJ4@SH+K%xp-7v=7Kk6I(j%t6vvOdNK +zAtPW+x&$ZwzLcW!YuXX8v}3$QY6-!Z?M}ju+W9|)m{vTc>su`@i@JY|H7U9?>GAGN +zswDHox?TU){5=wEHjqCiKGne?aY}y2%ge +z5Rg8HoiKHs375!tY@DH!Tr#@Aycke2E +z>R*dkCuS@)4|yDgJ$l?OmQv}QT`oE)QA|%3%f)FYmlC#(m?t4j6iRkBkA(@iu|=QQu@FMbxo6A)9N2`o$XqXT6gOX9~g|9+IoFT*xV=@XyEpP|QE=DRV0 +zu+PKy-v1*WzB^x_f5yX)fMy7YZ!KBBdE@SWhmid^OI;1vknxZD+k?6m +zm)=2BHlk_!-lP65UW(mWywrKy2>0~Y3F{5=VZuicF%aTxBp|-Ibo=ES=-;`^G4ak_ +ziUIi~f49KbzV4A<<*WA&`Rz4&1_#pCk=~zdJk~a}0joTvBa34P8SVxDEL=YAb9$<8N<|tmm1fGq8JW>25Q} +zhWitP{1)n?dQ5Q-b>4e-AhJ000nvT^B>Ef`o6)ytmfB&@vH9yO6q|kT#pXJn7ozj| +z$09!(YR34XEqCrA#xqlfwAtpdxegnuQ;4@@Tv69&EFD{l>pbMszIKqW#fi>4)!J|d +z`T^ZG%TrH3_%YFa`vlrV?H=*Sw)kXy9+?T5zfbEueVVV*ryqXq#@zw*sbAK$+^+>s +zzg~lmy5H1&reaWef2n7fRY;`q)Qhk2JomP3w+c?FT*yhju_3s33nqCGzt?etJq&yT +zvpNNQ6L=n&fS+5&lcz*zrrFrgv`O;XA$uBjq%Ve>nk)70mwFaNr1y8YiKV}xs5SUX +z=yGtNsrl?%Z#PmZKsr?S2B#^5Whms_Be*Gj~%K`jEc2-G4_i$E;`wFuNA +zP>Vn<0<{R#B2bG!EdsR&)FM!eKrI5b2-G6*|0Dvp@UfouX%;l*Jsa8!B4|`dEQXXG +zHiaaN>3vGt{~_Rg)eVZ2dv{c%{T_mLy^s0+NWl#^++$zjm#^q-plIsOivheahkg(en9j;^B`_#pC%G>^ +zpN6@KjY<*O8IgKsl!)E+m!M#p8*z<%L=rI>+en`z+RXuy?2&|JK2A0dNn)G1fr!15 +z=rKQq$|4U-qR%`*Hv1&eZ+?-8eo2g&JIQ815+}@dvKf@b8MB9ogX?|=3S;IR*&JGX +z9mJIRc_Kz+tEbKVq&6yvl6i=TBMlA|X3VFEc(ipFh&eM#HpiMrfj()@QKiStF9SVm +zo+7oA&EEzwZyq7yV@(v#1+zfJ+4XNia>e`s5l?jd5X3bziEHHJvN_kycSv%s{u$W3 +zW`2t5vDZ8g^bPYRBF1FfUN`@R)W*%XVfuy$eHbD$(h&eN`XEU@6m9-Kcy;D)L7~nh +zK|ReDYL^^-;{FDR<~&4o<{MP}Gg*8KMXCGGtlI_!8sOMN@KFD2Q4+N5fwIvUrorat +zkKB_3ZCvffozeOUs2S1dAA=Koaqg063lO8OiSLei2ndX;Yv}}#QMZwt1zvm_O(T5uLHtcB_#a@578A|96A)+H~Mni)V +z8z9Xlk9Hpv>kVVHjU;P2#b{eMI1Tq1TRVu;7zPJ3yv+zky*{GLH6mnfaQHCZzp-5& +z&j&h))e<)jba3Ogc8s=BPx{+GJ1E^_BC%|=Er2&yTO1Xsrf%(URfSj^_9==DhcoNkLsS}@~`f)ZUxoK!WFI +zu~aB0OZK7Bqr*ydxkQI@@=8nKu~{GBxzipFKU)qPZ>GcH^s`gta=7u2!bWGH4#A+q +zJOw9_vd0reN7xriiSdkM=O-rUjE*a$!#&0Hla8%;R3#tnAsu;?M|%J{UY@YkaUl4C +z33W!D5JC)OPp1;ORK_WgyW|v|6SD2;MC!vp7jR6-&gN5S3$R&^?vUI^9oZrn(W0$wE4p>MCAbE+h5W +z6YuHH<#SGV$tjkKn5jHbrK5}Klw+q7r34~ZaGZiuq#+S@IY$S!c6i!GJw+64Js#3p +z&W7od3aJ`dIs7t49GYaL?I_1oO_Qzd^b&Z!zz{9_elRpT$8Kdkh#Ud&h3=T(hYn_d7NVxg)& +zulD@$rWz6_i&<#jdlzkouu_J0lh +zz&uvxI{oJaXSM!PvTa}3VKL?MyI8@!y&&ceh)+0ZOis8-}w6|Zvp(5Zn(hwb5G2W?x}Cr%w78b0{= +zsbTx*=&?rz4iDR>2L_K0LvrwA#|9o99YRG&ob2HdZ8vi8l&}vUJw7;a)INUb&||}= +zT?_vy?|weCjicJ?z_-gmmmQgj(Ca>t@$#wH>iD;Zt4@V`7>Fqn8Fi$b!dJ}eWJM+! +zl=13g=rU1Tjz)!x@nTVXP+6NMpv}k8E7VUvI>ce4cnc9P&SsGq1D6U4PjLwekyDr! +z@f>o=I5L{}csY$fI!LE9YhZA+i{_4$O(lv`BA%Mf!JooNv!vvLQz)kMxeCIDtl(r4 +zWS~panUaXhHpNTM49YTy@j_n4IPOg8$ugCKEmO)u%^GFFWjIb`(@E5thp(b?Qbe>w +z9J4ly$*3A6`xH-@z87U{)?u?fw;U9p#`MgD*C;`jS3LsrCd=LbE8`bJ=9!cMJ2(~EXUa|J7fZd?H_Wa%k +zmS8F5Uj6n5A^A^yOXd0(biN8Kf$Qh*%ak8@f&TsjOK`XSoWBA~;O`6cJ(~K?_M9Po +z6g;dnU3<=Rfh80baB{)KjXRmtjG8~wCGzi)0{U0OXyKZ_}j19 +z;z<-pmF+pd2A076`R(cJsMns?3BVGzX*)*#_Fsd5 +z?713VPXJ5s+mo&ru7mK}bKV6kVT)H8WgS+R`+F#P?Rk9yEMeZ&R0Yj;xv!%{Uncc* +zck@>MJ2SsN(~SQFw#^=U-Y;s`DL?B$MFP`|>Heg-!}asJi2si7mJS%tFSg@x{1I$P +zh3(yZ(*hGPqmX-LduIFt3ff+}JqgaP`yw +zu6aGKhAOZ ++#include ++#include ++ ++static void sig_handler(int signum) ++{ ++ signal(SIGALRM, SIG_DFL); ++ fprintf(stderr, "signal raised.\n"); ++} ++ ++int main(void) ++{ ++ sigset_t sigmask; ++ ++ signal(SIGALRM, &sig_handler); ++ alarm(2); ++ ++ sigemptyset(&sigmask); ++ sigsuspend(&sigmask); ++ fprintf(stderr, "sigsuspend() returned.\n"); ++ ++ return 0; ++} +diff --git a/none/tests/sw64-linux/sigsuspend.stderr.exp b/none/tests/sw64-linux/sigsuspend.stderr.exp +new file mode 100644 +index 000000000..50ce17c6d +--- /dev/null ++++ b/none/tests/sw64-linux/sigsuspend.stderr.exp +@@ -0,0 +1,2 @@ ++signal raised. ++sigsuspend() returned. +diff --git a/none/tests/sw64-linux/sigsuspend.vgtest b/none/tests/sw64-linux/sigsuspend.vgtest +new file mode 100644 +index 000000000..5d76a2288 +--- /dev/null ++++ b/none/tests/sw64-linux/sigsuspend.vgtest +@@ -0,0 +1,2 @@ ++prog: sigsuspend ++vgopts: -q +diff --git a/none/tests/sw64-linux/vgcore.2854183 b/none/tests/sw64-linux/vgcore.2854183 +new file mode 100644 +index 0000000000000000000000000000000000000000..9ab21aa6edc7c4658c87b2b4ec0deddb5e42cf65 +GIT binary patch +literal 3645440 +zcmeFa3w%`7wLiYkJTj9I$na33f}EKoBtag*XKclsnF(-$5dyUqtCGn}gCK;5Exn3N +zLV&?eLh3WUS7Z>Vu}(;CANO)^O&v7YXl+S*+nV0`7!c$kNK}-`bAI1-_C7cqvGxD^ +z+|U2_`+RHPL06M4J(r)Zz()PDS#{4+G^{Blta{>uLOvN(c2 +z`}}f>D5rnQ{F&O*#xEqwMGWP99FOUrGJif-j!ohKIp_TLq8xl7IyJsT^>Wrl0#no@ +zp5*gCsXeV6%N8$~e2!NHkp3a6rU)keEo7-dw!kH +z-eDmjR2%x|Fnsby;zg9EOb;9}cC3=mdHSHG_>+Q4;*)_Pjgn#Po>YpXc +zY})%gAJ>C=yZU>}wvl?5G>|rjP&ut0`j}`hf|G5u37w*cj|c&DiMAAN}ECtE1m`zpTVjN&!vpQ1Zj|0pMe +zxG`tmx7mcxf-`b%dAxJgH*S35Jy+?RkN*3OB~;Q&|KTTte|+ixuNq6I0aI^R2anOe +zh|kLm&tLaZ=UMVs6d3;%a3grM5g?vr16;6^jTLZx{0wO49_(?dFmM0W>1 +zwCo;&`}c4_iGX(iXEbxL9I?LWV^)dxgx}PqRl{1u#Ck=*yW4mLeo^3EJW@R+|HbK~ +zF{U4)i{MeQ?&bPY8HWz4}2NpAHiyF;t-wA4Fm_Bk^4EkM{AX_ +z0RhkZl*1nu@Tc%e_$8+~Tu+%fDBv~sad@V{e^J1@|H|P(0skgGsb8|-o8GT1pi%wp +zYdOB26!otH-Yweoi+ZjBUq>@z_6lP+e+B%HC`a|nD|r3OL_M>=0>9)d;6xtP +z)k{n7d$4R3AgHgRY)wUV>ABLpjj}am%SvljEm^+iUJX!LRkm!|3ZPb%u35HP1Fc?i +z-*O-&6f9ly;PSHaWmTm};41wdk;^Hl;?UJq6%Vc=vQUGDQdU{HN~?pes*va*-o@}WkR;;ha}#F{~b$~jMU$ezMvm^ +zXU5yn;vMNL(ixKB9Kxj^!bt+o#sd|}x_w7_ +zf^Z0zetQ4N=b>&lI^0wWS!hPM&^Ju16X)=S;O +zeFk{`8J1# +zjPMwzzr_I0`%m8=1 +z!Q1UMzA4RR&sg~I^%{Wq^a-2j&-^7>^1JZ}bv=NRCxyG>%_wfJZ*!<5gpTN2hZ9 +zwFY?mbsX+Dz~vh_JYazPdwKm$2DtAe?^m+{9=)E|6EeX4%Q$|E0nR?+@OA^d-NWH~ +z4RBrmbQ$2?RUE(D01pYfwZ{POexKt<4e-1NIsBLbo+I`dy#}~L=;xRLuIpiT=zMt& +z2|Zvpz@r|{H-`blV!fy_z(Zm^U2A|xrgQrJ26&#BcL4*O +z?GSQqfb094W&>Qd@%lpsc+J%u-eQ2~-NoVU26)qM-tJxlJS2>ahyh+g8#VlN8Q?y_ +z=WYW$?^@n&j{)8-jG?FjUQ@{Nj~U>h@f_Z3fcwOF#fgWdpo>0*B`q;H-$l^9=CrX&jz!fak5|^e6_nBGwDl0C$LSFEPMb +zGOvG;0bVkn!+i$0PuOYI1~?Ori5df3xtG(q)&Ot%6^Hu`@LmgVH(-F5L^ytv0q*;R +z%UiPnt~|-%Ap_hY;a&rriFGGpfHw(yugd^0xrO(u+W_~C=I|Z^ +zJoF3R->3oZ`#pyrGr-#mcs;!aIQtHV#|&_#hu6anpD+Kqf5>itmz?7G4g*|YAJYwR +zMcCD{0ba9`*OOy_N5wqNGr)VToc??xT-W~wxNbkF26)X&Tpmgc@Fp?tiwyAS1Wu>V +z0QXPf^i&(*QK8Rk4DgV!=hqtGx<4#nfQQ67*kph=3H{b=fJcN~8ZyB1#5&tzfY)5f +z>2Ei{&&jy~-ju}gBL;YPHivf^;7!7=>o&kyKF9Ad!1IJ%5jDWOg*|-C0Qc4Lap^U{ +zLo<2(F#}ww;rQ&x`EsrZJK1i8U&ZTj7~s0UHr)sp@{?nP_wsi04DhJX5BUZ-Q#ihA +zgm-gzi2*JPdvcKh-u?u~_Zi@M7{6c#WUKn+)*i)g0bzfahg! +zc*p>kr*n9V0q&T=;q3-^(={Bv*8q=-$X>(%uMx+ay9{uD7O$t<0N0;;gg=C0b&0WW +zS;#HHx#aMAsuSQY4&wideJI6`xkl#TNCI4sAJQAY(C37&`!ETvi24bx#~lfNlk~9H +z!k&r$K)T8MX2&xFj6J;da(uV5XSO1`ly)}0ee7^NK6VJdgZLf5FO~b^Cp6Z=I^r+Q +z>=-Dq4SQ!Go>*jydKsHJ7<TS9l=)a_3jU9PCx#)&aL%jm39`8S4!90spV)i-r9v&Om!4{_a3N8*YuqhlX<4 +zuUl`k^?D;KPxs}qcU#eB+ahUtz|L-Ib+E;)>FkkKnLXQDA|1f#Z#ja#4i($t-j+?d +zeR(NGea=(0MGm%ntI7IP_X5C2Y?0Lx+bOTx_MvyJWoci_C}(Vh^rBmma+Rf*xC<8o +zKAQPnW$Z2-j{eVh&CMMchp0Eld|NPndVS2!MzqMMB-Lk)dZ(DD*1NXMQcc;4s@P15 +zX^W&vwhYB>b18VYi|9<1{Y47ak +zz7&C9?CBjCJlUvA%rcim{)#0p~6ex&xHt=|T1b~fBbb={8dIgl%z4r(t4@9ZoO^icc9+gi*k +z`(K*E+st8)1RbbzB=bd*n73YH+Xu_Q+gYgR<9L0{WGz%oRt0=@!^)uX4F&BiBPdB( +zii729^b)P$*?GLu`PKf7j)8WKSBu+7PKw#DF^0Eja+71~+BZs&i~dyz%(%*zewS#-!v-6`zCj-D$2>oJ(ZYBRLh5yIJUrc)H_Am?4EjRM^TCG18n__} +zTSTA19nNCbiKD6{+91{7tP(_E?x*em5T9H(4X<3a{jP +zA!x#y59ENbI#(GdmiStX<0c&~b9g9gXQJ +zH#BOrC-iS{7N^?*x=A)jr%@kCRtPt|()lRK&JR)@{iFv;wy3`;@qx5Neb{{im2Y~q +zSDWL|F>>iJ&2Pd_uYYJOjWyR#wB{{tBR-6=KIVBWTbcXwOin{O^d7YvL|xRTL&zrS +z+Zw>!q)(x{s0}J_XKtdiEo3I0wl415@X*%r*YLU&;8R_C9XhSLe9CxF^|);xdlx|0 +zP(6&f{YjWtG|t2Edj{Fl&R{6j1DSUQoy=88{8)(b_;>I^>lbvsE+5_3|NZvbwf8dz +zzlF9IqD`ucJ?#z-gWp6)1a*c|ooI{ba5c^_IcMu_Tq$I5*;lkd{3*e^CXM&&;*O0E +zZS|lHW+@n?IY;`G#$qtOZdhNZ(Z`{@*H@z-i`!JJ3&o&|*6I@AFM>T$!k+Cf!2021 +zx3sA27L5H>{dTrwi@qMK?2*Rkb;MAD!?ZvpJ260A{4o4MSp*LDni9G}>!vaLay%jMEscd_jw*llHj +zI?1C*uovExGD8x+lZ?mFb|enkU{hYlob_&7nG#u<*}~W~P0#--UVwJ*8H}uS1(;MC +zGud2q|4DZ^xKI#&i^jJe+`-m-UFHzz{aKV +zxpX6cKat5X<|vJ|0MB{Usg}bAbxQlZn%?Q9_4QC2i+W-ktZroxdYrL?ZHu)vfZHw$ +zu~scWeYCI8cm=_NUA*(B0Wtolm)0|)`>dcl9deQ)=+43W=fyg$&mqzu4#2xHf5OMj$nt78kB +ztLurqc^v~So2CT!rlr6}^rL@rtDQyLk};pW;9s7_9kf86Oj~@aS@x+W*lt(@!|Bku +zF^oTr6Y(++I_>h?cpocKC&3ix`(^fXZkOvAr%E1zR2mRsgTAJ#* +zcmOui+ZDV{2XMKrp*_)TkN%Ow0=A@ +zD%jV|YA{!F{a2DM1poJf|6CT2!(RW;`=bq<&Ujpobx!LTm?k-TXKx;EQu`^kk +z<|cV*Vv}2A>zo020sL&1O-+_$H^C-pc$59mr=56iptg=c1_Eqy(9h-uNq6FV*n~L) +zndz*RCM#H*8>lSpTbtO4w%af+3g(6mQ8c}7LRiBx^OL +zgM;zyv2-aOyOzC&ZN_u4%u}^$e8|)nA2tnm;;w-kh7a{;u)2Yf(DkgzJ(vc5xL`-u +z9dWCp@ZBlZdL`@;vCg?`Qp(WhjG%*6#G>r|Y{*-rZdRuHalAA_IGbF{yPv9tVvR6DbK7{)ra6V;`$l{Ur`&&{bZw;mVG?+8u(V%&bPtBEl +zolPl|gJ#qZTQz8sW-Is%2QC0>z5vXOy@8!&VT>oCTo%Spe$~!y63;i`*^l>`;yE*H +zPyKRRJr{tLN>tCC!S<9B!N`a=8t;Ui;>NF?9Sz#0Ls;J4X8c^&~U7?-rZ}g)7r*4JOkw#QVqB35oa;;FRODkfW@av0;oK#z^R|5y|2i^)=7_F8t+zy%3TF0zgHe#ds0>i;>`-k*iyoR0s$+ui#=*e>;z +z`uuhJ+x$vZ_@O`K@ZL6v%~SRYcXfu!koQ( +zZPHSfG +zx`VA%)x7OW)JL$$N@qZ_<*5Fg}*2$}~wo7P$ndhWEH_0qc|sXG-LJJh7l!=ovO6q<)e8O_7Z%2CY2 +zS+?hav$Oq+c}V!rHPJjgntDhf*{n)^4r{^r^Kg!B5M_5!{V4lf`@8Xpzp1lI?q}nr +zSj*zWGMgBOeKhdU*7d_5$IoI7NFNwT+dlkIe0%(%ftQD)V<$rAN5`6GRjAj(HZUEj +zP^Z&pR;5a|wRwM~x)E#U+EH_ZV$!> +zP#^i=$$v(=&<*@crPn;a0)HJNQW~n`6ZermCHNfts`&Nbmu%uY@cTUQ;0tVf3*`eN +z<_4**KYw#rDNl(r;Wz#{Y_y$PnM~O9 +zuDSkm_|E}fUoUB`q&1V)%kK^s{D$~Jyda(sKYW5;dlL9XYmm+_!n+$dG#6n@1Trum +zv9IsXXK7(4%TQ=us%*M8C!656>gnfmNY3m)Y$Gi=1GEq?aSq3umy)8{&ucM1Z<)$% +zb=_X?&A^_ccet(n^t%JPtxUG&JlH@KBOyCzK71%-PwRFw+0iPyWe+mt{d1vXFsES; +zVGor*Wa}H1>Tb +zU~|FFL|^nh*6pBeBpZpbnCH*a)>7RzC!6*o?~8ujF89Tz0M`S1b%S-Oa!}h}avK=_ +zo$vzSk}XSZ==)U#ai^H8V}R%}OCC41!PxsdiC&$~zleIceSE?@y_UB}b@^cl0T>yKKXlw;2XwX=aE(gdmfecJksg5X8eZm+hRK17GTr&gxLH& +z?fAYIzs+pLo(Mj>@Y{{w9@FU;-!`3oUeojF$BjPT-#4AKFGY+Ge!bYb$$==FAHH0Y +zJ9S+ikFOg9EJkuL9Pb#4tgMJN0cRfM=-6;>Ul+>=m!!4Au0EuVaSQe)v_^QB@cNgb +z{@LK^m3%+zhhHN``oaTSmHb$i-PvlH6`xi=;xx6&N7|mm1-uIQlsvIS9IJ+trJTk7 +z>M;CCgYk-3t+iY|h%zvgAxjwnN!kHA4yI9G>Qm&-w@vf?W!8_pb*D~;P<NJ!Y(=;oYe9ZW +zVc4A|7tO>PM!uaEwzc)aw55HQVqWx^rU#_`GW55MHJ~7ddIkY&iLBg>?**}9mW6qJ +z&tR@B7un$}W9%KoS6u@IDxO;;)Ss!XkrRf9PCI*}fyS;`+rN_k>?7}^ +z>p73@a>u|yA*1vjV}*74Bk#j$Gx}=<&f$q21OG0uPMtmz>ZUjx(RMyPLkaZEIgg&V +z!DsZfp~ti}fY_*N+9<2_cC1&sWp!Yb(z$o#0|5{AZBI!G_H6IKZn$SK0Dfn{N5YkOtb}1JK@Nh%$Cgd6 +zHpt*3WFi<%$qY__{ngIq1+RoYTRgJT-<+~5SctmqOlp+o(7LuC>mK2>1@lri2B(>q +z`>WZWphHUXP<$CaBz(7cOd4(#dZj17z{Ohf1@32< +zpKCE5SEmsD+c1X?pf4}S*wdM?Q`%7PzVLrYQTRx?y_gJp=7?rHtc#O>xP%=bTM{z- +z0eDi{A00KL{~@8D@h&)iLdU?ZHio({jDH;XD-!Tej_(-g8J^gg%qID{57-kUom0YG +zEq_dCcO2T{zRwT5rJ{ToWnV{GvzRNdCEzF0=|I_kyJ|-Nf`oS0pzMF5EVW5`bTr~y +zn(rEZX)}Ctq)U5D^IOPI*UerH7s4)K_R^Rex{CbSFQP5dV=oLBU_O1hucOeW8*}`+ +zgffZ>|IV@}d +z8uJ{~xh9!u>(WT{$DRg1jOhSmdwRG`)K~fyG>$+!gOG_63H9|{(J}BXZEV&JrfU4D +zKm_+-z3md +z4E+7}3(GU%zXAMTCE$+-ekR&Y0)Jf?<0ff(5dKB=#gR&9)YOJ`(;Z7fpK7HnrAe9} +zrr3Ml@V@Y6!=;gsbRc|*M%yI6bY!wR2IVExBW2~NY1;Q}zeF+ES(DWf`t$x=)sF90 +zZ9KPOJnOajQ^+z~OkdGY8|dx^-3!U;Qv9z}S9`dr6r8SbyB;MD6_XRa~+30)X`nM4>v~L|Blf&t-2jK^!HHqegzW&nM +zi@XtSexN*JV1X9C7JJXFed9$R6YG8wb^lbz8qV0o=zDaB~Fi?`&VjeF?am6L1GF@5#?%tpJSdD2xxK5(wNUYFI;W@sI3OSQ(-?zuzy;mRyS~38l-jswWIHZ6au9avg!sZEPWU9PSnJ;z^ul*T@z-qFQd8ouVcr)E +z+-?y|9(sYW)#ewZiv05;lcLnyrBLbGEX{nytJJe}H7oQmk0# +z$>quE2_VHsS(CvWz&=sE=i1nY! +z?uxe}caH3{s};nTQqJ4rODJyH;O+&UY?&6UHZKp>nCEH! +zXT}=gC(cv=4u5o&+DzXS?RyQrw_|OnPMH*Z*g|&IY1m&tvSGK=8Wpe}V +zHJVd4!@hAfNONQrH*+-FSt0BZ8UBa+g8KYOmR#;+DFb>AK&9~cdRFlTpakWo#R}E3Sh_ZPPR0LODxmca_~&! +z+ny%3t-=^@f{%gZfW{qh2<)Nx`=xldUcAG;8hkA6Q&RjGgXkWL@#Hn%5MC4Cj=Adg +zdqy7euB7+`+fipaGE1dcSp7J6p=ac0$h#sRS!v%A?BgJ-VLN-e?OxPtfxJ#LPxDi| +zL@#4|8tV{Ca$@W#reu+x)N&*ptT7C{5YapvG=29RO?w)B=0@~02Y&c(EA`eoMM53| +z&AlAtBvnJUNTwv|dZirkY6-GJGDYpqj+ge3>=E1xx=Frtxu1$Q5C{Z)83BT|q{%JR +zb~fPO1RVSczGRU*^Q3vOl@<8qT!9$owHb6vkc$YL7dCI^-+S?0vSEH;{FpQ^?3bnm +zN8&qtd4V%1W5PR%n~|*LndgPbc8sj_223_pO-jaoi^)AyhDn&8_@sLFvX9!@LBnW# +zpJtwieZ_Lbj%iQf6tTF9;Ohx%6740(uBnHfbx3*2*@w8yzcjjI;NL7PLi^wOhD=*G&IxI9 +zWyNRqmMHv+$!%_1mhy_}_%7gwsJ@e!OAfXqm??F7eCF5p*rkASnRFO_*e%fI$*nc! +z<9p0fCGts^gnj4c{|m8i(Ad_zhxs4J{C}_iS~d~>@1(x?&Mi!_4_a%1i6h2Tl^ +zmKM)uMa8>a2^j0qNK5~(_ +zNp`_;Z!@DkHMavyLf)&>Em>lD`6ZCcUTWt!iJJyBzeDNUP; +zi?G&)$8tVIM-m+ev^6gZIMJM!lGNCF6Ms+ZC;SNE2=MY#vV-X?`rIqxI=RuOY&%c@28BLqi-XUeH +z(bPF%f~8`<6~ccLhaa#D`Cy1W2)|I4W_J+X4y^S#h&MNlQp3%oa$qma5Bf&Ag5Nj6 +zF0CmTa!B+0$cH>QTm&7({nUQ=sb4+Ic@j?T7#P4i!byDpEAc*v_qtE*a*R(C_F}z= +z6~phyd4`rDt`>+DG!Zu%4Uz9 +z+edwP`1_oO?hzdWw_!il4Eq$kYy3%){2KYndQ2-GCEZQu8E73CTjfJ;6lg&{)Ab@g +z_yo#Q{349_MJ9Y@$ek$aHvK-}WSQ`ldEF9oDZ0OGzcmtZ$`Q58v?u7nejhO^$jL$P +zh9hO_8rXF%JYNf2_&P;aulLDnoit0i_Egzi*)OX%hsb7gHRKH+%6?p`@?3YScJ33> +zM$h%9cFesgBCGjPS$$I4?V-HQ8<|tRL3XNs$*SCZs`l0##i?fdoa!^uM(<6hoVRBB +zooYtNss32X^5&nCZq180RaexB`M+dyvt;$&c#9q`JPVJkUb4n_DS~}t({Y-fq +zPf7bd0mV>RLwLTVUa^@#*Co4f +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 +z(auOG?a#tF-h=T82Xv~`V#AmQM`v} +zOSBP*Hp<`WLB7wA#J-g1So2xOK>wME$lsadkDZ}hH1f?+F51ypg#9M`>6r`HMR{Rl +zcRrF(R}ShbADXD?SZbT}kDfo4j(n2U0(bCC$G|&ilVlLOU6a4tk*CyywkXfw4h#Gw +z$TQ$M$Z;)y;>g*8&SS7YuvTG@zasn?zB}Nb|DIWnIIK#MLvm>T6S7^lt>)wQ1loBS +zdr%tx-PqF*Pw2et5Y}$u*-K|$Mt}KU*TR0%vKQ^QgC}0>wM$Yah0nlVB>kwSd`$TaqJ +z*lT^{{e1Mo{-IAfy@x;T7#IP4Wc1lz$X|aNZP4BY>s<6>bT5)a>UJY%!R@%zIZM|?KF~lq0`tE}VM`J3 +zt%#+tL*7MFMu7TAeWiXLgZ_U5G*F%`vlk#=X9IlH#r0%=v<}hP{%xdZKwF2PjdaXz +z&{hfBHl9Zt>9;S_)&$yioJU*dCq&yj3ADWyBbqpUleD;!PFqmexOV7Z#*>o*- +z^w@Qr*OaHS7WH{y(@BWUJ&$q2UbCSWy4?+1V*>N<^WdF~SR{=hoxiPS^TQ>GWzpR| +zH0Nn=nE}3L2_1y@L7L~8sMn3Mw8u<=j&VsQWr|eiHp8Bx_05EHQa8fS3OgzkkHZHF +zJ&U^+_Jc;~<=U7PboFD9s%B^Lvk(JI%&2;C06MpkDWgOlC-~ZS6 +z!R$KR{m@7DjinTG3g>d@oNSUO2K!F=6gd<17&9tkGy75I;7%**xsW`*l(w+{P9cxC +ze@yZ?LisxKcpGHFNq2SN4uaZ!8LE@k3;cdv{~7uB$#*6})@bd~M_5%20=LC{%MapXUgSt)g0wU|S#)urr#UWV;W +zIqOBWk_&Y0Xdt_2iupE8=AXfPvbRZA$p1{f3bN6=u^+LDy@Cbxo3%A(CTuj!Rkouw +zpH0PDPv^sC_z}0DHH+uNJ?#xXi#ZCvlXhnd{Ncd4M&N7{IE4bo)40&&p3P8~&)k6i +zz1;6$>qV^e7T8DYw0kVpi+(|nF!0d+&f`b;bEqBuL5fGv`cn-Vxphn~`b6{d +zB=YHleI@bYU=#37$je0@l(tT!Yx?lDSTCE6*wU@apCzU9r1{psC&-gJDalwvuZB-w +z#HS%w8G@gwpn=Yx9iw$QfhV7T{$-x*5j^QRMLd}n=>5E)=M-#L()DD+k=&F>wXF@% +zZzMa!)1)!9wvi0+akh$fpFkbAqRk%IHZ-3oe)YOU@t=Dje;(|^T!C*gxvP+Q0(4fD +z=1?Lpb1@Gorjv|&$tK`E{B(3CXNZ}$_cgt~v@iPl+&`JmH +z>CQd!-Q6A?hTFJ*sxh5g3@zqjw +z@NwpgRI?V)pM&_9>c<_2h->ZEVqhb&?%Q4KP5Bt-KPdMA`{XTqVc%$DD!t&g;~tP} +zu{SZVgIv=**9&fpQ)gyE>SHyA9S#R|l`bGx@3rmWtdCnlBEV +z>zM*L$yX|DiBvojeUv9mduUDWwA@7Jqcd>sb+oj=Jxkc&XHIksoQ_ZIw6NUz7Pf-! +z5JL{c)JI!K*&$Cq#CaT9U43Z|_zj=3R(6Jhby?FR?1gB+lJ{~6f&90 +zrUvMY6ZLH*Y?Ma8x=dFGM@Um3?@JqY}ViLiB +z6*d^{gPB|~7=^v8#W1AlEqIT-s;&LqY<_6huge +z(Yb=Xu)X;n9&-t{{&RwdEx@ZopD)a#ZNg7l*xH@Iqcq^_K9VehkEB@iw*>VPf6kBh +z>i&@|_(x{7=D{zL&+ZFHac+ie0Jwb2mD9=gyG0rWh +zY+mqb=+|_tQ%??W->0upWXCjNZK}oElmr_FdxNpxvYmmQq@RHj^Jc8_5!Nw%^eQ+bGebG?bZ5p@2?GkCj) +zKj;{^1Gu!#=7KMYV@neoVxoi6Bq1~@N5|K$o>B?)Uh`4b^S +z;tT@flpm9i?+gCr3wnJhI}&ZfF8~{ICh|nq!#;;@UO6?e8{<%$C99(}-@?!!*}Eb0 +z@E;N=19@ezPfoW{ju!3nxXmb`-*k`a;?^~n@jmw+=@_6qTnTm|LtYW( +zrqJARu;=9I`+6Vp95KI2{I>#5 +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 +zw#Xjt1}~-4_Mm_j`y3KKE +zW+AnsV2v6r`0%IS!%wHpRk~NO)(u~_IHz|4eV{$f58<=>5c6kg-(KX;1Tb!saW)h@ +z2F)3M#OR<8U|Wj6hr{zJJV6h07m{AbZ({^{jcD?VaiI1;zM9M4?Px!OI@dxjFuq&A +zhcyqePu$6srT!NCafZK-LHF*ngukzmxIem!@DqGPb=JwSbxKk0L>t}DqPP8ILfd~7 +zZTI{R`WrY{Cn0wkfh3F{%|pzu#zcFg9eBtKfF7Tz$zjQAXDnwm-Lp{({?{p_!!%uF +zb15fb8;K-zq6J8t^?gqJ5A&LO3=Pii(Ao|UOTG`IByRXD`Lzff7q1UsowV%NlU8t8A#G4{#MbavuJq9aOrH^C>Y +z|BVOT_llgDb8B#gu%D*9i9BK{RiS(ZomV=)9C&B+W6u?TKZtl`VeGZhSpQ(N2g&zZ +zq{(%z)&`Hyo$&rZ*yNqRh5d>>yOBPfHkvlzLpJ#3*jJH^;QYa!MEzZZ +z_kiJUf~a>)g5IWmSvty07Jam{58D_U5q9A3@~9}oaAz}oe>DE*{O80gofg_N@Vh%t +zcvF#6+ja^4O(^VHK_Bh)b^i3eL3OQ*M*t^2Wm29ZoVihD~x=hji$SHysdr>YK +zf~;t|?|d5QZ>0b?ftGC|C#+-Wx0eL_{&>mKzQ0{Ue>+KrFOmM{4UYqsB-l2KP(Q&* +zPmMx58tn=1^Uu9Mmy+obn(AV@)(@{LP +zgAWpX_SARc1;vAl;LFwdKt6Q(8&t#(@VmA8nx%boMlJEa=-*y4w-0wO?@{S*cp|rK +z9(?7qM>Y5LEBbuV|_x4X>A^7@F +z;}Uophp!yV2JL?4bAMBW;=U)nf4qeL&L!GPp!Jz9y0==phf>4&+XZme0_P>fw#oNE +zV|?E=&e;DV?%m^~D(}Sq=b1A@CXq{2#AvNdE|>rTLcP)Nx57Cy0VW|xyyLDw5>SJR +z#>KX5TVWCc4s<3-TU%*sF(|a5PDr-5rMpE32pFqXcI&sY+g1Zg0Tsp8>f}P^`~I9W +z0|TYq-QOR-?;rCzGjq;)E}!Rf|9qa$^D1i~^Xq*$-=5D){GP6l?2e7d5rb=Un%-o +z#r^ZaI!(XQp74^J)BXTsawNz*RkV4PEsM|>S?j6DcDp8D>iIdT=ks{>v`k{14m_M6 +z@vg3GrS`s=ugvlxYMl`q3g#G<_}e#Hxvoj&5?@M>|KR>zgRiqbj*mog6wk&BiJ=Ld +z%Xnq1ZOm;NX9vo6FK}3v%DrD`T!6jjvvISHHU&RL59M4Pct?`D;b&kj^jE_(ZP1^< +zRcKFOD>NpwRS!KaB>q^VRzp{tcT}tAcBJ`}xvrA4i;lG$T?_dwv6HE$=vEcA1!>UD3nabsKwiC*B2L^s|8q9A>Z|cP=&-pl$vJi +zVqyN5xm7aG^!#3euLPkpiA^!4cn}z;Vfeii{2rlSt>XP+1IxI~l}3xm#_D_zwIfFQ +zbMv9u6PdX~YTn6o}chho3LScZO0>gR`K}?pDbbrA+F7Q!h9lp+W0)qXA_?%`Ly%d%BO=* +zj88Y8pYYkq=NEk9e0uow@_Cuh0Y0zsImqXCeERsj&F2^&{CVFEfddcl{kO?voJHac +z=)ERBnGVeu-Q1(LnV++xb(SwiNv1E}IwmLb=RAasY_EV=J0=4L@oFg*0bY3QZg6>lSfw +zV${^ostd|IGIhx!+PjhVs%a0Mg}spPa5n3^)EIn^bKY(y1|st41p50TJ5PQFyzc2? +zhc6zBv#zV}Lti+vFYYz|lR9LR?eWaQZg~-U8IN8xv16~zFC1OuUl|W!OLHhx-r62G|y-yXJIZ)$a6AZ5BBsYoKX%;<9>WW*daXQoNK_@ +zk#U)SfHtHal2U%VX68|Hn7=1@h3~+{IiCKk0`nyL(|7pKnTO=!ICC4xJRawN3qQ_L +z#wuqU3+@=>q<(|shdKBod?l?PJACrQS$wkR`CXiO{OGXY*@v_t@~WHvq;?MZ!wCb~ +zb_w_)FoLhJh65LTowH+1^$*mXtf6LJb*NsI+4b&S)B_M(opokTZQx;mvtJzjLhSqt +zb&)CKDPxUpLaqv)Nqd|V7fXMa{>$j!k(ZAq8}Q!=53^Ev2a=m0zTg1(EIA00e=rX` +zhu;p1Pgu@NHCOtuLwo93N1g;VTbXAy@xoStE +z8vnvVa>|3Yuk5gm5BOB1?^uZ%H9#J?H6tZ|+2hg4J()u!zRRg~%=rPp*=e(cd(pCkm*^Fddu$w<4-QR<^cth=nC97dG^IuGNN`l*s&|0j4lYeUjZ0}5Cw_rmYn*si +zc-RbM3Vvb}_&R4a3hoO&S5v#{zw7sGNagtm9MU%MGwivOn2r;VT9Sy+r`W=oaRWI& +zN8U-toE-aSIPkz}c>6-tyeGV|0(=sFae+-+CN#DN7&V3RO@}`^`CmTdp2H`ps|=s4 +z4GP{lJkJ@=(7yunl{xGg#cvLNg5TiNB5al8@XHf+P1d`|-E7-6!XxiI<-FJ9yw?K% +zj|gw8URg<={5#M73|_EPt$+v2O7sHDX&LJ@Rnw=*Iz2%jnSQR!c)Hjv +zvSyjOXCCj#c&b-Uiv1t%3l0lD3cd>t3(ltTGL5f-pNn`_@Zrl`)4cAl@kqH}#MnRK +zS&_44>NDuD`9ZNyO4N@cjqA1qffKQ@e}I*y +zQ&(y8FHCr;_yH=j{v22Z@4OMdYGS9ED5Kn8<4{eaRh3xs1 +zeFyl^V?Qc#a7p48ik$p|#I05_28mO|x&L?C7f;}iRdQyL?uy)FwD%l?SB!Wp9%L^? +z>_r_%?^s04sKDM=@O8sy`@uVS2j5uuI56YA7JTW{e0Ycaig%@7#^c1Uq{jPydb8RAWQtwKHp{~ +z=fJ^pWuLs{bIUnu5+lr0MXlZN?wgLRr5@^1`|MDuJ(;D(_nUP;MLu1Y_^j?npX$4K +z#O(IqA?lQj*w-HXsfy!|+(KRY&e#mbc{g(VBGnGAZ3$1H?%;?c?ZIO_yPoTZ$v1mO +zc($7IuE+BXdpV!C-(95-70bId?#|fBXVUG0w3ha*G7;M8Y$R`fENx6EJs%58QWU<|bO!H!!~ +zHe}h)b`A18F@gmVnJ3TKbCr3@n3T~TFJqnR^!=7=1G=JaqAp^Ad9yabVaemKjg%-W +z%>G<|k6n{}REtk-;Y>DiZ*?K|r?Vb1CRsCA{+faGTF5wZb%S|r3iiq5nnZdmTYt)4 +zQ{pcIcNt43u~zXT{^`=n{tsPFT`^*QL+r;hJ$8I%7c{+%Jha(iU>GwDiD46KLT{k% +zXNQaf?+7~`1GOz>qxZuH_3GKmo;Aa`QJtC{!d>Ne0RfkwNjr`k2jXKI8 +zXYDhybbF6aHMW*WJRP{?WnC8VY={Rh&gwTcu^f+HXMKG_O@&W+&_(Xvk*9~uD|E3x +zOXr!n{FkTJb!G9aR~?BN%G`f2xh-#_`4tP8eHU3y&bxhb90Gh`IfL(zl)e;vzY+awYta@UxLzI +zv5xi4oFOB>x8T!h-}iOmHF>Ht+BW?B?owk4dy_5k>GbS0hQm{=qCI7oiUei&qQ~LQ}YO!Byuc@9J6a4 +zA;Y4`uqbj0TzoEy?201ao*)x13F9 +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 +z(u9xiZdV%bd|PF%VxQcfYG)+v+{K*aeR +zx@LC?HMfeKISyB^yc(LxPu$7x*YR<6u$BtCmN=`(AK4dsOg%^aq|L;CXU3|DqYJF1 +z&%BJa4bh+Yit0S?f^*c%z&|hhl>@*{t3US7hxXI7unN0)6S*~lllNazQ*|#6lP%6X +zhK@0YgWy{`Ys+4e$WHoP01V^cR5$eTI<*{oxw_yf$6OyoSJUncV?jbG|HmJJgBfjJh@8|A~Oi*~@R4_xa}AMmy*s +zHmy+O4!dtA_UdYC(oI93sx$c>d)>yjM^D4}2k`G+!(xlLSotJ9KFnOmeKxY +zTHz}P$KA7rbk-JYA-n+|fsIla{!t1acYm-{_GSSBqzLR)Fr{fO8syyP?vTn4-*P$y38 +zz;qviYaQzg?0#*0gT{oadbe3pJw(ml758Nih;$m!)tc4U!_IpO7cd;*1h+# +z{DdF)<&LW@SL*5zK3{n34d?7zscTv3s-06tT|D89vZqRFK?>}{td*>v=$u!kV87|R +z5|>(R`$VKhzuZ4pR$ZUcXCC0$)zF#n>08k|qfm=AnBhO^|1D#>nSM)+d8d6i +z?7xA=W=5!miEcQR{hq^J(tkU!@Tz64#rSU8nScI?Llq5bb4>I(S)&U*b;RM$_2JZ6 +z;=?(&R>G}}fp;VGz&DpCn;5Ml`$Si%fd-s>Hrhz#>%;cq+eTn{Xz?`pj^@=vrW_}73A=uXuJ6C8?OnUa6J!@ZW(yyM8`2O`bH5oPa^ +z;HU7D15fCUpPa)_Bp3P;-jQd@avr4ag~gt$K>0^Toz3Hfzp>A-r^%N0{+4|_E91DC +zc?v#n%HSpUrN+{`$yp15F-gQWj>uQdGS)|USTk)2 +z4|{c3blMvvCz?99Gh?sYOIzZ*5#1BH6l;K=2#w6l&{6q6 +zQeuyDbz~~^q*YTw@~A||HPCm3w{IL?vkw7F3~)_C>cKt?KUijuUuf>VvuN(MC!Bo0 +zG!K^?(+7}4GNyDqC7nwmSFsP;d8eJ+QutD5o~`$vv~x*k*tvL%p%G{Q0QsTV3D0#( +zZu_;wP`zq;xI|Y*g2?)yTD_%84L@7WJI;RC{DkAPID~yMGjoI(TzMYTP0_dyPrZ-8*(Jm^_y$J3smsIEmfxkx_Y?pUg%+WI^j*H4R%Vy&pH- +zzlE(JwPOEzt}FA5)}-=uWj@&J_+3AIR_3MkA@s`+yE5k|^LZKGKaBsNf^o`o$>j6> +zOUAv@??rb>?}d^1%}UMhbBz0#YhskVRCJn&E!s21FELi?^6cL!XE}j$GmLEX_xA&S +z*4;U)cw)-V&qt1$acX@`N{uJR +zv*MQm*68<+y&&VgICVe5{qJ+XOihY>jd7-Mp5VePc4Ojt^H4>>KER{n63pc +ztBuOYr@_UstXCO4^Q3Dd>$TKGeurJ!GLvg&!5^B|;hzUyjh6WKBo +zOW|`P)#PwxmSy>rxv%tiW5ty!L=uGP=6{LD&?7p@zy+L(LZ377XX7uN8>(<=;#{l? +z`zT?-?7hJjklGLV_&PZMyr=Lud4{T{ry3qq%~%yNIhRkK4|KSgcaXM}$_J*&z<<>@ +zdt9MuZPT^D=gt&d%D=H|@ZVVHmsmr5v_rkjjXt|x#QzDG>6u|@v9lgNQ^vXqZ<>L;V|_cTS@VVPCuq6z0P?99AH`1g+(>-Z +zr&mW0Lbo&Y8!e{3a)VO0MG9Z^RaU@XtFn&agIXPHAx<}s^U>vOnj2YfAGEBDDXpJU +zzP;kFY)~g!7Ba@MdidEqJ>2Ewv3{|YJXC0NRO_eoD){{TNUjlWm3`lN+7 +z)T`e>Z^!Rs+!txmh4ANsC^>|?ML%}hUW^}hai@=VkkOIPldCQJ3GiVs$C;f@Eh(`j +zCI91nbnw-&ZxY9l`Kt_m8g6s=>3n!RW1$Aam92N8lQZrpR +z^jml80_gqD@RxbcXPjsen4JXo=b=N04cZNSWWEx+0A5|#ag6B={IoOe^C+r-XCH7l +z#+(JGE3y*!@D2t1`VLd#DN413%hdbD0q(igE5xH4gN^t@^C$X(XJWBu~@Pi!<<%UtMP^aL;S +zE7Y~-Z51`a!h37rU(fBhR)5|ECXsLIXZ~VcyIVMOMysBoWJ~xt<|uU%CH^bAcY~Tq +zjlH)6C99VrS0Ck!ri9H8r1pixhws;%552sG`ssJWU+YXwzpEIF +zTbyeOk9yRuu`d3o4^wB(ZH?~Y%(?MB^c@WVXU5dZn4-nh5!q?WghKH08G8>N_}}8o +zsN+%3yMntLfuCcyIOjoE+ITIp!-~92Ob{7D8(TVGL}$&UrSs9zgS2%!^OagRz#y8^ +zJIIB6#aaL^-T}^~#|X?Kz$z+ZU#n}a8fs`5;DE&OzHRf)JHx_vv(yK6d@oxUSmRY_ +zw`+SSC~GG?#I3(Ytn3c6(bHpn7Pyg@5|O=1z3`2oUdPXa8T?ORfDN1AUi-h%|1|xs)sPy8 +z_)8Tv5UHDt&GCNIr&Zq`mugw-2mi_UsMui_`S=&6M3NHA1SDD>h!e*`K?5 +zZ)807Qq48Z&|X~(oph+4eLO|R+g82W6Du^{vaVv^Xn}sqDwrrawsmIV#CTA6wOg+> +ze+I1=Z3qQ#*L(c3X4mPDts-4+3Vjywp3o(}O<;(vhs>0*YBhRb@24EuS;ZJ-%wq3X +z@)7*V%fO3L?h9Vr#=W~4ztHq>a^ryL7eU>WxI)Eu$A{kr|K2XXgdDG(!|n~e!|up| +z;hvTPa!I!tx0+8Im5gUwV#N0LAjdus3)(^+U*E+pJsZAsmATgAx2{6JlU#=Zd}-)s +z+u3^r-_+pp?j2g?F-G>ac@A2fSs?sj2)MSi!9RuPJN15+0HH&OD-m!QFAN*3A_x;TH$XclUHeah&Pw$|un7}R%*cIqXQ}9w`Nv50; +zxze4IHIBTUiM(A+j?E!zJiQSq0#9Qxgx7wbQ +zYI{bi?aOI9)1LA1{{i${(b7;NS$@Y%f2n4=>~L)!jOBrkKBl*iEM~6TUVG;o0>D9dgMG0_$c_bXlRDs%=J-x +z8q@(r&LzYzjebjRS4&<_0djGPoCy_#U*i+YPvqqkQjaKvZ+5tAy=vdnp`MF$gTD#( +zu#4ZH^G^~x)pM~MiSruZBYWC_`z!sI@+@avw6v=$*-IexJjL!@j7~l?B0e0E<(p_n +zcymcu>voFi^8^X_K+VB0HZE}kHAg#tP__n{#&rxxz5pN^JtfT(c^q^AKx``jU%?s +zFge1y+j1vGQw^M@#*fgI(5TY0?7FuT`R{t&w;TTryhm{HCVRhZn-0MjuT1&8zc+m4 +z<@t&Amp=~OwYLPY^OveEb8aL5>1u6?zDX>=*+2aBvC*rMaEb#P^8v(WA$ +zJDwr<_OCo=;}h}NDYH}b&okoxlmGkpzc^JB;w${GsAnTK>Z8m}avs5#jz{D>yrvXb +z%J|8b44vN>pFWdoc}tm`{qSG<>^H!t@aMx1sLeS1UFI%)=WCb$bl|a1QAga>NPNQK +zT~jY}#(r?E$i?T#`)!97CfI!L=R7OVneeG#>bY*76C4+RJocd(V2$DrpGbJY&0HHl +zKTSNim>fYfQpda`f2Sr*2hh(bO@1i2=vG$95WR#N@%)Y%`^;d6uIX{kv0)t8I)SV$ +z@Zq-t+r|dU;Zd2d{h|Cf{T#eBs +za2U=77iIqGGcGExm_AT=h0JXpa$q%an?DDx)whxBQ~~~oKVNLUN9{ArZcNR4XA^!- +z>79AX{*+DNqxKxP>d?Pk#rTTQWByDo=rm(uNb0$H +z$eZnDUM_OC%J`2MMo*vdDtfERJ7{!8JM2BcQ|!7I9$>f?I&ah~Oc%a;^kU%Pi@UHH +z*@I}wxrDOULU@$$CW&FlccH~!^WEh+Y;A^jllK<#T=Eq4pljgs8|}SMN|lE^+o3U$ +z=X#56ml#Kv!0Xral;W#m-tg7Mz~<4Rlj@Cr;guc0R`|VFZypeSn+J_c9R@JW7Gv%k5TdaSF|unp%#22ZYTbYSS!izD18ZfcoZY<>KD>_3?q +zmHj8xYHR0K=8o=ed}6hhOG7 +z^wJTc_8k0AeC4u7&#-B@k#p2%aweW-d!g6gN-QE{QBE;kqHO! +z*$9l%aT?(Pa~ZoqepPIZ!vg@~#kZqtvTr@y4P0+koLB5q!CZACJbfx>W!47QYV2I_ +zc0RN#HXZqA&}}WX;wm_MU`hNI`YACMM3$1HTyT6g`hLK?gIF}@(x6i)*1EmZseL#X +ze7_R9pN0Pqof~}4_xPasI=dcp0k~gdJOpoiwnb=P)>v>dllHwfUWz`jWFXB0uGK&G +zr)m9`)cjsvjgQ!#zrgwNf!jFC;PcEiS0i6oFPCS7`R_I@?P83aF{-w8-i2KIpY)%G +zb!Pupr~0p=|9bitxw#42Yj9UY^kcr@LGa@MIQ;pP929yi!KM~E3}-JTCj3?)ZtFSD +zI=N}5jD4}PcT4ET(vSOV^)YvE$Og>Q{yJdz8Q)`!;F{Z+<|7GThww&u<{4s@=W8REHst-i^f^PX +zMhDsqjY>Y0_`RMJ9l@?&iSCQOBs$?{n+L_= +zd>;HL06!LkAC@_r_tWbkb4~kt1fE}^PstAvJ^z?7Ej$HTRX`g}p84h%z==Nc_!>Fa +z4&Kly>x&K;>4PU|Uk(1af{xR$BR}q8=$v{i%x8MY%^ExWjvAos?QB-QJzi=Xlu>h0 +zbfmNI*S73Lrx$tOsZ3HkHNWN*;{Z7Lq6CMxH&$&3=PM_FRv71wHnt(r5&PA{D +zaQ-CgFEDA;?Aai1K>9L(jf~?ec&zA1BRqt7==VFE`}YZbcMD$IZ4Gw`pHAb}A^sEH +zOMDfgW3jG`eGz!WInMZsHl1?f+v3AQCfW3TyREZ71ief=4cjjOdx7JtDO*D`Q@gJKm->{(cAc3weio5evGz279ajyyF{rKEor?etuNsV +ziG|SzMKAKfo4oKpnO9mrl6jS_vVA5Ip0o9%Ql$<^d{D;uTYJ8bGT)U0v-u8epab-L +z;BwLO_6jfcH3j}*+9m!zumC@^43dx +zm+NET;v}B8pGDRQ-*=uz)~RP=Cx&MA$X=hcKcvG|9l0DnHPt8!v9|WPqJn=?i^IUz +z?p1rk@YQgxdWQO7Ys1C9cv`@#DbLkg-laMaTMyoEt3h#LfJ_xT`yR1OA;4@pp*-!&$#8Xv5N#*28)d +zv9gJNv9c3b +zD?I96Ur=$z)I#pbnV8@~s1RFse%1=|#ADm)I7=ZXtJ1XdAjev>;}6&2&sc(78A%R! +zz^n&{j=A0gCJ%IW5}Pbyzmc5NxXS$iJ~nT^;HVq_^3Ks6iL#tyoWB#Kj^R4^|6|r1 +z_);$Zl>O?ha*wA8w!f6Qt?%qdUf-tgw4 +zb=7hIf!G(xpOu^;KYEko)3R}HUpfBZUYEeCJSKDNbyX!gXagSCIDgcMz%<)lO|O^K +z(|XiC6Ma!?%``dWt|Qwj9$D$s3avrjEdWO)M{SACgUQ)Ojzp^*_?GjW#Kkx+c +z=-K7L2ZX*>-`{#8ejIzC0A!DuF)gS&$3QSdj~kjj^M&xmw<3!Dd5z`>vJ5I6c4 +zYN0Tv$e67B;6&gT0**i78OiM;2)55p`|_;hxu3!7sH2+Ojc9hXLia5 +zojWj%HRHeb8gLf4pXTXrE_CKAeO|$PN^ATe5-(7!k!iOvi0_$-AFMNtz{<_Te4 +zEMpP>c?ewiDpvAaXTxt+zq~JgJ&B13&WaBDZO`}t@gZV&^)>6}3YU>HVTZ~LT2_5Gr$Q?zG{NB(Eceh>t +zrdyRqnmkXNlV#nJ8>ahYq|DtADbYu4xzRyBWAB(f@Y}d4dpYuTG5O_k-dC|{=t6Uu +zXRUb!wr3W);ejztkqP=9^KQ>N&J=3zaqAvaYBTYFtVC^y1l<#3ru)TM@0dFFyA?Hy +z?Q$XG5#6b8jN~r(_+U4A3hY`gLxwbSI>4fcLq@z-LFdC3<&NuOnr8h36>y<2qi#a#uQ +z!=`nay{9af`Cgb+;MblD{peM!(T|LQp-cg=a5!4?cft1#)Yp~WNmSFAb8aVKQ^99Ovv^Ji#AXz?C7E3h@-oM +zh1piHWJ4e*b!FT~8-tRI=G7%;7I;1az10KmyU|w!=aup{Ds_~8_Vd}srv&_Ggc +z8BF%I4<+O6r;_dM!^se2S!2g{)9ZU+#V$Kv3jgj9{u5--YTz{7ud^)Rwpn1-CHlz7 +zVzbf*3`>BaiEIxdzdNV}wuy6gJm}6MgL64ErWU_~KdaWiiT!Y;#$=nOF30}mxk#C= +zf!0%YG5h;}Y500hs;}Z}Y>llpLc~rcN2VI{Le0gYihA{IB)d3-uhSQF%@sZ6Zfu2o +z>tb!jm3k>^=m*Vq_8N|)?}fa_K3#A#AANGSmCG~IU#`2R=M;IDC+EI`53{$^tLouB +zFGW}J`~mhIALJuvh9Bc|l25uWnU~sRx4L}s5Mz)wC1y0$_-d$4zr^n&5s#i~y61+1 +z`D53Wd-Newt9ab2=8*65Rq9}d;t8(R>ZO*c#!Kjl&AjuQmJxH~!ApthH;;Y2d<1y} +zBRtt?;@A^+RC!%ceT*XOH@O?4fLpd=;IPcpG`5@k%3W +znK@3!s3CNF`SrS{=ODSPSGYu%p2V0Bx9GXR-KO11kxTU%$yZ@)xsrh-H&w<@UmRqPkh>1_I?1ZM4 +za+&#TBE@sb1CI0V%lFx5b47TT^%ML-zoY+Ll}#?$81P;7=m~o(CsxFe@#Mn~5uAIFWpFw;Onu +zY)}QucunBoRl0SA+Pxlqb?8ItTzhq%HO|xHx5#01srY{Q5pq;p;8RTI^-Fvp +ze2>VuWPCEV|KPt$+N#Jp3J$hL!oW)M0Qer$o^tbI#=evPz)!}%F)FqQ_(L1dV0ZaB +z$FSJE3thAc--_fKLQgFRU5AR{sg=g;05QIro?OH1!EQ->jNIEqAM?PYL#_}$#>vgr +zV?OqYPu|+bxL$Sndg|SiBjOX2J&&@+3t8jahMjeEFBe($s@Ni}@UkfU%B~Lu&qAMD +z4Qw|@;ayR9SJaoP2_-ya09*D957E(+!%N^-3nID7+b?4i9@1CwO8@&}%d%%K!v4Tt +z*>XkkIg?mVwcxFh +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 +z*AUkb*DzOH5j$QZcIbhR7BQY?!7akJ9sGb=?8 +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

ZUqZ<#;2FCD+(x5!74 +zjgAiF$VYS^#+`GTcS?Q6O#azDyd<6}H($P9YBvl2scn^Y5}x`)a&FV`_yzr>_0@Ks +zmHabXCffSy9|H~7M4kFWl~{ +z9I3yCep*HUrJR>u2MzBzi-wK4HSq8KwvR6+DxyIO=XVr7B3_TUN4~Z?S>vCita$r4eo^4>1mi5!Jybi-H^1?3!O2z!C+}eTV|%y(w?aX6vYcQ_PP@S +zIq%Q+0)a;9oZs*Kkyn!McYW7-*0Y}VtY6;@;uqyEEsLOHb#j=2LAN +z*qet>?akR&D;8-tJbbHsR8vI}n|*K>wOV5}MdmH1uCsK8KVd)kH1>Y<)#lN-)WhuYPjyWMKFOP;%3o!WJryIr~3WzXHts9oQ=+a3HU?aZ0@ +z8x1erY8N?oyOi45=WbW8cJ=3OH(TwJ=WZ8PyN+|WJ9;JUvgdA>RlB}(x7$p+fO#`s +zXi91Vk!r`bzBF{B{ol}OjYgM+5#@9^otI(}->Y3AePFkW{o2w0NPqhNxd`B$j^0#q +z8MQ#p*n3gud->V^v45;|KHndq@7a;(%8WmmMcq)3xBL7(%QNXA#2?ThIeAHRS5jUQ +z`G~qaf*LPHg{|Tb3%N60@7$wYK4El!vfgS*SU+qj!?@89dN;l_^eg1a5_Es~lmw=y +zDmc&1XJ0F?Y~iX%&B5UGw3}z&-OJ+Vxnad1TCRU5JV!nrIv7lp(Ff(; +zbhF7Af4x=oSM+Arzkw6{G+HWvP3!Y-#7B(eb6JO<{}_ICXBs|K +z17E7ax3ES$YJ&BA>?!z@_7b*S_|7pWN22^)*IGBgpO(U(4o^#P2Kl^aA>#(1kCAP4 +zPWkQqc4ca3pS#`AOxo3-yWLOJE_v>D8MW&;ce`e_%bvU4t!meI?siwHojDVSqv2(o +z+C|RY?zJmuXP>*>vuam=?si{MyX3jseOB!{&fRXV+GWq(?qap;J9oR^UXBkw^4uTu +zshGX!6rVaxpYnM?*f-c{=l|Euc@%R?81tzSYUX7&%XC2WA=j2aVW!QiV+eHOOnq +z7qZHlPLND>ZUZvd!IKrlk*#s^9$}l9=GJL&VK`XXbG*u0l`25~D@P7#M8}>RrcE%G +zE?Grh%4v2Yfc~tUy{x^j+({#Ix^3or!LSlOWtr)@Bk&;gf$o&{YmkXb(MLq-U$W2^ +zbO*$#6Nl4?jUZV#*MUDuzM+40__*{JB`J%V*q{C{*wT{5wWG-wVv+fAmkB?RTf2v| +zNV(qlS%$8x#M&DlgI?G4-w!@t?J|AKa?PQo_7Hw2_<(dRM&^`$UcTqDs}YBo=DwCK +zN0yd-QTb%RNebVB8rP4yG&2-zcxo&*ZP`wF*QsxQ!~Efy#O6uQ +zKFi!2OE7QoZ`t|Y^KzZsJVQ9V&BN{K{5;q2oc8G#sf{#)afCnNRQQ_#9I6*vRn(kA +ze;upGub~cm$x5gHoh`)hU?2Mtu?d%BhxZ9i#XEpU!*mlO4VPXPx)pr*HKBA9dc(Oqbx>CjX)U{za^Jrs+sD +z@i**e;ohMYYk_m#CwS+teLdguKen}{F=8@u)VRoYQs;h*!zb=`?o1=^NmaBLUqNTv +zi+xrx{3+Q%%Bc^vQsY2lR_Jr+F|Y5uj=tann||)tA}>!9*NKd{1>Q0@C4KZ8>}A=d +zM)Gad!BA}0)(Oq*=ds}VbPda?Har*J^v8HOaq_xs53uPx&>5ujVBBTl!AMcHY7{Vk +zH$Lud%bnAUQ+tj-4$k~Ippo{2Zr&+3aeuSX8tt{MS=BnL>aB^k&Zwj{0ll<^4JE?e +zK9Ze)zrT3BF_F#~Z6nyt@5OIO->Cf~RD4QzEsuAh-UtBYV$C#>b<_ +ze{y+Zxsyj09Uyl2FTqbkp-8P|9!^^G8WPjY+taG~2HhdN^R9td{x&;4{{0+HEnraxiaeu=uIBC3x?Ka96kNe-ksy{-&>{c%#5UE77RwvImUn? +z5Sof_t(^_qk>Y|j9?Y_L3P$N_%}~RRf}t4e +zco+AU8A-(xOXmQtTidWR{|)hW>qxHgr~1jX<+*3OKUS%Ai>+}Ah8n<6ebx-^aq#n@ +z(BA4JD4(Ik4mj^W{w+;8yD +zv&_}GZ$Xn$D-h2!k>@XGzbRjU+UQx(TOZ9WXg$H&Q1fM|G_x7F0#9C%*v6Vt$09*& +z0`PS?@CES4oQDh~_%1Rb_WV+GtWV~qFwS4GFMgsqK~LIW7Ie0rZv*_l65bqeXl%m> +z8e5tYO^LQdS9c0$(9mrjElm^M0Y{Suhx)wNf#n_t7X2?+1czV{{knKtDmg5nbV1@Vs%7=GgQK#90|Rht9cvxfHjP-v4IVtvhw(L9@QF94EkF_L_`TGlga6$em#^Lz +z?K!@|Y$6V!k9hLFcnNF$Y1UMEWVGHTt8CW0dc=AkKDFMKDeKT$H-&1e@n?7L{^iJy +zHol2hTD8^K!kxOWMRVP;c%Cj`yiY<48_moP<%N2f-*bUWb3r~#YkxR0C_454ItJ}6 +z;Z<}ZzhRw6&_3}zhvSl07jc$pygKrnb=vMYJWES9?TBDkW=!6-t_aoJ%BQ-_bj)35 +zl5@4^PUt*w=Nppft>o+`ws(`{N|TbVIs@YFjHivURs$v|$90q3D +zv89(m-%EPQC8zW;3(?_%kCQ(CzvNmM*56*{`uP_a^Anr%ocDjEUy|KH=Z?lGXYFP? +zb>REr@BEqDM}*k)Zu$x0a9QW%qO9DBKASRlOW*3XY*YxH1j%m7R?u6OBdouaqS5ps3 +zYtDJ<+)?__F_n2bq3%nC|HYfIB{+EUVe$24ZM^?e;1O^A{{oNk;E9|A9^=77EeiJd +zd+46zPjr8$a3tIa7lK2$P`zm%AHt7tB3uX$K5n$e!bjf;cYQl9`Cxn`dGF#w<15D} +zxdKLvuXWP;2nN9>82okd*9m-g367C#G;(cvJXj{31&j0v=B)7p{}0CB;*I~6i_gS` +z#!vEW{Io_%_Td+={Y?JZ^x6LrH{M@uRBKoKLpdD=jkm*TtM5obw%4v$fO +z0s3!=oZ>I;bJ;0JK0g~?n||=C8`>URmRk)^&1d{r1%3!tDKc~{CH>#hP@P@G*(p15 +z)LLf;h#{I+6G=qhoR*M{|2N!CjLAzy@Oc$)%Om&R@8BckHAuShV_70NCCb?u=Nva)KxsPkU)E(je?RFP8*A9ZAjs-$J`!L*jz6HNa!_xtM-Q_&a1 +zk4#CFMHV9C*7ugu_wAtwZbhd5i5hZp_(USlT0Cw1>oKJ#I4{mNhovAEUv +zhXq0l61w9BfHTay0I+HR!DV67aZHtBf$Tsw3E3N72)#R;ggI{gN +zmiq*LMaKLPJx-Lfd{3;=;pfq2?lFnoyjzVQlXUdNc%$!|gMGYVgXE6}tHjn_QTN0q +z=kGl&(ld><9*zY~cHh4{da)n1{Hx=m%~{MoQcfu8^rsHHd@(h-=lJi*FOM34Qxw{hb9Y%b0ME!k~<`OMEP6Rc=zsQ(B7f+8|3dUH=kqADJBp%5A)K-mB4>R +za0W8wf^-?Wredo(rn%$W*%IJhgp8gpu&kJCrX^ +z8wh^oVJSs#a2xm9CPGXuIkD)fy{+Fg_va=~D;OvVe%1bS=uooeLsOd0lKYzQxsu#x +z#U$rjrWCnvn7G6Hof>VrOP54cqwQ_(uI~A)I&B#*emH#L$U1Fr$G=Eh@uwW}((@JW +z+Pw22`B=+`owJPRJ=9oK?D0={KE~YLJkDI78m88|>`{vST1S1H3aeqRY(E!!IFU`7 +zLYvlC +zpcyVU)I_=>9j%z6dM5`P@!=YW|Hb&{w=Os*(ORPt8|zU&L6l0V?+eI+NZR>@EEth;-DbrrCIO +zJdVyZRBD&;et+Oj^sL*E&)t2ebu30V+vJ=F(boB%TvWg~$H3+O!1Q#nH4|F@am&Sw +zg^vgMA#Cn^k!+H^xsLmfkGl;#^Kqp4s8)2XM{7Qw&hzlpIjQHk@@UG>Yz)6Qvkn*X +zJ$#3KeJ6gH&pGs?oJguYk!MPqsXNM^+-5gJPti#mpr=D|&Mjw;iPnPf{wGS3#d;dUL<&YzC`?E^91VNGgc~(zwr%r?!HvTe?aPUW4@omud3rw5K$>K$;4-wxya@qLK1r=`lv{eR$;>~gKctF^D> +z`=s1cvjWlis*kKZ=sJVOSxqsWM>>ae9^Hojl;*P9J9GX!GQ?rp`?RM#^JmlEjc3u` +z=e_!1mFMA;fIPn%Um^LF2|wZq8=UcVmcVz<+WSX&r?K}rV@_`s4;Q~EW!y&K(l;KT +zPK!qq3)w7wT@rlo6t787q5BD5btchq$@<$*4D>sQRZ^-va_Ag)V&|O-7 +z;F60apMdPWCa`3{wT)G@aQEG#-2PU6EOs1P*4@{)+iTuc@IHTU-p5$@>9y2{`WT}= +zhCY6u?VLmJOLu47F$HfGeN>$|Z66g}()orRd1>*Evu&fh+M=7Xfxjc4-e0A+qf2W> +zN7ocuYkx1`#5$ai?5Y?~VuwzI3b!Z9-wa|;s~Awc)@1W0KHyL0uD1RVztDQ4nsYrZ +zA2y3vQsorD-#T5cXYe=ed&~Mb`E&0ew%}^}jY+{ztqV=HUoZ`GXCp&vO#Cvkaro*y +z{Ns%I1pDo_p%AfQ3)>Grqrb!LYdeGFE@lJ|opwtnMhkr)GSZJsheanK~Q>MIgllG{J$fdSbC +z>#)CEi5#JRE89yt@A=#kfB~*5FKV_C-#fZ0C`B0*p_8q +zNtt(_`4Z0_{Y%OHiq;duI?rx4*@e~U245?Pq32v~(^q#VaCW0xijJ>J@H_K)VE(Rj +zS)OhsYktsD#<Ln;g +z5Hxb47X72{cTZpE&bf0uHhbWa+-ngR=(jf}(y`5J(@dLuQ%~%k-S!=8$)I?p+DUg6 +z2wd*y>!w7v<)%cVrcUdOXfdTVxcT+i`ajoII4ZcLee +zVt0}|1};agQ2ia9E#s+8cQg664xq0ttw`2L_czwM%l@XNyBv9_D#v*COf1WkaLAeA20Z?9i$1 +zFL|aZXSYwu)U~h8taQ$9eQ>N>CuC?in$mf%d(xMY7xdjq*36yPvG_~gytdQ+8qQ+s9y+l_ +z&s#QaS!0X+H0gm8{$5L91F39p>YM`4g$7R0-_VaD^5;5@g9Gi$Hmvh-u#kTBt{%Q^ +zTbk3`@iyq^XI`vfCGS5CE)|R7$0ANvEPohvpkec71t +zkF=o!hli|17rqYN^ty*l@wz*Tju7L%&+aQYX8(TNOVvjTUb64t?_2V-)qMBO+xdUx +zxbd-h`Cmtl+0mWI9}}BsTAn!1T>ixQX8aSA%&}*}=Gf!(|BcD!*q6J_kH1VFh)1TG +z;NNxt$7bLlKSJ9V$Guwpg`(c-l|^~6p@Qczga+ex6uo8-6a-_7@-L2mfoFX4kGB`~ +z+PQ*P?Ug+LtNg3u5mWk)zb|;+UQx8&UPOI{J9sylcCQsYK@2X>`F%_N_p8I^`ESn6 +zf6)HR{3F!`W?i@B6yW*h&~SsJo0Y!24jYT~vC0`5wpPIF-MxErq1OG{q1o+L=98Am +z%2uTR?e=ZX@ACFT&s4UrO=*t=t$;lpxl%m5s$KaS=6Sjx#l30Y&)blPU$pYvsZD~j +zr2_}8z~CEJ$s@{B +z^P*Kf*lR5v++{sJ*ln#nzTGN0{-_l=-ew&hOj&yezhngl?z0Z(28Mr_8^jOj!6&nc +zS$EejxawHLf{#S%7py3H#(uMCMvVTSnV0{RJ!wO-c1lf0Vv=#JcSu(v&DRnynE>8qi3Vx*qF{(`=uPha5m_0hZQi6i>&USI#K +z>vUi1A1W~a>+AFhT-!Eor>|$MweY>SKp$FN*Zl=86iOz6v&E +z!PzeR<9GMf7Fa7i*p6mS&+`a(h@;z$Ir6nHspccJv7+g5a&D}*>7RSfyf$jS3>Jje +z+r?(zmzNg(r9G9{pUIKF#P5rK#{8{k#%#!k@k42_DPBLO=PvWWG(7Z%;eo;ia8rx7L3{C +zBu1t}?m`Z0I`Tl`FKF}m;5y<%XCfo788+PM<$E>tWA5I{g>+|-%(G@_VS8!kceyuA +z#=kz{`H2;q#|JKdV;i||o`_v;y%ay&N31DyH$Gz5WsNz8yvdnL|2Fc;V$K`s?4`S} +zLq<4#p4^yDF{XSB{G7Fod^5{B9G{p!qxygcmqo3kdfJWQocai7iT37!_9>}2c1&x1 +zgnS^x132|uIfFP4l(SO(4U>D|y!-{#-@MvC_anK<^dlLwkaL}RZMu*->g?std_sCh +z$+VwB? +zuNAGMZ5eH=9DGtro4vJ)I3KQ;FI!s{~kL +zZN;X6eNL@%v-O#!MKSwOQ3G(t>SGe@r^PqUGvqaR +z#@CUJ{~}_skF{5&H!;bNMX;@B)m|`3AE7wrH_@-pZodWG&Pf>r*+l!-HdeL&O&Zu* +z1D0)D_#dLPcre0Tu7c;94JM&AnoI0`(5koRT3=?})@6uo{Tg?*?dZ^I6YUSO=gT6& +z(8n0Rp8MBf#$V3(%1?)k7rM&+HuqMIr9OY{$UW}bKMbzLGq_ta&rZ8+pAB# +zTgtmt(2#s;w5AuE#hvBtpK`{)p9vq+#m?Um{^rh`(*GBq!uwkA{(bO%OQgWTyV;{y +zLzDbabP!&v_GjaLva@!#K|5Q9L4&FL!i*}+JCqLkeHF{_Mut=Rti0;{@_A7Vjs +z)at3emmi)tt4$Dpi+~lUT}dY2G_@IM=(TZ8)FNm=r~Os#Esfk+n!0)3UCevpn0fyY +z@9*G!iu0tYJDz_p^w-cGCOFLpr_J+~Ruf-mC +zE3_kBsp?Go^5t(&y7$7rKsQ=s71?(Nua6b+a}#o5d0tIxgxZC=xF9fws4ZMn~mQ!7R|5sqccfmgNo +zc=`@Bpt-ZJPN=4E=YzEa2McSdm8!Y9=jG88*c_M_=d0(>{+8pPTJ_KN{=|JuFHKUUw+yaIvtH2xqsOv<>|G_4N{15!XM*S +z`T=)o;ZE~0Rs_5?peueGS!2eIZ#X>3g}aKj_w&C`PZ9pt*{8EiG?V=5Hu6!3h9(Y5 +zrzg6aU}g|vJ%HFp27bR~Up!63hw29Ms#X#a~*@P6nIu8bi0z|cncksPLZmt#j04rJr^ +z^%TO3aHTQpkum=25_c}W$E7ox)1q(H_5#nhKyB*0HXXDHqfek;YCV?JR9Gboue55a +z8}QRQ585g;)1iOSqKl6bY!|D)+K>@W3Qdi@)+nZ`26^^2$rv@lA2vT5-@3%=zb?u6 +zyv4t7?-@Z~U-#ze`wVElVc^kt@~zDj$CBN}d$8+br#JI+-NpEF<<(_mo6Z);;3?I) +zb)oq-HE*)JinpcZ^UD3Jr3?d+WtQibhf=n9dJ+3ieuLa+q0wczvHY)Z&u&LO5oDhy +z)A`m>cxMM|7;2H9F6ZG+jnjwDKT~|@iT@lyzx9J>!b`4~-tJ-x*apY$0(RNZC%}if +zKj43OJ3chS@qDN6QU`w3cg_pVqc+N+xM5EX5XYg|=-&*#!kk?n;*t32AJBN0fFG0F +zRczoxo#`0;b*i=HrQnr`dzERULIOY4(g`4 +zCDu|KhuKWya3}ofQ%;SRpMGfC+{qV~%+2Q>8KLjlc~jDM-n{fw>qE%x59O-zj$k_d +z0&;oNan*_aO6U`Ip4CLXwOj2+L$6nVBG@!P$QU294p+Z2{Mhr$7*}I|-1>rjG0(pk +zI$XVM($M@1>HpDCuKK665sZRGaNa`h1Rth8YBGzq_80eMls94*`s!{|(p3!al%9DS +z^;J8~VTUF(f6W_v^C|w4%_%13TE#R|S5h){9Xi=4zh^n$__+1?QJdGkk3Hww;pNl4 +zc!%;vcbiyCC%)U-YubzQJ#cuERTtZwFFlgG?-tU>0`~hy-~;XX(~+fIz9U}Kk-ucH +z&?>Z71*gXf`Dx4*4!-mW_q&z3RXZl}EpvdM-Nv4~c4*O8qv^>`&T4CLf{D?W+xF-m +zdX5)4e8%1p<_@O31~#?}?NjYR@h+Edxo5k}uihp$9NHMcvpVQUZAX4P^1HL~(@6Vn +za3h>(?&3o}K75-Cdw$1k{Mm1jt%b7?dOewJ3lAo+qX`b3Y5qJS^p|jKgts~V8r{Vu +zt^LEL@S<6cJRsRpHd@)2<>-?{DU`ZUt6Uy*`JfcZ?{aP +zes^8oOzy|`Qn+3Evo4(uVTk@^;w=s>t;`%R1uDu>P +zS98|fHD}Rz|L~0T1ZZ%!HDf?ICzQXU?_^mMmtDnQhfYt=PdL#0wU<{y6ZPiOoh%(~TBxCXEZz{x +ztG*MMC9lc1f2552Aad_<=L}Qa=jY@n)8)&$2L4+IFKD36jo_}kIKM?U+l8uQ8>+97 +zt&zG|y@l4&SVL$-?9a4MO!YwV2D=8m`#`bP#op~Z|6@F_V?V4OR=tOJr!7YpP>w%? +zF|FXY$(};r{lizJlf#?%zrr5R|I$5O#`%8}u^cveJI>w%ZNGN!7|b`#d-~1pkX$3$ +zmJKHiT^Dc$B!J)j-lfS!e8)5HHJ9b;fyw>W!hh(}^q7!x_#WyqlX~a!KV!CFbG?%} +zRB&d$%f4@lJs8@E%u+k>L+)u~t>w)7;h5+FTS5AIbZG{E%>Xo@Z{>dn{($WYr~eOH +zfAN7vj}O%I%|Cd1*{6q&_uP6+qG`7dyjzP&cu^gDpZBb$o$9a2ZX?<;CerGzXSCWF +zi+MXWQ5+hE#{ip4lLnb4?2Yg5b(dD%J$?ZGvr1X!SbswtP4y9w0r&hIT;RiY68-K;t*3lI{t*5A;6){~=wr>P +ze51mX|08r^Sx%_;MgD;oP-MeJxgLe%GmsR1r;8St*e0IXo^G)kpV3MWiO%!)? +zC_YcTqsAq5Vbq_XhoT+cU8R8{#TzPY02-;Upt@P4ed?;$*#V4 +zUv_lq_(OPlfjOM1i@Wwu0^gj)$~XE+FD5T4ALdC7^N0Jd%SB%z|0wyGSPRTb@op1M0 +z&q;Y*O;&y&mO1tHc7a7hL|WakWnVceIE|sZYfR&v9a^&V*~tZ~^je>qM8%3g}0? +zd8|W|x1AUsh7aF==ccv9x$&Gn0Fba +zVJ=#qsB-6Y6@A^rVX8GiF7DDgbQVuf#ikKYUOc_CDtzY$^5C1mML+A-UwkJ#ct)%Q +zT1Q`f0viSMtso!f4D^AK-o9W(`e3l4H6Oj!fnXtca^aq3MXC8}RbSx2v;An#anbC7 +z_Hn6q`R$HBIv=cH?2+`u99uXyT73CB9G>114&Mn++Hyj0XirZX0T=$E=Y;FsnJ%8j +zjezSHP7IDaH`zv|Px=pMeX$v~TPgRwOVhg7RfUTNXM6b*#dmM;=DO>Rp5r`E|Hx}2 +zoQP-t!W(ll?{V<>Yj5p9{f4m@Id?rT2!M%y7MZtDm5FPec&Ur(5ZWJJ$T^G +zv0*m+I0FAcm)%)~-?k5nv98NK`&!TO!u)8gm>4)`{>pKfU!G9>RC(~ujl>W+K4J1v +zzOKae2@`&A@$kEv@8!d+Ice@$?h-e8u|l`9H`%b)oD +z<>79=*M2(?=uhcf_4zg5oN(_Hi{Z<64M^Xiy{5fb%RajkTUitKl8cSC;Ua9p`vcwS +zY52@2zrAwj7MK;ehpbm^$q&-8>y9%flEkL@s$FFrnKqC8SQ)G)hfj5)+037-dQQrN +zt3J!{1Ix4WVg=NyDl2SGFve3h_jtWi8)6Nhfmn(-2giPCS>^UexxdH;yp(%XIe%Ng +z$lgmRCPTK(Du-V`(Gum1*Lo|?LNZHuL~YgWhkK4s<&56QIKr9aHOXqqD~~RN^Q@%x +zO4SOY9@}rPa@QnGY>0T9V!>+JCMxg$qo +z|I10oSu%c(GlzebF9Eg71=lWUEeWmZZ^;Pjy*l8p9qKv$>WDoq`Z&Nd@ltm!x112~ +zyn(gU9Z|HQHBA;)ru}u-`f_GwRl{22Qy-OfGg^oz+*8jv+7!Bic*aO}C4cMwE`MP? +zD`e05e)GI%|E?Lf!Qbu~-u?%U0?vB*%OAr}USnEj2XggY15MOxd7bqaUmmG<2BvfB +zuloDoE6mTjBT}omh*#B+uh75uYQDPn-Y~-F-#;&GVx|+sA!nG6XhQr>JW#wYRk#uR +zs(8H%e~NL?&*Wy)Ho)&Fae58R(}r(pu0HRp!*@Rg94mo?*rdU_56>EGG`pW#t$R0o +zI*Hzk*rLt^-*v#By7}G7Z-1N!yRL$e;TxKu6;@+{8E7|2Ae~ee1E#2OEoGg4g-87{mv5fht9uKnW +zfE&}Qdk{V}p{JN;Ja_r&yPPeuYpgj{(*r%;50Zt`q0I`%w=QN? +z#2S!`o2=>R*_u+aw;S{*mBFTFlv>jI1_ztB-?}>b`t$}A##}TpLgDm1`_oD +z3EmM?K?;pE$o*SROen1#=oohw@u2d-J{Av_o<48?hu3d`*RSQ=cN*Zwr77gCtZYGs +z{Nbv(rgL_!6-Rzko;T%zx+xiCPnht@vjP2Mee4UrpT(qHe7hSA`7fE)ruW;A1js7IF{me4iFgg(YIg!J!Z&BX~ +z=H>IPm9&eP4K1}7n7IK{Nj!O^x5{j6;n|KDF+K3sA?eulo%qCOtxEE1RpUo8jN)`{ +zEP}tt#bzOOd=H_otihM5qT@oZ4h1l!$2t8!)oQ|z;VZaicrx=+{WRiuy!ec_$Tf16 +z{lZHw+|&Tb9Q=hFqk&UlR&k=nzHZ3E=kGYMl?UrL?hn+bP58Q85zo%YcbaEUUm2+H +zeK26})0igp*r^(A1?DS^Bj49!$gsolNsKj#yj%_*#J^tg=$|nU1X_?wnurgII6kmN +z`vn_sKU~ez}YC +ze;*I>&A9wZ<~1#ywu1A@RYMQ?PcmH|d#p0JtU34)x^v=Kf}w-e9sHILocz(6u;U9K +z#1%uOwF< +zbA1&YH61LlWx#o;wLJK7FCK52O)O!yBlvOl+pKg7=2T$*6&(K_ +zS@sJ1Ek_4f27hX%RG9REU&Rh{2;TnFLFwn^OQxJvn}dJZ(iHl1>}C2|9c&+HUIA`G +zk9hudW%keU8P-{ZO+16#k_n^dmrQIE-(G~Dd_8#?7E$lS-{Z|c6TczWm^km4WL{#v +zY12xZ)_33!F1)VX?DPptl9koB`cz+2uXORLZ`9Xp`c!}Ft0Q<}D?gcWp|%)4I{UN- +zRI|{5!HdPwcWP_A@6-qL-0>tl@HKRQPqDV}j$}Ldm5z=3WQSy)g7>k9&PMJ@di?e; +zu{U1L{o*$Iy2(mrwa=9^Pd?9D>v80fDy5FAYRNiu%AS*c)!oNU-abB^(^~Xfg|4I@ +z{EK(!d+FRXul?+|P56FGwyXT9c*f=I=`;J5-rwO{+*c>Sqdr5fiYjw=TD(+e1M&cQ +zbgOe$m$v0j*N!ZKmYVRzO75u&Rwj`bv)OymHE_3m1XyPVU))v|eCLVDCf)Lf;m7tJ +z2#nt_7P-QS+XTijg_toanjISc6!;i#%)Ymn|43eN1^pZd9CPpy<*t{&Kf;H-0ejaL +z;P!E%dAt10g1)iUItW|zbRbHZJN&Yx%vj-~3Ur$d|cerQ0v-l0MG`&C13yCm)8{}4gvAh=>y +zH8P@bew*X3(!$>nwcHuJD(mu!}sDpqSITL!#hrY8_4-lnVWj@x~#_3 +zxs4v)iIuyp((NOUJ}OUM)_aNK7#I(p*Q)pt@hj0mxM*ow{7ZXJeTaYE|8w`-{r~Rn +zUGcCVoqPcNy720oAD(=`8FM!6f8m`mn`y5$YVY?wGx+MZ=NP++I)v1_K=1TgT=>*j +zl5vW?^ZHi46%Lm(FMQ6pOCqD?EkWO=^G-F*b>1~m$Gws`Yw}+}PgQx9>1+613Oy_6J_s0hlzF2;0fl~WF8v;KLf+ZUl|y; +zs<~!t&59cBlE^xT>JcKT#!7jL9#@v5&`dKo#jfQC`-S&1YCaSlT`-q1eQ|!-%r3Zi%O`$)!L#n-{QP&bneHW-Nf1b +zJp2aPTe2iJVtk98{ZxOqre*Jwf{;<>A_bI-Aj`zY#RWQ==MgCqj0%wsCI9tYi3y71H|EY5I##rAx +z`2KAE7T;dv-EW-uA7n0nyl!yzVeg!q%y=EcOZNOd>sV!M_FKfcbB)wRe$ +zn`k3Fx^i>>ckXkn89Zbzy58-~aKujNa9c{;o~$ +zlB2)7PwzTLf44~QvZKGdM(_GYe;3g^a#oH8XP(|gMt^toCEk%OVYKgF)Vuo8-*xL< +za`bm!(Yub(->ufW?C9@q)w{lEO@%2L6`pJK-nWY!i6$Oq?e|Fd(qoo(qDAE{6#dmYdcm96FLU6( +zi@Ty$QMK~tEe~C3PeZ?@JbL3yWbb*_r-2RIKYP@N?>_pv$gy9_zv-8p|1ad=Ju%n* +z_{$;b<@GFEe0w?yJq{0V%n?Vz9cb3zL~9m$qh+~elkDr=_BV01%o@B5`d-U<6vDP7 +z8!vu1j*V}m3>)#}Rrv@xbqld$YMja3vGTYd^)cRL^iAqtd3m~vr#iX*f9b^Hx%^xC +z`^3w@K})81YKPyaKaQW@ue +z10_F*C$Jao7@4OU`7gDZJQ-KAugimVPrLG9iLIEhK*e0nvl4p+vY`0;qV|$hJ@=C; +zY$3srsf}6T>TdE{E0;%#pWv$cM1xgjcknmsGPKs3!dbA4{BEVh<1V!i5|2rq>kReH +zkr!m6>lx}KHg-|_luqT);O>;FL{>OTZGmFst_pBjh+iLZYOyPHmYH%s^QQN?A65MN-ox2Q~O{j*wBexBB%RhZnz|)It{LWi0fD7 +zo@Kv6NBB;Bwx`d@{y=(E)#1@O=ju`AgH`3d2OnvZeTBQlWdr?Y=B5tXYdmC3<&_z{ +z`UlhktjMc59!O>bRw;X;BsqbzuZg&D{QfqT2WKNQU5(6CP7DBYg!Mda4tIc)j-g=g +z>4Ur<%k#eA=Jci1JRNyAZU|L6cU#st&DgBl1A~GmMI3bp@wn&F*DSN%4qGLR#a;yN +zTk>7G>gayyjo0AUzl^#ZrKy{tBjHYZ*&J&uyj2Ecp8mJQt_6mEYLUy|_IlP4A8@B8 +ziEI$11+O%e6g<{YRTRzLfG*6fG5>B?ANgVqKv&XrTo3LRa9^2ma%b$(E()GIidKLC<(cD9-+P3_fvq +zu8AzkO+aQ*Y_8IeQ_YdJ-(<_F(a(`pfLy14JHfE?av(y{Lra| +zr(Dx9?tBHz{VJ&*=oqglK`vdnkhp+V>Gm+<4 +z2dC%SSM=3hO#E;llw5FO{^9CSpznpv!MBJh(H&=IM*cLa0YaXjosFiri##Moi;uq0bDXy5CN`!20^I~{(M!DBO8ZT;-?TI+{e)!p1L?mFxbxANnn!~9NLDLk +zK6%DGZ<#mP!@(}$pkP%WJa$jI+Z+Oa(cE}&5eWU%4qBbn(k)+Q&3ESip2J(8&*)pf +zt-j3-?{Q*x3TRJEOIJtm>775clHV8oO1GhTX)gPJ@7>dwgW!%ZAI&8?$t(mHJNJW! +zqpVM!v+uE01B=DqM+0wl=`0n^hz6E&c8CU+O^P{mA({})h$j9gYuv|p3!wLL(9DG5 +z2kaW|xPRyPNN<7XmZd}s?a(Z|a#J_*s%j*{i=A8_#LPH)gn@u)>rcza!rAaBXTzh$ +za`Upx49-pta+g??H=8rlO#TCZyF8*PIdt+dXy{Of_=V3ae#d=Svf*z|Ea!F$


NPB-dS^lG1vVL!NaJDTBDWz@6Wp0-#UC8vChn-9jNiieE&m%DI12y$;_!3X9Q^N_{D0fC*H<#(tLXH1|VReQ&py)56zDU-E|APPA4=+XJSU +zvnt@x1pju@5^@i+JJPI`(JoLi4u9oeIt +zQH8_=tg}iI!gUsW?c#^EKCz$Q;1PMGtECK@u*?m)E6l@oKd|e*dIkG;0^f4ZqkCOv +z%Qsu^3Wx!)NUE^T;pY`eYJI_9E1dcj_;M2KdM9VtThprYW~8s+%-IYK%GIE=FiCBS +zku|Y;_lT!lp8gJf>0H(O$oWyL+u4~c`C}j;ddu#4zdyQF!l$=5|{GXQ++3BzbH5so{l|%yb|!S-jVOi +zd9VNbXyeoDB%Yl*Q_)|(<9$!L!xD8Kc7V72a0{XP}p;Qhma#zU^jSK799S><^gJ&Ai|L0q?Kky-$Y)MWs&6 +z&-LCMWrNe&`(qW*)}a+>VGVoqDCdM|QuH{|m#XhM#`I{w@4K&_OPtbzwh7GKnU6AF}qo6r*O_p8-NcV;O}7QE=NY$HFW5i?9idEdUWi{Wz6qPzr){VJ34CJQ-bW> +ze0ZkpHUZAnCTq4WKEwUA*RuPt^Kf>oiX@!5SXTT%ptf^=py)WVRYtPMH%@Y9Fo$Q* +zAHfUKCZZVCPz!p!mIG>H~dz*FORQ#=b9xtW?nXAS^A@B<=T&(R +zv%ZhpmQ`l|1o>L;$^CBs2Y)+vLe7i*#VgWz=u&@#9KpHA`{nkJd9T0w=wlglvmf5w +zJgH%>_6W~2(Me17cjgIjlR(~-EcuY5A1sZ@CMi0&F!XV|eR%i<)sL1eDOtlrt~;*W +z9tJt$0C~uCf2$0xCkJm?JfHEW9kUjc@oiq{HTGn(_aWa#;ha}GcYHpQ{pX(JByoWD*uUsq4Y5p>!THhy +z+ZVAnopTG>Kr+Dv&`F)OBCY#)V9c`mQtm|3w=QHp($Pv*DGKeeuSZ5v4f5K2#W&r# +zX@Vo4Y(qX-L!7~NgRYFS?5z4=ZOAAM$S8YG$tY#OCb=lUy~ig0C3|nPBcmv1wB#h= +zR5FTu#U>!XjzfNZ$KOY0eanT8&G6bGWD)oqwYv%%*vF;t_7Y?`WIbz{t#=JpDL8e{ +zf9VSjoK#F=Lt1&tSE6%K{KRqR&T=g>g8FI7yZ~M+g9}gHANM-AI(^@)vzE2=ID2pl +zKJbc7Zl;Fe+<~Id#+aerxQml0IO!RoyMA&MoNQCgv{N_<|C4(L+SCSDyu0ed1(5S4 +zyA?Wo=rm6L9vG{jdpqwL@&}jLyIA)uI*>td;u_X5szLT!l +zl(~L4(o4@}f67-#&z~8wZ@=pC_SN6RUukIg{49ImF#Yc@o|oz4_b$eJ+4+4BbR!vP +zW~P%prswRl%+Gi?n%?=}O8+=+OZuiTUC)F)h%z3J?0)IW} +zGhE(xa2NSZgVU3fI8U+Tq~y~mdyMoR;wkbuTj1&1GqiPmvfezS2IyCKF1s<~II&5- +z9&EI>EB^~^uW{N=2e+>Onfx;DDU+}6nls|oH2*f~+L&jUSlh|eN(l391iO4){!qM} +z8ZS5H58wm6m0B-@+zoc`#8yPzn>oAdr~|WznlJU#d|62yoW;Lfa^Yv-Q|??YZKbbP +z`e~()R=&q4YZot_6)en2qwWJ +z_ymvO6HJ0naQ(UR&H`Jb**Z89zNFdOl`?a>#=Y#q*$8aK#{TL54ZIy5ysPnNx{>kD +zI~1$E@{L&S9P8iWuD{ErgB|2c6~5);YfX1)X8U*K4|6|jT?~F^f}b0~&pqI06Zq)@ +zKgHl@CiuA#{M-Y6Hi4h6tv<~y=X=T2DZb@*#+Vxi`8$&|_mH2p_}R^7=ChrzEV*#8 +zg`+PU<-6u5|%EIp|Wk11-*=Lj|W>Gt~OaP#ZU6pQ=A_>CQ!7ot>57 +z9DMFnO`Rll2~zl3w3$ogXWG?ac6W7}OP|Hh^x0izaZlFV-?QIr?Kxm}_Z&1Y_w<>Q +zJx5uee%2<(x)|&J-38Xx-C>K`N!H7|Bi6~?<<_OoRatYMn{6$A&bID7c=Zxtf?{?4d%5V1^pJn|6=g>!5XEl}7YQ52MS7-n8G~F?;H1k4MT%2ZJY37w? +zUTNl)W?tz8cFsC{=9pJ&J?qcBTA5cX^8%kQgV&R-%xe?#+QhszF|S9N*Q3m93-j8- +zytXi}EzD~R^V-6^wlc4+%xf$2+RD7PGOw-7Yb*2G%Df(9UXL-a$C%e+%_KBpz2(xqZ$D`C)+g-k#R&V*r+3kMn|0~n`|UsG&Kg~sStNElbZ5$%vvWH9Vx_gXbtZf8 +z|DJDLnr6Of=8Nojf13HGnJ=>A%W39|PVG{33@^7b-&W?kiTQ3~zMGiuqs;eF=DUUY +zZehM#nC}+myM_5~VZN;0$*s(nwVT7*EoSZRXYIDKcDo;AzK^weYq!!Gg$G!dvNtas +zY$F%3&jXBCOQhqQ@Br)oo(I(PebRylSTkE2EtdzZwq|A;t$V<2@v}UC_UrICp9cV6 +zi(nNG5PyyEz0O?4ay;mq$8P+F&g3OWPUnggO{#tWH@Fwl7CSC7-{P*{m!TI#7UjO` +z_;!tqgY2a(ZQyUG$Lr=S@nx7-HrIn{7$eCXmq(0C?5pq5$HtVe} +z&7Zlpgg+p*fS8UQswX9!>YGbHEctMHM*j=H=({q<-1jHQr9N=!hbsmMDsk!$)B}S( +z3O54Q}^m(-dof;MTa_|SYTq%oSIod>Sf-; +zohQ!k+qr`VscpHE|E(2QB$o3HJUQjBZ2&zL`hvJ7ly$*byB?f +z&gmQvEeQ{r_hqz~uk^%eKcZf4-}!-1CiY#~@JwaLjo?Fe56jF15BE5_v-4@Mdau+! +z0tX9t{*RVRJHI%M9 +z?~PdE)7;^t`)I<~BG2lL$yVvs99`$u91Sh3#$O1$x;Dlut%cR{U#jAsw-7z`rQW<2 +z?dUoFgy5TZV`2*W3f1xzoFyY*37Z$mp?(?`!67}zp9+Wev=4{P87f!=hu|6V^p!kM +zAINCmyv<&CJ+54Xf%Vr@V|59oRxUZYZ^WG^|FzHL`*=D{>pq@J99p-Lxy1J#Ep^wg +zgj`BIYi(o<@v)^L+rG%56L-A@i*lrlqt@6R9&WCo?XAG^LHy-^YVDwP+MEc$W3=bR +zXDprz&kOl27(2Mf+)Irl|2*h>#yt!H3P2xhS@D`7vO3x1-jc_&#XGU(?0TUKw`$?H3})E7n8& +zRyb|;*0%#a5M#9TKaDOPotdv6Nm(fyofY!cOk}O%9r@OeV%Qzh`PM`5jA`rJ;9=6o +z6>^uZxI0pl#n!^}C#mhWPdaqfeQyZup&n8sOP+n?7xX2jx3y#VwP}m+dn`0Z;yLQv +z9t>WcCjO`wo{0_N$y^kFb$$0+c!K6yMGcDa=2#s4(GH6|rb*h8$A9Oa!J}lGl1(uf +znolj2C0Xelx}9;>47Z`jDxX{R(wn8}hv(#sUT>2lw?qA?KlMA&irO8FG0}R2@9%Annj&DAZlb|f-bmSK +zv{t%*GyfKUjjuGzv3)cpYQgFFNHP(&3Sx?}3|nn6d~T|Xymc;MY>WpE%?mf8A?0Oz +z(1S7StXZ_?XeV+AuwefJj@Wkbz&_S!GiMz-o)oskTq$%yUZw%*aP@aNe*1rC;fI3H +zLM!X0S~eE7ZWNPxFo^FA@c$kCJcPdW^qTFhJ`NB0Tb`GjsZRTKv>ysiO~F@lpL@Uc +zrww~y)1PWTJz%_g7H9aP#616yLtR%fzJEW_e(n2u&+#jQb*x{bQ_opCM`WEHl0PKZ +zEy!0bc{k=~A$!=bg(O}PppF_o*UVRYu!{JJ278rtS8Rh-O8$bHWPw?g4sb@~p?A81 +zGx3hRCAsRtx%O4YKDd$?S#q{*)VjKLNUNcJi@Jm*_-jAC +zSU)lN!w=y9i9M5gjMeDM96!(o*070hSuZCBYg}j{c|DVR@G-&u;*OzMv1+g1iVMub +zqhCYza&$oNE8{tG_87CO89p);*k>o+Qx5--od||j*ufC_p7WR5KVUCPhxg71-1_`A +z$r#~aINc3TG{MHSFB=Q5ijgk&VyXO?Q_gNj?z<6OJN%fnn1QS_IoKv1Q>*+9+k&Nb +zjD2fNbi;>DWKSemmzF^ad*m +zo+?`YW%#;1syBT$p3cU_v)kP~AJ2`lz8$=iuF+pBot?Fu_d4r7;^qH2iq6Q_VJ}30xB`4Sa_$z~XQ$9a<-jrE`nYEuDywA%8P)C1cO=j&4^Nv7wONQP-x>M0 +zu61zd_9NdV%}-;Vh6%cH#wV65T-G8uOt{yPqyGPfMY#z@f9ltV#nJyexEwuyOx(fa +z`|_z4$^8EQ6J9L*a=yVlMI%XMT*W;qX3a(xTE|5!>gBj<3XN6H_+C?=hb_`VcJGTf +zttf+MN3yI#+7$N1OumJm-DQsaTQ +zZ94WEv!puLU%ZX=Zpwwj4Y~6B=Vx-o+cG@M6oi{HJkLxHH)MF1k(?a4KZXs_)xUIj +z{fWM%SCRckdq#VwYQUyXY{&FlgG@hrAepHesK*8!hu@mX_5gL$!m-RhSeNCrCh(o1 +z64s?|pdzRGp0~CyOPWbb=O+hha*2V8O!9b5hIfq39UfV?58nuTps;i8P))}op8p&D +zG!3olP+x+xe@!%fX!y-14)f#ih7-#BBwdEjryG;16Frf$ncC0EsJT56c;mXnT5498 +znK21_Jo&w-E8R@p$8p?IV%Qh0P`w?4HY{X5iyF|1uTmfHIO +zjo)*DIn?6HR=-8I`i&!7sm7%Esc7bg{NFj}zT|=wI^Z^R#vPo`yBe@=?YtOax;jPlAWA5RN|8lAzMo~ +zw8qK%{=Y+RA1`j{IZi&aAD};PQT;5*TFUJq-#_`D&%oXq3(bgq2s#*VR>gpk+#bJ* +zUtiHtV+Eg%aV5YX$*mzb(KwUNI+wGV}c34_}{aLr1*Ms*P<%o(%+RvFGk~azZYE +zFW$g>^6(9G>h4-)@nWkK`Svx=?|0b~^6i|SN-?*Y#QINna=aXycDeP8BRfrGj!mJa +z82)1L@-yd^ezfO!5V`3F`jL(C7`{aE8LmYh6Fk7u5&%y(@J{pWW>0qWyVxqh=KpT| +zM&P=hwTXw`jN!Z2OAYXisvW&7R9XE`-1$=QW#JopiGB9iVaEOjyqY|(snSm+6TvC< +ziD~SG0&_R8y=Fz|a6CW%b=%ml42=oB +zZjT9Nk+b&Mk2-nOuN}_b`-$Uu=6mGG=*W&UFQuk%f1P@4Phx#&ANg@Rvfw_wB6Ku9 +zhP#pb?bpbA+Rxzg-quN1WdS&N*I699|>!TH@An@bP@=ZTu|3sq8+~N#7&? +z%mu+vB(XfSo*FF6$*c7M__&<4owKPMJ&^95+yPmOIT_{V2dC(rPj+ED=)xv_GTFW? +z9dZ8NGK?LetBRl5{G{6dqjh!rP&z_=;a$vS6EFtvs85_{$!}!NCUgr63QXSd6``Dc +z0Q{jJtA6T}@}bzCvT8~a_eG;Q;V%^0X79&eGLPp|`Cs+J##jgK+rd9MLwYX(uTvu( +ziC$}a?ps!KPWX1)?6Yq@S(d6lxjki&k2MeVH`&@#ZCO+7hR`AVo9v~VX=7V+q?1W3 +z)jerS1mD!ZvUSEU;@yGaK-aR0`19F50;iGLgWg1udZYyr#} +zf1I;nUEV&wv$w$IozREVXB+)9_hBFQ`u2-DeE2nP$T~u;+#_}txaZ-IlMla9E(Coq +ze4YJXG}%Z!Exp^-zATk(?`_pyaPtX2Uwr`F{|)&LLiyjbZ-ZV|w?Dcm)&A|)gYdmR +z&YuP30=N;|`cY()oWlci@R&E^*vfVkSc~x+em&mL8k7*ru%C6P#U4KmnD%=(ko|@l +zHXF1)mQ`o3X0J#Fx!sew_&>e5U2~oRT#_T*TBAwel8#tyqxh`qyU&G6?N8&!GdAMl +zOyANjeJkG!{~v~T%5R6eE&ORlZXB_v2iQ;YXTFD85!U}J@_3mVoiy%R* +zLtCqRhf9K@1Y{hvBJbWift`pD0To+?T!mCFfq=znksU5J+8u};$2ezfjh9Yo8znt6 +zbB=RH+JLCEqc%O$cIZqmL7`l#Hnu%>CnW6i{k@lD6S3_%^FN=@KcCN={l05G>-MZ? +zJ?mM|de*aYW<)+p9CuwlES*7hFhBYu$*|__Z)T&n|2<=Pthu?R+e?$p{78EC2$KB` +z!GDSjrWfvAAFPgOPe%ElOkeTCZrUk0KaYms(-HYenUB1@0Din2UJWi=!DTCWYLz_^ +zcx(lKt>CW}ys|g>Kym^Mh;kje(K#9S+zj?y;8wUxry~PJ)`IA)^4|E8X1ijAr;kut +z(ctpOTpYmn_P&Ijjn2{>;8%Q5XQ}nAIN3)_-UtETf!ui;>rUxgrB5}Sr;;Ce=FWWu +z^!G$$59wixJ)LX!hHF}mo6t|;Z9^^XSGRr&9fIs^p)Jzjr=0Uit;}nQ_Gs&t_BE}p +z4Q?cY+{azApLuwqd2#@McLNhRZ|$x@(FbPe4w8TE`lM1h|3*1~N&cb-cMtGX>?hvc +zG3W@8k5{JZfDfPe)9)pg4Th`hJr%=#cpxGh5oqIYJzS0@KkW&s%#)1WzwyfZ-J@>3 +zT%FIKb{?V1)2Ee_zwnS~FXZ0(hKCDG`M_A=fqOI?IcrvF1uABmM(zYELAP)&K0fc2 +z`_Jy&lFkKJakKAv;ahtO$nyhR+NTeEnza=&V}I~x?zjj9^KIaEmy$k0dvumn{joiG +zPkE8IXQ2ChE3q9x?|)Wz0IS^(pi`Lb$%B>XT9t<(kINWWXR(*-N#C5h1l?xi?48bh +zT9{R8Yu~1Za}XDk?`0;EXhNqKSY^ipWp=#LD{Hm0hpYXlU&UVgm|Mq|_FJCo_$zl! +zm1vJ3Tcu-Pqn+D>HRaKB>Nvxxqxwm0zks^_74^&?RnO(*HQTFaU;19ge#EJ#blQ`$ +z>g-9J+|^@E!gpUS{SrC@O0YaUq`;Aap&QRJa-^NU1mO$xXzo?v&yRC*HWhXR(Q}IAZmwj(bB%QGr=9S +zYTJXuc)1$=`M%vP+p9Vi`y!E#HCA{=g +z7w6MSqrArh{|q`T!E2B3%O4r>gY|+3Yk&jhdRB4J4Xv`^itr#mCH51ujXFfg5fo#=6e@MTiV0Bqr>le>h1W|(9Rswg)Qw-#_EP{+>6$SReUdn=T>#^2$tGk +zK#mHVtDPqpQrc}MUdzVE8K=a>@K(DUfOo=%(ld@4;zht_kG$YVi9 +z9+OxHhA$zHOX^A|1rKmPpZ2>C+P_17JYOE~I(VL$bk^slvLo)4D8?1MqWWJc1kPjxyaE=+dQG452Uo8TjUq?3{V^3t| +zq2sLW(0_6d+;R57pT`dPMC`j$xVOsseq=uVxQNXf4G48 +zUOG_e-c^?fb!m$AW2Pi5 +z+AKe?*ian2YpAGYFnywkGc)e}nq{H*zZ3Tq`&6C|JW|5i*s2f3zv-0Vz+ +z7qV8ymcz2_8_Y}K^XT7lSA1#^{j@P}6%AqsunX9m%z=)%#LwmTMt*PP_mlj7lHd1O +z=VWmXk2{dT^)m@8xDNe&6dP*w_tPEpRrha@p~hR|i65Vk4(eSapZGVW0%bYqk)Ax0 +z+WMJ?TaY8Iuja(nKg(D%izc++djws_jnJV4dl#+wpJc`T{LH2O-5*uM2Yo%_NdxyCoOTT +zv$%H#x}?kkXMEh_(4%Pi4rt0^Tn(3X4tzv=hKFuP#=MQX8}oibeRUV>WXs$KK9;4H +zPQhMlgfFe7jv^!b^A!A2 +zdbd`1V=KC~))LP@c851_3C|aObwR~{O|Lw-jCtiBt$&PK4|T8~*&JEMc$MxtDmp{g +z_h0ai2oOUU*q>RekTOqv|mrJ+VOh2`WgI*9W1ie+m`jaNS2iq +zEwX-R8xx~HRNq?0UWED=+1rDGi2O%fXc>4_M}@|j-+rqs6kiVxEGswq5#p%JGnVz& +z!@NxA+2L8wPp1C^;4cVn;6cx@M%!0MKYZjZ;WC$cAALsYGt;{Mnzp9J2gQ@b3s<8P +zXk^XA+Wh$~tedK^Z(WWKvl89FBmd#@EQd$JuO>ev9l_6&z)Lr<8+h~!m+t`{+4w7t +z-$&^@#X~EhQI+B6KRR!J&i$$9=c~JgGi=~N`6xf-tNc}#$`rqx2FA3qTvg{DShAL0eiI?(*vLq$fAZ4)kaLK4S0F +z_l5n=eHfA(D0fKm0(0|_FEgxenntnvS(kiy_{_wSDfjkYGWEIshKrK@iTv{ZarCjx +z8VEn?54*DJw1D4&TlS)vhzO7l$(@wr6YqGc9K8by>t;qS(FSxcMKK;N~(LtPjuFZ&mfn2UG3V^O8qoC&FGl`qvWVK>47Qt!zya|0UQX79z^*9~$I5S}u2~bZ>aB-#++N +zbOcYPR&%yeI=)=<&c2Xo?R=3uPCDl<|A +z^ZG-d;(ZyEOSIwZ7H8yW&o{8OIY^z7 +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 +z!|xDJi1 +z@s97B74TZlt0D*P{?W)8dck)AFFoBh>}TQY4qO5m@G?eLCT@LvCVay);=`VMWU>_0G*yG5?`of1bM_2GDU0*qnR6 +zoqbQqeT46}vDYi6KJu5J3vV~@0`;SNo=0~Lo{lXja@WM_%a7BSHs$+rsMG(AYLBaX +zjnNmHZ@b!~N%gJ#A{z58-nS?)Y=%4w%`=k9qV)u)Ag +zGi4v~Bwuda+y2Gf!jDTYTan3T?%u$-_#ACj|25NR#n`=vFWE6)^rCvp{w3>&Zd<35 +zH}T0|K%3GLNIvs*3vJ*;JlY?B#%o{qdE4jubl04sGh4nrzB{hDhnaS=uSGl8?75tF +z>i$^Kl=!_r4|J^iU^~T&k#!tddvAMkxSeX7-%hoWdFKOd{NBHM^i96Ra}PrLVwaxP +zPQUD}=lFffq^APXwQ=^qr60-IEB1A@UkR;BUcCJI63(Nm++xN`A>)j(nq0`ampYy<;InJGRZrr29g^*W5gsXp8)59O( +z73~qm%b9%zJfqKBHhQ-EmC)X&ow0Ws`CYun&C@1N>YB_^bm(Z5(HOglNv~^V{ +zG6!v|=oC$>9b=?A +zBWgHrHp$$`y<41N&#Q^Ya#lgJ)qD3bPIAnozoNcv=0sII$Lwk|=HWg4`IBPR`P}1| +zWfmSAyNkW*>+SyBDdhP#oaflpWy}<399Y(kHaP9%yUopKM_YCN6uW=yq}X8YB)e|x +z4!fG)J9BQthGo*o5h`c@ +zb6?!7_=e<_nT}p>I{acGJowc1JoDY{`6jRV0&^-c)_gbN%x%t`RoFSsSOYoc>)^i} +zTsHGt-F7_x>vm0kxqWPGvt2v3+WxAkx+R)ZW*^Uu*fl(*IXcr)L!UI$C)Hix^XWWu +z;OTs0J#_)T(Z`wt9n@<#Jb(AnOFdo!|9X2B{EW3ccZPwxP=|$%%jIhe@dwR1kNsEn +zW9ip5@b0nvZcVp1`$eZ?%~@_f&yvSs=d97l*zx(%`PLi4XQRpmpOUqr@I#$L6YkJ& +zz=zKwD}Ec^cGGjcW=4ugR4I~+3YkD_q<@?7J! +z@gy*=FAr=v(8u-h-G;q&%FNi?eUI|rgFSdJKF?<)k8p=T556z(t&!Z$osH$_1EyJ# +zQrX~TLF>eI%J0Sz$9IT}&t5Zr;A*d|W#sn`_>}M51o^NZefH#IKORsWdb!IWW%lgt +zBM+6=gZ~P*%=MIqPjJ?=gmsqZycN@ZFxl`Dl}+3S%A4SocdXtmPj%+J0QaQM9m;*+ +zzC8sGb;SKSq8pg*_Pow7p~z^Vjq*7!elILl=-5IbK8h9LBHnXqCKHj0d +z&`_88KJ)D@oHt+lP+$5M=IB-)cTZ*-=?d}dzLC3Nv_}^wtz@;@OUmcF{(Lz9;_VR- +zmu#dC7vfCDu=lV%h{`4>VCN%GGNxrt`&*NN-A%-pi~ +z=bR;!&ll>Hd>lM!-Btj75!Oi<`ryaxe`T(cujn4&q+2@-+za&Gg~0tC^NehFR|7l7 +zdc_`N{n*z2m*P7}^8&Dw@(O|Bo|vL4_EENTx6m`pNg5mE&s{CrZxO61kX=%J|D_LA +zl`p4n3e4@PTJ(mxqh^;?)vbGI&ZdVP{TzGh{nP{BXeaRPx;|N$SB(yx`#$jnk`28D +z^0Fc-+XDYF_L5wh{%Wc<=XN{G+F@sNF9>#<@S?Z&eH7aleAPaena{iFl|NP5lkj%N +zFyo=RKj74BF|uNzbI!!~88k+E_z&@qqH`tEC#tTF9K`uu*&ODu7F3?C +zn=!^Zi#ks3Mv>C3^~yPd?ZYxB|AOKCf0ds1 +zGWFd3IQ8?>R(tT>w0W`vf2j|jdd=YvGnjwE*w%9IG_>9Yt~6GDkNtK$JLcRy97euu +zw!-o5GjHze;nCfxz5Mp^$hWx}d~;s`Pl%_42fLWRO~4a=i!3eQP622oU~RX%z)P-q +zbDzeZ>{V)mQ_wMOqks0GvzGt&U!?M&%Olh^oxZm}c%rsEnD??B#2?lKY@oz>cv$fbaug)!BS^3P$A!4m*DAXLYB=w0`baewlI5lAv7C +zlG;1fw&Ow3Qt)LvWMZ6o3SrOuCbID_kwv+~CEc7nnLf&x4kKfK!R|{pcV-9ck);ys +zGuEblpWgOU!klqeHL;YLK_a9ED>r;~r_bqcqzxjAoJo}+U{7T9T +zWle_OB6jcKfn+Gl#o_OPWo=xPpxhn6rtm2=#(LdOqz`sB0;l&j-V@$?2k&j(dl&B= +z-g`IiUEX^S@7>;eFYi6xdmrz;=vXbQ)E3@UPiLH1SJU3Y&Kz*<*xq~bnQ`2A0H0k< +z{}!^QTA!>0x9|~YYZB*TVx`>Y0H65N&e8ez`Ix>3DE}?)JF89Y4A!u&da@hZ+P4W? +z*XFWn_*Ox56L=FZ{a>8_(wVM2Xmfe?F6Nr=q`J?PCVS58WM7Q4zRYL6XD09IJCnU< +zOz;`*F=8Dscx-pU;Gx~2!R*$O!DC6Ci%u{{2CTc_t5JUMv;)?1o;!GM=ZW(yz-~Vf +zJ;}Lo`2KF@4b~luU-H`-td4MJPgMLwbE4q1p0w(#%CSW~)O>tZc@Fbu3?84rrcpe- +z(A;cGmIyPCq9;R-?)vSPZe=X;?y;hCeRt=YDdar{{o*hB#q)Q7i!9#fV)I*&XGOR1 +zeHc3P$G`a04EWqc6WI;z?!McTEyNQqxy#jeh{sH%->5fyqi{F*!Xqjjo^|Um{QBgv +zPfLFlW3MeheB`MmkDMTh@f! +zp%Z4VDb#w0xw00#jvD=sI%RBK|#EZ5kFsG}Xx;yy>^rq75U3j58 +z-yQyx^dhD^WaWVucYPxpO8FagbOhuX8s5ux-Z^NG%nE}?EZm-w{;w|=hyuXTv*ApN$hU0T~^>Y3C(9l%Pjr1}Bt?7au! +ztrI=l?eMfv96ih43yl3!S8sZ5-Kt3cyK~l%t}e>gDHovcR(lM6Pk&zfRa{5-w#71`3t4pVnQkM0}k0X_RD +zNB6A$G325CS;AUd`&^m*#97~i(w78^-93_t(87Q9>U;PO*RQm6>o;V?f5VI4OT6kW +zd}#mcuCbraQC^`8*e5;M&jb55^>x<&UcRbRwFB$zp@FL=4}KvqvV-ySE+cQhKTC+~ +zBCV@;aoePFmrpBT-^1k%{<%o?vHBO9MR#x(`lPOubEj9%vD?uHHC>ssE%pB=&i-r3 +zi2Y=x2h$CV){6LbYMo()4$R5Q+pV*){#jVrK`GzW$iTJU-c*t_lG6oO*<>O2xaVdw +zVV8TbRlpwp19>j;;N}2_{>eET{2ukx*=0*?Za~F*C&q*&X +zM4aj-eS+-rHhSxjT*7nVdE8lfK)!N(T>ZP3?&PxlXJm_~aOs8mymZ1t4{`W}CXMzp +zhddnpZ0O`;*k#WAwS$}Ni{5Z>b1k@0{VQjV)a`&*#!m7XXDHwp*;-GjRe +zI3IW2*4SZwx6P~5jl?fSKcKws$tdS*Ui!n4xEI$; +zoP0;BFQ-ilm1pAe3a|VZfdLua*sr~;_|bH5>Q`=GJ_?-Qj!YUj>cwv&{vXowe&)ku +zwzbqNs}dOLLPq0sjaT0i;uSZ3Qf0qv)H3_F)`J-fjQUo#vVOnc<;C?a*?;B@;zr|g +znHS$fyl7Fl%%sJIUVInvEJ7}x3@((%^BMgS^I(#|X#5}E5Z;Y!=c!CT$?+t0_7 +zj-Q=(=oB(vx3y;X3)aHj9oF>Sk9#z@obsN2)-CS^^7wDSWzM(G{7-lf{5Wvp3UnAZ +zJr_2mabFG)KV~l{-u&`aj!*Hxt_#@L$*w3yPKo41oIPZpo{G&)Pf2H{`AxL5%%d6d +zY}Gs``NO6xU;gmZ-G%(*&WWdEN9k$Q~AM;md%2lXD7hlGbB&!$0Rr;zezfCJTa +zhEr$F>8E3V=9PtY@$t#Pq|7_L|%8-N4Y6;Xd&3@6X2_#QXBO_6dDknz>G1BXj%b +zz5E)1_ve8Uc;J8a+OnK*zyA4NpI$*<@HlUR{nYQkkNyjQvk1Y-_rOy0wv3w5+~VA4;B(e-_Cek}I_DXU)i`B?IPS59T#sq~jC*q~rTiMt!z> +z_1WvdxN~Qiv$B!_9wlrRzMoXK+VgBi-h=<*!ZZSdZ)nbqy6xBxjBKO)w*1C}iv!0R +zLbel5d%u^F*C`KXGBDcnRXu;4QO7&II%X4p*o%KNBmPz|{@6mL|9b0q?px3qQq6&? +zhx}2yHYM-G{u_K%ZF>ROAakI_9h*Uo$FJI+Z^f04?VxK1s5>~5{lBBG@|UFcY!dM(U=*;z1i;KB@;LJy`Gm{fXtYb`RV%Fr5?Gv>}3 +z_HM7v*}zmli^bGiJjL2IEq;xqz0EM~$r|gn^|hP#pZPdxq|3e% +z8}=N0^-jn?*w2}F*6}k^x_8!?YZBk~WZ%7%t$Dci0ylk<^ouDsD|k90`#zQDt~2F} +zTDCgeCq2%Etpe8dE$h;o?rixx+I#uOM(BI3hr8LpX7Y|_JelD#!c~TNt9VBN=bbbs +ztcQ2_>nrukIQ&a~n>&Wx_1g5-lNDM^%wryR%hoxspqbbIXW-&8>Y(#>h1?&Yyc6`# +zOI~@Mq%-*yPQQ!xih=)RMj!o?2e%VAKkqVNDl%ZYJeVp6M*e%=j@9__jOh}u%{KAt +z&9|TO+vm=8?waw7URy2$=9B0`w(km+YhP|UI^Q$+Nxs~CCWY_r)W^)}{_ra9g0w1Z +z%hG*_hu~BgY +z9xrGi?)a#<-+FOth@;FTWhR5cqmlnef2VuAwFsITzg>HV7In%j@3@z4HtA}E-;L-V +zQy(9~O(sq>PmT>G%60Z4=HX{BE}7Do6I}i)S`mF{4!+)lLsyjeA+YPtq3hGJ=e+Us +z55$#2*Ye@-_p9jj@9A67tV1XC-GT49G`16Xzn+?t{d)T4e%vefF5u=GoBp%Qhtl6m +zEv66U|LAo3$rO5R`tQ5_ldXsBNmc`Wcj5N&7RxO2E`9e#zs|&}@0Q~)ArohhdpI-X +z{T695;~w$ijxA9Cog4SC7k8MrI6xR`!i>F@?$CK`>Oe?95q@kZctz&U-J2v-$zz6+UhN+|w1z7qoC +zYsasOe~&q-DTr +zj*(0vIY%;YmuDYGyN32(>)%rlWu*I@mo7Of-OzX4_HFXg{fcx`3P$F=wO+bq +zqtgA_OLwD}Zn|~Tz>hM@Tj`~{Y*f0VUb<{A-CEN9EF;~mUbehxqPy%%pu +zyE;wDzrW%9w)%cK<+!rpDbDIn>(39_&RSgk^_fAYEVS`ab!ZEIGUU6$PxF|U=16S+8QIfj(w_9anL0(KSnVRUE>e{u +zz`h6ecvdxh(yfEevxqmS{9?|i9N9`8C|6~D;~Pr`uA*GY78iMC9*+KJ%5=xC%G4MR +zQQqjaiobrUq8zPJCZKB-ZuUsW)Vy;H;d=ayl!pXsk( +z1T&U>bNLjliC +z@~?`0C45QwOZU05zo$L2*9LcfJ=9K@Ufi`**wVdw<&oy#mH26%=kR&?COGKHudAsC +z_CC0nK*laqZx_Zyr7lE&C=*?d^^I+?dx^JGRV)iACVrIz9y-$e}~{?nqv5b#%9I +zhO33SQ1xs>rVu|pY`)#EGh>n21p|53OObT?)HAcQU0QCm_n(<;nZt*XeR{~l<=gIf +zRQm5=x0ql)uOi(eCTpUJr>SEppE(siVJ1ekbxT!M`Y<9*$2lc_{ +z7yI5J#(e}^hnqUDr#)KVJdx%O4#(~oyfWu$Ot>~m?4K|OW_e{Ep6A}PcLn9DZNKxbp&aN%Fw32F!0Fgl&(>-u@&5~2Ree==pI4Otx0gD-K)p}<_Fuqi +zt#XPnzL)x|ZEf%$D_G~WqY-$O(FhIow4eH>=FN65?Pa8Wlyn!HP{QI|`QOn$>}yk} +z5cpY$bcR3k+IQ%t{b$}}Z>rC% +zXc5mbeejwbe5JCtYr3N;-3fP?{1fy+AXsMq8}f|WSw(vToDu$4zPtEVS?(I?*Rim* +z$d1#NiQb&gd$NjhZl>+qgCTngdy-qI@B8>WY5@n(7yIqm*mxd`)f&4LzY2CuaF=}= +z`B3~tc`b()biaXlpk@z#s_;W9eYZ<*hP+hBA?&VTmO;3p1S +znQtePq_e1N2j4I7EqV;_jlB*$B+((Bt$FDoc*|Z7#;5%|oVjT3P*3}`mJ6w~IbMWs +z0QuC{KA+k*A|ttcXL#?cmA#(UN>6TLd?!~x539*v_G*mPPA-OV&XKpU2by`7{D(L0 +zKcn_vK%f7T@_X9LTP*5$K~8n#Xcz7JX7OT#{9coHK(5Zq}E_7l1keLoOpuTdz$yK +zyZ0g7?|sUR8@!Y}RfhQflY|LY?Uw%oH~+U|f8~uE<(njb`Sn;$zc0Z5zxtsCT2+2Z +z+sD3)(r31BeMb8hl3u!7!M+Tv{15u@!bP128v^bJ^cQ(!2XG+LLfP;}_+%k=HwPjX +zwoD(R|GU)xl&8DkG(M(TlR4LY3_D`{k>$I6DW3kr8>DydAiovZ`WHs(=o8`4*IO9x +zE?VL6Szwt%I#*NP8y~4Hy^}i1mPR(!;?LOBcN`^5{y#Kt3ZEDXU97cWq4)hD-&-h) +zbG@yU*|{b|$FBLzri>2cgM-XxJ3N^nbDqj_=H=d4m8Zij^!BaN_?l2(`QgL!|Mke3 +z7jKf&rQgcEvvb=0W +z>O5ZD2F#VjS2{d%9z3%eo{3GU$1_9lEt7~a{^ueaZF77%+{Im^Vf^Oo3>IQnw7pdC +zHL@`>vC;y3i^zUMKGJ-iHk~p?^jcM4M^-^U+sk>5-hCmSV$;jH)(^@iUBmVoa|iLE +z;^0T^5DiQA7B1fO+5t|m$8hriSFMNVNFVtCcEGNDflUsTqe#^f8pvbri+)Fa&V?IM5n;nDR6cQoSgz^I@dOuue$A3J38QTTB8ThGw$`; +zA~~#syf1+_&&KA%t>?C(KU~kNsOQb+t!JfI&mS|Ubq-8Ep+<0cI`)@dxy8W!D{-Uc +z+XBM{Pa5cZV_(IZU0C=&K>M&=M40eFg{qs +z6Q&K~zuwuW%(Axi--4{Cay4$;J-bt}?|Au}pdI-<`CsJZpE+($#~$-}9`X6$u#&L= +zju|)D59cr*7z?IXK3+nH=D_2u;8pgIS;r;d1(F?eC_6^ky&gRkkdM|A(o3lAw3#zz +z_!2bJocdKF^ZcVHM<4rhoqdM?p#xLh75BU^V|#HvJ_5iLK>I%2v)&qTH2&L2r}9;% +zi+jU1t=57i4`t3jtASHq?$|pO%l2?p>4f`z;M3k*Xa4bdntvu)<0mv+-qv&@hcf%eBsf&Xuogve$E!2`ljDTwJ&o`tNgox>7hLnu_1DKc~ +zLhJ>Vm`Y^o75jSHzxYtDY$dEvq`)M0=9((z9Gi9MWIJRUu%DaOsk?r;J0MwNtkia7 +zMEndxb9oQT-bw3u;pB1V{MDZP7KOLk)S-m+q1M0!#(vGszZ^TX^OteL$Tr_w6E3YXS8qF=1chKy4LMC@&3&5Rg6B%#rFz) +zl$?(Bdi587NRTG{VYJ;HPKBUtwOjlJKTgg%yv^$`3%|HF>9wbZ%+zhIGI0yt-$XA> +z8@O_HA=>jg75j##o6dFWIf8?caqNbvooeGqxH~5(T=S+U6FGF}hyCh2{H9|T_(;qf +zyr22G8lGDdj6|0NBBke>t7%KO=xg*G?bDp>)Vc$WJ7-$q=tS&ty8oQ=LZT|pG>w{6GGSAC1Qo`KGM6k{*j%55X&DEc~<2* +z^B?7vI^%Tfpw6G$j5TZqEBe}Zbh_nlP22SGNqmlKp4Hgn99DlXXNvW$ai=kVq`mqZ +ztYz`#aTDY5rh$?-!l{qLvv}`}B5%Eb505|dQ5qt^&@Hr`w@ +z*aM96wW9_bNY;wL6_Bs^U?^ZQo^MKWPM9%$IpgrA&K_^=(?+^-joFO3wAiUWM5o(&O=`E`7bZdysP$fII!+odUSoYuJ-Gj +zn^E6J(tKEbD~WqGL)K0At#r;SNaihk9h++Qmvsk4fU#t=?i3D@`M{5S)NDhhv-b99 +z)X$J#8|^oNd8y@`$3#cyoE5gLd4s~INrY43oLP*UQ1^$)*skuYH`eIOew>XbuZIP1 +z=zH#JlvKXg3e3;z#}$DS+Y +zEBE~4;ZGTlZKS_DgMVeN)&G?Am8AdA@Ph)6#lPt*$mx_v~EpHC_n(TSxrF>WH +zkv@ew)7LAU^|xdhm7z7b^7=4-SMf*URlgGIr?HQ$DE^{$Ir~MZ;ihtTUgj1^OL?!D0BZLBF%6KJ!^ +z3)yV*#C1-}vr|Mo!PDxt)pp4cy0#I(wAh`#is?u`*DvHl~nkBkQu+!>z5Cs7tup#s!I=l4QwVo +zoKF@ROWz4U8k6UX&w_S*SxRzL0v$u>{#+#uBk-t(uiKM +z?YWTY!d|imxqa?ns41M>o)f`tva)k~&ViWj-`bvYG%|S*5L%iVq-IPE8m?wVHLyJP1)#?Eif@oV%K=n(Onl2m!x^GQIHx!l`bf}bPS +zF`c(?@3ZvTE$HulI7xdwD-`be`1|tNB?0@E%AbW(RX=-lfOURnR!%(rXrQ`OI@4Ty +z*H(Q9|F|4_(>V(H6s>{o3QsL??nn|HcCmiStWP)PaV8Eu)Rmpny!xQ_(Z{L8q&8R_;9Er}uS6N~?1NK7L34 +zR&vkeDv#zBr|*?s+x0#3>JWWi(l#b9ToF29DsIjB0sCX$NsY-Xtk{7q_wlh^w!+5b +zO|IC5Pi(z!&zWiOlpp4tIy;;*#TH%g$j@qAc`9CMeHfi5FT@vv=IubvWUcqRvvO{V +zXMf@PcyPg=$7>(0TDWsrV&PY3cP!MIX~PDVv9fH@>FD*o>be7;%f{T=mUW^kjxXZW +zc=jESjcv14b`5)-)s)df{cbSkJ7 +z-#(o5rG=|P<=N(7VvKn@k15oKN5*-Ycjq<=mWEp?^^s~ +z9%A1-i)V+Obz)l_zm|-ha(k*ZpMJA#-Q$7C=ogcTo9f%FmU= +zP2>!n_S6uZx_ut0eag2y{nd0}6z|vBMqWCf{GstJTc9^{D{b*3*@CE^+o8P>com<~ +zyLioIqrNAO`j#JwOnCIr=X^82o%5YL>KmQ&Iq|x~DR#k|l$~XVtOEMN)dyC7V!z{) +z`dZCd)`Y0Wy+z&S3w}q?M2)E{MK5tkw&?8BcE@Cs15MylED_{vPlRuLG#si9X4$ou +zgi1qJqm#GvXxp*tDWe{;YfsERi0#eYgDtb4=5BNM9wP3POYQ(B0DT1DJ+u)&6p;k> +zcHRB_f|Kq6em~Cd8GfPH?m>RT{0{LuncuVg7V)dI=2`rngy#JA<=}^)I+zW8PNrT3 +z_{m6LTpdi<<`VZ?_FD4ilL_-4VS!O$I!l{1DolIj*`vZF69q?w>D=&`QDH|2tD)WK +zWu1EI-XGD4=7tBETSZ5jBh(j~CyJ&e;y#~Wa?yhM7vlr?BC9Mq@q}G5tHG|A!W{8F +zyt)S8J=ORN()_T3e5&ES7s4czx0`>VU6(PR%nI8T{+zM|c%^%vd1Wbm?ZX>$Hm&D& +z(g|Mqo^L+lO!Ll~hwbp&n)j4td+J>qM&aKndZK+Fx +zRm^E8W4GsA8VNZ5yEn8cjpnEKhv%p3?2-BDc6%!IP<@JN<9)PUbJXoQ_u12BOEB*J +znDUI1pXM*WKIfaSR8Ho61r0j+YOdNzo__nm$u>TA4yDpdm=AlnXJ%!b +zJ=kvDL9sI!i3`3N`0?N(mwQEufrVcrQ~30*#MZ;+c@Vf<=--D8nr{3eI`#;%f-9H46_ZVo>Z3jqZgiKIUnk$s!;a$-NAIb*Kz^F9 +zf(K+Vj<090OgOi|`Cpg>buUO5vmqh>Op;Bqf$`H!u_~h>D~o-wD}d9UqN|f&sf!-z +zD73PjyG3UrW7KkgKo0x3_>;je)ePt)m-{FgZ=I#c{kh0w=vXKxn{wPcQpN;B@bq7> +zh7Q>$(S?Lhbi^;>30M)^vS!-Mkq0lbqEYRksjj)uX%_F4O&*%VY7^Ov3)K&Kx?46P +z8dH89%UIV597uiz8p-8OO~c)qf2=L9QHL*>?znA!F_24HV;Z{SMdsD$b=09r`B3hi +z{Mt^r7Hhgo_oUL-opH)EkFodogMm4DV`5g`7m(ficTY5r;k(Cz7DF}&ryjEFy!?;i +z^c&P8jcpZeql^Q|4fJ`g*$#cqq;0ksZc> +zr(Bbb&fsWr8~FTF@wA=1b~t&xzdP4lO8V=N{jB6)3YXJ6ZpfHe62`x+7XXZA0h`AK@IAMc@57WBpIW{bk67uusW6AG57rFKxVPsG74Cz#4_fZ?1Wy?pjFV9Oq +zDcg^k@StY+lJ3fzZ1r&uL|-iXL?S-TDvjnbCdTTXXh#oK?Tm5hO4I3@j;!GJ2!7JK +z^R3BI>x5lCt07eGpXXTO%oSVH-Pp54J-e7W)T@v)>lg9lThU0sTF9E1`;^hYkFhGE +zg;s?<2L58qQ}$YW($r^dQocXWDjbrwzKxAs;^aG3MJKby`Th +zryOI_B=3ZA~9$4fS=e +z4Vxyg*XXrjCif~|X+}i54CXA-hb1F3N1$5zlgDnZoE@^p|J|oAYkwo~I-S-bG&>?Oy +z82Q6fd<@z6B4p$;l?QC#L{`OQt0o?{;_%nRVV@4&ylnEC^8BQ56*d)NM;D~^zm1`YwfB%P1P-zJ(DowQa;{T=S1aCN^8(4W!mpWTLRYIHuKx~ +z$nnJ$tDUqt6|A|trMm^zSsN)I)??V}TNT!coC@@T@H&?kO1yFe6FI)1;tuj~;eU|S +zuby1<2y?`@hQBA84cO-7R`~G~tjWmkJ)Qn{E_Z+wn6A!3Yq19C +zXK=0y*=fR;YSDQf&7T18t+svol21qZ=Ei@t?izIJ?biVt>*4+xoj#HMUQr_Fy{pcb +z4|hHe=OY|koPmSP`l}qj4L%MWd&-P9x-fqjPs~xwBPAVI!xPS?XYQ$=(B;W?qGg}7JC3{2O`x)Z(eTMjtdtn3VTX)u=lTi3Ty7JkNj0*2h +zZ*bBmu0P$_F^+g2cls5-Xw27{TkPVP2Z}FX{$}i(jJuW4vm`CEWPmluKp%d?&}Sp> +zR$^mh4NN4Cb#-Tm_mCG}%zLpHj!h|hIxhSi-sgDXHu3;#X7)x|yRse=iLbkCFOgHHFL_KT!LlRipm$56)}>Ufws>aGpJ1qnMsSPx;Yf4U9H +zY{Gg8J3`oxJh&{vP7>Bj*y~^A51b^BDTW8hGJ}f%!ROBI2o2^P0)$KGs1`Cqw20^8O)v(CL>Gv5>R= +zYwtXUkH67%lYTDOtO6GcSpPiIb_e}%lDY|Jr->^t3sMUR6Ml2etJG0&-)f5!mI6-U +zKK=FOjL={FJoE?M;VZF#ex1qMd5J??#mqM$=AaOCAsWOMnmJ)6ZLVb9ax3MPbTW<| +zdJ>&=lfIkuLFi00IEVNW;5z +zWPw9BqBGe>3GO6eqA$^z&I%~MUc!zLCOXp@0l^(1O!O+8X-zBoQutxQRaeni7Bpo! +z^p#E_YggD|y*D1IUIWlae|U!g_3GT-?nW@M|)))U0Ptcgw-U0gV1bb*j +zHhfWQrXVt#cw|-(-hr)jG^fV1mmau4I!)OZYj3x0_ESlBAGgri$GLFQLoi>SllC?0$NrOJi)nek +z0q-}<`_1-#IgjqZjq!ec{L3Eqt+5-})4kQM&57C7V`tirqfd?IOondFtIRW9l4E^% +z?J-FI|2X}Q{_CY8E5$x+PAn&<2RXR+koF;p!rc{x;}+P_Lw$adiA|j;(acSwJ5?KJEnT +z)HLJDyt-=adyMV3oHk9&XiqhAm7kZ|tNM*4UV44y@96z$x9ZLu#~7>ZilFxtEc+cV +z`Rx(BV1y5FJ&Z5yRV&QJPs$#RpXKaX3rBwpKf;HVj{6>h1K8(`PAr4E$4lrMg^~_eylqxGn6d#cau(!f%){ +z;kJLI&pzYXQhb=b(~SG7H_q6!mg`>h(ztQ`Jq>H>4W<6_O#0E|XVN=y)A4!U550LN +zz0mtM{B|8Xlb+6V(rd8}ARfg@+oe +zH?8&{TsV_uf*b4CtcRy&q;f*4H#MwZ7XoXw^-WC;>sEOQoS#Ay6fWJY{IURDwGr6R +zJ?l4y8rC&#-W2i>?j?P^xF(&uE`i)IAAtRL+5~`~Q{dM*0Y8$*J_-(t$jA^Q+Z=8ntWjP@C9>4{T38-k5?OMm +zTMn^{my|CkUo`w#xuk62;z+5|RW4aPzkFetUYEuf-$BXCZ`a3dOUqUYW@VI0nT3mE +zk%gs;Z;6yI(z{drTOtd2UAb&YBvxh?l`nO3U$k(k6T75r>EeaAuT;BMs+ER-m5VEv +zl`mej)GWKDQjK2rDgDHX!Ho9+{*VS)n +ztgqcfH#z+q+H`+oeW+xM5AXhFKvgbW_F<6Bv1T046+Cl!w(+oWV1_7uh>7<101UCI +zkp^IB9=C=7@Lrnlv}Mkuv-r(1L+SAb|DXKMBW@eNX@d=%g-$Gs-yHVe#uIi0YqELp +z^=*WwU)Va7-ubzqbccSucYUwUc-Oc8EF`>y=MtXO=SRZ*_@8=VFYx=sdE$Mz&l6Y0 +zQ_54!^ZAT2e3(DwH=DG`8&2QxV-_~7+pG>KTV58MUwT6*8H+#aNwg1o^wLI{O2!>ELeJOgi|i1F1hnO;foe8gZj>i +zApd~5t^C|Z(LSf#vJXZ$;R`+t{(}(?eC5K(viXabWHy=bEaQyqbE*>}JYZrAZ(bI= +z`J4zRpZS%y#qKyK*o7~RMPl)?=+g2}4Wr4yL-~h<-}WKlNxe>x1DVW&OW-bLe)_IpsR_Tzcoy +z@n^ukw`jnK6d{{NB^CwCo{_ohc75wd`p=#7M%JooLTxI +z@Lu?6_*tXDLvH?F_z1W=-WOi`A@E-KX!!s8mY>L49FA-7BGo3z23Gc5?zQ? +zu;7-(i@f=tNxN)5_r1l-mXQ58KRCTRIaV%STE2YYom61SlCsz`P4OQ-=Pxb0 +zedWTk+shV?%>E++z>Dt>rEQ+&JZpFoJdg71<@pEpc`oZ`o=gp;U*LI-rdcZLYvlas$Qe8 +zjhi+%h8(ztb)mZZ*Hy1=s12=IUtL$fF(X%w`epn%;Opw^>ySVsoR3JE=YTmW)@@!} +zL+R`9$$(OQ*KDR1`a3T`=$?)1*M@4VYggB2!j6JQ+P$y-gZUaKU-w^TRX4478Wv)O +zgY?v7Zgf@{)oVjEx*m!5-gWCgyY414r6~^_fP=PUbk-jrcjMm9jt&rV4eD6+6|$GRqNJotgpK!-`rlkrlD?FiWllOt*#Ft +za5|E1sD9mj4I9_5Tgw71#1gZ?S;JIstiK^Y1OK#c$~9Lu(aTgTf7$v_UBgD28}4b) +zN<2sVuz_N(ic&!ap30EGDKN;G@8q#m}T&)@MjfX$hJL_w! +zH`RxhEnFI^tKL*iWjAiF-L#pdptlli*wg^+Zd$#O*5sS{z^nzbaEEgj9$rEI!pB)`IO~!!7B$fdxXw~DqkdEEjHb;Ebyqv+HdkN0h9w|B +zEKVElxu2JYb*md{8a7?+j3y`ES;Jqg#d}8dM(^9f8Q~rk^H#la)qN%WIyk<1^=E6V +z8=DlZMepd~wbf1c5~ey_y=n70QE-$0UDr^}NO0Dt1UU;xrVvNnm~T`L~e^vMi9fO^Ku*hr-@7xwXKIO5%(9Gx(9&*pWgeNdc?B!P|@4O*oCW&OtW +znb~?w%BA|@!d*5c;)hZEZ}z?gKC0^4`%E$+AqgQol<*J+1qljCKvY!JnM@KudBhMb +zJ|`gwBsC;4nLxl-YEj8MDq0+=O_f%xT4_sLpDnG_+Sb;zrMJ}2Yhz1WwYE(wz0wMq +z@4xo`@5#&|QL295@7~^XV6x6$d#$zC{_pqRXU;Tu%%;UmbWa;fo2oW6Ztx7EIv6`U +z+VV>DC4hKC#fDn6+)b5mTJ@#UHN-TsWLZ9&754d_k@&4?WbVR?Jdt)4;eelsGRryR +z%BDF|cycq_l6EibXlAmtTJ2Got}c4N<$Prif7JL^hVDalsW9T9Y$a)v1p0G&63awL +zHFr;GkWQfD)tDZBkcnzI@^ZZcg!stbjZR+vs>IOWqo|Qx)j2Q4R-ANIdcg7Mt)OJx +zr4Q{AJTQEJRbced9mu}Ol +ztpO7G#R2p-Y9j`>GRc<~CLO%4s}>e}T4&`dk1uyAvW6yARX)fUrl}MrvZl61svfrg +z%4Hu-@Tv$@VFN5UsAqJ_YbzR5;bV8LtkP4~SYI#0TWw9n@v_Q<=R`Erz<>?6T9v-k +zt?H^^u)1O{x}>Vo8jGHKBzu*>rJ^1zG{zc~h8iRyiO*{A)K$WxhN>+U%1;@QBl|1D +zwPdRoeJuK-?24uetGrrvTRpmXPz-ufVRlBXIcC=}pvKb=5TDs#lb4d0P3G+Ca`d9u +zRG6#%_3P<{N_vR+Wb6Ey4OaBN?1iY3n1AT`iK;PbQlpq?444AeZ>`;!V-vG(vrQmM)l*tu +zU%J_9*o*-i9hBPaR{PBstys#6b^Zlv&y1ZgooT4VtO>IlHPOR7q@k?7sxDYtuS#8w +zE!aWD458eE%D!GtxTF%*Vb^l5Vxi$tTR~TeKD|blw3?JPRIHa-TEkF6W)j_iS(%J% +zbd7A?LCNrjx>VMv_Nj+(tGryczO!rBt!t=8@jEI)CXQv-c>qRi;%0DRpCyfALunmKO`)W#V2p{(w?Q&Eq_23m{ir{R<|AeQL)dfcdP@_5#kHejq*W0?d!(tR*|Ws_R( +zpwiTDjuNS>EXRa3qET0g<&bQ)%sitJlm2A8CtP%`-HZW7yElZ8y{4fh#3<+iTSKo$ +z4Ast%q9`uuDq@jQg?T;?aFWpY$xv>FQx> +zmc8Ml*67KfS~IT2`tdr;lUZH5W%F#KvZ3@k)ChJ*o9e6d@t|$*f*k@nUJMn3;!;P;P_U*G*VKd%znUQW)4UeUb +zO;y!Za?)EO>-M!3Wu-VIl$Kbrp)R=DbbYcmm*yC(y$&;?hQ_s6+yxuO^$GdUhEbIff^#WYT;{uH1RygW>;!>!2RO7U`81*0Z#dS@0MYW`*8Z3RCgYYY7I))=;Z*sf}23R&9|QOXd3Gn@!Z5NpGahl`gGXC38Mj +zf-8%PWor$2#7qD!R1Lb-jj@aUIZ`DtQAb~Cwq>y8Lih;95ZicM5?RUU=RA>$ghQ8XUeD#J!;RYTVMj@Z(l;gO#xurJ_NODxPNIQ?kQar06vv4ZurYCSnPL;e^2 +z#8ghN)Yj@DYEfk{Sl4iVcJ`)Co3ileQdVvK`s{|%lt +zy^Eb|N(Uij$Ngc|3t<1gqGmn1`O-24nq(N|7bvd|R5X=UsE2C;y50r=Id&|}_A=E? +zRnn278`0xXXq&NG`W&mUXzArR`?3N7aXWy;Z1v`Vv{b7YyAA6agB4Af9F<|n#n>9z +z-or*s)I%J~1r&C91@fwPef6f0-qtlMWEDbdNw)NEZIsNsta+9S&YhQaZdQ)fu(tlX +z%-LpA#!Wr+7<@jMJTx>(xEBC=~VUO%xT7O$*%%S}V{h8?ia1x>srT>O=)Qoz_Y$x%EU( +zZ4b!PQ9*1zTTA6}v}{cC~>u@i=q6A0;!2VF*^>=sx#^X8wm;OukG +zU3gyU+A<7pmM+uS?NnA{z5J2~$_9_2^x{N-;1PmH<|z3^9y}&Befo3@BMKI&jYxW( +z9EvDS)?95w9Y{%Q=loj+2o|><%A&XUvrVVUo?Jbe0FA0z%%8=vARfGn?Z$92P`Xyv +zV%3*Ps*N==$yi^5rLZ~rQajRmrmP^-Bh~tP9>t-D!^9JZYaV?{fHO7}it4GO<`rlK +zsy2Hv@ywL0R?B9~GC&^tW1Wc180Kf4wID0mkNu|ls`ZsYPo{siXMWE7d7c8)5zi`i +zDV_p3_EDuh$FsDiEGxNKo@m2=sY)Kx^IU+YhUFdFZ9{EiJyv?+oa|*uZz5y5nz}cL +zHkN{-zG9^ZT~>W*O>pxC7y(dWHp>1X)RyNL`Iq=s6l0Th+0x=GJYW?pEnbnoYLy2M +z!+3njg}$QVrT*2+d_|tZ)kQdR&PTRa%foe2UY@J;GiBFgWo3C}b9Xf?Ez6%P&$M~2 +z@)a#!H5X>);uvXhk#9MKu1UV4w$W2ric?c`Wtg;=duAyRXU$PLLUmB3p!P~JwUsrG +z_!+gMAe)l1xh^}a6mQ7#cvd$wqE&4k-i#p0Bug8EweqZ`G}O(>o3Q(eBg*5Gh~9UC +zHp*7ceX^2O9yZ`%RBdlq$4zE*YsRuloheJfaq}-3Sy2mhy#&F$0h4s>m8*S?!QDC4 +zE#SzKm7%%{OGzCoB_6EAD52+V>bPnS7F}2_R&OfZ+<>!FOerKq<4ZKKn^6>mWKMF_ +z;p}kogGaI$cSOkMq6Y?LnSs(+DoAVZhE6+z2^`yqZFfw3%A_N}N={~FX7w3$VmC(} +zBB)IxW0*yz_QX(8)>fcmp>y!aN(x6fasaB~+ +z4+-Yf7vs*V;$h8ktsSi>1!_iBDIwHgny?)!%lWa18U|W9*J2WD8?ltfCiZdW*Ttk@ +zKvzfH%DRV#u^t{Ks4An6C8CBHF~X8m6aHay9GxA#yDGUG^k40r=%-H9(m`#(C=pD0 +zl|pTOgF>4}d~{Mx-yjV_7%-OLzg4fO~OHqA>7*m#_c~SVPyA1Rj<Y+S3fiqwab{*BOxtLH}gea$tRizlJF||!z725{TKx3LnRQs4C +zHIFl`&6pL)!&oq%Y3X{830`Eujs0!RavLxtTghr38`I9-Ck?%BSLbT#*`(xU73)i} +zXQ-!nw)QF;<@GYjvVZ#{GFL{H6#_HSvt#aVP6{zwGFt<4*lH_eoq*%VYDf+pnbU+< +zMKoL}AGK~s#=&~OKOaq +z=dY`3vW~B4I=VgxH5n0f5X&B!x1*X^{PsbFk0VmxQ{QkE;A*<&LQBtsE#j1A)<`lB +zjxY^~7@cQE6a$#aVA6-mglBg)RAk{Gq(N@5Rf0v0+-$%zd6+g?<(R@%)hHG=Z_&$0 +z%2}lW`7Q!WEryS7;zGSTwCePZQ(%Lvdjn`E*V$N&HHw*)Wo4IFY|LKQh;PHFyBfK( +ze*BWY#^feV-6ARyc5q-;tPRWyN-nyfx5eog|7zP3wk5yuDgzf@kL{6`}SkuUeLp!{h)dG91Ew8 +zgdAul==gi_y#k@1ITmgLEe_%NP0;=K9}B+?nzs|*Ur0vyv&X_qK!Xn)!}sw)A3he| +z1v>r_JlhGn^^IfU8Th8|-Z$X~=&nB=3%7$V!1JKJpfd)Jh12nczTzz7Y06^Y9jfbbJ@2xES_8-Kz(}SA!k^-3EI2ih=Mx&;?fw +zgx?0;3!08Ewv=Bz5MBVf{hEPrA?Vgxqz}5FZXo<5=q}KMpyOKx!k#fm7jMR_1l@o4 +zKzI-6)_VrRZ-DN)5AkCm_rO4S4d||21L5tUdqH=D=6zux{4D5#NAZrvaR@&)5MBs+ +z0JIpi{Bhs}dI+>#!e54-ghBB#IV1E4Q~9{%}2 +z_^8ld0H>3|{|}@Cy7!j@;T@p+e}!~Fi(eTCACWL3|-X1AWlEvyl$y_VdEw%&GAI{BXDs)O|rXTn@Sbv8R)a3M +z0{93YbUWzQE5qSuLETq{!v`b`+7DWObvQibRQP*MIJ^Y3{95=8dI+>f!hvx3CD84l +zZ-DMv8xE(RhI&|rbU|m-L0;(f;qYUi`#}$Y7S|(xpyi;cGe8@F59ndgV$cOa_zAjy +zGyDTRum$x&!Z#qFpv5;rZzj?O%>+HP73BfC3qMBM47&dgqz8HcbRVd@B^*8k8U#%` +z9r~^C4|K+z;cyT%2)Z5AeK-7*`0e5FQK9$1{w&x5#S0XyynEpn=q}K9(7m5QIe_lp +z5e^>)9e*F}XTmSgDWL8U$`AA~Xd&qM`%zy&%R%wQee~5h`pyi;IpbI{S_5*qd^hwa|J*Xd`2SDEj9sl`o*g6CG +z0v!*!{XzHzdKk1Ebo@goFVF>`?V#>mz!CHiXs?97031PQfF1$O15G^>et~9!9speg +zn)gN61uX_G2Q3F}l6cT|iGLV&L3iy2e-8Md-Jn|^35R!q9{Lje7ye^tN1)|+;h8lT +z{(TvKgYJ3)>46^j3ep2zuovlpZhtZyt^?irbU3^lwES7%3c4S(7xeHx_z$`O-~K)V +z8hjr9XF+d2`UBAY-wTHqfR?|2@&-Nheb@sX|3maYpcrD*<=RqYxtk`rCXbqG<$!}O +z&nmwCSUAIl8-JSD*X7FXh+o}{b@N%TjFy=?kiP1AhFu<$=QZ^fljk9Ka|`) +zqGe=TVqR-fM?&1y$tF2pisgaqv-tG491Fi8@_A|Af>2WHh?c~-4N*SziCi1L-v|ns +z^!yfAUMTJom8RqoUwg8SB0f*<^V8D(p|~ZIA&HxUxEy@1r(ELvDz3=HEkxW_`Oc5T +zEmd(#B~Gv_M%;^tJ1lYjw7UG()clrFZ7J=^{!rRg$;8Z;Qpmf75ZeZw?f8Dsf_SA< +znA^x{x*OHylM+lUT#XM9{~vWEQSS5l{1Kmp~B4_?@6?ZCXO8dPxgwa4YQ +zy8SH)ZSi@b5w{E`xMc7aU5<4W^1XNByEV9%{Ap~KCJQ*el%)zI$dtRz +zakp-Bx831xzug`8iNRXxg?K-7=U|RmeK7+5wEl#GuB%$Fc(C}PRqdY$UF}O9-Iq|% +za%J0^j>|h&$9IfO{_SsK5f{9rjMn@ozI!X_=cnc5wj{K=f%N6cs^a-lip@=txv`{v +zS3|GxHO!MWjybtq2_ea=AO6O-#l`uO(VCb~FXVSZKE3Z)xH}nvytHPYzpE>$r85aC +zc^$1uoh?ZPq3)#Cj- +zE$GG2R0`VNy6votZ8PZ*!^^s?9IRuSaW9wD^&aqcf`^xOsq_m%X4cT$`X@JQKd@axBShO>P^RhX#SJGNnDKBe8Qt<4}5g +zp!d?Of$$+yUsNGVZ9z#knZom>TswHH%O84MXJaleZONb36PMpMxobjbYC+2>ty9`3 +zbxiEci2I8zL8&($w3|5#F!#q=3wnFva$BagPR(mOrE6kA$kRThV{+%DxOK6LQkH9= +z=guF{{U5^8ma4()0k0SLs1wp}sFvh!j|+_`A9PsK-2vIW0<2|N?zye0Z7KO3BfAn& +z16oE&4UGFzY_ckiUhx-iMOq~IV7&9UxI%H8*rhKaMU)4hqmcDpiggU`MK)Jtm&eL@ +z&@b$Hw3os;8pT=qIV1NuGCfBRbE=uh+bTjE>e{B5p~`-(_UG6iyY +z`KlER41}w3FMc8~7|M&(7$)`p4aD!4cySozn4I7B1y@Ip>%j+HXidvQUv#zXa +zYJ1St{&`pD=UnmMbK84Fv6C|r{%pcp8~rN!e)K;W3-k4as6z(m!8uBtKPs>~>R#-~ +zUWoe!tPxQL@MoXP*K(4-b$r{ny!NpjWAZ~MccyoZj^E;nDdN(o5c?FrAleXg@dJfjXo03VkgjbJ+psbtL36QZaw{^Ngce(OgyIk!Zu8wwBXPYao#+I1il8*6W&JMJ9jpsgB +zZp(z$ll^TcwU76QGL{cE(klmVrAjS+5ZgeEO+ +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 +zSWK^u)UNkY!|B7=Eg`>(#!DOHt(*{3|w^t}Cg +zooV#4s3_;Zvd8I7(CeuZ((&AX6|qy~&j(!i{Ze}qRAI9&8}9jy4>0?&L=V-s^e1Y6 +zO`K`(PhPEmzw4tWeDJ6GWIfYth<{Xr|0eoof8XHV&w6RXJtm*r$T#nUHt{CqysJ?t?*zVkswK8EM{Mt!U3JH +z!l~MC^Lued-q!_^0#?Eu_4m=6Mat +zj(lEZyq(TaRxHalp@@68di_ +zgDP+GY>TWi7Oz-sCA7N|e)iD2r;eKP_sR(my|rRbsOmm(LGY6`pXiBy>CL)8geO^? +zcze%vqg}2);daQY09?-yF=fN>=M2NYX&AoX;K9d!iN78@6XAAz#x^Hfsa(kRQD(L9 +zwkzIE9#4v`>ShfDvC?jR#)h_ +zp<@DNO{IZ#RW+s6Ra+pqaed9|z`FVh*lDl=SFSh@snj$=s0nxE=Wj&X@~g^*LA9!N +zjWuO~P4%U9brtoNssEFWzx01M>$%}Kv(e>v1Q`o0QC}YN7uxud_H5&O8P=md${%L5 +zMQtyM@xqUui=;>K^~zSuXGHN$TaXw}6hFGZ$c*AMtIANE^-Q?({^#Di$o1VzE$gOm +zX7deQmUZnDN!GWXh_gzbx2&rYaWA|sp;IB}vi_MOdO6VR55M*vb}9xe>%ya=XEmq) +z(`uf6#Fdca9btL)i%kz~#?w}u^>p}1=sDNBuTSxntpR0M*_!uH +zu{+O|lk2PUTr%&?S(l7)P0zh-w&xPq|E}0ix7pt@jQwWt#cq;y(c|#} +z@)Q0yPj5#}-Y0qSHoH2-wx#g6DpCCQD!Vs@7lQZgu;$GH&t+YF1a^8PPq5t)oiE9o +z$)8329OyqEes8piGx2@*J@;OZ!c*`ccsyPCIq;9AiT!@@DGC0SCcN%9nffTw0L$g4dUL$e#&)eA=6kKg+s!w`IMo$_>6Dj~8{6u>1t4 +zq$r#+kdK4m@HpXTMDZ=~e+7QCEsq)2wJ48)f7tz4ocM<*KUQ|Y=f{z!_Jt~6+5fPt +zsxG_ElEfsRW%Z1Uvz`lg?|AOLrHOrhua*6{*BagKo_Fz)Lg=o6of2#GW0k<74xc7s +zQg{NGEP*~g=niACKpr}pBX~#~ekPob^mV(^?Mcd6*O9??FP>XLIRx$Ng?JifIi +z>1fNGrWJs(jAXaJU)w8thN%`T?s#X=-pFCP5FD} +zgooZ*u_sh@pClppCE_D`;$M2RE)d~K7AM}`bKPi{>rc2H@+tt=Gek_;F#I{g@NXK1 +zFF1Jcv0vh^$Ie8!9iOqyiB_s)09T*-Ygwy7$8JlsJS>E_$+rT5^&4ty0u8~^`d}bn +z1(p^s50qEbSFEpU2v*b=FZWm1)>IUiuC1=naYM%h%9=_8>#Ax>tE;v^aO3)#)q!>O +z6|mD_1+H9i9#W}kgisUi$j{%1w5zMumKg@ss@65ulm#}`m)6x))T2E}PA#-7Ui5#r +zjo-{hm*a_*_mIEP#*egT8{f;YMLH45YKuDkq$s}B9do5e@ukk0DC{bJJtoAI<2XFVN05_%3g +z*LI~_ue~R>0*PV2*y~e#Wotm$Rkr5+Q|!)j<>dORJeSOSbJiteT+?$eo9(#-_P;Ck +z({1*53}e3;e6gEkUGzBoJtlUSG|z4xqx^*b&C}aallMtpyv?pov27_lu1XZYy~^%Q +z;f3IRJFIzgz;js_AAy}7$rEgMMCVKLX7XoIKL`5Hhu<4*;!J$seb2quqwo~`2OdvX +zeh&O&X=1-$d`g0Ur3tV5U5Po~Q{i*^V$agL1Ra;bxb#F|kK`r3?$1yBjelBI-=)(Yc^#kMUOKJnHab6he0m?37reAFBiwb@((9lfo0gWC`@~L3bF71@h3*9Kl2S|7XJKNME-r +z-JYbJbsZUON3O~77s!|n6x>t{x}^r +zXH*#sC(~XJX$qM_{g4ArW9+k +zJL%LR`5u--uUqHG3x?A4`_K1e;^cX@XI@U$Sy}VIl)S2Q0_1hEZ-(ov(s_~R3e0)r +zP%@@$_tAr)WK4M{5zwJz-X{2l4kcsKct3wk8s_YO4)UeXLUrQijQJ&&slp@b&pQy- +zSxIu`K_>NG{5c=Yp%mj>NpFdL*9bX60eMGAT;hw0Bus`{oICL?ScrEgRMiBnxTM5B +zgyNDCMoC;!;_nc0SBtpYjq@w8+;hN6D3bfzCrHeQB#4iNcw$og9JhNfSV2oU5!WQ$1!6zHckMg{@@ea8ELR{^{2N`1u&X5bcHEnq +zIr;%HP^x$r;`Rc3(r2*LJqXD4FkBdYD*m|26U63P@JjF*^F{mtuK^_f&fT|I>3P)j +zf+N@4P#SZ(XjUYA2jTcT_uMjOqqtF#a281Xolo8}1}D)H7AtXgdabcrX=E7~a*a7l +z3~WqT0)@Cc3&(s?^fyv|iDivT64T>FUu+V7_i4CSOwm)!1k1e;_b1=Fi6*UC6PJz?|GXKW$(<RF4xj=B74$wWHcKNoE+;wO!5;Fj!!Qm +z%Zhe*5k|R*Ew{R?F|K(qJ4s>}O{_^XexeZG!zbPf;;-BFUfL+jg$n_xi&8557gCHRM(c4SCnU!LDs^*_!>na+uD#gIY +z((3i~RW;=Zq5NScP*z)C5h$y!uecsOxe{E~$T(9&;}^O{xDwnWTE``vrEabnmyn2? +z>?|+?;#ihPuE#v%6DEM~%0_g2{kjorMx37DiXXo&Az}TvaVNQ4!Gu#h2?^s|9%wv` +z2H=WMc1?`cca0bqmx#<>zBsUYRen)X{$+u{;{4*ka^JFLEBytlSNK<1(Q&@Kyuean +z2a0_~5R}NG)hnR1Vs*g3W=$YaP?Vovl)uXIm6z8K`NYofkNZR?L^FZBl`HbCbu|?= +z!TQa39;j5Tt^?>n>+w})gnueF;e15k=z4 +zDog8Q^0stEaemPX-?Bhq5pD|tm;072T~!>&y&_PQUtk5cY`H#ATVJ)_Dz9x+Pdf>t +zw0?bqRa39r0t6oaymL98d**H^t82WlVbj7=&)oIu|H}EExhp+$@fcKfRZYcQd5$Sq +zRa?^lR!!|(JYiLK-Q2qR+F(Ulu(n<^Yd2H{=dPMf +ztHj(st2r2H-*J_E&V*hj7lP*23_n_s@h3>)k)nAHGg>7c{Yw83j>n@%%MciCS3KP8 +zACjMddACg%!FX$gW#*XCvGJI#n|WX?Kglxl%~<}($aA5w{A6n(#x?sDZ>2=mCDC#5 +zR%&ED63ZWj=Uk5mBHqII=^2VY+KN2S7iB0Ov+yND%8!YX8oZ6S##)6#%44t@;)+*K +zo*o|&Z=G~J6C6BaJPaR0>kt=8{Wz}V-fjIgY>!A)jN{7@h~dIhbhd@mbn=^R{Byx~ +z4S}0q@sBUBPtp#mR?M|g$sb?t_kcf?|HI{Lm$H*=^$bz3hO+ZjCI8p3z5YC-_{Z0u +z?<@ZC_2&TX*xSXQ!H?T^d^k24h5R!=p@Ye9Q9#`783|N$9*QR``}L^}`6Bf;P-Rc|&cWvb3gLo`)_hTItWv +zTV0eNShjSnk>zkj&`JJ#uYst83NDAhzv&n9yV>$tuze+h!hM=nR`t +zv*b7IEZqDT_Qs69nJ*ZcNkKFG+q=z$h{r-KlD?T&7k|B3^!&zW2odW`m*PL4I-oUP5*A_ +z6q7KGnCE?s&1-G?W`1O-!QaT+(=VsK$-miKGt}(M8hv~D*W2{Xe9O>kqeyB`|3>g- +zPGGWW_KVH;ZtU_VZ0I)Vj*ikd`^mfcy(A+C5p|icq1(ZgvNP$MaoT*Z$$Wpw7iiOZ}04*oIvhVvk9sIN?#d85~(CG7I{@FNft9@1C(W`4PZ`eHl! +zvWK5Qr0{a0g>Y~5$J+Qt-_R!!&s``bY38d}d$i&~O(K5{j)w6Q+!$MiCv?Gd9kTmn +zm;FzO*?FQ_PW^XH#n$GIlYMg-{i|kZg_~@~Z9(hZVe}8q)cW>`v0XnN4B^@H`ODL_ +z{@ug)Z|tN|UrP`E{p4(Yujhe-e4}SL61F9wqDs!t5=U5Ia$YkRA5;G_bTnp|QFWg@ +zA#1XA;Jda2Z9z*`K9RPgRn*@}^K@XMO~Dq7(r|7a1RMk$1RMk$1penCFx>b5oBygu +zM=!H8h6 +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 +z#Co~`p5@UlgF4WLh-7N4E +z{@$Vv`;ku!#@j)^nsk2ui?}w>PenToZ7amR2tTb+pB?b`OY*l^%J;i;ejWqSZ}4{% +zalXTE5zZGM$!@;1uGYX$igaGggxv}7s}8->@SBD9C5fjc^7w-BlEi(9M+?c%Zur6W +zc>m+(9`YT8JoT_U3%;r77Y66Vfh3=zy#fBdAb$_3UXPH!FuxD|kI*|R1|ZjC-XkH$ +zpk8MsUc&4R{7;kCWdZDFBi?(7ha38@!|xx|t2x$z@c$KdU#0lwsM`qm=>r3A=#4~w +z9P$_oc}6&fRD<^`#J>jK7tj{!=b-10anWyv{&G@&rl_wDJSR!((;9ZZ7#IG!NbBke +zc+`Ww(3530@=JyNE95WqD#QLY>N{QXH%W?n6XPq8M=LlQ1ldx`cL?fUQSx(MY70I> +zzC(V#VjdCqqO^{MehT>8K`#yd>!Upgesa*i676Of7k>UnO7l4w`n#df5_WgdZUkPz +zkPfIrO~k8;{yk`ym)4P9s@rPJTTRq&0qnP6y*NSt5O@jR-NCCHWG~3xkPo513-z)` +zocCC7sS>Yth+i7|b74OS{su#e_+8O1Ku0@id@uZ`A`f>d@B7dfLIEX03W +zg54{`4}+ZoSq}5DTgq=9`dh=V9RIS^KLGg*$9%6w+YNQv4gCnzI~nm$AZ{b@j)wg? +z*foZqY3M&I@f5t;iT4MLTOy95RA-@Y3cVoMg-Z1ldW%cw&&PUdhrCpnZ(s1-hW-zT +zGXwH7X{sp>i<;oUmd)c +zL+=~pNW^Ig-d|DI)foQ;`5Uql^ae=$>cCF$yM=YQ27ENA^GD>TM!(RPWnXkO!#p-e +zKCh&>41R_EX3T>I{#_xvfS(8AcZa{S67OD;|ASH;*GucFFX}Nt%4Z?^D}rAs*j)lY +z!B@z7;1vQt)up_I-b?tY3|={60P+IjYLJ&F{FM=PM1G#ovxnYg=sCkr81%fr>k`Iy +zfqzr*%Lk8tpkIJ>CeiwzW)G~R#qbj)>A#oidkk^RL_Xm25%%lR{{Z|%pj&7sNdAJQ +zctT&6-J$ma18cCJPa&?0v@YzBzlSt$Utu>8{U5|@}sE%FljLKeZVE#`9~?CjBB0shRSdI~D$Iui*3nOC +z9j$?V2WcI=g54_kodKSX=zk`~3qpI4w0;GT_OOc(9gw?F52>3yE@7U9o-O!@wlmrr +z5N8MKGz9IDkV0RUZXzGpokzPg>XISV#}N)v(XTHdk9hc53;nl{qcN}9sQP%Bw)%B!0#94u@a=P6EX~OYs1bD{#r`$%EJG8@T(~0 +zzf{uSfqLo?H$<9G9}rlBIt@Uc+o4~KIC1EA1}`^^AC>Ys3H}42UjyT3U?=jGaehGR< +zu+E+${#xWG{QSWD^@LoCxLu&o6@K_)%fp2fPZ=9|3*~ +z5cdsu2%bWQ;=mPtY*4>Z3?@)k;b;pxA=^qkS3<8L>eNk|&p?d-gE~Y?>(B+)gO2c9MZVsn +zf0rNt`5t=Z&|WFo8KVwwkneBA9}a(i(3ae?uCTj`^>rEf?2{CqV%#15yODny;$4P+ +zFR9*=8)h!?NJl&a&O2Ass|)7kU-)YYy%#0Sw?;Z|-NCmz=3@ow&>ViMWBdo&rIF8c +zsjh;5Q;cth6#cKkXA|UV#EC^7YtX+1as&KFp&cE +zH?UhJT@TXGe+Y5>!P^G?a}g*EaTXz;iSRo};x`9%u|pgK{6r$((WtZFUmtqiFh7^2 +zx;{f5Q(+ele!{*cctk=@fc`}(PoXbl5XQ&D&L92_h@TC`5Q*<)*fqoWIOJane!iBl +zZr*~|FW5aq9$%z<1;6F+QxA3(QTLC~*W$Wg8TB=l=HWH`-;(4MqH$lGPsK*%0Lng*cNqH`U +z9}#ah;yJ_5YP1I;ejQ2Q9R8!E^J^3GNW*wJ#9ab^HzXbw@T&)J!RLRIb|vT^h5u8i +ztMGFY@k^tBl*B{mRY$*zG=F1Yw*h{H{zmlQL7l9T|0Ag`Rgh;c>hc77>Bu7t@fu5U +z=RmIy;tYeIsfgEEigOw1}V-Wf}IpG7-Fs^cE1 +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 +zoT+BSg64sRl3;#r;BEDO^nu$PDek3mzjyl +ze1oT@&LiH*SYf?2q-M}4ik+{Q6FFdtu@|j-mBwr2Z*Ips%o +z=FH7c6>l5BC@MM7Gh>RT*2X9*f9*(xGk2j80}E!%P9L4yTubMzC!NxoRce)o4Xr6l +z<4I1@2?hfdIaE;(VJ-ZXs?3WfzZyS1byO*}qF2oP?DX2`o$5gU7;Tc8N@41(r8w+k*)mNq(_hdtLvU!>3d}ap;2*^7LpA!tUK&Pcif4MfYOv`-mZ`IMqe~MdPpd+0 +zsBciwTNmT+S&E+C{!C~g#%Nd+O@tfEVC3Fcr_+Qrpd&qt)G#*3Wn}#FKx+Q?Qirl= +znjm8($}8H&)ZnTtVf^bWv+Z)v`oQ= +zR9cwK5bsQ%;`AE+&OypLgW_m7>*G&ug8iw>B_;Dzu)-W>YmyXF*hpoiUUI5aDfV=1 +zM421&6{)9>qy9``dV43miza5ivx%#kC7F_LbU>0;^mAqIc?+z?8~CSrF#7D}!7n%d!GXEVR?%<`KB}Uu +zdBes=??i7&3ccyXGi?T$2WtJbYV8@OiY1zQjYeysD$o2kDMnEVmTpWthwG>`#_fHX +zQi`anRP=VvEcMJSCPpzBsodMOAx=7HFLF+oBSv8jIzQFmgfg}oi%dn)XBnC^X5to| +zz~U|D>#`zM!{;-T81wnsz$H2}Ju{HmDm|?gmXxm1WQ;WgQ8DSI%%S4*kA`fIKAJ8+ +zemcV)jY0W4W}yEXBGoLQtS*!eGh7UQB%J6U8(JmFz~@b)j#l%3IMDx9JcNOkkDZsn +z*PvBG^`y&U=(DfNgt3i^jt$fLX$&frS5lU>!9X=<>1*?~%;)6>T-TPiWXJk#Zbxti&&(MQqc?mVR84Z;gVs@+ +zNJjI^20Dh?=?&!!Sk5(>y5(T~(b}8E>76X*bdvKp?l%(@dB1GB9gjjT6hE +z4*x(6olkoGMz+LXZ6L!6%(*3Fk$RQAJ8Q|zTDfWT^l6aRcLB4urt6}b-q7e}(6A*c +zO_XA4D8m}idh74kV_8U4eC;StH&!JknMi1roWLl3HlsUit%L1cSS)Kb(9NLluVF@Z +zG;T03H7$#QCc`Ssj-(G~%yoI#M!UJ{JQky{I1TG+pgGD2rZt#k&Ho5QS5Ylx!We}& +z=#GhMEeUc*0;=mIFm8_#EvDLoY7(~rfcBx?(p!AWBls2KDuG|m|Y`sWGL +zyISZKJ$JxgvGE!kHcq2zt5O2!gS`cvXF9_`{s!*6ifLnRQhE4GubZL`O^ITvo^(1f +zougNoj>c^MH1AOEkaS|`^OvzEkf|y#8x^f5UQqthwbVrUnFXsen9A_CgH9%@zrq$< +z>vDBEbp}lmD_bFiWxQCWb0d`iwMhnj2=&%EtMyuEZB>PkVUvm$RW_b;n*F*1Hu!+3&JbHTf%!n5#cvMrJ@x|pf%1c2>g3V +z{@nn-KaD@zuP3+=suB3hjie``7TWypTa5_@f_D6M +z@%zR15DpLy6OIwi60!)F3I7su2sa7*Z)y(-j|oo+&k3&x{290pgfE1zgl~kOgkJ=H +zzZ;!#e}6Bw6iL317{4cx +z@$al!5CRFU2|)yLA4x|#4k2_Q@ZUV(&s&8Nh7g4V83ca1Eg&o=BoO%b +zh3g3$2%8Bz2)haVwU;FS-k3kzc$9FQz+agp&k)4lmM@|I3dtP8b;2#eeZm96W5P4S +z3ql^@Eg_%4_lo*R_)6gSrTrrOA<$)$@#jEH31a^y{&!VNf{wuV?%?;2@_Qxt?>IUW +z_;ZTY3H4KtoxuMFd5|E!6Xf5; +z^6#_G6D|?160Q?&5N;Cg5%|7(j|jO0{!GD30)J-XJ%Rs5YaxN}$?%)NH1uhXz<<-y +zia-~7Mt=rk{LcyY1P4MDf-Av|!1u!OBJg{h8WEZk0tsyi!GsV(cS3JMU%~*wV8T!W +z{|7mLjU>r`V{sCJKYKER!0*AIO^7DM5a?Z$Eh6w2-4?>+87 +z&=Xt;e6LhD0^j3^|E``lf$sxXkHGJXXiVVy3k48b5%_Ok@aKB?9{K#aasHdl{Ru+| +zBMAH%CH_4k-#d2_f$t%~pC94B0kVj|f3s~Rf$!PEpO@H7NFngoPLgRj-b3;L;V^;U +zr+0#Il8{N@FaC_dMZy)rP4w~oLik=FF9UT47s5BfPeL)lh(6ev5cqzU +zr3w7czI;zPTLS+rZGL~So=}xgoj`w+WMWU|hIHJ7;7U^neUgypB?A-57UQJc8-umxI)Mw+$7v4+$G#2h}Q!;en@yscuIIp +zcuOcC@OyChJ_+9mzXXPpRqzfk^LI(%Q4-h@7cPy&DTCpnZbn!xw_noO8R;P*U7 +z5cs{l{P(u!6A}nZ3Cjq44|)DO0UHUM2q}bJgfzll!hXUL!coF80)L$#nMvUL>17f4 +z{##cG{B?umZNgnbE+LQbijYruPxwYCBJg|KRP>J=69RwU%$#6N;P+1~PBSAcK)0vKY68MYni#CWbj4*;Q +zk}#Sujxdc7LEw9QM-pNQ3kk~zD+v6>pQ}hAq!RWJ4iNb3AW8nr!coF0!dU`;b|;%~ +zgK(2@i*T24pTM6lctXe{@O$gu6TTCQ2)_t_2r6^B))V-P-{;Hs8sqo%SrPbt0%DIi +z{%j7v@7tNc@4M!E-ZdcbXQY}D{0RPpmIVI02q6Ui;?Kf&!!d93dyV;hxS@mrgh7NM +zgkc1JpYmwJIKp_sBm%!DIf4*L;LpkMdurzrVhC}Bg#>>8;}XJ3!fL_>0)HiuW^46X+Xu#_#Xuze&UIL*#pGh~F>a9LiAJmcV}tlmAW@{|zY@0{=}Ze!n8$ +zTc7_f=%Syatwydnd3(|+!`kmdUUr>K(oqxAQ2Sw`V~TBHKTS6wEyDa)~R +z-l1|H;WtZjoQ=PiG~6z5yw90$Hg8m4uW)oS4Ai=5541ZP_b|g{&x}rXFRC>wIJ@=o +zM?&KHu$;BMbC!E04?a_~PvdDy+T+dbHl7)qfB8*mpP=C=LrXYsNN=0eg)HC)GA*y!tiP11!ee>0jXQZTs7Y6(Zj01=Ic(^fa-l3*$qf_ +z*?qR!zO39*jfBkuTzIxxx%MX}s`ElCcBnFU@(=B48yP>TZ=cDN$h4c@_EpE!i*spnvDvXNDRsE4 +zRA<5X_?#bJ+GAbTe3{?doFmM}(Yw>!+8cA0y;W8&EA{(azmrwJdv-s;VK~sUdg(5G +z^Ie^W3{yLA&*Ly6Tyr{n!!Ef;VrRbx7nHPNN&MKJFl@19#o8i%Nc8~RZXES%q6^_AO`s*J5+p6Wl$}6YB#q#x?KHP0Uuy9<}=g7sv&1b3}X>|Vk=hGuyUOYHQ +zve1xZ$R4wzd+##KcXN!Q{tMLayCx$ti)3Q(N9Tz)`P=-*+`Dp-+KXllcv$!Jr)gLF +zHL&9CpaOT@t*8pU-RPqHc%-t@x$ +ziX&olRD&hD?&?wlj^{iN^ZOdv!n@CoC2zNKTuZ2NE%{&LVUhXHZU_A*o!!(a$1-M6 +zlP=e5@7=p#Opa&HcsTqF8(wPB8KBkEV4w6p9wE+>=#J^1&lZuZ&bpEa{O +z_j*_oN3Sa#ii`83ZDS_X(Q)Lt>SnBr^iTOwFsferVfWHUH7b>0sZPA>Hh963LeN(P$n<+2qx;GwZ}%Y_nftw8uQK6NSFEny +z^g@Lv`(M#K4Etwg-_-F(uRp4NsmvQ{*Ed+~-bL-G)R8LQZuB|jXNt*0-8(ww2;Dzr +zy-DD})c163xuNN+z46c2952=SZ~L9?mRLuZ@u6vd<~e?(@jq7vGzlI$CcmrhMdNOS +zpeC(8I|iwqHr)C3UydiOuJ8QOWT%<_c-_-COT9cEe!cpR5$!XNIP`JY#?igcRn?a3 +zjk;KWo6>t^V$P&Bo|CMqiEn%?a^7+ +zSC(B(zC0#*XWOh=<=z}RRi2>zddNFtZcaW&U(YXv9H;2mw#=y}*5;`p?>35byNsJBR7smQT}d +zUGgs04{j5+Z)cTyH7>5nj*75M2_JKXOS78y)-FuH`!Q?Ux0~(fCAZ`Os05GvKezf; +z~!Dk3jr$?){XBWG~Qv3yji +z-^=ZX7Ha(Nu4weg*F7Z2x@Wc~FCL;?!O%Gf1Y;SnMudw@d +zZ&UjgVcEWZ_I1;`<}4@aaC=(0yVU1vUDfr*p{7=j3gu31lP!Ty?vtGPZIUh|VbcYE +z9QV_-g3fZxb`JkBllDENz6XT8wl(@MFF&ZUWkS^{kE#8p?Dp8Mxg8cR8C-XzE4+<`CT1XL9{K<`O*jcphD^tC9>dwo$Y%M(oOJV5r=^*~$oaia+pp%SNLs +zH)Li{-|pv_ZQFeDyn+=GtyB}O)F(O&Yxd4HkT&J{I%oE$Uv +z)YdLAEu~wp?%`dV;ty^;X2GX*RWES)=-rsbKVt^ZpPx|q)u;r`=(Anf`gqc{z1*%- +zyKb?)+Bcq4F<`ZCADe%YSFrYnTX8wgG2=;^^6zB(p#Hk<#;)_69c%S@y2pKtCU{Q8 +zXC#N3uKCv4w$-8>6Sy+!u&pw%Q<4Ep7ooa==rNK;hFx(O(l~iP^Vx4`Yg +z!@;#5p5?f<_Tg@E%;gY5VUhK_!xv`hgDroRdG9^ZzH^TSU7mWcNb5-Ll!l5`zUAwS +zpM2Z+d?ql>GTTz+?2F$o{$iEf#;u_;y7sWf-7BBTY&6xuIq1}@(x*zFGcUF@Dp +zwi#)l`PX%W +zmEVTLAJ{MN$5Yy;KIU@l%=t024yYZy4EVo2WU +zyR&-c7gl(^|K2XMsq>RZ2Of#0>tx)=aVaN;TAulAnN_oKmg}x}CmOm29a$4myLhYB +zrxUH3Iu008{${mxsTU_6EjoC^#P<@(i_PXI-YYmi;(WMwrPQ~rZ>H3#y>Qwn8|Oc& +zGd6F_Yzne3vw2!rz^Xs@7U&wO4tJ0JF>zvaVYvZENAG;mwaL$$7A94{S@anEd0B&c +z-8L%ri4hJre9P|7SkTz#r{1v=9e-Tpb?FD`Z@E&fq4VQWCkmoYpWGJGL6_}5IOJB= +z>&Y?t!wyZ#+%MJf_JXH*wK`Yp{5E&C%NpOum#;)e{Ft@RWuuZ{7iDH$dQ8#uB|A1R +z8JHgycSyBl?$t?`?-+Z8x3#o%u3g@WkahD+T*0m<`7@^+aQR5m^!Batt@3;BYg|0K +z&&&s|Ux)PV+S-5Lkd@5|?AOi5OS%po@T^V$t5at6i(@_uea!88vGWDiUgEsSr9(=#Yqjr=1x`^Tn6-GU` +z}?8c<39Y_xL8+fYRz_s4=>u<`C(&r!h7eTf84H4fm$%rn7nt9X;eOKfY9Zw2SYBHB +zUFy*AOHtoNU$f?&qdfTWVmc1#d+!-X)zq`qPWT@!;^l_4nhJ1Qc{}JyY(kuJ(x6 +z_j~>F$eWYrdu;onKQ=Y)ePey^X>!zA19#0$TUF7xdSmB(b#tE;aqI~<3yV9S8+y3s +z>&+ZnTQyH8llHw@(}teIPM13V+(6Rp?z&eTw+(hP%C4PuIVjzG@UesSTo=uH9A5NL +z$#jWM3eEk{GVR&wWf8~LRayM#bK3OArU5Y~^Y?f>rsHl?Qg5e5tuP5)^}(h;LATH1 +zQ}(^34s|_xXDn>*a{Iw#ll2b?8Sl4N@U6D$;xN1OD>G;B(+-dPWPh6E+=3oi9PDN1 +zl`7ZAm45V9PdoUyf6Sjt8J9Ua9qjONVD{^JlV(oWUvwH^#gBcWkHp8ul-V4SZoINu +z)a%Jni}f1^?w>k)$$~i*8x>DANgUj<#axZIRpW{ehH`9L*k$SB4&UacjBIvt_h<)tOdw{H;p1e#zcs%QKc8N}KKozuNSfg-var +z^)L6Pb**+{c;cG_UA=!tRQy~s&n<0!e&^D=-_=)J`dqc@SMTJTYQd`-S$X;xes>-b +zwcD}ZfbEkTT)f4uH+|C7ZvN%??Z3bL>p37iYn``4wso~s3#-FdcKs9H?#*hyZj-+4 +zYr6l->@1EZn_k*_99rXi{MDfK@3UU^NOxX-y6U!yxq%TAin>f4)hFu1Tg&VXKOBCz +zA8;wR_fKoX+jI50F36e}GhSoW|Ezp=a?sfO7B&lO)PEk8 +zIkP`U=0wvfUS+K-yd<3^i=tB7S1^ww;%eZ +z^z({qV!W69JohV~;)J~XRJz0X#BlX~k6Mpxe*BIIT^I3=`m;ALb+~`UVa<`fJ}G(6 +z2HLK(m>q0qou|8#V`+{gY^*PsnYm(}-;vmL+oPL--D3x8az +zR#^Vu^%0L_lKO^ap6H$IKJo1zqsw>SQ$EY5Bt|qpckGV_gBq^cDkE*>fsb +z@9=CGl^v8;e4serS{kig +zHt25hdi9&TR`IpxU7t}S-FDK86%pS@ntX2DdO{JGLq9bsE??@Zk=x1C+@WKP>h;VV +z;9<7m&XDuF7jLob=eoCR|GJl0`c;oWrB3POfYFy8J|EYtv;D>J&ZmUcFZrbuTj_Y;A(J*zr{F@0#9$d+Lum +z;L>1aX}c$(ldLj-DQ_E6J7@FjoYQpNJ9W3(GQ#ekaN`jx2EIQPdFzm85t+pu9Gt2hFRGU$$Lod(&Rm4$gdd=M@9oLjUVo}Z}?zYK{m=5ko +zkJ9nhp9xvcy}X;4cwBO=A9&5{exrY04sPArdFRvfKjX)L-)UaCXzcKng9qC=v|q+i +zwP#Sz-rBv-^3$TPbSC~0HPy8^&TdcA`44WRJJ4E$H>XBO`SqshO}2g9m>F}# +z>{FLn4tC`Za$I&SZF8vXcz@rN_InPJtY`Hqt?}ot>k5{~+vbdzIqo0o3#h;B^|GKD +zH6G2J)Q`7ERvLe66v3m_oU|jtEDOTGE{R~EnNM%F#Gn?Z-lP* +zmpWLi?st?~9dtPtlhE>cEByzj=rYAU%jG@Gt5DzBGy1bxFFIaVrpxAn)(2b;kDV5N +zacNgD|V#X*Z_ +zd>wkBYq^~Ir4s6@TP&VEsm`IW!d3@6`~1n~=za5RiwTdb_c6}ikuoYfEePv5j|B($nBc8MK6!XFTVXrp4 +zUmIaI$YQte%_YGO4WCW54C?edadYE2;M&NGT<_POiz>)Hpa-1mbAUfs03fmg3N +z6*y9e-!~2w&#u%dxlYnuxD|78^}_)pgO}9<^R@OsC_pnO+y4 +zS}m)blaz4v8OcRM(?<`?b8C1jw)*B_%Kb*pQ_`wO+;8B^Wv|FF`OZU{wjbH>bR8}W +zlC4IDmVQ{K3LP8XhyT2o(7DIuPmX6=KDtu16=7vlyKvW$&UFtEuYoEf^ItRlZbY~~ +zo9fYF#OCUR`*yXDL?2lZv7)-`pQls%|5-^gqwA}w94ALr-*WI-i;PME@tMk|1kHWL +z@6hK)MNi{eJ#|+a8YlJ5o@v8n?`cyD7E+(vD_t2_e?x6R&H$M(G`TAjO{;P)V +z$7i=#-J;Md)#ps>-R4|YPb~F&rtJ@t%X@NTT4&y<FKFn;= +z*rjKWI4wHc-MM3ndesu&JLK2enU}lz+L2p+jm`M+{Q1)hc$;In>ye9hw!U6-mvFyq +z+=t`=ri{%lCjWhnDTwxRDUgOQ~Q`F~{J!D)&qozKYi{=$S+S~Bi +z=hoM6t{6H0$jj<=Z!V+jQbFkKKOYHs%k}i#(DKRa=G8hlw{ptkpxd1vaLL;yyW5W7 +z@>uYs#M7~lZ9AI`&%bDLFX5kF+pi299%jywQ`k+H5xQ&^m#0X!onK?JXNJ3*+Tz~Y +z14rGb4x0k9@5gEuO#5y>-oMt_Z6QS@pPzDkH9UKKVfxmffj_BzCe}DUw|e7m +z%^!Spp64|yVc@U^R=Y2{F6lXT|A)kXYt7|y;W*o{zH4R;NxS#Xio?Zyre0_NzSe+l +zmAxl>l>e@AbvM?XOl`oClcj1ie)-@zDJ~YxI`8gL@yF3=iH+;5jyP~6Z$n>?7Prr} +zI^XY9QDXgM^1Wo2CM;xB#$GOY+j!8cuf5B?FYVTA+6H&Rd-IM(_0~OaXh#0sD#bbE +z<+QkLPRCvE*{?EdwdYaGGYS6y! +za^G?MxE{&T-os53TefoCx9OWr{dv>%KaIzJN_~9%!Ix8of4Drm!Sk1Au-i^o=dv9R +zRk||xa4ollF)vJB1$?w)Kg~ +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 +zNR?s@Rsr8?IE<=B_Y%1mo^5oRR8 +zge+J(aLUEo7bmZ=l{C-kJ787H@K?P`HtyHYGaz&dU=0?kwplk_il1UDan1W?Vvmgc +z<2nu>^*rLt_mM;2Z0TBb+vPj)1G`80l$~`i)OXEmkDT8>J;38d^i)r;z>6!QT$4Af +z`d+wKac|Y_JWbB$F9VqWsN02Wg&e3Bd_MoQ{jnEH;IXyDn%J}{1u7nf$m~`kLQViMRZF|cBvT_&zVLa6&|H7N6#4TeR@>A +z4Vy0=Z`I?(#8c&^dx!fUvgNC?8jlr==Jg!Vr($>GGT#-G3*?$K1&*gzy~|e_nN`wZ +z?vP_hpXKYHdxovSbK=*rgV(;8JagN_!)n!m?e@dDd@bhvt&aPjYjf+)RJS^KjJL)X +z>J_m$>qyJm_KeF%mQC^;=RP59){l&0+s?Rd`@CRJOzS%?#q*RYJR9!)G>p6EbJ2T& +zu5bTbZwu{B%Q5?Q)8}tPn$+uj__j-f_AE3f4t(9# +zm>BD~^+1xnTbFes9)=7JSDvzq}HOM_A*yY8I$e0fe +z@blRAUEPp;pgPl{=ZLK*D&jC@yG9T +zZhhP}^;yW9dE?7;cAdP)YgpD;_pz28Wybwc!1Tzy>xp-B{iJgzJz7>88&@zIF!iN; +z-|z?xe*W}ppYMAo|DEgAkw4yL<9TY+k5BAVYfU*^X+!dTl#i-BKmps^gA$OW?`4N?)M7Z%Mn+uPJG#q?+WFN +z3N+(!RX%Fc-HKXE4X5F|AN_jMs8VpuEEL=2M!pP +z!8w1eRj1bY_FbPcZeY8$a89VRGNF+7UT?R?*CY3@JzAq6oFly+J}wS*uK9AePzg9M +zSl)ee^7iVvhi#l@S>f)N1CPbuXTJ6UT{>MJv3~w?zZ~*$#(mEM_&ld(Qb9bDZ6_8s +zO`NFql1hxgqh9*7jO_TqdChA#yKe+rEXz`@dOPt;lVPvj1{S}1;`J7&0}oaHPKm9P +z_idgO6dE=1%E#)nwncrrUaIKLkQGhbJICAe<*60rzWMye<&Ujl#XL$MdFz$#TdD}0 +zb1rzCtHy+^=%52~K^&2W;0*ko%fkDc@po;Tj=z_>zv8zuX)UXa(DbSu+P6v~9xDu+ +zv--UsT{Cy1k)`L9i`c!?JbPK<59#l@@VUZ0-R)1FYhu4m-dQsvu#Jz&Z*NSAQTw^DC}u)3F#HA08)_9Dcmj +z{f$3TI~wNoDcJHv{Gt`Vzu0ab5&mTO+(zFoRCb+K`q7LhaS3ap@LcKnfpwb$mo2N7 +z%cVfCjC>dHe6Uf@bUb>)|Kl^JmO3!7r#1b`A0LhD?M+1~%O5PbiyBnO_hW80re5v;M +zJ2CG&RIb=_RPRYQ66QbsJ2UNNTAvG7;(enBH}OqbdHeLRXI)EPUw>ld#qxs>d2Js4 +zD(FSyNgd(PpY?6=zFneYneIcQ4|TS!{Rl^%8WtA=oH +zQpdWYU(Yd)PZ#gA_6I=csUg>)C +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 +z%L(~FXkx&af1GeRm_+Afw|B=(o@nW +z$%FpjayalnKawUAAo9RKm?y|~%SG|*#`gRJ^h8{5pggmR>lL_hI{8K5mDv84Csc0` +z%RdACQ6Jqc;!k6IJzO8j`5ZUCfD*y@A>hd$igllkM8f$S#y=!{3;)_*A8bTS*vKQYgv{c*z$ +zC`pXN#?7*Q%#%sa6vi(yuEov6phPjg9`X;`%{cmJeImi&a=#c!{5F=K5kt7?A<2t* +zV9mOuk9`H|bw| +z-&GsqwzOpUTP-7Y#xH~rkFhr8vHhHY1a2zoDNBMo>_B^%S;Ojhnte@u4u19!~-s__dxt^W$(P_tWOg!~E6S5pKYZ387G{VSgiNh&(QL +zqeU%2-ohxXC4t*ZP`n9$^@Vto`^6pN$9+Mu +zwDcw1f}8q55%%fRm~iP7*|{k9i<$w{F4K3CSId6|`?o=WVS9~-h(WZs1dQ*p9dI)s +zC}MtMA58q_bQ(uunZH?U!nF@cK8pEOJqS0F`VV|T8PdmomHfMn +z<$E+F9tUp92u1Xl-+B{nenssP`6p>Q_TM)@SiS$9ib3~5J6rxBeGL4Y4Nl~LZ^`w( +zBzt~k`Fz|i+cwIpVXP;<4;}gK$H{Kef8fsa+2KT=WQYg!m;EZ`Loe3nfD`#yoCnMa +zq)#@>e{WAbwwn|`I>!5#1pT4^8n%*uTQi>SguffaE$U-9MEQI4?_n7yY_mRpQYVqC5}gm5aRw@klGEU$`>v4fzCl +zRBs3u@$anOp2N7_=M)cue>^l0d92=~f8hUPz0UN+eT*>0QQW&^TC+ +z@sHSEkk_v!T==VWBf_sG0B4Ad=U!tC%zj_VXLCn+QAfC~l(mwKID9dNy`~=(kg!CN5_UY4#?Z1u; +zP> +z6^iID&!8J3ZsE->MgHs!YGB^5|M)pCP2usyn4kREi~Da{W70>8C4C~ey}0MMY&Z6c +z=-2Zg-y&`;{`0v1U-Fg^NL)}H99NZ~gQNcXtE8tl>ys01L!sU5HtN^H&MQHG***^_ +z|9CUcu)3_zAZnK%^E_v4^bPd8)jp_cI$S1YfFQ!TqKZ3^@ +z?mY^4z-~Ily!t^U;@6HR|0c12aW7Qak9{a^-?5$oHx49R}(_|N@xRV3AG;yfVQ +zl?ws@`OTGz%KXXlPq-g1^6D7s7h>Mn2^xa;J)ZJ)pU`KYm_N*<_XU5#)xZdeLM^otSDVNu?aLGkIr^*WOm{JJ|7S6Z13_SAJ!uRHix +z_WKvIq_9uNXsTDmFX$EXeB8Sm{qDF$5tYdN*PD@F)Qaozf2Je;?|FW&F2tj|PX4XO +z?P`tfg?NDNvt(w`@7#N_d;y9RVTU|3e$Af|M*5p^<5VbS`6u*0C;aE2evGRG#r?Fx +zPWW53B|W7rWM^OIFAZ^p_AyT-ziSxxa>7%^37+Xq`YXRzde)6_8~3AR=C9*~X93*b +zMtuyy;5aC1`6u+RfrP8{WPdH=O(Tfkw2$IJboi!D_+tkF5BjSd`6ZKizC-ty^Fu;z +z8Hr~6uOQ;LE9RepPWT&xU*!J6@$b((C!oI~ZktbeCYbStbqP0Dr~dMeo8b(P0rz3N +zsTJRM^bH{W?MCviu=Bi5#Baw$U4AbI^X;@Qu5 +zkyygjPpBX181GRDaPXJ?1m#;%?`iJuQWt8k;8_XgMSaW?jmu&jxjvryd!}L>34sP8 +zzlz5}@&bG>4EYLi!|$Yz59^a>FyTf;{NzM=sMn4gQbQ4OV(dY<{{7GW#hJV(wioSb +zqW0o@V6c2_N4Od{zJ>zbRxZwPxI86&-cr5L4dpU}`;md~%ZWG?xLt9-Zdyg+F}$OC +zeK|gz;etoWpUC62&4(kU_8cR>`J&!=O+KZHP^d7g#4JL@Z&<5 +z_oCgbd5Jh%{wvx~9M>V(cpZX~@e$!9Z{hEe>oG3$(R`==lEV1*Q6vvRy#}6V +zY8ije@uOQ!dJ6wK!%cePvE`@!;?F#faJ>FS{I_pN^41*G->0*DRoO3UDXjU=?HVwI +zcyyI14$Ul|0cX@-Dood3qQ9?zcFXNLMEP9Bb`bLBEb5O*%+mn^9p&v26gX@Qnwif1to?_Q4NO+857i{qr4mT>ctpY!CoR;=f3irYZuH}s_TT1HXcNLJvs$cb3sNaeC_CEM6#;rD!;#0(J@c_zWNs2tS +zA(Z$v({szb!fru~+m2G6*-yWg4DkH|>Z9WC>w`%hr+AC;EZ>{_F22VJ?@qW@u^vNZ +zAROLHDKm?_Q3BkJ^&0LGkHBAY9BP|Ud&5{CXL!Oe;xXgPE1>jZd1rV)48@yvFBzaH +z+u@4~PzWV~(Yb-?l=nTt$ +zhyIB3G__)VUDc)}Z{c;S5Pou54*H_JVW6A*e--DM?nc5bxu`)}`M2;+kg43>xfK5* +zKM35Im-{u#$J8cyV^U!m5%NbPxn0YNCxzwnaX-?WrMUIxcEvU)d2|tq!UOGQpH22pWckJ-56mkhBL>FHLc?)99r?gZM!Xr{;e`LG +z6MR^Cs@JrM;?~MM(|*Hz=q~9F5WldqGx=qefCv0yUqg0tWuBT4Fu$5V)B(3*drcQ9 +z&P5(LQkU$eWxosiFMzy(_Oz$|?3Yj{{5>J<$Z`09{9Q +z@4iHEy@w$%pro_>Rxk_lJ8lz?#CrY#c0fHfigozTf6Dd@23pzgwTQ>g +z_4b8v9C00A_o*4*1o4TuncEx6cn$WWR9{!cDoMV?ueyJObB! +zq4*rc`0iZHqoH^^1967M8J-5|0`;`$X?&63@39zp{4y%Wufy;=)YCGa;$O@5={1#b +z`=8X0KyA59X~Ftj{y9E3LH|M?^&7IYhV^_84M*IF0SP5m{t4@If?3b$)ZU=~A1>>o +zz=OhxN9RlVupZ0zHxiGdHu=%Y`06UmpGExB8L!xhaCI-j{Tc7p8*u0^Mvi|qmdUZK2B +z7xLB~#IK<+m39sw9?J)6myY?Hj37Pbm&O4G-BvEE^(3zvOYv}r@!ciK4z_!Q3p@1Y +zd@j`?{e>SFLq({+RndR%j-`4H*C^j+GQW^F<)J*Vit(mUFY;(LWCwr7Gba&``4lx& +z_`O7Tk~cgeeFEA3Dd0!s(GP)y21VH4nY?Et$*Y!9KQ(Z@&UhZeyj=x;)Vq?Mvp8>* +z!1*xNdz|u>FXIWJ%-?|Ygl5WR?I^+xBdOljaGi!_XB6R9e4#TGu@1oqe=ggH=eI`r +zxA0EII)s}%C?3wR9iBsCL3t~$`!%vYcz+c0q!wS~3q{!TFr-bCH(Vt98(5$J;hl(I +z%lHK!iW9B1u*@Uk+P7vLm+he)w0}~2UAbK!VV;Ay +zeID7G{s+t(<$iIJ#x)U#m3nf$itiDe;cJ43-^|}9LKw^CNjcz0eRh(4 +zjEryRc1eo$Gr3z(y_!#yhhtg(D%el9=StF3_@(Dy!X3*f&V^sx!GN+o@rA=syqL#S +zk>pj0qz^uSg~geC)#~UkwPb8pUX~Mn82}2P-Aw$wMl$G!`kpAL(qVM&oT@KENqFuYH5s&5s*(aIQk-D@X9!)2TlU0nP +z8p!YXM)@j`anD+W+h0(>4(4`+w4-`$9G@bJ@O`{^->Ik~U%h00gW~({%*td>o#K9o +zJ)HDcO(wr5a=q7`%)87GZx~m~c)J4Er*gaaK5ad2R~w8&^cRm8>5T8L%RFpP(XQiA +zKg!$Y(Y!*;TMmpTeyK3|HQWv~{SWyC +z;2^nO{5|74mJb_5JgW2L_dvGWxQT=t4^qB;%JTS_8}gV_$iG>P?_qsZda{6tc`}1Z +zUiw&6mISlQD>!U19%gd6kET5twerpo( +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 +zK0fU91Rql6uvg;Bed-(x2CCVuN(vJZ4yxr}fn +zd1F1YzmD<9A%yFfl4C`CbM_-#xzEOc;mpr@Pt0>3LUYh=8dr+jRm>mi3p}X5;<@i5 +z8j{z)q;cvK%dg}(*Yfvb5sY_;C3(k3lJ{qPY#YGQZi?$)XZRBs2T@N|AnBRGJh)B} +zapm_Z*@y$bj_2WEM!DR8=?CJ<^|8))EIo+d#OvYp%;SuIaWu(0cwZ(FSGlSYZsmQa +z-8g=>@O;Lu*e_)@k6)&FpfD6Me>RUL9_6~n;uz0h2kQhHXAP|92*@{xE7$YKg2@m! +zmZ!L~vHVTW&yGOi5$gf`KuqQ-OE}-2mIQ9%{rrQO=VNn{H_xJRMBIPA2!SoHhvDa- +zMZfqA3M0Qou`f_nuoL3uXB6jJ=KuXS!mXnzzhyG68cevOHN}aM@f>J3@Vk-kC#V?j +z590{(n{pBlgsWUG#1SrCrFz9YtxOfdtp#Y_F6>sYE%iI)`Yx20^H^INM}(g9pd!RI +z7bu^Ie13Q;@#_`)CXI$LKs`0Q?~ots=?pKaA$c9&cM|eC@QYmUZfdW%PqHGA5Ng*`uVJ~zdXeZ)NKS~uc1U88&`uCK$P +zzoVY^kECa7Qd2qx^INP}lTLd2a(jzm+(LWRyu+%U<-1oWc?-vnj`5N;N#4Zy(2Mc( +zx+Je%NA`DNerNLQpze9h)`-ErSt7V2H=1JptGZrl> +zBVQS>-i>%{pDC_5-AF6@Ge7UcBl_cWFuR;jrc%2Sndb@Tf8}#$mFrS_mCs9h!F(Ir +zW$j7!KhHc{#}F<(r2Ll7csSorQ0BvH&@WIQeGal)J?>zxp~PeMqj<<~p +zWd3cVN#4Ag{37!FpD+&M^}eg(df&?9rZtoJ-!V@R=PUJTva`tZ4RW!+^3wd_49nlI +zO!XRDl7b@7JHvahAML!J7SfkoqT5ruG*d_)vMQ|ia3Vhg!UOGNP|TNVR3$x?&#iCb +z{-`}haV6rvYzWC~_&z`^>m%gNithnux{$mQKLq^<^|9O}zli$`;{vE%4#j?qpV;rJ +z1r&!O&I|MXDAR8=PT5(XrF8iP#Vf?H3ewvPPXY#|L +z;V7^1FC1px`g&U#Jf#Y+8IF3Xq#*s*9 +zmz*~g_jztZd?IciMRBEOe%ww9>owyIYAE7*EuR2-T|`Uj&bI>gPDgN%>%-Xj28(cep4{v4)7C} +zsVxXMU#9uC=oi!Vgd1m2zB0+uk|cNxihZ-4@id1pL;L9Rv&F|Bv^~{2f3`NA@ +za~;>alz75eA7}ENB1zsJMe!i~QrkfFI(VI!xc}zaf#h}F$^K&eTAi10m6__T$MwDg +z{m~AlaEb>j;~wFJTRPCVvx@PdM#8m<^#<+0O=vfz9ZIT6UK+;!Vtdx?N4S~q4``Vm +zw}C<)<#XlHkZ(~>U4@_R=?q^4aVW>h7V={%^IL}yZdI&nJp|V;Sg)Z7*-ebI5mQ+H +zDDez(C8AT+3AfBAyE&M@F^nfTFH$w7cw=#C8yFn(gXW)~ug7H^>b3EH{$gGo)t&hD +z{C%07?e-V~3EO4i`3!`UTIat|4%$_9;rdNf%gp)aXz^n;rdIEFrjGWpRhh$Pq>|*gNR_B*DfLLw17kWn7>gT@F5z>8UAem@mRW%e?=Y}hItsrHO2jt<0_KZJ)`&+ +z{Bz;Ivi+x$J_fGW6ZL_1Y56^OiHvK&L8zx*@m%Bx@E77Xer{UB@-v1Lk8+*-3>emt +z-^SN3y@b3IJgN!FYi^JsMgP_536~yFyC6K|a+&3ADo^?U-i){5>vt31HxPMsDa47K +zm-OUcab4E51M#c!a(-i;uwcpq%I9eEalcmXlh7CpBHQ!a&vBBAh*K`ty2D;ooh(gc}v>oF6nKT*ucz(B0%xi|uJlf{qVG#qC`I*TvW_`wN=y +zX?Q+Uye{!rzOCwVbX2(L;!QdzR|ewJSY`Xi6U +zLiLLAy%XD6T19$B!+3)wi?7oy?i5#|zklZZpleIleHkP!6^fyHP0PveUW^MKX&2S& +z&33o|*Mq2!q}X@89{2_0N4d^lf_#F0R6ZY_iv1Df^;?NQlkMpPc1Bzm2Z;iTSa){{ +z+9&fU-iudLPxAJ=G!B+zJ)PmBaoh)e%!>6YZ>M2g{rf(77cejCqvmx=!Vce^$oFCY +zS`^PM?yN?3v-9)dX4bR9Z^Um|LgPY^+-lesjK_U@OY#?_HM!)U{%buqmL(ol5Xp=D +z`2hkF^;hxx(6=#9%f^gz+zPz76aIdnugt^mO^aY2XLwPxGt{f$?=eOGtl)(I4(A6o +zf8QkXWIyJyKcfB;%k>I=T@i}g4EnX?8b@|kzW**9%!~S1{~=4ZX8Q*~KgE3Vj^|5E +zBke8E@{=h(^(-%N)nDW*lJ-Xut}0oS +z5athIJ7{qMDipK)Q<8dPzlONgm7{v27(X$P>eaobJP^cqYZb}s73*eqVLt*r4V;&Z +zEI+X$$=fTEJ{kYPGl1jG(v0QCXP{vtp4PbGP+VxE6YP4W)jU#m6qOddh<#&%?X +zk+<7HcgDCf7NLGE*2g{sJ0q^=g#*#d(Q)L;sTFQ}G<= +ztKJ}wd7JN-it*IH5Aiq_)4WmiBWL*Np(HPTCj02v&Xpm6Q6Fn9YL|i3k?w-O5VusJ +z_!s$nB#hUnr}`@KXj#5?Pml*aO~t8QzKrL<_y>8_1L7C?${D@^s*~j(lKlrUPn!nB +zZ&a)^w3Y#VpkBKI{~r(Uew+_fbXs{|>)LeH{E=T5z9S +z1g`d{xHT}({0Stl+<$dG%ukSCKa1=po-gwOeUM+duDCw(K)dvO-wDhpm$F8ZH&>_r +zmCX2Pj$1)8UIfPvzJ?p+C4L`S7|T!gCtOpJc(NEj!?=DH`DGj9=^bc1H7ee7 +zR15Mv#-a5HwM*P*_&T2WmHVa+sDwQKejh;s1SIk}_E398zbFf|sJ~{Wo2*F!x2rMR +zOF;t~C5 +z6Nn+dwg$5$^OD$FX4Mn#5EJCzgt)zlt;Tc0%;sKvE3rUp@{2m()G?$ +zmR~f6c=S^#U)^E(suKuTHKhKV!SZLP5|5FeYlvXHJNwHt1_l}^^%!^KxOGI6o@T~T +z9`%>_`%oc&wHx8e^?vrU7@z-sFH!->tJp5>HR5+;{gv_(;EhxtP=4guHk_b(#;>xp(L)BIUk<0(a#9IUeRsB7PmuGlRI^axm{gJ(c_5X(238ALah8Ni#4W{(V13$lEv$ +z&CDMSi3@qm9zW+XfomI+-^G1^#iK}G&-*@E*zdW03Ac74`@}Qot}l`DC`|Oz2;7e&*{kjyefn&nma~po`4hi}|bJ{UXd)ihbVHLSC`IdQFH=w5M|4 +zdm*pfcYVS*s@L&@#x?K%sJDcUyi~ +zX2m{K^MO!~2UB60!Hw;Ibs*KNT)!6r*K24un}hg;J|p4p5Ld3}Hw__N_YMpQMeNhN +z8^%YJwR{`l|t{M9BTulyb)C;LUs_T105bN*Iy8y7VdXcyCjA3 +zJW9pS?bc&G1#VhJ_80vq(u?$0uFKWod;s*+^`-bRF;6UxzfiA9@!pX2Ifydb+{g^+R`kh7ott3?nBp$V5oyO9UAdhxX?3Ypn5xVJZN}5p+D>MJJ=KTSH4GeL?hz2DDHa*dG!(UmoNK8@aygoF8C{j +z5x;d1_4kqrd8IyoPQ-p)P6|`3!@L9e3hid_V9Rj3aJxLzU%7sAXB)yD{C-Sf=QA7+ +zR^Hc6$9C|n!g?y68xpup@qAGA(Ijt(qWMM|^F(w59Q|UWcynW1$ZHeGKK~_;+t@<9+3JIE*+xy>Baop8CR~?O#}bpJ^)&lbLDd};75BZ?}z7y#Dci;dD|N>f5UbA +zhNo(oA&GhXrvG|g)B^PZJE(S&9e`FYt)0mK4Ti$@+M1Jn#Cij->V)e*kp=cMPbkd8 +zQQlIX@~Y5B=Y;A&rZWE|xG#aY>Im6Ci*dL1Y_~U*U^p73 +zZgGG^do7A_`3=aUp7!FD52+RKm=*BJal(1ti}|<1^aJZPOrvo`wAYz@9mtbduX3Gy +z-GWrFn)e$K?V1Q_3iZ+R{LPo^6}WmYjSK(FSG`Cd3$bdbju*Z)g`H)K4tx#;g=y%U_5IS>v?YCc!cfJ +zQ9so)&t>eVAg{bm?5L)3#M-pHEGhC{Th>##UxDCJelO4xs>66t^SE4+>s<Dx8t~8ex3!wMlPu^uRtD6 +z7R3XYQ7-3zAIDRz;(q2UPz=|nWh(Y*?~K=>pub9SKelI2;y3YrDM8Gy2m2$BO~E7N +z?Gb#xj^|_TKrz%)-|gpk?gIS+`-}Z01zw<=GCzN>C-yUG +z(UFwF7f`2evHqVf$jSD{hT_rsa;0C +zPitWLb&W}X)p&|$@!q055QlQR_#ru#5J!Ks1 +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 +zt`~jt|+FS6M?@QlTI6XhvPyNPqp4ZS0 +zgAeh({IP3=C-oKtBzUfL{O0=1rDS0@`Pj21JcygyC|M}evL!aaM +zckqYvm~1EhgnZo?!Whm=-tR@hFzvYx28ZpZu9QAL;_$1_ZDl<&uS2V=4|;k9?szHmRgP!xlhi)5 +zz2>py?Vs~nwV&E1{)hPF;Mc4De00xMfXDY%eZQvmbGr&pkmnrnP_BL^K7@Wh#JmLH +z>32zPgZzA`AUts$Z-B@3z-{<1&R5#+?F@W)OGEJKvv#qOhWx`O2p-$dTq!-e#rZS* +zGQdGk-Oo*jd07np93OAS?@J8*eiU|$_^0>*GCUc_|4*MYDvJZcGrv4D%`CApYgnh|xLxrsUS0uMk6MHg;tKa!!#fK*xzF2#1*OCwM +zefUd{7XI|U3-Q1ERf5NLHKF~ye@7tD6WYi1IUlB8V7%><5UF@(bCGBYj@(Tq1bZI{iz0yjj0b0I%C~3daTf^S=LeuJfne5P7 +z7|G4>gXVYMD?9nH+|=5r5uus`xX#hxl->_xt$koSqwGf5JZ04QOxr^@oLgyCm!Fz5Xrm +zExVZY$>&y;@*^K#8`Rfx7f2ZVp2cO@D=YM9usP^H$k%OH6)Q#fLjo$B>?yoaDNFFvg +z{4`&WWTJY`0Pl;=5&x&#f$XO=-XW*+2-1)7PDgR$VJ9daTM^Zh{MRegJ|FE9ZN++r +ze9L>C$!<>PSG?c+m5L`rJingu!}^x1RB +zMQT5{r{p=Y^w1N8Cmsp7uL5zhQmxzhi>e +z{oZn@vptW%jxo;P8pZj4K27|bd!_XHdT;;XyyNkEGgdqNEZ6IqruY`-WggQ+da|Ef +zW-VLJpA%dT+nBl9s}PVeS_$n%}Jg!PUm9nzvX@{6V<778}iG3r++65 +zfuE&=1W!IMIjK6HOBg4xU$=XG4qvSO7mgF2wAWJwdAJJpka*&I5<>gAdqsa(A5Fm@ +zkt0+_ezEKFQHt4 +z&+}0o-QJXE(33es^h~<^|M+CJPhO0P!?T0^n2cQQ!E;s17m@XX%>2ZZNg +z*i%0L48D<{GY4wkL%!&?H>&;22h{J4YMv|x-#_K}cMzUkoX&j3>G`qj^PJ5%Ey@q*N&EMYR(Si{s)A=Dy;$LXCpkj;ey8{Q_j5F^R8&9z +z#g_|DCbFMr?I$|3mukFsdcWU1MDY1fNX|13|HvBQpZD*mPDJgek99scpRaa4w9k|L +zryTzFmhh(z7e9A%_?KMo;_vMI!0q1r4Z^>~$NL<-PJT}9Dm-^NJ?C65{CyWm4nrR1 +z%PyajXG&kTxZW++zCeFL{Lyz9f8hLyzoXQ5irOcBFDRzZo|kfdfhS*gxpMkz&=1ag +zJIXVB0eoirnXgICuXa2Ku2uWkAAJPuC7tcxi9aWL`+YD>%6Z!F$6M;~ZD%+=)1oKi +z@RQCKJnQviAj6*Ho&I(>zvlC`7@l3RULZZ0w@J=JJiqs$j{oE8H|XPH@bO8tpZ|jF +zVTf-B;m(ME`ud%XzA)Zl=qcmIchBu+aP^)fgK(7OXELIG|6+ellHbCPncw-o;9~h~sNnT&lB-+(0sfOQ|D>nyc+KyO^YaM|hvS<6o!c>& +z6Mpu>{A_gZ!Jcl1^Vh09)XJW>Ar2(|R7LuGy~9@y0S+3fAxS}}c#TN;lJ$0F34*3LL+s=ODy1R#5zh+-1{ygmT +zeCIf|pZuZVJ2>BFeO}^yz<0YHm^@JP8~Ww-^`w957R5zZI{wAr{LB#BPo~Asb>9AO +z`v{(QySl~U+rS5oYwAo%V6bm%e4ReKMDz#y&-O-7)c!LYg(tPY=-=S@4}y3b-=g^8 +z11{&O2SsPv+us3yLHX%>vFv1^vkLyP-}adB2fub0etkOn&-H%iqVIjb8VX1}iGNom +z@P~MwZd_ji8La=g>KF(%9*Cbk&-Qtr@i=q2!%sv&MS8L|$!*ZndoFOe$02K79=?hf +z+3)=GFmZT-Ufk^Rlc{T7);s=fuT%Tfmv=D8zEY>;Z)XUe@$dd*y!~Y!4^rT&a@aVcx$7vI);b-{n~he$%T&Pns7*-~n2D`p*=+ +zuPS-ybNF9N!k>PF_&?|4U5(*$Tz$`%90q;)Ltf)bjuxFkPtU`|k7d@PM +z1U%WVAppP=`hE0Jwa@YZ4xV*x|1UxR#5222auV>YaQ#Z3AiuNC-opK?N2q-!s((w) +zcK+`vd06Z1cji0-e_UsKg7bO)D)oD$)3bR%`n$#J_k#ZJ4E-XWdR=;vcl>WS9dL|y +z=I@Tj;dlACV*k~Kz>q)rl=v3L^^wDbf6mYQ!>!o!9q^fcKmPvUy=&Ayb%*5kDsTTP +zOe^IuADy2)|e +zUoHGIk4UcaF8|p#2%h!4-xJ>Np0qO<*Ocp5pl2~WyMiqyC(${PKS3RcXV&qobNnw@ +zM6QnY^{80LpRCoQ`GX&3`A-@pLpI-0$OubQd<}SCBzjygbzZyT_ +z+2-`LpyuS;jMtxp`uxS(e;sV$xMrgJkU!#bnD_eIpm&#_toC#7mprF^e%HF3OkE>? +z7v$|-4b4l&zqd8v?Kh1959rK)QFbQCL!c)c?H}Fbc6HA0*}K!n`xw?Wq(ATXgkW0j +z*%AK|J|BH|<0hz&wfFm?Gish(a;n39A0do)vGxbNzTfEWPoupB|C3qKIpuPD0pyeLxwlGwu6Dn0 +z>2BWM@55Z@c%DqD-;|%5UhD9;T!!}G&t#O}c-DaM#NTlnJ4x;5qw}rb^Ld~2^D-sJ +zAMnKW43lmLvR{(ihCJa35Il~nZz%?dC&=OBkaybKy6>Ch?XOAl%LCQE?%z$$IQ&4y +zlW0HL6yGlDg>$^VzZvHJM+NWKzk{&F+rO{{IOWIleqgUXFZXyp<8|X<-{(au)qcwF +z0SJ8f$r{1q^ZVa-xte9c7@jcRYdy~p-!t&(mx&MaiTD=m?QfiK*%t}E!R6!|p!4bC +zu75dG<4uMUK;oIVf0JbWxXWjBpXcdWZ=XO=@mv+!pDTFg*_yAb9bVq-blxd{al6BJ +zy+rNjzvz1Bbp8~-lFu=JmUx_#jn0jR_9>rVu+g3iz;Ki2J;l#$4*yTsJ<3D2SZs&irzu=j-if>z;p2r{nhX1x@1_|R@tlz(3-bv^DHNsPJ +zJWn7#Bs}vb2p*n09sZN1k84i;DA-}9*U0B=6j$`Q-X%`wYR5B!;qW}vmXr1}hz~b8 +z>LAfS<@db=KlmH>N9m}JXcn(qzmdJV5qd#BBsXeY_j%xBC3f&uE?Xn8R;7LikgD +z-ha8ncg_et{bK2F$b+4Cyu+h=a$b14;OSE|?^90yV*Q@rb|X2Q9vyL>{foQ~=9lB0 +zo?qxko&ec|&-lLoMc)2Hdkfz7`q&fy0sPi;oX+i`P|7u=B9LRlX +z@?qZdZ%ZBj4NhnN^WxibmxlnKF3Ii%_)p#cPQPCA7WjDv^pW#2bCB%S!;Zgz{}MiZ +zfZ#(8f9y5#FAqfP-^svduWx_C={d#ceYyx;#gn&xljQe@X}tAW>C5f^0Df>o?Pp#h +z{;YNU$Bv3Wb2;G&{8{dDoBzA>C*X%3aa?Ub7k^_9ocy2l^YsD#6ZAv==c7DBp&~r< +zKau@OoStvITy#!fDmw!)v#06v9@im%af9$re@63l`VH~V`*PcH#1)ui) +zS&(PX_h1l+f9kd3^NH@4*G+1?`RM-bF-$Avq5c8QZ{XYa;SdSW`gw$m&?l=PX2hSV +ziJq|j{ddfZ>9v3VBJJ(_V8_Vkwx25r^grry6`$+B_Xy$19J(;x_*d|O_bRs>?-Kv- +z2m6J8F1Le0Lcjf2h|Z~VWZ!OdeqMjLkL#J@Snyvb6xBXH7jO_dG$>nFe5fEUe6Q8mB(-xZ_FQq +z7x4r;@Ey#%(G$)4D(WftKl`DDdiT9Gf@h;T$)6&QGCccA{Z&hLZe6AJ*?*DT +zZgs}}$9Za>8WlX`myV|VfS;+zzpRBnWxvS{vOghC{uI_D>^F6}#`~nx^T|QMGn>Tc +zBOU${^iMo}UY|4P@QXZNo&L7?d}jpD9528Bh{OMc|FYlt?KIxt-*)bEbqrCcaGs4r}MRpZ@QKa+pOkqMtarZx8HC668()L`7(Jg7{;cb7fX}5R +zuq&WHe3otke=v{fsP5}KS>b74EPop63I^Q%)K3zgU3|Rv6~*W5o5Y``4iD|KTsY&| +z=JWCeI0&;3z8@OK`&;nC#?=!3C%yekUoZIdJ7upz95n?sG`sC~Mph_EwyY98lhJv@ +z``w<;FoBF`+Wt+F5ALS+?Se4e=kUi*5q$n7l7~R&ZRnSDrr#qxTfKdo_6_`;jMjId +zed++I#^*IA$JIXN=XXj@&;FMSUcX4=YCHTL +zXDhyn?}tgK7ob1udG!ap{k4!o!ZW{+0&Q^yeGF=1a_jpzVcqn04A9`w_fM}qPVkJ^ +zJ>~;`hsXC*?EpH7r~M!%2v6Sm`7rdu;C>!w*6|#d2ORU5-&NyHJA5%b*TL+Y-&vye +zLC&|iU&y>%7W+!a6WY(XJg;{6GstK3J9m@xXwLO_*Gqw)a_jbg&f6d8dC^(F$5K+1 +zB&&`Uo+&@a8sy~K(=^`MpNpO_-o@J2K?eDg`MvDYI;Us%MeNBPhp2t}Ny%-->0GRR +z1NPPU|02=zpyU50UbOKZ2L|Fv*}u3B(Z`kYb2Mum{;FeqTwaGi<9HTp|7lDU=c|35 +z#&x9QdG31QNm{OVj%WM4+Q;|nhW1mwk8ro+c~f0@rcP1(AMDjbuBUN+d(&Rdhod!K +zG_&Vm$SL_V`99h036Yg727j*Gv8grE_mtEBW5+XfyXi0em^fMY|f+WBh`8!Fl8Y +z5Kr6w#dmL!Un2hO1JcLfe;0!v>GGUnp$?wAoNwoyFZ|he$lgBT_y-9GJ?&?TpFzKt +zZ&bf?W$|GNZP3YM5PJK+{y+y-Kb~r$EPQOF` +zcb&tt9&aRH-OeDpIsCqp)jrpAamzmWc#=nV1IKV2w1(|+GY*71b)ar{=^NAxETiJw8<#xD{){co}}eM^Ms +z45z<+lA1*r<{LXgJ +zC*~j8N9|=Tot;U5Z;9ZSf$fyr$!HxN+TR$p5Ad58fyelFgJ6@Na}!$k-RXP?c(z7( +zesZq(mVJ>t_3b|1w@~kZC;NKodsx?>=j+G3?}Oj$?JssakiAQG`)-F<-T%(~4u%C! +z*5jPT;18ave&hA*GT>p}?B-*{=cSIH*Qt@t{BI@CPdfb8(*^H45rT~;_?;^~{+xZk +zEXg)+&+9liFR8u7hX)+~4NN!jPd`(9NICtdyM2!HMJx7J`}U~h=VrIJ_a038_ezGI +zg9do?*Ce?q?{XfUKb>1HJn_BCgi|jjH_N^)_4&O8_JQ!!6XL_9!#@f;#&OMh+^Esv +zzMS)YTsupTR(tz(h{sr8-H!O&cbV`f$En{5=R@;E;mL0=y$JH~jlHB7Cr0<3jv)>q +zor&My75MyPx96!z1r)&!U%nFUL4W*xv4b}VPx}gucL%3`q$+yapK$&-o%@_A_|$sI +z!@V{ON%FrZ2~WK5JTNMFe6I5|aIBPv)cS>X=GmNg&>63TjsyLs@1B1Me)(N%9nby3 +z^N7=P+(Cj*UoHI&dUsSoc;>(7{d)Vw;LpSGjUN9F*S_9Ptpecu!8vgdjGtNrBZvOhyh1pm_;1h0Qr@&Ge#&*hL4>dTz3 +zBQSmT9FAthAD=5Z8~FEv|Ejy5hW7oix1=-g=hiblcnFX2{A`8V&;3&JaFMtF>l+21 +z-$Q&0a<~ulopffSyg>~Hiukj>euSFa^ZK;l?S{r1>d9Zy5Pa6}wYbaM=i!DpFVj&T +zrd?9|nUBi;XT1Ht(f**{_&Y?8;_u{JocGASTNc+4Bs+r(425+IUm~IZ{W{j@Wt>y>UvuL +zF9;Hz8|~jD$(2P<`>#+aJb@2C17A6h8J|bJl_Vv^Z-nPPPbh9L4!;8eWBTRiGWxvV +z8|#X5rf!!!ukm^O#s!++_USuWOEj}*h;|J9rd}%h5b!*)AK;XSzsb%&=IyJ9Pbeqp +z^W-0QbNnBH7}$LMLhX-yhF-YM=dpdE@Ov64dF|OQZ_#+K^u+fGd<+B=f95gq +zbG`R_!!h3Pk0iI@eDVEN!RNMDd~&_hzgYWUj;sCjFBj6k>!jdQH%o5A{Qe4RYx)x9 +z=l{s@g8oS+l<ITF4CF!cT!T`zI=rEJhh+bL^FH#2YKXwT;G1$KEj{* +zHE`j{*uThQoaz1UCH|yj4w8$n5Pa%7!Kb}_fKUEhJ>KH*7ra4q&V6qOgM{&3xwG(0 +zNA>5Qb@koKXAxpy=Gi>F@6oJQIC~^fZ^l^iG-=aVbgOa-iBL +zmx&J#IR4q9%Y)mitiwOs@P6yE=UW}Vx5KCXKKZ*Gej(};C|9$Wh|U`Wo*+Nby@mUD +z-fZT~ovh_wy#3JSl-sAC`%Cu=e|-P#doXe2XS|;{Lpg-KN=NbkE}rkLe^mX3`|1OH +z(&Zt@;krS|;nX_Wx4WIr7a<;De7Nld>DLm6Zx2NyJ#)Svah1bo+zw3rL2`bT&*QIO +z@8c>9|5|VV-i?B%pR0MCbNC^f1dq=(Jb-5Gx9`QWGh3XXOiJ+7UaM6 +z;=`3r|DPb1Y+v_#kka1oV(|S>0UpT1d?XL=UN1b8?!Rt#JXcgSzfVT_mMr@Pp0?Ks +z@9XUsga7;$KCUmw9u7JEhq~X)`??HjZqND0sC~STe+L+4ajh<9++H +z1W(?o_91_=Y=z*nH;F%Md|buD1W!lbEe&|mqnHRh0nevlA2_b~UdILmgYcPkyIA{h +zFWia~1ds36T?KmCe(omO$uO>yu6u1W@@LEo +z?a7+x`!DCOR{QuK7;Xa@ov*-x8qY04ljPj~XRa2XgMI$ss~ist^5 +zzEu2qK;Y#4s5c<~{GGBJ>m9xf=Ee9Kom>0>hC_IA5H@b`g!7VY&+*3R3ReuGJ^G#Y +z``pw^l3W14*$4RCGn^impT*kW?{YO6orkJGp4o5vbk;^7K8u&m1>{=z(RfBH!FC` +z>*Uusp3pwM1&$KWw8KODzP#ixw14#FlK<4Pds$02Kgn}W@^MA?)-DFWGpF`b2T6Xm +z`n>-N{NQ+}BR|`Jir{^}RC|~;djdS`=OP0<;EDHUIsYyE`5pY(zz}tQ!CVd*6UJ2`y~enp7(mi(C_PEXNZ5&>-iy; +z_I&0X&F|9VHNP&N$#;FeW_~C>-01DE!@QB6e6){048b70&-3R2&-lLJGvMt{DXt6p +zxZz0Ilf>;wkn;;^f5-VH#IQIMy{*ihef5&j@5Vfy+-AfqP +zG44<2PTR%aufuNgIpG-fJN*msZC|NtvKXE%XQ}<%-%9Zt7Hhu?^%VGLe7`d2R~`g#UXrg%ezrItcBu%S_xskM4)%Nt +z^1${}f06)d_LJl|yhr%lVUo`^j^~iqI{x=+9@jaZziklx(|c&WpKs4}m`)K11!} +zI){ICJ2|sS_F-Sw$KUs>{p_8RlQmAy-!F1G=@WmJ__*eMT|fCe$>)vU{`bcTPv(;^ +zGDxT&w)Pm;q@ULabncCH7WvkGXd$0pH6Zx(u;>i=ka55nug3QU1w6A?N*=4n> +zr98xS)K|ek(auaiTXG1r_Iw29hoGm`j`uAdj+`f(a3wqifKL_~0dBUImv;4x9uy=f_7mA*~&9eUw3YD!T9~+`)eh>`D6Xt83=TEZFmmSDDo&ZlhB6*m0_?k0?C;tA$C(w-a)K8OM +zOnUp9_H_EUsoy~7pH>Q<-ckKN;_Y``132|My2t+hjJH2uc%Ja~h6nAZBD)mmY2WXD +z+}oc7H7A|v4{KiTb@&??{{TMi_oxT`+VXnAXT3fFWZ1J<`w7HB#54aR(RsbM=P@zD +zW*e&?Y&z!CHaegVl<9f&@ +z)Q$9{_mcdCea7-@0LOSIy-p^~%VO|=C$*38{Kf4zr@i_pr~gCpcOgFc +zAf|)u)Bat;+nr7xHzs`g6zTQD4!;T0YWUB`1o7EU|5*(Fy+!;>?nu$!_H_q_X-^sc +zm*bk7l>7ua4DiW!D-I0s`zD;8=zRLV?(gzb@@u;}{$IdN5P$qVi~IK%p3L^@_hHO8 +zpB>$9%=~PjzxdyEYCrn{7(hHvdizI759EB>zk{H+&;UOW-j3=kZu9w_$qCPiK95J| +zK_}X0d>>~8JHhkMXm4^AeNXU-rrO8%27EpzI+Oi(vG;>ry*n#-pMMtsVq?$JqTn+t +zWq&YD_Kd?oao#iEkv$A`EXTW^_WgC4wL8-3U#$IePZOT$De39CQTzI=@Tb&m@+C|h +z`%TSzzmR)AH^0{DIYjaw)&-&c%spx!?8zT4@b)#?9}M4~O|WC8N4HBamODL5p}!{o +zo|g;j{l{J@_@sYd_yNcB2gohk&-iyOLp=FV;OC>#mtcSX6?Vep@LJKc-tjEf{<;H! +zAM%j({BV$~#o#H(1Lo1>%>2Gk*_Nq&(1J+2H!#P_B(xo^x{E>pSZW$&w1P%=n3%ltE6|~ +z9_Fv1y~&&B4T9d?x>k6muMvLyYEScA!Dne;@vL?EBDWWiJaEk5i3x#aWYF`_d*XYn6C-qiObw;5}lByS#3`?!8S;EC@s +zIQ)3^+y0aATr# +zlXknk)%$%Ut$yQsL=QPscxIw{(RZGx_Va#^%@dC2eFebL@9g_Du0DrfNWYKyN`5U$ +z?sWJm#|qw;7W^WIKL>Q0oLr;0qU7)@<89!tUnNQ2*XL`w=kwDW1%J}p@3&IzQ+^LX +z#^GOdIgjuEe5KDz`Z3wnzX)A&`#Oy)8`b$dRu%o(xm^r%u;(Wq;p2LX<|T~x{lULK +zs&TcPp6_D#Tz}qQ@MO8-kXw9y9}j-*t->GV{CyXy{nR%k&qGp=bD91 +zjJ<{Z&F$1a?fb%^{YTDG`}7@XfM>15CHc*m^TE$qL;UP{1ViPxCht;QQF8u#lJ*dM +zn16-jbBnjX$LDM6>uMkT{-NL}@w7hxM&YS?zXyP9o0lUr-gAAt7gJ7ve`-eSi$MQY +z#M`F7pOf59c)tP9{1+vMD;&>Wb>Ye1BZZsv_P37;Px?9$GVAcSl5e0hu0tlAbjI*y +z7YN?IOmd!fJpX>N@FZ6Yf1ooNDYr%n!{wDjwPq{H<;EM8Ryj9PD;7qIZrr8bgO8|C5JSb3t*YBiF2Yp78!lybwPEkSaF$z1${ET<1^+IbXR~*`y)cTvPLUCiRP(|C^K%r7CmvTdeky5qX +zNPw3YjTaG +zRIQ8*)RNptvzZ$Jl}$En*2^Q{-$|$D#tF-vKRR4*CdH9buD?+$l!^s%7k@342MVLr +zR&I2lS{vuE>Wx~f7KYWTU~uHiaJ3gdnqivI0eY{K(PM|M9$T3-3Kh&vqdZuw4cC*Q +z+z6%!Z#OH0g;EJLC8NzUM#f$m^87*SzhpfXZvZ8n0+El3-go~u_N +zX*tSVwKiB8$+5eQNv<{uDHtvel_6F77qXQ!!EsCx+N0CKa&E9uPjb!8O=q7=a;ZNT +zm{1-=FAxffP^&huYUKoeD&wV|>6~bCyuew6@a0A(T0`okIdBCXk!h5{Tmiy}Nv}1M +zLZwD^qE7HXnPruNE-mD%k_+Xw-_$9J(1G +zck8WcPSe`V*<^y};Pr5!0UqZ{6{>p~<_;q*7aN=F6e*vQ+&~?iZVebO$+dxG06oxn +z1@RC!VL16`e9x^}naDNkh4B$H4!J^+=CVmaA1Dq%_e^#xgTOLeXhKTOj?@dViZDYX +zWg0OUh-6rH5H_*ZOg5G`=RhH8YnGc$Ak5X#m&>ZLl6sLe$BLN79ELwQhA9H_N^_(D +zt!)ic=U_exqphLQ5s)a`7wl07m$S4{o+uYFn=});{-3(2`TU{#*kt)y>2SeO!m0$}f5Y5qkjKxfsu}NO2K9Vc0 +z1P0o?{t8Tmkd2flC;-hCOy=gGLy%5TX73T&Ecfky0HRG6osw}fq5dAn?u92+T=y+0wCeohDS8u;66vn +z<3-G{36`0aF&AMfG`L@YFQoPFXg=H4DKHtQoDG3bZqtH1!!M&P}A6Xx68H>49R +zFBcl7cR>Qp?{`pYjH7gkB{L({%5bFx{tdJmqazTRa;KlrL9byC?zmNGK=lh1n$=Qe +zY?S#EgAmbOP2O0g3&vc^vW6`SHO99IY9cD(q6ZRf2ppIhmy@C^jtvMY&eB +z*`caqpD=V2c%Y`7QNsEQP*k8vV3NzZ=1^szm24U)jorUqrOVoH4yt +zRAD?E&`fNEp8o6#KJ +zLHsZ>7G@8&t6Vfy885)1V5E&OeRKpE-kKcsqi#YAJ_Z@+Fb%H+rd65~rOIHXMYE1E +zxk40L1GUCR@~crUT0DUN)*4cFQwUl;yg^et-t0t=ri?uXwrls$4!+*3XNMlQ%M2+> +zZk%OINFTXFXI2?5OceTid@u}Vt$6t1xv>FxVoJ#XjU495bds6^;uzTpHMs=4+Zi5F +zBPOCJwx32Z{|IF;mvCvxKov$oL37vK&(XeNPB%Vq6-LM1@jDP9EM}IcnwyNUekRNcm%x}t;2~T +zk{Y1G;HOHp1V`z0r#heG@*+ztL2N#p!esHpQ@S)~&>*G*dc(9&6fII|ext4yUiqhLrjFJN80RbO) +zi19RVWenu~U{icdA>xbjM6ql>4*k-w4R72uT5ix6fm1M4&2n+LZn8Tt(8L@T$IRzI +zB>a5~y?O}hT7P)#W-{SE8^NDR4+%m5F^rWHBWTP5W&#ncE7q!&rdc8M@W^AJ-Vte; +zSyL|h(XIoTXkwW)lC)@}Y}I2ZYxM%glcURj>S{tu4lXEqqX-Jd2xP0$Y9eBWz4Qe^ +z@J-{c1=Uh{q7K%w5gkOZ-y9PR0ak%#I!dsYSRgSFaN|t>3o8!gvzP%g!$5^$29_uI +z4HMO}@WL%ApQq$81k-*;(>k6<5?yV%BWL_B_nhSf5 +z9T5Z?TG4GH& +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 +z@D*yv3$PAX< +z%-?|V4F74@8AEk8-P~1qPLR=NqcvB01IhsbE2I@t>Q9f(4#=OQ>m~(DJ^*D?79#6?h4Ec>)@~` +zs&cs!807|$MAtnbRX|>&0YhgKRMv(^kJlkTSs_8~hJ@2mv1*cQB)#x8$K?&qb9o+30sHg +zp~4^Fl}Ve$J)0~wX2FD&Kf8r6iGlM^21Zo7gLem!0W~qG*G(5fkmv20&B{#KejO02Yp0z$VoIq)MI#nxre484{@l&U=wb{H#J5#G4ZNN0SVzHFq!gL +z8DLosRNa;>79<8=%1LGPW~qlwh+3Fa*UFWG0A +zedw?!=9QL?HBlFCHGJsIjlcpIFO#c=0emsy6GSr!2aM;V$Kf6-s4Qy+xd;@lAK;CO1;i7jDbLjC-+Sw9vLH +zWiv%Oy1|NXqntl*x<|Mz&{=d^{~R4$nkD5-r!33g*=*{Gc}NKMf00`0<{r3lBO?Oy +z#nNI6tjuDVJ7{dSl^wF)(lwt~bkw_X%7_U;FAE;S78umWJ#AM(Z77i44rj4vp~Q~4 +z3hJ=$V$mDgx&?u{2Otn?GKdN-s%A*8z!eRy0Tmpc4^Y9B$r5XndSWywc-N7Zs<6R58#|cu?xv1)vnX52W88KK%YyE8&pVo5UF +z&EfVz2z0HG%$EPG7J+$yEz^c$=opPnNf^;Xj_fd0PxJ&3JA)ad&$0NpH=K!ADhh$I +z9LDLS(U$DF8*LeEFLCmPwb5&Op-Nhq6IBo*fry_iFtJ^l1x5sM8G~4^7D^t(1{3eb +zk77682`IFIYJr#zS6JzaNe#{y_)3HFzf5bgDZU^sd+c8Ax&2~}@c;Uvda!ucPbM?`s7v&xO5jXZ_HRU!A} +z=>=G<(JI6Hm_~3_gOVBG4i(mxV8o6xQ(&s#W{DThxM9tRnX4-)75oFb$F>eC(Xo7^ +zba^_zxB8%?>7bT-r54TjK+vyhs(i(Q;00A=HhwL=P*d3{bvsy908IaxU|Nwm%sy-Y +z1(`E#=X4Mr=V`qcVSGDZ?;V>mb!ZsGpbJ?tKh%^I4qa`fpB=Ai7Q3Sto__I~a8P44L>4HA +zjVi9>5c#Xjw#V~xI1}|jvr#58OzxsB4pd>(R-S`WB$-thr#kXKw7o%Y#uhjklu#k7 +z#n5pW3(OIk<^{!Co%c9#9;l#Aaa?O|FWg#Xg9|$Eb>9?9uxw1FLh$zth{7fm_gc)_ +zGxiVcmXQbg-jxQt1_h?VrHl4UN@4$Of_~M`>T-OMX7A>*aT~uSpn1qnn +z6xTgqqtG)7@RgCR_+V@?U^BLX4YF9iGZ@y5rYV+pK?Ms=A6O2$*LERf_KIcl9Z_RJWhOaO@LG5Y4T2{H)d_Zi +z6r^!YVkN<0|Cp5`+@11O9!v&^8>f{L>7Lf>s4@t&+>Teo1;SVZ+`C62k?7f9vUv-w +zf!;b +z6@Wc}&N+^-DhM{LKdG8cLwDVLrg26gi=6;9Lc&P`qs3N2$T#3%49GO)Qtg7<>V>&3 +z)GH7hmtEL(MaBxItS4-J3I{u33c3wM-Due-&<(LsK5^KFwI9+DZAl$L>}3;Vnu(u8~;_X +z4?~-Wr0Y7%t9R*mno>e0fl$LgR<5q>$Vo>N&~eZN?lU~4ZmW0qq(^JG&ucOXX|~ew +zVE3$8C*%*XFkmJO5qxo@rDDt?1Q*sSGOW}gLLBko27T951~v69j!wW$i`!#JWxE19x|&TKTB8s=WHQEyZl{$kF!%Ub2y +zEQoNOF-6C*g3emO*AG@s#i_R_3+BnnC=iv|87QmDroLf|1X5{hUUTHVwh%=7`rIsD +zAju7@7heacu@d7q9j5t#@#KG4{}@H@E9oC$?|G1$Kawc!tV(07zN0*ds$FC{Myth* +z^>I|-02BV#o5#Q$)n(?8RnRYR8VEt>q2WrUz4;(&UP~JfcZt21WqXB6)8jFrB +zY6DFbZYwdUFl!K2K+Ree+Nbm+-KL^<12e +z)BDPxc2zM@ED^FhHMkV8B}Z6FSXqN!WOk4zqEUY14ldMgncVaoj5B%BS=EFqD2`yHyz0eIT|YEKCb&Ll5F&2MMS{<{5#HFsn6Li9-l> +zD8{C8tOg5a>fTvlbpk9c1azjq0^5ON5U*OdJW?RQWmt=)&PGU&4s{xa#cfbgdR_~q +zI)g73>YQ;fb_^*$svIhexN|TtUa`9kJZ8k3p_mu#QJ5Y!HSrs^=_Abx`B$hO)^<$W +z+fKV}w1*%xoM%NS0`eA=sR3u#E3N_(@DhhBtN^boeQ0G_Z_{tg9*XU`9n>n~57>U< +zLJ7mFG_f7o&l)hErei76sMY@tTA4TAt>cIh7izud1K44ZCjQK70od>wZV_<{#a%ui +zW7%<-zD^eJX$nkn#zl2AVfQgq!8Kz;-y1${=*WR!lfj4}8px1luBaLYQUPv{lp`8pZy}xOU8f>F5To3v(efH$53j +z&NL+v>ocp|>KqR0OiC^{=Czux!)A%dN34l>kl)UI1)1z^3X8xJM^Za1`(U@q*ow|m +zGWa8A$M$e^e!{O$!I-g@;?4yM8hTH02T`YB($SZ!3yi`e8wNjdO0%QPs*HmRbmxV& +zNn_Z;q3)3sQ#>9>F@p!ki8L=t5Ip^e1pp=u=C_nn-7MzMDq$@2<-GNmtd5!!J75bE +z1gt!M*>ed%R{`-tQ1k_%{6gJ@aBgnmyrk`5shve9%xT)TgDs(b+tIe9ys671C|+=W +z1Qlmx3+*6s-D;-=yR5}kD}8Oml}^~}WvYTfcdpb#Oo?TGt)B}#T4ioBcl-^zhm(m+ +znk3IEM6v3zlR4OLfds(yV#l0Yvs6tc5EWKoR*PPSZ7ei>dY#3hCew^L?al^2eF!1$ +zmhFMHTxPOPiiN7#% +z_A?D!cGHQ5L)S`yq0mtk?^fbqC&?H@uxJf0K+^_Ckc`mYM99r?n5{uu8)MZC-jH1= +zb%w#}>M1$nmnL8fvCE8HZy9jCGFC&5SuPG*V>veT8+hz@V{}f%az&h=qL+8baF?E) +zw@~=dyGI{ZD7GNBG8aY35Nm284@vu$5t0OBwT(c8sYEPlC%(zWQEbuT`ZjDkfnmy> +zg6FWWtoT@TEo-7cmUp}b1}!GrA{`pVq%HI`jIMVx8Exsb3<)S@>M=Bf-08Fl=G6B( +z;h`;M&J;Bzn6^K#519OVI{ajHU39jFkbN(m +zPq%^OI3^XB$ZRaqr}1`23CV!jPON~+Z#cH?J9-N`a#Oc#f>(gQ58a#*xz}L +z6rw}cQnQjA^TAMswLf9i&#@p-KYg?xak^;6SxoE`SuJL8Ynbm^W3$#03)H|=FR(ML +zY`gXv29Nn|9o6r0ghtMCkriw#*tRc4lwRJ}`MQwN^Y;rK&O&;y3^Y2=CInya_~G6yG_j&8gQCH)J24nr-N$rL4%k`*%+aE~t|+7jCj_ +zOUm&gmc=Z5p|!R1i7>XveU~?49$?EAw}`{c1;MSsT3g96wjg9e{fL~zf#wHMKlAih +zEm#%{^|MVD6G%_Oq+&y`2~R|WU|Cq7>Tts-_7g%G6@&+|rEWMKM~=!Cy4ctl<92!A +zwyB7UPI$C$g7d}!M3Gh3tN^Q79;~u?q=%7dz~wVWlvY2Z1gBiN88F^S6^v*{cRMZ@ +zC$0G^I^aqGa?d+VmDcE4Wp}0lA(ZUtuz!+FI&}4i&ZW9WskwB*m`IdY*Eonwx +zcA3j+;~&x}yw$67sTahKi%DFgA&@6D7@dQ3Et7fzj1bQ*5EG*eJ`yu&f`#=A(E0@s +z<9-7KTs%)kAl!ocL&jK5d2>gp1(r?9{TIdF;@z< +zW?AIKQSY$ab1XP08EG9BrTw;tV(Vh?EmUZB&cK6d3y9zpXuZKm4w8%|vWGYbrCGVg +z@#ebq$8Z=>8fZp9gV(_VoO!T&Ael(%$~CG0v8ml-J}noMvtWaM3Qa8)#c5(@H7Rm) +z2&*n%>!E8zS_8wnN}$=Y=|M)vBk=ywK^}X>G+;I;7+k1;x4ahD0$}h1QH;f>$ebuo +zP%oDX+@!$#EvTQdlUaVXDRA}N$k0PS2(F_9l6T2khl(KCFFHhTgA6!frMd;h5DCUxuA)mYTEO4COc*g{N^0q;zFTSdqhGwuVIJTZ2biF=@I$PWSG~gVGD0F&ZKF5 +z4TleVV14EVjcc#BDS6Rt3dZe3}Qe+};Dv@*QXdjI51YDAeN>f>3Vn!Qn^J+mh^}hF(PnsE7-G>i1U0pWf6NI!ZUDiy}ydU5*%>zKhDX2Q5G=W+rf +z!97!mCjjOLJH^}p^MnPKS5*j7*&;lwKOhmO-*y(Ywc;YEKN6n6sB8oKlW)}&h^e@D2RoUixz)+@n;WlAQY;G`|+)g +zhf_+=O#$Wx1X8QKt^yEBqXl-!m{J9DMJ1Nds&J@YfaP8w$;qZcUek*S@HK)AWD_-t +zw(8@8fd}f6Vfugt{`4tp6`i>aQo29`sWcsacSDUHo>E}FZV8-;1D_DVSFP4uMiy_N +znYnwiJRCZ35!V&)v>3cNyx&WNj3d#Ov+c&hyWrIPXnhq#3!fgK3KXioCr?Mg(h+Bz +zEi)N(AfQr=N4e|0yv{e+bb`jKjzOmu(=@D>+!)0w8!L0nT-Qtl=7G0}Dis$Ik#ppijg%S>Kg2PICTMPnO;kBHwH@ZZ!M`}F;4a9^ThfOt?YMxXNQiOfc-h&3r +zCIy>ohc3(nvF?jkn+_u5F@U5~w@}vOoZz0H!XREe>2uIzWflEkXZdHwu;+KqUPZw= +zCt1bKbfCT>1=k>xa!iJ#4tK|S^%XWh$zeNOH6#Oh`v>1eN(S5~KGq+*HL&34m{N(U +zvJiur`(pf6K!8g)yxRph`>imQN0ZEO2F6-Om~FIoi`)W(AS_XHbvxeAnZxM`>*<76 +zV*`_`N+RMfo%OrEvJ!BbY;@+nYjH4e%ei2=KFS&fFctRBQYxe%Y&mp-k_FisKbrv! +zDpw#GvE1clhYrs3kq@ndf$@K&5tUhM2X!X-LL4uR@NZU|IJCP)! +z8LL^h(T5y4cnPnG(ew2L>~ +zojsk7Gi$1QJ7|A_fzyTjt`6oIo20Llw@?V$El1|v)p#kKr$ou6zRTd(+S&W~JC-fv +z5ErxyH*3QnIy2W@M&dQ>J93h_^1uZSJt2!UfqSlYzj$X;6arxtick+&MpH_>Mxg>- +zN@MnDZRfKNR6|{VOMAUQkZmTl>w{3sFJpU(wFLHs){>g>|LD3CKv}Lif8dq(BI#@| +zmAw;LD%(qoI~9c#tfmXV5Jnk-5-Z7&hDC6r~jW*CKG+Stlirb$o;nz59< +z|JJfMfnyKl^GkEU;sc@nPF +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 +z*;Be|wCjo|?b>Y~bM=^u
-_qy+ScRTlj-Mhl|-_F?hZP(`CcW?4DH~oIr`tKVN +zyEnaaw^^QB%I;ko@7%p>(>piiWFz9tP47H&(>u@H^v;bmZo9sejkUV{x~;7Lc8B%f +z&e*ilo7QwAyJu|V<&2F5ow2bb^YOuM)y~*h))^ZM+r5$4?v2EDZzQ&RBeC5ZiS6D< +z%zW&fTg2{-te?4&^)olJZaQigd*;T{&U8zQA9&tF@A}|-c=tN@+zZY$HST$#`98z` +zUw+$d{+;RVvHrK1d~Y+~+p}%n>0Za%?D?7G +zXP3tLS;s_4K2J0Mc1fJRW4kBoEAJ7P^+qZO%5Ua9#xr@J$-Vt4%k^y;NttZ-cG&;h +z2(v87nWQfHI?_AI{JzcP;*{(t^VcnHUbcHjOKRr(82u?rJ=Qx;{|Zc`(OA@}L>*-Qosvn^ExZ%V?|7f6ynlzun=ME4fAgK89=B!3 +zdOJ;>OG|<5FwqCwWnjtjUTI76Ua9r%nJs0>t)yd8I^Mpv%`Q{g-idZeCz)E2{O>g1 +zQWvL44$N;oO>4hwhk12dc554r)*`8OyjyuDHzpnV-sK%-qEJseY(6CyrsHodTP91DG)+4(XqUtgHE!B}qRaB_^$8hsl9#yYeli +zAtiAbezRuN%4{vzrQ2FJ>6v)5oa1byr3N(j_M-ca#-cL?=W4 +zA?1!7$~IxPF7qx)!=!C}cB2iRJYzcRdz`jzD)W}8jRz5iI_yUaF@6c8m#3Cuc3 +z=}C@d9e3Jy%e$o4#Jgn)Sbyo`W%;HbFeM@>%JNMLnS4u*q(`#(k=)B~_Wv>#x+Tjy +zq{j)2q27-5e0i7oOUlWu0pgG!NonK#Cz<8gay0KSy}Gxjsf!&l-rDcI?Em++Yh-&F +zo3e~=b{#TA$(rmmCV!y>rH?qwh%86?F|-S*LFCB%G`T$3^v<$X$a|!Z*q%u$c$Y*- +z8Av?dCFOIvS&od~$JpiXnc0?ZmLe&j{o8fSO#f)atfz_aO|*>OSeDF3BqjOh){!8O2Yrv9?~#lJJU-MrNdy@{-oGr+G!nT*}Rj +zQJQmG8nSFDWr;OwZr5ucv&J$C%PR+EvK=36+V%d}y0Zi98r;IBxyzP^OHayL%Ei=H +zhINvZWnQwUQCSPg`)RUeWv;!O-o`A`<}W+J#7HZ}HX$`C;|ru2~8%sg3A +zvRj(IOVW~dYqkQDM~Ot)O8Tcu+sy2ey?xC4rM_hSZG>5tea*ZsEm(4Ua3)JW*v#DQ +z`k2?vtjqj;1oC2ayKTqP%a~N;9p+Wn_uyT&m1feTNq)9xzRA0+%})FN1I=%~`6r_S +zdNbS7?XpbHGHGk_p6wy)yV_1S4;V>?6pKh~7CSzoghyN_VX@+h;Mlg&H2W;P`4+t#H?7j0J7S(d5k +z*w;~)@`}u0WsBIJ$v7u{fJE}QlAMYhZN8<1rL3jYWKE=o +zO@ztej!fPu>n^j?9j3pRHY4?Ou=!nLOtdKl*+P-Nl(xj%cB^v~S(<#iHIZ3}`8|`C +zZ+_3*_%1Tm`ydhTB6W@ny{HJ+r@_ +zN$)20WJd+tN6AbKX&|3k9wtS3r_4oU%fE$9S;XYSq$w%La_n|$*GSy%@tRjXe`X0LCpbRk#wnIkVI4O!YwS)NH3ZNRL*`CUo@eZO6*J!XdOwaCmeGihCR9-K*zkrUZ6(C5nE@;XXJ>c_N6 +z^S7-3Nv3tm8n{+za*#=x$bO*hCGBfco>FT&&8r8SaZ{EmsmS~GH~$Wh?Zn#Aa%{}} +zX8R*8b156!ciNoZ(u^<1nw*&yZ~pDFt8l9AqBW&`qGiI%MxDVk#oX1`tL64H|# +zWYR#X9&Abp^|GH?3#mEDr!6%TC*RU5?Jz0I3}0rFvgT4tcvWLOS(2D+S7I`^a}ly0 +zvi~Y`PML2=&hVOydeYZQyV4n?c|}q{3CWsBI!IgkNa@{tlNY?-ZnrjfvUh_X3$qFt +z1!T*yrDon`k4KoFrx=y7Q1%=&ALcJ94e4E6Yt_29OP2n9d2L;rkSN(+I;ISz#CLj9 +zN)nHwq>^)4ca)yQo@Vl)X&X1AhL(gxp`F_`v#H3tZ8@6%O9>rn{;%7a$&YM{lH$oG +z-?qlht2?EB?J*ch5ATxKaJE8PCh}w6nc3e=o@INL_GI5-{+6FIl5aO#tmN)^Q`%B` +zo3~N74zkZ8eUqILn>?F$nG#1`-O{AH%RAJToYdm2Oe&I7I}forkv?jpENm&6h+|DV +zksQg~_&~{td7rdbSsTfxs!ma*)YnRiLe%eJQLWM4BqZ6@U+Uwi2H +zPi}r(=TP(a(dOSjKUZFn*E|!ohvz@x2?w~>{%zB1Hdp%ENhbDP=CzLbxj9C*>n9)g +zgni`w5;N5piIp!|hRp3R-xPDB#z?GuNz7g*=88=*wZ=%Sd`ZmSCg#dbG2hl0iIp#j +zk#abAQ=S(ZBeC)&F*2Wd@=+Uk{;kGHtb9p~^wgJciutR?NUVHGj2tnzVpGh%*P?tR +zR=y-g#*ZsE#T>3N5-VR4bAXAtdQ;2^8Y8jtB{9-w4%xI`yEH~(SiHiILg#6`Nx2t}zlTUlJoN@ybmxvBpTOd`XP7>O(i>=TRCXvGOG`GQ&JlQW+ViT$NUVHGjO=l~d{fMuHAZ6POJa^PF|XJZ^Dd2%Sox9|(_4A3 +z+!XUcjgeUSk{CI*{i;ndH)@Q;%9q5*8OeXz6!S%mky!bX7}+a%^`@9_YK+9nm&C|i +z@im)beylMPD_;^5n3&Z~F|Ec(tb9p~oJYK7Q_P<=Mq=elVooqI&)pQW*YmLLNUVHG +z%!wxE+D$PBX^h0mm&BZ8VxG4t=4g$PSoxBelTFO?H^rQyF%m0Z60_69ykJwzZjF&x +z`I4AZOw4#w%$+qxV&zL>dM4(Dn_~JJBeC)&F*5fkH^n?iV!j8Y8jtB{4GAy>C;@vo%Iyl@4{uNJC8l5Wjem>3$K>A6w%drDyjEW&kAIH% +zf_!o}ENMbMzbm{Xf7ChfDY*{l4%8`8U6hbXxL%{T+Ob{NTU9y$>&!^L6SS^8eZM7@JR@{NKKV +zbh_lH?vMC@{H+?_BfnnL56K5VJlZZdB43<<^!wze_24mitMLQ!HT8ttI}zy&$vf&P +zxvxGV@2Y3yf%=%dr=F9$`duY=^;?j;`kj!w`Yp*_{Z7eU{Z{0zerM#aers}9zjJa| +zzbhYEZihGRbu{Xo{LrtU{rAaxAB4x`r~LywArD>olkchhKu&(cc}QoK{7UtLJXD{M +z|EQ02O7cQ|O8#K=ioByfBfs%pNWUf@sn5wzQ*X$ddm^0$c~`w9PqlwrBX|At%14*$ +zck&&rU-EaU_sKu=UBt&*_<-E?s|mTwPeJa|pKRgf7Czm=t1W!Ch1Xm7oV?NTuGzvD +zTX?&LuWjL8wOn6rxt%TC-@?1($L^)$0=Y}Sw}ppW_{tU@ZQ=bbJSKPTVX%cKG2Uw<3R^_G2^hsd`O*gZiAjQg6s_R9}$K)LZh;sjrdO>fXl# +zPrlIWd)_zHJLKP0_sM^v-X(9<1M)wq_sBi%=R@*+)K|z4P>;wDQty)=rXG_YsXib- +zMm-@vUVTV@vU*B>EAFOEz8R}#5+p6c}cTis?zpHvdesA>&d8}TNyYiWmKUCu@ +z@<*!A$P@LN{2$flpM3w5Q9fPrqtyfQ)6{$9XRC+g_f=mZzeGJE&(-_n6ZM$fmCt~@()fh@ +ztLj7Yg?dW9=T4N*i2OA5jQqapWAaozCx4atDtVz^kiSEHLhhY{e3s-VsZYuK>J|CT +zdc0+}h1Xm7d<$>3@CEse+OMvWe@fl^PTIxf{pFh^#ALit)e`v^E|F9r;{XmPe$&>-!b`3nto31#@|)){dL?a$ldrm +zAwNyyOL8~Iu0k=OOuzH9jSG@uMv~+rr1>KhyMc@?Wa2lFtJi&o9Vby-dhmy$nCQTraC9 +zBb}7|8OOs%>6%lRr}98}fzz-I8CZ +z@oVJXf1|uQ`qLfXbM@XOZ=SukCtm@1q242JpN064{QW;h`K*wCSUn>DntGr7*Xl9( +z-_!@>NBjiKO~_AGACli)Jtcpn`iT5e^^E*E>SOX(spsVHQeP$iqT~jksyF11Q(ur@t=^KqN_~xdqV9bT?b@~HPpfyx +zzpn0+|5&|C{ulLteBTAitw$cHhvc_WUm?GfdPM#x^*;I2)MN60Q6G@MUp*oJiu#cJ +zx9TbRfj`6gj>rS`jQkw+G5JH)bMi~oSIJ+XUXZ^*eM0_W^^*K2>QnN+s8{62{2c2$ +zBR^feCcnG-oP4O>kiSrULH;K7miz|wHS!;+d!Ju!|D9hT{~hw%sr%#)SMQQvrXG+# +zN4-b>X7!N#1L`Z}pHPp;zp5USFVqL*e^gJ%_qz$@FeE=leU*HddO?0y^^*J%>QnNo +z)GP9_`i%UI>NWYh)#v2bt2gAIRbP;QTfHT3)z`@P|0T-J`@(X&I$6C#ewMmVemC_l +z`9M7&f3kXy{H5w4`PSOZ9tLNlbtFMw@t6q>7>J#$!s+Z)SQlFCFq+XHl{cDuNjQk|^n*2`cbMi~o8}jF? +zFUa4d-jY}9Yvf;3_rAE?&VQobAwQtSdimtL)w|>mR1e6nQSXsY)I;*Gs;`j$R6Qd9 +zqk5lwpWh(=G5OKz1M=IeC*=21ACf;xJtZHhkI0{^o{_&+eN6sQ^;Poksu$!xR-cgn +zTD>H{S$#_0`7O$=B0pArM!r+MCclmPoV>5zkUv0uLH=;{mi!X+HF7uq^y=ky{tS)p +zkdM`U@>i;N$tUUo`3Kc|8}=C*MP_bB@V(s1L|@swd> +zqMnjpsy-rrhI&T+BK0wOpNWZ2)#v12 +zQg6t=roJHmrg}^MUG+8cAF6v_UM`=Xs&~jwx>@^e@|!fiOa2@6fc*FBJ@Wri56S%xM14TsRZqx|Q6G|@pq`T7N_|AWOFbh$OMOhfqMnoAS-tqm +zay^c}gTG7iK)oV==)O2_Ta){G-$6rugnCQ<=>3q6_toY69Ix>{`6=$c2J+L?L-O6~ +z5&0d|WAby<6Y_hir{oV%&&VIDo|9joUXcHzdP#n=mQO|gB#p1huU2o!pQYZC_r8X5 +zUn37bj=Q-6ecc`BdBuUKFZVv@Z&B}4{A<+5Jj

M{8~KJuB6?@&+44^c14FFFG0Ov#_E +zUXi~T~kU+#xGp4SA@(AkWoX@jCh6P}VMXTeA0wR%S0XgXu^T0JL^?}hYN +z$-}$C3-apj@CkW&H+V_jXgX8!q>uQDytxZ}MxLAlugRl(!sp~!1aHX8XTlfkPldPS +zvHBW$s_xB~+h?WTAy1!%^nLQ+I(U~nd=We#pDwn`X6N;`@Nf%XA+I$3h&+E8mfI(f +z)MIu{XFy)P6zL@7nZ^&vU4ByX;#t6JLI*xPhNZ;@m=yj(+|kg9Y>=5lV|(EL-M(9FDqMkw1xM{{r!=COkVr&0ePmL +zkms7uA-SjVDS55&BXXCYjJ&=j@-rs)j)3RnzWOS8(nWkh9&7xBJXbHt%X=f8DS513 +zk>~e8{EXaJugSgh5I-mP)f@6eeL>##kxt95@oVI{y7$fH_Mblp>2%1$2f}^w;34oX +zd8QtaHxEX9k33fo$+Pnjzd{~sd_-PrKKtakrW2EY_*>YoACSkp_O#n+O8$9`ACXtL +zMSM>FQ;lCGFYk=_lKf8^KP9j4hWMKNmfuGH=j8Rn5Z{vDTI1KqgNqRFeQUWrL|P6$ +z`F%87-vn{;d +z!slCfvxP6V@OBGd+rm9Pj)hY3Jhxt*E!^M2yIc4Q`2)3`N96l%JI2;apWJO<1-Xl# +zkh}Cta<{!t$=&wel6zs-=4XvOSNFaf*wWe`n;~?T8;PmeX;|T_aC5eeY+>@xwil&geJG +z-qE;%e60QOWD76J>$e37Hz&5uuBsCUUDO(!4^HJ?55NIfJ^)K|ze^@zMs?~_;RF?pk& +zlK1X`b~Pq<^Us{z%|BPkvyY*C3vxIAoRGWuXG!knpB1^Af6mC={Ie!^^UpcCn}0Us +zZvMF-ck|Dd+|57N*meHt{cgFvx#z8Q$lW~6-@?0Fc(8@{w(xKZU)jQ=Exf;l$6NSd +z3s1K2;TFC|9%w)5-@IJTbM5#0!`YxR*d93MF;qstEQyU@Hh5O{~&DbC5l4lwpkk{%x^5AwzKO|4pSI8^%h`hc%(ixD)&)(Or +zXF^^)v15Hmo?ngll)O+MkykH6d`2EW1wJOvo(j*&{S3ZJUOydPkmpZ>Psk%(-;z9i +z2I8mW^~>QEd80lfFV$;ux7;~-rSaa{a(naMvX3qQ4te_#)QeB<>ZMEW>Lnm=--Psg +zIR-EuQ>S1%Lt +z;K67QC3$h7wjc8RAGH0DyLy?CyX~bWPw$U(=HzaBX~@&Nq1+bau3lPl|16}xMqZx* +z_x`lpKAT-gze8R}aGyN5E4)iyy!|NK&I9s5^WP(P^%9b|x*e^Md#^zLV{%uI19Df7 +z3AwAsA-Su^l-$+hh}_jihclFpKcl8*Omv=!s +zTp@S$7?Hbr?325CjLBU+4#>+G%T36md%}n0!5!f#x&J6^zaw%_)5*wPJ&ws;Jr?B2 +ztFhb(d3!aMTaxFmMEsQ8)ni5OYx*;CHxH@FT|Lg(SFzlN+|}cP+>LiFxf^%Z$lW}| +z`}1;puC;&bkh}5DCoeU=OYW8%kh|@%NABt|BzN`LXTKix6_e-x3?GoE?}sPkmCk>L +z&pOU+I%ZS{~TQc?=kj|Lg)niWX>T#9am1jZj<}DL)SC1vRtH&w1tH+AmEq6xl +z>aiww^*ASY_1Lm&J+6^AT3_D(F1Jrtj~#MXk3PAp$1b_6$AH|`V~<_yF(h~OxI*sg +zF(P;6*(Z1P7?Znt9FV(uOvqh54$0keQ*u|2BXU=d8M&*+RdP2z7Ubm|?SDeJ>aj=e>MM! +zclFpOcl8*PyLuduyLwE>-S#*nclDT(yLudvyL!yY%LVFXmE4Vw1-Tm^C*-akOL8|p +zPRZT)SdqK&amKFWV@>YraZc{W$A&!6^<9v=@v$YZb^f_V?#4&&Z_Dkubn{zsH$M90 +zZhY*LyLt@BT|KUlw|_=GM&#bB&=2&<-F`<*?)EzdTyEu>aiqu^*AMW^;nU+dYqBFdThwu{^NqY-W&DU +zlDm3bBX{*EpC%_?Za(1Zu|w|a(ICs$Xz`y +z$Xz|QMN93*^`{b@3V{%uI +z19G>Yl90RO>O*o@k14s^PZ^QB?J*;F^*APX^_Y{pdR!%U^;nR*?Qufx>aiqu^*AMW +z^;na;dC{EQ&2JlWH!oU{yLxQN-Mnax+|7$Ty)M$VPd7ex*mYjyle>EClDm0PKO77~hB6stg8M&M1)Z}h^oRholv0>MF&Vt-+k1e^|9@og- +z_UPYYdHzs5593IW{a5?hd1*-Ao_i?ftK{+b54IkWCwD*0dY?S}64H;!z4shw;|JvR +zKOSH`AfAxBr2B_Q{)D;JN5AdHzu3e?Zt?Up?KG0JU~Jh>M2TaXt|NBK|4y=$~RllzZFdzg|34dN^E +zbQ{WNMjjO?hnl>89nzVTr?)~s*^s;QCJXZVg;;J&UOoctWQ{y{gtq6-a(hlnq|+hy +z-hlqrC(m~yoi2I&9F%{Ly#5l}Nl0Ga5$UXu=kG^3MC8fS(LVd+?FyC~lZW?5Jr2md +z?_s?X^6Vz0KO}Fjf~Vx^`8Ym5A}`N{XXN#fSnim-`3%Y-Cr@sH_PGy(VRTIKgz#hKYNEAM;7GqPtZPF@=&I7T`-d2<%_kXOmG6!8Ul^{*(O33*#+ +zJ0veJhEK_>2;)>mp5GPQOHCf`37?avf5CRtkOwzoxeN02I;>YqUTQzHMqW%%U*5jU +z?X!3p((jOaXQ6-d$=e@k`y>y}z; +zz8>4}fIRv<@{^D!&%pW)$-~d1eWv7*&SysC`6ID?W#skcDCaSG{B4~-kXJtPxk~Q8 +z2<20ddmn&L$g^*tUP|__VST6M#mVRgD)RPyNM}YKJ{tM2$*UIYJ7<3?>ZKvic42)N +zCy#dSh$*Z%lUR`qkRoc$U!{2B>OzxkL +z{DkCbsr@i{^is69h`eo3Uw!iIUfK_ndlA-uK;FI%=_ll|-p?{5&z^?$P052NB0nSc +zr=tCg$)ks(J>=|9(soYn&#>HrJbog^@d8{M6+2T~N+* +z^3E#Cxgjrph4=+|{Q{)ll6z0aII>0_>-g^NzucaKIqI=P?v6|QkxC`h1l0j68X~&RfW{r((Ht^87q(M-6%Q +zVfcc)JO$;`k|&?SafUVW;MS-wZ^v@`ZyyHlkf#;O(%xK6P<4d^~k*l +z?Ia|R-iY#CArBvka*N2lSD}9UpLY+j>NcDk=JJ<{TaFU +zJ=9lC?yn%7IeGCVlz&4W>Uo3(dGi&-x8#0}<*t!?>YW3Z+j;#H#QWsMZ{c0?@DC`T +zfV_A#+Cz^#c?vuvkN*e0LY_Ve~Dk*$tyiS +zm69j-!+1I(k7n?Uyxkw=IVO+32+zs0uVTKmN?x6b<1Gbw@e=e`6Y^S*zm??Gmoa`# +z$T8EP2Pms&dIYcqWv`F#i!6;Ey$Cf=)8rzcoF(r&tGoOvG%te +za&Hf`6Q4Z!5yt&4dELST^5B&ypB{PhMdUvuFLnPSBF|64enFqyT_+He*Ls|Gz|uQ+Ic~q +z>3u5`^6DS3+$njZ$7w6_RG*tSBM%>d_EwWeU9`73dHfHUPd4P`Baok#yw&}tHS+X7 +z(GPeBFSpxDuW#v)XYbc}GI{Y=w5uL@{s(wSp1I@IT8v}oub_qBhf5Lu$lyga*ya(IMl)SnW>s66Qn$H<|b{z6KC-;B9-JZX0$b);J +zJuJxmy^;TxywL0PyhE4Ut-DXeXFmev(3_;@00r{ +zq8-NUdVXy{p6U7Agxq@^@-rk)^t!&3JY7TikI1u|QT`cuo+1BZa_{X}-<&+X8U4vB +zd87M51-ZN4ctW1M9qUz+d+$Q}Q}XPNXeSkUrPmS7$lFuVZfo-3E9f`ok39Pj#_^Cme_ph&+8O;xqE_cNoXV7u)hoRnU^5`|_59j2;HR#70^5pASuLXHNLwrl#ej4?-M((cT?HsY( +zZu47U`|`IriE`+X2VImyNFF}`=||+*Gj$$9UcMIXHYShvM*A6% +zCr?IwCFJ$t$j^}6UGFy{Z{CLEY#F)tVyy3&Jnf)fa`NboD7RJe_zlQsLGE9K_zAhY +z-l-&SzJ}#a*>%6KA`c&g{%uC?j*r#k=^@C^oIJZm`&;tlbts<&dHP=MZ^;WE?O}~P +z{=N3M-Q{+ho{022z$(ujH=j7=} +zQJxF(dW7|A*&b-%Ai?yjE< +z$(!dQKP%+!y7Y+LyA0*fCyz3$Z%iIuhxUseA+Mf`dK{Ab_eDEQ$@5c@&WJqL +z^Boy^mSY|@Cih-~eCFg)iuhIXpr`Ge-0vel6Y^BYmy$f1>+ucp){~n>Ga7Xy>2!p&%cHI49EkW|0m?tPSoR& +z{h4TQDS7!L%O7YvlC=^GWZP%k8jzF1AOXym>Fmzf0cg@$G;-{x9UG +zNABr$?;&~gE-ZJ2ynZj*NkrZ}9PPYMp6h%pCiisw9grtq$NVZG4=zNx4aw8<5TB9< +zdcW<6Jl69{8F}+JZ0|XFrpIYl$s4`Sq#%#}hI*Nh=by%QQIe;6U(b|0c{|FpA`cqm +zbH=X6Eo=5`(az`O-XoAsLmuA={p5n&>!aRV^7g;b&#aMGf5mZ8@95?BobHK!pu?{B +z3v|hYTc8~VXA2komfboU61W_h1`3lwrBG6`KYfxd85bQ2JBis33)q3`3%YP +zYf%0vdEoi>c>ajodp_EKMqW+P-p1tVd$7Id@`} +zd+?53ZlA55&+U-AXnMy9>zEA0wYV@G|uNJbWL^YvfUh +z?ZP{Lxjl!+qx?JMrQVOwCC~qa{k4GHI|u28N8g55;m*a(Db{L>}pRw~Rb|mL7K^ukHfR*)Krs6w;WP5Ohjv(#r+OS_P9C3wdTGd$&tiXkK^|X$aj+%N +z9)|hY8oM4B^-frBx3PYHXoo!dZ}bB`d44hS*(DE-#c~7k<`l&D$m46!oh&r5}InicZocj*5ka_>ZxL!Ugo3jJ+N9{q>TH^}REqd!c@{iBiokbM347yfv=#rlTi$(vALE9Ch$oj;SOx7Gfcyw&^uV)E>{sNaM=&q4(qDM+a`CghDihqffo^f>vH +zywK-`R^;(ruwFBA|5teaTTSksFEJ;tr)ZxId8F6TEy%NPV7*%MM4#ugMxN{OM(^b1 +zb{oA2_1GcLbiDJ)16|)Pxqlk^y@0%Z8uHmAkM%ypki5Dx(pe!7AA$ZhB5%$>`hD^^ +z!F(nrZ}obQ0ePm^ohIbz9Q8XSuNOEDnUV+h#&$O%_iqo+$gBHfzB(o^e+AFU-RC;3 +zlIJ=vEy&CBbbdna>wQusdHzGRhbeib*IUlWV|_knO&+`n+v%Kq{dqy;)@cahI7d3zfA)qvbRpP@(Y?n4R5lTRU?74rB8 +zDCda0(fbSfpaKRLPo3XG4d?C!W6dGmB_&*as9$j_AA|0>F-A}@7*H6wSQ%T|*Ir=T6q +z$>Tp@xea-99OmaOd9M2xYvhGqr|q4x+@AdhqkVSBs~uRbPhMVz<#x$iJ>MO$>v8oS +zdGviOHzfDphWc6|_jKMBkvFfvcHJjmy9?GcCigsy;{)=xkN!3xpS}j^49R1?eljKZ +z^*YrNd9C~J8F}?{l=GO}eV#~8o;(Eo(kglV9JIrN+})2eAx|zsIwg7eb?u+Y+xKC+ +zsK~wNVjP^2HxEKR*5u___aDi#H={i)$itVzTk_clP%mrbnLY=`>n*o)H=pm27hgtu +z_Q~@HqI|mKeu(-C$kTl>F7(KYn^7+zd32EW+vLd$wBII=6O==rJksM%F?o?_zfIoM +zy8lR?Yq_QDUqgOITJlygbmoCu$i +z*Z-pJmb^{SZ_LQ6KcjwY@=~8yKPPv`F&gsZt*GAxxx1gbC2vm0{Ctf(ek#_>yVY`g +zE|10b)gh1HgZ1^vv+rR4t4p5hbDIP5Hph0_W51_fFF_s*;49?Wr;z`MynH9p?~^ya +z&a27eucQ4B$h|S*6Y}I6sK=DtyA`(U5xIK~UPfNrANd@U*Lqw!C-+{7dR!$h_4$Vd +zdHPk<-C&7^5h;U&zigr(QnMz{~x>|Pme@C7vyfg +zuO&}?#IKQuFGIO`r!Kei$b)yt(^cfhCy$dZI8V84wf5|S9;!j +zh1@-_pif?2g!E(bM)zw5iPePvP@yV3D{0ZuPM4ssRwTwLaA=Yb59-fZ=DkraB +zgY9>fJi80>S&)bKLw+XYjXo#2BzN=qDS0+RxmD!ubJJ$z%?#s3P42x4!=^ +zmlcsG@5FqdPhRVNzA<^M_Z<(&1HG>~ArJor{pXN8`Xb6FC2#fq@ez6XM#N|2!Sivw +z)0n*0&mYOjJ-tq8mE6Au?V%uVKaPHKLf+_pSxFv5Xtz`H;-AnjRpjZvBmEh9sqL^P +z51)haVou)Ob+p~@ZpeeHuwDyt@4rxPEqPdDUbIG@1=v6JPFrrz;X|;!ci445+9$8~ +z#&OFodDx(x1nkd3{(Iy>hV~G$UxMvrg}l8A$vIt=@kzBd;$+JFm&BCu6yD^5Q~lM-6%N7%X=|p6m6uExEg% +zbB(;X8TI1rT5fOg4QLM?a{pM2<372Y|98oKJs%X1d-|OJ9=U&OltV}!{{-iYSIDFH +zAwLnh`<&uFxqlAIKOv9qjqzwmUVj+vDkb-xr~CWl%?Ry3Cl4>cdKKjDE6~49$jb!z +zDcKv$-=^gLOVIyU@z=1vWAZ@ni^<8`V^I#Pha`;{Q)TF1$pyolv_()>wO1na6N965Mh|kE&BjIE6;74e;IeFT^SIOgV!3*;26WadC +z^N+(z@}`1M$;tLd`=!bAKs9Am%dGt_tOkUj` +zJ|Hj8g(u|IIq)HQdH_5nZ~uh;YD6C04A0naf{)3w@4<8O_UrIf^6bm-g1q@0d_rE` +z2rtQlkHV+yAB0!r&70vf@<6>N_g|0rIs0qi4S9MUd_f*x1#iilE8uJ7zK+-4?&bF1 +zB#7^j$B%^jC)9y}y({)YXa74oowN95km;eGPvr|_6O($51O +zkT+jId_o?43O*!H{|%m!7yk|)k%w=AXXNca!N=s09=FWN1N~fpRr2O4q*IXRSHdUc +z*(LCj+

9O77nQUXj=Lh0n;VbKo_3{#VT3=H#_r=h=`~ztnj)|1JbOn5cJkH?}dHHO3pS-;m +z9+StffDg#M>);7_a3y?5?!O40l4qC0N92j-CnFD@jQBCRuj`eQXHP-=D!F$Rydd|V +z2%oV33G?TYy#51xO78s(Ua|i>d`4cp0$#J{@Hx5vB6vfdz7W13Po4sA$;+$ZYvkEg +zaPO?;_8(sf?~vE`g8SrgAKoQT^z-5a^7?j&?~!M>g@@$vDex8Y_EdO89_@tp$;0E| +zF?kli2jsY8l=ih=4$>TXZCC@$#ACaf;hiBy3f5FG((TCtUd2&5`m3;~?$cuNv +zC*-B>x0dA9TM$1b53hh%v^N*=ucJ|Yi}gJ^Q +z6Y}}J9*yA%5J|eI04bRB)6X0X=`quEAyb0i|7B6d47L*pS-v; +zJSH#ode;GYc6-Dp>^JK9Q}X6x@RU5#_z`*XTEu7M)vMuS@<8Kr^5ROwuabM0!wd36 +z<0s_B|KPl5NnU*$J|%BHt>NR-ksn>@^FUhE>iMj3LlY&Z-8gyX%9Xo&jNT(Ug~qFSIMIp +zuB$BAKLVeSdxs(Yl03K(@l*2VWAKVRt>82A;tF_8Ui~9{P99$mZ^*MJ!58G|5Z;nE +z7sJ=cL%r_QyVG*}&-OxmhrD<-u8Z@@TfL6AOP*Yf_<%e*0Nx|d_JfDy)q8MV(+YX^ +zYIsE6yae7S_nr@r$?FHh2jtBo;R$)J@k8?Zbi}9R_C@SJ@w +z_$ql;;`*zCynH=;LLOZQFUj3?k5l%u5nr+I37?V2f5G*2HF^6X_?$e}>uDSIe?$C& +z+7rxg{vYBvEqDBZU!XyC`l$-U2JqUYdKqlc96(JrJ +z62KCQ7uwoNUj!yxbby&m+Nw>DiUUX+b&}9lE4HEoM$}#`J*V~MJ;!Q5Fd!hvP~JQ{{DY-#NbMBIr<1SA+^OAnt)&IGFsr`T(_PQn>2e>8>9MC=PyKa2C%KOZIpziwD +z**#eQ*M6Km@|^)5WW?kab#wzqmqxynbo +z_;j3ePppjlkPAUOT;8#{#zWmZNce+=ZH%`KJUUqm2>`D>hE;%wc(s&mGZQ%kg=;=<+_VL$2#W( +zrT&$!{>Qn>A9ul7?wkvg`m0@d*yk#jo$;McxO#t&@>-`&OOJBrdU$oDNBJqIpHn@` +z)00c}C?A`iv~!+F;1qarobv1*<<4~`DyK&|O{{-;J<99tFtbvQ{UfNiGXd=S6|VZu +zmHpO>ov!kz3vXqPUKTi8Tnt(6Du2-K+WJ4_DtAnCtGv!teu0aB_qocSbKP~o~qo@gHrDNq?`rM*gpBzQ_7uCj`jVNqrarw#ilCg=p!k= +z+(pkvT;)j@9WHa^u+(>fuf{p@R?1yuu3GZC;knj@|Lm`Km;c^{x3H_+HLS{UFkxNqlMVCNd?kZp9TKA-@{0FZ36^{Ioe(rL?sT_GC&0<(rb)}hq>u|fQutsaXh)zSYm^NEYPO!K1Cd^-7b@M-7M +z#wW$+Gd`d4`Gn8MeE!MjAACOIbBfPNJ|FTq!RI)iV|+f~bCk~!KCOJ-=X02kKsrSI +z&P;9I)p5#v2UzAcDYeqferiQbQ*%A@J!U}O@8`Wzw|AC5;E(L+dZ)w4QF(c4RReWT +zXR8Sf$=5D#^Qz5!pVzc36>7^?Bgpoc$9I23(?=RXZC)Zrd7G23ElnvE@M^jd%v9c_ +zuc&3J3Ke?W&521(9SHQIPMPOuKwv2Q$%>fq>$#pG>bGV&<7cZ44OwagX6@~#YkylB +z*1X;z-|PD+qghiE>35|WT)!fA6EKfc6WVKkds)4g@(eY!o$rYa-?sbeM_;@PXAJiS +zuTVx(`mFu!2hZd?{q+ZiY<0BBhPBY^_XvyuZ>Krmg3(7iH=Hez6|prAoI4&DJORg= +z6|r87`|J{XOua{M1f0 +zAyup9gNM@kGS7j)jo@Y37zZBuG0ll7!PSkP77O3CKUxt>f+vCdB?s=7$820_cX)%@ +zPX98uEbuDz1jj3!y3aawGuC@qTO+AcN8X2UJGAW<&XT<-TkW(HSjR9v@8N?qUC0!=5I^Fu +z?|IxdBY3;M^Hd~1f~4Ole^))6A1PP);er!dY5s})pr#iXHh!<~yb1ce(epu|%yTSI +z_d?}UQor^EAGCgbXYo_gN51fddFtU6vHc&~_^x|Y)@?$R@nXOb1%{|sz0;v7xx9F# +zx%@v?#IC5a>)uIS;Z65^$|;ln$JOOW_A6h+G=X=vm&k)c7eAKJ^(VEIw@Sn;tuj&;9>l +zj~@pw8u+sNyS=lXwo3iIQ^rqK=SOy$s~P+8&V4oOBH^7kB;;N4@x75+wI#AfRmRt- +z1$-98mAce=SG8fUH5X&G%w-GkK46va|IuFhy&>_h&aGAri|G1r<74yXWUVuokDR#( +ztUc$G&3tm84WC5=E6vbDD`I)jzRaWif&9ogHKbi=L+Hk0QIr)ISp?=#?11zoK<(&iRxgwe!AYFN2q6f +zb-fp*Ud30}dr0bqzPjF>QZN41^(INZ=w8}u-j))f^ZwAh(Dwp#(nsd}=JqaZRTuva +zbMfDJ+O_iDE#HbM6M4~6y&@*|M2C5O*PGgWOQvhsAOAkk*xxUjK9(u|9mgC8SnOmjr%P-L*kx=d|#+m*9L-mNt2&&d6wfnClxN;iBj{&-gh +zF#*O|X%@#;#L$E7BHLS@uwkj=J)x*()-89>neB?9R?0g3vM+v!h$pPn-#HNq9;Tr4W_Q>8XNyB +zO?mgU^G-SM()bZyLFho{A@$;BNB{IXq@O|`um8xVuj~ygVq#`Cd~` +z9gI70V%uh3RROK%M;`UK6lsRAT;5zk-6|u<1vuQzKknw}A@so@{j`7Dj +zc8XW6;>L{47Ch4&cz9pK`-NwNvyZb;ZvU +zo_yPpwWZX}rf%BT&OuIIe1+Z5@fyK{@hWR0{YR9V3SSl&7g>FtEl0|nHMq=clw5Yg +zSF&-qQIbJhfk9#s?l}*@_d~|i%R7lh$Xs)_u87?{`D_{&d{hC0;6v{YQ%#a^B1`4|~GuPJS_3fyA%d{b3mv;HJHO?i3#GFqzQyOoO7C{~eD7*D9+WC!?w3UlMR#?K(xw~v+9-qX30;L~KZAE;A|thF#z<`> +z<*^3sunNvaj`?`zijTBiVWZ)jy{dv!#7|JG&cf#$7d{Qod*Yiqe&OaQHg^>Ijxx7s +z8plf4f*+bglWClq;%gzddpmfQ*iODR#~($9S}Eis>~%YCAh!R3fZ*)MPG39dW2dvWGM3bz1?}C; +z$KB=ur+$d~zodT8Io<2b>DT9Y=W*U8&haiyW7{1VguZ?^>GSlJ&A6gJBnBchqv@Kz +zudEgG+>eescm_A~VikHzpk>ppj(iOn$b54gny*`XJNTU!6a8uVky-|8F`xd7dUrjc +z=Q`Riv-unUav}D87k-!UbXOa)xS<$7Ybx|S&hfvHg$-lzyK>Z6Vi&bh{Km)yYHW3x +z8q=uMzG#&ilTd18D6D2Cmgq+Vy|od({FdQCv7NH4c-Y8L`ulCfV#J5I-J-YAXUgq* +z-QR~h^)9vQA&0iDh*hYQO|yt|gw#Fl%hk;G8(I4@e7E1|Hjk96{)yy9=7t`rz;6LQ +zaI(^xqf)*^*!mu@*xmkI##O2k3q?bpH}`|4y`4{clUY +zXQcJr@WBr$m9siUd5sr1^IP+S +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 +zLHc^HX_(;Ap;mkYow`GiF +z&sAcA2b((CYtB(6=(N(dO0CqlR^RCJX_px_$n1Qt5yYmh?}J?=wwctCIF#UB==H@; +z8y8{vuBP3m=x2ewfH_!oh?Df6cy_${68x`n>c_D;#9tyF!JbfQRQwIwpZe&GA1pa- +zlCOi`*&zEO5|>E(^rzx0Vpnb#%jw66iC|90qC{42qAnkEEio4#g` +zXXANQ%`n;(f?qq&6`r*CLGppw*XdC=wM_h6m25Ou?@9BH-Tyx=nv?#&*P~4{Z6wcO +z3$iTT=0@mW?3St?b?d16Q*{0p;ZgR61&_CYM*DB +zGKt53-SP>#<5mOVKSLcwF5el8c{;FJP6qm_mfeCAu~%Psz+RWgJ+>a2%lkAvE~iZT +zE`!#kzQnAeMRxt$tanGTBSvGRj%a%a+}vo%KRcdWfo)ae$bzxdwdZ+m8E~PC=MC%= +ziSvQKsKhGWGTdc@$Ow6&slV8zY`kYL{0Z +zKC%9JxN)+UuL2x{9&HACY~t9A&gE&X&l@^v~YN +zI*HAgfs0!W^5)m9?X3#d_E8yY`>KO$JZewvFXt?zeu$f;_N+NiWmKQ94u%f*+hV-m +zXOFS4&jMqwiqBZoui6NBzGWQDt~3_%ne5qWO!BNX7;6V@IX)KJ22XE;_qO#@EnCl1 +z$*t!rwWYsmiNF824X^CWc!Bi~@TVJRvmKl4--cAGDq^ajs~U;visS8 +z=dO+!;Pg5A!Cq{$rj#7~mFw?0~_k)xHtZ}#|N!tE~Y}+5Zi-Q72;YFS*<|qOYX=XN7hf +z)AWWOqP})`crX)LF@{_LjT}AGG~yw16z#sv=R{GqI`L?}rWs*#RAQ}OXs|B$u$LvQ +zewib=SliO`5*m|ndwablIm90Bb>>yfI5Mv{z%{;cr1u6d@!ll{`x{Miwng|b^=LkJ +z?M(Pec*$q=@3xB%ecQ4Tt-XBs4%qB{e8Z9<|C%4T%<%)uh;4LWH?$xFBu4PdIR)^F +zzgA+i{nh+7bT>SrtsUIzWq#(_Rt +zj6?l482KtRb78+FhTlV3c8Rfo&m`hf0nY-1wmWFMgR?i=daK^>%F(TT)f*fc>%HYX +zbu@mydLs_~H~5idHXh$?^Rgzl^WEl)lgQlFZL){k&UuSvJM$%vAR%^utcC1p4jbRC +zm(u$OBJb*#bn7RfSJ6c~UbrkOxk=L;8$GS3M1P6BezWqTE0#rfyinSfMGU1BnN+H0 +zOk(Y$#N~PCj{6=9{3y?+tMQEGC00C^xVG?CHt}QTY{@cP*MAszz^R)<-9hjWF>v(U +zh^W~7}wBEys6>w|rusWN0! +zL1-#^UG_QCbv;(y)^#3_$H#fT<|Xjda`jftG}c3T&Gu~8-=|$ef5$^Zl*Ftm!@l!c +ziBsJfpGRF8kMj*i5IkyDJY?azOwW7%f1uAaRUA_4$TsFlu0nR3jOnrJzeaxx*A1jz +zfOfrA3pQSHDBw9lAKmo^YEtjB2L^fu27qmEsjQU+lec-|8MyMprg>SMSW8IyzYdsW +z3=eH*V1H}u=Zf#El+3XexXh$d9|Dt!Jy95v_tI_vZ3bv>G2UAb4DfvFPnqxTEusC@ +z^e1)8S@YS*QMwC$l5OOKWzuN8zWI%t%m*Irz-t0Rnl=4084;=85ejLV5L?j+9m +z$XhnfYpL6ajFS0CeDwz-efs(XGN +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 +zw(K^YlQX{Uu7`+U(VXeF&f4fG-O9xXn{ +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 +zqmG3=o&!PTe6!S@p(lua*y(B!A +z=BXUDX%pv`UMq*M`b`PJOQSj}^y`ePp|Oyj@?B}^nZEpBteoDu)y7_55Z3NHaZvbO-KTn~TVOq?WRT2soT6A@{WpB@6 +ztwpZL9WI4ORZtyTn3@CaVpEdWEqALe4QF~PgV$g`OJA>=PwbX=5_6XMv$w`M=j(v6 +zph@)E2BE>>(_NiUm4)iG@~KY{8_w> +zv4v+P7eMGk*8RVLvB-k4HFX<0MCet@`{9Quk2ZBAYnO-3F$EpsF^9fl!)eQEepdy0 +zA$L|Su;liSyH+Qq?P>b#N%unYvJOJ)Y1$W>Ps={+I_Pgz;x8B2^q%L?y3qI^N6VcS +z@6=GI<{E69K^A?#gnk$jyB9i^>@LYOa>0ic{dtGdP+icxw +zAuwQD5>I`nQQ#mR(j>CD(Sao(a`X)EZMNj7*rEn-$$oqqHrmC~e0V;1gV$n8?`PTR +zMOr^(gss!k`fMtA68Q?Pq=Nh{^H~A>f^XI*@-+CiZCBd|Di}4_lXtixxPo$}u0!6; +zh-9+=kk6-3d(ZFlTx(=#0q9~zg7@|7kbwiW`xy69_yiPi);EJzuXHcwD4ob +zJrn;NC46DWpA>%8SoI_9qrZfa=iz#6e%UwjJNA(mJ41Y_^nQ`pLvkO6*hx7~?xomG +zwvF^)1YOmL{g*&rS@x0AR&78&;a4TuBdW!=7r!c$l-#kr=sINPy2u94FyCZ;*K418 +z$%^lTN45+h7VY-GEdK8dp!k$u=i^~5`msLd(tBYu}~bK-UEi5A8?Lft`n +zA#uFJ0rU}iUu3%3)@w?V7|u^S?$^f~eq`EX`X=9OOSXNsaXflIbT~Fu&N6B257RHQ +z>eyELt~tVM$c7$3g@U38+&<^?5q5#ey?hI=Ue(S#(OHs +z-2P-LU+QMW5cw@bgG+n;3&(=zSs-q8< +zUaVUESDx5XYIMns@K<{pzR|lxK_ia@WP4iw!9s +zgiWbByT5;5{{-FtT)Wb~@2en|)*^PO`2=CUi&L|DKkQdpg%5jRtH~Jz*0$zi?O{K3 +z(s*%eYw5Lbgr?r#+C-jRXxm`D!j}zA2tCLa +zW6Rp07)6Jlkr6rSJj;%eef_@3;4GEdv0NXA@2y^|BNri;C;nP^9CplOhx<>RMBb66 +z1|l1VG%0l-I9Wy9zN<#|NMv2}kU7LwppCl|x_;O{jI(07>MqBQxvSpG_|it+Nu9yG +z=Pdk1NpSKJvJg39*}99cb%l4?KVEDcpY&E +zPtf!XP35XZ##JY(ODptTL&3A#k*g{-G^IQhh8G$Gfk|()dg?EE!mFLi6ADQAGg7a! +z`+EhylcGaFgS8g_{dy<&4?gjlGGB(TLmjvDj{65|!h_Gl*N?F-Vzb8K>mdo%x;R+) +z2Dt;R{n=9i2w~ves_k+JI-dA?qvq4_VCf1LmECPSbWhLo*UX5Kp7`sR4K-yGx +zJ@Lu{3y#h3p>4zS4jXD6wxj&s^SY*T-v6j;HGFBy_HleK&AQ)1()J3p^pl5dY(law){EJHT0E(&Rk^doGuevem8Sb&0_QP>v}gSu*iIr+7^-d +z$v&{mjo*E>j~q>3eD%DUv3g!cWis1dEp28 +zY!@3RgdHaPF6sF!hem6Wmtyk>AN=inn-2m)PcA;79rJoA@^*o3W6L~gTSHs+3n#=F +zKbFUQL=P$SPes?zWG`&v0J@g5bv$^I23(pL`-^^3wzW5>OJqn38W&^u(p2>*8v`&src#D*@%&KBD`2V1%rSv^+$h2M3N^LsBf +z1c^I_!7b~z;U?^a5I9%tQ|#o)KE=Csp7pu+DgHu?F;0xpM;uM5A4Id&tC5IiOwZ?l +z1o{9wuR2P9#3{R)@-#1ZXbfp8$ev$06aP>4?P`Hd?vI&4jB+YAO`g8a_dl9q?;^%s +zP{)D!WS~;N-}g;x572BkJrmn6oMJfp7njus=%ZBjCH1uiIg0FGY-FGCe)gih$f*Ep +zu`Tt$;hFI8!N5N`JDzWh3(9%S>g|QWCB)*j)<7@=e`x^wTQ|@b=Qp`~?Gfu9c49EJ +z-<#4sTi%k)jEa#vdKT0Z0PzCL;9BAaL$;lO0p%cPD0*r#>h}XqaZ{s +zGv`1HdT%x486eKeZ=ji~cm?;|{F_y_M!(Uxo_3SL!S7jfWEF9p3GmY0iTTVUSB=64 +zm>$-wnEI&tOwC{qWu}jP9p*Ud%pOVwys!-XqJvpK+xCCsyEZ@kaj0$khp^#mvHdUZ +zKc77xGk}kY?f-$qhaKC09&PP5b+k$Em(VwHz9F%hj482XO)oW$gTHGs6fm5Ka+Zl0 +z-}H?!;Fr9hYJEL;$!>#wct0FGk|XaK$8VC41ux*8Tr0Udp$?v`1+OtHzhOA?x5_|9 +z5J#51+u;d`wQC;EQR(A@V>Rv&Vy(1RUogE^vTm|o58+qHnCCH`oQb$pTZ`=~cQ|Bo +z4&xy7(aYD1ch=ult~f9`@Bl}%u0LtK%^Ifh?g0k-Zb%>d-uM*GUJg9Ly4YvQKL(zE +zWiJQ5d@Skg=V;qoN`K9G(x>b{&t`v8_+u$~Xc~5EUr(j)kY%F|h!+7=-Jo7*IWE<)C0zq&{Bq~Pn|ZO3-6xC`l9_`>g*LtTDHr?tpxC%>)0d{`6NLoBlHP|)Q) +zd?oGH0Gv9z#ylOo-8y{B0Fb*NZ<*tD_z2*1i?ho%kk39CgKlK;$r|nwnL~&)P2H7hQ7Uo*S~f9;|6LgxH2^hTRdmb$ZD +zY>RvK|Ke=I0z>+_m$QCy&U2u)1yOJi+E1U+{H%TLc5kpspTs&;8H^YI4BYHcL)NT4 +z+`lwKoeEesjG9(2d5Y7J-Q?cD`@=V>R>eM*m%D-5$k(g%A#0JXozFajUKTo<4iEQ% +zr{nOZ(3a4Z3J1+s?>Xow}Om +zC5wOWf$uY0w@`m*Tb>qX???6$-z7i2&KP3#Swx?$$lGz2yuHklw-pvG$@vuEM^cx+EqjL8mrHK+qHQLAR2@95F&4i^ +zyH{|WjeobZYv^u~-T98(ewMY;JoCZDgy46ntF;=?rJ1Ur9A0<)ugY546Mc`|csrl6 +zatGhZryL%Br%TSOb?=GZ^c`DHpBf~xeRD$ySt{~8eeR_D_bVkoUiQLYIwRX(q|Hoh +zq&FBlt!IIyy^`;WGs|_@DE+iY;6ahYg^5*`9Ddn?{Xc;{vsLnyhPFj1FEGl3nb5lE +zx1Vkg1c^)Rxu7)@dN$j?u08MnCAtMU)xJVsA^AwJDfJE3`KI;^@R&gk(lB&l#v9&J +zkpmhrXUVzX05I&*01A#gm))=%~ClJnKF_h#%k(O(bh-!lX!bC3nS@Z067sqYbk{w(D2q=Fv(R8V3y1NHli +z|0F)^MMkV)4YI($%6K=GOH-*ogTEn=P^ZvB? +z9{ON@>Q}@(7w7?Uk3TaqJX4I(G6(gyH5uySYCm>lFLg2ZTYVDxH_mLy+0sF8go1VC +z8|cXF0j;l-cnj6-UQhYM`szhO5cwhVk_oYCHNQ +z5Y&2C)9?8D3&6Gf2G$X9o8cMC+~)=P9X#f)N>$do{D$|-DF}xc#6JR!JjHGjpJXog +z7^n5K@W}xB$?%{vXwUBqvz}h$80(oeH08B;W+eN=pO@JZ56^f|+RYDMBJCE7ex;p0 +zG<6~Gv{QJg-8wmr(2 +za+XkJp~%`lbWKFYBkR!9X?eF79?-TYOT}(`MPOvifx5}L7+_>fv0EkoEUSp|d%eq9 +z{+Clr_&)G8>a91Saq967nA`br$cvB*DX~GTS!1E`0xM^xfHCEF)@@ty62{WDhpaJ$ +z*WCV4DmR_4bqRM}W@CTK{SG_W!=GpQLjibY5aM_FC_|NEI_Ot?pjHl8X>0!UC4Jhd%7NAZ~q=!A>JTTQD% +zxLD&sOHNzc^r$$2pd-#CoYuCq-hx7nc0%Y?;42z5AU(B8`}MT+wAFx8E{f9YnFPrE +z-k<$E4-65kJ?Hz!?~i%S%(M5iFKe&0_S&Dl*524GD_9p96Hjg98(WsWg=*|oo$=sW +z+akDQad}Z?^i%j*Pi4Mjub@Z1YQ^SF_7_IubgOvNExh+E_?Y5ZtKJSW3<;^_SBr1p-%!48Eh +zT8XXyfom#u_kQBG?rGmd2ER{!W4_ZSpRvp6v+5`@qm!yr>+{ac2zR+=nD<%TS(w8FNhftnfnjn{;ZDlXx+N&sbx) +zz}*Btshy4Cdn=#gw|o~%uqR|!z{g{ax&59ik?|_#S!AFmBs{(1quH|CBIs&wPG&Ft +zDJNX(R?%+e?k?5}*)N9Yx;6M15qIDF1^UnV2=wpvdtBPD@>Gs3Kd&tA9P4Bq1lASl +zyxHChR|f5+(;o%%)|^(JQ9XOeXE+CPo{_KGXl$**q+{pn(QQldv6zdoI+-#QcO0C# +zPzMIl0G3h@-jHCuRRi`=-Oo>L;UaHtzUDM<-388&UTNp%;Lgl_u}T6fhl2U8a~#cSX)eJSd~KW%agb+zbR&rbUH;qW;37UXKKW8jG{*6bs&e-|MO +z3zmNsdC_=lY;~5a_(9{X@zq%8kFT&u(Lph8+9O8hsyM%=i?yP^Hc8mE$re+)C0GlA +zJHWr*TIhrNly5&83o{JArAMuwg^P@8TvWf}JJ@S%|2^MBEpMI2JT%vRfw@V%CEi&A +ze|1UE@s4=Q@>tGE^yOA9>C2VD3p>Y}0S@y>Yo)0;JsY{r#1rAu-1!j5m?xhSZ<+8Y +z#fQLO4t_edZW#X@@z?F}*Ia%_(fRvngXke2;xF5F1-^HqkNVy{&2tw%SG&Bt!!oz# +zJyRdmubX*xG9SGrV_rALH@k> +z(UaN7qm!TR=TE)-bDlhHA1WD~+%8@|UIx9riDNP-+{An5A>Nq*4@{wM7u!G3SsKef +z(?6ZP>GAA@jOQn<_<%QU{Ly=3k5)0Kd27JJuwsuMvwl87>=EPc#|M}9fdVwQOGEqfpiJdw*KXq)!(AMFtiJ;n0j^z1jW1usF*hz~WkUxsHs +zj-4t#6yMP&z$luf1F}JnGmxX`GS(~l!V%G9vn7W4ZKV%-u +zemQ&-ahICoRvuEhL-{QXNAf3r3&C&U%fa2qFPgtj-;8O4_uzHYmXXe@;+gDH=H1ME +zOP~BPn~=Gebn)9?!Fc{+?+IDMd@v#%l<^zh@pzWIU-<2v(=;nn?f>@VY*t2lee&T7 +z{<9H4TRfZbWzN|b&wQV{gxATCSzw3$NYGxf5F*#hB^LC9j-=?7__o +z4|E%Eic~p8{isD$Ye%jmG2*u$l;;vCd!FqrTb79%-yix>;-go^>d3lVe+}&SGwE#dd&(**&F+ +z89Nw9@Q}k(u?cdy*ZXwOL?yV)9%9vIfbm4Zc(m_iDt_53KcQ*hdPQTp<2su_So%8J +zhrP6!GsIIvofo70PtoS~((nX)Ro;$e;h}G`hOEb~bSYQZL*eC#ICLV`w3Qf)G2lG4 +z(0)+Q{BS%vo8QKCFCT@k!neYo#fLTWLV@{fB^dl6k9J>iZ?k#c`i@Ke(`iqZ_%8g! +zpi{)v86EhRq>Tw>K8dY3+@!Iu()Sle68N&D+pu|GUx1Iyk4>V}m^8fV`LHIiwQJz5 +z74)YXy4PW2;ZuQb_Au??w|P1`TkP3ZZHyVV2)Kvm$J$9b@VAW{+l!4=jI0EDy^D8r +z-bO9_PCfVlbj#lg+q@6|me-o8t7QT@Z!fyyEc|TNW0&(EI;4?<*XYYGY^!u~4RQ|; +zrqn;ypXi}b=0)PZjj2OsJiq_qymLpt9LkRs-Xob$BlBtGIz1`xUh|Tpeybx=!V%;% +zJ8B;oD?Wc;Mdr|TX%x=pU_bE|=&yF1NgG*LWgjPh!J2N?)q7&U09*VyzK*)%a~AWu +z?q;}LvI!ru20?#zgQq9#`+D~Q-c|V;KaHoJ(I4{7*LP;QO@Ed>OOsWaWRU$%KmDc* +z4%#33HMY!qdCS00748pcPsl8U&tlOR`E5*XQn=kW!{6aTX6+k)$wfAM#~fJ2eDO5* +z?zWO=VQay;waDeO)N>PZxtR8iKrR>ds2%)=-$qz|+YP@-_p6^#ctQJY>Nofqy6raf +z=>g8qqx;+&B7GOy-5tLb+* +z&C=~mXry&?Fvjwm@y;WY-ng%&8`_@bB!~fNjxA&!UIz`~d1&0%F8u-D-S-=K?hEJ; +z>H9&K*H#@guQ3+yGOlCY^GOStQpUT@J=f}nci&fkh<_Qz@63WuHAnS_^y~zyKU8-( +zyfQk1c{|_NMSU2xuhq)M{Z=j(r)JW(KrZG{uK47i;D7PD_*(oTUNPooVSCIa9$(AH +zlm4aO_1b@lPrOV9{Fxz>=z%SuUlX))x!EEP& +z*8`+Mcrxwv-YMoCjqe`p3$1;nzn|c@ +z^n~{3sWUakxhcvSRqiO~CU|gOW;@RV{lVJJ(xNMO%pc)VOQ*i{8upw-C&p2}+vu>H +zeYw6l^N^*>i1d%qZ$Gm6q$Bz=8nb-;p!H^F-^eb`u1RWM)ciP=`qv}7|2y7)HuJiF +z2chIYpZ5z3PR{$>0eu|r|F!S#&g*GUFs6UxcbRipRC4P$tfR3-IAdh9{GQKp9>8YN +z`5q79_xu`I!DZ20?lNqQ8}MJTzOLD2yg$~)6zs|V8eJ;h5ue;mJ@`jVW8k_J6M0A9 +z>(5K?iVm_RL_6-#hQ5{P)v5T#yy@<<>$FAqtv_q+3DHkB#eVR*H_@q*Gs)X^d}g4V +zr(z3udhRXCl}?ll4zu$%ciba`4annC&h?diy_;kXk82KR|5kH2diK~HUTO1WTZ_)^ +z_U)fHTCoYxOY)&V3{F#uZ~cf4@kIgq&eF3=mpw8ATzwktVI5)bG+hrriw2Xy3Jd7_ +z#i9lGBg^g)zsfIy|M-MFlKugGlUxS8Aw9S~PcQ0>X3y8-m|jdWHwC)UAe*1|`JyOK +zAHHooo*=K)iPDGa%T#c3=|cLE*8ktrHpx=J%aWm=z~9>}CbZDXzRtPw^u)pp#^X_0 +zx(Qi&mb`(!DTam{c~5j<&SIPoWA948EX;^*-{W2NQ~gsvuYq=f{+Hel`Woo}{C=*m +zeprj!N1ULqoULqie|}%dZ~M!d1|8U!_VoXV7M*p_!q{otG+x2jNr#BHR`Z=?T@bW! +zIQDnYM&_5yRgB?5{BT7770_PmW@u~evjlc*Fi-tC?CGo1857>KV^EWmAKHkt#zHzw +zb{6kgzZ=a{L%<*4;pWrBUF`d`ZXN4%RZ4$I9s*ey3%>;Rvv_F~|0Q4aF?9hkLs~Z< +zq+J>_`O*~bHu2x|JqrJ^AI#id$au?7Dwe7X%8=mwv@65FKJ`g)8_?clq}xZu+#KZCfE^`7E~ +zw^@9;rKQ*urpru#PjAMSoyNc%R{dt>c-&%>wB04p9v>{98NPWB;M6H#GF;L`v; +zFU|#P~n>L +znV5fU(%h@QM8FuMMG^Yr_!#3E?qG{Cj%#x$vx>3(I^~AU$FjB131*>=TY785ABtYj +z?`tVXxY>HvAr5QwWhS!qS}+?ASL#@Mtq~?&m@F}?mz#)T%~aU-ucr02S}^I483SJz +zT1>j0^$jwVNg|gC_#gRPi>!6jA(OS(j@zxxx+~UdRGl#sj6Mk93LGt3K_hFmn +z7{<5@ +zJ14-VM=$@j)rTExg)?anJ_O$USI(jk4~Fd78$0pWo)=wj@#anVyRCu8XQ#B@2!TcY +zv*Y4>^S941WX*;w_YUGLsI|hzp0f3RvR&BH%NE-jl${%{b)UE6@8QcD^SSV`p7nA6 +zVJ_DSu2pOI7#w^_qD3DQ5BGlTHui18Kdzi(vD0yF!j&D$+Gxi-0?BMuI&h`ZKycrZs0NyZ4o$kvOkWv3gZmMs1Fmhm +z78wYI?{tS*-1&xVLwKHK1l;*{V#_}&4F1I%D96K(FUCH2)cQjQ>(d#WOLBwodehQz +zO87tBTl?Y2b@X+;T^qJ`&P0A(>I?P~CRo~edm7q16?Q8cjpKL3O!4vL$E@wXd+=kv +z?f#f=yH82Z&CNOPeBi&JQ&(z>%S +zJ%xGW-gFE{52*si~s%iGk(YXre_|14a@wR|LTKFA4F62<5ixC +zPi`QeaD+1FPTF%a%=rfTq;sEzIp0a2+@qMYu*8!Uwm2TX&l3suVK#3 +z$Csy!s5%tJ$2xk{}?h`LS{%$fG^jD_qs1TI@j?75%Eny +zeQVZ*Ra00i{T`fTcR!ps4qkDs#fcZA$7+3?_*r64M)tJvu5_R1t#Qc5fVJP~;YdH? +z9DtFEKWD${7?$Mi>)wnV|6YvzhEP66zBl%_F!HVNmWMUx^H#Uzt#4c2^04LyEpHve +znjbs?*1RT{uXDh()wP!tTp|7AAb|y>Ah0u +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 +zLU}5O?1~kj-<{o4mz?{nQ_!(g}X +zTHEB^$4?|fw4b%Ihl`-s?Rq)v>}KBBP5!DB*hnHeWG8p{Udq|gInG7N#W<^#^CpP} +zCmvIAaxp$0c2=JFsCi?o@=G5TEE^Mdc8}rAv%5Q$M|u0_Q{1f+?yj0LCPD1sXt2&l +zyF{n;={s6H-66Y%vmB536W{I@)3PH$3vVN_b{mY8v? +zm-+QPLwZ4;{s`^1irwzNf9LzWkL{aTK)UQ>2A20{B*gO% +zG9Tn}cd@R04mo)#E1aa{y7}4gE#HaPnKx1mrXXG9uE~loE1kIOaPI_soAmBSzAP~m +z+ek54D(g(ja-2$cRAMUUBkXhw_S}t4Sk^Rpz~k=Hn?4&a9Gi$cMPDmf&-=#X3uwg%Qx +zIW-d3J$(OYqLmZOrS`nytIFLOL!9qNr*P`J@Yb4_G&Ylwy#vT#)RtLu91S*q02)Xa +zi3aCE%KtYsD6llRyB`gv`!vv5?tc#r-g*xW2C?oa@M&<(Po<;ZdVHql5#|%iOWcbDA^)2i~%~P1oo=$y~KFtu+X^6xffe`f2+meQLkzeDUcEd#PtF +zZNwhh7hCMte{kETLj!$1rF?ov>6^)ayPrqxdx?CNo*sp-PR>X9dkd<&KUSzdCcLsb +zdvgyT?#*pFBD+-dPpp5lC%wMC=MsG4wVq^eiatzOqHX{>#wzU1(dG<$tEYyb}v;>8vUsw*J5U +z{o`uJvU2z>Q(i;gEwTG6^U|8zjOl*-S)b?CH=V^Ox>mD}4CGSudgw*Z-Y)iOtGx-~ +zfWP(ICpt8c=eu^y`Z|OIEv87yT)lHR=&g>gy+xh+uK#rdzx>T9^AU=P@_}LUJ~ab+xzAd9gd-Eo>9^09bE!XdeK)tmC|zlHMbey?hUmPh%Rg +zc_WEc;^!@HRVQ)*mY0>hY0X{7rxN)X5^1d}*v-fKMa^q3ShK3?Onz&8m{6cObH{z+ +zO|R{v)&(+nYw9BEs&l04uCVyvPw8{OpKj3`C&dTr{XKPCHfuWg1)T7$Sjz7!`_`Eq +zTbPF(yFYPcu$j~I;?oOzPJu5gavhoTBW~3Z<8CfMF2Cp0c7{m@BWg~fkJZOuJy6WJ +zf6a+Thuz{aSFo)N6O*D}< +z<<~ji!^mHeYe{Ke_4V9yUCW#*#>X44YW%el#7?mHYOycffxXP{i}qvVU;=}wbGyHu +zk=>+sI(-?h$PLTv?b>wcC#+GlPZDAbUVJ*$qq{EEpZm};%fXlwKZwnV>`d#?xP=%u +z&qrWjb0|ERb-LS?z-A7GLzUVuR{QejrUZ4U?03*xIx8X=TXb(G7~k)9c;hQtUPJ!= +zWn9cN#^*hA#%P{XPD*Q|9DG@OTS@P7r#hNo-%PPyD(B$JJ6cxYGm#{Y^Pd>=tC`=l +zUs&nK-FCmQ>ChnbobpzDU2EhU`~Jz?ZO@p{96Yn;s@{A3SmGa&x5}rd_|xmp*?sDZ +zWb7+`Kh&lac@XT=GRhBqSc +zMs1sMM2CluXsjIQFKke4*Z5ZXV@saQV9J|CS&9jlKY{YJ<>9@1pZ9Fm$>c!~99{x% +zwS7u>@4WWq@GpCh*lx8i1Uha#`5T>mQRB=;M?1| +zfOX9GPIz6Ev$VPf+x&?wYEORt8uG6*Ponp3JiPtemB@E_(qW$EyG?oX^})zIei_Ys +z{mUAxXU^i3?rC1R^b+e2Wyi{KxKBp=e37xq0C +zt|m{6F{6Rd5L}2cPMCc?@>yy7)U=+^mP8fjm@+;yQ%%ltXtAIrk()(aUF{1V|9gCY +z1LcTk(2w+c7~>mF6^5(X_f2#ah6hy+;G4N0Tval2Jl!JxyRr=w7ZqC8SfzbMmF3wJ +z?Z~d?zOt%|*zIu>OzMXzzk?ME71|b?^Sz`R{oBZy^5-0Up_@4BhcVmg%pK3E&#$F+p%)wMczA8re8KtbJ<`ofoTw{X +zuOhdr{qO;=4=Z`EfcDE?aE#l7QwDtVti?DA=|gBuG=2+Mw(x^u+AsgNg57TX5PnYb +z{VoX4=WMULdEevp{<>uzx7=!-Bt1Bhy881$DbE647cZGSUjHb(t~vO=JdF5rr(Rza +zgAUWIz5hmR25I^B$hK$Muf*P#ec@u$PsH~FTeBU170Kukt=*Yt+H0{vv`_lt)6;tD +zuv;c#pIkv)DRw3Hi)_*#r19}sYs@XoRUPd~;vA8O#I4q5_2#lGErxL*_Mbj2XHYl$ +zHI^2~Y}5nRMt#Z8Q$e2l{XE{9{XpznKL0J*Ju*I+bn)MGzaDp)?1>xuxI+ZpPV5E! +zUiI`GSicX(0{n9^_{Sq@#vl#t)160sKfE^oiaFQu+dshe#cMBT +zR`&+&t?=8s|9+D2r=b>QT7x;oivH$M6*lRz1%sj;V?C~;Ykpy!RetN^u +zN0G$Yc5QUy5yn0(9$A81NG3%)m6bpq9eYN!T~$ORl@B_kPyh+#8pcKex)O!w=|Z +zBaZdwrT^pkH%xUrds;l^!pFj|a=zXgiT{Fpn0Vg2n*8!zLiV{cyxjeJ{Ff$zN&O=0 +z)m=?FvZWKIqqo7d*g0nsb=R9ky>(_*Z>^co`$CzQ7n>kEn*1}#{~0G@b!WZlXs$Ia +z&AquB4~w=DZ1wbd`Kh2+un|03|L(}uyd%sS94Hal@^VkJ^SNl;%xV_)r86{3t-U@g +zRf673u-9MAcLU$p+8O$r`L~f?8~B}S-RQ~MDEPP9Y5iTXIX8J3?I|(K(^or*%?;+2 +z^sT0Ib1?3rW$A{p>~uTs=Ot6lc-J+VwB)DFr)`-}+c;(C`-Ht^<#}czm)mq$zF#HR +zt;tR_i+dW(vb3(-xnWy=RMfaQ0EuXJN@}-(gx}LcOI{VM%Y9N +zVamdsqtK2qOzL+oSKgXMKD?Oe_s=7Ks7^^232QzOdu_Wnp4-=NI`krXP-DkhF!c@O +zw+A=k!k#5Zr-2_o{omfZdglS&M^-IXeUTa8HqqRgJfgiW=I}E7B^!|q +zosC`)sg0A?roB)0u@l0~f7o|vmv>(2P;{mzlY7th%9f6qMA(%9|o@KL6@GeRNPlyoAn)u68tXa +zyTQ)GlQXVAC#?UGr{i9Pw=_4NPQQb>wdcs3&XDF=?1I1Y`vTJXWG7%Z=zq@t{U?5p +zCC!sLZ%tPE#2v&)csza$b?7|YgtZxtxAP~F_9ST$Xm&QT7%@*_(+e{@pZ4B{uS}F! +zN%U63)ji0SUA +z;4_iWB-8rjNPOAQHU(plmvCMUGUjqgKO72I6Q +zT^hAr_%l&QSyJa(?S{vej7h}tTe3D@K0Yw%`^VNd^4&Fg>zm)`y=9H@KT>Z0x?bkl +zn@Zo3i0?l^`c|F^=Up;25#M!!^k;b{oPEje#`u4oApOTYdr9eQmc@T@g7mdK(^_!J +z)Ftu%I6?Y%c=n9aw|p)BBl^w2QdT1VeSQmf4)}S}_wd1hpCyap8~IPm51-%Ghqah> +z8v2X>ecV;3J^R`1_=K|$qB}h<#qO2wrto56%O%b7SupsW%RZJ5%wFcm=sg|}zO>Gp +zN40+XCu6p$KKWnQnvNdXroxow`R6-C*w1Js|GzNjC(VQ;{vU_ULGCieuS4-yrn4;j +zFYx-xr4Og&TYz4*u|l>F_-I!%uj_n2?p{0Ump#Nuz!T>uHP=+E^4cUkY!dZcLHz~c +z0+(1J%Ojp&@c!66%e;IgyF*x$>GWvX-BAi2RKh+i +zG)T$USAM7KtbG1$e|zYeK6rH9b$-&>GA=%rcV+Xc-v0X`_0&C+K8&FL7~h4a^XCod +z@e7Y!w$8>YaRfDJGrg +z_@W!IqhTrGUV|-N$20Eu4Ou*Re{7OZw;gLY9eNIaJC^o#>_R_{y`|=7NVj#sci8-P +z9kl5!kLK`D>LJp3-aLaoVH+O)XpPo&QCI6D@T^9}H98s$D&H15MQhT$_>LwU-|;9i +z{NDJED~NTFot5<0t2NM|LTz$hieAk;AFM63?=k_u64qg@TK}+T)LOuA$4ui+7;Fh= +zE_$eJ$)}+Q{v54(PiszLL34PzH_xH6 +z?7WgPB}>X9|9!Rbu2!#{!Q`6}j3xWDe;WK=f55#N^{u`o*t3;>klx70e7nd~imw{? +z&2>taLt`Rwa0J$M%Emc+Hp?yFyglA;m+H}+q4~a)XTm6J?x{?*vX7>+yICVhFG?3mFKQ1>I#7Kb0iG*; +zDIF?3>FLGtR6Y6-x~^sZPuDmTG9@o~G+qB)%m0VX#>dlxh#?$fZLa{o^5k>OJ}+;I +zyzm-)+@AgjcL5cfpQWAfe?+$NHSl!s4(86=!NpNQ|bV{^&j;*G1)zq0ogJ$$%i +z>zgUCgUn8A6QED5tiOxz&HmW)`@M2p^KNP#WpN&QY?5O-o0b{QQ_IChgHa#Kx!K9) +zsqBB`Uhn-UvpidVvm5`o^B^gdTHsnvUtV5P}R2Fn@fI@>q>-( +z_l_5pqVwM*wznx;8eZl)CK*%yv;4gAqO+oosj$z^Jo@ZR_7wJ3mT{)khsQZpW&6tU +z1^Wc=Zg%nGd!dlCVT>tkJcn}5;2o`*&)N5Ud|5a|o~G<&MZe^Go2z>+h%Js6Li1wt +z#C;{^-lSqT&jX{a1G8K8T{9w!)d= +zhMqK4L#j-bFq9hRFFxSvVA_9hm-=H~4X^P$ +zRrsXzMmO`syD7yx6q_rOb;vPeP0aHv;OVdT#?c=oTNlu$Xne4FW4Xpb?NrP-HsXiQ +zh;*`UE@sWqlpS+m^R&?J)_AYA)23ikb|nkUW%ge2rQDlyrH$i_+E~c&npMP7>~f3E +zHs+{!<^Z%-`|Z34eH!e(ipN{mv{|16=1$>EtpCxG#)O)QE6jY=m#sK!>S|~@k-RhM +zQ?UtWc3WAy>u`x#hVR64J-OVR9#a0jBXz|V<=1p@-$=33oTJ~#h1iviaSk}I4saIb$^~|7OHyQJ)F#9ZP +zFwtTg_@rYJJ+77Ow`0He+ZQ4KdBix{y-MCw-c}#iiJs+^dH6e?Z|hsk8%ke?-KE$G +zZynqnyVsZPSIJi(?8Z3{xhYG00==*N(gV`hHE}GP_FDEFUE5Q?e*SC`02$qU41-24CqidNN@1d_pUkd9JHP18=(0( +zXrQxuxLYJ!KA;P|^82G>AzN6!x3YzkTjus?ZT*NJ7ta`FS5U?$IWMi$EQANZC-A-Y +z;^W^w&d$|)^^bUCBwv6U-gAgOJQp2+K23sCC0XMykC@Kotmp451+bRRkuLZ+GAP+x +z;55043u)pz>U;t@D@D(I!>vFkeu{nLvf*8qP2s$!vf;@obBVnkZ1uip|H*C?-#op< +zYlHMdExPK})te3tHn%)kvh|J3T|WP5p7(Hz?$~_4&8x|${&}|K+p#r%IVqm&?44?S +z5|o}lch{2^^UIVE*-HbDw@rfePMmzfSr$6CQGQ<)TgPTseR_V@I3dQtmiT;g&y-1K +zE@{a`Y{;82onJ1!mmt2r+BCKrv-Ifmt9YK|`IY^iU(NFsJin^n^J{p%lIK_Vdwwm? +zTX}v>zvrLgc^l8K?f3jTp0DHir}{mw;dv*|uj}{x(>&kC^O}CoKg09wJpXjR=hyRm +z2hTs#@A(Zp@88b<_uZ_WME4s_v^9tWmp#3$Rr2TgPDqA3(Rl&3C+vl} +zuQ}{vRHQ@CqXRr^=$3%X$o-fU^&;`m|yIdIy2i +z9-ercnbyb}ESIa~Y>ANdE0Q0?B>X_6?;67s-9Lh3u5dz?EGogudj}!?|sy>=WFhnpE9f$oNzHXVLpc9`Pymi5Udf7;U_WdreSMY +zE3C~rvob5usc!eBU>;6o6~E&qvYE6Lel_foT-fV`uf!ob(#764w!IsFZsZ*LIL}qw +z!c?Bu`|CK(c_q%G>|XX~(ZlHGH)1dS!PCuPE2&Ae`3mxDJY+xZ&9j|KNt?-h^lfbN +z+Pv~qmgcFAemMspQNL%RCzl}S^U#x(_zE;-O$fajs?64zbf(_ihFvx@qdBhTp0X5u +zgqCydS>nHN+`nsGVnW`!L^f~|nv^mA>#-|VF7?hSl8qyMeg=GqPH)pWe)ZV-!5jcl!O#KJ3j^+H+n> +z`Pw^f)FCbZMJLncxl02b@m~x-Q3>y!(mQz&PE-y(w>zU +z+uj#D$ERy6<;{R*_|4(tGp$GTI_Bf^cI+a*ZR}}e8pwMWHmLTdWwUxdz~wz!2kE>M +zXIWYNE6BL^o^*Fz0Y17z@YR)%Oo4L+Hs1V10cR{Jwg#S9qPmXx_`DVKe0$!G3Cmd? +z><3XN_hol!4_mQmLHj&^p7Ng1p2w>~1Lk2iECR28JSskwt=raD)?QgO&kb>|5c}?# +zkl&AW4+>iuN&WKkN!YVwX=_6KD89TNoq8c-)WDj7^;KGXP>Qctz4FPep{%`KKLd-% +zSv*T?4c2Mx=YGcN|>48 +z*16bu_}ZQa9ocJWp2+@=^(*5XqCw!0V8xbZ)vTk{#_hz2R`q!Fd*)l{1=i7O3;9^% +zEuwET_>5{!6uO}(#jzDRivZNx7&UdDUE +zgS0l)9*g{JWjD)TkLMZb!EnS(s~j-V{W)jshgf%e`y(?_34FDK`nC6WvifKF^#^_U +z^GdJ&*R3u&xBYik=gLp%cw4=Te0nC|OW})~S9|ox@ceVw@Y3C1;#<6|c2*8J7oSCU +zM+0Ms4#PiqoIj6ybV;z57G2Ks+q1xLhv+#F|7y_yKRLeV)AvOg?bp0_E@MyJ_j4W1 +z`@f>?<6Jk+dG(vg%bfdY&-ejNRm<5|0;A&W{hhRJRw_E6N@uF8Ii?!jbIB34xAr#tZTOZhndU^NBsg1cP^7lX*=uCm|acO8D@^~6-E%?-pQ20S2N?>f$Vs^>h42F_|a^tdM%4}5(SXS^tm|NY}- +zs{8F(%O0)a-R*hftuYS9TVt*9*LVl})xrqW9?_NWBl5xIJc*vYT?>28AF$fScYNKa +z>EQ=t*W{R=7OqHd4L0TY_YTx>=>Aay!4hNV-?QM-Iy>p7=x~^Hxys&`zp$Q(@iaou? +zx2K!1r&qxzb2F!eH@gjB2_sEsSBQ7ekL1-kl2L5&M&6xE`*)_+o6V_Cvnpjm<;cp7 +zhl}M4AK2$+32ndeaO=PGjQa}pdt$SGm-G9Q!>!-exehz+?|74bZ}y(s->a|@-y!Y^#n~_cp`X1mh>%W?}9`x5&^5IDMYq9+N +zIunaCu((IBY?{tIDjP7@)m%Fo``y7tS`wb3v$49IR!<(I_K&d#e2#lOdXmfkzH)W-a#eQp|n$r$}24n?o6yKv3?~biOnb7brx@EyxUX=uAvc!cA2p(P3O17BvaaU4Y52IQm1gwRDq@AS +zFEy!6JUs>5;H!yJ{O3z(k9`h+S +z`_2$AUp@KM?;Zax{$x+p#(6o-FPC`f)uhWGKzQkC_yj0#-PirR;MR&KR+**n%dOlE +z=a_Q092?y!Do3a9jPZ=K7nVb=qGL4##wFG +z5f`5?&sP7DKc8RMg9mpW@_fC5wx|tii|U=EbJ7auFn(nzwQEx0ev^_oFxB_^rl0TmUwtq +ziBnQ(d>toWbo^zSOwln6N%UwtNq$o}()zE%Cwd2-^yasQljJ{I{^bVU=; +z{*&~#6ksp8XX?Ht!gO47J342-+juF@Ga#pm5T}j^; +z-29{QZ1^9PCv5IyJ(6KpF?cH{g{Bh*De}1!P +z*tCFmC4UkA8~nn8XLaVnlw``Wvg9^ij%>VdI0TQB&*S~$+6S+{-}?sMe&2L>`9$gU(BF=k@y58J-+ztw +zj^r`^z^3cX*MZ^_m(Nk&DvDGFW2^S-{gu2Q=uhd+{^<>*S3l+H*Au1JkS?24K7uDo +zpOn|W`o_Cbla@S;9eZQSv3j~JRp=DDA<3dsfc&YwtE^33!|!AEco{bJYHSzT&Jk-5 +z2kqZ+ueaXTJfSs}{DBpNpM3DWG5En6Ot{_*JJ^zk#zmU&eFMr_4nK&QWMTcMa>fl*w?>+ci@a$FX +z`G+@0i?OSP^Js0Zdh+d<_2kvMycpb%_GHH3gA4`+zIka6adKNqz+S)*Sl?*9{?qny +zKmA_XTw)f{e)YraueXo9KlW?CEjLhh!p8}`SknEmGj{szByAeB5SG9>zu4LD#i`CB +zPYHfow1>~h+}V-?dPRG!@iECi}i=t +zAG^zM<3qd;4$*t2Z&L~jfmUk+e3IYIcamooeb5-G4DD6Ow}CZo@72B^3Mf8OU4jr+kS&-VM0ZOh=b +z(3G}bkj8KI=osP4hn>AYR`1tYhCW}rnZ#D&w;N>{5FrTO;n91J-_XGzm@kJr#4odLc7Gr +z^{dLVGr04HxiINCtLW>_VZz-tKALmXN6k6Gd=vDIbBB|8Gu_WX$7KSZvAw)Jn*VA`}W+#SX)r78cY-zr*(+zE|s;w8!|q +zKRn27wcoYTNBCaI|A*{%ZS>oGpXby@rMn05Ej|5R-hY7afXB{~{kM42p$K;yNrq$t +zdDw*Ft-Sq;N!XO5pizW#vL-Pv$fsQG)*SMy-(6oMT3$mLC>&&YTyqc`sPtF-^ovLz +zM7sRXOZ?bDrN8K>4<{WOu@^8fNqkE(VjMT1yJ#Nh2kLL`ru~yBL$O0@|Bkz?eBkde +zKNYck$oB=&Sx@5e6Z?V)BV>;h3~s_&_D|O)Ov~CG*hyh0^3qE7GD}QX`d(sED)76l +zWxt_~v|7Lafp6ux;G?%Nmx>NEXp1oV>F}gzq`OQup5dj{n3tD3hL~pjuj|av`@}1? +z=AG1e#D7iXy%o$+t=v~0aXY6i4gJ!+C)DYl66uV8!fa)a@|W&;_zaE#%ZxftK%258 +zfYj#a_kzRL=^V|dTRxyXUN-a6czOG5)^Abw)3mdUeUnMlGnn=6x572-kw;#fNIy!= +z1^2IX9NIW3`LEp7^lQplL4Uon%3`1N%lc&d1FMcshj`gKh-I#4EQ9@o}lQ$SppgDtJdQ0TxW*0U+#}T +z>8!y!Qp4|re(bZ74yHaVeU+7)$D_-_H$@A~XWjY3S4~lDRU7#wXXir?orBRBo*w1A +zg06{%v!$Hr(Ngnra{RbRTXh3%4@UTHtiOYMBUl4Wux+}vM|Hk|jB5{-cP#(yu(ouJy^V5rQ7D4H +zjdbP*iv#HPW0BezhqxKq(#qavnei}m=e|gs^%7+{Ei1#J*v8z*7ujcS*8Qi`z=Re5 +zvqJgpI7Qv>)2>3sR{hsA=>+LOou@D_oF?wZ?VJRyN)2ppu1E(oQk>sV)7rTe8g1F@ +zS~`{2xzOqb{J$P^&w*ZJ22@&_ozwnWynN=I_?Y%*;|1mg{4E}Hle9gA4}vgv(Q=>@ +zi_(vbi%%^wma2q*O3d7}>#r$XaN&fxB1_xhk6p2aV6u{<2HIBmZ^YEn&U*F%Un`U3wEAIx%(pg2-wD(*m +z9aaAa-se_@oM|raF^>_`Li;-LS4Xx}@@3H)_6v*$nCy|#ja7E%F&e?DiQymvQ?3E`U7V2oj&v45= +z@BPCok;N$c1rs+mLemA2P?)=>p+)7`?&&5mB|>aKr+jA`p^M6a?ngRJOLo1PkgeD_ +zkG9Op@@bb3P-Nr%&G2hRx+_UPwg11K@|W&TOgo)@8Gfg-xd(d5-`vT$7(qDazEb~*J_F5kv95#ov>6TxE@~)wrk5P{Fz}{hx +z5)b)$&!mk@QWea4tJ7Idk2w?Z*^!stk}4-W8%gI&}dYovPk?AV}C_w)#wb1 +zIXzMAo@e?l?V7l;(Ax0b;P#K*;?+HovVLU!E#yzwg6vRz6U5vw9&pwC>(OTu_LE>y#m;WeOIx+@qbvOiY^Pt +z&*Wy?zJooXV(!FJp6kgYtitizI8uHS#8O;L{upJyUmV3fVZ~9rPMOEzC^Uw%8Pltf +z*Gl3j6%&CR;RmoQb`k!8YKz8m#}{RH=zKiyE`nlogw9GTu$bB#kJk|k)kKVk@~fY1 +zV}6b<)?0 +zMV4OWccztbmhM;yt*21l#Eq-rnVb6QnyE*1%{{&@{sP}C8B0$$O^HA=cx-{)!;?;` +z9OK4Ae%`NA2j!DDbd=YMd|vDNg4RJ*DV>`&jru=q+XHWd|I{MS8t23Q7_B6)*2L)7>0{=JVt0vvoyX~uN+gfPbiDgALgJk6o +zM=tHs`3#aV=}PoUYTzx2s)~)9q34sS(avYxMrT>H+?nELb4}Us9yeajNBjMfN9myg +z=O)+F)0;Es=gi6KRDCf!|Bk~(I+u5%smp!3sNddM4PIZGKJUrjNZK}Wqho1P&3y&2 +zIxl?z=?%Oa=q}B%lK-&}dg)V0-^h6rt{J+#jqxld_DS?D<}9xg<5W&O;2>UJUe-dH +zQt~h88;S4J9L~e2$}FbdY0&mb$_R9c>L2CT|K`7LI;1(&A(pR{KIOMVv<>_1c!qqz +z`Qrg5sV~4zTX;4*>2jehW6GU3^*U2Dobjv>iLE@ +zwinlnHplWNx0dw&(ND|L*9hs%ugxXSB5+2}&mjTMV%C?Xy3Mes@OPWadaQjW=M-t& +z-d-dclBhL;q%<`M=0D04%9d=1yUE@`~@r@Vue#W;kTgg}Nmm~gF +zUsTSQzU|djk9;M_Q)K6;(b#exJ`FaSl$|Ua|0YNH)g_0M56aJ>EM3T*F|T1K{?_gl +zj7$IK1i0+L|MJR@Q1)M#gNx05ygNFv4m(Qc<@}m46-|P;c+rF3eTs=suO}wK`pIl= +z9LgP)MLu1Oi6mbAoaaj`e|!9Q;=8dAG%x?&Vr-u76Q=pBZws`NU%uTzjJ$N?(|($@ +zQ%mm7Hj&41LhdL({(pXWlw0QLe#cs302iav-yjBXes)QCE_2r$<}NS(U%s@S&-pvx +z=C5>AGj~1orq}NZTkou9&JD^2n38lUeQ0&S)EDEksIgAK*M_{rLv!w<=fA8r8at;& +zT5sby@u819ytjzoA-?bR+s_@4%)6InyKV#9*yC_MzT-xm&e$E$b~bvYym-#sX{<+Q +z&@Rrauy;m;rjCtY$-J+7m1C3#4z!w2B8XpLj_7juFPff1IpRNI7@GGLi&w|o|FvIx +zZJ$EDXERTkD6EU$*{-kELSj`*$o&hhe{MLyX%uYn0|xADApa|exLANPYXDmLB2 +z5%O)7y|;QX!FN!;^wPj#bMVLCXYH1+GdFIdKD8}h-~Etx^eo_W$>B4;9IWh@CLhTk +z1v0`I+(|n2eQM>>v$3&Sq-)|yo`(>4XH3HC9M&{#yZRp8sx{tD<^}nl>YQx8InPFC +z)s1eQiEp%Gw{-?+E;q)~ya1Zdo!gKEhhowjEj4 +zSyQ6*5TDM!UAXB`3o`U|>e5{;!tu24z`7!Hfpqx6$&4dB*YT`z3Op=s&1$1v`OxBr2mX`9p(l|p~#-}@W_opuG&3@g>KZE}@ymM5J?h!A0 +zX&3XHJ(HhogKm=V0hT7j@xw#^;P)$7&&^>y_u&ffy+YnQ&EoHoMEmKHDZ_X#!dmwl +z?m?kOA5FaJnR_G%hx`ML^>{z3Zz534X +z6R)1?^W)pM9M8w%)q(#Xac>_VWp(ENpL>#F5}pi-m~O31LNJM_plvO-3ir$em;{kn +ztzQG!St>jY?bzgy}G4j2?$s%+b}v}-jySb{>0 +zt*sLXncw?!Kae4UZTI(jeSd%Cb!YDTJY45G*SXI1bgtul6Ab(K9)bSQxsw&xE0q)b +zZ0(&|>*9IcS=#%v_btIU!KilEE`0zv>(IkAzS*r6^btnBL{`O~IlF0_8Pta#&ps|5 +zb{%b`$xEX)B+twS$GVqr95!ynY)|E{(5kev#Hw57vdkkMUui+76Q~1T@ez_`F5-OTbfvA5idYgHBxBF;_XTY^8o0m~&xy0$BE$v1f%v +zyi&OHVJXUirJ)}z{@tCfP4unUXm5|Zj&cpq4m`Tsp&i!ICEhn|t;sOo^3LP&4=O*1zQE}iHE6;TE^X9KH2QaF@|#58&uBc +z+v?*+k3NN)jyq%{3GXz_Yan=oT?zkG+v-pCa@Xos%BoHnx``lvUdvNuB;$VenlobUgNkR$jr*i>X!7hkyr8ovINJ2u{}zJc<-4@&a!c(4BcjlTbDJ+hhW +z{}Mh_r#Poh|Nb-c-2VOgH=~;cjoZejk)_?c470Ic;s^8F+d~~6hW_of^3BFipfO2? +zZQ$Gm=hU4$RmTC>0{s8PK(^WV43OZ9+DZqdjK-*UgT^KBgQ1O?`X#!HR8w}>-Oy3=@@ +zlWQEFi!Sg3e%sIrV_wa8n;35s<0N)McQfs1Vth^DrYY_D@WSjZ*o=0C&E>?(Xs@YG +z;@?7Fizbgkce3rRHAl;TN11B&B<@Tmf8nfsejYE`O~2#qi)Fy4{Dp2TjJp=}{a?NB +z`F#JmN1w{?t9AR!0(Wc)a*lV-*^WQhwZFJLhkPO)j`#2_SD&AsbLWTf#_#4<%1mW# +z{inlICOCV%ug||mJh93pD5JR<&-`sQJ5IEk$4<1Eg(ueHLtf+DRr^-#5c-etjD8 +zX<#ki(H~P=dE&E6wemDPmlk^SKl}Z(VSBXE$~W@UJG4>Z(Z(=nAwe4h;Q43Mm%mJ% +zM!w&how$E%zgTJE>K4B1e5+{W_&I1q_e}XTa`*#ixPX(*0nQ=ru@_`S!KQ;BvSd`Sl@#UzxB2AmpM6}@`F{8d#yzK3!N?TvW6D!>^p3i7cPmHOymnpiy45c$NkY>oV5A(OGME!Wh55z}vR&Ip3CRQmAKw`tV0|}I$N8zKl}MMFrpBF}32@@xV_4$h#P#2n+1Fa(blCi?@nZ1W-kFYH +z+K`Sv2M$Mr!^xos?Mb0|c3I)B_^86iG^2buubuzOiJt7KUe2v#8?F3^a_rzE%gRsIlYM~a=d(TB +zVKv-r%!~-$8cF}_dnb0Txb|f7_TrPP(Yp%1{ne9SzU}W%{_~0|+IgU-E4%z5@*9;O +z%Pwy$KfZXX=A+1@pHFutrj|D(rcMck>{r2G7(5Gy!gaXq66kAL>^cvZArrE%YkSO@ +zV{&rE)JD5-9|rH>Mmf54_rp`#uO_1DXPejyK7xxq?MnQC`^);xvu6mr+o6#C8 +zuy&;6UpCglHulJr>UO{<)5tGcdtJ=ke*WKQdQ+Xue`&$9^`i=A)fHJfCv`Zs4LWG$ +z`#5W6x9-mSg4MFSl{tR~zP6RS-Ho{uI(7Z^27NRZ!v5s>>_w}2W|VUtOn#066QeBl +zas1V~XS4)AwfxgAO_!o$%_4tpNxZbMioCz2_Tuue6RUF%HoR8dyJ7Bb(;4o0R$Y3$ +zH8VL5o>`6D1^n2{OYsTKOoqZ8aek))Rz$y3Y3gl*FA3HFdC`@7O=sTatH?J;GJK;9 +z=Vhr&nN&UfK8OCcpL*b+X$WHqpubHI)V15>OpfFGspXF~(5!W$^^+^ZANzZEP27U~ +zg-(e5%RoCdje+HM{2lh67AH0qnI3sk`}o-TE>He<>S@m@WxtW%NBaxETR9WKo_uVJ +zyKkM{-%^Zhu*bQ#i#!a#|I55Ed(H=+leIm&G5hJdect_Dr*$6e_*cz#;kp>OK85b; +zf0G^lo8C9Ww*&0&Q)*hkD|cj#?udVq*o49GydwD0aP!5Lf?l=2IqN0#2OZ0;l}U)D>TI;l1axjvVCZiWSyl +zj*VHi6!{!|U*m87?3UHpSMe{KI2Fd +z;Zhq5D6f0Ai^03U-#B~*o=^v#+u%cGokx}tG=G#A{ZoXI71XsjAhAd=8KNzplbKZmTr;JGl)z72{v|{h?hmnV_dfglR^~$Q +z?_9C&XT$GUABXw`6W%^_#5 +zltb9HZ|DxNw_=mLb$skrbertRy_HrtGQ?_$U<=x+b0}!7+9x +z=RI4fCtki7zD>+j^B6CtUb^DK|90`w@|o=?2VfscX76q^=FRdo*~=OgBUWflMpbCp +zof{{%oA@}ziYY$Mj~9!CHrS)RI61|RNzPNulVvv8YQs6N%zhIt%#Y_`d)^ORz}%!b +z`#Fq3`v$r~qj2^^#^?W5jy>%=4Lr4Q?2o6`^X!V@W9E4>_Vy{!>Lp3h^~vn1o|U&l$McV5)?E~; +z>ckg%@$!}N%W~V^)EGbLwVgk@G5$LLhqPAat%|?O{{{Mg`KtJ@`M;3=CBJBm-4Srt +z*mONvV_y!K^gxwmjlD$KLHxfLSpD_&q66=V*bBhxudj9o=0C)CIWYIFuN~Ca`g%t2 +z?rw}zGfdj_|-!md@H?vR(Sm^ +z_xf4t^|QF&yt(}_Z+W4rf1w}I!h#%p{*#B#f6T$>d=H;r>W9y}fkF6e@Y>1W{a}2a +z2jiTaHtW1LXXdndyVvGt`?dKQug#ljGe5X0{!?V$K6+ghpXRkMK3~KCnxnXfgUKEa +zsyrM-Jsj8{fa`1Nr^8uG4>)$@A~VNsz~`Za`{kM@pC +zOSapFt|4EC@`V;yuQf|{y_CG6l1p2#hZP{JN@kUu5ypqH2RSaZvV%2QZX4vHkhQ|z +zhn!br^`;7}1NO8~XUrheO@S{JlM8ecGW=CmN7|TM&nce<3}@jbH(F8T`qIYd;5Vb; +zHPW-BV@W=jUX_PlC4P|?yuXBO)rnXXEIo>ny)A7J}y;TP;CL{ykp#vU8E{W4}cYm4NLgtnnt@`-9R|0Ew +zWka~SI&>GXmR46zn^-Ma3(Z}2bO(H}2E=im-y@mykC?l9qY#-7Xr_r+#uqvUOka}TkXA92PvlW+d` +z+}wl~_|O82qk%nEP7`&<%>MnQd{i!O24`{yYs^$ursNRotyz +zp3YXU910$v>$Gcjb=uV>4R-a_4R+0^L;v8!X^bk2)+j#v>S?oTG+sYW`+V~c+~pXt +zcN+V7#!*fDRd*nGsr^f1x979BIr}er)?%wna5hU<#!g3k(mS!ezi{`l{Wr>wKLMFk +zzKsq?evmCwG5=5f)-4kPC(@z+owCJdMdN?5-~7P1G?`0x!mViQF7md8t!PHE528iw +zdy!DR=GTE;W3WuULkD@l`+3SQw#Ep?B)OW>#ITij^_F7eie`RKUukFy+HBUHG+Jxg +zw=H7Rd5`|LFo}+t%r~!`=sb%a#W%{#M0YC3zcCT{c>-}V3!&9TthG1E5!{<(jW#JK +zNPcjxeFgkxhS{}BHh>W(y{pd6BfCm+LJ50m%o=Z7)rt+DLkxY#u69qqjD?nB)0pk- +z@3Lp)nWeVHdLDqif%VX;x&zGbh&A6CJ&v5K{aP{T$RusjYpWUCRO}gzrV3qF_cI=h +zC9*>tnOf%nxNoZbN1p9|h8eh$bEUDeX`Dd`G}@zWQ!U&tLy?z19&Uf{?~?8l2wx-!$ElYKJN{U;^k +zorwL*$v&CsD<>uA{UP>GC(qPL?xVi;_oyK +zQQH%|wy*Qr{-oFTc(3hiJeXY>_amN6W{{NZjxPo_*+vw%qw+=HcjIinetRVI_1o*$ +zSm)(v-9!6#@aB% +z9BA3;*`n{C;`&)`!A>xK$pi2iyOG?KJ@O@G7nNj63tq3^W5#w5#{P(1t;ZrJGZ2c# +zO=1o?Vn?yg$FzRi^SA70eJi$WjU~JH(bzrLxqEXleN@oC#;^RV10B1#@O3oyi0rLoH9-=)_!Y%ABjL +z?w7OXEsM_$(oQfO&krrO(OJmVJgfVo$YH?WNPedH%U-Nf>#DD=9tyvdtg)=eg>44# +z40g_BT;Fpz`#^6IG3E20E+OXQ`ksOx{o{$w6_&FHE@z(o7E6pqFK-UyN7Wn*^5)=S +z%IG}AbLHJ9>;;R{lF-JC1uSIj9 +zn1lIGztY_BbQ8MJ%bVwMkK8}dhVbS1);WWq*fxuDWB<#YzqwVek3H9)&DoUA<=*!y +zzVjOzXdxfGVy3jdAMHszZLMDLbbGREMN{%3>-^XV>y7A&;PX*(yS9fc(wF56C&X0} +z|3tmiBf(C40daH0IRV4r*pcBCQ`FB4;3Ti{=0$9O?zTLUvk=4^2nfUsit`$E^EqK~$bK@Mo +zyUc{wXYxbK?XRIrjE6=h1B=CYI#(=Py^WX}!7RB&wyz>+6P~iw&`wV$XT8P=b##$>G2&+7x_#o5l=DeVTP#Wc|wikyl>vNE*lCsMZnd +zj4~Rth3x6#dFST&Pgk`K0akm!#1nJPvzZH^W5Jw@-_8~J%|3qnA8$1`XxvxhyYyZL0h8k_t9^tB>b5-+pz?a#vNZ)8s2%a)Ma! +zJ(+9o3Qt{YR&QBD-sBo=RLTkPh*dK6#?YT*GdP3vIVYC!y;#es7n--8x)U3o$+Vt& +z0p9Q-d+n(s&D%~*S)D$0=juJDLe2Y5l{fD{b!T(OsTIwgr@q(Rb!tj-1osi;S##~J +z#6M+Dm9yWyu$gvJ1FUxYBI|I}^wMVU3(bFLRmDDR&5hAEdV79!m{k^~{mmCxbECtp +zWl{RsLO)vqR+W9B^+c5ZHq+l`3q6c}QuMo-_EYq|c>w+8(Qgs$0>@_4`$DRq_s$e} +zDo?O3bw|<~>Ht&nMQ{`g^~7!??&el#V=_1ZKTR{3bMUenJT-xvCgT2^Lo37h9alip +zQ@}$x@gDF9bM47Q@W)ZX<-n4i!nw8b)SsE7o1D49uMdwFf4-QQF8LL<+1pP(kt1Wi +z_Rg8|#ah0nop>mndsEEQ%q@y}DnPF(Mh;M1gkl}WvHy=pZfJDQw8X*|KKwlPnuv35 +za1>{GCbE_e#J=e0f1mHEd%83^*ZKd^9`bL(W1eU#x~;N1j%`&mtGlP_o?gt_DRW|h +zKTKK0U~8RQrVQQFh6hCwPHtP`&!gP8n>T3+cNZ-}&#~!CIdV%AI$xx7N4iHjkNWjq +zJhAREd=K8aIJm|phdSkFQQqx~e6j5Tr+vY>B&FD4ts8f2??2n7vop$rV6$g{pVi=| +z30yUSpC<6rQi~~6*qX5S!1g&t-m!nahb&vx1UrTlKK~pwq>8) +zsl8Ko)po8pz?lN>a6&$?%tM?xPDQqA&$gN(YDY4l`~>2|V=BY(z{sCjZ=K?^_+; +z{*!P0we&{KlC-x16i9z8PENeIL*F +zVUC~Hg;(d*bK%<$4xRmRTcqiK`2X}-hnzU_cdy%i@+GI7pJV3D*fTG={qN^n4SU@4 +zf??a>)Q@xK#F78`t}$pYAIH2X&a;;I&GD>n3`6fVsQ7j`iNa +zdLO!?t_E8{Y8-q)agUAUgj|aaDs6Ub9^=Va=-`dF(9d+>*hAS6@?hGJ6Qkb}uiWL7 +zv4{n3L}x$GdMo1O%9x_u1F91y7Wooq-xI9Ey*imssZO0&=V(N*TKMi;ygK`H>V&*H +z?M@xPpL^YYLM8E5uTDo!of94&*LeMO=6ox(#zqRQF_Cw?GWSph9}0U$*jazMzP(z$ +zRWtrcmf=j6>r0hPpd6jjarSueeifACZs47=5y= +zJm?^MhIqES4)*PJVHi)nXW?IYoQcx?)cBB_{*Zlk_a55Z#+*0u{LE+8XFmGJ*E1je +z=(EIvEo_<&Zj@U*22cCUe{;?U+oQ_mhsx|cGuN)Fu8Rk;jpv6Rw9h;5^-Rz#N3VM$ +zHfg0|1+bwN5?{l&;E@gde!|xM>_tbG#)}HKqPlg(@HuXN$;-*+<6UP~zT)A2F1QCL +znPt~*KY5;Y7~4}FzSit+;ZNh!ycgwdh^(=KHK*k!%1)!+3yc-qwLt^;`ov#6IT{>U +z;zRm@r2Vlyp8 +z?grLkZ`1jVLwzY9`*deM&g?Jh^*7ra)7J6ZPY$(qdHuca^miWpjWuH(9G3<=s`3p?krdogN$RsJ6%faFTe=hpaC~!sMLNeV6cu4~!$;=k1G2thv>q +z8}6-+%nQC4`50r8esMJWtV27Rj|BGK1^6j0@L<!HF_tl&_wmJA6 +z*_+jtU*9rc=nkB2V`2uL#rcR!nzzzM7&`7`e7CS}ZYHOeVumHJ7xTV@_eDJS^DN-G +zkEh|OxophYyFW)eK3p10CL2iY&Az^yyQP_v*P6uJMaR-L9XiP2>0#>rfbaC>@I0+$ +z?g&K2(^?F-?0dysKbdQ`pS+NAz;e2r&cylUp7+Y_qnyqc0qa@IJ>!*YrQ9jx!E{bJ +z-Jk2X_d~B-f^zRrj`a?`U6I=6;9x`BZ2IumKt)chW-aAK{~?F|uV_=8kz`WMbv{qw +z;h%U47y7?HK8mRSMZWi!Co&)JlP8e3oZMBqJHfCYF*j|JPj55fUD@oTr=q+MkxQKX +z3z?$ZlrLW~G?zC?PP`bOgyh8h;6d9uG7(=`iCtnYJAci84%p(1c_L#z#+@be&9UTgGc{xKU(bxgAA)}YT#arN +z{bsW|-xwv&XCS(mJKQgT{~pUONnk50m+mikCgD>&J50~n$B}#AM#eTK;kHAYep~WK +z7|uf4jt=~O`4rjxv@9dum7g<)wI6fGFqAQHj3q-U`)s}kg9*M*vbp~=tvH*& +z?$N{na#j}qoy9o@)t3w@8(tSOb`fW-MsXCx1aykcP^#s9Z4 +z5{gtC^J&fi=pMXklAlDXjQJ=&tuXTvNtCRx;h6_wy1&DikM+Hu()a#@WYJo0{shNS +z@KzMei}qwkKL2^gmUC!hz&r^Y|3?3#oH3V%D&m55b`YJ(8F$Q{&bad!r=g6-uX_(Q +zrrfeVjySi`o^NJ#?}qj@KFbuIhybfG!#69J6uzX>{aoYVv&)fXc;C&rkVN3fZE@`n +z0dPnT3}@}MpgW8+k8Qrn8W)KpJKD}Un}wSPc;|L_*Ub0kqN`m#V$6l9N{5#WcleoP +zaOJdk`X?@5q<-^w&P;S%MSMT?#CI$+CQ);zT|Lme>CBhTg(^SNzw(q^t^fP;owd|g +zJ-`p!5f +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 +zao0I~`^mjtKRoO5~)IC`1% +zDmT8$#iREAeHXa$M1{#qbwOXqM@>4bQ^+|Y(U$URTxCs-NMDl-Hq06p`I1Lt#Ajqq +zkt1jgZ7gPA9m>2}#6jet!=WEHTFb-nfxMHPBe*KaE8(oc9AC!`)NKLYF~o~${*h^# +zO3=#$_v_%R;I)Z8-^_PqngH_5KjRO}H?55YrqPjUbnaO>wsv`Wnc4Q`8Y2pUmKD!7Vsqj+te9N{&d3K4_LHvK%wvUG5;gD^+v9@mgUh?3L +zs;ncAQwM?O$cLd()Ct&O%0{T4T{JRd3J1i)$h?xDRaf$V0sZ^^7|QkkF8!u;nB?8< +z$h(_>_3O^PXUr$M&V8&`be*H++-IlwqMP`=o0!AJ_9)^Hi#d~O5pS^+Sc)B4cRAnf +zRDr2WS?Fka>=Dvw!u{+c0S`C6eo{gI1y0-dCHJA1NC%OgCH<-x{Y1Km?qPTBT{E`~ +zw4%21J1fugWtEewt@LG?sy9Z*%YdbfJt~X6rIwf!@(uNrK_8LA#l%HMI2*l`{kCOi +z3IFTtb1n66qMa)E`ltDu#C+zHNA+f&n#Tt67#Z^r<9RCO@448MHghI@^ZiAC(O%)i +z7gfD+1^S@QH@fHf(!_lD{qDziuKuh<4LW@U9krhI$i@bLGA^$e~-+b7|M7A-C?nA-Yqw;{w4` +z0^RgvKi?x5G8^Y)3Z95&qGnW;F)lo6SFjp#3}G|Lp+~o^WwbTkS?e{9T~znqoy%_L +zpZn59-IW6jPqNrhWRl37w%ojm3dy&9kp_{7j4U +z36`53cwBl=J8pmOT&4$!@4Gf__3O9g<5ExUAG!O9@VkI|^WoF}_}6}0_kIhX53q*6 +z&=h~7gtM2fO__OUGG=F!Y)IrhX^MDj8kqrJ^EGF^OLjmvP8J?5Cr5+MU%0WXqe4$2 +zm*@`fh1}b9$cag=WiQa)-00MI$5o45p;(H}f!j|GckUU%{_og5#fP*$e(%)v*VH!3 +z4K!w-XuT8p$KUI9Z>@6H`Q_G7?!%6(D`Oia+eZU`&kEb;C{~A24q1<1Crv}Oe!IN)$GsqyNr|oX5 +znD_6u`8HdQouk0hgHL(ut3S1vl6Oq5HX0qQHSn0aylaY<3T4!fBz +z`>34rJv5T`2GDlt`{W-pVBGB7@}lpx1>}RHUA0&8Bz~x#5_~rYVzGIb#)p_XPsUi3 +z3B%`27d(IE;<)zPeA*wuyS$@!vVMo{$P3N3!v%}#)V_G2p`FYVa~>I(|JIxqGjKL# +zo(W1O?V6Y=S&0ps`WEz}^4jOM$Ln3VV4~B8HeGMp@t-jbxk;h!Q +z&&QF*vnS+^CmULy2{NwO%E`oZ&$TaQELLV|#%BNO+waPvl2`inyRs-gwe&D+RJ1p= +zC=&~giWX82UEn1vGchx4<)t;6EAc5Sw1K_rD#7c(CjM|ad7|Q*B99ggSXHkv3%;K+ +zwvu2;R5o*!8ABP{DRcMfGQx>rTs~fi33bZ$JW=o9?p*98$=$cbN +z4vX4Nk#*YN27<$T0<-J$P2!Ck0#oZayZ^=@#uhYn2g0VN-sMX(*ZKYi@srHgxX;du +z9UM5IV@{IxzYvJhM%^1z12wc!_XhZ>>&nhLpf#^Hq*K!Gy4F8Coyp4`-$KSW+wql$X)Ex? +z#P}G-MEo`KEB=yTDY*n}*7GdnS7beYi)JlT5{>SjNRCkMTj6)53GYp)-=n3hlPKrQ +zW+RJ^a$x8i!}W~eu}21PVhs*>s6J_?)>}i@M+B!|#(|wV8%6yt@}7t$^EX8vd5HDO +z_=5rM>*>{0Nk8Y +zvDIG@{l(~iFueC6t?!|WA}(L>+l@Rj2!51g4%FxKIXHIKf564BNvwxXUnhj@ou@=g +zb2*2d&EAn2Y<4sTLQjC7H)5lLvu)h<(AS;lz;*4ik7{iX#?Bap?n=|su|>q7-9^mt +z9C*V`t$D)h#ECr-kA8gI33lQ42)e$DGZ%KPlK{HSTfjL`d}`>dGjN_uAO8B%dg1&_ +z%wH#d8I5n7wcU~32E!}5kmH7fXYmZ5Uj*QdgYu8f5#I=Ud?SzN;QX#Rg97V$S9gFM +z%h0c6nwe+tj#kbj-0Ja;LGX@R`Vy}d|Dc}3Kk|4E%I}ynFtDip_kSY~ap>Q;@+Wy! +zJb&!<$eooQj(fssnN2)Xa?M`uLiO?NKLu}` +zHtN807@3GZ+lYg9;6=XMfqb`v_!ahmiJbG?vDpB_8sMA{%z{UE$siMN8OK==!HDjK +z+>FdePJ{8Djk`1J>tuZ}QU{rQLQ_jW+snp&Fbcj_>Pwz40){ZK2ww%K?JpCEdr%G} +z>7>NSJXn$xE`?(s-@>c#>EoMoZYRLMhu4zRc&)%6vt^Mh!+wlDeP4JHu@V0?%*CDH +zDgM6%PXW26Z}Z@JqW4UAZpwkDk#8N~NB8__Y(8#Wy!^qjakw;uKbtZBv)5*Azc#P) +z+Vp8dPmQjjX%GA>qcY$ga_L#^a=g`RqLj=qi@|f^Z$PdUg7dr3tf7AqUW!N_viiK +zZJ@5`L-@(1gLl2Q<9z4+>a*$B&itRHzF^zx)i3x9^*c|x^IP0+e*O8>+-ZJ&Ua0w$ +zoyea{&VsXEAM@60-+ZQtq5H>#i=Som@z>7hs($#1Q&;@20{F%Ohj<|J2=ujMhtCVy +zM^fT>;(?z5Hu_4z!{B=}p`l9tW)jEe^1d{86#mSE>)46Ep7+hofy-Zm!hb7mloVPu +z+6x2are+TIhkVYOpPx68{d(pW$@(RQW$dSq_H-qe5r-7DExudT<#AUZ%m4mm18eGw +zrqsprR?LeR-DPTOLwV8KP#`K^U572A?Lilh*U^_~!Qb7Mm4{!*sN&_ +zo2_jXW}o(oo?D=*d>sC&sj;WF@o$>28IcsFY)$g_Z7A^{$y~;g*I>3a9bFTcp +zU{|am-SMg-RC(BUxZ)h2HI5{xpkfK^Iq#m{W0f`?N>3Z +z!oAv_|0q5xYoxE{Zji{NVavk7#5aoP$WY1Z{{oQ%M^KlQJXQ=;9 +zj=X0({fuh@_l#$L6S!{z_f6ow30xEF*wtj?zX8YV!0|e8ybc_%1IO#Y@j7t)C^&vp +z@m0l5im!?$za5Ik7Kcjh)uDs9_stEu_tlrfG~V&R;NrKJ`PCSE$)EBz9Sv#ot)_82~vK; +z2`8+=Qsmahkb|_gkROmuE$Nq5iQR%MFy5M(y2Hc$c<0WGyOL3SPzm~MC3m_N9A)c{ +zCQ}rv%9V|5?~V(NNwU%M*ZcPO@zgCv`Bc3!;*=)B3-Yil%*J*e4WR;}kL22t{1`6T +zd4$Ijlkdb7Egl_?lf$iDeI&?1@J#mPdAYdp@w4a8!XtWZ%U3ybB0OpAmu!C6CsX;ccZ$0+Cfq8U&7X5<%kMu<8=CKu +zps7*cgB(93cv+(Jzg@BKdiV`{eNo2g$6sH5KO@W{{1V*j>-0Cf^-tbQW1xp4TU~VmpFQ!~6H@jI?i@6l>c#^4*aQ9Y +z{={MQq{G=qdp{kho0cgl$rO}6e8Ogb$P2~e4+rY2WX~;NFRrsjW|rc}D8XN9hSyJ) +zO=)q^vPU7q7or>02j7a#CT61a=oH7!hEAE@TVVeR1M--g+2h>|Gj%;%sl>@0Z|H^NVjMCL0R)CT`KCC)s<% +z!~C*--T|$rAH3GLo;v^N(swcMMQ5Uc`h<(Sy?oRB=F)F}y7K!w8~u(pE)K8%)V$}l +z_B7uMXj6Ap%{~Wy^T30p@pybscg2?WjSqUtW4+kK+V=59pQhA)G3^T%TC4LjHn9Nm +z1$Rgfa`>hE1I73o93m=HzVlcbAtsyyF|}FH>B6O{Jf8e~?`LCN%WH +zZ7T*!vDIp0ANyb2YhwoWHUED80^nv}S=iLaH?DW^p)>M@+;t1zZGFX|gZIBba+dX$ +zc?bM}8{w#;-x(0acL-0ykMK0!EbK4x<{r@ezpYq`SSPs0BPkeX>odw?EeHFH6Lkp4{)vo4OG0}=c`blpe%@xsJf#-wU#=h+4)p{$o +z(v#O8lN>Q2Q)|t9 +zQte1i9`EeOy65v)?5R_IwD&M&{|-Eg*TElmrtu}%=CQ`{#EDzvw8jVDnn%AS4~K8y +zinUZ#c{pBjaaC1x3Qse;YOtyFR>^X^{Kx901-b)YjouaTq2 +z@2kM;qk^`Thg0vhPW~ll+;4gE$49R1lRq+VlHbN#Fa7l#;X^bg{n6bs+`W%@A?~T} +zg1;zUsxk=;q{ex3E%~UGHiduq-=5NNT{X5Gf +zt);%`#U_3 +zorS6AtV<-Mn5Hw%ES<=0N45!#)0o<%^m@TCEL0l3FZd2~>VDJsI*%axgvn>-1_sejq;+M;+3wxpnX?+$~vD$p~JP5@%4oM^%w9h?eTN9(|-*jM>ujAvRKN5 +zC*nUNhSZFThn@SQCa^y6V<5ZL_PD&3|5*pFY*s +z@zf6l!!>z9yT*bZWb+U$09U)K5B~!;7JTK{V*b`O=dAxX{<`)Z|L)(orq%ue+IQ@d +z+pI>>XMg<9@V*Z}$M^BhckE@`0@M#@+7n2C+TV9*`$_rN +z3(Q+j{feh}MA#h<_j6nhZ4GYyublU4Pxc4@o8R8oz4j8cw>xLA@aegM_bMyhv5Ps- +zzNa<6*3${Juf-{IE`CzMH|eu#L%LtCOrv(#6Whj{3Ei4Y_C)8rs^mq@p?rwi=cge< +z%6=r<(l+?cfwae4%)%%49(2zmtNn54`ZjjWyOQqr6yLBnIeYfn=C7{)g7?0bwr}A5 +z!+dw+1Ks(V>(NR{KbsQqP>#)Go8zyzI~iba!#t&MpHVZHBc|88#X@hspy}jyVKX&Kgo(>>+ +zXf5Bh<_eI9^j&(IE6*rr@5mGNUM~H6C`Y^SZ&&t{eCUr^dAI6>OPl-;UaONuwAWv^+?vBvL?3M)91j0~9sNM}8hP`o +zb;JK>=#tVSbMu5qK9+7xEb11~yY$K#feESA9u6J*5A9xoK4eX@tI;dit33V5n%TC; +z!ZvG7IAL48ThdnVQ=+>W-ZFQ#-{~(u6!BLas?Ye-=t49Hc3&SX2hylZ#D#6ts4&Rn98Avz~FVfgQY;g;M}}Ho;*6utH@oAyhrZvz{xqFA +zSG_-QeogtE-8-A!ug`h%fD`jw>#bqo!T%FJi)mB7JmqVsJL%f(+;RPpalPy8dm4-O +zJdHW_`v1XA7U*$*&jFKn@=@jPnf}XaFVQLpOdZbc5qW- +z#n8zH$X(aqy{W_x=n_a5tScJSrMM&>lY +z^EIAJcoIw49%mftYm{{`QfgfZekLTB1?%lS$e?j>IvbsV_{jG8l$+1E!9%hu8%<`i +zb9k0ygcsUK)q)p&2S>@p!P)kIa3(6jZ?)IJyTMkyU1)vLzEOAz-e8Mfk{6a%)dyFS +z?>*cuno>?vAE*8}2Lu00!_KQZ&pJ*%$kooBRSDX&g1aJ@QZJkRVrDV(HPH&UM`$C@ +zdJZ}8@q{spIkSGCJRkY=O7dyvbMEL;t2EM+-O$pLUBZ#f#}lWri}~BY|4UkW`Q6L! +zUViuTy9{`j%}b#7A53Jk8~8iWlFdHe(ny_A@CW0tg(TGQ-qa+7mb +z@^RA0;j=B^Z2yboE1#I&2k#%sSgLu>U>s5AJjT3DLH5R0-d@MM0nByK+Q~c~WFD6? +zkB6AQIj85bCws`7!-LGt1H0AK9{xrGZ72<`kiN4Z1F|9e&Sm!u% +z=Z?XJUv0l1{!6W0-Wt>xv<5W>twD`JYfxj*8q9^i{~G-3;NQ%7Wb)Xx{n|O}?82#h +zZ9cAtp2qe6|FC`)7)3*(1<{M(#$FBG>}-3|8OKbAJ|?qH)<8R=75%R<$VV!kDE_B+ +zzoNYV{r~Vya;jwH!{oH`_gVj`{kHX&+Hcn+*C6{8AwyhNY1b5Z`>OU?YqVWmY1P1c +z7UF|(We3R>GuRjFh@H&OtBN$BUk$d(q65IMpD%bmHl!n-4qQba*fy(Y^PPIomGo9O +z_qxjc)+={0<*?f)i_GlRoWD$RCZfrh+1P_0Z(@(x5||W@r?h|Z{5bmMJ@B;#_^2xf +zA7dT8{T=0{t`ELRJ`~v#-tI0S=bmzQWU_Ck&Zj)>pfk!Yt=z_aXWUzUvHj%lvm-ed +z_j|9Mnr^kBw%m4JI^E9i;f>d0`xd_vybWH?C&h7GjZZtw+0pa!rbb`h;mS$ilW{2S +zZDvyy{ea6R$=kX7cfKbNS@Xj2>HWr~F=-qcU+&oaagmcdjX#jB8xZxbm4ZjjJd7cI$T;*SY4a>%UHqi*{;g +z#~s%z^rJo$_vgc@eg<0)MRdp1-5#u4sV`j4W{#~;sr^t+Uk(nT4VK&9Q>Xn;d+pa!M{Dzk9z4(xvgX3oan_F7S9>;jHbsYm%kQh0dg7^k!A{P*{|7m`48y;A@fpkB(A!;@ +zcQw3gW?LBkWm#8~EB%i#&J$o$d#$Z0SXFbQryEtEN7SHSNM@?EHcVf5>CT13x +z^ES&K+G?gNW-EP(?zAYvPI{z-oKPi^O6$d#_+IY4$4i2h(C;k9dUVT7cwIhr_!;Ky +zEeYrD%a^(D^4_*a?xbAHJ(!co$*_RCIwPSk*?~L5@%LD74Q6_BG5PVaKarPfENfbG +zc^>vX;z8k;U+Z=G%CVQkFVAD$KX674w_oy}cMeWko%={#Iq+TJKQpFsLep*N*x(0# +zv=Dyu81~v7=x47rZ8g8bh9iH#=kZ}&-_!bZpb;ZYy5;GTWL;i3lE7BIj^C0G6nBI0 +zgWDY&EO`{&{3?}=amMJ=HUGma&r8`3Y?ZAr#I*3z!aLz57bpM8JqW@qcAhm*mt$ +z;J|nCt)Yh?zY!t7pL+myEYq1>0OKWyVd)>)%(58`skTr#H=q)|BH)`Hkk&kJ=h&-59Zuqxqd$44&?DVn?51 +zzTYY@Aa9xOOyr(o6>S&AZA!XszUK +zfHzn}-{p>4)jb|7<6f_O@|x|zUVW7r@3f)4_rYW+xC-4M3qHm=bnN%*-h24nw%%vl +zehqcBk2Fw@HQ9U%Fx>3;4aBD($QB^uyzSXBfB92ChuZ_$j_)Xc>Dbg~u#44#zo8Gg +z?TH@qxQ`e)AA4Imvnk(HmEDzyZ>8>}>X!Jj;k&C^o?Z<7x^(Tga|!L7TGiJEZ8Cmx +zKvGX@gLTsCuaEJ>i~YiZ`QGFs=tRT$Kd?N_Ie)u7FSxThhz?~P3CHumyYlWfYQ0cK +z{2*|oE}lV0mmO8_PaxO%G(Dd(jm+_%c&D*TzPsm_XP58x{ABw{#agOd7dbP2*xMH; +z?8tw7*ZQt_vLu=IWI)M(%G)Qqie$hWu_;OZldVNEAasjNX79v5=iCo+Av}xwR}&v$ +zT=*cGl%v;NKM~(G_pA>&pzn2!Pf2*)0eq(57 +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 +z*BQRr{%aEJW89akjJVpWM2ZQdg9F*Xy;*; +zcG#yAzc)};_Jv{@;_0{_-a=f~^?k)p>6_l%R{;jT<|9sA;GsiBHR&4VYk()vKbk+; +z-#u%MnbP3S8Mlu!shd8)n@V`IBoeUhvVGq8_P~lfKXx?b)eie4#OjW;Bg7ZR|A?4M +z#6mX~^qZvpHpN=}?|$5+>-UqvH}@hpm2&b%3un)HHPk%!wa~7)yUb0Mse)Z|mAA^A +zJlM7ZAF`w51U05#eSsN6ZVr5R>enavnOna@9u?Yr99!UVzb(oC)zm+kc)0%0Z%5zt +z=eO5PdtecA1LsG}XU?yhGB9*;ypKseeK&a^RnDbjQOpX4*=KR+Kn`@?)TP6(Z)W)1 +zxa^dXCiPRjYsiyZ5d4ts*Acbu;Y{hD5((lyQPw|{Cd`DL| +zH;V6)-|Sj9-w*P_@8dbg=EnSF-xN5uoG(Xy>_qs5TXN&76vx%M=!1#ojm6pKjk`Ig +zp?7vYu6%GSUUFqv^G~wKUI%+ZgR?7W&lE&UeVw(UuJhhRY!>E1l=WvMXEC%ksV%pC +z)!)2v4)-0r3~VBro?)zNzYg8E+I%7FCioFyJp8$_ll-9{VU8=$c|Y1!y?=xsD!=fu +zXtpbV#gF|B?tE4s590H>bNLb{$0mD3=*{uiL2kaQ2zYj_izC1bFKl+(;eYy2maeCs +zuIFt0`KP)ShyCS__wHZK<2_gJyW^p}1)SqdVOKc011x8J4#I=3rEmbi@Ds +z-#L>1eH?zXUa)V0Ja!!1cxCHny6{%|^C!IL%j2Ia6&SDy~opwY4cbzEqN}YjC?imQR@-ya__2Z6K9VTk5x`}jYEbQIdi5%woq#J +zIjy@qo8Tvp5m$2R=-$5Ug=VrN8ajEPSyE!iS~{Tt3XBEq<@%d9C6x`TQ8} +z@uQS7T63KK^Zy4OU-^ChxQdQuWL)Fh&sn(65E^sXi9&C>Ny6cA4(;2J}MdY-JlDDP`-%K&^ +ze&)?|G5MCNhT6&a`H`ssa^V{@xxUO)WCogF+!f<0?!?dx`7nEQEmNqr#)YN7)smr}mLm|rxg +ze$@xA2{{%vqqX;>@V>;m@Lm6RrSqNKQ`+U$?Q(GA+X~DX*&=*w&f7n( +z{dshLgM1swgLJd+qm8C*?h1WeIZk{XWP|(A{E;5Y_W|zRJG;D{Jr~8yl-Hscc4Yj% +z%P*VzMf?n!6*@ +zYF~7?^Y~@X^^LaGeyl8#jGKrfC%w!l#$w82K7IcDC^T24i>;U)FCzz&As3UGgY1-o +zi-^^WM?WNv@^g59@7~Gf7khnh=}$QHYtPey{;FLO?l<~l;%AgSa^Dhcgtu?0GabH8 +zkv`e~i0lSa9>B&fFzdNzso1{Ild*otSA_rDb0zgR+%Td2Q#UA&%>rcX9zjCy)Tsb529tnh4*oXpsGTv^*nPi^Y!@9`59acyWfqi!sv)d!w=avgTmHo_R@vLb_9|npYJr(3r +zd5EIVBJbfL{3aer9x9V1J?A+0u_$j!uq>LqXbfiykP~9(^^u+d?iUK#sc?{S>b!SB +ze%h8ZPDPazi!*V?$UOeI{KO8w|#eB+rEBH=C!|^eex6S +z|G_Ra6uLCL=N^Wx{l77f2B-fkJNw^V``z{b7hT#;QwRM&ZrfAx+CJR>y!I=|6L6ya +zZ|*`v;R(_(Dvt)I{||Nczq|Ik>;L91ZKtW@MEc)5ukFMA=UvHW-TnT2y#(8RR-yE}JWTk+t}M>=^cwtDsSFg?-luKo7=2j8m$RNn@E +zcjh8^OILq%((}tadhR>Q`wRW|nag_LkEy6n;k@^!ALadV-us3;%=vzRi{o;!t%|_9Y}e#RY-pe=r1_9%$$NVA~(S9xzv=xNk94V9v?vE;`i_HdoXI_`Qd@rw;q1F3A5q +z`7GeG7oY6Krh1!m_&x@iJ7;x(&p=*#tb0q{HcMEau2`Mlt}j2>TC_P0oAs%zE3Y?G +z?}8NgeA-@+3h)`^GstHFp9OrfUz`fjelObVVU{l?H$UwxSbCEA?rK+lv5$Jj>F>>} +zCCmBkO5R>rv8nAObIwwob(Q_s$J_(`W0qpaxN<~&ZaqVtdQ^uMEU_(Xh+TpoRLmT~ +zPN2UFRzo}db?;{bx6t0(tjf+<6HNyyVzhq+HuX6T32Zz+E~)ls&^|;JWzY?s`N-as +zP0yZ+@{=^5gf4--Yvqap^ywN8*e2y6`X7j)J~k)+zB%hkC^aaCi8MCI97|waZyg +zwQ&C;=T1+u6+b@5DkG1CY|8_QCG1y3y&PRtp+0so=k*mEV?P88XCwwrHuGulQg7xK +zZIwOh&q3Lx>a*WZe_z$_FXxM^&21)0&KGiTOvvgki3s){zt`v6u6_={5WbEf*Ll8t +zjJuyPA%9}8f1MQT8llO(?N% +z2BTpy5AbjC57>VsuGDbLC&E)rWXn8jJh;)DTat>InF1lv8k=+&=I7&_+-1zN?*mF@cs4w66fA#&S^ut-l-t&zka0q +zP7&`^5T~EVAD@qL#=Lc&S&7g2=Hn3)+3Lq?-L>eJTm;P04C4F_#@+D|Bel__Ti1^J +zz!qRX>pXGaP_Z2_bzAEkdwSQm>YcokZr-v>;fXH;-HkuIuUVg$7kv3rwK>aav*Rka +ztqR(b4>r$wv1Ni;1ixNftFsCLb8pq<@T#ouYl)~CRwgW?o9i^1e1OBK)v0|Mjh%dsnr)r?;WNJO%6C`U=Il3jot>C`|E*>FZE%qv +zRJOMjyW_p!-V>MYmJ#kd7xT_vD%&@D_Y54o=Wj3DlRep9N?ZS1W&1bWv*+70TE7-9 +zXMIP18)9CC<_p+cojM#{bwWD4f}BzP(BqQxc}{+ub5k3RqQ~d{g?juSkoC*Z;|ufj +zc=ZYD@!p=SFI{$QS+B^`z{A*^`YQDcOeZF>*JAc}1 +zu^qbTbLn@mMBm!*KJ|I#DEj=aE8Vu1)0Sj@VV*w!?s4?_zn*|Tul*bA^Dm#EJ_omb +zRDFKBC-ai`>Kd^0{+_?qYVI5N<8H=TZ&S6Gc>a&p(3zC)=h>!uKY5Jzo%`0kI!5Q! +zQIuDQKlglpE}K4*p6&JTrRN*o9+2qSLHT@oHXP&qe0rAV)lr>SM^}30@oYWztn`3v +zwQ|;aKR>P3JK?pI6A)S&eVb0U+!j-@jW~1p5ZPiw?Q-RAkS`)T&X0Xh)O+y9&n>S0 +zPzN^o-frzw*(uWw`vs#@^UM=z6Iq4-H8neh^J_8Amj|sVn3r#1tIu5;3@^bCt-$sv +zPEFx#o3Ogwm3bFi;6>;PtQnfT2OHYDerQrQO=W0TqPJBUGv=qMMBhJfcKwFrm(W+` +z?1B86{6MAt--Ln_;~|)5nK>!ZUJxp`EvMcgHv2Nz +zFE==MBQG5qP4*%_e=hc;WzEIc+Z8t^y3`79j-O1w64pHUQBoak9_ExU37zZkWiIXQ +zcFqF0^;;%)L>pjaGxWutNm~|Ygt-f+;Y`z<>A*LT517k6l`Up`6}Jez^6lgrvumQp +z*5Avx8+~F;jFl_bi}n}Vi0edcyIj25z+OZ1nx$FEQ@|>=tME^8YjABgr`Pe`)!5QD +zV>VMfG8d$bNx_5fgO4`O7?$?k!*~qACX`?BAbTWtCOF5F30T+KvP;2W#eR}o^|Zb> +z@?A8GPMwda3=Oq^22D|GZ(_}WT@x#L9u3FK!Nz7pFZMF@-r~?(480n^<~4J(8=zO? +zD4Lg8>>*mEw#HQbG3IIXbYRIC_OEWIKJB~1&lcr!C^XYK^Bk`s9+HZZ<6C!iSFJfa +zDgQTVw($E|DamEI6`A@o{?6eY?pWR&wQh>VIHN(V2pKvfB|oG3ns{1eWAKbIW?%P= +zS?X(3E6vWPEFGHp%;5!bhFms{W`C!{%r3 +zp9Z(74_8x=EMY^ +zbwIxr8pfU26WHVbbc-|h&1cpIc=n6jQ^;1$TJ539=GJ*<&U-kylkiO&`aa^WS^Spf +zd;0fxxY*AhaDLS?cW1*^20!3+_6D2#e>e9OytocoS(+7Hn){kNq0nyInfoE-pIFq? +zW8X{M5B@6qSQ%js+BFZwuX&8;LbEHax-9bx-aV)FB=hF*L6nP{ZSL4H-?GThM08&% +z?P^~!=#-xe=BvVflV_Z_NwH_-&|#5_Mr~^xw7;SAW=ldra=R^RvaD^)S1abv*8*f> +zlJyK@HLN-o8j*a_sf+y}uwPfPcc{E8ig{cdb9rJIo9(x6YAYuuB3&e%q#U>6yZZm1 +zoKx|2y4I@|l%38Vu(K9;>)mZ$&Jf4`noMIp)@7=zHBS +zEWS#vpF_^2=iA_QTkgNw3()r))@(z@Dw54>qS-1dW|xLnqaP+Qj;>C-75)78S_jYv +zfAw{scW6%RGBDEqI^gThT5|jN>$%nftqH#Vzk~TKeYzeQmLB!>#d?1KOZ59D-j{yg +z=IQqzsU6m6U+4O3^*!hs>GiW2Ytd2u7wYwUY3FFVd?amjr_29=ceLKS`h2S0sn3hi +z=eMBG=X(0Q1X+2nKEIInkEhSc;n(yG`dn*lzCQ2w=$5p8lOBF@O<>6!>XN?xFrU)t +zCox{q>0NbslIN!&XVzFtF6DVg4!wF<9)@SjpNT$)Q-!mBbir+zt;Hv%!n@a +zP2(PluJrs@?@xq33MNcS@iJMyHSWB(~;eJ41O#~QTG +z_dqA)?=R3+O=qm#jV*q8b7%ZT^kr{7l0L1|AB4sM9*yTsB~6svP_LGVLW@5xzO@?1c@uVv@d_0mk`VQM+!GZ|vAt)PJ-_GE*vjUsGd38#T~UdHJJwIgL +zN)%gHpsT0V4Cpz)4u%p*Yj~#Y{O}j!Ukts)T`f<O6!p7t_q$uoL>F%AT=d;sm0W3TldUQsrX_`YZ` +zv>OTA*o+M|HXT#~}#sg1g?x%d5@!k$Ta_{LbTeY4A= +z=y*q_!FIZK_fiquuq)aqc<<4nUo(_#qc6HSQ`W(pk^fGr>{?7URlkJf;@dvc- +z9&KDzKEOF0?H?Ddne)Iv#yMqftd#9>ZqLuhdk?qEM6>$PpEf@PPi6PR?*{fw8r1)M +zJ}vwz@lP)Xx7=BeZsc6=s&@J0X)hm>Kc4=1Z+|?i$Un0Ce3yT!V+?g^FXkU-m`5-CNbyGg`apOoeBIrqywX?!=7+m~C%WhHe!gtk;Q)Tj;3hr0o@f62odI2S +z%wLU_{2q%vW6fpFRoA}j%q1wCsqUv>UO9W6y3;{(S-SP|@Y{(B@{k(y=f-(!9!77D +zO0jp7l%EvXH{018;*5Gz0cS~3G2|hX?-aAS*P*GGb$LwXRkq9;89T$d(~$gwk%}aD +z4###n=U+$K=bDP=t?TC`_hSbdGqpB^9dFE;Yelzc$GDL^ydCJMfG&)^HzJFsZQ)=f3IicR0WA%j(^?ISbs&N**4g +z`yKi}37v81e5*0&&^fhM_e?Ia=0LOPpIh5A7>)fRH+zfbipE3ZApT#}h5x_*3h{a? +zO8sZ9y%U~`-+egCxYgsK#a^Gw$EonqYEWL`u4C~QGe*`IGvmh-4BibZI>nnzpO +z4=Ds69m(4Z0k?=uYyEQb+i-8{TGn>rp?`Mbq42qJ1Z$Vp@1!I1`{9OoD3`d8!pN@$Y(24q344DR8mQ +z_$hAU$0~~DH!;4dH$V0fq0U@x)1iLXtZiAqoS0;7h6dsln!7{KOpXc?L*062@(fFH +z!_;PEaINW)o14Ffu_P?~%B*GZu?D`f_A0l;O3vFqDI2K +z{iBU*p;hteTy9mH6R#xZ^=Wu`9erLL%xtX;{W22$vZ8-NyDP|n8!Zz(Ae`B*Z_K0MLo70@% +zwQiYyX6k}9n`KT{sFeiOIYH;Bl$VV_O;7>iAhvck}Xws?45z!3K+s)|uY +z{BB=6T8K_6S@+LUBW +z{m|Hw=%oMYRte*JhlAsDW$^Tti>(I||ID~a_D)j&Bk6LdPiySt-~dBm3YW;=|8S@| +z9}PwhUPlSYd^RCi^pge0^6g7KtT+^za$SJ@(~jQl)5wAL&H8gB=bwx?@CNWx1178ZS7}us7yBN+~w8LxSqQe>du((ulFzx#0dU#$t6?#NhK0S7B7pi7owy*W=*ktNH)iO=js9yBE +zXwBu;a*oTTmvd`dPYb;oCs)9><=8xR*whbO50_mXei=Gn~pN|#ken{W`)E1L2Kbd{E9Q({zt)G&NG8* +zct1TA8hWrkW+|7kbjPD?&=Q+x4Ks4P8e^eHVig6ErVGiJAAB}b{-=V-^Yx6KWi3JG +zOV~5U9>VUkc-GU5v@K!*YB2J#lxN?%jxU-_tJQGm9HqJ)c!~&qC|kd#%m*zq)(z)x_oBa{H07p3Fi+ +znfkKyCUOK@YhtG&d-b{9jqflQXXNIjheztl3e15-)UGSD$Q!)I+Lf$l4(>-r3g$N_ +z#ZO`BHqc-3wb>iBAa=u%k&mt?UT7H49r0!bAq4p~F`bEFSYXRe>emz0nCdD~skRijy_4b{WG^k5nUTAWzt1%gx8Jdo_cOG+ +z-Ma_K+~Hs{nJa_VE@p4iX&3oZ9X53oF^;RO$X4`KZIhMSJf!z)2^(E>jx{7c(hQM} +zv2G&#-da$Hf4d|(0sOem#hq_fyXUidR>k^phxmSEsSup~-PRel_7|g(20dlCHC`lU0t3wclLQDx|DduE6BbFpKw4SHb9XkF^a +z#Zpf0P3r>Ig44l5OiC)BTK;-9y<>LMj1Ji_eHuT``sl8keHyCa{afu%VH1&$YK^tx +zPwlz>(|vm(R9pVlLlc_hvyTV`?0-8nc=Mys;_H +z@93_LH@){pTD?n0^RE0K#wWcpXmeKclJ+t5>nBdzL%^^+Uu*ik2AaR*P+SlP_1^~DEv +zm7iwbO)Lg~`+s;x>)Fj!&B@b{L*3_>eKeYlIT(^yb&=LkQ)~}|pF_!LV1Yn|lzx7Zod^VgzVOuxa7Uv-HYiXNQMHZ)b2Ywn%3ax6}u?0ib_Q$aiMU&d{e7&S>Y|eGG +zYF0@kS0&2GF_g=F +zoO*xb)YrA1*Rd<-;hzt%;^^G-;a7BN^v-CqYB+j?Kb={KTKf`l*<%B)E&V2QDd6~& +zcV{*CSL5f&&whw`9RyFJSjH6A;C}eqYU>QjlV5-FjK1$CZV#HLZRWmZ*3riajC(V8 +zJL$fq=EW9qu4^cB8vgLj?YS++yv=V_l>2_G-hDea_!;So)3FDC39pD&4KEug7^Y +zH%6ei0c+;n(rHEQgSY+!{V|E>ie=>cQky%3=WsC?6|8qxzyrn07drQQy_)zPdDgTB +z@C;k5BYpApirp%2V`_64{hG@y&GruUwnu(=Pib_({E6rT^xVqy#!e#^$Sro%(22>BAC8qax3AjT +zOg+B?uM-Uoi;X}Y`&ld3_B12PM$;BHb6WM*Id^ru?3`IBM7C#O8)`lKr?WcOL$$Gh +zHm1^-lAs|Mm5FH`x}G^Rg!xm#dGOmpm39wPmkIHCTE|lv>~Pl2N7C1aR@?pgZgKCd +z*4f)an>mm2RMSb&kYQbtts}h==6ex&Q_nN=cJ*;BD44Ypzt +zeuHdE*_m$K_Z{{Lbhp8)*qMs|-s-IJ3(bq`>abHpOTOJXmA0wdv3pD55&Wy6Y%Oi1 +ziIwb-4}r~psEqpLLo9!cyYG;-?c9O4f;d-zHTPWfubq3Nc3h78p!hByLG;QmFy@Wn +zx!k+0;7OA4&|dWIF2#H^qC>X3=$nqty$ZfaE*H?ol}`Nn716R*bSr*}jlQm$b5FjV +zA~{_#XHy&H9h*foQ^uiN{RvrnIXM1gL%b{*`)5) +zqn}i4YJ0TRv8A4-{zj|awXZtRnet2KSu1N6Shv;`Su4}Rp=_r=RoH&d(~r{wk>~w+ +z2xfLmcXRKDp5LSQr_&Z~)b?iX3Hzb>^8)-7o!5o-I5y~X_%9pu>hNk?e9B)t`|KN7BE)iGReL*Yf~F%HbpCUDJLA7)z@D*bD&c< +z_A!5kM+e}Q{GvA#mwNRy@P3y5>37MZ_$pnhc~R<>siw?@?SnI}-@4NCTZedltJQEe +z@^>xqCdHNK({DdNhh_Quhq3x<=|uOkz}x%bf0a)+f08><(6yR7nm3en)?9qO#AImD +zI=j1N5%K8)dpzH(_*72kBy{|tUF&!;>t#F}4h68yurEFTrqHrt7{8gx#OAM|?C)4d +z$3SbudaBRTmKcBL=h?)`Rq7#m?a4 +zDKM!_0iRz6pI#8Y-~LCw4nh271U +zXUVe0(AB+fCLZ_tBR#A2TH`f@KB=zao)06>Xn^#(G2P;Vt!}P`HGWNS&tGU+SNEC +zSDF4kZD`NIt~^*S+y3Pi`4NM&ea%a)`o6Cv*T1Cq-h>+uNT91qoOnPSU8Vi*pqWcN +zU{QO1@RD3qeE^RNQH!L=u2U?H$6&6LV0ZR)qt_??6J +ze~2k53+%fiS^8`$IfFJ8HfHQ?>{n{A}}>eW*3pWvvhfXEtYreY@_>#4o+r6*?Xr_+o9-4A)+I9lhHbPkAxj +z(DqW(D(KZdu=Y%~U)3Mp_9dRjxI1?ARQj@?J?!(%GP{yKsL$TKa&Ynky!kYPHol*G +z$>G=kfnE!F(L5-zUZ!8e9J@(puKhXvIm*P?Yn5*|lQxMNrY}Pum(pG)H(YHud|N!E +zJ)O1v-VZ+!mcL>_gM3Z-eDc@ibJo!Z-~ZI_OZYBaivOqm`VH4?YP$-YiGvNKPT?Q> +zX5Bk6t-k_(Z3gxKrTDc#`;qvy)4+-8F5(zCv-6o}{(hmcj>ND{TN8U|0T{MvYbqbA +zV_qBYyi~vAVA!5-o8VyBuA}aphhZB9hRp)E=3v;?OezDQzfmr;*{!y-cFW#)EwRRvL#usomNIFcr7!-ti)FhHe{obEmM!jJ+3c=ZHteip +zW7($V#a(`N^?R{wB_5W|{!S;B?Ux>|YBl9ueALmgZ29$nk@7y4tuJ<^uxvWZ<6zky +z`$L%(emIs8FM}hqI-haMoqs6n8~$$W=FowJ)qYOve<1VHY1!2=2h&!~c=aKN%_wts +zrTiD^2Xd`FMAGe};@b3%k84Y*ukX{)^~JCOH;d%HY*Hsk)<+8TVvW6691eB1Y&HV!tP&pI`#=X5&=u5Su{ +zyNhqT#lg2#uSq<#V#zJ($Bpo9LH6bsv0hcwi}ty^FWL97leQfWI`}p{tKgZBZ(DfP +zrvG*Lwq2et;N#oAcIE%Ww^@Hjd|Oo){B#azn1 +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 +z23`E +zJ&yE0lmpJmlXyPyT^A!}6{KjdPfGiB6CHk$A}F`0Rr$dDJc&bln9Mb-jWdXOO~U39 +z{;V@k;!N^3bmmE%>Evo23vZ5>C-GV@PvU9Sw+~mI#6HQQE_o6MfF%qEGh1fRwq0>;LuxVQz9O=(fXm#@>4nCYG +zQ8INiSj|vDigT#@$&=Vlex0%Qzx3$Dk$wqTOFB6yPxA64zOYz)l^lMSXU2?xmckb0 +zBRMs+IsPu^IOE)9(_Nm#e`i12G8Z4tlXwRM +z$ouV^zDggyNu`^?fOPEH->l`yK( +zCz@Z%uh{0&EiVn{Kn;0jI +z?XO&m!lKU5+zc0ECr)VkIC@ZVpg`!E_`J|N|?(>&ZFC(e6wF4k=cn3K30shKm6Z{y1hMSk4% +zrZeZFs~41K`CZOUS>#*{k#q4v>$h>`Tnt$uC+Ffv0vRXg;;+DYM6GAy`8gNEhwJ8?4f%P&&jtB +z9XGdwMJ?uh`ZMt%W_x_ZKw(i2kdvr5flu3TIqQ^sjf;Y%3*}#2N`4gXXmj!} +zMl#`Wm6Lz5iq980za|>&TwHW;zwql09d7=`-Q-_sqpmb{=3jg> +z{^7yyToEmzX~)3#(qrd#JNXw+vgF6Sk+{J!O_v|ezqk}%`)A}|bm{#SGJaazp(L|(t3 +zwVJ!H4^L?nLIqlRm2VyD-sPeuu&C1Trkib6WT#W2Gxv%4$%{&4ei&i(4$aLj=KF=_xA6-PY%Y%kg3Fo@?fzzp +zJPkw4V&Wz*4^NR_WbA<|a-r=Zr`B)dDHCX1LAix|F6VOrpVfTM<1@u)1)mG~oWbV; +zKBw_HkIy8Z6@1!!&fs$#pVRmp!)KDu5q#QwM)(}ZXAz%c`0U5$2tEt>{B16`M8<+O<}Smc=VIw0kqmL7*U85*Xj#yfJxF9&4-XYHG5GlCx5&K#Fq9MpH@t;)L2Mz;|oemHiTm5sl^@9WWX +zA!MzdvOgftCFPN!FWX^jzpXy5AUDZQbcPk$9V0ho>pvnN+t~}MbMU%vIek)Jm75YB +zv99k>w|^^`uY9i^NZ*Q{E5^om^HbLGuFAXlDPJev>gK(_!@I*p@9ZhsM84+x$We1E +zar2dF&8MR068x1qIVzi}V<+vu;O!~8IVu%XUb*gfHJ$oGbv;O3_B)yIL9Ip4 +zT~k~BQMavPa+bjF^cdQj9&Szq`5r_cUl+Q`F0pQ64Jfsja-TyFqg*C2*4b5=dd9No +zxfSW_LQCw&`EFTfqo?j`T^ia&?yyx&kFq|y7+!2~?C@X9|FXV?yuCMHmMfmwEPr=qmnks&u>ey9<0RPEAAyD*ujb;Q}jalOvjPOP3aeoAA$9<>j&LraWUNJrZ&9Larf?rRCfc +z@+#z?=Wx!-PdoVCWJ>tngSq{~s3(!lFZ5R9TB=O96H%v +z`{BLhX*@8IJ7$>QPo@jWTc{j3+G9|j_-J0vOy$5NPdf31Mki0-A2@UNwZ%4hFCPh-%+>NU%uUE8{tL1dbK)t=kNN#pH)m#Z{Pi~F%=|OI +z#VGd$Vl__AOkzyY>_Dq3@k#0=o>e=IwzQ^#&*nZPUmv-9J~m}U%P{t|HJ9}~$vi&I +z*p6SFzi)E}Wue8nOBTJ~xP^HCv-}o=@11d@mzd91wS2#?x4pFO0d$w@bp3L-&C_|u +z-*Y;Z|79Dkf?u(rlgf&XVkEAe^<`pHS!e=Bvb_fTLFcjg^L8n1W +zA?w^XpnC-CR4&wo!ilxS}=RuHN5ISe;pE +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 +z&tPwcALkdL#aYb74V>lQF +z40_}hHecp27T=apk&kQ}*MG#Ov$puQY>u4GIySieZEk(vDfPQp!->z_6x8D^i$3KI +z-%jw?&wT~fmZu|K_&^2mBW2&)do%kFt#0g=^}#YWN4^MM=LR?1?@U&$&X3$kpOzla +zT;$f^a}IsIb&gMcf0d6q5+n3|-c8WzS>D=~ceZZq7FeZ^cSU#H{aoZ6+MNd-eT+;M +z9rmG&XnTXYA>N`UfV-VlauzFRMsgM_I*OEefHHC(e3;*2f8>ljHDvdeNIJbB_3y+2 +z4q5$7WG4ClCI1&RMz)h0yBi}F=nJ0yDfHv%TEegMd_pg?ZTY*O*r8A3L9sDKea>D( +z@I6^g=PlzOSW#mVZ>Xxa;d-(qajrq`08%Q!{HfGM9Aj7eg1@}T2!_}r>>3P5rmOSG +zemPe?70E;H%Gt$Bete?TjWM74Z{*)w*j(=EDaOB4-v1n>9<*h#oOx6iNbE$cJ%_oR +zZhYR%Bky2(J7f4h4{hd}h3do6GmwX3tF&oJTV{y;ikw+WeepMx{<^TA=Rp&BdS9pt +zANJq#TdAiU`dYd9s47%{U1QD8R(@- +z4XF&NSY)*NOGNzNe5x3@UL@8i1fT9Vr}LiQsdYa9mIuL4L`^^!c)*s!>yX2;KR~Cp +z^~D(bvnak`Cg=3{9W|HZgP`!;D&tMoqHjAgnta}cz9d4{yZhh*kl;Gkr7Z;bI8$VdEBXW+v4P2ZBF4|(#mFeQ56TkJ1;6mYlwZ-II8C?A3 +z6Lon5^#qMyN9>>Qm-tS}zEJpUIlc)(_d`cVODytD)f5+;m2n5E#3+gk?qK~C+?9d< +zPs3jg{(s_oTO +zJGOfKz^8N0dxL4J5WE?3Vlc@MnQgPu+^IXnc#s(Ew#bmoz2?t# +z8!=M-@saw^HQ&+E-8UWB9qC99Nu95DL|!~EHUqi*Y^MGTa_YJ#X8IN^?AFl(MS6Z~ +zg_=-Tu3n}6_hSOzY+!0rO?7+JopmFCsYBJ(t=3IuA9{#VKdTa722*W`e;iY(Nxsfv +z)3(oi7z^WfqSU=rH?x+@S}(DYN*Q*W5-(xLqpPP=SLp=vWg^cvG56*T*V3OB-0IuyO`g!7UnO=z!*z!03J(ve(kv4j$yMgt1Fu%1CuP8kCg>N~$CUhcv)VE*mEO}rp`KDY4j$rsP58a@hxf1b&hwYNjs2QAkoifcZ%tD^zV3l9_fGN6Zyv6HXvy2> +z!t;~$blzli&V-^*-M{vV~|2dgMrB~YWB#5ue%*=bNz06^uet>TuZxY&& +zc>~5c@Yym|`T|#xh@OwFx;QlQu$nnfKlxnsd2@?zgXd>v4h@snQ${}gnYu|ouw|Bh +zvY}AVxAE`;*S}e4LFgi}ueDdkA+#cN(*pf~ADgxWJ{c!?Sv#cv(mhJu9Lw!rKzvHV +z9HA30`j$o`Wj?dL3;5DH*6suUXLBr{2_L@d>tyYlVauFsWwxy{c87-diyzpF$mULb +z#eQxMTla_wA#FTvlEx5Vx`u>K9kq445XI|lCon@1bqRl%q5rQlTNQ}|hM +zD?EM;aBG!FeI6Mlvh8C#MXo`|*lF4V20VZ)J1?^)^m6}p&a>0uU-iGa(=ei?s-UgZ +z$V`~E$hoM2Pwe!zQk7|#Vy9OK%QpC1WaEA0OFPnrv=y`E;+s8N$rsr^1X(ZqDSIHL +z4$4~4pwutp#4yd3JBXo8YXlQ~Z7$ +zylZ$~>BwS%Pv%kJ75HT= +zGA!{V~uD;2Gh^`01%9$D|9 +zrx-pCy|S*$dhV_5vaU;fO~&+St$9RHu)y)c!b +z7hCL$VoJUJqdsDhMTdVOy>E0MvB|yZYHW(D&4}8S$e_%1q(0Iar07-XnY$8Q*t#;b +z#rQU2ZxNT-#nj2O;Ms)4B6{;GzKdeZMCWDv{rI*Y4iD7}t@~CwYk<&>(0A}pV&A;I +zrvzK+7xCk(0hjgYPTAmc9lBEszHICGmH@wJ@vR2@K5fg2`%-^lOd0U?wM^hJC1LEaqu^hBQHo>?)mryf?M`*N?8qS=~wn}!ei=iX5^vFOjCGG?9@RsitYLB +z@D=DioL{D*#t73uww%MfdwZK~{*S_c|Bmm!Rzqz0ei6Ta&^PUuO8o@fiT!CVcc3KD +z_YZ_q*d}ESKc9IQS(l`~=x`#N9QiK#+M7Kh<3v`~1Gk4)d(XoD|8z3QlRMCQtr#%KW&|yLR&@w +zc0h3U8ayPjeNz8+Tj%`?xP9N&cV&NbDQA=DUc{sco6Oz-N1tm}T(@>f;t89uo0m`I%FXbH6ze;SN;>Q>;HWHiQ+l2jd$De@bRNDNo_hi~U)_Z2!RLqOe +z=d$CM+H}32y1_x~%3|6VdL4{|-{&P}2~LG(_k$ndOTp_!_^1vpmuu7feW{Urm+}aZ +z5k7EsAM(tj1JReN!PASq>zTs`ZGH+M6L;EU7JaFjF^j%bZ0lE|FLfakTc95w{XWHS +z!Jq7_{lsHEn_l1XjI2i*oT`grB6G9ZzuZHcjlC;(YV|FARXRsp#P4TpycqN$HZ$pC +zgk2uIwyV|A$R*Sh{LCPYQvL~W!+sunu9PjM(hG%zh_;hOX1$>h; +z$mw=m#^FseXS4ZVcqr3Ipi4b%w!lBe^l0R(+#@VX+>NJ{tLD4RzvwZd&j@ddKJ#nFA?2?-rTjR)OL>to +z9v{yI2ASiDv?X!$;#V(aoIRGq>reG<-#LeJqW6fccK#2)k}0(P6TXS>d&#__m2Hp#)s{<(X%s0u`icnTVChdlq+0&v|>Lg_UA%$M6okFw&gMLDf|`~ +z#CGlJf)~>^-;tFA=Qd}uF&6>%VAwqS{odcFxmVkHqF&WZyR^_T}-h2`b1s#$6kn1&*`*29JinTjQ(|-=Xbm-EWii*{qeE +zUEsqp6WWQm_8iVAYPqYocpha<_KnzicTAvcz`he$^k{s=I0uol4vBw|^VFDnXLJ_+ +z0~fk$(RtMMp(iS}EH;w0T-rP**jXZN5ZARk0&k;lFut*|v+Z+{I~rv?Cg<~i&(2zQ +z!d8D|llW3}K`SQhX=A2|PSgGB`N3Hcdk%Kk?Q;2I7Q?+7R +z>6F+}7x6BJ2_0o17vBYj^H|rUyn6>hD#Hj`KH^toJ(9A+k(t=eH>J}$wU9hNu>6^N +z=`^|rzyAk&c{&}meL%z~*71?bwa){%@2HJ&)3-uz6xnXYq;Ct`qzJ&1#{b`rKb+8* +z_&p0fP1$-!t>DA+gA=?6{auDnvYds<`JMP7=BOg#)4IYza9l?F;H*ac+q>zXxX~Q} +zRn}-x*2A5^06o{zM=kx;LbtZhm9#SoI>}M_NujU7enoqJD}H5DYo!gTEA4spr9H2W +z3&batx*hE2M%w;o4$aq4{~VF=D)>x}irVl5l*t&glTzPp*GKZuZ(4hW|Gc)O +zo#WKsGy6lZQWzpi4e)30{t5L@rt(#HKx +zCVVh^jhwGs%Gt!Y=f^c%j$9D`#G>bKhd0jbr+uf*e`8`MzOa6^-99&xv5I{97h4t` +z4u8S*<$0r{wf6?bDzwE}9`rk=TdyvNTngh5jSC@~isH<<8fL}%uk|82_wUr!cxLF8#uzVQrj=fz}PlK*S+1s_xJ`JALX +ztbf19X|Ln8*529RVi$fB;-luAzvAON=&UwLndixuyFa9j!F*Fs-cOmYanHwV#20@i +z^Ph2WS4l=zKKG_9F=Y;YoPXVoyus*)j3@=)w|C2ZC3o=cA-)woKj5pmBJIF6g?1kq +zlqbHLe{%CKCT}x&0*kE8-~88;*Er#y)T_L02ESPD*>eKF9Q;c9%k6c|Iae)wKBs2| +zJi=Ov4Eg}P&2MDCWUqnvPWP9=SM%VhJ>w_!T+caH5qyW;f^+_lSR=*GJ`tP1)Z{Vu +z9{+0kw8E*mw16rFu5I^TO>X +zktvj2Y|E7I+Wx@Rs{gra{DIM9dM^8{(_Ri`;M2aM=a+mcfBf3+=UT+{o842k=EgIi +z^=oX|nj62`&a-NK&{S`FLE8#!GD6#yjC9#^La| +z=R-B+#?kO?#*y%1VzjYM)LqCP=7NVz^gat;!%*a##^1vCao3~VA&>7A?akxlCy8Ur{`G}v-1P0vQEm3xAR;3 +z&%X6%JwM~pDyh2#*&*lI(~(abz7*mv<9+PaocPEYq+=MXjC}xCr|07ua8Z4VfAp`f +zba1`-WwH4RZ#(C;4U{#}O`wal&`>S(Qw#mnLN~S0O)a!i3%zl!;H*CapTH(Mr`S)v +zz~8^KK6|hVoI*QY=t}5?5vx9sUmg0q;%i3D_C3 +zfp5a$T_yJX`4*&P?shSs;mkX%;>@p^GoZ~y%-d38&O@2gvF$i`794*KIVl=($fe1{sTtQRZ3Ju^e}t;_n?`{EQJ@0eJ)Oe&E^@gTHR=G^vWGqsn`zr4ej(@eHV9I-nuw-z=civ*zlzR_{5KrbBFP7rEXd28@$-CN&hoASDa6tr@MLkg@%_L{mojfO4Hc9 +zMBflSL}JyLEA|IL*34^JrvToW +zXY~}?KJeJ5nX5zYSy5^azHOW(>}M=anMB0s-m$))ni9%X>3y+ +zjeAsAV~5IV+N+A1I#n4yIu%V_s=g_uTAGyZXbR}ArW~EqJW>}m2Xz^Dom3DPT;DuJ +zw=|o&qdB6xnxi`Bg@h3(FL%=lH(fy*(?u_AFbd0S+_c_J*O4Z4*$W$uNO^;swz%n5 +z(l%Z3!X~4A~&5vYWlifc-lBr9&yt$H=Rcs_2slS7=dNwZd&1{D@bF$qSj}O!eupXTJNUo +zNE5!Y)@O~#vIaM8anr4&ZN7@u=Zx}Yd)&0cP4|*^`s!PgM$NKAZrbIhDN>cu(%NV= +zEDN}4j+>4o4Q6z-HW_=C6}oAWn@%A$GrC%vjYG>KZd&H1^GKr^Ion!{!0qL3TH&TE +zNMjjA+kR{m-d^LT^=`V3G?7uZ?I%X$_69d?anr4&Z5b8Y{=+E0eUF=VxanTf&W!qP +zKQ(G@KjfxeZki%h{+4Y&Ga7CWxM_}?jwB8GJGTAY*mHZKn-;n06jIaQwe3HRL$^oV +zw9HNCkw*PF+qW8l<>hW#;ifA{WB#J;|78>|uW{3QH(f`X@Rx1>g%Mfa;HE8Zx|Oue +zU$OmpqkQ=uH|=oKy`-J~`t2_mHOmjVX_uR(NR`pDz13(~9&pnfHyueDG&;6#GxjVm +zbkia?okFV4QqchV>pUap1yhwZN8tCVx_zd?HW5Id&OycmxZ`1~QO3G3&DOyd>Pu6r +zh}R;&j(q;gnx^pAW^^_0;je?gz5I3ZcZk0({!;v@AzjS@{&M&m$zPDaLjH>Qqrdni +z^s80pi5MaJtdn+Q>71SgZl8;eEqT$CPonPz+FOYkDvB4XGVbWeGjn&CrMWr5Syej7 +zJsUo&@SrY{^~2h2mWEifL!H4{VI4MKZdg_0*H4(lwx8q4K&i{!nb@r!NXa*)GUB

WZg`MCm*y*CGM)C-;W*P +z?H|R!R}N?NihBcM*q$?uoo3hZjK0^YbR_9W(jaM&w2-ur +zw1~8bbPDMdQj^pqjgUr2%Sg*e=aJ4Mjgm%5%Sp>g|CmmV$Aa1 +z*QB1XvC&MWE0f$gW1o==UQ_8gc9~S#O183BlRE&Vtkl7F4*kiQvEv_Iv%}F3L>Ca< +zpalKLd%sTX6LZlCC6-NehFRcU&dM*qPe>b=TY*7qyGc3f*Ft->gKamHi4l4fAHjM( +z)*7q_3@#_@`wHTbAHf$`{&(&H{wVyA>zlj3P2TkD4DUN-y&pXPSGe=P$eI84|G&?F +zI=zUwUikOtfBXMC=0EWG!2BOV*Sirqyl|MKzwh66`uP{%x+^N9rPrzGuke3B7EF!{ +ze+1Nz%*^iRH@|U +zXn*O&`XbYT;c*)VDdWKKxDA7pbKvTrovY#Ft|oy;;F7ZclV16Ifl0~8jkCQ$cAFeIC-*a^?>qvdmw~WU_Qr2lt +zmwuRD`J&X3@(vu2pTLEgIqihr?aAzghE*zWJqw>oo0D_R(u@p|(=G8J=_q9a)1W-P +z$y{PACBGt>qc!tq?v%E?I!eb(X=9Y#hEp#?N6n}aHMy6Z7_Wi43ZJd_k#&RXO1;yS +zm$K5f$i%_zC~er^a#w=&wgU9UT8D>{{Qco9p%dE^xq2W34k-SqV>qw63;Qy|8 +zP@Nk;J7ZC(P)&+YAU!8zamZwi395Q@nU;7Vzq?q6vNEF3`rYx%Nr&iH%%K?zL-!i5 +znCJn-Exc@g!+1F~OuueHtMLo{#yodwOt$JynMg)Y?Zg_PUZH;nf}0ev34>GbK> +zYs?O4d@nRE{Ri~<*1g6W_@u_H;La|goo^U>LTBllSbOT@^7}&l9I>olpbZDcdyOOX +z@lHs_D6oFRcqf#tAG2h<9?YHeafm*ozQ8YOw*FW8dc~Cg1urrd`QICl;7NXaV-lPV +z9+QVZZ%iH@WlSF5N_`oZq~6%%f5EeiQU3SFCwQ0N-uS#Z@W$uOg*U#zbD|XcS#{>| +zd2{9TH!xpLfB*OAOzNLHK5tz0=>@;_#wK&;jqB8T8$4&H&X>%UH&26U&6|_K^Wn|I +zsrdKsE^vA9c(8c5^>FIpQ9&EX3ptxTp$`o{H|TP0APzs7zpB?|A@sWtdxsI(*i02V +zv&az1Pr-v)eUG(#Qjgp>_&5A0DoMqbqk_R%BC|Z3hwLY|{wMKBuDtTju0^jCx#iqX +z^nTcrUlQ{s@ol2pVV7wXA7bbHcnrRBQgP~Q-|Xp6pWU5GzZJhqy&B5R`q&(;)Jsq44JD80q1F&R!y3x?G`jU7 +zV;p`hChzi$L%z!1Thn`6PecKz(Us-?Q|JC#xu^EMAIV+ToxE++NlZKE=*g#i +zjtJ<$S(@wjOuOHBfHF8OkLn_dT~XBjDj-eL1usw*FVK_0Rmo*iyva%G`h5Z8yLiXf+`v +ztW~ +zSXMu@-HF}h#IsaTUhWU@Vu@uBEca5p=*Gx*{@C#! +z=gtUxVL12ZE{QIeE=7Ly)2EErGL{jCH?5sEk>SKCr1PPp&9$RAZ{}X(cE%eY1I`oV +z`|%BKAf2L%>$Ffr>Q#Cri+`l>LpDry1J=BZ*EFxe{!9!Zm!p(nrpPb +zIi~kFtx +zZ>>YKB4_TVO%py{keZ~&Ld)}$GB^F{SGpf&-I}S|Ub40%N{*+$#vMP~y01c3ZP33h +zVLfR)2l~v0|K%Q^lV!ZnhRFDLT^S#@W&H8zY-QJaq2yNd;Ht7DP=^!{$a+eGkIo_?71 +z!dnN$kHvXYOYqc5`^VF-fuCdD``z}}(WbO5c)AgO^Xhu_{+C;>!YwCwI$gOAw_L<6 +zCwMwtxfi{D$+xC=+V}}l=eOVoIT#8QSwhlwnH`O}#M9qSx +zMXs61)F+Xto2}!}Tto$5+M){?(*xaK!?z$$zY{(O9ju&nK;)s^XEc*FXBPe^v$5~W +z9jxby4oF)fKjlpETzx|b-<{AD{>R@BUKgIZoHhJdx2a|&g+{PTSlAMmJAO-zlU +ztYu8Jj>7kz9B}^kaOn6Qe$~ZWUWO@rU$;4l{|)~u^=s^-&Ra99Sd;yn>1L2FHFns3 +z4gbXN$><~J>IuN1@UNRp%*Ah5+b#10^lzapllh#if6IG(d7;}3NiVZu7I+25KLFb- +z#t;6OpIJ>mKu$O^S>C$1l=mUSmc(yM%!ITtxJ|FUBjhil-)dtn{uRY$0{N4tOGA@@ +zOX41u7$IcK1HA9Ek2Xey)=?h&iIsz#7kUb^-b7f#=3q-pr@zpHE}1l0>*TGHPIp}y +zWvB>c;^f6^o)e$WC+jBluea-q9Zu@crM|pzCUu>=DDa(d?`C73!R7jtv=O0x4QsWu +zf&XUwQt`nC4$&jN!&?EK9^s`q$Vaie|f~7-7M@tLFM0s!Y +zDf5#s{TRKk;8S4!Kb!BtEONpcZy|?aWVF@ +zxxVid%lAp7gX_p1G?jidekFRO>`BGecJWuu(qPtOCi~J|ll3jOEuss1P7yXFBkTLn +zeQxPBxv`m-W!=mBj*D?1dWtnWr}5+T`d^MD|I6$lu_eVPSDK}Vum^QgcQ1W}_&z%8 +zO7r}zE6l>Io3P_dieHd*qq&DN1+;ZtX3D%U>mJ%W-@1(c+o&h)ZKbZX^-t8tPDBjK +z&#{-}G|tHUgDLGvp0p`vP||LT+inBx9!j?)rCsbfyxV%dCH+V_>8A*Lt@M*{`&man +z@KotvupyqV9}jMU`E>0{o6?@ZjD5<6v%`gR4{)>r!`5_8v(VaLJV<+|8^5%3Djd?U +zjAgIe4z>cjJ&(V{)+=-A&7(SH9s}68#NJmx+hU)Uc^oom9%;{>$0_6^`*(`nP4Mg4 +z1B0|*%=b+2{#kGy0N-NAx{5IrVZSikdHkF^k3;Bx3Vlj@CUvE)i>W^VuY;!m^ds{r +z?MfMGTjojHkGSoZ(S8oT95SCH@#m2Fl>Vfg^e6Ur>2IFfUzGmDHZSw3@cj_F8QhNt +zzrcRFcBM@leqax}^$T4%i-2PaFkmOM@jn(xQ +z9RL3Sy5eB_PLREo*mva4N!f>qP3L;f>twGhwjbGdp)15io}2i1>2Pz2*mY*2LyaB! +zLAW2^;q0uLtYMB_XPg$h&a)PF9byc}V~5%hzfAqw%*}er#JBiY?AJqi8QKi9Z{mH# +zcr5+S=!~r8&}b?4nWs!2Yh@TeQh!Djc9kmh>Lq5L&cpY0iEEz;+d8&qpUD@yj8SFg +zs&H`{Th|h7MDk6mIjLN=s#x~SVz2RKJ$J%h6SVC$bEI5I_SU&N$X_1&?EFxWH#U6+ +z;GY*Ro^(O5SoZeVevo-q@uaM=Az80H+fA>ndpJHyXSy%4?1bIsdfrSeWA1Y6&nR?2oGnBc=EprEDQowyW +zcyin_5z2I(p-iS*W)x)(ouN#>>-VK7(|Lw6e|5{ev9Yyx?-|Ox>z3I{nT|7*dD|`X +z7-jaHq0Iks%T!RN?F?mpHll!=ZzOP8H-@`t|%(ZP_x5q2sciSfB+P-pa +z+t(uaFBiRIk!|~uSY?Cyp6yHcRKt^#eEINrHSx;hLSozEu1W4jSyX%oo%tf*=}%vu +z8f&MuskcZyz7e0*NxUZ|do_IJd+u__)Shte2OcOlVCRx@OWkshQ%>&c^K{ZbtT|aH +z75Tb?GUVHL%G!SD2Uf8s>c=-iw)jBX2w*v +zf_?ma_AIgw@GUb-#P9YdV2!HRnkyLV1bw;nh@QiqzswRi_VUKgZr4U|G5uS{4c67b +zJO1E?5|uNJz10S5ynZG8ExuKNllj;<(&^h%*VAT1-IbJgsRP)3%G5;ceY3HnthHf~ +zejR(6^FEvO^PJnyPoE@)K-~p?9bXc;t5)tHmpXEXf3{v_b^Xo3Nf|!jHI&EhfPYwC +zTxkvMXD2I-pm{$0Fi%ayZMhVDOp2o~*nTwH_M<6EO5BOW#7jJ?^fv)Jhm3D1cD3I@ +z%U@7!*!CvIGr-9z>^`Y%$GW40*ap!(D_G{b+%G*K_X=m;*Yt}d2 +z*aK->+TH&|Yp=AujkXWbjy8%y5_cjn@J>mGoN36I+rUNA-TO9BM_?$Y4Ik^N#XB+q +zwFx=lOWs1=735{>BsgA(9I?2MtaF6WlF-RNLr;PWV&|+f_Phb;B%tEmH&9Qh<#lE1 +z$mjquc0z;PAI~>@zKO4r_)ce^cr@Ja;yDN$?+ScfQ*FDp>dZ}58RMa?1<=+}+wSen +z*NxPd*g@w#grnirZX0hr-r6hiR=`{rg%)q3jM!YnM_lSg{&gVMvW2oy*XAU)RGELF +z1EGPt-S)_j3vT0-Jr|!kKXl>Dv)`U)pG^zJ&_bShF7&C5b3>0XPOG4;WQ{vsnX{kh +z9VOZBTuq^^DtjJ2NiXtdonzB^bN9C>b8&jXt05zV{X89>0N=?R9pfB8eA6WEHTPg{ +zBnMin*I|6q_CwG6@J$QBvs=KS0^YbR_9W +z(jaM&w2-urw1~8bbPDMdQj^pqjgUr2%Sg*e=aJ4Mjgm%5%Sp>g|AG{nf`$Z2IeOq{7hAW4&mc>eD+OjzIiqPeN +zEIu6m$(@ee$)O*?g^&9Ntb!OkDffQ+lKIFKiG$7JJNGBRZ=EAX^G&HN;B4$JQ-|S0 +z&YX-|cy>(pg?8TM*l*q$?Zokkta}f*N{N?EhpP&L5qWn~lO9D*c|1C}EotXGmnTwb +z`l0O=|JK^eIV8L};JeR0g7xT0)*~kd&UAI+0lt-WSNQfwc%AzONg?fYxbrP?N!BC5 +zPqiBp79d~Fs9s2~e~O^=Pkl{gRX1_)JbX}EOU+A@n +zx}QcrjH5Q@($MwT)v9zwNH2?)h7WAwEM$I?bGjsFw9qRmZ<_W~&mf6dM~$#IN~J_>CCs +zGyULWwSLB|#*av;1JI!(hXbq`GmMSM;{DL!n{qZ|!z63tIr@6;a61}as}DmP0w4a> +z?t4BJf^Yh2#3nBI6TF~PbJiic)Dc_O$as?Ocue4*Lis#xn#^1LKI+N%1^@Q^QHL@~ +zX-mel(H)PXj(l@`e@||EwF`^1{l;V59YEU$krAI`{2|6a&XyO~BP*WcZ%r!ipvAfw +zV$D2&tl&(NbtnhD1$-bYwr~$*mDP28KeFNgvSL57f^z-)krfA!75kAD2apx}krfA! +z75kAD2apx}krfA!75kAD2apx}krfA!75kAD2apx}krfA!75kAD2apx}krfA!6`XI9 +zvTh*{>q_i%Fb1g?j}tEP*S +zJ>PHby^I)N=j=P5wk%{~*w$Hs=ojbGY +zFqV_&_v}IQ+xIBjY-i{|1lgQFlzUsI$V6N9b+W+pz>5 +z?G@=woTpcEhfe`KIm+tjH);oHQDO@mT9nuV{QvR&H}L)UH%3YE|8FcO#s9ytg0zBk +z1?dXX7-@{OhO~yXp0u8H9qBsK1Zje_fwY0Ng|vlqE9q9!HqtiIJ*0a`|43}X`^=@t +zGnpUZZ$}2a7yeJzKV-?Ht-XJwj3+~#GIGXtINaoxk+W`-auv+~f7*NOljrU{=B6Ip +zdb-|;^^ZDA-CZX-R{&i~*1atDwGwmSt#{(1=Iyg{(8Xk36n$&D=;Wj&$ox<4dk=@d +zc!x8;o9hSbS_xa%3aA@weaq3a)^}&o)}<%uTJb@;mh6vCr)xPp`S*3LfwrWb|8nWh +z(Y2CRHt_xL>ss$dm8+LLvyv98@?Gv6^3jo3D5zv1Xuli`($)CxW4Bps{1 +ze{mCgjnO&CP1$dtW7#n=qGO>$Arp5Y8+RfTcOe^hA`^EZ8+RfTcOe^hA`^EZ8+RfT +zcO}uGkcqpJ=upVST}gB(Wa6$QIutT-7qW3DGI1BOac8`Ow1RX6=?c;qX^ganw5ESi +zougxM*EN128G4r`cQ`4vxXy`hTGZt2J4Ugubabu630=#hw{>-`z4f2aw>}69O$oh8 +zjLTsErE@q36q*#hYdr73q|;xwbuC%@o^y2##XHxBTwP-d?bqr%Z22d9;kpz0*4Oaw +zkv-^p;j7*G68$Qh@}f^k-e4U|%872Jlun9%rPSBz#=7-Hw|c$y@9S0-u5LAxb4(3S +zRdJ?Qj*byVS47V$LDxy5PoYaqP1fnVZM{%*o;&e1jG$kMJdm;d*d5y~cAuUOC2PMk +zp6gxteGU1dgFda)o&j0n>_5&E++|bYjzz{n-FSrZ6LgzZYwzRd$DMHrevaC0k3cW;@Oi6? +z&ur>QUHLws_lQh!`nb-8XBh2Dx&4o{_9pPZ6}?Jqhr{rLQ)*XZopFQt2;YAQKa}AM +zAngerpLX%MnR<`9YoUDK;C_$u{U*MPK0A0GMxal7uugVijZzlc!EW^cYu(IK*18R> +zb*uhAvDV$?;=x%`NjtW +zv@?Y^K8<$Xa&2=mr`ePhx;d3zyg9teovY3@pH3?;xc$o;Z_@5o$`3yStz=`D6dIZi +zuLe}u)eo!CrJTD3Q|YQ?20kR>`&yy*p-XK?*N&oVFLHJ5ndsS#r|8;)^_ycSbnQ%I +zAG)@m*hz!fNq?h4?@;I+0nz|z4rvbQNYas{LDC>;A!#9L5orx8Z?bUna_BHJ7u91brmb#Z%3 +zO>6JQ{!80rFDm|2Z#*&Af2Aw;V9-DluUu=J(Z;Q|Hg5C9$ +z5qndBHal34{G26*pr?`(GldXR-ZAYk8rGrw8RAe4G0UZ|RrmorDj2NrW4 +zAG7ynqPySF>(F7#LvoLToH025>C=GgbY~1j?s~vl4g2i&Z=@ejHVt)o +zqy53wUXY6~mDuYX*;nrBJ`Loxx;!s_NMBwxU~l|K;s>w9PIz+s;A7Zw2I2=lds6)1 +z&&<=s4_>9;z%J><5B{DqC&v$dPWQR-bbrGSGIxw6reo){!IezeG +zrWZdba5!;$pAN(6;s?2>Z|C6n!C`~q2L-+W=OdqtAAHOl96wl`IZgcM>=;6+)DY{{%)9JQ}&&+ +zKIG>wow+?VWX)5N{53NoZ22Rjxkt^HIm66dQ$Sq8hYh3TjV$g{(!5!&`y?Lb>kU@s +zD8^Hi^rKI(H^HX&!E;{Rw(Pa!e;@5xnR#|O=`U~STVY?{N;_{<)QZranWvW6`AW@g +z@a){)9xR})L_XXUPp{mb@@D~G)@6~)@Dumbx4@&+e>dbF9Uaka4opgwC5g9B@+N0H +z_xH6Ei(tdWd#?1^GgRP`|9x2wTvArPXHzbB=)Q1xcW&e&WWXe~kTG^O`?A8&OY4 +zyVqn6tW03yy?7Z1eZ5a&&@0j4bPfUI*PY^a?idDx@bW^Ee_4iv_jyB +zy^RyEzqis^FJ!MQdtt|3{Qe1hvAjR;oLkIqwrrl|OpbM-jPLhHowcEgH|!pxozF3c +z{ppv8FH3V*wd&>;h~5iyTj+DT6MuliDc~)?i#loZ7TDt;TY9;9FtNY}$NkY;Q5LT&YonxKz94@=W}8 +z+myOGrq$KGQuc4y2`Y^O?zfcnYFsQ&Pq)xRdcMS7;}&8`r2UK_G)f%JdC(#2Yfp&( +zOYuWGSO1ue&Ya>(#wY&gmE2KKs>kr=ikuIA@*IOboqd)r{e4V%=|{Ww1z)Wc@L%1l +z4_+Fn+&wXJF=MSXK5M;8x#_^cn>uY7y1~@y5#Ff#i+d;GD8|8?b-?(JZNJKAtR7Az +zc29JGE!@v}z~n3tpMbvy*JtfjcR6W@tsrX8L1{$k0a?F1MKYi&0 +z^kNX#6l}i`8ezR}vzV7Y#*F>3W|ia_bJ?5A-P%RwFz8S5URA!vkE|pbk-G)`K{GPM +zSYl@3&uUhhkud)&{JPY63z^p(^Dp2{omW)s$eW&_5!QU-1$j4TA2Ix$%vqp2<6t_{ +zNBmsn?z@ +z$Z6v`^B^>7G7bkvK6`v`f{SeQE{irLo=vHRHP!T!VSJr-R&wvR4iUoweTv+0;6oQ3 +zA;0ncHZ9uDGu|>^0TJR_;y9R2B8epn8!P +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 +z{c6T%g*Nn;RcyNv9z5N8lRE+@Mk3Z{?W?U_ +ztuVBf>Jpxnvn4<06@?@x}Ch#wS=Jj7K>uz3@#b^R_&+nq0P0);!$FN4u(D +zU>2pxn`%!ZGv-(~*|N_A*yp9tA3C3P)Y{~AK^vMqD=k~8fZs?(3pB7Ldl_>-jCWBZ +zdoW_N&gJ3GKj>fQtX_R}uJ@X&4`c(u3HF6=mB(Y7&WsnZhcZ%IP5Yk2{%`MT|$e0u>NIzoGsEM$w* +zRz+$ZJQX%Aj%;5LT5hL;@@H3P!~Op3@oDJ;`521L>5eZDTO2sorqoXfb3x3FJ|gx8 +zoXR`1h8@8&GD(UDNTxhLctBrx^Ay=b*=L7v?lt&7hV3` +z&UlOeVMmXA472dl4K?k^MK`XdTz; +zxT4}*)67k4hnj~YQv*|~{dm_6^MENd!v0y%Jk<h;U_R2$_Z(2&KN^C5Uc +zd|3;uQ{nTm)?9R98Dp9lU*z%9_B>uX&*3Hcv|Cb(Le=))2NUqpa(JmF~8xnn#Gux0jmP#OpVAeamXw)kf~f +zG>!h`JXaP{kj{4bg%rq(^tT!`Iyx?^{KL-U60aqZ55_{(o)%N3Tz +zf7hp2LuD%Dl$(pZEK7|XG%v&Q=EaXSXl`8@SGMvQ+WNPnxsK|>+wC78y{~-|>n&`g +zWGAu>Tx5&LF&JZ+-PP#*8O%o&_c|zVQuY+O>=Egq!f+>f&TpV+JCa4Ar|qGX4^;fj +zdG{f-B-<6fO%<@ltAIZW=&JymZy)c=nL~av0qUSm|J*}7@f&ekh@Zpn +zw-32+*~E?NvE!R)dpN$~>1HM|m+Na3bFr*l*qxP`OxL*fe7}S58-5TzkZ=C)y63kK +z!CwZho%Lgkcc)|bEgZ9}x^&EnYV!QMCYuG3QsmMR6W(nhp9QDZPx8;#y%n&vX5q1lro&rTpQit)zLWO@WS2HnS}3NFruC&0(xs +z=V@*BC*HjaJR|W<4?&*nVI3eneS9bLUSNC1fK`KyUagOwiJJ1Brp-XZi1a= +zojC-1{8HXaX8AEv$;*x0Wv#V_&h3`0v@hc9kD=A94a@8gK2lEo^sdvOJIRs(xo}Ot +zT#6-xu`c@SDibRk>!JwIn6~S~eHY%AdB7c~`92*Y(V^GZ)XBwthR~ +z>)&_#l)m3K*VXsLLRj}s#@_h3J?E%oOJ!QDwgUXpro4)9sCiCNd$E39(%AXbo6k73ycIrIK1W5rAFGG)EOlfC +zwnk`?{T%X3@mnlG&?15Ltf_H4he*5h6N2l*|ak>`&%T{8z +zM`9za+wFR61KHHVW%efncI>IMiDmO%Yn@RZKS{=4=FMyGEaErJlj=2p@0PV6J?`T3 +z4c?FT%DZ$b|E~Lu{xf^{zPEQ=#}6r^vq2Td*B!Frlff{or>y8zFreG}X}N)O=p@JV +zZ7F4BC+qB+!SYURF8_wtAC+zJ-ai`vlo?q7cC +zwxc%GZvkzHX5OP;`F(%QyyW{AG~B*t<&)< +zR%Rx8cy(gD*gY!`x_zs>bYjvgub8sRONVE3R^}A1p5PXJiq5aigL@YB1oJmPoZi0D +zk*DrjSGocFv-=beS3aJ?l=ty;19hYy?gBsZbNmb*klbrV{!Pw#`$z6{P#WQ&a>>xwpwzv +zKhz$y>0Rf6bHA)VSE9=;Km0gtH&f4_vv(ZYej&9JyFu+tpq(bUYjGmHYc(_fLzMHA?R7LdwiIaKhudnX8RxAI!Wqu=6$Ot +z_qfLUb_3sj#y7>L>=HBfWG6PYlh~BzJCgo2-+WyA^f8S(g0Y#sa`$nc_2BPgo$ptY +zD;`Zbe6j|8z}_4m|2nh3f^lhHG++65ar^r@;^en02WmZgDb{#7KN@#?4Km-sc@=vJ +z2y*jx+}zuxy&>y3H^MT1JSv~vN^?Q-BF^uJ_R`JHIX_j2Db8Hpnp;P%nAUD$z4p#7m%I3gKZU>e#N;@1oC8^Je^&;3!(O-ufzZwYh3>c-HS(bu7!BzqM& +zx0tiL!ts|_>#`>#nZ5I-)WyK0y&<}5W~%k$NQ+fYyNzr8`F*Kc=ZooFqN>D;)Z>hz +zR7)rvF=kRVxODe7IQzQX{SEp1y0o|ExO*G&=t{EZ*IymT^B4a#(Wl?G^85?T)TC%Z +zyi;txyGl9!#pa@wnk#<}wdY2AaON_Xnn&@R&IDcGb}P2o%bVA8e&VFVEwydT-=x~o +zTFyCGHI#U0&}y*PTTh~wR^XdlmJJrh>?r}oix;JA-p#|;-_HFyY4+4`Mga0|$*M}r +z-bWk-T6&rXyB7VYvon*XFOx7Y^LxRX1UTb=&iFY3Zr>*lyc0d*&a2L{Nyc{cJQPq) +z|E;|$M?L(h-0Aax_QKyu*@1THXAS+WsVIEIW`CSx$24=Vko04dd3j5N>DzKK`t*{* +zj~Kh#M?H5&Q6@E>ekiksGHZr=XGFQV{%<(?b#Ohw_D+;Lz%27zLU01xdh6b<(G^YL +z3|+xkxkHG3MeoG6Gv+;vS$joVy?8eGS)HN&On9RwceIasb=L+Oo@svVqwX&P-*(`- +z!8)xgbf6`^Vt)&)jZHr`h1>gJm>OM@l4^F$TOZN%yTNwSe`LF#O>0>JViYC +zR?~*(4>{Skj}k9in3a!EF)HnChdv%z8A_AGyD;06yRUtkl||Paj76RKrO2twZG(3@Ume>MtZ0gl4SoavUo?C2 +z0jstee684zv&Y&OjpyF@(Zp2-8i^)}r=@$jM^f{*4cYK*>*em{q0icL9p9jPHuHJJ +z4xv%z@WYs3L5{KasLPqd3%&W#vs^CF6~)$B +z7)r*1g-h}IG%$b5xXbRz6mYjb(f1njxFDSX=1y?+3iQP{a)%bAlc7^1H}l)fa|2Hk +z&mx`%o-26f@m$JN&ohfB&Qr}}^PJB!jptmRDxN7k6M4q-gn3To8Ot+?Z0f8~IKI--o|#+OGxHjIW@65snSgQk%)Dz7uc};t*bp>O +zE55!2`&=>C(5ljS#i~v5(9j3sHH91P>#T+j@%oqG^&6OX$dFq +z7f4q)jT%O`8?Bj&gH4%nZh%X +zXFN}s=Tx4tJY#rDc#3(7cnWx+frtN)dj;5D>F&)vh5tXAO@?Cd_qbi+r-k5Nc#-3l@rGmeil%M99d^So??~MgV$b-ExCL^KZuvgE!It6aPd}cEwUXwRJbf_ +znCp{QT@7uW?9i3ysch9V@j~>Y=qO5_?Yv-ThxTA7uc|L7`nn)*Vb6u7`Ml#$lPd>_n?E@_Br5WubWFJbuOVA*;?driM7;Yq4(>a9l%f +zQ^FkB8Lt_!KXzWYDE{dK(`Wu*Q+Vd6Q26PJ&Ig_MvhmLg$NRs<3c^p9cV5k&Q{iDJ +zvT}Nl>_X+bK*y0n=6zx)7%8ir5f5Br$4P6SOzx2ai~0@y1|iBlCP-Pep>W$?%9D=0@*CEs+S?|$hFjN1ENmTYJN<3T +z*5N+omBGSA_SNXtUUD0C{zB)*I`*}dVh2^nYfbyEHs)h;!e*`1&@t0A{Avz3yxN3$ +zKRflcpxw@XGW=f)*mJYOUJ`6*CojUu^+X1;muWtIRHyH!ywyI*eqFD#(H15 +z&A`td8s!1U*gqgzb7Q}LV#@W{_*44u(q>5%{|MexNtT5(-OPekjax9I^*-e)#aSs*9<@8!?83F-sQvh +z)>@YjDU?6S0gRFJ@d1+@}HgGP+4|vyx%$uA@u&2492v@8ZTI*8M%rn^R`y}s3yk+dJIxM^vs1re-qPL~$8MZgXUX4-?(NHb4NmITt~4 +zAh&Y{W2vpYrD)`Iay-O~>w#H$Nu{RDe!{YUsdLiEN7>!(tQ%R!;Kvj%V0ULUR*mZ? +zvt7IhcES7Y&uY!rDSMuE%LT*~!gd>Vgy(;U&P&YJWE*2t+^H<|Cb`UQ_~|#=UxCJ! +z!!yrYE*)Iy(7|iSla1sF@3+5%ekw2zWrM`P!)BvL|1;7XJQ?;4<~wX&Tch&Vg!V_j +z7U-n>N7!W3dw35GeD2XAQ@Q$t&a%4OLl4>iKt77vQ(K~4VWE?}W#n{Rf6|=lfZb4A +zXlB?W$i@7?lHM3-lXvvH8(sMo#^<#8$T-?7H*ee0-v_M*hu5Z&S6RTBTfMpQhUK(D7mBurKpXFD51&X@14qcb~hXryTyqzs4C)G5am}M*MvbvS*tWMt)wk#^)nn +zcKh^l+45uQWfpBo-UdR2_J@7*IcMrX?6%x1qF3UU@%Uv{Tl+eXCMpNf#N? +z>2JZG+FyDJ?R~?md)gqma>^jN687YZlV5`F5gtVAin&bla3FftnAe}fIs3$jW-{Iw +z{H^^O6U}BvUM~o3v=ff(sUdDO8~a_fRnz9vUVgc&y>g;8S58%I3_(*GyJ)Wwy!x_D +zGVNPV`Iyr#YsHPqC1H>HFYoG`ehiOl-sa%1cz%|PYt32b**kg)I4ifpyi2Z#>G%vf +zM*5`CY_ZjMAhZVgQNEEogF5^^OUUyfcDCHYx2yhj=bh$N@eIwU&ioU8WUrp{Gq*3x +z7>7BH8UY3(5I?akkqGPVB*8Gn|rWFFm +zeh)@ph6h5why=}dZ0`8TgYj)(oD7WD{}mWd+dAxHFrKz{?^K;1KMueC{I0|3N*DK$ +zIOh=HJ6e(qb~eVVkbx6Tt2e*P?c11#1Y@wshjikOj*eN>HubShvwYkMU)Ol^HO%hx +z=C^z!a<_Fovhgf4Gg53V#C~n)sQcJBzk{CoMWp&~9H&1IzkX(54vtjq=sE0->!*xM +zy7hi+GFMJ4ClBob`#vjyoVXnsvD}k^i_-z%9@96!L+b~PZR%sYXFbdLU#h>sslVKl +zT`TN+(A%;TH9l9qjelf4Jd(>T>na<%s5XIrVx%?M)_H_&=;&$W^c0ZK)0>;J`lraK +ze0%ZVj7?jz7bi!<#*>^qJEZ$gtbbfmY@?17lkbKrM;zhxb +zWcC947QX#AeDB+6ItN2^dRwcDpS_imIZviWg+li4kLIu;?Z{2wC{WlKk23a46pMq- +zmGdyE#jPXWzngk@QqJcA$p;_zU(3V2%HB-b*N(b$bvbo}&%WTYY%KJ&Z8PTy{LohK +zjO?lC=m&atvIe=WRrZ9|QgxO+>n-Z!)6yaElW+gIvM$zk3guMy{X7|@xU1xl=F2iQ +zj?NShxpsU_+u4jy^05l}IL4EY2b{Tmjk$I8?d!Q)=`f{!2B0v8t! +z`0Rw|ml7_{TpQrDwM}R3=oyR8=eDEco-Q;&dlIn9myvVUnthq`&GMM;vGVQDZP=gp +zU?cA(Uhm*-x{J5R!5boscwgUE;qAxHm|fdX{PwUj-T@ogg*n#tE86kpu4r1g`G-Nc +zaq(Hx_O>^_$~%>eyBHfzI!v~X#&$U6j!n8yHc#rz9X)fwiPmy6WY2a+;vabQnP$z2e9ObLU^yP1pY>qz@oZ>!6Lp=q +z`yd^5rw0SPnUxL`jlMWVdVGD-_xOxwJ#^)Uu2d_H*Jn0o550B>ILHcDS +zZ3!Q3$hJTzXb0iJLUWD%n1@f{LSqmP)u!56&=1p22PTa}c&)$(rM7I^41{WI%*=^_LUdeRV2K-E)E7SI&ldumRy8mWgKY~$xXw1|4 +z;dF5)7&T_$ZoSiX%sv%fk`B27{E5c$WrW(fez!{lvZI9iOPzWFdn5gCr%sVs>(Gzn +zY_PK>u63NlBc8wSeA5#9Gw;g6v*KUSlsa +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 +z*{{c1Dok8w5f_Ph?-o>yCbXJN8kJ +zH~;jfGhl(4dA@;pF1N4Gn`aw8066Hkho$=%e=Fl|?acG@xa0T}x{urzZ!9ghn|M0N +zd3Ps;tDnlf;=r{XS+Dy+U*cZS3%vWn5|o*PJ`i5uC+yW*a|wLLaqxH%@=Z2a&*Lt< +zyh~k5dGXUyVtAZi(`$~fpORRg_TifLXm$$zVd7j)f5*0SIQCXvJH>ycoqr*J%7;aF +z-3gZ8ah9R%lizvmbOd}@bpFJAU?I+2SY|8N!L*mMKY)8ey)!)IA2u)xcV$xow+nX{EnbP_%$Xxi+;to~hA$&Wj%?h0n;f&XI@URA)5CWua#?2qpSf(5E;`$Z0 +zt_7duH#C6v(xg>U=BzV-H&x16K7w0kkhn71jU9tq_}7gc>--hTPUfzE&F9;#KJV`J +zc(;V}^M&(i4{K}+fJJYbDU{Z_$vGGzt9^9&au;*N>iga_fB)$5_*-q +zv9MErDK1X=i3nw;tbMrm@6iM&QqyOcNgXo`rHMTgpYSIllGf8_0Ma#e8 +ztQGlsgr@?^l^n-jIM}E2d0hK33{75w{CCHwHLt5zp|9>Sj8|<+w~l3Q>}I!Z{$@_D +zO&R2LnzqJBULjwVV;eQW>U3Pu^|MP?s}KKqP|Zx7Z4Yi +z-z|7f1)c+685o}lnfQ3>hON&2KBVu8y!K>&3qRs@wI%y^#WQaGH;%gJ(P5t<$NF>R +zkYfSn#!dz{MdL-tTfw#7v(dlp)otWXs5JHA3&H5nqYeKK#70je+0uE~Nio&ex(goRz7GCJUO71xR#5PeOX+^s_$Jcc&#nJ^?d|Jz?OWmK +z({A?k2#zpk0=vBEk6CaF=4x~r{0+j;HpZ +zwaCj0El(?lPk623e1l(jz6as)Qs5ZeUKx3FYBS`tS(BDu#McEre#cTzbff+?*P7>~ +zDOqzfxipgP%~`ukW8?ntRIIQ$&U^MV)oDLDJiZQnu_zoMPaw$nq7yo2nnX3{am{ZJ +zu$P2AKSp8_?E#@*%^(Qbo)kK10?Qan@deX@oXjb7+UZ +zlX|cJgXCH3o1Yiy<4p8(uzN?3@FU(3UUXl*TP4Z}8k}E|tT& +z-5Yn3_CNB*t^Stsf3wrqmA(JB{Ko;-GGS!HUyFwYgYH~RbYxa->Vq!VfA~r9rqdga +zmABieBR^sLJ*6qhT8&pe*^7};iqnbq1dniOjJ4*?z<`WOP}ipqpI)1ICw%1lcU>9f +z%3k|#jAyzyIDR~Hw+Dki?%wQQANRre1LMx8m+jQ`$DBXbOx`%xQzn0$`Sq9b?f)1;llU7r>Orw@xQO~a4&v|Q@5RX +zh5S1CYc|n{k78Iel*a=T%#)l$RTjUr)K2XQtu-&MWX@ko*4Z`t6>@76_1k +zhhHqw;MjlHttvg-SS!ErBxLV^-?%Y?{krBej^7x+t>f$cOrQLt@*xMV^yEM7UX1Q? +z=YgCMa#po=ozgJ1`{y6IWv-wM{+A^Fu+^oBu(S7J`Qoy89ePJOzGKMmjaX&qQ|x7H +z1F*k}$%0LSU*O;hw+(XKB4cTXyVQZ*g-89!r!AN=tc?ZNOINt%4}PFN>sHJEoDbUr +z9!z_j@4m19t=K6|ZoO^1ck$=0ug?F1`+hy|HBOxw7jX6}Fjn-z-ru?3m+~EaV>8Zn +z{4Gpc4NHs +z&aiVQk<(9wO^ys_krtNOwa`h4sUt=-FyCrxBy&E?YpaR2v?h>F5e%Ghp1o{)X}03c +zsolTK&3}G*C>quNL){IS%blG#!77dV^Xkv3=CjG0&#|<3JUSajpOs#pAN==@o)_}^ +z4ASSt^!dX6sok&Ty)WYZ<-BhKmY4G0b3Sagn)mbGnA-hY-jDP61RemtZoJKy)sD|f +z@d=GfbM|v^E8qW(#O}2&xdAx7O?~V31@RO(5AI(OPq2S?jJa+#cw4P{`7~L^7|uD| +zSa)_*AZ!8UzF%Il59SFyD;P?;VSUI!#^ij|IhncHyAu8^ +zBfa?Ejvk#;qPC7#_I=96y|QV_{*zZ$>)9V7@AK`QB;TEOJm0NlP4AVRC|w*#mU8aj +zXZqyF{T;qS`EW=6r;AU%udS!9zXnp9*x}gwT=QVc6UNkM_&X6cr^m;0H<-@xDdVoR +z#M6Nf0-zS%QCHvfSo3huip923V<4V|^;e(BDY}Qn^&Hkn$))l&M +zgR|MtFOh2c%ACR-%$zGn{qjT^<#nF0{EzBm2z^9DA?}?Tw}-;51V#IqLWMT +z(~rg9U|Dr`z>3*A2dBu?X7EAqG;R>y=qJx7OSo6KL)nAJUpMvk;;T=6~S$DnY +z`v;5g`w&amY;$g6+}!rWG;bddKCLGV=lt5i%IqA+ws3PG$hRZ*d@nxpCpQ;yw!6-+ +zCM1+vZkiKza4zTGjmoU!p3n8xk}Yjk<(BPc?H0=lOOL1K6~3T5I)S}3RTZ3@*+#kT +zlxsJ(I@uz2@$PDb77l#kpU~rmsC}-;7V}<30__W>#`%H|MwW?$(?Q9Y5ju +zH}<@v`8z9F`c|p#h}+j@ao?qL$HV=JTH1biXq)5vWsJ`KQaY2mnePoey4Q?*TecqI +z9)=Qr5AwU0r;|tH=Pde6sBl}n1^-->wnS^RpHaK)FK-ELs;=F}H=A?iIVUjE#N7)4 +zs|LJn1YGTbsU@d9oZ1~opRygv= +zkOumkL!WLg|HDK4KF^}hvP3cb62NCF8g0VP)Lt%l3)rVS{&U@n#oV?F=LX;82?y@u +zUha2e-~A7l=4ZVe2ko`XDX +zW1h0`hH?Tl7YE4|^5?>S3poXx^Jvo`_XD?A$5#aGj(JXhJF}bUZyxuLTjqXvXsc7E +zEK%#6199i>8e#~Y*k(t2_Z&EojaoCH!)TKD8~waCN_3^MNCr1&!(CQr68vMG#`m93A1ss)Y9#)!D*RzpNz3yaDVJX3DC=Al*I0BG#qBlKoI~FR-gDW) +z+Bf1u&4Fy$(AVrS#@?rRgYJ$n1>?Ge`&_OzVb#>czX=RhMQ!|B{6-4vYXkeqKZmDE +z&Fbp9lcb}rO%V5+P)a`*x$(W@qKg-AKRB$A`>AdZE$hW_QpY80!rCdhmZWd-tMEBmL~I?5U*)@nQ}7T3gof?P(1rJ9)kKH5jmcFFfyZ_V9Y#W;|| +ztqt6v2OTBB^P|Y1%u;0DD0FZ>J=UQA^69aO7<|Cm9C2vUDr2q&WCn78vYWf!g9e*` +z3D}a>?csPeI8r^GkF40*U|I9u(C$+3AXqK)OXOJPX5efEPT*URE(^5p^5sx2m&%@S +zU?;Lj_XVxZ+_>H4#j>{XwNJdsnFG%F>*D2s2HE?)D-SM&reeT3KvOd&=sc!aVi@;c +zW#EC*p|9FM$W3?VI)9Gu#2;K&7^xj*4#l*usID;1xmJgCh^%9OHL&L6t~T`8+p)L* +z-GxIwXWid+F0jl-HvAi7(>#FZRl4Uy_;`YLeO?rg`uzAPw5fZ!nifKRyliAf47X4xhj{?tmYa`6=y62P5aZnm8|2a~ZG}2tSt`3 +zj;kCv2K1BFKi`d%E9KtP(#U1(%gCn_|9(5+MEH0p4#u@_7DkA9Ny~e&)dFfA!pYtuxI3!?b95;_}0hgSmiHw#_`Lp +z%SN^%V<)2vXL7b{nSJ3%@lOQ(I}`rd&>}enJ!i`rHq{FEWixC?_LU*&IA7e +zN2WV-4Xv-uRN$kJ7S+(#Tx_nn#6dTv!t@oh7K8JJ+=+H$eADo@j$p-&@h=xQv?Hfe +zvm7`U*bxVgG7paB4jgBf91F+ACHZhf60*s$73gO%=jM3)v3qv>LdqeFoW8ZMc4DxS +zdmFhksAxsCh3z6a)iPS+_WLW_h-^-%ne5>EJsih+m%*$NnWeMk7#_a1(Y|AV2+Wq==#fjXp +zHp8y1!lpP8Sv?e<{_$|TeY@G3+B&@LCHcy=?n$G^6P`WNiQoKR*SkF3@EUP3>xDH* +z>%BD}4iE3H3RbqJkynAxwRY@8yCZA3KMR~}=dPY@ye~8x;z8zZyY(LSulBe +zXzZXFm3gUCc4sJq;nv;>-aD{s(LtP{C;huI+dibBL+?w#F}$5wZbfX)y$9wqvm4P* +z`Mi1YuzVVo9H0(ksSmujHG=%mnCj7&GqJg)@2Y^kKJY@nX2%>^CXn>zA8})6LNs9XqixJ=8nf%9qLK=GC7^eaZ4K9i8sTurd1O76(A}<@tC`?a`y7?$$r_2h3pvgc(Y#IqpOdhC +z>!@ovzRLVHz@C@6GcH#PjwkcH#vRsY*w_-x@%63muwOa~?GnoVSiN=BbLr#tt$*Si +zCFzRiyz`XYwT^3F=>27nxwyN6I!{wZc7|_bXs#U_);etq1l +zj|OPS#r?-^^am+hf=y6wt=%l!XeqL=J}7-Qu%3(r!|1aCeO(XUrOSLhW||9--zB=3%=cUefg{PD(^ExKGp~K6q?(+q|1V#2Wzhly~bJC<&mMm +zhJHDouRDV1UA6PXP|0vtcW|~BykFMl_o=@AuHe|Qhz}%t3ZVyAFJiM`|MlyR(A@a@ +zA+0sIf0c5|?FfeMj|5p4EC}t74K0k>kA}kS`WCF=UUudTzgm_vP_j$mXYSdFe8f5X +zOP%_2@pDvi=6roEwkP+}FUf>L8{>hRNE{nG6Q=w(M~8PwCPd&D#@;%cSc3MT>l_aG +zp?n|ISZs9WDpl555s!wd?J@lC;=i)B2EAGks;Nt%zySw?+Bo;P6>r~jR;BC%uQWXqI)%tuWR7_jIVD^ +zp00hA^T^<*R?ewGpUurYza{he6DXN +zIIc{|wm4QlhIjk=@kb+En5#bl<`UqMu6y8wHu$KLb!WbQEJHsw_UlKT_cEX#@v9+M +zpZLA>V<3|{LHcn?>g%KA!-@6l$FDNJPGqht|Blsx-%hs74cW`EeGbR@@G!D464^_8HRz}#+><)YO4*VfqPIGS)?SYdVQtO0Qni$kJPueRqXFc>%iLXo +zj@}S3@1WmGyLJz^pUcy0U`SwPoV{hEBPx!Pl&pG&P-Uofszlc`BrW@VRbCv1Y1u1_&$j}p$neY|j# +zM!i42U2({Xua3OV9lPv`=HIagBq+OL +zK+ha&SG*lN>&I?+t$A(A%P#o1UBMYdo?Y=L&NI}UiHF4}z?%6Xz9r_);SuqlY_8qK +zcKh@Zf0+;6xvNZ#IWhbf=5DStciVpJ@L+n=Bi}`cs&zt73gfpev +zz~xfe>1IJ9xchoy5)JS}lw8T_;J#AdnQQXH*as{7%#c4{6&%%l>Qomm6X`!*Y>=<+ +zy_~uyhqDB*<8raBUQAjtrNDvn{zPEYqwyh|HpR6^L@^9}?$E$8a?#~iUeKnp@jFaJ(%dcQ2*>8w>MQ$NQZ|7$YhrzHb2Vv&bc)VG{TC>b{Rf_}ZQyQC*{X +z2{3m{k)>(}`oX^D{2bcRnt8Tki!89eXcBpPd*cT7rzM7%wtU3-K*Dhb)?XK@Cz&azjZZ$dA#frWlsv2pPK9f*xLo#5u-#9L$9I%Ef7Bev#p +zGq8E))BsaPcG2TU?{jEhyro#1c&f=%W}3~`%p|KUlC5;{&pUhxTT^>}y`yJHP<+On +zxk$sCI6Ug@?z#e>v7SOFSmAk +z_r|*Gp?6|Ow)%3<&c^9GQrH>W$yl3^+kU&otV}jw@5*OI+!@&9%RF{GldNm)-Fai_ +z{gw7*4vZt%KaLf7Y60G79759h%$1z4mLKIj!J +zmFR!P4od025?}My)Mt+FZ2vU<<12qS3Y}be44&VO-PPY#INQ0`-4`6N4EyI^ja}TO +zHSV>mR8MEA%{iv-+p#)P1|s4F=B12`lv4#PX^SL|@cEZa?IGHDFW#JT?H`A%=3 +z&Xt1Av7w`pk1X*|C4Tn#tS>gzR*<)|fU|gJ#F8-iW?9fWb-Yvm@s5#JixW|*RZ#?hH +z*uIgjjJ*aMk981hgz@-&8nX+r^*WISi@_M7o#9F?V^VT{&e#|CrSsSvV_EPhnBR3P^MCWk(_O0Y5-%_bx?&$f#DAO+3 +zTo|{4yI^LR6|jGw$J=U0e*GVB@nv5)tNOF3FW%aRKS}a$ubI1fmV=uEG4O=UbLC(t +z5Z=9)KK-?jG5hbgOhwm72RD`A2Hk~^XDW9`2SVjh_B6oXx8^hsALf0}5#K>Rme3D= +zwf?mo>yORyrB66)t&jMgFT1|gKQ=qt%y*6J71oAL +z(1h-SZ9rDM#JW#hg%)Wu~G*j=htZU>WeGwVr%QDHaU4!^UI<}s* +ziqkv{6>{N~3(LVPKK}xEWguDb%J{pYeHZW<<@y}|Q=G}`An{7_EZMmER7ma1SS_W4$L^+xz%GBA`T +zbkDl@Y9;(IoAv2Cx%p1cm;9*mtB&SAN!jZ7UY(fzue^Let$DuvEO*YZRtqyG&N%G) +zBYIo3c7!?5805>f@a4wv?=VMO+-=chFw{xvew7mGr6nIHFNsr)nM# +zAqVUEwL;4y`@zADA5GtV(7;=zu8$tO^U(r)v7;QmbH}D}iSMGd;X0jve>~p10(e~B +ztArOUhxeGb%|6e`X1e$z?r87j +z`1rRPzFF+u8dV%_r!VGuF7r~Fue& +z>T|i3j(yF$%!#Z86rV3|SR4;Nv@BlJvkd)qBmN9Gx2E55_C_gdEq*g6 +zu-5f$1=$H3hlJtR0iUm}IcKa*(uvX$RvC0QpdYe5)A2`29)H}IcegjTr9Wf82RQ5e +z@IGP`$h>}<*$>TBbS-CXhrT{WR=YG4vu{Dp_`KlD>xs1YkL)`X4@q8s)uZ=(U!v@> +zZ+rb`pV`rK=tIe)_qO(7ljX~yFAug=Ha$@L*oSVPgWGHJ+Dp^kZ)wlBT_0lJ19#fB +zBawAk#`lGxZGUm?$GY}`Bb3)&iz@qO_fCE*x&Nj#zK(eekW1Z;9lf5v_wf5#vEqPh +z`Fn1%+)l)AH`=Eai3d!L9W;yW0DlLGg;6$5J?3Zu^Ak<|mOiF2Uh$D~&mIBZBK-YJ +zq0@ih+us@|xSM)$@+CH*Pdb6)cuqp&qNaD1?LV(e?BRb;$3Rq?j1c3quWYo!?H%&bI7ffOe;p0{I$N%b^NCIy71wP +zzuRa-{?rSBUpyO_(HO^90S}0G&&-xNvFGL0{GWNY@L1h+A8Yu08*UyvpmntPfVMJ< +zNel&tqRVFTvXsv{wV|ZD`ec`v+riU5Gb)qp*wM4kEJ{`&C$@oy_lrzNyIGPlfy!({ +zU~aYmfAv`ACym@`!;VTKyN}?9Sr0yMD-Q2khs`58mQE91O=5oUdT6B~ur<4&@HO<@ +z){LV+0+n6SqJ`D<@N)#*yLHIJLrx;sGy8z&sFgrYRKhQ>PB@Z_w2oy=tgXrUeCtQ- +zziU?xV;Sd1tFPI#t+BazX@_FN!wt2T=X;YcMlw%x2Z&`y)P{UM!_j}_e<$R- +zaqc7zon@aA2)9>}H@K9%8|j#`qWO)k@Ahy^ex(69^Hd8lxrEmFvR5tYK5m79iM$r{ +zrM`_ahbR1qclTSz+OqhS9QokK6vt%-bX@^3&OwhIbZp2aDfxGSrFDigMy*{B#fCX> +zyK7hEdt#;4(5`sj=jp2%e1*Z2&WcgI(8q~|>@31x$M+21GyhrT_E`^YHH&t^(YmM5 +zYv6}CBD}FOYt=Ny`JTBOT#cp7Hs(aOi}FS1pm&4NNIkSw7FuCnu9zA&zwWb_55X|s +zn&+^!1bgOv#;`TRIGDfE)-dx~gzn=1jN>aIPf50t6`EpiV+>_Q)4@4sDlrf8lOK!s +z<>37c@II;Q%y1icpJIQ6EhImW=0e{_ao6FmdH0%WJ7x_r81K6t9l(2Pm%FBR@jjPv +z9&+w7o&y|19ehWzdFKLeB=IA7tua&@`6lZX;oHZt^5%tS;dp_EU-7YYpYU5nA49D$ +z_$}XT5l4F*yw+2Hn;~`s&QzEGGo|RXt$cI+5AVV=FSI6+H+7~Bzt&oG`BwO9=g}LX +z3GzAL+6 +zHqq)3^7FJ-nFijtPZhk)L4LUTvc=4aOZR6{egXKO0{-h<{4)<$Xfpn-=^fSdCHf2p +zm*C%eJw`r6yD<+WzE7@BEq%{ptP}A`<#I8n@6w_(t3%kwywBVbYEw=T?U!xP_=1CU +zzGWtNA7$@Wk+})D=3wV=FEG9a`G0|xdJ9`zIhpEuweP+TGz9frSAG&lr# +zFZgO%n+n!Ha7N50`MZYxS@HTQ*~^&gmQZcv^ZW+QD$eh|jx*YKX655r9;%3N*LEaO +zxWKMJE{T4%9%j$la?yr#vet{Tsou;Tp3s}y+_l_W*Octky#i-0*LT0{E#9{eo|K(= +z?6;e}Z~Oiq+TJ`quB!h3zjuH3DX{zGKDoE3oVhR&d6}5hCYziqBS=x^u#p(wor9cZ^*(XgQzvt_ody|{c +z1^j)#f8>#wx#yncect=~ea@R_$b^3HeZ_m$-7`M3iRZ%6f3YtHfBVm+hdESv?W@A) +z#Zt6?leSUn?}+w>*;`_q4XRUJJK=@+v-tVkyssdCYT)5DZeEo3b1?a_S>Z*F_V_7c +z3F0a8k-#sA8#ktx(Z@h~(%eeHaevJwr+Od0$EUh3_SfIm)~$O<2EO}YezUC!nQPoV +zdD(H?J-MGfxt%>Zhy0B_@x@^$MqSKUR_{fWm^~bs-dZLNJ%O2K#HKyiT$tNT? +zp{W*Zq4f9N{WLN}vPE(QKHMPrQOn)l{(i{Eamt=&-P}^exS#gMm!G4O@mJH2-c=tO +zQ+@cd>GPfs(a5)h@h{!q$7e_Ju5xY;GM4N%pJ(`X+hN{CM@ZolLFP|s2=ToVT&rdc +zk~^Yncu=qJKc9IVg%6ZwmGF-7DUX0(SA%=w@e7rXGh_2T)%^Rm?nAcx5b}*9^X%!4 +z{95vv!5{HMi2u|z{eHmwKi)fkCo_*eH2>$x!>neWnvdq?`$Xg?`cIxs=QqhO?Zf%} +zb_Mt*IvB}2GvGrdd_Mi1h2%+@Hh1#f$bype^?6Bmj{bT|@%fLl7ddZ_HEVh1|Fm^q +zn@2q?_P3OEh{h&Dhaq%U-PvGUi#)$dBkL(xtz25o +z1s`znxc-bP>}uIVad7W4_J0RH3&koWYrr|y{5)%~NDsE!SziVFvL4^x*vuE;jU(vy +zu+<9xmG3W`_;(oJUx9NPG>q@>G3ioogp*GO?Yk&4sZZ}(+g=A8id_9iezR)yRo$7iz^X}0m-qE}e#iG$lUngR@*2_S%kq66MJw|x +zp_xAJ?Hr +z*EjJ7^S0iegio+0U}x@Lt30v%ZrPdreG{Q@QCSwgIL#;M6YSX7*8TPo*_fgQJADLw +zUvOT}+!Ns4;_%kk$QkPb1y?uZrGS8~pwf;GO|4*rLylh)E_f_e7ztnaD{U*Sw) +zFZ6yE{QaGtvGCj3nW}IVcFzIi;37x&O`S&@#Ue!8TCaHSKwc}oPP{g0RiwplMXzn% +zm`8v6Zl3!a?^!3$2J+li?^y@W2J+ly?^!oe +zO7DHaubTI&!VhwmPUlOCGGpzr&JcT9Y^c2+{@YR~ed8dun~x{Lk>Xzba5BZbFT7}e +z!^B=Lr>(D}Oa?~cBbtx+sQAjC$g>vR{*Cy;%Ef0B*EO*z@k84Vf%{eOiUa@iRpY}{ +zY`zv6eATo0d|M+sFrSsbG4omTmYL6a*vmm(NMpY%{zw1%{Sp4lPvz!?X35@fO`Vy0 +zLLWl&v#j^>Hz$c#yS|q`U-4My(PBeK7IRuQG{~bBzwG1DrTA?PpN=(MK!2J`aLxng +z`xE9lU)?n5FqR|_j>Te=S@ZgG +z(Tk=h3TP+2SoqSHi{6x2m$%l-MQ=^NkQ*5=UQOyyR%O5O&K@wH$wilcPGeS)$G9Yr +zi+)9-jr<&q*|)B^a~=68ehf_On)ABxCGE_TFR3JTAM@CFoIJE9aM!i}twrnP>liFN +z^7yLg93i-s1?*NU;XdI;)J*D*e4s0o3Ea==^ECTfj4gtR~~m=d*NeyS^J}JPI76s`xW!f +zJ@4V2yIwc%9Q58PI8b#=zuGU|`M!U@+6ef-?F0ByC;;abzcg^p%QO7u3FaXkpqaf= +z-r=fOW@BIPi$BWm!r}Sk{DjGKRSX-wFFjZF+H>b~*Hk5EF-qKXhF9eE;bLEIYhS$e +zy90cf@G5Ku!?QHTUE$;tqukuN#`MZ?vSU8JEa4&fMy@~WvO(-|-ogwtn~C6OkWWha +zt2>d|yx*_^8NH1hyi#H=Q<=MbMATE}PU(H|Lg2f&s45Y0=c~LA*~M|^4)&@Kuh*;& +zF4nQ%O~OUi(}-ogDT81v2vW&Ktb!GBt<{>#; +zI3$UzmFy}@M)12zPFdCz_{i3bd@3VpH<`67CsF-q9~G~i=E}Smdwm1SL0oD(tl#$w +zRIQesKg8NUMn1%8#FAbok6bpaFdV!R?bUf +z3;O`iH+uWkidU0!to{07UL|={B@NPjm2Vqn?Ww$`4l8eSCY(DZwwTZ2J;1a6x^}0d5QEtJYeZ%G$HAJnr^2x8C5yJmLxq-Lp=@)!)$10_Nx9E51tg1-`T> +zclvHuSG^J(xG5vQ(0{`7C$nc$*mwEn#CHd|zD()-J|0WQ8=G`}YS5v4I<@eP-{5DK +z{x%H%knwAdPge5VpR?s75?y?mI!uKQXAE3@RC)$F7W(na@mi}jz4tyJw&pA#zom*F +zG%$Y7)sN*X(wtsE?~z|oxa|8j=Oj0gQ!0FS{e#w1nfHUwjhrd{cko%~4u#Vrq2qEF +zmVSQGzW77E>v1wOTMXY^<;kbJl_L|7W$Sy}Ml$2Qwlm4qsdo2S^kCLGAD`3;e#-!x +zc6=)<`CLFW0Lj&DZagL8#Z%Vw#!(bkQA~yB&F#=#7Wxu>r$+GZo__N6 +zKzvDHPAk)9AKuDnPO?iY8kEZ~TvuGxw`psk%?}^OH{ivQ;M40vjq8e0rwC$wf`D; +z1?^SwCp)|>)(UKccI}(caBx4S1lE4{17`2I^OLogq@&}ft<-o|GM8k?u(xqn9q*;&02^Hb{x$bTd%S0qVp2}I5f%J +z_X|!G+r#0ZCFH*p@V_Q?G%H%4?cUEgk8{cACAd$q`6=3Kuhn+29RY`KXnu?}+{$?* +z=>wX-&v!-RqHp<$$U}6VE;4k^@9?kIl*63lEBeWxRRen!Po;(^ji)3t-n$+g}{B_~h=Kq10s6zefwm*Pw(G;j?z+i?yY@{m|1#h8x!U{xMU5Mplo>=mDY{w9 +zrYvWxbcT7S +z+Q51eJlEPU@^Eh=a2Fo=cRF0ixX0V)*9XAq^MQU3uQmOydDX!5F62e@1p9?vf-T;f +zy4u^Xk<7zJj>tiTAi9m3(!QO9O*>=j(5uT<(n=)nD!g!Tsb +zhWo>Qfd~7&YudWMjxSI6@ceREOvsk~=Fx?&jpW-HTe6IeVdQJUnw9wV +zK87E;^j&_pa%XR$nSVX~SA;a@W7|&3b&j}snsb`u2hcnoW*$NP>cHAQ`Fjcd#lQuf +zYg60b(stllCwc4Hz%w5&%=zoSb5iShwgP=ce56k|rk=W|8?SbGOsl6GH@z?2_!rQ= +z>ANJ*ceJ=-ux><5092(SPKW!!&*&J7$M^>UH;o{BJ!Q&|7i*t`DwBkX9b +z&1(|@zO}$<82MyJ?@_M*!L=cBZ8ANhTBwW0ek+fP+~p}_5_b{9V4oV;rv~LSu~!X0 +zghy{VxbR&%yL{gJ3(P*Oq~FiFJWBK~d{Iue@TtIy9m?)lw7L~Ocq01SMT|l+$k2#S +zf12Zz6XyEufJd)|kDsXT82a$P)AvsFi41gfJU?o#W%Lr|CN3g35gWUn+}vIpTHj?y +zhrRncwt4q;NC$uLBz^C3ZS{dZ+V^IwkAWYZfAH9R`ZjOhI`3}l{%DTRr;oR9YgV6g +zl6^bFi`n$wx0BCvuT_)2dO%F6W=$X8pUnKE1B?SNjLv2JWuH6Ad>+I1`0l-aZ}W*V +zpFSI_|GC0W=BqrrIT@JC*5xYbJf}>4rn_!(DroNieHHS)%LsrZD$7B?)|Z8`wjf9 +z!U_3qDuKz@@dqZLnYrP6oiMT91ka-OVq|#ixcLohJo{n=eJ0q)o}S0L>cS7l$Zv4- +zBL?O-C^xKseuIhAE5E_qLD@gQt{h!YxqeCHobvq^fcHziG0$SmfjNJ-dCx4K4b1ub +zw)gD$|9W@MpKpKp`3;Pd+D1F&mXY5;K8*4APe)%Fn2)F&z)G)g!LQzZucbG?A?oHg +z)Wu9L;DdGIfi38(JG^sk;0pP1ME}&2C@3pUM&l=e?b4KfIY!dDF +zFJA7CN6!S_&HTu`yTZeb`)Hf7DpI$@lQ$kGzAT+Z@#Q9PKsN8!c}IG;#<~LkSqAtV +zPcQfdcDU>eBNN}dzCRV32-3>~FPZgU!2EAUwgjKu>pdIEvk!W-RLdNLZSL~gynZLS +z5WKJXWTEqQU@yW0&{cNFFF|*jK}_uHz)^hSc=nOugYQqzVSm$);A>TmW-jr@5y%pY +z^N7mzdmzB)9)Rww$RzSDvDb2|oU5T7_)H4l1+fR65i1}*fR2oRU;Yf8!|CbSwe|wm +zy8?VOb8f}fX=P99JiCh=U3hnqtD7~Uo3*muzW9dwoxA4XiTKCN-E!N!yXC4~SQ+^I +zp1B2KdYK2)rXRL-{{^@!&M^c0H8ILv@keRz!?_jMPGlWgoA|a_UktfhFj?!!X8!su +zbJ|FoUnP=WY&?XVkdCAMTVaV0J@3Y) +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 +zoR_j@<9<`7Xy}6z%uSk8B~cpl3(!QWzdUD +z$3c4B3GIm22extM*+=Di^7tYOE8op|t-=uv%hfyUr% +z$-sP8R%<@v6HgBf&gWpi`D`27e?CvTd)dlf7NuSv0Gq?Tuz5EgX+FQ#y^+1JIT*h# +zFqa{k3wu)m?hK^AJ@fkZRQvY)m&60dJ9h%>zJ1&OfPHzyrM*+3yFt*>eenO4$gO+% +z@7J}iwJVM|p6_ZK`Bfu5daS2U2Y#8b52gM$&)F)vtVMsY!*iTH;Gkq=yDKAWuwg3j +z1ys2{OCcM7C-Bsh-UEla(TQ|>GV^;bj)PCFmEY8SJ^4_Rk+v^neb_2XhcAWTeon7Fl +z2ILNOp%GRcHgY3&jr?k(>f^*c&a}z6()ACu!A0c_sg}xyFW;Jk@o%<-T7VQ3bbkaYAHcrqk{i|!^Y){=i +zsQn}`YD_&kLTl|`kIA=7H)5AwGvC-VzoO=y?9z?!7umIbJ*J1=r(K#vxA1kR?+xJ9 +zx4(;5_m^MaVyuni9_B@6!zW8x+}gOg<6;|?a|jMa$s5~sXyryO8zkr?DSr +zg^Y|+&fyI9NjX!J%OgU|ru^*+Lw~y8VBS3P!*iT=^yK<{I}$6fo^(QkoF^uN?@h>* +zE3+Ne-Y2K0W{XGNi)`sw#+f%{OaJ*^5^`L5EuWO{KR5$_dnhOJciEsz2Q?jkf2`Fl +zqO-HvZ|R_tS(hPy2ceIZg5Sc0&!Z0qpOpd!{eBIkxbDd4{4vT#}Avlh9rEj0pK2XmdO^!z;`64b)BgU~dW9GDk_R_n3 +zoxAXDb8gf4cVCYGy2`YZ-TwvJir%Di7rrfD{PxsNH-G8T`jLu_KvNN50X{UyuQ?JN +zdYn2Kf=@HK!;+09tS9Oio$m4?`CUrT*`f*6^3XYbV$AKQ!uMU@8hLW$Lv=Kf6Z^ES +z{ps`d{MmNc|2RCx__cx^Q#-*ZbnPdh5Gow()J0 +z@H~R;5_9F&I@ZwY`o_~oH@6G^TC>i*!dK-#B3Dl_L9>45ijPP%P{a7DK{g{6qo$M{ +zE_Cu(hl~IC3Vh#K9%F_q3%Zf~%tohgb#(~A%7P}tktXzr*7S44_uV(i7Y=~SqTL^3uZ%~unVVP7Zy5ipkw%W{&zkH;rLhhdJvBI504ms +zX*TmNa31yMEqz;fcA(pgFWq)JbC7P^I$Zr5UNmn29aX-Ij{5iihAY>7-T7eruYvye +zUuX2g0=NGP_&`DGoB{oxd6NGB(>8GT=g%$bZfsBUPpSW<=Os=<$M)^`&$<59K0E2t +z*(c@$B_a4g(G+wVe8Iz28$2=oCdnDSuXm&N4b%kXUjFdv*j#JueEY#L@DG2K&huP>FX;)!Q*5uGa!R5AU%z5pA3bXBwij-R +z$B94rK5-l0m11dM%*gi>^h4?l>aO@39(|p~xYr4fp&xw2tmC`LhdSg#xho(334ij} +zX4_F`2KvcZdsK|J?j7zv&HUwBYHDfD%){hDXQ!X?_>NEW_d~-^z%Qh~PdK`&eFiis +zy`mmnaVDRmoKLfhB8e4z|H)wK`P)+~+&fm<6N`^?#|qDz>)|CKyTCyYO?}wgN8wd* +z0H-E0KheZTkWa7v +zn9sL&5C-ZeG4YXa82>$>=z*~FDAT>r7;eSJ<1=MH6^pO*42d +z{bLAgn2sM?{OjpKR{J*Ty}dBdy2t^w+a1molvTltK8VeVF6H*C^9EPLhgEy%#)#=N +z-yY&@{G9aim)0tuR`9migN@(;yjpMqrYjU%IVMaO@UG#<+i9BvO#5s)!PU3xZUe49 +zu1iktpKZpU$orC$+gutl^)_EwZJwRQv(tf@%g0^Wb0GdN?>&oWLwIkAd&ci&YRys8 +z2>3K32l{a1y~~viGyQcmvW`Bv5|k-dFqZVRpF%tSoWxI*v%1lnm-s|AeQ8Z&;6Kto +z6_Y^EZt#7+)!ZZR!(yfzf7p*R&#bwacPm{SG&*-DaPj@x$}<~+oWh2~hy7yQkJVq} +z!hl?EY6}iqWBTd*tm(%eM=)>n=GehA%}=%ML~nloT9ar~^ryZj9Wi~0?^DCM{!ZQ# +z@1OYAB>2v><_j6O8oGEZ)WkWU{xPQ&@Nr*$4)4{q>r(T=lbylX#KdSlKbmxOqiaX= +zrEABW@8+QQvX|c-myv513lI>S(oJhp|USTCWvhnG5^B(s# +zAshSndQZ>&6he++RPiCfL&GK +z?89~+itnP?szFy2jy^&>v@p|_opkA+*a-TfG=cyb%rX +zTWa2?!9i)!(|@_f_s`^{f6kobgE;EyE`2_T40k3NdvZ2D +znF`?fMeIq{gqA&7mHshuvKX1BnA5kkN4H1H4`9c&(^q#ma{PH(_Pw*AH?=?Lwr@?n +z4nAp}=#JDgW1o?)zPw!lUHvp)a+aDauAHrW&vMpctjUbkNuEv}|D|(F|CZh@9lQYk +zCD~FLux)O9!_a#3r`WSlN$P_~CUGCE$;(qL&+r`+&-3|?^1AU0kl#?1xDxzO{712$ +zpv^rDzrT-j@8m@K;oOm&fjHOSUi=t5#MEY_1{bj#`5A_m+u>WmKFYm5(q11Ip{J~D`k8BQs{W(!O6OlIp)b{fL@z}5OFEmo +z%-GaMOz|xB4c@;T+01k3b8f2CUR*yOeo=)}=Q{Y0;Igvm?9_kZca@KCG;zEU;8Ht& +zs1M}sm?|DIA~d|~Tj4j!>v=vNCh=5vNhqFVavj2{v$zNObKF-nleRJXSZ8%&BPCN= +zorQ_T_zoP#&9ZNSwief0)`IjXcvp6Kk@GY0C;WrrS9#V*?k>29`0;{t)|6=CAZK+x +zL|i=@{z+^EJoB?&-p +zF7NKMV{gHKVC=8LJK$l&w4&HumpQfcCmZ1!5zygdN7CiTZb>r5Fg_ny(stS6?*sR?dBf6-Pp|dE*9V1Xj^+S!oe8#=!y4M +zTP55H_);7kL>D1P?=pjz{NDIXMO(Md7wcV}|Kwcpv@1Nkr9C*>nA$`e;jCi%;@esF +zDDWq%ISkJW*$>C4G4=qmlfB-Rc$~dfjt4Mn0A|$Nd^rxR8h}d!u;8o=^%Gqg@tu@% +z>^?`^Q^;|jp4$b?y5!HEdKcf>E_<6>@Zu+{LJ_HxP +z&tP9Vx8%!#*EyS2jIJwPaRWT}u=^cb3tT(EXMgTS*Hf;E>nm)y+2cDGFwP=Zu51Sn +zd>!n?__J@Bc}V{{oi>X5{GA#ozkxrsGp|2nImeYZ(gm7<#nCr6yFP#Ua{m;Vi+JZ? +z4`vTtVR&a4U0d++;jrg5Gya`Ce^t63a>3*jjCZ2MVf$iA{>FVJsg2wTU4iRy*Ek}KZ0sH-y6h%Quce*~UG&cl%)On>0P +z)S;g?U@HHWa&qRrz8N2;bo&x?`(5$b?3MI=U)R5Oz~0@>{h#ucXQr9GyAS-4Zn4PK +zEgDnnvy;cg4RYSrNzbfC_Kc)o;ql7F|8(V@^qOyAV+_WIl#lh3?mYVI_DTFt{$Bs2 +z7rsWf|55IVb^C9Dvvry8akf*MGqosOx_&pzD7|veeV{BUWTf +z9=uF6F8QszM&XZWy{Bg`YpO}td2}{?Dls8=?9lL&&Sg1GTR)R+bbi)NZdy;&MJBB$;t_$PN&{m;Y`j|8wxc)RG%= +z)NZG5&c&@HUvH|JpSHOoOU%|*w +zJMT26)`gQNpc%Wl272}1`Ih(2YuJ0z-L(hx=jl2nAbdt=NMA^9XOjiY(Peic^K@Pb9UyJxP0Fl5M-m-NN78+I3-~=)4_mrq +zJ$9e!O!+mY##xoDrv~|=br#0{77{PLo^dxbuEuOlQ-AsX@8`5{@$CycTo+r6jo{Y);u_io*Y(w$ +z-gO}-YTPyH?t}>Vt9zD!9kpc+q9?09sDID=TzsE3>A&YBwJ9aC;VON7k|;|$?K0p +z*Jqpg3pagO*YG~`YZ#4e*4&kcsyjhupkI%-7vno`#CQHYJlu@Cax&+3^DX#jYibC- +zQWK{Qr+)(fFm%5?K=)gEedOn%)3mcU@6UE8KL#F>gUnUTY>KP5n>g7wk?-)q-aNPu +zbm{EHc60|~^x)*m#pe7XINoL3A#w|6V@JfAzs0kGI>=XFF>BitH@1E?{PP3Y@+Y&K +z=MB(7Zua)(8}uW8qBY?8*S+W0c+abOK5(9@o1uA5XP&`*pXa?h(tB6?Rm>hpR~kv% +zW(&OlnE13h64>}O>bD#As&uN&=upOQF^KncR`@RZQk~Edyff0S;62-sKhuY&_3E>{ +z*Qa|O_`C5bta5A9#NFC7yV3V+@F}cK{|owxFh3)&jop%s|Mz4tjq_d~KZ`ka +zVx`yPAkIf`cq#fG-J~){?o*&Ix +zy}lZF+{s!EUe^Thx~dnimAfxlY4AFkNCL~?T;Keh!L7=end@%`tmUBh-0_}wvKHaG +z9}gDa6VJLz^M^hY&D>9tFntc;olARW_mlTi(IF)7cVxA*w&TkCjdSTwI?yBdzD~9$ +zJ^0LmYue(?Ipvr&-Nl@P&#?<#JM_0+JKs*6=e1AMpWy#3Wb5(aZ#R7wSQYiI#qTLTS*Co8^haFV +zx+L`@{8;V4Rc8w|mR;1}H~R|m_xzgc$&Gc47HzRt>lfqv5K`C9=}TOc>d@9yuAci?27-GI(v#a0UO46F8)K> +z>#XL@;ACOt{PM!fD>`Gj#m@#O7Y@+uRrPF8kZkiLN&dULrhF4U-wrtHHAx>xpiiswyZOdqxhK34|( +zJYP9v_-p#&w(j3$wQrHGFCAZJb%J=XaHeUugm#km^8fq&>pnHV|585tdZ7bNDFY4#EsoYyv`V(ed +z-{85St;T>1tm~D5W&b8^S@?GLL;HrOnS2JFb!`V8$6M#3{~znT2-$4bacurP^O${~ +zoJZUMdzw8%%ZiSvZ)u$xOUhghWXqnNuJ +zuf}FjE=4su;K-5Q`l01&`pvhqpu?8}ITeaQme6m7F9x>0`-+G>ZI`D4Lrw!a(o`!5|=z@eH@W}a~5mSp7=V8V#kVe>;Udpu?N_{P9;3r*JJpcdj7(;?&fU4uob<+cKud* +zM|oRi;70+mrpl1);r{11CSx-PeaW8;__aSWz?U+i*Ozi^zjh(`>+?a`jr%;iOFVEg +z^Ha{#2kEnKF8$BAlU@t^zP4k}WiNVra4y>dbJ_SY +z`Pk1(JVT$yo6A$-{&4wYxbN)GrU7%=c#^ra44BKhz+A>_E=wmQR-a%l7Y>-q=d$}^ +z55%GS!Nug&&%wq#w!i-)+4xJaGyGh~T+aT~1?F@21%gdUBAa+P`V6%7e0%|SVFmH| +zcb_q|bt7#h7Y9QhGiYmkf{n=X#(+<-F|9b?D5oh=XC={n8|#BI-2EP&<47My&U1EV +zvV$Jbtg|zv^y|ym&oYM-@lK7Qn!t7FzALc#Y^$JGPtbQ)SMctRHvLCaPb2S5TkhqB +zMtoj!31gi|NBM0)-+n(j%0}q-ad?*ajC?fOhaJS<$`2TLp7l}uN6aG#Yw_CaJb3dt +zb@U?!<_FP5P9#Tjfrr*m;8eaZm~4cv%mgk2eJBxcjtdz7URVD+z6`(p-?f9V75?07 +zV;x)1zr^kP{mV!T|MKtY+u!3ysJ|zhL~(oJuF*pc?t+ulArSmpQ~wU$B1bna#`hAG +zCp-3=J)U@eTlWP#^J!}}^YG_%51)g3|LmvDJK4M=8Fc{NIoRj#y*{5WZR`GDp82|I +zYCu0vdi`voo#?gOg~N7e`^9)2ZBIm3k9qNh_iI-PkG>a>&tGDk;M`N*+>4ph6U;|; +zK5=*Shjke~rw_e7spDOxru$`L@#bh4@g~_Se}uU7am`hQTE_ +z|CRTGy4scKw;NqO?K$9I2K+11pLkU2+Iy9nc(|Ptw +zY-1n(g8g~4t)iuRB@>W`64e9C_(i~Dlox$~T_cP&I`GC6JzxUQTx<+j(W|fka$g;^BUR2-_Ep>9ZmRg+_SINQtDnTc8YcHT)3FHc$K5GXTRiLls=pE +z*tyg;aO-Qc%FBB+ek|W6$xt6faZmYkMo!lYC1@Ab)7QXrontwZGm2bu&c4NNa&a)#)z-7n +zJwN$-=1{;L4*ofw&APKbRN>l*T1z%C3EGFx&|Y;KeLnEhmkrHS7Poc(m1hmmTh{y- +zcciS14drv(U7PYH1Y_MDy*qxP*QfXiIYrp9(fc3e-CD-&L?0YuyL@f_Sb25@=MlFvW~_NV +zWA@?xvFYO?;XeL4#YnYo^|KTG#9#mC{q-}x^11ys{`0H7=MK*scwVYGPZ4|?oKSAu +z`HDB+jCh|5pBLiic+%VnQ3``0wu$ds>pYY5sWQEv^m(B=y~559k)_kN}K{=@Vy|Fwy6jc)GXdu70{ +zGR*6%l=j>3lPKnU1Upan)roh@j`MZne^5urxBvde=b&HhfB4S50O%6KsiPwp8M*W( +z_1xt5*-_Niy@CGmLApLD?h5Jb}*U--gy*@&A$YHD&=~e3IZ?67d!I{&8 +z;L~&QPw?Ge|47zvLEBolh0bC@owK&>QRK+(dO-D-{C9Nz)dH{j-Wk>VPCm3G +zUC)QAaWk!myFpwG9kw +zhzAaTQ0J8z0>1beE-Yqea&zaz&agUx#dcu9oLu-_mdc7$az@sy*Tmd*t&Q_eaBWMx +zwXG~PYg1l*F}S1H%S0DOn}Jy?Fnb}cI)%z>)BEqvfqRtPuI=e|k1i7QcPVpKocxl2 +zuK5Q(gSV-xkRg@eF!Cs^^UXdUPxfG!$NTTl)`!_R&ZbqPpXd&(p>`8^cYt>c+yt{{ +z3i@C+i24UR$n^&A$j{79r?A^sxW19+;-{mB`S|le7k`2<8{G@De0!XSKige<@eOJ; +zxUlu;Rk4=CFHJ&6S_OQJ-mu?oW9$*tDfDv^4uW6WYkw`=(S=T_J7D|hMs#=Yh8%_6zYiy0hOO_NsestQdYJ +zU1W{hr|Ex{`?&<2 +z&rddo|M}1EXZhrwi_2E%Rm$3t|tp6KAC$aMMK<^PDe^M_aTu8|t5?iy!<6K0<# +zdTq>}?v6jDcwaw0cH=Smn8u&Z_^0>supurFo1S|Zn$1p61{d?l&GN@KykB$(j=Q{T +zbV@p>Kaau0I*<13d*F2D)5#wD?+xpv-xBY=oaHv>Rp4LXneKESQf66)*XHnE5cfmw +z_ereNw0nno2|ir9-OmO$Gko@ONI7a3U1j#^#t$36lxl8^Cx{muplxtZPxbcHq3r~> +zT?Or)i|=;(FX8j9c;|rrqh9|*y#Djt_sm@WI-vg}d(2!q&u;5}4LtGXoaz+%bJ{kb +z|9r3iH1Ei-_N4osnM>P%{-5*uPttZ{0CyjO{w!-o3O_Tx_E3_V1n}g7WW>rz46Jc* +zHaf6hKOuzPAzl87C)Q=YM2+N=)lXoI^jXwTkiOE>Q;;0kcMg3YuYN+Xc7k6&VdGhC +z-R(X9>KJF4z|KiSy!|;~Z!P8l-BdAj_(R!yP +zivMKVP|l|AnUttoSCSYE-kH1CXEoAK1MM2{qMKrAXax>_6 +zoPAZ9ZN1htnEcnXbIl%}#oSb*?rL;Gzc!JD-d|44a>Fpw<`nz>SmsRCvHnGjy29<~ +zHrQb2ACYgTr)PXuw8=^oC9T9|ORdD#p3Y44OA+qfUJc!!pFGm@${5-->D>#g%B?%F +zIivRZv1r(KK2Beg8Rt~1y~DQu7@LfoFXQ_sEW2)N&r5e5?HSuukaQB9RT^`&CyKp2 +z#mTbrSAUY{A^u;&f1Cdo^WWnCE7*uVJyhN3DW?|Ume?q35p$?YitqRIXfLDKBy*aw +z_`R!V;SS5Hsk8Sibm3dKwIqSiXdi~%XIqC{7>U2L&SY?{!Sy`RvvAAZtViwMK+g8` +z)YQ2$f&F^LmAmAU1Iv%tzliDl_7^;OHvdOkw{lEn%X4XiTNgyQ;^Rv_&xJ3=Zas}z +zEv8OI>GD3j5igt7DtsDmo$nNqC*5g{pv&uy_Vj%6Xyj{UnY|06nW$ahEV62oaq3rP +z*;!>ft+@>a+@o6;E^tPHM-#0Z+_U<=E-->|rvd*S?kawpyce7E*=l<#aEVy?t`1?= +z^S#(9_TaK&Z#~6Uero53xWm>S>=avL)1}n+u=dO@UxaOS8g`Yf(HQcftni+1-^{S-t%Uj59jw4_!RW4l)Hi| +zt=lrnyPjY_8B18VaqjFkc-w5o(3$Q_vB9auXq&ZG^Zrca8*Q*hO`d>s(yM8!dP{0M +z%)Ti$WQ1wo)ALkUUHGQhMBax2>mV +z%M9=-VO^RU6t=02;kf${tc{V)d|8*NeUW`Bcw}l{B!Hje>i;L^zfIYO|3)vb33lRr_={jBeOGp9mAZiUPCeBmHvqZ_RQw&u%Xdf)*+gm +z3T>9>z7ZGA`t<74=>qFgc!raLejcp0?s;&AHS58Z_N;Ub{4E-GriylEvhEeE&$cEZ +z12$6+)9ILjtgH$j;M~Y8>d%1JxdqN&*<10?9`4?j-<5Z|#784vo10k)uUKIHt1F5= +zIDYqqxY~z}+^u2R=VU$w{6+U)3pd4L;DYEmdioWYT@7B}9N3e2r<+=0 +zOW2odL{rvOWYw+k|G62rhMZj%+sXZZ1@>a*d|PT!cn)WJ9QgjcMu#=1Kjjt~-=e{j +zA@s?!logIRH_@l;$gMq-{;Hb7%+b(;-A50NE8rqz&^TrR?q$xa8EINn4akF+ildEGka6deyp_a>8e0xa~|(uABI18 +zVPUytFLdEJ_w;F(36`QUz&pk4PMmHcnbb257+pD2F2t{=GnpY8fS|5ZPj%OytELZ`;3Wkdh5 +z=4CvqM0Y&a+}i_l&z!=&X7DhLaVzr=F@M<ph5x$m%*C_r*$|DR{=Y{5J{)ae +z_!X}Y(boo^x#PksJ~Z0!3h{?}#+vb_eaU)&+kEo|EpzZzHGCKbS-}y^DF8PTQ%uqxQ5y(he-^tc`#u& +zJ~$JbuiYwn5P!vk?fI<@Be2UPhZpd_K3tOCkY7?y>(lB`hel@!tetlkY8F*)huU9P^m)GpAzqzrNyLYGcnD(dB +zRyqaic5UHW?(m3a6*%WU7D=ck@0y$>_l!0+jtoZ=BXd{Ab1dtTk=UO-J$c=w7N;3{ +z_O40fX5t^W7dT_>kH;ohe=8e%O5}=>;P?dVvDiPel3Q*HH?e-g&P{Vn|0{8yB53wfR +zqrY*~CyF_|5@I%VUn$I1qWt?fRYtmICBt68sdc51Cd4>noDTSf1$O*HW2dn0WcI)-t# +zxOHf`9k$}HlSd=EOommLtAcfej#-zhUhn99n!DCx*Y27}8=pR!h3DWWaB+rkH>$A@ +zxAR;)`JD#nqT#cgC4z<;sCU-@ePAd40Xy+u4barx(A3=<@=cAdndEr}5~cVn^X=Q6Q}`_3{8z)T#LMjU;PZ3w^X*sSje|Y>h1M7+wS+#);CH_S +z|M1DQ6j0xNDl~Cp=y7V7wl)+(7vd#0yh6IT;-MXHPpIGa_D%IMYEE0!N7whixZmYh +zts)kh>Pk?b-VQgoIML2?%Q}d?UzG_V56pYJ9@xb11Alws?Fq{d^-Ox$E{aTj0p5Ez +zZ8EpdOWpbQF#M{iu8y~_yhDBK?hVFjtcM4D%AQ(wwOwB3+gZ&+$oFGxo~1gWN4H)* +zYs#Wtt!XA?)m`dxGZaY{RnISm~6%_ +zdx85>&;@j6p#WSs#dbP$hx4KroWyOpj<>F8y=|{XUhf)i^~A`Nb~^H`sjPn-zP(t& +zwhPD?zN1-syk$+m26+^|`czjo_kq-f?~CnbzQPT7A~A?Y=x(wzJxBL6iWe#t=H8pt +zu*hEG?9Ga1?#*w^jD%-?&z|NO-RiodMyD#v>;yJfux{C@@`vSFk2j3B&aJ2B^)kyE +z{Jjy@4R>s^_KmsV`i}B3%R0(sM~+|LQ9k;yj`Gvd8FR;UCN6oYqx|DzJIaTQNtWk~ +zX-^c7-CAB$-cf$mnB=q%j_I5_;rgxRpBws8Ja3Fu9v;(_7&fN8d_OQMW&ZXuXx)yn +zPh0M&wA=rbZ9RT}G2?3-Y7^52UPBwf)5fMDj{dz*+1BIC?E%rA^ZQZ2EYe+$8*h}oICEsso%?uim(EpVdtmiVk}r+pT@ +z>2he3dj=mawFWO^zd57Z6QAtjbSSnIT9H3eG5ArO6Ovx3IV}!%lo@-cD6PA3f_!Z< +z`{DD!B99LavCds`H?R!lMib@aqoNCUg>p+1gIH(q-Ma$sjtRV*&)q$t+~UMV;r{J^ +z7ifR(fcAFoD2}!E=h15e?U4a4k5=C!fO{xBI`MJxZiiUYmYBSf0`%(s@824DzdZ1M +zwl(;U^TXDo+$X{QMKhh`=mytyZQ#8L-g{Q^*|%>(H?+eOVn3mt3j2D8%in)`bK|Fg +z{~&nWz4;|aG{3Xg8osm>p0q#D+>cll&T<}Q9O$y@-u#*_Q(w=>AMToIQooDo*ACwp +zQy>2a{_oFe7&L2HHzvh1B)iDPVEkKqUTiSiqRNpRI=2Zr3}p +z%({=zK!6YLn$zvj>2Yn-A{0w_QVpp>#x9m7=0wk +zy+-$dPtUhnol7!{!;A3SFKk!cqFM0FtD!NJO=xV|_sC&c-bZ6)=#M`*4vl3)W2@oY +z5tqhfvpTgAWd)I8$Jh*{cu`{_h$kz{uv9_+T +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 +zgZHtme^|F=`JdEApF`{!MZFomA)dv%Wp-tU +zM~IL5kRNg041CiL{_zHe8hqnC9QQvm_EW!KG=(`XwylVGgyUe}KIPs{?NHXmGv44X +zWnk+r$Rp>eK|dXQNT282qmU7-VGqdSKb)=x(vSR{jI%*S5myUq63>u2V>#$I$7NHA +zXQ_p~LrKRRS1ahqI*N%&T3Eg-Ms0A2{4(Y(T#x}9>MihpC<(M=-_6hSo`vkzSiau> +zkt2v>g^28LXO6hIg*ij(bL5FHjAvgnp8Y1ChV`0I_AmIcoEM+py#D^mSByD5f#)tq +zJ0@*VkJLv%cK96YyPF}iN0b?@N3dSR5w|JJfU)bzMf|kvh**SJcwf!#i%p+Ki{P^$ +zJ`4KM?$wBGJeczk5!SHZ)G$m9?>;7`1+SCwG+RHh& +zUC_bQ$+UeucZ1Kde}3H8)=Qs@KF*cF2hiumN*|3nI3fRq81wBI^J1+J^ih_WZOA|C +z*AqH5%NVb)jP)X8tRqe_)~V2OZ(*#aj(xSgxSlwgLfIO$E9(u~&ko+;fQ`8+&;JN& +zk!;AnJDpc)zjQP~PIDroRSkMW-v{Ixaovb%K)N1nF?h*Xr)NIa*NNB)L&SD1T@Cwp +zw6or#sbRMxT(8q%t3~&j>$O_z_dV;Cg|?a3@4a+z@Xy-vU8#aeisW3@{L7EG`o4di*9Ir!hF +zy{62l9_c{6IOMA*U`!x7FQUJZ>-^GzJVcq?V1kO +zMsI6R+l6^xo(XCnPs+Kb=FgKZxRnN9`I=;QnX`*e4EIj>}MUKrQO^QxXO7W01+ +z^B9HsIWae%b0NlllboLlT6mp5!~cmna&B^-^W2!boa359cFu7I=9qWNIdXreyEz_x +zUY}#^quS`D-OTazIBUM2m21g0)YmhBehNcz_>?~Q$SKUXV*J!o#0>r&^uG}Ha@rKy +z6WW^JiNLOPwg42AV}dIBB1TUta^83cZPg$L-k{AvTM8URez>EU=Q!K%9UwHjzJeMXfJ+` +z`E2qRd95erW%Ak0@p%1lo3S(dw09-iIHNsYkM;K7QwA*?0J}l^!S?l9nMB)@jJ8L% +z$G2UKeE`}Q{mhA(zsEV3i*y;F&#N^dHf^IWzN3>aezv_aJPBffa0rbugU& +z5&O(m%HJ-W)e*Kat&}~=+@2GL-h(XRyWo*VUA9b_8ZCABqM!|D-fZx;Xw< +zTZhf`20yZa_M&h@yIeo3J++sw#y%x)V9}y2#gP|7N`NeST&b?bFYs +zkBPQgPvvL+C+#HKSO^{0)#tUr=N%}0UYFtXio6<@C$O!8jxmA9p+h@-@z#LSzLCE86~?&EJsi(_YV4Ts>mnF*rZx4gA<>=RD+~emi!=__;RM4xQH7(eG~K)bqO4 +zpb_H^o_S5Q(>X5SdY!O+Jn_3?)9Yi!l17O(y3PkN1^Aja#k3WlhmP4^mJa{&EPgJ00iN#(z;B{X!I};ZyV0`-&-l +zRTjSL$`g!RPu<4Tk9_ZZ<_Xm@ycYxD$G|>UMLgveP11++W@Km5xX4x +zhiStDS}2+p?yby$ozeGC8T;AW8n@jaWi14AH!CgiOTtf>g>}plr}h&TcJvYUR-zBn +zPuOMn2|G{WCmf6w*H1^^b7FCeojmR{!W@nb8df+ +z#kWm~6~C8CVT5@6urU +zm~+t{&*w6?mye$;Wh?CU44hq@u`U&IQmt%l&8H1U{K2*Jqs>&<^%UwIvs-<2wrQ<}T#h#Bi&IC^XQ$4@JLS}?^f9Ps(Pr>`%p3DE>Vgi+ +z{)A1>saR`+w9{VQ!!K0YhUBb1)lx@oOR*PJZ=#Xputf5n# +z<-r*XnHxHYeYbPl;@dB>hdX$XbTR7~*e~Ua>qA +zePH<+w#T$Pv@@g~Y1q)(814t3FG+lZSmAlEJJuMcJd!V;YOVXr!C1WhE=A4>`sK|a +zO!L$k@-I-^uZFF4PmIj`)KyUgjJ)R*ozD9`<}% +zsUPTvCiFuz+PLjltnU50Kqn16Oqp4P_7{kPo$%k6n*RH+&z0PJ@HutAidr=reC7gXrw +zyRQxSWnakeysga1iQ;Vi=z`f12gbiNIx{>K=X0kZS9L9NA=H(L_@;Ax!InKbu8J4+ +z1zG6dcW7+x?s#4#uU}z~fSmSJZiWAr_blS@+8>a%kkdpwFuQCna5cu_Cs~<2F1g>> +zaqr1zwg#>3^n`zHwy_&?H+^5`5#a+PUn+k~U)uaz_eGEOnJBcK&nTpK;kxtiuIUr% +z&ygN{w@S8Q`e?>y@HLUAgugHZc^>nEmdKh_B|BSeDQY;|u)FHKPtU`Rg_F{_l5m{-PfL4W8ro`H$aUSzWC2@Lqhs +z0c+p&{Tk!_E%=`Aa{cee7!WJBcJ&MXoAoL{yIe2&1>~z7_zeHanoWn!Fk`U4KEyeV9H^$b_f)?b_(E2=&4p9l9nD?NBc)gI)-u1|SRc{Ri5kpGjJ=Zi6pfZ+#1WeP17D`|ghR!yWBkXldVU +z`!H-g+hz@pIaZF-le`;$6?B?$$KN)biO|KH2N^xzpbPF1Yb|Fv~RXO +z5xH`?7G2uzN_+Ay={B{a-30w(f6>QHekc80F?|g_wbbHtT?4Z{Pe*%+b*MpmW?QK^ +zN5%2&MO)^+3hyoEXNnSlef5Mk;ye0Bf5#m3eYBN9#$PsNPRBl4wJ{drZ{_s8!O7>d +zpo@}WM~DHWKR>AB`6uxFKVpr*4vPC&7tH5lXrI3;@SC3>mY>hW-uR3f51#K@5486U +z#DdMh58Jmd>O%bwuo2p(Jsd1gMl6|%xH1>DK;tEj-i%F%CpRFrM2xv_Lq7bZX~?-j +zK5#$4sK7$^4AlC#>RD@1{Tp}i5#b86)~8&s9s_sjp*CWnGA445$SuRWi2puCjo~83 +zJkU7?pAi#c#S;u)MzKy7dy=v{zzDRZnzsC!V?1ABHc9?mRtAH^9a +z;rg%)c!?5kDN@jq3>-&A9f6tz&W$x4K9>SpZ^!&RvL;~=Y7(*$d+qn#h|lvou><=s+i}JuUGtz{=2wXA +z#`6JYt&vNPnRt)5FHt>1%Ts2Jwaj6!i3iF$g>qw_pS_MeiJQL61X;sF3{MSv9O66h +zzXEQ(euwk2*17P`kngK=*=MP9X*R|%7h~9qoF&(QwHbcoY%zz{C;a+a;QtCgo>5Sv +z0sp4uu6SDbZ^rYC2OowXEisbt4C%VX_>Ml!ZAKpseD|#JIc4e2bM!hm;?Dv@yA1fV +zxT~TNYgtr7d{|=84gy98*Ko<;S^j~jB{K16lmA2f*&OEq?0Xylri&NtXO#UX__IPR +zNB*|;3{yslrn8E_D7P+=j{H!11u+70b6vTtH5-bvC%cr> +z!4_Qtep@X0ZJ6XY9Z$gIwHF(RiK%0YruT3FW670gQ`5a3XFBfraMf3%&YtU8_9XFA +zFY)xqb>*cBrQ#Z8ly~DGeZ8u29;XQHaGY*n``|b7RE5DMI7iRBLU_-S1|D~bLdfT= +zb=~o#X5ivxS+GWJ20x^rZH@!qRip}c#oNaEhgJ}8RL9AC)WAdo{h*d+RDy>1-Q+u1 +zUrT)7a?r8d?8B^=+=A~&d#^!vA%0jw+LPvaI1|iTN$Nwc1@V8WGpQrpsENr1c8!Vs +ztKX@udC;k3f0Ge)x|qm +z?!?iGOIkD0XAHTC&G9dW-h}UB@moXvfnj6ES~bP%!ao3=Bk{kii{Kd{ZVxz66G)v? +z+E59smydwu8wj5X-Y3R<9>(}x?S2x^-u73t$>((Z+>1*1H|K1{&m|_qrOIQTpfUEj +zJ9JE_*RVcb=$=30x0T=h_dqqAE*smVYm$5YI3cA2H-BwO~SJInukc%}i*P}qp +z!1*rSK3%N1y;-PNo#fmP{WdBEjkHz?6@v9@VR81QMdGn(k +z+NYZM(#VlX)(vqK?9sS~n!5Psrf;I(wdC|!v> +z!^PtJF-m92^@hDI2maup-{)%JRpOLR?tf8^j<1P2-oZN0G1k~sr(=^YhHjY*UL__? +zKH`r!_A*^}i4Hs(9iKFS8ookpAja}t*rY{hll(7Kmo^`5zWyD!q!p4+P9K+)vJJnX +zhVn!o;lXM8Tw+^mqxhV%AEeI#nT7A)zNyTDOL_%!HPHQCaY?TRmgrA#_Kj_lZi^4y +zVxil3gKnSszRXC_Z8`cwd);D^eun;w(EnV}(ZnPTcfllm4Kh}M?}+?a +z9%Hyr+}?pndKK2`NsJvnTFc||cca86WjvA#y(Il)#5yKU%Q8GuU|^DV9s5V43|grH +z&m8n?Vv;Vx`0Wyt6juuZy$K!;}RzVf@~$F2LT~f{hD-QyKtX +z5%2&v<^xZH_@pl7_{LrMd#|eFk@}U&O*l7=SV{|uo(qs$tR!~eMpw^wmK^~$siKx> +zDLpI8Qt_F<+38{U8<>4~pZKKD#*mjN>y5paFfdBPYfFQ`N7~5PPd^{9VAF13lm>uN +zN*)JRY0YDXKG=);!E)e{>N?;fU%B#v=UUi26OZ(`aaPSGZV$frs);Cd +zYB*di-bNipIP4N1R}2$L<#W{|UawPZbBJ?W;Gb{MYv?`*;k;z*X6)G{sSo2$f^dB= +zS0Hz=s~Y?78Zc7RQNue_`vLaytHs5^9Gp>b38j3P*oHc-B#(xge}^~%oQrrXaY|ic +ze+{upg*dVvdr}@3bOG;Mdsuy4o17emPkI&B-2=UH3;H$jMN1IFx$1jq=vS-u|16gn +zqi=XK#X4=NL*IiZ-_ON4Uvm$B1+c`H(XXbO>K^gu$kTChi2d%&>8#&tO(Ts+soJ#dl(N};$J)?#J}68J^X&f5s5MSGiifs +zgs +z4?a{c*iaoy^lAf3)MH?Y^8eu)b;sW(S34ulp)P+{9MK;r2^`TMDhV9X +zLEwLnG6du4j3asxo=G+^2kjj=qPK?d9DKKn5tEi0IHGIegO+Q+5v}(t$17&3M}akV +z!gsFIB{4a9HaLzmD!qY)>bmRwR^Z2#11kqVBR3qedm{(!vm+UbPlFz)VgAF9wfE!( +z{6~s`_Kv^piSc;`@O87Hi_;DKj12jlUE+`ypv}c-GaZ<+C7LhEg*G$LUV4p=L#jX9 +z1M#U1IHdQgn$*w3z&9@7hYiEt8tZ5?oYc=bQs?S;q>1+w;0YoJC*M1>%X>X6@9DUt +z86ozS0<1FPl2+jCm=%}QY^PtBcFwZ2qvMn6?O@Hzz5p#?YvZhwdrhf~6s;XlUUWc2 +z((NJOxF3A_D%21#PFgZ}l|Ox+=JzOG(B6&pTLoD@;PWUh%H1;1W&M|^Pd);jKTG{q +z`I23i4=hk-O2jqHsqh9@0i7|B)_@$W`3(igg +zYZ5kG+7ISR3UGFqcNS;{E?hhwZ*_mJ`0;u9mOs`;(|a7uBUbfM=&LE%TOpol3Hmni +zOh3iGDe+A4JKPn|w2N*jgKh~OK^rEXX@B6E`X!#}tVpu>%X)WT`&i=JL03OZJkx)3 +zFDDuGgUCDm9sTfZq$u+RU&Q);7oO=mcrO}nixJbb*NMZCdSIC<%22LHz@wyVhw(Z7 +zF58mJ&(rbw{yv%TDc-aL_X#{ixk=~&_p<2@%21)f@3XXNSVNummw@(^p+W1te}7?W2Ai1A6RPhx(~Ro=1SeQx*Qt|gp3^#+m8^ShNC +zZI*hu_Ogw5pM{7Cm@8n6q}#`oKfvDO%>QxJ;va9T0$$V1NIzw%#QW^Ux(a2rx1U<$ +z)v-RSuV$|EX7~*U@ho&SYA83f5bJZ6y4n-MSodMCn0(LsND;q>nAiLZ{-$mi47^uG +zq_t2NdJLS;KjS;A4M`TahSoZoa5og`NjuUR=kr!PpM|-LlsNEU2T45GThyyG9S^n% +zc(Cp8_YVW(=WryT9zfnAEo{YuJqxiJ@nES3S!<4(RA9k=*`WuATJ+%K>QJw)2PGEl +zcIsmj2bMl7eKivYmVU@WiA{6NM_Hin780AJ{}urD+-6`*Rs&;lmjw&suz( +z==bs-@Nu4;-;+jucK4>*D883tXIzK9Y|bD4$130+Rr~J)uYh+OF0xnGUx)E778eH) +z1Hj(5wY%;*(W>KPZNuKhEaZ3ZllYbz;uD_hV_zmlD*LqZ?KJdDz9r4rUpDwRTk>zV +zC844Vs9ZqZ)Gv(uw|g$CgTi_ +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 +z)PZ4pM?gQLvje%hCBZ>TP+Ow +zwoLTybf#tx_Orh4OwC{M40)&tvF!PG>O9gHec+NH?s2!{E`>O7W4YJe-s{AP)+fIG +zarEG=J0px$Y{~(g*@*jiR|PS;xX-}61M?BYE+swyV`|?2G7UdB;0L$>IEPaldGYJX +zt)suLZuKhHLpHo+;4Az-0NmJ>sBKw;wJMe8z%z`s;+-ymv5)$Rh3rrcdf7hDfiq|4 +zRVH_8!^Di;jkBb?vEG~?&u3j%q|fiN$H9|W)1Kh_7n8LH(v9n`W5xoCPt7|m%-9{M +zec`)!Z-a>$n+2X@?F=zvM}UT=&Y+&)I^OZqgq&~wb!~J@k}l_z=`-Rp!zMN|^aA+m +zCW$Rvj5;e*t|0Rj&>zSpuB{s5Yift~eMKyd*#5_2!>dr;}e%XDPv#FzJt4p-IlL`=btU>&AC*r5opmoN2;^mop +zD>n6zXDap(`?#8N_o<>G1?OQQgF*Vj91C?9}WyYo0G&^t@C*}&jRd(h(blIWY=yzx)bkS(MFCaUYVDH}stZ3Fdr6p^-ZdWI2 +z7bI6VnD~OaZqjjTr$INw6WFh1pSKs+M``1feZbIq!=Q^dNSx0zZ(5&QIyB%v6FSb} +zT;qAwL4CC(a;Zvvrtg_^emXYD0mNHdYXUg){l@wFJfB%!i#uUvAn&p@I1xEjJ966i +z9((4`Y0#Vguh6$5M8j2TbvM +zwX=JA5C`^E(4!oC}Y_8sEBz3R$Vr!%Ty +zF99`ianw*%Mfc#dJ!*SMzk4noIbstH*XIVt561rFVDTq_{Py<^{d~XQ?<~_EN1oKF +z9`p}}{H$^|)o-x}5VKVTKgIgHgrj_zI2gP|b$Sk~O^}%*ke7qli>yK%R)(BVRr~?u +zksWHxv$VZR%8T4PR=xi7oi}Lbi-H}L#h*y|I{^P`G4?eNYL_Q5?l<=$i`!jdd(GY0 +zp8!7S`egMh&%Nzw4QIjD%~9*MaY+F@`!Qs-9DN^vtUkZ)4(uU`K)gL&Yr+}41E}qS +ztZGfLkI!j)?A7nmC!p=8-QO!#<6K{jwE2INHvjg@6~HB$>}-Lob>2_fUCx+nOr=m= +zzNwPGTBN)^>CkrlQoUY#!r^+oJ9&E`UR?ied;Gn0to=CbBXO;`-dyV>Wv4eNeS@7r +z+7;Rq+MDut@gCh)aX-6AZ-^+6dp(-O +z(OOx-&$%z#41Ie9XGtjY)q;2$D{CkxTX3$t3D_`{%e^>Xz61M_;#w5sz7NO6@tkTb9LH$oYwxv?8J9ZSdp&sb6`QDk&mIn+ +z2f5RnQQvvaU;2`;FBFSk79Fj$cv(-6J(u--X9{@h3gvE%W1oDscJ+1Go3V>8eMykR +z!Qzh^+Z!zYpw-w=zX(1d&m@CqOn$isH5NjAyv*d6Bw${Oc-77!pYPAR;`XLI^Yfj3 +zpSr45>KoiC0Ka~VvM3}R8+uprDD9gPUO}De>$veUFUcsoVQD9 +z51k4A^a6wWl7X%X#9X!?Eda)}hW(Z6@pB!1#^GlyestXFdS%9%Lc43b3-sxs0`dYW4g_lyR0_)AZosBN)z-dZoJSJo?{!W$=EeExb4y@OC+2vG +zoa0K&ap@`NXvLkj&T;&5eU7C|Yoj^c%#pa$MTVZ}i8cQQf4iY`!3P%Gyghh@8kV?~ +ze5Ry5zI}-DvE1ujgy-wqs_N~HLi*bDT~Fm}e_tDK8Equqp9((c47NrN-q57nW$Hp-qDVZM!k?2Y^zt +z9XyZuOb^iJca0qakVidM)G<^CeZDH!J{D(1;VYzz=YhQ*mvJMpRL=*dwKbLuAeOv6 +zMqlcHm+=wi8CdfT&NnJr$5{0kN4E>mq0%NmcX!wW;Kgi=01HDPM*!@;jm=`~M(Ea) +zY(xn7=8{(}`>fL+Mh*?c5p28GwlIw18oHP7VTG{ebfjpLhb0v3bZfn2z5I3 +zIBiTAIvwp-{uVq-df=YSrRkspajg28i)zTVNAOPZO6mf_7c> +z^^|pn+^q&KZMFX(Vj{CXn6YCMd_3eVutwG37l9aYV2#V*7Z>vW%Yn0;WfR*4_V2;B +zkUcHXHO8c!X1>*?7JARJYxUpN-s5O*h^@eAuNZuDa(krFVUdLW_3m>F)`@f7f-UrU} +zzKxd~ZCw8Ow!FaDzvi7#1nzVF7BciR#LSJ|#NFRbQ()(sG(ha!Jq=DZ{}q@&0+$_> +z3(NuUpG*V4qT}YVR+T;-YgfU;Qa+k#_l#KS31Ku!4_Ej?oVw^(9K=_ZXHA4p*DG5i0Xbf{r5Bx4%-ahdw}74_m}!M;d`I$2t%hg +zw$uN<7xzli_fA&7^~kzF_}@>V9*Mqpsrs;%;RxW&OK0D^GD_du#Nj>Qc{Hl~-aH35 +z9lp<*;wj%nVgs;v3*I#C18FkZ`H`$8qkf9v;E14OS<~^%_V000pE?1w`0=3 +zzYhNW1L|~bsw2>?e_t9at{;JZ+oIjuykl;C9s)LRIrSK_|ObK!IDQOCeP|JZjw{@-l(dZ)stybHg>@h_gv +zN8$f(;6qJ;4@e9QA(~Oc`UPrO>vn3;JNKzgzH^*kdF^e*JL%_l^=)(8(!%stHTbIn +zwQ1KGas1EYY0_WC`8(~dSR?X;QC~8~L>a#V>n)tgGL~c4Ysmlx}~5PTPW6zhDQ(EB;JOF!py+mDV@>rnT5&WKl` +z{x#n66807l%SZbi);iT}O;xHw}| +zH~kKKx@p6sx3RSQHtss*OI>O8KP> +zB;@xG(c*9_uyUtiUbJN@XbgLXJkb)(hxnsP6omEK{9@qX*0r!U|8`@~igflHbRLHG +zQ_#i^)Y)+zFYiL%OD*(ub*y7?J97*Unv2ptQ!U2Jp`=kQP6W5;yE+#>4$Hg3LKOaJUa~b)&(1$ +zFLR+QD+Kmgvfx7v1JAnQk7WV~MlA4>9-;Ulr{EcDIXFZ*Xs|BTj|AF`IscW5wh +zcyl9}z~M#Ph*##pXUmm1ytFCwO{~x0KH`q=-^Ta9L|xulw!rJ~@7C=^d#+A-C~w)# +z$f4xmXQx`)eH;F! +zPr~1g@;7zQiL;xow&R?^6s&heYeLU5j5LCU$OW +zbf%Q~2Y{Vhi~VELlY8~lJ@tpL +z(8jJV*#$3;>29Hxua*Sqeo;gm+*;J!HQy*T4 +z{y2X-bl&=wVyW}&(0O+CIq%-qVmbfkFn{7xVtrR#jro{#pzh-NM#?j7s*ZoEw~+2m6t{4B5T@ +zD!rZgco*MEKj?0ZjaY%Huu+LTY5+W17@CCd+!j8t^1#^^+Pl!+t)ROK+FEn8zz7eY +z)f#{AO0<&~N3A$j_F|c6f7M0>5uD@?rF0I3L)a|8?9$ +zdd~S}=eUP-rCs}PVjjI-PlPcy#65^p5%YY2oG9jt|5q<%y(smqxd*9%4!e;@mJhV+u99E!qz5qbixLH6VYw$ZQxttCMU+evW7W!-W#AP +zTWeP0Z}J%Ho2V-&E0c%lyvFrRM|?#&5esXhgHWeuQ+?V);1}wD)^|xhNABd=dHOqV +z-Us{|jGN#85#Lv1-NEZpPE1~Yew_YnHJ-)y(ifpD6tGsu@Od~Mv&Mq5z;-Clc7n! +zP<}GdkC`_>+qgrE*vUG*{u>#36g&|C?I|zjecRTWxmxTEv0sy?YJQR6r)yzv$S=7D +zKk>b4thZT{!g-tYdZDA8D#@F8F353b^eFX{W~AL5v~5#!w96thQB%~|&N$7+7!Ch3 +zm&f?*pO$(k_C>z8_Vd_j^b@;B@2AF)hx0IgQ*W~^u93OEN5|^(ufaQ}{^qzTTPcti +z*qF61S?14oIi>|2<4DNjJ!r#}#lx^4q+Kg&VYd7q@k-?G&b-2L|F^pKZJ{9^@2qPd +zKwi}3o%zs5VT%sX@r93d>|cd`7iLdmDXm? +zyF2~PwcXq?mQ%0o!aEamHrMt_BR=_2m$m(_{>=G5ej0r`EPayx>|4eF#gYAZhBarY%E}<)5-Wyt6P_V&uwL!&Z90ZCYtB>QXYowG{(J(% +zd5>&U$MJs@e}56J+s$}=I_S;5dg3?#CpLL1>fMGFfo8<7O4-*cn!eq1g}W(FG`)}g +zxA@NL&)-K}qSw5+ELhHpm=Q|`rdg_i=L|jGG7R-@0yS_GjhZ;bU>h{#vHcR$`NH6| +z#pyL!uyY$P)p=MMEd2PtV)KI9D6jy+7#q5r*+x8PyjM}Mcy=UpQP0*$@$d-RsIV)G +zv}+JAYql{PvXp_L6s1U0fPd2}+Mg4s1#1G9GU7+Xd}C@r8|=Fj$EKl;&w%NyC_8)s +zd``?~2k@R38hFpUfc2b@&pF3xV1u$&nex>aV=BP>5M#w65B6*wk2NV+>;{&{7%fE^ +z1)us#i2*$gu_oVTZIO11{_fs87+>a=@m+zwct#Z%(DexnXwATY9)4OF&^LfKItDar +zj1m~osWKjRSGa_ye7JIrCofma?I}L-^%vS{;6Xo!ef-rDpZBL2Tb8&T`%a&r&P>OH +zCJj>LJc!XdGXgwL?KZ_b*2IJUfpG2B*DI}^>lAq~1^1~f0&R*w8@;~BVbEjO?X(v& +zuomg?2Xvh13o$2R^MYS0!AIqaXm1C*rSgKsAK<;#GrHnL?>~*2w!M~` +zwwsM{Xc&hT_c=L7U$0^K+@xi#QLjbp=g)4|zfZ>ZRmSI(!7pQpno-Knk@>aJlAF%T +z(;!n0%!`ZFS<%;4JA|+_WU*_{$EYAbO7xCVWF-1x7ZjG8)G44`Di0yXy-376^ +zCj{=zb!luzh$6J-L)^*q17icl@Qnu9|q$HZdDIxH0nP +zn`teKqHPcY_FCs_9IvMG4{+4Vox*!cTM}ThMpYsRr3S!(NIOcKPZrn +z=ZUdk?$;!t53j0fxXXMO9`=8Ny;!zGtX^}@obRsNYNNfxrKOvJc}!lS-k@$!#3*0_ +ze<|^esawV)pELowBcVrh9ArP9A0;M-T-du!!EfgQU}Hh1(B>MnA;)EoX)|mZ?-mlt +zbvT<}71m+8d7cGF#YRs(yYc&4jUXODO +zw9SrmHy4|j7s*9l#)~}y&m*j1AHGI!=Su3=i1z9%$YCZD19>4E))N>zA&0{Lsv>Te +z-#<#+T9zf2)o>1_hlco(*Ft~K#zwc7qQ8tzv`Z1oLVv(|lSUqi+cSL4#*Y7o$-dWj +z{69+m|9r>)ZuvhkQuO!J<^L=3zaKcq)FX2(dAqJb;}d0g-rdxo%1<=xSCT|67M +zM5i6rGhoNsYy>^IHs-p_G3ZY^$y!mYWq0eal68z|V~OOMLBZdlZH~)@yUwnGzT`M< +zsKcPX%dQ2!RuH}#kfXil6mu^{ +zy8^X<5Zo}<66=>9P#((g_W>;wk=`;0u`X#r-gWl?zvH}r68gZ|#GuP1u%WxoP%Y~dKWO3QLGnH!3Vf4ebc7QJ*0AC4Pc7)Ge{qJM=Ts7MJ6o1=|zmMQ=;NXF;XUo1m2F-|jMY{cu{O%3#(7p{ATPGf(ZW$(d +zXdl*aLkrJ5l8=reX6jCUG>nZr +zhy&}OK;H^S9k3tw``mpW${~&K#`k=Om~7-_=5KUfF3~PQn?l?cbc2^K#Ip~nbF|rg +z*MOIA1221}o_t5rDzoKR_)Q)YwqoSXa)B|J+2U~ylKQ>&6tu~}_=!*DfIPw1gnan| +z%=e&B +z0^`Ei%l?kvY!gNq;{5-w`y*)2BeQjT&N~dO_MEu+d9dM(324t9qNwF$d#>B@EIebi +z<;1-A7&e_gE`1HtrauSzM&q@(FYr@Y>nW1skpc0w&?$}5wo|7s89W$kRRG%#zOvYM +z8+1$-Z0LCCie4hKiyhB2?D$dG@l4q95x`V%`)#=E_*dw&t1X`f9@Om(pVgnIEic69 +zX!{hlTz`)DIXlE{k#yK`%)N$lD{UAH{7K!m)&u9!tK?wp$TusiAy)_baJ8@eW|MOtem+Ji< +z8t0#H^c%n#i|+dMIER9-*=Ks0gSGi+rvP`5JO^2R0eqVx-UyL@IYy7P`>Ce;dXRbMj|FaCcUtqEOWwR1Cz#)2sFmJ=|cV35; +zu+5|q>8#UOU(4SZYiZj42~w9FePKNOqsP#v@lFfg*qw9Do>xKz<&W6;=#bBP`` +zevI`cyqB=EnIT}NqPlL-*2s<{-F+kP15|f7Pd>?5w@A&E$BySH!|07JzhcE +z-O)J*<2CKOJ|>^s*VFBLX4&Hgoy+CeI@|Z&&>sSK4e9osV>9i09>z9X>KfYj#d3U^ +zWvkH!*X~{XKMcQt{{vphEK9*}8UIfQ&K7K^d9T?pOI|J6xH|y#42X@JeJ6hajuwD1KNkf@GE@6^(K8(-n%;V1DzjY&^_4S +zY0W|3ZeYKb0Hg03JTITaUcQEQdgN+(%>OK!rN1Lmvm*tlb;5TQDR{3$b$dKc7Yb!u +z;eqgzi63CaltwAggTOD)TZcr@x0fK{_CWF +z>HTJ)&s^mADC3Fek9IuI+#sJn(X2oJ_0RR^_u_dISCwNGz*H@QFE4~E#P#RAcdz5S +z3E3e%x8VJW=DwiP*T{RkuaEhfQOM;&b~gS9xheQR +z-P~>WpXD`2VlLg~HPKH6`T<56Y4%`zn#C7*;Ckvyy>G-BIPco|4!Isu|1^W&c(2|d +zm)F@eUIcuu7;1>=H+crTuqQ#j*Yl2yXH6SPdEEP$8@%Q&e;xE0CI;59|0dLtOfA&c +zA~vlyiqC_`<@aMY!q1iUMa&mA8FI51&*1ZlVYo|)SKTTh7lOtv%B|DH)~(1xM~XoE0Q#B?{0*M7EkjLsDss=z53qYPHi0JC +zQyC-2E5L7NTsA?DcMRr~E6*o0zA@*%-0%%dK6nkaDb}%?<4r~z`EtB7zz;WKta;@H +z80%b&bveeh0^=>hSQlcf)fi(4W3%#3s?=e_gMN%}yumvGF+=Kf(m=yp-T%vb5`Wym +zOP%jYyhqGi3foaZnvtJ0(93gGLGC@$fA7p&uIp-}cz&J9Uurk}#e6O10ea?1dJeMC +zle~nvmTxxb`hDlFiIHyQvDXa#S@AQS#|}vuP4Fah0a)V>e#;|{$@^fxmU~gTJrNyEsaO!&{?cTj&Huez;f}dZrM&uvY?KYi3L|>v>N4>P_jwJMaFZteg-(lJSTJv4*iRtI$6MI;)4_7hnDR4*ZPM^lU +zXCjU#O|)lqyLq-zrz#M`^7+8Exc>+1ukWo5(!h7&@4x>v!KdXIa|-yBXWeyv(dp?z +zyJ4&$+Iw?_SXz!Tw1xh38`jY0QciI{Ye4c*FU$>c2Opu&i+WpoCeuGoeBQ(O{55>8 +zx7odIx?8sQY^-cmDRj(@v8)w{@0o`ynT_99#zGbDphL~@*wl27*SYxrWADx5>#pkj +z|Ia7MCFurXk%@|MlNLz2Kw22hjM9E?65yr_gvFW62yI%b)3QiZX6$@rNf+f7Z_?_Z +zQzOZf?w0DRX;=y +zysR$y`_HU;inCy3o7_Pgug3!FCCAUP&sXqV{8LH2?k5LkJb4BE`0wMk%@wpmuXXr2 +zdYvrU_VW{5wRe4H)f;nd-)e9837bIryP7`qy}r@+@$V#mdpM^>uFaq +zldF&o@XS2>?g`%gZS0-!(CF~6iFcplo#4ic$nOP|OG(As$72y2nz +ztcRlmYuF$iCb;qI=-b9_;aTwTd{zWgGl|F&L;pvmpD;U??#kx04cCqRnWEV%osl5#nrw{!K*VsXp4@-hu@SQKo +z>mH^=pnVwRJn#h*iAy4#k6QB4)6>OYpOU^NXy5uVlP^p5{(j&=qdRsWi^SJWjQZpc +zTbhtJ%10MdlZy<5e-)(pyEQDG-}Ezhv2x}7rpxraG&K3UMf?_hwC?N(Ph)J`$G(fK +z-H+h)_R-%(=%L*~D|?fYY%OfxqW%cuE +zq6PumWCyVvjTvy~)}6lok2Y;Vld(y@{hG~trb_3hw663FJh-K#oV%L&|Gw9*>0dW+ +z%Oi)^gAJ_L^=7?34>;R{t5+3qccX{X&+{b4l@E41YmcX+XbAl>;n&BfJCSeEl|<2r +zAvW~}a2Vd&+O*8!vWNG|BPbV0?6ChU{4FWJrT_E%4IIqU1!d4!vM>~1eGRRjF5v4n +zhp+ZI7GGUAR_4F0e!!LJ96>YkG=|pXwi}d3`^x2>=0Sco-({JH;B9r^Nsh~$99Q#R +zd4F&3R`CCk)=MUj-%}g&d&&=35An~Cw?nUo#7jo>d)^A|usgT5Lc93-)jHei4EgNI +zu+Qj?x9cMvZ}`99BgJ)K?=o^<4!^I=+PwF_V>tabXWK}BJ;C$;;(6S@Epd8o6Yu0h +zDYoWy;1`@OzJqt0c&c*-Wz^reZgOO +zdpw{x#z?-e@X^h>XU{7s$mJJYEI{}O!g>8S&Xjyc`O&2lBXsVT$<#IUvOb;@M2`l+ +znA{p;Z{0Ld&3%k>In!78Op=?^_YvRDL>9`>VO{uzE!3-*1+$1{^_}=0*N^)6&A`0v +zn&;c)q0^Y7Ux&5E7IeMU?}hXD=Mgt4LcF5PbJUP1-pcRpKKP&o_|m~*_9Qk$N!n=6 +zzr~jqe42xJ%=1v-Xxq|+jpd$e-Tjz*9`XE_j0R2>7l&!K+n+ibrbKs +ze$g7+M9qt@gJE4H)~C4NT|IvmB!7Z#oq46vDbqNAtTO$sAR^{*g3~+g)R8rFKGbZN +zgFLj}x!myFXlzyGW>=F}XwDS5bE*vAVQ*KF%bAu;HledwuV!|S#;@{sosZ((-yLIl +zNqxL=q0aPX|2%8pdx+JgN-J5HCK_Mf^33QVXOSIAZ02;sGrCK%pnGJK#qGCZ;5Y^! +zLG_aIM}n{z-f7Jge{^B`X>tKY_@lE;oNwn^!5N2Z7q;Wi;Q_(z$A~z?yuh1rJ8}2g +z+0a5fBm9V${^LqJ|2Hn!y!U7Bxoo)k?)j5ESAC1*Z9Bg;zH~>yh8v2Lw`#+E+l_Mr +zeS7;?Hr(ls$E3ency|NqRK&QfM?17;g`6c@25x)#U5bAryQB5fmHB$&NnJr}c1IB9 +z`hxK}+5g_(@4B%*uQq>RKHjfX|M~MZFKZjc`B=89Y$b0e>TJZ>*RSvZK7+B%5gt&oq|orp(0__e=O*@N53Eo#J-W#jd9BatC9?-RZi2 +zR(IX2UPs@2%hlf3(&l7fAQqIdcp?`xh^Ly&`wqat@N}4(7~@B2EZIPUU%t%l +zCJXiYvrXh$5y*po}TKeOtq1AC8))2D^^@)avO +zDzm$SwpF`X#}p?K9f)mazg9Y*I)~PW`+{|XZr{ekroZCH +zMfC6In|JUD9^#|x{d~tbn0N->?3`=)F2u$yfd?wEM>MVpuuBJ_Vn~ +z@cj?R=M(jUX=HqE;+<$BzGx->t{MvUwVHa)(is*ueS16YMxw_Oo_qgnCNgHv?3=s6 +z`)JlydA*^UxNI%)*gE2|8mkXK`(@{6pGzNo!Qvjt5pA+{VFvo~Oy +zj4hwR@k-R6mtKt@ooIja*AM0PsPppRDD$svPVDUW0vrhis`DkQy-Y)VzWnq%q +zm76f5QSakj8*l0s~7Sn+tV~I7?g*Ar8*-kxH*41|mHEoBDyj;X8GlzauM4g>0`7B<9zb!1QXoQvNR1n0#3 +z@e`e0-0S%7tRv#Ta|iiv`w;#U%)Q`D`y!NQm3};vv!jJG;p>eLkxPFE{t>ocFLCA6 +zOl%WkQ(Lbt9!nj*aCIQR_}EypTPM>odY|QR-3mNB&zkxbU>Ci=|CbitM&5~k1bZF7 +zk2bx>IT)V&;81$sG6KCf(MIe1fp)}i&6+BmQ_v~izixFjopeMryy@`ce{K{;p&~x89VaOesIiJ|CEz|`Rcd-skuk4 +zmzvmY7cq0e(!w2r@<;sIh3#N!4iuL|zvDa4KxZYprS~;Y>4R@L9*F4gDfe8wajtt_ +z&GYX#-Z+KdN1Hc3=f>&%lcBtkUpG`2czv*jc5(jD`Xif0`e9_=h#YSm*?ubP2aoC; +zo{JK`MvA>mD=o-8u@~xSZrK+I#`df7${Q4wR*|=&ww~BY7_|1E8MJPZ&VDzsaK&W) +zh?op@`Um7u$R!^(em@@Gc{lxytQTw?B_1Q0NNhI@uI_&wUKm~*p?vdm&{;Ww;qRWp +zHW-PgwAae>)YCDZI^NOrl@HiBpKvFhy8ACIuAbnz_k*|b`)KpjZ{0Z8(sz7)xoQ|s +z$zDv;rVe{V`bIn?e$rZ}b%q>sZxqZ#C(Oj}xXHx(r-iBd;$T|7k~*nNPfa!Yx+rhc +zDfgUz|M1*%4Y_B#&eajWfAb`Zhev5AnslIWq6slPFLIhdI3qP^rhZtrGz +z_IB3CKRHV43x4}d4zK)`o|^4 +zMbfwM=>hdUiYfXvb57|!smVdtL1e@3AtY`+Xv2FO@=W@W4S5=RUON8+{Pj8>emG!E +z)&Y~tus-RbYm2n+Fupcl==gN&xpr;d4sEs0OFv`t4cf08_`mc!ff=K><2K<=&HxpE +zwA06bxc9OFcl@z^zKG}R+;hp`11GtX7u?CJDnej7gH`O%igac-VZo-Qtbt&3*hQTW2c|2!tPaymVE75npo%_7Q%IG4_SzXTa +zpM>)pFEM#eJI2;&!b@MnGR819C5#yaTY5B}(F6C$&U_I&^EaG(Kd%0s|Fqwgp%b!v +zJ1VS+_}$YIv_GQuZO~cz=C3Za?Zn3mHAZX>b2y7j^GM@^>YG~hlE%IUGuJz#>#L`l;UpfUb8mXyK@!K9N>Hj#p~N#oW5Wi4UKIc +zNxb($(F!=@`cW|h#e2QY3*850I1_jqKgpV}*mqNO2J7tMa&D6OOkiW*ihJXq_9%|* +z5$cKY?QE*tKTolM`z^KaAMuhl0*1N9f0+-#~l$2-aR<+MB6 +zvFDQ<4EeLg%eFRCvFFeILqWzR-#d8U<w5v8<_oo@JcT$lFlZDWjI +zLAw_8Rt;lK3dcspoNJ~!9DKw47;+jOR^*u&x#HQcAj_{deA&Ux^K2{q2jSurbI4i# +zv2m04GM-&;&hFO!oo3o;tqF48cFx +zy|0?z2WDEFJwIi$xieL3q~+~+T;sKdshmwJzWf30R09yVZ@PK*VZKw}+liBZd{{g? +z!+XW0#7ne!v-i$x6iY#ODo$Y63-J(p@H)iv(npicIzG|lhuZS(=!%rdlYPwKd?|BX +zm@G=PronM<{h6u}ZcOeWuUNz$`guIdpm(L~%eaHKg!|8}o=9~|=ageh&ZoA$!mKxz +z)?ae<8lu&clkIu5Cz|&Y$-}T89GL#d9=^D*7MjRhpP|zC2iudqxU-fa}sk+Oowao7%JHQun#S^veWJv4o4SO%jEi4Fm+ZDlHl78Kai7(M^!M0% +zlPaAY1z{4tuIm0b@g(!V&-{JX@PhQ==l{&|%?iH%D(}QYOZa`Xb=y;JoKxsKuG=pD +zMnSiE|1>{Q=ZJZ7U+Nh%r#K$U +zum=OXanB{=6w{u^c_X_Uw!1Yt!+5%@N;%8a3->gk@2D@j@=fBL+|M<4#Q_tJAy48mEn(5 +z^I7*_fj2~V*_!8_WBb`xvw5%d6z31T`JU^q=~piGq@auQMpm^Ca3+C`y)*`gx3T^Ej7ryg#cw5O2P0>8$muf_JN->n@WU5zU^W=KUuf +zYkpptm+qAwqE5eGv=v?DOHzmVrp|ekP7*I{dpy@KevmEO9PHl^a1Z1n7u(laG5_Rh +z(sI?RSDfPXR3Ce|i9sjMjuac%_V~5vDN1<`QhT}(e3S*RGRBqrN`hBcwtl}VORT)N +zI5Cm6qm^~D@5CZv*%zVn8p!kRB8RgVntm+kBep$&PJDHP9b@EL)XV5ga|(mk`h`E; +z8MVs6{l=M__r5>q+tL<{zD@7S$wMx=%JRq#-knXoH)m0HGzJg!kLA8x?lFP}li3rg +zJ<`%&#HQdY@hSfCo|T`s-`>Huee`K_z;=xvouyHiF0d +zhT_*tV*I*@_u_%w@a(q7i_ph&H^kQgZ-;Mte1ZIyWMiq;yXEYOxtsOH?ujXOxG9g> +zFoN^%9SkLmq1=(=BY!$H+W$1`gZTSRWaG6C@xA0h>#=f@f2rz~n*A8SFvOQghBj`dIzhoREqMJ*!6BHQK|T_R&!(OmcyMbQao;eg%&%p9@oW1^ +zokKW1pA2T~M=xCY|VN-ikNus@}VQFi63GLY< +zliP;gXlCDblCzFQ>x;-u{mRwzw-20kTNnM1H>=;`#w=&dOO2iPazod2JJu4~JcjMs +z4lEgTORIxL`bs*A=Q+V4J@YkJr`O0g;t|!$Y-T#*xaZv2 +zN{!uPvD@2%vu-O&d?8h8>@IMFENkAsb#u;*XCEAM*%kbx;|*+J?i!>&_Oo&3BYRMK +z`2YUn=p*;M4qv&ELEGFXOLdfMloEw0(*hi54a7u@wyb?QSx( +z6dvz{E|t*fS@iruBm4D6_J{6=`^YeOPj>K@4}*8MgEwC(-*nz1OMo{S#_?EWaQJ(- +zFR9Jo`>yItFBFsckp6%EPkx!CBHTdlgu4k+s@I{_-Z{krbIc?R~qhh +zbu>C_q>b;jR<;iuJGc(9KIDGp`cD)4m`xjG>;6gfC;k`jD-IW@(a$flvUQ4s)zj!W +zH|G+bKWyN!{=zU1b;pE7OUw}0E?<%a%R2Y%uD?&W>$u=moj(;dFM +zcz-AFsqN_}A#7|G>H7bCv0#Hr|1P1O@Tr;uAJdkuHFgN~2hzRL$MU%c?LWRzoO3t+ +ziQ-UNJGF*pf~3(EstsA_e3%N_%8rvA+)F)3yuRuWe`@jc#%UIYMZgfRt@`wS`~C^u +zmnzm}e3ap9uGPQZ&Q@*Iy2yTa2jA(rsmWlD@%pHC-bts&`()l7KAx^`l;7~arMK79 +zd?)`=I8%*-)+E_$i&ka_*Dc{sc$3{N`|aodYT;quamQG`7p}aoMeQ!WmiH~YoNqZN +z`l!)yhxRQ$J?LAG#kag?h;ONVSXzUoBag&$>TNy4JtM@^?=|uCS@69*w@)#R!rr)+ +zQ=v^FnVJFq1NI~tDGQOplB{LSiZQ~ZT_?2TjecSIk +z`S5Y_cb{tMb;bLvpZNxLHnN$1LOc1DUw7^0%Z#qIZEI<(KD9?dys-`504IBXk+SbY +zVyfk|`7SjW>g)Toi~GvWPOf*IVtr*AF;>BMeezP<&oCw#h +z@l11-jnb?9Jo{GJi^zEw)7RIMA5iU^XsW$s7dU!Gz{LAb-Xjw?cPiF3ynQSCF#ojN +z(yg5KYNz)4j?=2)lf|mP&li<8M8L?t!>0BkU=hp}LA1Rb7|UF}`qZ$h{y#?;Lp-?n +zY&%BoJwwOnp}nt*KRLLC*zSycQCJk=1Dn{c=2V8xec`Txzq*J%lrI-eMNjZNXopL$ +zN#EHT8r=zMYjG8i!k@8ZM`&8@{j2j3@Tp1>GWiRCIE0HT<76^@rHn +z@bazh44g*#Ov1~&M~5yZR&%9`)zrIKO;u#?5*|;irm#m$F-|YrvUfZk-}ocD&r);{ +z4e;;CbMG0Wy`8^Ch9#R8mVz8EbZh)3z7-sT=SgrLZztKf_be+Lt7+$9R;?$cR4gwNwPk7%iSB9EILC%73zvUW^>PIWIpmY@HL9Rz;Et+Oc)$ydm|Y1-V$x-bq_a +zdKPlga*$fm9VfBgb5>&!ZL~HaL+Gn_rt@qc2ij6z?z)h>Um2Y~kES +z&zBK!`T8%(*|sTG&Z>FtV@vW!-s5Ol&hwoyUg~bP?eizv^JAndU*Wgrb~Jfuj~iz- +zeaCg>wZnMH>w`rGhQqCYI$OA~7e#z^irGu$`Rc8$e@h4Tg4Vz0On7>Glg$w|cV7eD +z!}HslPT=na>7Dc_vT#s4+4KRg&O!&v=NG@G +zE=;C*-hFs|Uf|m~gM3@q599eGd4i>7fM1<-`$vCn@=8O`*m(jw{cw3D&bh!hIo0}> +z@YH7=O@DB_)lt@$Zpys*rp}wF!oI2LevFtxooqhl*T+7!}SNqpo`>j0xFP=+gHt}0y9!;5<;_!O~eaB_y?z<1vzjd^c?&a+4 +z{80T{h}$ame?u^p{ZO^(KQ{VnYOK!scvolL>ekXDtI4f1GBX;#w{6H;DqJb2eEhFx +zGzs>5>n)DuC#^m%USs{%eb5sP>_cVC>&(Kqr*ZDtOARaBxROI}*HkdRVhsM9>KIRN +zcQoI1tn8Unvx?t)ez?-Tdz5zw_=(z!C*5o4&$FZL1NOM_uAuL@4|v*0^rww-1zKkX +zZ{1fvv+4^^7W|0{-ftwn@8cvbpUX-wnY@-_`(7`Y7Jg9wg86ndyZnLRTXVC8P3OP~4#n$UdcGiY +zvgfyrwfIa?2UG9x6UVLaBz#emk&`^O1k+7!QMmSa79NFX(bk^jK6is~C|t(zIK$!b +za>f*V!k79N&IGHz7cM={KIL#Wf%f#8lrh6W_$~;&oFRe8h24i+>|r)WLHecb3l-vzohMyTeOejKBJw@9`nV +zvUnMw7D(rF6!4Oa;bn@$%UIeo9{&GOymWs-G5i-BX54CZ6=P+^KhKX={-!EA7(OD$ +zJ02hNM!?4!`rvGpVfL~1h}&8h$z8#(iR)t7#k26=Bl1*ViDQ5xs19U3Tq4xA(D* +z_dFkR{={$HIYX!L?t4y8mz#c$?mFGzVE9hi&~^Hs?kwovHM|plhz^SHdpWS@1Xv#M +z^!a6lopTBtEaW@khM3wQofH#`)2ZwLIu+JNA4k{N!mDs9++OPN3LJy$qVO9qp8rO& +z?B#h!so*d8caljTUo7ygx4R=}Lmb)O4aJm4IyXanseLxoA7xeRC7xveh2hB{C?-!Q +zzIVUzUS2R$u4JN~K9bJAq#=+BDJe1#-+)=QTJP(-oC+!sf?7g#ckmrIR>=Z8F4)1+@kam{$ +zBKr5dr}3)!zxZvao{h(%{&&t}sbkHmqE>R+AHh`4bC^{@*;0r9PY$x${`Q +zDLCK3c`V-?ejdy9j)xb9L(gM*)79n7=DF&t#M=?SkG9`+u^a#SV5r}<ijP +ze@Un5o($Qq*4CZ7L3K~kYt%WJ^M3Gs&^yyuv+&K}0q8$d=ke(LYSrCJmcpj&JkKRNCHxjXj%LiN-HqS<=FoNF^{*Dz1?lGu@8kR={_(n6@+99-vLs#-U;Xek +z3x6};Sv&b9Oe-hwADHdDBI^2WUQlO6{HEazhY#VDciC-wm?wL4 +zWFPCy4$qI4M_+4L^e&5&HMG-S2aVs%cODO$u^TlH)dHv%fjCk281la!ZsJ|Eec0fP +zI%Tt$NPAi|j@`2(Kl!zWnXaa-mT_LEonqWtBfb8v5S)C|O)P6Sd}jCN%-zsBxSwP0 +zs(gRJh8oVFJ9wws!-p63@4{?``q)3ierJC~ +zdJ=Rg4t`6_YkL0*&WzXGp;>C*Kz*J&EqccVIvXUuFXE;*$>Xsv;u`iv%@wS@uP|%)W?;L-s}d!JXIeeBSSiIPcBYuqL)I +zq7z+luze9*>9>)65e>0@5m&o?5kuizLI3f65gBOzR`*4$c5*`P?3-P{xDlF*&eHjh +zxOtqyIPrZE-+iW_i#>nj{~-EKJ;L)l;_)fv-QRhxKyeZIt&*Er(6i>%%BHWJWMzl= +z$DS*IuXa?)%u$J2_Q561e%ThzQ?ha6mm2=X>4jR_jZqxK?HPN!b#99FMZ^&g)Kk{K +z6^^wIZ*_H|n|{A}@9!M$wGLnEo_FzFxdN@XxAXgG+p71uaq8$>Hl*NE4a&)1DbQH! +zZG{>8?Zh9CoW36bXEu&AG#Aw6;)^<$As)BVxui!kzIYt{52u&6hmG!w#TCDpu)G!g +zw`kHwZgOZ$=OTyKzBjDDZS7-gWBoF1zun3^S9?2&Vj;QH(aov*p%VTS8A@;hnp~>UO +z#dn_k-NDy~O}taBn)LqgI^1}So7~1=oTp|;oJV;_#d&5$7al>JCmM|NsOEOQiSsCi +zZS(c1Zp9U}$0SbocMZ;`CNmazMR)lmv^yZ)BYVWxE^xSJ&RWQc#q{r_LXM4f(a((6W0Yc-e_Zu7MH~b;mhY6)|NQgb$r># +zSe}QyJXG`St@7i~CT>VI@J6^9Xe@}d=+GNGzzx{qcAI?%iGte2-`^{(dJh$auZSC`bE8U$eaEV~{vmLwND;T%PSd +z+R3Jseq6)vqs@yixN$y2-*Nr;=P_RN{7_-WkMZNLPn#+I7*Ja!-B|1L3*tlF#a?Z4 +z3&r{5J4X%T$W4c{=?7F84 +zaw^<-{N!J?@K!i@>#)b-@ZyI&AQ%PL5^}Wu4y((6RdC9mNOI@XP&n`E1h(9-op0>n +zyq&QQ2j{UdIEBv^zVZ4*wX+_lm$KF=hNhgFaAj#4b}nU8_#K}zcM#p?FC!3 +zQfH;l7?DnO!Sn|r?#0ra7nyTvEFLs}jVsy>rPcIq_U_S_Il~m+(bOGb*B5nqx_x9A +z-B!GEczpcW)pB@xrTIquCHQ;qEWp2O7~TFS;QtzNP|38X=hl}G5C2z(!JpxqxO}v6 +z_j=jekdNd6Ja@C9ceuJ=btLj}6?+li>nyTgxcG2n +z`kk1q2rB8bl71?CbiRdrmn6Td&9ehzEwxTBcz(*iNIZMr)6_-Cr?-3Ky)Um=oR4kW +zc--rpfvuV!8?*CuLcO7CSI){-7f;W9C`dj;{Y1ac0mrA?PYueR^1r!#kEu5|^+VQI +zQJv7Ob(U5)0E6ZiuT`ix-oB$|=$kFPx3w=b-B}2>k2?Ioou#&2Ep4K~Iw74!U~y*e +zQhc%D#wTpM9UovT%`RJ?B|TXV?hPH`r>@w!C~_li|>a|3xjfOsxvlT_QR!F$7cDT>~`as-&uiWD5N#2PE +zeQk~RGllmR4)2?2Q#(RUjbujcJBj~FXD~K+ot<4xd#wQntEovA75r@B@-~M{&#!5| +zZwEhd+|(A$eW0$0yB3QcSl?PScYRcJ*8}OI2ObdIi;8Yu-&S-NwMBRC7fwdPp>SJ) +zEQ;6TwMQf2?H3=g^XdK7fq1*d;q5-&9Sm>pcX(^3jkggDu8OATwT{)H*SK@ftRMc2 +zduZDEp<#GT^ZlXl*gg!8bum1~`7Qr~^wak2M)XrFdP=e{-tzcR98WkCzNG`iPqpZZ +z^5Bfl=HOQyx^o~3j_Dj9UXnV$sWm+%+?|@;)Ya5f`a;7^$WM8&fZSJoc0yutRP(Oo +zjeDsDo))f)mL+D_v&X7;a`?qmRU+9mj{Wt`;p!Cr-PY@Z=!faxnDxcM3&>20`{Ntf +z>YM78&89Oi6ypRAts5O9$))1R%`y8&dut=s@P)w_`>BgtKUQNI{a|T%5wJbS?uN5B4M`~7$LrYo3~9UDFh{9&hL +zJigcUcJqE#wv{&EgZS}7#PFB(C{`$(rGtBWwlXiBF{YTVzRz$E^t6zgo$ze-aIQ=( +zbYp3pH2tCTJ2loc@ZKEOrY_~aUwtR|ng-k2F;6k=HSV&k#vB)RL>kxUDO$M8_xNyU +zO5|2_Eqr0kQ=$;P(%7PZs38dKxF?B`FL2Z8;PaB52NM(*(5mJWW^qjNGmujy|W +zIX}x|MeH?C)qz??tElwfwpA1&n{{X +z?g5WW^{%@)*pe#`=I7Xdn~Q>_IchVgE!{K5j%U9Q!n^a$?)!Sak7C~wL&(`a4*XvF +zd&f@Ew%M%Tx`#uu;On1s7MkQlvfocd)wb-{w3 +z%99$-7yrh2S7+smpOGz-mm1DP%?6I9tnRl^oss4z`098r*$u)Orv4k8NhW$EqgGxw +zt}MW~+nl{E7;SvMiMBuL2swLmS>mG9amd~|&|}}gMC$6be%9pn4ctck-;v4MpYm;4 +z(9|K=C36$Qi^L~QlDXp+>ptqj*+7!D_Gj(A$+OMgX3M*y!_kpye2)t^q~zOu`6Vl3 +z;`?UWmyaM{=klEQ%w-+=sR@1cVh{UEd$dQ2n#inj76Stf?e&~3U-fD#9dh26auE?e +z)q8>2*T*);?k4W*+r0M-@?7dS2)?F-$JZU9C-FH@|Oy`*zW +z?@iHu9eC&|=T7xV_bKqZ8C)#NPGM3+-_j3F~UJnl5-PYLKlsKCu?%-zvEsc +z&idiIfq|=_$#2O8w&lKN{(oBjEBuYim-wNYzQnJ)oxLeu^*mV&Pl|tZFN*dcwE}ao +zp_%UVuFSrP+-c9BiGky{4Clc|pHW@$iyOQhpuPUKy3f|`=hEG^h5aMMP_XBQ?qM#c +z-;h1v+Jl<_*MfumB($85&sK^4Spc0ZpGV+avgvJk;X!$o>yvh_Tc6&%S2e4`_a=V# +zq89|ShgGm?4Hc}CJ+2&QyET)_>1hG${xN0`8z{ft!tiNgj4a0$F+Pw#i9;`&&w3`FBe8> +z&L`j6hs-XD?FpPr-{SGzoN>^F9P6HzTJ+_PV1ECTL8{-bNvZT`)}&fu=XKOc)|aNz +zw8OR3B!x(XW>ERMj;0L5X09=jW +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 +z>_3(M5ghW +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 +z3QOOQPTvWBcjlB=PnsO|kHER|*(TG)f( +zbF;mCOHKEq6|Rz;$4X_QXMq%j9+H^)fg4%B5>LP4m*6` +z(q%A-WZ$&)^3Pg<-oDwijq3vSqdxri!i9XUI6i(rEp0El=*l4ZsPJNAPY2FV^AXPE +z^J+foQ+iu-`t|<3$7$X*L*{MU`8Iyu(f#(k$%i@L(9>Zg-1oqzUGQF#d`Pv+hp4ao +z7sa=i)Zgs(0||$_*TIY6aSeEsj;w=!tlhjZcLBD+h3FdZV_toTJ{P+_@1Q@OiK%-N +zHKug(^xs*%(#|^{pOgQ%-92B#bH${9*Nt7U*>#VAc)W~y4Z&h-H)=8$9s-sN94zJZ +zI~v_KpSFHn`P>(|v+{O#+i~k`ZA!+=ljhC7LUhs2>=eEop0C_wzNd +zB)g)w=)Np*NxklK=tbT?2%mT!7*5-T^m!gOm*~oR-@$s{5#sw!K<3s2D?8L)u}Z}d +z{do|ze1jlAI+ZgLFKJ57Jihq&=05q^>~D)7OQ#+GAlp00SE7Ff4{I|p +zDPE}@UsKM=9`YvnkZxAqOfn={lFWHKAW43eGmFeRCEmM)ywtQXRsZy9cAPfGdDzJB +zX{^Tw%8l>G`-+m!AV_Ayua8eZZF~ZI27_RfO(fhX_9|RipJ_hNl?SQBPFmVY%oU$$ +znemyveTs* +zvOl}|zwANbLi`{;&>7J)u?^z-Ts33Jeh)Q-4^c-6O{q;BeM??7NY&f}ljJU2Q=|C% +z`g~Na#P#W}ud9yg(Df9a7InbsVOy3+)$bslQ%~Q;rk;60ruh8%=_G5y +zRf#I<;p?eqzGbWCcU7V?H4FOJgOh9CwYYKVXBRY;a31TN@Dr)A$aoNZ!qw8(=flJl +zzFojRz8SscVM#rBSwD%nZR4C>okzPFylW1ssTVFT;4ByA7HF4CGM6`aUm0E!sopC^ +z4TtRg^*rWdS_^$n^~ +z+1+#K}$kigoLbmd0-n9o~a+zREcQ5}|2a|H!_}9hz9l#~Le9zHL +zKHL|7T=3x}KZ_Wn9eP-Mc{9FLPls%5{8a24n~Smg@ob)8R_Plc>1oN?hBo}9DA>53 +zI8C;dn)fty92smk-K$j1-QP>_aZ3yx&f8bfq5OPh_BPH{mn=X_z9SdQ{aGC+S{{1x +zUe&u3<9l>Q2jlFCf*SPXD-9pvTfZjfXy1m79Ff;A`g#DbVV8jWAozIh +z81#OMXWT>4o4hr^7i29WS48bX1YE#!oypxF3qLWJRrn6*(`N_$skklL?)l~g#z<(K +z%KUF)I6cqdRQRj_ri0;=dSdLI>BinnqNn7i496!nq`_x3_*8w&+rj6bIDBUBIXFJa +z^&WuFD`+o#>JH}rO?=MiRg#Z@-3W6QUX0^2Vo{nZkL)(twpm(s_$FVW$~X% +zEt?sXlZPTk7a3pB@^p-K|{uO6Vzh +zxVB@sEPTFnKC4(e!WZuginvk5&74W{`a73=`9B${?5fg7!*N>%w#JbrZV(Drk#u +zm8d7@^<0D2-V`*}_}X`A{p1%LKI!(z1=#88r}r*wX4jW;)x+<6Ig%QyDF%k2YlHVS +z)SrBnw!F?sJ@PYolk}-?IWK}UQroa+3+r2$NTrIY8&i$3YR6Rb^9bv!=7fG8f}bC= +zXH|F+-}h2aqPU3sCfP%NjZogb{T!<^yYIB;=K9>QY6Ql)cUj*3g736GxAQw--IQHa +z$o&t!FXyf1{^z-ICeXKZy5Svc{KuCS{OvN{DF?k9o{95IGN?i(7MPe8cSCL6jV&nO +zT6SEX+_+!6v3+xDTN#cwHdzo%K&A@y(Otw~l!v(dcNQO7XV=`JbK$D8+SA3~oYrn{ +ze=Ol$7j*42HVA%MyFCw2{43etO>D^8jbUdJA7W})Td#eFUd{w(5RA^%(GR`?`tOGN2njg0d{VY^$iBX6rxPT1x+ida=^1I&l}i3fl2N*Z +z{Y3%i4X6%>_ua?S=i%x@%a9e#OFH0|X%^r2eFgssAE1){nG1aubercTjj#8`X52Q~ +z)O2ePocfZ^2wYz+^!4vCc}eqsox>#F!)H1`=j)DJ>C=#$UDb;z_B&A@%G|3)#9Mvp +zNbsiqq)VkAg)iT?^s4V)bQy)OWAUZ?8XJ=hrNaNhq}Jr3U}r=9=@Ir{1pixn$i9QF +ztb1O6*yrkB&wbx&=i6w^*YKlMi(XA!*yBFw@KwFW?4dPhk9b`6Oto|w%e%+;PP$)u +z|0##pIREYX`y<6~5du|E>< +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 +z_N1+PiYIAwbf#XA6sn|` +z!guEPdj0;$E6Lt#ugkNZ`}3@4HGXQWJQ#p)o`O%I2Ya-hI?r{)jNdq8rgq@44QWj_2MLP2CC0_ic{8wWriJhCZtJoW5~-k#It1e1Gwb-TQSPmVeCR +z$|~YgkB2^un|Xei=Wcybc*lV^zMC=d##YM4$H2QKgDqgrc6epUz{1SSkg!GIE!CAycvY7I^Iivk!RO%3=;=n!yT;TYj?M6zIRn%cA0d-N^FuPyhA7Lug4d#oijQ+I7c(!ZP>ck+qQKncMrypVS#u0)>iKV +ze5X~w_G2BKk?C7>>hp~={MKDbY^MPGjC0C{j`mW+1R5MZ51qYktA(BC#nUO~s2nQ! +z^8Ig3PrYRFyW?s9hVxT@;O{BlTG4d6*ZNQu{>{tjZ!vsfA8VQ%k2fVbYvXyl@OP+o +z$R^fwbBD%13;EuJeYXT1TQ(X#S<~MO^v8TNob|~Td0FE}+W3WAHt0M7=gv};<>=IU +zbZ12VYj%#CZ&Gce{f)}!_SZulvDMTzOysUFt;XNGtI_jY2Xr% +zu8%jB{4UM1kbnge8&XOdwAYE!SimOZw#NS79n{f +z;Q5`|bdlem;a!FQxn#^+$n%F7`&-#|o~D2Ti9jT-Fo2aq5 +zEGXfBtyeYq>>1j}Xsa4f{he;lj82>DsK&t!NS +zxmLx*3R?JIbT`?b&E6eooXmMi?NBtru+b&cVtG|>mPbg=*taWnUh^XpDnaa(blz# +z!D}xM+qBRopiL`nmX2$)Fl^IGo3m-tPMfxIZ7vSmw9_Wn#u+`@tQyzm?O~fVZGKLh +zZrWtVwV4^V>88zg+Vs$7^H?;$Ui}U7jN?cxZa +zS7zlKL>}%{4X5S!=cbU4q+0T--B0d4{>7(^%;)c{Vylu}?mOiTI@{+BrdBrkg0X*= +z^(ubk)|X;Fv8}j*%j+?2`gI_5-#cxQi +zEnSv8g|jmF*RnH#nQ8$PQ%|S^`9S;)9Mf4F%NxYcV)!>(LjN=0^vCHZ#k`i4&Vu)= +zZjbbjmHi#mW0kM7nA$_=h>SHWkgxkhdU{>xw{dV6pRzc734UGc+msD@c4&L5AJz>n +zTivGuom%&`RFusQew)9;jH$ZS`TSFNN%jeT8&?$k(Sn!YrkJMnL9fgTepY|roQ8i@ +zAQ+INxJUPCEn+^JlW>mpjDg8izp7!%C`_8VT)g5U#?#y-^I*{pIxg +zT%+!g*ZgwVhjh+)yzT68G83bWfgJ{{yD| +zb9bpv^(C9A9Gv6)#e}pzo9|&x#QgRfycy36DtPa3U3mS55U-Vo>S!*?51v@28dj>6 +zmT&w9zlDo^{C4`e_@Z!CeDPF%>x{53nm4w~h4{_SFN=4~ZYDT?M=> +z&bdW+Ci38m*#@r~-l6lg(*xyxMR}{>=f-yYu%0=-9)4JE+P^k__(bdR{BSSNBws`q +z@Wu6xUZOQ#YS6vmh4Re})esw~q*h4GqYj9_GVocK;>GfR`P7uI^&10fr%>Z@dXh7W +z(D~#Dogaet6*o)`V*!<>mP>PXF>|19M3VoxhgW?Ct!Sk$a3ii~Z2YcSkF)&aJYTqVH*A50L#)-n<6#P%) +z*X!mb*bvA!{H~nu#OE|W?V*bcipObQ;%l0-c-(uj8%0B+dGSI=^Lwtf{H_gpcl_=z +zBK&S4drNKT4)MFir*dD~vt3OWn`dKb|H&}+BHI5XeHuP^UbgA2wB^pRZKAt#;E$Sv +z_#pCzJ2l4g!KFP{4cFiCiQ&{YzdXG6n*}~t^TQBc^ea9%hq=BMJ}6!%ek*?HFPxon +z`6(0ey@6|N-zJyFtatxiaptWx+t`tKS7(R*9{~R1OXGRcD*AA^X5?>#F9{FD@37w| +zZZNp^HW3?u;2Z*LJ_` +zBDGnW?I^1X>Z$kRm)4PXuKl%k(|&BD3Zwttnm>BSEgR&g1hLYO}&OahIte+(aY3Ueqy7;4-2RTM}-?Aa~vV34R7WdE&tNV)H>gii+ +zIm(&_A1^ZVj{5iM+xYhfA72iCt&T4!)0yP8=>K;N_{1-h=fzXS;rIpJ(E1*ygt-Af +zf4|j>@s*e}+sDnT|0?>f;ojCd^k=Oh8TwOnmUDUO +z@<4R0y7!#%?DM?hI|ZlcJPYSH4>Vpk)#AL`Os8Mh&do{VmGhjltMDRQ141+(9mnoN +zi^fX3?*(_A={P;iV^W(v@0+;)UY-j#l>egjsDF?8rO|T|*b=PCok6i@CB~2SQe-Vl +zCm74&b3N~(_71+<-6y}txSG7BDwDUwS$}-{D@S9d2j46BSozqBk1~!A!SPYSVPMTI +z8@|eUHQ5%f-S_#%wW;*px>fDu1Fp{7c3>lpp-Cmw+-}msh=KsGLlRX-a(?;Jer%Cs=EdN-+&KLcrc<=Nt*(BP-E3s836@MJR +z+qGstWm6$D9vZI?NPls7YH%4i**w}mHf|1S8+$H!@NXpFpKJU*{*#r(Q_x4O{-gfX +zhhXmdak%B^v6pWpU!+@1DW2P)`AO%|+@w^5Zjy5ZSp5CqcM6p +zPdhgrZ$|gV9z2R4eYMHOsv<5pnIG~%djFF;Qo>>3ug6#o=p>VYH}QZZ&wAy5*M2*? +zVh-%J{8v`TEv6rQ7sRP=HRsPfzZm>z%@p6TBK3mmeE7?`7elao>Mo68Y3b-)s)?hR +z$N2TGx>~e^&jz2mTesHdYB&f6TDNd###ijz7x2v@qf1%5sWx~sDN{3wH?`o+%2&ag +zYVIf~^Xg45u;i8U}5{<7Q@Y7o(Mn0hrac^op+YL +zgde}h|NIMJ;qc(W9DD>1$Fn=AX(`)t0G>`h+@n3l +zr)Kkg@mupRz@)!yC}`PY$z2z*EhKWQ&S +zXEl*K3KoX&Jexjv-laQ49e*n4nc(PniujY^O<{hsV4Lu(0>M{$gw1s>hR+n%j=pQw +zZvBmRzT2;qy!G~WW6MmmM$Ioy9+%tmv%@*A;ya#qX`Wh#*5l56nf>Q|yB9M)>R5P2 +zLv!56ITcIC*KVjcV_W(hPhXY1)0mai9zHrw=Ko`;W4+WOoyS8b*BQk_xZKNK8a^MA9%~h}*#P6Xtu6D#=s2i=~`x3?;-?!TK +zAglE}71p7kzfL_b59?1%q~FxgpX$pP8z*LCyV_s&`(@2T{6xG&_eAMF9&pgiQTJTA +zvjLaGb9HZ&k9??uw+Mf`nZIf~$PXpEd(hj&Js|faZ=^196SnWFupWorI^r)*(M7d~hJmI&}W$Lj0@3 +zZ^d+-41M%+(RMudEA%Mg`Tg{*{T?Kzd>ZzT)?F9(n*YPu331N9@D1zVEWez?{cA=n +zY(C99oV!&P|5>;QqAb+@HoBNZgyI +z9EHS@1hr4AbT8^a3i&+O`23+g>ajfX4!f>;;3pi)=NGe|`x~eELBrYfJ+17@2F+Jz +zi9J6aOf8$ry|Gs|EN4EFCzsJ@vA;M7$O(t;vDepgZfO#JktT9~rw4I(u=YPuS`jR! +zt>7w{_8{|$NC#29I`nM5UCEt9hZ{@JaQmQpFq^X3#XFB_e2==JSF%PAJt1lIliJ=l +z68krNDD?MhZ?%`&(?yZ}9N-)6ISe^wx%)c$f2Gd#0v};#sSQuerglPkf?pk=3ab3w{h*)826R +zXJ0Y72!iLm;Ir-<5p0}KUAE%JW44brzW+ZVO=#^g|0?Qm&uyp(*KYeG*N}E@kN$!7 +z-S7$7CkD5P4}SVP1-l_iKjnPqNm(C&7f@`(p+6#v!mOH{1 +z$w`MZE@mlut)Wj#uk$#!bj^t7X61Xr+#%-ZwF)1xc*Sd>*95WWWzbp+^P7lXztcp$ +z@z+4BmC%>)mOB0u;^=t%T*`RjOX5$gVKgRpBHTQ}{-@9*ew&}a8yG_OcMLUfrqJh3 +zX!QGFKYY90qa+lxT8}=UTnFK=_`UKR-hG+HK_9w)CS`fhzZ)FBq)RleJ#=&)3-?mv +z?Vv5R%y|IOvW=xHMs!`+UpME9zDyeg=_s#%V%Uzgis$$6d>XaS<@x(6XLy +z3g@GE`u6)KrkBCXtiA2OYM}Jn{G3RKEpTf!4o9RP)tv%O% +zI~!YLiAQV*VYYyFN140uy`I1Kg?gRvT=T0L)in$AtPkf|K5m}0?Q&=P;^?8GMJuml +zBNcRB%{Le~-|t^KcD_-4Uh};^obQ)ur@l4T3(PypPgdz2^S5+(J90BC|AL`etwm>C +zqOl3luXHwhhD_&IxO>)X-Cc=}6XQ-H^qg!B{>`G&1;JWkE6a$j=uWq_hL+HSnO6&X +z&3C3)yvi-yd2G4w8C?u{O#S+vrj4xCU)a+W=YQ#ZR##j^2<29DAL`}gG0Xzj3c6sD +zc-`g5&{@I9eesCp8(PN6^lrwv9r{>x5_$e*#%x1IN$;BMt2Vo(1?36;Fr4!O`hpI+ +zsO6Ett{I6fuoPF-zihukkL(*|)`5#H%!uphdT#sxF +zpeK9JWL5G)Vo$2?F^JE9D);x!@vlrKO6PDN>dXcGXT=x0HO^#>Y1SxyVCQFH*|)&T +zzSFn|^+B&^*I0d7_tSsGzzF#OAG#htN-g)G9%-aj>O%o{Rp?%Zz}&-D(1n)LC(p9U +z(w?Mriy_u4{lJ6%Mfa!ra{>S7*!jNP9Do#%6}VOQx#l6~I5Luu~YR-T*oC%VUb8>|h`jNDee +z7{O8N?FQym)NOTZ70g-Rn0c^}xr0-BHT&J$M=sjQ<<0f@Ypkttqgm%o +z$I)yq*m>-$%&VI^+wxiZUUN=okJiG=^z5C$6Mc_4w|DBD)~)rNeCz^@6%Tg4B6p6* +z$-GsJFPl>M)CVpLZhuSv&ETD$``!aXaX&~lpA}!Qgy)W@Me$tsA2}KMaL&?UoPICo +zx%f#c;v4!w_}=3^&%4B19_7A8_IXcqjVPGrTi5UQ@VmY9EkF7k-*8^9F9_oZl6QB9 +zZ8p<}cktG0vkyh?a=asazmE6IBXj<0`21#`e>d{{@5AR;^IY_fLvd8UU-wTF>nk<1 +zb$WLVIpRPaM3&>J!o>Bx@B*aOcbU*3>qae4gzEKap?R +zF$UrNkNFBh;cL +z7qNM!-9Pow8unq|&(6gCrexCCiL-mVIlEd!uAvX_=Wl4@cs<$aBl_--+E3P~JVUo; +ztv5H%#w)ZY=^5BHo!t4+Sy;c$O}{vLX7+OQ5$P(m{v2$Axk>84F?Z@2bB;j%Bl(PG +zvSt^%(~sk2j(^wieE&FmP&O3v=8Vo~`Y*v&^2u8iu1+Iw5kCH~ +z^p|G-KeTv80XBwwJqdq#kmTMKozwUIW^-;| +z_$6A<-Uv^V;G=X%?TLePfb9;=hQ1FQcfj{cpDpxR6->r2_*3A34TSD*{c7^jNoSEw +z=-TMapZws;eZiNXb^W`(b#7N}HQso;`=9<~asAQ1+<9y_{kYonHcx$iuE;M6Ja2ig +zyQjhJiTKe*zHzxPZeO$);z{B~s$+2qFtIri1sN8dLsW*O=uf_;Ximk^Q5!%$u`1wK +z+k2RKo_s$GIvR60&L8o_UleM$ir;=Tgu@=5zeN99-wysBI1b-bi^IlQq&p~Ptu;HI +z%Uuz>J?+6{-JurilFan}l*pYA9O~eoYsfL1OAU{D^y?+y#L3sO7Cm>3@u|y)U5N|< +z|4i)F;be??ik@3M#ks6s{BmTZ_I%B=7nr*THWhD5p6~O6{j->H-{tj?LosnYe7qbE +zn78KKQF>JpUkNxqv!U4V+hn?EVUqg?f<4ROZN`*7nF|K{Wze{u4PFkf;SzT^e(P;9el>uLVhB-x6784n8g#Xlgf|EN+tN>#J~q-`?;qs1@Mjgz +zRF7GDs?}TZA)^J= +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 +z**e;s=08SVp|wfjnQJER5T1;W +z#=Px)OTF&Cl-J%D#Xo(&l<&zq;(PmTihh!OPwv9#_w?IWIl=eh&o#_V`LS{OaW;nI +z%fe&TOCr92AE+HW??iX|j6LrvzYefPjT{?O|Na}~&xz-V527Q>CT>EdTb(N|YvfLm +zR(uu8bzKPz*7uR08~EV8Z0Y=;SK}+GMc2~VM&jVKj~m;i2|O>vA)LP7V)|IwryMWs +zi~Kr^U$D4Q&m5dz$E=_Km5(Q%jz>;jR4&N|I+eAg!uonqf9cV)l(Ttg+fsg7_$kbz +z;7?NC)8|4uAE3R?+c@5#-x|M{=L77cgS}ur-oAquK~M8c&4V`sJK3&$(|humPa*$C +z{J)a?oAJ3fHH^=iJ2ijC4t-;VHMn!>UTEj!&a^ex99;i&#KLty&wn?;`u6hNt!)fm +zai;WLk#$|bx&#NF4aoOsedpjum~*eT-~jkh+qIlCO5|4q6XDN%wFkKIy!&w*7=&!^rQZMU~JTLbMj#bFMpgrcXt#H)Wk5nH;StZ +z_%@2GvPIn(!qH!cHt5;3i^BL`bW+dr(UAy +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 +zytj>^7mcHQ=Ed~k}^e^=3KCelO>XlS$=q +zR>B9y>zK2Lb{>--PB2Uu*v&yVh(pUqPO2Ly{s2E5)eZKBXMYEC1^&sNLu*zym~CM4 +z>bx@@@$*SO{y6M&9er+Mouru +zD-+YN7H%t^olSU2cykjnVP>!Bk-Vlp{_m%+PH3pp*%8zLF>Phf=uDy3r+RdbFWzkC +zQk&7)BGIt)(pIku{gisFrG5i4bKn&4{1oP)ygS*NMLc(TEUo0KP!>&_p1Wyqc7l*gB3o016#pUZ3Rcy +zUT}5o1VhCd=bcNw*V{P>9^dr0eMEL{J_}1Ts^ZB&-W>S}8Np3!EJlk&gbh{bP +z@m|h>bdvMYIT5@aFBeX(DZM#a&0bPx1HEci+Q&B3dF&KxBz`%d`kDssBC+(BUfOwV +zsi`Sp^Nm$!)4}e2;avC8hWzeM`ee^l(|yqkH@d~LB4Zq +zNJs9&`i^Pq4W#jHfG_0s)b_RTbCCA={7vZY?fueUL@)R8+sSABAGOa<_WyYQ)cE$% +zz8pSPGB=y+=V!;iAKzaawS1#(0z(I5^W*luXybR1@#A}aB!IK)}CFZPAdSHREr`IC)@4&u)rcu0zZ;-#W$X^>*_Kobaaac#^ZjU5K +z-Wi_XznHlkjlk3Re|RSSLG-K~befG1@I7kJB~Lydj=Sd%_C6?$w}Zb0 +zhl7tNa|a(+4T6FXw+8-AO}VV@vMhoImBZCYKAGXs6?d4kRNhO8oMOb{^=nI)2X;?e +zu_ubs+6&rd>c|1h|M>yvuBA`eTyl>ZCbRv{q|bfGReq7V +z%ddg9(q~%9QJw2OI&_-<6XI`O$q$(4mgb{$zV4{41#vYremXHNN9U?_V(+os-+1Qd +zEPXGft&{0d`VM$5f2h9IS=G7zqwomi1hLU~th3*qO&irWp5|X}?re5Aq#6*1Lpsm> +zUT40V`r!k}S;=tK?wpj>nU`w+!>n;hkRWF5z)_I)PP3lkmF2nC7xe}x8Nn&)s-1=0?*@Kv5diiSV7&iv^_j=hE +z#;xmRClUBT1w(;|gw{%%NIFmjUcd~ZzbEdXV6c<*8xN!K0 +zaABoz0a>vU`zO7N8l3%{UE=Tc{re5R9WU>oBk*i^$~1G=?{!1e1#DJ9tK9adkK_a@5{DgHM3FR^e}K}L@gCJUS`zXk?W=f^?8`X)zt3xZ*ekhiXmVL|@GfG6UilrllClNC +z4V*VoJ?DQ7aW(dpTQ*=1QftWW^K8bxoPEBJeJeUI-LwGRq8Pua=$ahV>~w!Y@Cv@B +zYX2GP4|E1qwLz-7^sc0-!&!*4p1r5{QD +zBfMZTwkzNFbAQGeTHE>Jnf?R#$=BzoC78?q8GE#BVNg_dDRl`pFObepPA&9r&)KQ2 +z;2GqK@IU%jEpu3QviN_ee75c3{%Xvp6_YS|nMu`%H+(>_6^)3WbcFDI^f?RPyYtum +zTJU%_f8DN~;5fA>hE)5^_3=~s_!a-x1CxL=YIFU@hN{v<4L1LhBk873;N+_&|$xsUCcbLV4rEzl|_b3#V%4GHdp0o +zQ(t0TC<9dUuafpHWltO2kMfz3Lso{UPqmxoKZBf5y+YlOzIs^mG4z7GXbo$h?d6+F +zY8I+}+ebkBMtKdSMxod4m&odNP&c{$0_4<}ccy{*k~-oU`$!F`4I;~~js!P~)l|G}Nd +z76W7H;ir>>Y?*rN0ZNQNBARgy|<~7l*$J +zew~>qZtg0n7D$oU;gg>R?vjPnEte +zzI|Z`*9yj|1}?(szu +zRer@?Puu+yZ{Eyzj)$iF1blPZ1_#@9rq6<0bv)MafAj8E#=G8(mxO29G1mf{^g!`> +zt<7iRpY<2UQ{wOPJqbpdhvu**GKY9%4zA7riM;nB@0C|_gmtIB(ww-;D +z%ty~R_v}c1FviPmU%9DMV@u{ZIioXX`#FP&ZQ1v?@Ya^w=NbQ`=+^h+0sORcj`1&2 +zH@~zh`3ZP5x>{F_7vEhnf)PlINZCN-6a& +zzW*<=;Zv!nN8N)Ztlmk;A3h%u?EO2YRpShLn1>J+nOT=bB^6_~Y!^#v3FzfGcb743Mk9 +z2YK+BPTT~`Sb6ynAS@YaXd(HJf^5^cw +zwzGAZ@PjJ;DcqI584$b2w~xMD+rxUcD)%pjzeVtf@{z0QOFpwY|0eQ5^xneeVxCJ+ +zO!>3m#RZ(5&hsmQt!fjF08?rvZCmw?3y1IHfBhYu&(v@}_}C`AV|nmt^_6ej%(u>G +z7oFP<-v5Djnwx!Z=hnk>rCKN+e|GHp4Ipt-tZpoafT-k%P)Kyc9nzso~MM5=XbUu>#krvOQ4H^|T^P4(5Aj{NsPBbi!W9RLVsMeXKZA=;;(wnA@18iY +z^O)B73%=8PWd2rgcB_NYcs%W+ec*jl?Yab0`Ks%HV-#mIVV}EsC;tm|m3M*r_`9Wd +zy}c&Wt+ftc2j3Z9k|P_Qd9onG$Ik7*ww4mDp)mKBk~-tlKE>ds +zm523yfhTpFzQ(L?bls9ATA#IB^Ns62`Ux}tcJ6X}A90Z={8RL^&*&kyqa&=#Ho!0J +zKFl*U^0XiOz0J(+5p<5<^qpnm$X5Qw$aU6T?=fhaoaWv*I(GfJv0-;!NHY2GZ>&tN +zG4v*XPgUs4xBCTs8Cy5yPtVpzcbK!*2iEw$?L9W+B_`CsL^1TRrrU4(}n!efe-iBPPsOVBJJs+Nb4e)6| +zE;MyrS#}{fIB%q8OCnq8F9(0FA%>X9Zv59Zx9RWhf4vhtDCoY={8~ExB=$!&NG|Dg +zKFIO&*c_S1(Pt-K??(C>7`I>VE*n1Kp4GEwZ#?my^|5F7tV+a&>)7XyhJKnPyp;Ui +z>_v>_of%(Te}cVpJ|*p45ZSwzo*27#N09m2Gws(P@1XbFv|rx9{1LZjM_)+fME8DK +zqJj7*yerlP+6uXh8VD1C`Hh_=>_+cT~A;IG_% +z-D-63B=mLFg!{FY`EP*+e$e*@^m6qn9k(*1G2k>D_b%zxKGjsmhD*lnRfch1+g?>O +zPJxf4_%2FkYr?&9`&Gkx*(vy%yVy5=#G`M`m-pPV!SQMFh-aP&;RBrce?#t<)-UIH +zuIq1*=hC<7!@#3~Jr_Kn4f?hExBAmK`#r(ro@@%3oM&Ki&MW)x1}_-@D1OCy!2*4t +z4jEb>)&*Tf|L_{a?*u>br@`s5;T>VUJLGNWQrc*LU0-eNUF})k;c6sYVi9=e{>$njzmM>)IZ^!Qz2M0?Ze*!odP%?FYGHY6J|I42aG$kZ +z7Q!?h!gMp=(jNWF@=U}3cxK^wyW!uBz*GESVt9&={|I>grtfWrClp}d;2Fn90gi12 +zhFhPWZs9SVF~GesFs*r8Z20;JOiO4p5lnwG+xD@4@b$oSI<{#6M>q4W^t&ib2mf(m +z{Bm0x2E`Ubk8Zk-$QMZUh6j~uY|bHs9kY(sMoUh@S?Hy +z!;Z_Xgjl!PBVD^~5g(qbbKd-@|jO+s|VU<&TSX)kXN%<`aCE +z<@vA2=~JtCru9pwlH3yS6pwYZ3LLhHr~Xg)>6wi2TKK8qfB)(DpIuw=hvLl*Gj#8i +z_=wdpE-YHUK>H$I2kvbH*Y1%|gtIpA!_UYcIm!=3&*Fudn%MAz;r+f&Uae!S@jOsD +z6>g6T@+y%P&x!KEfNy1YX|H8p1ry+xa0;K(NQw8rNcqcg)Zn$bcvC#paYHa8Drl5(`j>8=N0Is;>$oh6@ +zOLSy;$Tw&!SUCPS(R`i)mOaEWHUH?`ocvizAH2^nf8!5xWAa@OYwPo|)xZs_39%qi5M|6L4|1R3F_KemdyJ-A6eomX{I^6dTjwkwG@Y=|?R{ygyQhe>N +ziEkvRquasU>lkmnKR=ha=*r8dd4Fj9Vp#|EVR|0cnU;M1f#KWyb8~A61}E^75pTKF +zyc0Jimk}2t+io1LHwO}UA*i1^v`x4<9!$J@r#XJyXK;Ehju>13aAwvgniWW +zo#trkyT3iVB|rb?7c&p#!3qAAyw^RqhEI_5^0i1!E4|M>t{CwH1}-t)e<|`_@DV+T +z4uq%RiNRAx6Z(D!-wS`J?{XY|ww(k&KVNV0^ON*35q_!vrM#2=0ZrnA6c2X!Nt_2> +z7*CZM++PVVA?N?Hv2|3Hw +z<4V4-qd(OVDhm6ZYJR)E^!>q~SpS0aK_0yOrcU9V_R0CwbxuflSQ(qu8H?RZp6?uD +zElr)`Kj+~`^h=lUe{;48noWS8&8ne5KUK`n&T+7qIBIN` +ziT~_7Wzuj>?0HiQfM>M1HJ{>)gp(}+^BgR$?b=st{l&T~{lOYbPt$ofg?u*k)xq7@ +zzcTr?1-`}FI-OsS7ZdHB_`C$M +zg@FO;p4P;a3*uFB9y7Za*hKeoT1j)dCU$6BEjlc^R;nf@Kd4t3iz%1t){()xug?yU +zQ@Yo?k-ZbV^v?FTv7{N8$**+lNbio~F7@O4RRPcXI>^JUVSGEsiO&R`$@>Dm7Vx?* +zHp$u#YX94&hlQeL*s!@ +zosNbC`wTMay0F~}+9{qa_%G#e(S!8t?dX`j#rM#Tin#i>l7X_Yvh~JH; +zr%JvTAD7LQ9*L)g!;3?^!r`@WJ?c-t6quCYH%=e(a@e1J_+5edtuLoX4&RkB{-EoI +z;{Sfrkm~5gJ#x^CZW`KuY-a8)29}BiADRJf59RU?4D9tD8roa*t)VN(M^XEj_Y-pE +zem_)P`dIQPbs&TMX-_Q6%e)WS6 +z_ZR%wo()Wo%ubVUGr%0tZ4+j$|6%;dz>}OPugKP5PY+cLAN@a;Hp=-nb8PlddSvmC +z$vJ19%Kf)~%dvLT6F=H{ESCqLN}H18qYr5PQCt~EN1e(mXo>Je?cYZFko+q5yP*@S +z1Bu_4`?Z-yYSKccJpVT5?W6~D-cE7)^rh&**A3{r-GB4jryVhkJ=;s{ncD3oHt#EH +ztJN`%WPxxght3fTajBB$g*jVW&+%-{FZT#I>0dZnKi|qD)gQ2Qu6u2OjnV0ayYkr! +zccXlxPCCw|7QVXMVxL!gTQB`4kOjTt^tU{+Ht|>@6-UOVk-5|d7@(F3FsP0fk@x88 +zpwGs4qZ`P&&UNVtU>dyXB@#-ei^}6cNtD+&gK5A+ZS3>xnGqjrtKfWLyZ*+ +z`<4!Qc1h8&lV@j_RP{z>TEgj~q26HbpBpGjCCYqshlIH^W4vClbg;lzqwrs~cjvLQ +zOX^I%qRxSdCbf?0NefcK6YYoS)5#vz->;aL#_@?Y!Qb|rU2^DNt-H~zdke7qEcnzB +z!KZ}=pM3C1cUcMd$meI>!mXN=dGUlpg&l?Jp{(LvnnV2sW2V(-qt +zORwPU-Rgna-VdlXdx@Ew?A~6+*m(b>E=Q-1M&n*=*ulrxj3J$VL--Kc&y9RPo=!h9 +z!Jez`@oev{@FS}u{aur#W$~XKd$7-qeR2*utA}1wuu)D#yLGWv)^=i@>3Kt2^NbEG +z*h~Jl=URu3o}TPHdinw6*1VCpcj(@Y_b15jpP!pf&Z5tKyz&VK`N`aa)Sgs+ftfEh +z-Ls+Zy@I)t57Mc&@~=2O+lwVT`N6N)kQ6VNsE?nAee8YE_Mx+~d+%OHd~5-CORF!t +z{-dX->3>7AhkkTUJ;={yJ|9cUPIL0fV@^(%ucE)n-sHgJ?5n=BecjI5*JZufI_6cv +zywb_j&AeW{ui2(AYU-McsQ +z&heFrc}j)w`Z%5<8&N#P_wLAvr+Aan=wa4IJU9Vg`H%m6f7yNc>mJe^4>HH2r#F~A +z`Q!w!&wYpcrbE~--aUT*9Gn)g-g8*5$9jVa_fY-3J?y6>?56;uh7j(P;4zcnF}3iR +zrU;Kw?lnFH_)GO;%M5=(-oRg~b*BQk536&I$1G$G(>*JL{8Gnbo|=His4ks&Ow#Ze +zbM~4&uZyjKHYV29WzWBs^Z2c!HqAUkL&8HZ))C_Pn&gKg`0(lcbq|v)Vshc2vuu_3 +z9Db+k$c2l8liYE{JH-j2`uxJskNf?BoyU~tSr_w0ZH1p5v;4e=cc&eJA_iJ>j?ucplYPqVlLF>`#11`h$zj +zOfs=Z>I`$=**T}!{zo3L{aE>A^(r$*{7ZGjnc?58%eLJ|Tj_SwOwP*6oEMAmFWD2_ +zh5K`g4F8(c^|XQASe-g!#+=lpn!y$5c2Dv$xgXh9cLA0Fq` +z^qleW#ZJw5KQCH5-X1FFd!vt^06quT0sk_)<|lse+TpXEw*MROX)|M<7(OZ9?~^?d +znZM+WbVm7*u=`m%vDo!G2k>0u<>C46*qF79)!)n6Z{m_$$L~4Mx}Ml+*LCLW*mv!z +z`qMn3dzYmz5B{Ql<*(HKOSX>Lf7;l1Pyv4@T3?Es6|HY_c*eEP^j*-kqPDfxH-2qi +zxUScO&j*<6_%-eLzFm{nq4lVaZFD^wdEagHgQ@tD{*aX(53eIvC5uh-IJW#h@$8G( +z%pc3vco!P|!Re27Pi@_G+2_=d$Szf#3-7J60s7FdvCV(br+o2N;!bVEmgT=MM@Kx@ +zi$C1$CDV1@4~FDdA?BP_UbIJ@D*VliGn4NxA$B*DK9qMnlYTB?E;IX<^1FuLt^BUz +zcN@Pow)DEU86K=Nlm%Ev?cnxN-kZd(Cq7I}TXWDErVsg+uGZae>%v!H{MO(D(>#BH +zEu!{2IKP69i(m6dL@D>c!z2hz_fd8gQ- +zqj|wpe37_-v8ii_<;aJCer@I(#n&hPZ6~q$wc?pyc$B4mO=&h5NssZ@hAq +z#T%_@G2c=DKG6J^l{Pi}(&(PZM{@>lt~mqux8ay)(^h`8C_R?*OfVnd+_`Y#DtM;s +zNWtpf&}X7OdS-{>8e`>)@JM^;YCI^mpCZ0Ij{<65aTXXz3__fm( +zCqCBW^SAGPtfz?IMf@)ITGGYdl{_!RG4Jq|p2k-ry8F|oEUfqc%T81CRj_bykbKn{I-P~rdgJ)y6${mz5`I;nb#wog +zS-al5cMcw!PlkRSzVdyi;4Yk1y;u2^kKT`N@hY~_n+*=n8(B3CTgbGXSXY!z?s-?j +zGZl+AwQG$J$>G}3`|+=vT-IC7+17nScHIZRCwN_g{*gZ;+D7MY-ygQw6Sj%wGHAVq +z{(1M8UQ0Leoo>Ng@ZCthj@D@Pv1_+IRnZbGtEdZTx1BnP_faqLzBoVBQM`{DiuaZC +z!}r_Y7_)Oy?t)v#)$~tatYs{2YW&l~akXAI2G6#uKl;5(ea5g;rtM$7(Me3@WUDtKd6Gg6?G}cTXwJDoHJ)1(LDTQtM=0U-$8%s%bppp%iycoorJeo{I>g;827*M +z!u@Ez<;+*~Cm47}@B4vjzpQt3sJ)iF&|d4zwAEL>xL)%1r}ta9?zvBJJ<_NgC-u_? +zZR`o(E#p})?{(*{{B?=4+8}{V%v=YWN@r7CF`b-L7N?eP9D27pL}21$1sp)viQvH( +z(&gM0Z0t|(ww@%uaNqj^yz(}97}!^MyT&!gI$zTX`bAMf5H@xAbuodbIHRGHnP7 +zgSRVH8`Jm*6t9S>mP}a^7f-dJ@9}i4{aVVmj$f)@C*$A5Tm^g4NDX{!f0*0G-(59) +zqrI7I#%zYiMtS_?;afxbDF58ZKcSy`GkeD83pzeo16`};7rsyQmqP7dBg4G|ce!?g +zN&dR|IpJpqcl-eJ0SCXS=oavLgUiT-tvY8r9`@$@`GxOAH`=dP`&RGOpWV;n`z*{S +zF*=`kgr@SN<0Trf8TUlrX+DDg;CAs_YLTR`8?kg#mst+JM)%p#%ryKN&QHI#s4>vp +zMOB{mSHABX;w9elz)OD?U*;VHqK&E}%TgWa)K!d~!1pv2-g2A28s9hm2k(KQibHGh +ze`k%4ig>Z{U%iob6~tHMOS3+z=ZXKCBM5jsVC``RRqsZ;Fr4K +zXUbhLIZcvRqp=>Rr$y;f@DWTB+?TCAuWAiU?4#;P(yU4KZ}Dn;ybO=%-?I@n`l +z5_hmK`60=TS+prdU&fz$n{t`tTkI&E6`-H&sqkj9KZUr&@%vMO&+GX8IZ-N1x4Z>^X9K68#bXWSa(!~u4 +zaG}KeQRs8c52=Pz2|OLR8#pg7T^v-Ri_YbL3%eIaV>-vf?)1RKMaIQ-{)K&=N?mJm +zOmfACuEz%(1U_{I{j%a8@4tjX*Uelj&nLa)K7jCI9_3L6D6ZOj;@9_t! +zkiiKdALA32Z@(uz$LQ786!t+|Z29=WIo*<0nUDW0@( +z#O6wJ)_*{`sQE36| +zGvx}XHf6G`I&e7!#ie(KbbA20E#%gc=Qf~k)feYiQf~s+1;_SW+?<&#=YQ!8De{Wr +z*v67Iv%@U3AO +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 +zi&(<*#O`i}xn +z)#wahYUtmWBR`-HfzU04x&kyg5%8RXip&$nKdEi&bBR=zV&e#9?EkpVJ?iS&= +zdaUzWHMD7b-XrlB`Du@Xzd*0Yz+Vmy@|U^qvA8~twR~@ozifxUbkZXPZ;{W^*0!(n`38L%-ZG2!g}mjT{k|shY$$JeeOTV|OCJYcUavj3 +zu{rTg?CoKBOP}BVJElFd(eRdo)i)kDl(*ce=OgfzFZ@Nk<+TxcOF6uyY>?J-yk%h? +zZ&_k^%k0kKd5c}Qc#G;}Tiz0k_tw1StfTOj>wS3L+^qX{0^TBdWBIjs%d@^7Sx=iB +zZ?SFidCPLYuUWJcZ&7UOAwCQHrJgXdlf9wu@A-X)d8d%ar2PK&rHSXlW9~3KhTNKC +z;4v!;c+7Rf@R)^9<#^1ms2d*Gn=2VF$6ww*41f9KQTYow`;So*BVEX2z5!k-#-Lc; +zM*e>*y+wRwB)x?@YYiO+x=Wz9ocV5x=im8aN8k64fv*I5i}=c%W8f=aA4Xq6hcWt! +zbRFp|;w=GR5swLYOQ5r~;g{0>OK-XDkezRs`RX^Tw;b~I7TJ@Qw|vOw8v$>5e%+D0 +z9c}s`STP}p&a=Jr6Z*Q$TAis~$9Yo&;z`;WLCKiP5 +zkfZO#e*t}8Qb6CL$y1rTjSU~EJN^CJ;BSH6@EIRgpJt8V@k9A?nCIflx)00hFh}y43;n)!r8@dvpv8~(h&;B#YV+cO5@8^Paj`9IqC +zQD%=T@ypGu(wK4jPee;S`fCevfz$`Qs5WS8+A)sm`qA#;!rURXm%Y94HgLe$vp1n* +z-N?DATsUQ0|p6BbM +z(1CK5UDmHyhvS^pxPWzN92ojI%xTbeL?x}HhlhNI%ZcG@MKE$NBj$xZI$Sk1SM{MwM76kf)A!=FKUoOedk +z_CE4>^zOFJmzjEljvMl}g(ve~%*dwYU%h_AxK(x^m)|TK=jZ8P0JBNtUhQ#4nOX)~ +zd*dC~Z&>I|=)LD&+jgJx#+GjW&f%RJ?AWBUA${^N^O4U@el_Jc%AUQGxpQX2%xR%> +zW~PX9XR_amxu0YS<2vr-_U=)W&A6J2Xt5!BTH`;lo>}2fZt%jRz#%(_ZEH2(i_%lW +zA+wg1oWuJ5ckHt}d8T=HQtRS*pI%b_Zyx;kp+&acb*7I`r;iVpHU7YdYq2|rc+jWQ +z#ctU#)r*wRUG)qU)7ZMr#?A9WRCyKZ-MIr->z?aIsV9(5Y) +zKh0nNnd$4I@t!&O{;!K_uSez+YkV9L{e3Pvx%Il}6(i!tMW*e~(dUrc|@kMo#{DetcqT>>=jgZw$~{?``8jFQfo=~>|=?6c1C*!k>Q-O+ao +z&jP=l&O`mpLHq1GJe!sGOf|1=@Sknu*?BxWIUF9W1Ck$ibg6kBQ~rpbyYzPjamW8V +zjI6um$&W_|Z3f0#;*T|hu^whD{P@(7x!2F!afZ)no!NW)iFUk`dH#8xk0$Q0F#G`Yd2WAQcy8Oa +z#}jGocYXN$_HB>fL;lMx#8lVdH&RUXzsP^N!o*ZV_#5A3jpD)L0Vm1-y-GCwK73?O +zy3z34^WdrH9$t8JMYH&B;Qx?JmR}_BgDj^8rsH^Nuc2;!XJ;GW}duH@M~5JZ)qi_!x7oa|VFzjizp2Ny(J-JSSEY +zy=_mj>dHOXqKn#s6e1{v5sgd+_vG^Q@?2`@sg|C>LC%1QPirkx +znQM3UD(>2RNj2-BkIOSBG}VKP$N^-tjrpj4;Zr@+uk_b{J?q2ouQm&*GZOUmJioVw +zE7q@$d^3^II-sqY?&(!C+;%S=nNc+_)VRGZy!laVqDPhQypVk_cCJn-4{uw4=lUDS +z$)69M?jis3{{GHXYkzC1A+x_{H}~A|TYCd`&`RLi60T{U1PsEFm$`p0o0%HDCfN;K +zlHsQwYlt?ry3rZQea`;&d8|JXo$9@M@`^d*+=@1jyz^P%(e0sm^~uiuH1cbI`6 +zL|wS4eJ9_~4nNga8Q$EskneHuP4~uZ-G=WRJ>YNPIrZcypi6^GYum-≀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 +z;QBvXv^Zn<2KmOEosm;?Df{ +z^2c9DpN;e*oVU1rr0ynuCjKR!wt(|}MbNy}+ZJuP2!3bz;MK^do7zjA7`9d=@T&Bd +zg5Lp;)0jp4RzZGWOMg9jSA)krjo4h9nR9-91kKsjM-a>}rjK%`@yV&-re^v0@cBX; +z9y-iA>Jabe?4jj>%0YPC$CaCxbo6Pwm4@F~eP;eK@|#86SsUvB@WoV_@e +zcK9L=&tVP&#L^c2qPWL%muHms;5s*FN{9zK{pHkYjCFPnRHHk*G{ud~^V|qJHag9p +z;Q?+_W76e*R(yKMlfAu8$*)TzksVb<#MS4T{DAL)vrnK?yi$Dt+$E>X)L`U1AA8?B +zwhaEEPto_r#pK69%h@7x$6^(EN1c-QqPK;=pa!PvV!KwRRoj6)nBB@#3Q>#A)W9)$ +z34u@k#UVa<={lloJ5FxAsT$9xyL|aCIUdLg$#U6zq8ZWg0_aD2f#^##q*~`Y(E+O2 +zTkf7VGG1{%<^%blb +z^c7V2zJiJqWAl|G`vrf^!fW*z+>u(5*LVA6w%_B)J1Fd1_m?WqQ2WL{*C;nZdMm!H +zIXmfJI+OaAjdG1oa|`Lu${qVmwnvXo6X)=3a~>UJsS_UXPJIghCYkwI9<-Bq>gV(B +zH`VjZCv;C)d9CnnHL_Z|nE1Npq4rnN-uRrrXW?35|J!(9cEG}0t4wZR3AI9{e|p5e +zg>Uj3N$(V%$xkmF6J7@V+Vbf&%8O~&S#;5X`|3rew!)k%PD_5?;e7cklasUcc|~dR +zLwvf?3zL)C|CqD2r@p84(S^naKrd}vb=dJfDB@7?0>zS6W>#5C@VSi_`_c8AZ +z?CP5Kx}Jw0t?xO25AhUa@@P|^MD=;ei-M0S?s6CKxLN*5_{%aQo4@4>_btA9)a%IC +zg94ld7R?Pl-m)jAX5s29VoBw)t8T=&=+fk!P9r%fHK~R8;~j4{scUf)+jJx4UahM< +zqEm=_&hAe{UGS=jxu|}n@_OsZZQ9G)ZA~!w;y9z!If@+1MrwhC>9+(p=v>`cVv4u_ +zq=ECX`%RoZKVK~loy3W;X`jwq6F3XT7&5vdp_48CZAOH(<;t0N)Zb=o!D +z8GmZ)B9m5S!u!`IozeA-cQbeRhN**kBGdZ?DV$C@^;*L`KsOz~ZQ%?PqOt!o|1|4y}x?TN3 +zXYHb=>GVw9iur!FRbD& +ztj^q?o#pSDct;K|PN2^7eUA6!CBW%rVj$?V)sE?_68&Ov=J3F5`oNC{{w2Xx^uyjW +zd_3fPx=~~Eo^alcUQ}gqt=uDDj2gP$(~0N><~K{ns<-x8e;%UaT)j2bT^_@HMXy@l +zaP;bQpPE?%U6h)2)vVj5m`x|=GRchyvyYDR6g2SQi1q9K0lF4nQ7(&o5n-pMjXj4) +zzV+TxuQ{dtP4RA=edBxEcNt%NLwl-qE1&c-_By|YExD!OscP7kc^`v6!1vazbu;@rAgH^5w0lzO5>G}zS-Q5ETjMy0Sj$&aF=-fOXO2 +z`s6nUR{8I)GVhj+US{SN!k?tvI`S_vO}rQ8-njrTjQs*W*t%qUs}so2O5miin`nO{ +z?Z@(Yz5kx}Cknrnd@bA~YF=l=S5*)94g9GWI*H67#&sK~?s(tj +z-|>DNYu^j*T@9`WxXc;n%}0}AIyZ>!ky^#4=B&BaF;~SYG*`oOm0RP}$}^XC^hr=`)eV~mtyO95@$loo2k4p!T><{#S5dK8HU6RY=U=la&)heqv(6srM+W=-z8i1o95Yx4)d$SeG@bnLto%b$n2Acyx}}h +zkC$?RIerr6fR!pAM!_5=@GOAo^Q=GM$;2MomD?j;tg#l7&-~;b%U4=IioJp?)?Eo2 +zTWvKyZPD#*+sFO3*ZFPbHw+US6#kZ>gIN4cU~?_=c3{`ZF3|dE)AmE!y66U{i7su8 +z@7S1#>V|mRYt8(t;@H*O$8ew97GlH`Rl^;-W6!oks;Cv*cP{sqa<`4fX^xrr4q`YrV)LSs6wLd^}} +zTaT?r{UPY+R^Dmh_d)t8fb(nMuxMMjHype^?Za!%B^I{2XDc87gi97zDv6W$`#rgw +zIcfiT$8z^U%JKkvF3ae@7fXMwLr*iXY0KAf^?Y~U^R{gX_AsXd>-jdG3*Qf9FB_PM +z?P7J^%Q&Z1+g$wECD=^op*Kn%E!uLip{Z%8}jEPS3Lg0OEvt}Z&O +za@7To_&9GqajHo{jExHh!SnMv{4Xb#cZBKJba1k56m6 +z-Hb!5djsb~-skK07ZO_rrjPOLLj3>8j!vgBifr`HqaYhcv0wez8j_E@9=JSh^atQM +zjy)-?dGVd^=gy1HgieIJT7$;FpD|ct+o$===P$y~oeTcD_U;#adv~sH@5=6#y*r)t +z#+(N1-FoCHwywA7uxM1aNH+USkJI?X;p4GorAsEFYdzogD-9XDcW8}X*}bEDyEk8F +zzXAI(kaI)zhRYv~4cfj}8QWJnoor3)5{vV;HS9kPSJeiS?SoWKqqw9SlM +zl)o9hIj6t>Z`!{LBS*J?zm4qsOYGlMPVwm@uzxSG_V2v~_HT(#N5wq%3l8ey8Zj;wvp}MrG_`})QuYlq6G0Je*H +zuh5pg+sAw7{Ej~9D1| +z?@8VjMV5MF(WghUdw)}4_x?(Ih7Ao&x*9U|z@#3SGyoHQD*k4D_lmZ#nNRSW-b+Nz@aoNb=klERg86NG;^X|5oiIBSk8V#a1Ybl~;6C6GhB7L9SB}pBl%#DQn@M)rGCzNBnObT@ooyhA>7)dy58c>0Q^#G+oSUhI!KhcTsFyiDu@+#z-j9UJ?2$!6dQ-sR$A +zp%pu7tnMOP+uUP9oNzI@%l7_2@z|gStzegbN1601#Z`jZ3_BHD$*V{EJ;whL>z>ct +zH2%xXUGtei?Nag787tPHTd&#tJKBIF&41=o^7FfVie^MFD`(sMmJ+AM@O{w+>mR1h +zkIiF|&tm~=7hQ>-g4)(zPh(Re`X)5?Mc}cwdX+mHzj?x2$$6eRS4>SN;a6+;90jcU +z@Eh-oki+Sgdin7B(2Zo{yXm2qQ;8mBYrmW+5Yj- +zmRk9ttXyi^oG+IIf8%o?=j1NefmYO4x$mD1?gQCNo{_~F#d|JAPp~yRUx#;CKlb7O +zuzcJlXE{s`%eeC_{v@L1im`R>z~3%kqLW>n8E5XA+G_MmH_|8{S7*ZT;K?RtES@ng +zT9=%F9jp0$oAwI7fDc`R%HJ$(f7>IwSUMDC2 +z?8!v*mW02r_$qXt-cVnK=<@@#D~vDR%Gv|i)%BcCoPL2Hr+?|OoUh{0WA#0Uwk!v> +z#?R?=<6A$qS1=a*#?VLn&|dhCjVj*6HUyqPmTztd9{# +zBN?KL-v{H%diR6W15~b`+TKrF@u=zWh)i}<|AgqvDw;<1;4kp +zi*U>3_b-4;3bM440?2l^h +zQQ{~@R^5~MiEt$HhNs$AzW6-8x88k|EbNwl*xsG| +zTccCAFt?F;2WR!6v#lxRpX}MTCKYLI#lQN1w`}~&MsJuLnd4PC_s^LVNqFPYcR%Jf +zvJSyt_wx)-+ZRADiff$i+>35?I&qChhr~60@EZR{WVf2(-4&Y2A#uYT(>t^Igt +z%Q=kOfIRy!pA)ZatTnQ2Ze#5Sgm;r0Yr6+F?a&_O=O#Sp`)0H^fj@K_@5=`=1^W@a +zf6Rj)3IF%-dnkHlRScddKkOWMA+RH$R<89C|M^O+IC4Am=4?+IU&~3v^iJKbJ2sBz +z%v%d~q3o7N>F2t`xuN*U +z=)>k@h)>y?2?w|{cA$NsGw_(|iHO&0p2z3U6M7Nf5>FLeXuJLsAFwp_++p#h3iP=r +z`mbRPrHu7+&ZxeXPh$=ED!fvR{ztUe-n#7T&8%DdI?dnLY*x7dhqmO?-x<v7VM6fd5Oe(;y2MC&O4#>*jijgia`#Z)vF!ikc!%_qHxHlM`Bla%^cQ{1_ZNMM +zHp0iO$$vOBB>&+T2R;WpmaKFC+`$4`AcYT|yr%`Csb(PU{r7oRtMRIHl-%oFHa +z5AhkyDd4Xm!(YJ#qdVn%bJ9B=8sNMb@N$6{dAK9O>#ia23h+6n*WFeCud~k{3a^RW +z%@lX;hmSAGTpo_kNvu%ZyWH5wa}O`>TFN>K{X-}DxVPv1wsx5IUv&Q=+M4(ezjtHb +z-b^h|Tl00%mQm=|qIJR5YrcNN=)-m&@1(8t=MvxE(fcX?{Y!j%IR8E6?)3KCclBO9 +zZG(5!PVXnpZw)Eg*s^DpXCXUVcD3T8)_&0Wk3H4-d6xJ&un!c+wQ{-&Tc8x0%(n?r +z(cx@@O+C6BF|Y%aTah1c#13h$8_d5@{=~?>1@6E>&zE1IZu5NBBRb-Hn|vxxHi7Q# +zfeT0PL+>faO=lW^!+X-bb+*Im-qXCF8hl!D)OpBWki8+lBRFs763+99$)*ePEsMx) +zJGve|%_|#L50@RE^B262wJYW<+1SVb*r>fh&ZYRHu|1uOH)X +z)B2uHY!Gq{)$tn%8RA!5+#l(pWQ`Ut}%gxzV+WHUmr9 +zT~j^fkBIk=iOf$tKs_kUzX?3Kh&5RKe^*mB`vm8~po7RXZzkhpva1fi+vIUtpM&aI +z%st7{;PYp8^v#EkW@k_Ba-%;@RAYN(u-VJo+ +z_xbZXhjx>MtN8xMvQBqyJ^5j?jsO2C_`UL7P9J?gekslrL>74D2zH6)L_?BaiuG7| +zu_~iBl5_Hh>HgL-^~dvNx_e_#J~Sa8rekYe;M-b1YR}nPKW$I(j$r;r#TX-)pQy%imz|7vq9bzwTkZyoJA$lB|TR1X~GLOOWe$9A=_Ti1d;b?Oe +z{cEl!_5e)82gC#96aP`3JhMJ3Kgyg7<US^p3s@=qn!&bQW0sevNvUvO8zc<_^Xv +z@?$||;9Sw<`sD5b;euW7&1TP!-Cj6@Imup_AsjqLdm+v{h4#Y2Z+<)~I0#R#HgKp( +ztz<5eYr&u7+wvKbd37n(dyrg1?hNJ*4(8L~H;g-_evbKR*e%xou(9|^|AQ~1H_%tJ +zWLM0WRg#^=3k*N2g~qd4@=VG9@Oq|kmTIjRjx^$P85w7H+tl#SY*;0>EG!y;#o~Soi#3C=2uGKBMG^F-NVyM-GEevB +z25S$wRi4&Apc-qypo+RA@C0aM8f&XC>y5)V?RuA(-|*oLu2(u|;aW$c5!oMiGH=D* +z*2A+kZ_Pt79IfdJ_C!2SFyph$=3*({wf_-2Mop@e9LjNwDW8mBH-^2nJpBsnmnFbU +z_KRe<)masTPz^M}RM#_!}eDV4Iq!>X!gnGda^cEFD+J5{Cbjktd(4)msjo*?oZ4@^V=7 +zaa1vH@m+kBkJ#E3xfrwBNfvG;#{8Lqz6lQe`y}QBPe<1%k5&6TuOGb8oD!2`N#Nae +zJiOEBVdS-c<5yO0zB#$0@3%f41<&sApY7(E_9DcYv?9)tD|CgI{4W0&whtK|U6&#+y9=D^Q7*S&VdNj<3D-0a-8b`l=zJ06*Joc_)jwT>ew92 +z74NcedZt{lz6#D^pSS)E=B#n`UZSZi>0T+_IG4+-`32A8`==c7EdP1pDc(m$4EH{{ +zyZss?J0AH0Kgn<7INgur!$k0#${YoYAdV(@s7_S(w&}!u7d;x(Itp-FapY6YehiH* +z>->*kB>f=~sbCAm+w$Yf@x)kuv+?D4!oqr5%E1?2)D*8VbLMUf%~|K9@t?Kj6?@+gHzxnOK?N>g>`uWwmA;zrLv*C&+C-6&aq(RTsQR;V&d- +zAtk<|_we5`FWdfj{23vh2WLIa81NIdOBlG@cIqeiBW|}t@97dOg)?i1;oay5jFt1%` +zgo~=pAK;vi&b+VN{5ebQe8;~09DtS$7_(0_A_uLJLTeEvG_<*ubx0X$RZL<4>C59mKuUo1jj +z45JUc8(Y^UzfUpcNsOZ!Nzz9JU)4#;hw19bcu#)*!gGiQ#-sP(;~wqle)U3_UIa|# +zquL2?p>{$4a(vpVVNg#!q20fYQ(I?I@4h{%W3V5;@p+uZn4MY9vj+ZF@~65(3!!o1 +zWYC(eaq#pnEbl6bsfOiE8-nu|4&Q^bfNHBc1wZlIzI>{9DlnF8Hn{=^s)b9UVd2pc +zXSecn40MRD{5!|Fud?eahF4mj>sMANhhpHLWv|`9ILs9tu3KmSm2bJ88byP1{DgTv +z@JQi2@ABt)4$rj@ntuuRBK&RHP@EJ#PNI$EyL^`5#iPPS`3d0#;Clmh5jCM53!{Ul +zsIAVo1#;H%r+ob0NgL5*fQK%42;VTerf6AnX+tKTlP9ejge8C=_|h;$cxa5_5a9+QjSev +z?S(mB6S`~YO5lUu(2cBDEw*B6amZIu1>DSeU-+E-GB0GG;9Pe_N_Z!oZ#-iawv%7x +zWa7P|{X0%-xlsPnBGy1YBy&<;Znak=pVXDI_w1ac*IFM`sb_Rh_9quVehphyIT8n} +zzvJVSYJ4b;vG3%LKJk6%7(B6d=5^GkC>0FNc*h2VKQQOb2LEl15ckShZ54a0z4;n_ +zYR{YvdYXWbX$zy_EuAa&cH_am%l#o +zit8f8#P>JWUSF`ru)oID;#I6M=!lx9 +zEudX}il6L!kInBBFUisG?>V0|V0eq_?TD5Gxh9#GPsiUMhK`9Z520gxpzwA}%TF5m +ztw_xU52~4?%~$vdw)%EpEL&YLw)qP3ZOBHC%xeYCi!l;9n0#mU_#eG2#WgE$yxtO1pC{?ap^v4ebUz@d(qTTd~ +zEemqAt9hKyJVd+T%skPq#hH<4_fqKfqvW%zCIB)D`hBgs>)$L759oL5yMr1%rQR>t +zPw_*^U)l1S=im8o9n1gXf53@(-0RzF_D=6LNK4psvg*Y1Ky38AJGY+p*MI3*t)@yMdMt1o2W{LwrG@!gAIwNLx@3lXTYU{@!aA*N$9KSclIektn6JwOxqp&z=TM_a +zd?8=HtByz^UA+&wQaz)mX*CHW=4W-0BA{6jWM +zmYq!B!l4lSNAi%l(*N9?PHJS@70hcDyp%bCXZRS90Rg|a^kC%~xw-}PFzKWmJ)91H +zy3PyqZ)riWQH>pa%5E=q=Cd#R(f9s4c2eXO_N8;j$D;dy%dbnhzkG+rpG@9Zi2HZi +z;Wt4)%Hhk$jelaVP+B**6n=;e7*t^rw^kH5K{$ +zseTo^kPMKX6xeK%2iqog^nK82;7C#(f9D$8@8xarOnlirE +zRQ`@US6a6<%$-M$vm~`7@*;Vy4Q(g;HmUkwNdLpd0wiP1e2o6*`+%9J%lyfULH|QX +zh1b*@KDUCs9$x>u4gHV0#zy~Be@E(oRtH`)MKVJ;d2D)5BRCwoGN=1pK;QVfhsqCM +z_uG?QHAMFt%UFM1-7jnE`dC^yQ2l>)4V4`SPdHNdyZSHG{T>Eyu@}tUDQ=$b_jUMY +zp!#pbX +z?do+`K|9jxuHoI0^txqczJHls$9;f9c*Di?RVaUMe0X@hj{AFzUN?ui1^Qg3WH@`w +zp4ABSIQ;rMsEa?u_Ie23JDlxhY0uhTZ-@4dq`SMD(H;LHyK7AW?J3^PUW`C{n}*Qd +zxW78>9mu1-*Q!5OfR_yuj-wN`lOdn_0=+oX{ +zUxD5APSBogwyTapgG>JhG^jXzzMQ{k7#h5D^YAn{$EU$6<|g^Ja=fi~A$v-;lKde@ +zJ1aFDEh@)9pB7CV&zFTiGV-s2J7fd<=_zE`gV;~^pce%8)A{IC+{uKVCi^KokJvY| +z|GVTBj%+_k7EZ=am;E#}4<_G!x*S^k>)KD6hx`S;@59(nNB4bL`^nxR7uZkNJv&rB +z>>F$Eyq6DTIQ!{iK3xAA_S3uR`>pIJ}F^t|av<|-K^U}a}QvBwB*LKPt +zlkM~@HKyN5o9WZwUtlx+Gix4;PhDqrayC;F_=E4;*i6d?Z6=*lkv&joGtJ>Q>w}mV +zldg?z(0RVeXZi^=^n$UO$_H(xW!{H|*i53mPsYN=X1bNJHs#q&t@F#7S70-Rp~cf8 +zjnw_b~CzZP_0V@n#FDX`IpvzaUn1UA#Re>Ri`UM|kj0O!E5nVw+&Lv5y$fahZ7 +zEm-MXTh!Q2%3c3=a@V_$087u|Gnb&3M?iGh|29AzhkkT9`kJ{@%vQNk54JCg)d%fmrv*n +zY!LC|O5$@N{6+7V4uenebnXU{t?rP6X?=@pnUj2rF9OryeT%OFSA06VIbY2?1+{h= +zOLj9hR-Rw6bBzH~1R9g%W&A9^Yl-idQN>*>&olC(or#GFIn0m2adrlZf>P +zws4?Nw?%ULwDwo>Tz=9(msUF~tB2aG)Zd5B8=8XH%GD<}EO1$)a%AOmFN1Ez0NXNr +z<@kE=VFK%Uo>^DziPdwa-R9NEr%sm>6uak6Y+M +zN5n7Djf^djpRe=gFnDtwcyqE-*F^2AM`};3!_QjBx|YUm4vO__$~Q0;-{$`@GQ1`w +zUMs#72M3DqwJnM4tzI21_g1rh3s2P=5#32&0>*xBSSkKF`C!7lqdEp}$TvkF@1osE +zw%<^A*1aV>%YcdXZPppz<`&~C2+rh+26M5h07l9al8;ez@)KZGHRxwV_89sQUWk9( +zip<(%ViWmsE5&SHEa1lvpz}5r{MO2EyZJ4kQSrC7P)?s64*zw2nRy=JyZQfh)_fYZ +zvN}IrXLVNV*9dghpZs*Fygu8_`8faIs^3{rrOs{-6h#Lg?W$JG=xnp`xKf^wko`eQF +zn8&6&6~E}_a&PT@4Y~UhWBz>&&cxV!>1C2fllqmf!kxg}Kc*ZQox4-sl4R3s{(W}h +zL2vdc_vOfZm)-o{!h6!;RF_6|U8T#BTiYa`O(5ffc(-b^qHor)c52@*YFD1_N#uMj +zH+fpNZY%yg@?}(Cd3fH}5a>EiOVb>u@!w+P(GM(MoKcSUYV8$PeGc`6cC-bw7UeJD@z~rF+~|zjWaV*Y*(e?23_lrd%tH +zVejO7t$M%TeAb +z*e2*JiOI3#cUY6|G1i#63uE)sR?f|5tVf{_v!CR~D(-z%vwc>{Gkw2+_3HU@a_SfR +z&zA7pM4l_Y6^~B$;`_^z@_}AJEuHz1#>BYjHHoiqPVNEv4#w3z8>jl?KG)OH_kDj{ +zotvFpZ*3Fd*EXI7un~Ug9$ewX!V^k*H~DbVKHovRLi}1i*)jQ!3JbvC-^%(jwOPpuX0?9GPm&9^l~KN^1){c2qG72u=rP4!eoKkDzry#8GJE1_)- +z@AG?Wg!Ae{anaYafnhy$CKiP(e0OC!`i5(#c?5q(|D&B~yvT8$4&s5_ZTE0Mk13vu +zo&>Xv+$kkm;{PG_Zie3H)XkZ28;=l;={`4`Ycf3zO|_SvXXm&26*pN)-@^B^{k7}P +zoB4cqBljfE1DAI>3rvj2-d*=Y|L(d&=I*-gjO}ONe+!QeRZGXx9Cde{>z^}zhG#Ch +z{1?&Z#4G+jks17_kFD(IE@VLw`!4<7 +z@Q+&`Z5BR?Z;q7X=Qsqy??q=fclmeIbyIi!Vrc(w({^1h +zchi+KuQMH|^X%}7&AQXg%Biaw6VVyT%J7O-*SV^3CZ8cb&*GE&R~u>9#$BwfN4v}J +zROXO`hiUGzq09L`5+ASg`MC1ygiGQnW1g~eZ2VJ4-!lfzihWN@#p&y(;DpDW)BN=+ +z2R69F({Ww)#YySBbK(7SOa1;T>2DS}HL}MvmiDY~(NG_X_N$n7`THfB%D*F0^r-#H +zud}VX)7qzL>=XR`;Yr~-atp4)uC9)`5!uW^jifT{Nu6ogTTNTDSMnPM`xK*=Iq&zr +z^2OXf-SB2d-*ooL?2&WRX6+OEb5Fv*b1&hX$39iGR`GcjpVfT6pHDmf@bcs2!9B9| +zvg0G{QEq?mk@)*_?@l|nJ%8-z`?-N-JXIB$?meq>9OM;i&kFbDd9yDE$bmbhUHwRA +z_51y7q#x~zt(|T6<;(uQXg^l+T=)NpSMP$31b@+x?gLx^p8>bFh>o-$q9yGYcUyvU +z_8vg-+T1;WtDC4_^&8zG*pNBBNB54|d;KaC$nqWXXEpYp-m3a!_y!-fG||HT53h$* +z`uM9m1T~KCrciu{HTH+NgK*(5F3*JAYL9c;O|NG+{U*-6f}^=ta2$|%3G>}N~JlW~()*DUj-Ys!~>lG&3Z;n+E- +z%iWlbapq{2vxvKO7n8I1V)e(*x43qg+T+*#-qx;g(M_c1jf<{M%wn(e={Y(KJ^z_8HaYaYn!j?=^<4Ln*Ky~faP@EJ*mmUEZ@!q=p`6z4mnDL)UNE6Fm|>;#WIgxB6~y +zALvKHC*29Ex#|4n3I4rxeBaPY+Y%q{0sW@rFFWa%UN3scXSfNa}%D^Vq^o7Guo7@bx8(9Rp{wxlc` +za^nfzgQ|Okve|4;()pn|_i_pE?>v5H?}X7WQ>TxdM)pSccAn_Z^&IAs&A!nC&DNA6 +z<6QU5gyXEYu!z*)ulDmvfr;`a(N_{R@Ez%%(*Nzb65FrNzeN3hUp^STya!!GL0({(BaNjF_^1SWdL3t~u$ +z7jYPRP=2Lev-DHE(c+@;@VCB=bq&wdK8*Ym9;%Okeu8mye~a)w#8|{N+5%o996geM +zRi-UJvHqGu|Bc|2Ie`Ab9T8F1HS?s(3(q=~sMQ?E=j2XPoh_*}wp%d1#vX2+0e!d8 +z->$>fzDr?03ikthpd_^Du}Ptu9#f8XAg?8>^Y0^X<-Sqjj_5`-CLFS~b9#EGdtUp! +z)Sc7WDUWeboDJXDa|icjqF1`;5z~VDNn>VbVzlABTEh8rJcEn_rrf)P3}y|)MrKn3 +z_Vw!i!|_bWnMqxRMB?J;Oz&IUZ2z+J_Uxwyl=eF`8#@x&KpWz!UDr6L7=EI0MMLBL +zG23a+9MKu9ZBXorZjN3%Npw>gvNkt*WwZGFXg8KHadv!2IwL+QbRK6Q7iCI915FLc +z>k@EmC3Zq-Bu1@x8_QJv%|_z$XJPv{(&l>&Wts0aT;8JoN}RoGj(4`N8TD!`xz)Y9 +z=LE-H{Vr#3W3iKHnc%E$Nl`x%dp3Rfm?h-S4s6-TU#B~8?{@ch_wH~{x#vgjKi~2l#&}pHeZ=1WQeXDy@dr(hDu+|;Ip)oq6aIpI0 +zgRu27H}4a!@2RflZ#HYF(|wjsc}g`_M3)t@Sj~DTwtXSIvco;E^@sdD!CxnT+xgqU +zpY}8Mb?F}mtM7Qh?%P!QmA^~-^<~3H&NcL@@3N!tjXwf)U!euAOL9izKnMNctjQ)Xn+ZVWh_!kll+Hax635LY()R@3DEz`lDY?H%gM +zeC{aoP@ZV8@0?%kQU4+O;T&Uo7{7w^f@_&55@ah}0jW^rARHs?{puWD=Y2OXryOa0c?~m=k6YLmoRR7u^ +z!zs>cWz=IUPFg?1DUtC`XmEWY}s6H3`9-nL_ylT;wW#lN01)p5*6*RdLCHc7$l5sYdL^V*TXFzS3m&~~W +z**1y?i~k#$1T6$IK(#RgSr^EuIQrNa=vQ@5#OIH8R+d~w@Nv-w$(wvxm!BK*-|)Y} +z{N}lvtc*uSF{jVsXD&7Ms^Qt>DD{plb}j**egFT<(*Fd9i_-=!z@jLkd(P?^yOQ@W +z=C1crZ(;jg*>;H8|dDEPPWz1x?6 +z@^7LWA^(1hp7?B@KP-1fZa%uG&IVXHsk^wleR+3Ax;S)R`+-?@tktianyjPmT4-;c +zfg9&usKZ{5+!LOKeYrT5HWwPXc=+(1$3M;fjO?S)nOdz)b}9a_jB1}1yQlPGzrhb* +zs{VGB9UD6>{oIQkefx+la7P_@buNFvWYhH<_Pw_%v+waZb{_l)o^=WOrRZQEb;p|(2EiuojOi781lvFt4&ZSE +z?`U5Ik4u5axyU`iU-$I}`!mUzhA;K1wtCuVpJMcf4-6RJ1a4oY_=Lf$MHilr(mCSe!SvOcJ2rFbo61!c3!|*bsyaQtYOdN6By@4V@D-Fm{~d%)l3VUi+TMR~(hLsts**99I1Td_KMWJ-YAl@#}ZKcV@4L +zekGb0%o>S#wXE+(iCwll@}H93JTXPof?>lJcJT@}c +z+s1Rf_r)o?OKd0}Y~`1^hX&y+K|=W+W?e$&VNXZ1Xj9jN}ak4g41 +zu)~8-$)UHj|LLdD{{N_N|683eTYY$kU5j|c!QT$$=ezknvb~@4lM83W!!5r*7CZli +zp>}?JX76#MyN1~L@Ac<(DRanXpEY)VoPBlOGth_D{l#|vc)#EN=ZD()rx~0XIWEoG +znj3t)vG%?7o44fI_iglfbo+ilAT$sZH(eEtA)7d1Q5mapm +z_Hav3AL6~NXA(6wOZ-|!if2yi^Y@zfc($Hr>!k<09UlNOzAoWP3|I(1Q>_2Gqxb^U +zR{D+FOD~bW1A*D|AOA_d+(6D=z8Lv0y-E0#@7vb8raFsyL}%EB=~>vqFHoCIw(!~X +zak6gSf +zriMl5cwgr`WcJXu3G~5`|4jE72Xy=QdHZ!N^t${%hND;UO6y;gy?uNhy`Dq+5+ANc +z|K)otxFCMb986r<^72Jn#LER&@p`LoO;1bK9Ni!HL=S%WL4VxJ$uoP$Q&Uwsm)0nM +z+|2D3*6qI$ojz*lG-l}Z^uK^kZNKuzmHGW%O23k8j$h|TF~_6%kosY+ +zDbBC#3dRj+tt`*>${%m48PDdw$lj4pOmM&RW()6Pp4;D$ebLuYR^BOe}(9qt^obCfS7IuyMr1~nfZlyB#B +zZ!2v&$lXzn^Xc?xNA)xJqQBkL-pJiI=q|wanR^sCGYv%~zI^KE-F- +z7et@vf*Zl3RR4^gRDT+MZW;0H`lQ(dlLucu7|;GL?QiIr!CWugTtsYo8up{hoz|b> +z_tyRyDaExk|FXz5Z#~b@NjKl$KVzNOGj1LK8{J2F3TOCmR?bJ`uR8j!gKy7)r=|Lp +zn>D;{r!g%3Uu0|=Yqwc@#>1|MzcmBrX5icme6KrzVkD-CEBUBo6F_OqY3r{Way +z-^hNU?pOl51>fRY?;PKDQOr2*RCw_0-a0o9Jz2c2Wd0W#{om;<#djDxJg!~7iBD$8!=D8D2eU*%1xRaekA$-KIA9gm%FbZXnhu +z`KqxUc#h<*OTG>D-jm=0bml>4_2Bu)K8YG|=7t_>F|j|&bI=|g$8W9uqf@DV*<8cZ +z$XT>u%t0F;8Zf$+*E8DSzV`H^gL^sJ>}8m_pAG%V-?NYP1Z^#yRP@gF+iO10{hRXI +z95Wx{XI(*C^?PnXzwNX=Ku(q3Q{NUpD%vDhTl*b&$dU6*uwL4?>Fxo^?Wy>I13X#b +z@5g-l<@fZD{WigV{pksdqceCe+gIZTW2!z(AOp2u#kA3Wb+TX1VJ}^LIF{C)X|F~{ +zOKWrddJp{iPljKMuU}~HmRqz%{C;_lNA6p~doO+pa>e1*)L|vIztK6^te6V4*%K?V +zb8;gWB{uHr=p%Ql>kM~1GW7uY|FzA~JA36K_ieid+PIMe3GAD$KWAtEIPNY;EQxGS +zC|0?==K|)p$KasGsben1e*d$0&%-8<(YJD9CN)>3@fD|6M@zjpc_{S}*ZX(&;spFc +z0o)Z68;NInKHefcd;0fm*+;xTbH>cxJ^fDaoqmqRB;MD1#rS;2jytmd%(K|H)Bw~N!CXxIKRdLo +z=A$u*SP$l7JCWn70^K8+ZyWt-yh+3;)Tiba*xQOLNPmyNX!raE+J>Mhhgk4H)`7N% +z#`rIEZLW7PhVVD(_uq;v4d(ot*KB`!e+JJ>^6Y_0etYMET>HEHoH;iVO7{P(qYwVl +zmEiwT@DMv6mss@B`KWKz)(R_U!OQuE;lY_82CMnC(Vy18FmJs5ejc&twd>o7FFY9UUw)Uv$2)nRzuzgo8{P|!Y$P92 +zd^b2(AU-Vqt9r$Xi(8-MqAiu!pB3|B#^xM7IfjpIT6z|C>l6F!IA_x*HX-~CpFI3Q +zI3)XY`T_fVqCdxd=uQ{Qr;0!Pet(Xlfy~qLA6OcYtj(tZ#(|&O{3`h%g~QCVIiG(9 +zJTsp@eh1JI4d@J_m_VXN` +zzmxR4?3#V35FQ602 +zl0cr+dF{auWUuC{*e%6vslDR1u!oPlJILz^F3Jy +zErOlExm6eE`MR$>P{r>v(YHnW&IZZ9D6#yi^GVNF$X)JH+7En%6~3G`o?M)piMnQy +z-cpC&GlzZp7hQkss;8DcyOF2H +z@J{^ZApZ;Q{hed=zp~fvx9UH8Lj4_n{XybTg8nzYIfftKr2Kz#Jqh~Tp5re*asMSh +zD$SaqYG@>oA39^UXC1mrqqETIsRaJx#gEx}zB$l0TAgQY?SV<*tqB~#$thf +zVBE~J)D;d19}=D~+2Y5^e96qET|SB0QJ?Z^FBT`ysYh2Qp5u|Kgkn?j`CoB!o^Q*< +zyAFXnf&Y<@qqgTyuY9X~sAN7T`p>mi$T(Kgi!U{_pKtZM(}lOenAj60ps_^Mlw`^`F!+%QG4S>*b7Vn}n44DoQ}fbBm`JJ*X- +zeXEY(`=vaaTx~P=A@B2TyH&K4Z6Ln^cLoNgVC!*5oY +z&s1OPXE(7Pm3|+4cgpU!wr8+jy&-pwzvdm3%PtcBTHlHTZpXU3d^Ys^5&GBKls`D= +zJL>m+D{a^D9u_fHLt3Ba-fUX8wwM^W%efN1m`6hvMzz#cIdH*tCQb=Mde +z$7cQpaIkcK=(zDh{&*9qr+225+hNR~{KSysYy5gEsrNs@&)NQ3XVPA4Jsp0AsU!Rp@6)-I_@#JgHaq92_-Ngd +z@*$lQYAus|d}}r}8=vd5>r-3N#yS3&v?W)K&Sd4gSlYgWdXXIe!)E^1IQ_&N2fSMM +zdvwQ6V>^XTm3X)5k7i2Xt;S5YzIyn(`1v>dGhXhQWNPV4atL1*{EWD*q4mk#+Pu;T*!PQrXn5gE!ZYsjxD!koPptc--oUe +zO~Km-R4-y|JZUH^y*mNp|utGHhv3ZZ9#VDuKSJW?Ho1UCn)E>BrgAJ=&ve6tSfhggZp{c +z996qYe8P7WSNA5r><0lQ06dHC?}{m|TzBxgU_ +zXQI4w)xa64Xr(H1-9V%F-F%>tb-wRd<%4=B2AdOHr9ON9O1zD;+CTZeRLxamZ{GpG +z@yGw3U6*J32l~XwkL?*Ozq_7%$*yx1ZNTLe<3JaN->!Gg`G5yAt4p5FXTK+~L(S!0 +zoILdE@y8Z;sCZ*};2(g8PGqeA#O7!*lhVsQ8n$hQ`KI+1aW1De&jtD8X|wkSV{JZ4 +z8}UZyhx_s_v?1MaQCmLo`SalyNpmy0<>C(YQDiRiV73EU^X3-2R`KyR`cq7`jS(G# +zt$eaSd&<_Ur%rHhz>XC;ZmifT#@d6QBKqLiSnu`6(z%k>cW~V;cW?6Jh~D9!E4}%B +z#RMqsUvi8)pLbBlFWXC*Vz`w%AW8hM2P6CriWh8|cjb{E`M%Zd)LY=?8F}Bx$dA#r +z!2y1EDbKCWa`PUECtA$S=|a{mJ^92n>3+jEC==`iw_q+V?;5@4y{GV_tYEi@afrk4 +z_U}z%-*fvueC*VHuRBTKx<~Pz?lD*${@z&MzoBn$t@tm>7mxWbc2mdlhQmH@aJC_r +zM)`Z!XgSwvdL8(L8JG-?6d98`6W>aiiGbg+wo>>iXWiU;^Z4sPaCb}P4l*VmIxMEm +zu-=|VrUXBM><#qo%3wTytnvO>Ky*r?=sg;)v{;k0Ia@>%PWY?dsxvib7VL1$_DN%jmqq^)&BNh0n@Calg%w*SJ9 +zRZcOMkDuHqS@~(|315gO^z3oT +z=H*8%j1qs}H~f<6{|DWx8pD%U;uSuglu>@rku0%y@GfQ_P8Tc3{o7UdK7rX1tZ?^^K;?zq~ +zCsp?yaEF)^>ZP>j)N7|+$Lr9!U|8HckUrmJkI?6ES#M*i)hUJ6o%99uX5kdqEQ}Xs +zcyDGfe!;Z<#1wP8JB8ep#q33?ThH6((R8JW4k?~$^W=T^DpzVV{@+mOVcvp&f?Sc> +zi$UU8^k&U|;L(~cCElviY*D<6_Jvwj-O_C*7G?N8VEA+oAS4laL&|3ixy(8zm3_&?_tAD#3ix>H})H+kC; +z+mF?wl~?N=KVEm_#}~CVQGcoFe@ZeGJ#&a}T^w`(PrVO59vn0~!=?;6lATf7J%cjQ +zljbDc5**hraqbdc<>FM6Ij^S{JP2@0cqMp@Y_ohMz$xn8{V^Y}^iED}zFGLeh*>DS +z5}p~8pC(rwZxvab`W)lu>WI=~Ha}_MxtYGt@#Z%-BiloIzV4p4VCP8>XjTqg><{_O +zCfk0pT1N)k_KQwaB5WEnWxd56q8F`8I;YlkBE2Ndv29vku(p71B8*QPZ=EO74sANL +z*7H~^^qOXz^tsHz#xZ;El0#e4>vwMaHTuAqJz-_xNBw)hk9P~7WGl?{{M-D-UMTn0 +zr?oblpKUeX8vD2YBmIaki*Ic4b&Nna&idz?%jr+BQjBM=Pw|-?ouuIM<9*?QJS(GZ +zU{}@?Qy>`@oG&MkIg-zkW1fwPObg_gf2O=`H*ntBZ1=7b{Cz&%H{3uR#)-JgJBIDh +zFY!Kaz5DYpZFK&;1eq1=$0okfH+=c6xjIhN?e~o8^UxUj*E5U8^sfZ{G-EfDm$@x> +zZMo|T)|7|suk$P63~&5;Iu`f$``dEnafQc|-|Da4_9Yu!P +zwz>DR!u~jVb6Wk1AM@s@=l@?s{j+>NH27#>6WBh)cklAc1}M`V4sTxUPeacBbWx`G +z2JKCmscqN31ir3dUjm~P<8M>COUgWv_fdQk^5H#%Zc@^wc;LOBUukR}yr(&!+&`_z +zv*3QLas;f)$%oy_ovNQ{zBzBxYd=rC2fJ?5@jO8Kco}o|)(QVS%svG1MDu+8Noz9r +z1;f;fkk_clUx)Zdiz#9aV{b;Qzr9`Hl<%ifuAf|*6Cct3!Y9y)tUj!`6`eO~kHs4< +z_j9Z$XOMWz4*1LE?+^IPnyt6eKkve4666WeypdNn+ +zv&rS~q+FN<@ARDoJrj!`-;r~6UF7)#0zZQFe=^^8olR;#`+XSb%&~;F;=SHkq?3RhR|*9LT&%ALMy&PdII^^t}c6 +z^$zgOd+U*y%1|gjrngLuS&-fbOuY4fYmDAKKQ{Nxg%h%kw0?X4-kwQ@@!_5-A4Wh= +z!5YA+ZMn8jrN17@qy%GHzl(j_DB|VzBEAG$%jOSy89Vk`{27PhVX%gxlKPyAYqp1&8~TocBoEb`>=G0y3&U0Lk;cIEGtP5BdO>bJ=0IC{&ZZ3(j& +zxx6?%2ye;T8mTcw@^M#jpEX8|>8?0-Xa7?1l$|Bjrs&#Co%vNy^guMR3|lJd?2M0- +zzx1&5?H78?U{z)v?Yy@k%|7%cyWXYfr|8%mx4-Y$Dsxd+J$=+IDLV2?KL_QWhvA9v +zS;}~a`{wpK)6=dsQxBiW2jkTRS +z2;U3t;F+`1x6<$5!S5?fGPTMq&VbpXp$i@7@$W?afr +z@aa_8EK3zQt!~m>q_VUF{oVVa+jwWXF%!q8P2#7%ZXim|nDrU+fhhj!yVKN7FXW88 +zmNs?t*<}_F)iWRYtvby`TQzPQb@;))S)AU^--_Ygj1MeP7tM6>zvk*9KdB8^iP0(84^^n6`ty`1To1C?=dj3DtiMw^c +z?<}XmwRj|-Qw4nQFnq6w+$4%Yz{fxg0z7^oO8*(|+6{6q_RZ`A|F8>rEgV#Ayg7U+ +zxDIX)M#1$GAJ<>#`2b}}a}#TPZCZsXP5l9xS`fMrpGDF;gEE}&=q7xSnv>oOcdyd%MUbkAIH$z~rIs)YCHZ{1N5?n$@)kLu&)*}=}^^#^NrFYUQx +zlxD5|u$y`(>JO3!U0!?Z$FD_iXx&)_zq%H>KGqG+z|)Qmi8qPQNq-QJT8NGyekdNe +zh+Kl=Sz|n~9{3ErVSiO1uvE}^K!oP0!^=c5BeftT>>#qBf5OTOIvDpL<{yvtd^*wyg9@*&0j$xbTZ%r<|1J?EwM +zyq~%@1wU&Go1OUYw!n)eD_Ya}_HfV&WJ_Oc{P8niTQi)eDVg&)5}>4XJrFR +z(QO4gtCzeMzsx^VPu@Sqci@GoD|+}z#u0JxpEA(9aP +zi*~w;biTNpebJeXaq?VaB3-)wC0WNg=a6LGXMK8*U6v56eH-ri`}&6e*4y9LA3G6_ +z3G#!5P3M0Dj{ACw@W&Mc%eRN)udq2MVmrNx9r$dj*rZbtlS-ADm8lByJ5+Mtg=sw+ +zHl~|NV3lno}E +z{Q}>oG5F2C;jiViccDMg4tqTG&wf9A>*%GPbg^LX;muxuW!&-2&E+Uv>|Q?(O}f~6 +z+DR9a{-u0D?0=W=#OhwJ#kc!s*21GY>fQuj_THaS?m+4*w-aSuUc4##9PuRsulw^A +zU+YaMU-dPdd0IPCbrrKDpNf1gC#Qqy8VS{T%eoXlj#Zw=M0FF8*@%zM~a>9D(%nuIp3iST<*F0{e|IkIH82Kl_(M +zF8L=-OuqLhzVJ)aZ|<1j`9LbrH?BheP@Y!h9XsFWh3@|R#N*%48R_{0H;|t>b|!C{ +z0Z(VXa+kR5%UtjNs(ie!^0(F}pXa~+z~Uo*$BtFB*Y{jI{1bc|WS{DC{H^k}UJ0HG +z7w>)Aw!egW-0_0n5|cpus_vjY{v%sfOxdsKBY;ns|7Fh#uBtB|aIQ^@eL)^1rUR%4$3&Qw7#%n@b5YQZU%Ls)tc01>PfE( +za$eDYyKITT_Vi#vyR*RCz=jY$)X^?jm*R+G@b%!00nM?WcLwbIqwtGZ`)B=iNBnj= +zf12gTDo*5^&Y#qu;@Ow@zN0rc%dW;A@_bU9@#pBAdnuE?vBX=OUGo6nH2=V^l+P)! +zD}%WQ@ZL<_!Cvz}h0b)WCA^%BN77l!!e4tv*A`SaU+f4}Izm~zJH3VY{5Hiy3L_tgHKBL6%{ +zu(Cd~r9*AxrW7pZ`{xY3UkiL>FMBYRk8GD;)=8P_s=dx8p7nWO8{chAs4dgk#8-Z3 +z;kwc*)BVZwkwM4rLoH?cHg@J<&*b+mzw(IuftRzd|LVsMOrh=~{y*1r?)2I~YnsdO +z_w6_Zls}$*;He+`{4ztHGIIM6^R0W4=c8-SK9cci8<=)E+=biw)xP2TpfTyW>Qgvw +zV@>TDNwJUbUDQ*2sW&clKEB|1d~Ty$KJ|*;eUAlvG{6~;|4}Zz@kD$Pj>}fo*{kp- +zz!$^&Bwf%Wymr?_Guw;zdKY?!)+;{s_$mBE6XDCs7e-s?)8fR<{2$o)!f(-MVCTzE +zwB7feXl=TGsC$@}7WvAs8QAhr# +zdVX}CQOn%V@nxp;5BSfvO7=kddZ35EACc*oc3e$=qThe?;+a=_Z@ygM?`Z{PvI{RJ +z-aun34zAhUzg2K(!tcKdpIQRmCV23FdL8m=CjLLkDs#@t%UVN@i@wHNbA$08@fM1B +z@(y1&5U*b8kE8Fq?|Cb)-p;o)`!1Oq9rdBH24ClT#4EFQspRPu%ul+Q^tDs9QGATX +z6TEZf!aT-O8|iqG>ByNbNWoJC?G#3<-T^*2=!I9|W7&QRe40!<$$I*sKbv2N{PM`UF~8#` +zAAjoE2j*~R6}C<>d!aWcksn>kn{z51!QP3mYqq}0ApY9z%B8n8{@MfnTl{7CFY7mX +z(t8wdT2h4{&Xbi1V(`E3$GmBthrcwYQ^?o+vUfij{zVMVs+@jv>2(Kf1otj@pT?2S +zr*UQm=OFaEIj7&CZ7{zUzkL%nT5kKMoc496XX!=EI>c$0MCyZ*e&eL5?5>Y=k}YznyY +z=forgzD2<|Nv!3sw^{yu1#_6kJZrt2qpx}T&{g;=uZG{9YRoekQ+kp5+5KoSm3F*2eNQTp@tho50JyIUu+Q +zR#)Wk@UzL?^7p6MKXUZMr+ToGtUR@>uFc`gf>Q$8-sG=u5wPO_j$-Di^(%Lx-Wa$V +zzIeKEExi03Pr&P8zrWpg+q)W#o{Z{h^5bhi<=-zq*PTZ!8T`unZvvf7bWnb7 +z$vjI3Gg6!3YrK^+DwE4RnQY%fx|;Z>`*YT;cQpc=3EAC$HStD@^(EJ0nttG?Rz823 +zvH%ZU&L)`Caq=1bYF8{zr;iV38NEMotf!86M|f^pF+0c0n%lhCcF7^dhKV+gm+QYd +zdhiRgk9-)p-tWg;RrX%kw!6J=_~YJOpe1B>ou{u^+U%lCy4Xk2N6FjB+-s2egUE7U +zkA!C7zwmrF{aycTg7~-8D%wr-`rO%8V75RrwbzZqg6dfND@ +zLq`ydHu3kB(1`Y@i5%nWe7p9-R +zDLT5nUpvc}p=sJC*!yDdeqGQCgG{#}2g^OQ|LE#YnXUHRru@jrNe>1uGm+Lf{?(NA*d +z;-E(t(1PcWkNEmiEi!zPFH;Mcr+BvYVV^%FUKaSVrDq7I1eY6qxa9JS-FM0+xB8TH +z^cf+;TXI$>7p#iRVeH8IosLt^{yBF(cnUgKz8>*+mveza&MksFG{87V@3w2ud@PQw +zJ_@gm4Zg?TSDfbK*(JEm1_^&Jo26iXS%NIPFo|D~Ke +zti0(U9<%ZDWI;VIqNtV5zd#lBX4 +zp?e4&mA|8@-N+8@cNo8~ee>{8{O3(pCf;*<-*6^-{%&kt;=H5e%OSRfy4KhGN*r6b +z{gOSlu1gGE6ZH$>4|$<|G2yH7*6ZGprMrDG;zhjn*023ae71j1Ka+O$PKA}rxiMBn +zl>G;GbC|QnBK+T1!KWqXG!OYyip@pD3rIh9(~{5Y{oI>-HxO?OZ3gzrZvGel15U>p +z*k2pZDcjP<)HRKtJ^HqZ{Ar3EU55A*`5wzU_4^Wh_RI5U9f~jTeQL}ZUQ?60ggTOkI!_SX!oDmy +z?DLm0>h0m~g@se>xVWC}RbzgtTzc-6@qty!(UpeSsY(DMx2Z%eN)? +z^R5c}Q=1AG%;oLgnCp1Hgd-DlU!ikJqu1ZN%v$u+cshEZHL-sGI?ghpnJDk;$p;#} +zB)Ld(BIqyS_lI6LV&4PK?Q;%&+Bw$ya|qTF;7j-<^KHtR@4>Y}JkJ{NWVPp`?dqMu +zIic*i`@19fXv^RO9{|RQAKd4?S0jA79C~t`Br<XqGO#p$KPMkwySpneVYE3 +zF!x))9SU&y%)x@q{rwC(HUIseY1pL6I#YcuBbc?D&2PjuRupYUQS +zbTttjd`&xRf~J1b&YIfcWuDFy)Dg{{s?PS_GmcdHdZ%(ZCjC1~U9I-L$A8CHD!Whh +zgtN-4IKi*8o;s5E^5q46s65{5Mm18#!6oNjAjsaxp0z}?>DKpyA$I=`0B=)6zq{1lsnGlYLa&O4!}T*Xw>6U$K> +z-b2je1Du=g>-gY-!J2&MKvl81AXVr5ewyOgxF^j0nHaWCG)26RH&%%6`OY%(K0JXv +z^>oGwJzd4Qp?6oPEnI=Wl-%EqRm4M0W?%oI!!`eqGUhv}qEKE{1^1ZHb>hWNn3#f6 +zH|z{l6*y1Q-w#oLC&T+DcNaPfT-SUtO+RU4K80QN1~_P*77he*Ui6yPm##-aYT)Q`QTe%PBI@22F< +z9XXyKjqwh9KlC$GPm`tU!G=L!ao_m0g;>uvGM=Zpv^AMcG) +zkM~(T|Ku3_g-?n-)tTKFc^A8H+LFR^b%&Qd`Y`Q-eNumAUVp1cn!eHq?pAbg=bKza +z(sT6Ii{cO)Q?n05YAVo0Cp*!qSm9)@DDsYJVcb>D+AQ{2Ug0w0FH5i^BHT}&1E0M% +zWA}awG;&>}z$|l3azkV!`#^t*Bi~;uHrvCIeCNT@H|aEIy_0bNb7OPew0dl=qLsxt +zv=W9^1fSd=t*4GQvTd5aQk9ZVaQG1K|f +z=H6$4i-o=BB%N-yGpp*uet%(q4vDWSzk<#ZU-oi6RQlxyZ|NKUAUX->HNddCTl?{L +zzS=-;K%>V@a`q9Ob!;L|N9V{7X3u|Gac}aw1#8#(?E5CtL0Pvq&usjU+yfL|>rIX2 +z%tPlnhqJdml?&TF{`t9ZOR!bnA%E^OY4e;vj>_fhlwNt%?{^~QJ95fB{fx2I$D4kg +zgJ0+yev&#`xA1Q-{|oN|y-~P^{&cjqcRGApZ_C;|L&C)%?pydLo5K9Cnm2$&Lsr*` +z5Ob&ezO?12C`$ZliM!0hmA<2i-dXLO$L-|on$~>Z(cR$*M>?0Jh!>veogcb> +zOoQmFfIf7Na|gO(#7rOBWTq3-qw}%p-G|BZUu1S3i5O?7!tBeq+~KU{o?|^cK5QD$ +z5gN!b64TvD^v7tr%z|W+2VeexfQ$tQ@X6&=TcM5l& +zV+$hO<(%HdyHKg!;hM}2+DpI6L%-+@-^tuwer$?Ug08bZ6Fq0%Jl^V#Z4ZAk-NjFd +z6LXW?t*M&kCZsQDzY;&N=Zg{A!K;qiv(+u_*!SHJ_uhC~y8LT!zBxQIwJAIu7?CG9 +zJkxJ;a^1a_`m!6|&Q`cYbV(dTGCa$-31*#^_H@?%c6j%`6Yy@Tk9V(rhFnVE4|8u{ +z%x~e&?y!x;$i<%l>Ir|E6?62%a^@BD=?2|^{jzlP!YJM7UbNm<7N0%F9lijsh4bV5 +zv76~r_$=F$yE2&_y|MI0{(rc4f~QZb?r@h+|I~drr%d!w@Ap$i*;dMeF;w<3zic99 +z;{V!f{fNJ3R(UenyPseVA49g!8QJsNZ-)mPqu~5+yNSWcRKVMl*zNc{(1X`>|L{{g +zhjcH8x4pafa$c~9pWXcQ^8?=@9^+Wg4t_fM+0M^q&ekiD8!kGFe8q}E=6s^N>mA32 +z%Fecaqurd_>D}NncoRUrl|ky>{HfWV4`Bnb`=Z+v1d;Ddwwc{9pr=#y7~EW_i*;Q +zwDOS8JkVdWJAaLM1^3Qw!_Tt-f5L%j$zzS%HXnPjXA?hd{NTgCx0s&?;gw16dmR4s +z;~_(?p8#&v*Aqr +zPBr)G2HazhbvX04R2%ckG$$0{F3Eoq3sK_XapkeQIx3Fc*kRxN#8-1{p~qvjhe1EZ +z{+_A7&41_Jr|YlJ`$1UE&_U9)XB{z@|IVeNZqr}5P1 +zVa7Yic>lmy8FT;G+@1HkdCpZX_0!Z(AMpEq?o(E8b%~Rb-mbW!+do}&q;XL&?)|C9 +zsiXWAvPGN2>r>!r+6k?7KhOB!a{Fb_o$hoA#|qIeu(3S5+5snIS4-Zu0^h)%{x9F2 +zz9Yv*$P$AOoLK(_=w8?1FXFzK6L;Upwr2RA&dbNfHB;fg8#u?i--8*y(+e5f3BBNc +z0=}pF+}4nRh;bIIKWE=%|H=8& +z=3}Mccz*X8&c|ZOV-Ka9zRN7}-TsTRh&3Y|vpE8aYcH}^xwOH*&&+&8=z +z+-wU^;cgsn0yz!f!cuTyO4$;9fAlGWzbPZG?R)W-R~-rJkSI1>X|*wrcTh!K2&ZaJ0C*M1_X=JQY_aeqB!j|SfGd~TSx8+xrpfeYl<=)@t^SAOtWb*G)+) +zc0utQr#0n8)CmE +z7PMOQe;``@LE4eGB^5=dl@B`V^26QKR;MHZJBT@WVXUPHV&OhUo$th +zR%=eT7jB4M2w$3P+~+y(NR>M!u}RJg%)2}#ekK2WDec9F^^SOgyeFcCO7!z<@qtLr +zFJH+yI(begPt|kA?u2H!T9njd}a(k9wp9I-)_wL_K5$jD(71#--HvnKcbf%H`@0@rMFodf-_I#gm6XrZQboP +z?R@7PXzr2D-dLyXXXq4Jdq3s!+1}^9kyY0_5xGZRX7Fa`Dhmhv9f?oS{}lGbTi3T` +z)9anA^N*bKjIC1%zPRjfCG~=`pl&Pg9nE0x^2V1YW{hvBURby+c2{9TO!t85dRKPm +z`+d0JBmJbD@yn~<{3JPP@r9L;3#MRvW1?g{zDnMAU+aB~CFB>Y>z&D-%^B$*h$i#B +zx!JY%vp#Hdc;I~_7#+oehvaaxnUcvT_QIHTX=`8YJA$or1RH4x`w07LCwkeIQ`lGg +za_p;p+bXfKtbMg}TLK%)<);oCtCpW8Y^-{ITClO2`8m +zbq1Tp`gtdHnod%uH>b|o)Y);8I-7IqoJF0?N$RYkP5{F~>eQWN?X}c_Hc~q06Avkb +zhn$RW){dUxSQ+=D4~@~S=rv3~dq(|PdK2;ubf8N;zAoCf{*o0#d7%lMP2lS=ym({Q +zMXJQZlW}lXwTX#Omh3LqfM}1=+{TJSA&f;Lz2T9OY%Xy6uH=5ejrl)yX=ag)=+Z{{9q1q +z@S79o;4~u>8`@_$uf!)5HY1A^ZzTWJ@vxKJ4faLz-|giA(4Att295RXb@pxr@lCGQ +z@|q{VZQTm`|B+v}lX~)H2mL(me{bWv*7rMN5oU5;`Ws^H+rl-edVDxhXJ!oEo{@~3 +ziH+74zLRy8rWIGJHiCD8_RYXr@7YV&P%bsSy(qXy<^*>n1RudgahZZspr6b@ZX52F +zMwzS54%*N+%N*iR4@7G&a3TY(`x~pv`JGo7OH6Z!xqzRGmtT&*!}9PKQ|~Z?_@nwp +zUeC_pT;vh&th&}bmAXB&)18PtO|IHw#hk-&#x_*f`=^d^p?`IEJN*Oo<`MMjC^ohzw#NX-DcJ*ICMIZy@JIo +z!N7yZbYL~hT}s^m7T*LG8t+UK8P&TcILnUHyB?vxz~3r;EB~m)>o=G64GXs&?!BK& +zpN{hj+C@`WF|NjsPLrN_p{Hk35Ba%_x(#lM{-jeD1IKK>;u{)b@<&J)jZLes&Sy>1 +zMVVLHn8xlPX5lXCJp>K1SHNUn{5jwwyGcGLClrfu|Cj&o8>u&sVnan!`Og`gkvM(6@BXw;%9L +zcq~6m=aOY9kCsI<*sYQWo#amrn>^3PB}9z62?PAE*7F@aw+QB%iYFPaXRbfj&f2_+f@b)7VMylT(lR7u0|9*za~~tyMXD +za4TyK?7LFn(-!_&yLeU+viMVcZz-2e%0|#x1}rY +z4LHkV3H&YNu*=5z^u_-v(b(Z@bVh%dN28)y;zm51vjiR@+7-W8#rm}$<32Y=6UFR@ +z#!;NY;p{?u!{d*9`Fso8d+778S+CBb1qam=y*`AWLG-$c@-E6Hm!~NYk`*Q=|0^K{%H}`(r>i5#4t=<{vnL5WAyZ098n}ME5zL56KCbA3K +zKHACqLZZ=Da+D;X$0R(VkUS)1&g;;A-_dc-Gwxtx_t3b)-T0j^kF5oXIXj^ +zdgn4PX4CE0xn`KSVbRJm^rVj?udD8eRG-Ow^PNMnDE2_P^Wc2+_%yl&zOlubYIF?R +zcshKbGrGvtBK)(!t6lcS$@IoDGox*$SxA2768CZNv5*{6@}Y;_(kj>YnuQ&bu@o7m9{yN9d9Cbeh +zg`imH3&wGA10ZP>fB~7 +zxtuuf#-0v)sn=j`v>TE!#TI=gn +z`{E{fou^afkxyCik(KJFs5FwNx4}30z6Abu(Kpxm{kVpHicaWf)A9XqcPw+Gw|75p +zFCh1JHrtaKhrKujI7G;gmcO7rahCH`>@4S**aY;uvkC`dE;+M_kr-Kre(=k48|Jl! +zo{3!x4zzKuUTY2hRFQk9HxB3@GOZoNsMvohn4A)DUAb!2f1 +zG9keEXMI_G@UN|Xu6`*W#dVal{)D+PwHP}X8-3_%;Huv`?-C3PLtM`+EQ~q4ZO{Md +z#n{OCPDgAMwmwgJ8TlnV9_Dv|qnb}ZyTP2!_Gwt_w&$$b_>KOWg|ET<<}qL4ZLoID +z?@o9^ftl5o@0{hv7DN*K-L(OKLjoQ=)!%dF1)I-L#B9uHkK4k(=+-()ots_e%zNK2 +z#q*u(T+0h@=DeW6Ti1_{J+My{p%^Rb2K2J$<}FC{-zpclwz^%Hyy?=rK8TKAV$FJ|7)If_5^ +zeL%e5@Cx7Zcy}zxdeGmoeidyqLw^8^B5BF#DF`y74(IOU3W7@;&fv8SiYOKef^6$FFr1zt#%;S_kkG +zDK~y$dmFm^?AL<3Z+EVDjd|yW8$$1jwK#*=cMYk6 +z&_nKLoFuyRZOmiXMN!}5rL}r`?SVkyhmPQPs%y7+u*}*=4;Vv`O#)>OjhIDi=7Re +ztzRY@dmt||P+DD5J?)uD^|JZ(iT9UBt3&4ZiPq5X6OFFBD6f8DO$)p>$xj>n=)#TB +z>XJjz>Vp1XROcsePJ{-p@ZQl9zI~0iS}wyk@zwb|tDin+|7C3(s%oA-XW+7^88=_} +z7x;A+GJfq3tn7Y0yLCu8hGuQ-tdUnq`xK>damk&d69k#%O_)(@LlVNpA1J2 +zM6kat44&|PL0@YbvwJ`O$0dd0-9?H!gl0vrWv@BaZO$32r7T7KOTX@i9A-_@;R>92 +zvF421wj6lsemik6nW-CN_+zi5xCz`D^S@3E&2(RNk~_hnyI&{PyL@A$`rS?hzVer; +z2k4hvrrFLV#mM~@^rsc>H%$G&d$}K6&;PvRa%}vHNVVg97+j04Z^d7!d<$RnVsA9= +zzRU&CnCxebYs}|Ub-mw9)tgMmJ3V^clFoN-b(7}%oN3D+wG-O-6ZJ~hJLrDVo6rSK +z>B9}74=To}Uu*pWzw=pZ1^lTwQ{T4V^G%G66$(9xz5XORRA;|2FOk#n2i)`C;^uqz +zykEoz_pc@1J#W7K8Xw&C)YE$#7EX4)K_9PYpBM;X>%W$L!rJ;dvf@AgV@aXPxHAJz +zzJxyc?Z`MgPQU1u`{d}Qzr)wJ#eIlzibluT;_XK%`!Ozb9do_TeLefTfmh)(Wp1*1 +z3i}#12jkk`_0HNvu*Y{OuEfxmptJdwE-{jml9 +z0v}0B57Ijb@}0@f6MnmtNyf@QvIL)sbiAt<$rfIkk{vk3*%)iZ&$9-4Z^l2I58p55 +z-jaOR4>)>D=t*pihdh6DGq#xcp!7e7y=mfq%MV-KJaqhsd9kOAAMp+Jn8ZZ%n7{|E +zm^Y_7f?g5z{6BgtFigKZ$pjr$q3hc-h}VPp0FHku+BVvndZBVooK`P!_t3Sn11$k> +z9{kh%PaNFs^NFSIznro7|B%Yzr^ucH{a;;@xPHEysB-%kF!M8FKNkw?Oq=;DUGS(6ymRq*xHs%)aLFrL} +zOj(1T6Ufhrp5J0AJh94klAI60ms_3bjN8DtG2*nBLB}qzitF48JHQ=CvLDEoj1#F( +z)a`&Xeiu0{(xYu161-y$GC`;yum+DWe2^PhA=7r=8P0|8tGQ~P(6 +zu_NyHfu-Qfci`TDUChl3xw_swcl% +zlUdUvJtd&24fwspXI@=^FMx9_>U2=&Zt;!-N9PWpf22C;w+$NOoGG;qoLw9GR$?>X +z)|>0*Ma{f<>hJlZ)~1sWSiDSmhPba*Gxl=Xo>@j=4?zE;3J{b3aAAmkU4J4?o)vKf7;a +z0k|((Rh)qIVa=xiy|o~eOcYcn6Y~nE#H=p54!*V@SX_V~(emERcexJ_4-icDUS@gk +z)Bc>F$dNNkd_0Ne;LhLp-`g24?r^%hVs|C#=T?l9yh +z8$8+&J%|>#q$e9H^|$;MpBB#!lMh$?`V7ttIa`3%$rp6&TJ-7?@T@8$o|Va#q$QKq +zqt_)BFUj4A7I2oc3;gJ@#F^-ZlbqLLy3d*<#>be8)<@xC{C+r0zWg?S-B*2Kj6UAy +zukq%bbr<{JX64j-2j9v>hv*z-#MsLAn025&u|715`$P})ljEn|2`z#aBgo*j?aUv0 +zM(3)_<|!BNMb1|AJSz(~|EJxL#QeVD*8MM5{|#-BZ=9!ZM82V`A^#SE=h#Kazh%Ds +zt3m$lqdd-?70J67z>gO^c^4-h@J#MQpIY9{1TXZC?rZe7D5G};gS&E?Q?5LDe4fSY +zImgcD9PkBlY`ron$AwE9fP-);MLo%Le@55;5Z +zCqD%5tgcVQ3rl@_ZaMRsdK|9a{vaJAnP>0FDCQ`bUnh0!+;vA$YbW1F +z&is>x>vtVUzbq+RCeypUiLwK5WfW8uJ+=dzVS`F +zwj$~%uIa~q9hK{B=>os}aLnGRdCU0+-*x{{`>4E6#NBj^`8nRe&tdcZX>YH{$qTqP +zR8{kNcrtg?kw@k3XZia~r@Si6yM(3Kh?FN10 +zd9s4H9Ax8gKlA<2Y0;4h#5GL_)mKlbuCJ~xRE*5@Zk>f$J!clO;Lf4bOQxr)1}>DWx0Og7@_8{?g5 +z>`bRRCLf&SSaS{!`3i4x>su=4+a|tgyokA&IGIxS5yn)Ug7&(=xwxv-`82i%GOO^a +zD*3I7%omA4%&W=^q5oF9=zb+`*vwAXn@y~3d3pom%Kui$+{9<1z*@dH`P$@rTLfMT +zCj0?Wz&%P&KCIn3vqj{@C)8#d=*-YrL@QVPG_>jCmoOuJjF#8@aEAc +zd2{A~ho{=xN`G(5n0FO>DIFkxK_u~R#*Wf1Lfls)vh`e3&l*;bNT1Re1=x?muldX+ +zz@>?yb+M?~FyGRZ;(klKv8xNq*@Keq0H6NCAM^1!$Tjc$V~lsQ7wtLcdtR((VEgI* +zn*n~oIhM{=1h+Gt$6|uziSXNwAK@_NG1j9sOAa~Ca^%P??;WOqX9*w5n2T&v-#VC@f+Ur{hs*)G4Vo-)Oo1ZxY@~!hexolLv-eAtU +zn>hxTlh>a}{nM>W@iJL|?hk*cZ&?2FU|lN9_+@RBDKAX0o)-SsdOCY|CeJhdj4{WH +zo!?F#C+QKw6Jt74&`ZDP-w#hkw!M!$4(Ryck2mi{>M?6LNV|AA?ULqc& +zb3^zIZ;8miYwzN}i?~31(FuI|GQ4m4DM +ziv2O>u2jj!hU!xM1HoK?cl+AHwb&xMtE2p14cH;C;J+Q4n`mV(^SBn@tK`!q%tQO3 +zxT%20=$t5bZMpnLW1ZMvu73AYrPc4gIw=qIJMD*bJov=G +zH+ZKhSgY2j_2$k+bRk}$zO~L=J#f+6j5(8XjdcKBFbR#>J}gg`9uzx#|wAIg9HR+$#ih|UX@tF;wB#S-dgvlaNED%_j++X)ra +zXf4k|JIdMF8X8}96#NX<_6*;Hd7e0i_DZrdcb~L|Cyx$K3hLGZ!(cyEH`vcg^3?r; +zw_CKgxj0?)0jtlD(;ho`g7=0*k(W!;-jxX8bMXK4kyk5#-yktg)^^E-;Q)1(ghxT|*utX`XoyPN)uepgaQ{e2x9^Hh3#0Q-Q>^#-44J9wYwOCG*j+L1i{ +z!)A-iMfCmooHF6^RX(1-c}d^!ddhS+znl@?n +zey(_x)zP2!d0IW=p5ZKtf$v-Go-c)0tbtdI-O-Q?>|C;(JXi6yag3$&HIw(m$cE5V +zVi{wct<5Jl5p(d)qHWyqXQ5B=Ohf<5-6~uYo=Mk`o|xxELDAB5=aP9|teAAOy0JAR +ziMSMa*cX0W#lncFKpymtV9nnO;H)9Z`M+m|F3$maN)PX2)ivTzQ0cw#Aj +zx?93E<|1;BN%v9A +zS_AfX8}*z6TdHs8w`BN6e!t6n@<_zoHl+G%_czvDe4wG`M(3(|_yYz4{&}wlgO#V1 +z1%ITD-UYalm>Qc4%I34*4bBGqE>oem>4kIZ>*VnM8T~wJ`giIr`;);vH-@n`(D%V{ +z&DGbTQvLJ+?bn>4d3&_K1=?D#4i>^haE;-UxU#-o!g~;uAL3YE5eIMK&Jha@v&8k8zYse9p*B +z;^nFqxWukU@rk(UN^zyd=Fy$CK3ncGT(KfwXyNoqb_${kB{+VU)~bq7a7u< +z)(^6F(dLUew7L2fy=`XUtMk)b-R`T@m%ieC_vyZ!H_Nq_iL9Z+D;GV#Rj!}7kAjWl +z>CnjVq_^VHpVwZvHj8_Rne5F+w4P6gZmhZ~d)uynr>Oq`7gt_raq&8QOd4B0rNi09 +z$ZF{_gYmo1wdAJ(OKU +znQRK}l`)azhtYpDzU0TJj@WuDsV9E%f2gZHKbEuShCL6)74OP?)wZdm%{YI};$LO_ +zFIvg9|3jiV_FJ~N#_VUzI&`UGMnt4efIEgB{cj +z#`_5R!^@@iiZfJ<}h%$?s3JUd$X$*0$WAgVtN=*FSs$zouP} +zZ2Vvj+!F)!$xn#iZUz3>BJwb(Z}@vVejm=q-XKrlN8HKiBtHxymUNb!Kt5Z6@bbv3b&U16r0X70_De^giCtDR0vp#q;N4Z;T(E%gN=;t<)Q5 +zWhQXFhC80i+N4XO!}Z@Pz6l=)_AFQT_xYCRV~aw=hqL1|%R;R&6Y7i^0(QO6*8P{&yu|;?ol)WapQst+|4ROL +z`S}fdAK=6q{JNrPAw!tdeS~!l`8@aH&nsUK$J9fbj +ze7qCRDW6y_&Z#WdZ*fZwkEtVSPV)@Y*Jr4w`P*}9+1ljeI@^{XEbAM7#4pdapZ4%w +zw$NureFE0T$@K}OsdG7XqQ?05)3g5j@5lR=*HcgHkdEclyRb +zeE*SwX`F*AHuDT(H1RzSOe?2+!wZQs>R-Vh&i@c=Y(BAs#NVEgyeJ{t +zJ>V-%KCaYJH?YYiQ^sSn$+j#3-qKYLXY(@J{~}!o7=EQR%(SYHMvW-}fYTz00iAu9(sMd?;mw)b+_$MaY{o66c%X{`` +zpB2oaPs{7X%U5T2AT$2$pzUiVeVxu{EB}7rv)|8ts=ahXJ1@zhSL5T}Vf$(W544U5 +zeQN*T>#gPFI_svuX7S{UJvW}{@73N?`<`Xs1Jpi#{T@3;FJ;f>?AfsITX>l7-|@fe +z9i6XFw?0AbM;m2H_CvBB8Rz8(3i~!Deq`*{r9Fl_%(~C6^>wbhWgBz(Y@p-d%j&i{EaE9*tkT%a?CG4Nd%swYF7lhB!`Y)p7lCU!FB@$9 +z#-UPGIrEY4XS;YQm +z-t!{y!a?p?FDDPpZQgvVrn-r0=G+|q<*5Fa7up#kP6b%5@a9@a+=uLmbASnFNJp03 +zQgq~-e`V*JiP$w+`8qb=E`Kh2N6UTRfxm9e_W{4o<9;3Of9{%u1I^T{FjaTn6Rdx< +z?&=fjHfAxP~Y_M_T&@$>;yVmYQ5w_gSei|o%>z(5{Di3}<`3R9DJz|;_LRYN{6a)7?b +zbx-1I3YT+#Wf}hR7l@&W*u?T`i2!8!Tcw+AlijJ(hz^*qzecjo+lKoJ-!?)jZx88%% +z8!-1)*g8|ZKIe=izNFj;4zdV7#T!jG*NvS`YJM6&^B(Jum;{Y#486-mfW74oL$|OWv%2Pbzmg@YdaE&sTMSyF>m$(MSl4Di2;aiycb}{MKWlBta|FLWw+TDt6_)@%zdm-m?)|W?Y`*5~2Q>pw-H|RWXSxosIcAFR5 +zDzh)#dpKK_8Og5yzs$XRm{ir3|GjrrpRR5$(phBY +zAe%c7fehBCyq9FW5(uUW|DE{7h(Y|5R*~NBnFd=G&gCl +z;3Zhyjnw=3o=ejpCVAg?-sgS)IM1m%XP>>-UVH7e)?Rz9wb7;aRUd}`6+4ZXQueO> +zCGUrE-^m@n@3lYYPK?CbcZhFE+A4Q~U7TdUg1C&$ZiM~Cqxd(H7jUig#)_NV+JsZ* +zPKH@pp^X}3D{aBw +z_rQx(-@>dhi#tBR_nbMCwd`BSzBk28V%%@WZ?6Sd8r?*!k$95^_mkcld{TCZy#;u0 +zhAwIu6XoqYF1uuVOU&};_~1F{`*!-{eg9a0yjK*S!RGqWx%s!em%T@R)vmc2o9uby +z<`LaUhnBwM*E5H5(gl3^>pz>$Gp)fjpSAX-Ke;CI+QFx~uz!-jW1f7Wa`JEO#cmQd@tjB +z=`LlQgDpJcN6@Nv%bY36;hrAgx9iJ!A4h6ew%{7RHDeMrYEQHm>LG$v=Q6W@uzoOZ +z%ZZm8#y9T`+FuIye)6aJb*moL*E4z(d-*;d1#1ZJ4xS5M!76&td8VE%%;TGPcyz+p +zc=Q`X`xsa^J%K^^Ef6fzRt#B73ig*U!~=1G<54M`Dc3 +zM(l^JN?Y_$F~7#9WGv>eZsqfu{<+qPcrXRI12Un!DG`iQu^3GtrPx2y#1Q*jrnG)Y@m9k +z^+t%VrztObNXDk67C6WKx)PjsIfS_b{x^u1G>~Ib^des&)~ufWRO_M!XuvmJxO|&vmwbS< +zIpmaW{;mvMcy#3Rea&gnk#H#)Em{g`aWL(v-H^UQI`qp=>f9CJF2vt5wSi2~d9<1* +z@q54C9tWSSUyq6Agg@2}z1M)d&!UHl5A48(@!Z#y*ErF#3p?4%Kk;#KE_L~Q0{SCY +z_FvrcQGK_BGUAIngE_3R(YS>9Dn#$o!GGgo`P0X9Wt{bqh+dr>$(81L89ZNO#G2|O +zJh5|xPv4g?9@1I;d8>ICj)(Z9FFQkBwebM{|FrQcYhcwq@@BWLg#T(ozBeH+n@9}s +zU|z=mHaBSR&uDL7;m*y{r9B*C6Aky1MnzMp&BJ~C3=7I@3?@&)eoXBB5SvPh2Dc#( +z2J`L{$M!@X9>N~>OME`;mw0^mUh-tsX+FMl0ltM_;rm3J$a~Psaeo@=DxdQB;>Ol7 +z#Fro&+D1AfMWfK{iM(_=^~?82KC+VOAxt4W)Y~c@1(=Yx{u~$<{XsIs>tJ2t&EdZP +z!B~I%;CXRy8uFJn;V-@)!e0mY{4wQ6;`5H(bX!PwgL%n=yeCH~{PRhV&k671AECY? +z{4Ar)V0!fN^A7m&eXbjvsjlqaiRgu?kzCk}pusX|aBiyV6f`)I`ov=|rVok_Vy%R( +zFd5&LkJ4c{P9e@zMtIX0qW`ZC-w&n>jde&HC(HJ*e2CkSX5;1#bQGTkMYsHKYaSNb +z6in_{g&VfWUM*Wih;Q-nQPBmdQ30;!2IZdvhk`+Ncj0e3&-G2m-+#S5oYTUg@Ta*g +zx|+>eEIgZzzHTsPV{1oXQ_m0e_acXaFB^R_IgQxAGBX6d?i-#Rc~o>Z=lDV2oPlxn +zP`?jdd?WoM#M>!oEs$GNS|W^Dp)e{x&AywS%5U*W6C345t?P~?XHFw=(oIepzXSOm +zOm(60Eux18XFR&Tc+679PG^W7hQ<$X5dDODo7aC}3Gsb$|HUtk<3KS%!ms-8_rq`o +z?$IHB|Fsq$hOd63GfXxh_>N-B?j;}7seOgQu@3o+U|0sa)j0|gZt<&EM +z#;cj#D&jt7IrAMMO54DXc=9$M2y*(dj^jpLH +zeq2PI(sjgdPc<$ftlCGAU;O*P63U-^sqDYL&1lt0=Qao)!6<$;7dWP%Pfqu8F-&e@ +zUuAs;+0zv9Vc=aG@7gv}pEcP&-g{@g2ru=V7my3+t(o_H2cNEM(Y}lNbTZ6y2kaQW +zeYv#qxP3Xp_kW7K3}xkT^6g7rhO+XsO~KexPsp<*E0-=gQC5cd*;V4(=R#a~w01u- +z`YgYmr+KeuJ6IcRUG6`7lxNZvdJ3kkmU*oAgZbhLuTFm-W$^Pa1$Av?k0JjpzpnYg +zvmE;I1;6*7)$ojQX$2&;dUVtg= +zUE4bSS3dvo_y+3y*J$keOwm1G$T+h;msxm!{hSroWam6~QO6ven^k6=RGE#YJ|FAz +z`qTXQ*V~_*a@-e6_?miNybiv(vbZ!+7pKj6u@_yPvs7GKQMa774h-Aq>REAVW!+uF +z4LYL)oKoehD4sExcc^Z`x}5WGjhVMHdayo2Ua@2)KpV}# +z_vhr!T27lT?^(O91cxg*KetYJ)cbtl?9JqA8|~2VVtibu+N#vW&g1kaw`KpZyWK_9 +z)jWJZ_&1vu44LUR44LB9Tgf*i<~GLa;rxOj^IWxkV90G=yD9v)o9VmY(ECNh?!$g! +zp1lh=&LV!W2ArwR5j+#Ti}O4{2K8&*#7Bc`)4#59rS0 +z|GeLMEVQ40hW+G8-kMGI`#Qwbtn|Vp{hw&B@BAYC#+rHAo1vR0%vtvxG{;s>G?(R< +zn4jdU?e+XVwqdP#DBol5z!tX$-Fpvu)$Tm`TsOqICUQ;Tn$FcT%t;;`w%=XFH@mp@ +z4okb#`4n|-q^^zR@Y>MLrStc8ay4`9;L394xR!A}&9#(kBUjuW+dw`W+CR3ToZn?! +zC0vFp&$Gi^JzUUh))K=SwH2;0TRS)(6FFIz6@5p%XQ}K&=DFpWbi(l2c%DUg78&%6 +zy)yC%)@3=nWuV+Rp2?tPH-LUftV(;#yHs`TZt@Z+|3I9 +zFU;1&x`QjofRkYaM4FO4|c7ikH%E|>_c!156k-W;P)qCCJww7|zVT<7xDl47kh9Q2L6~Q}=x8`=ZR@Qhe3EH2FJPq52COjSFJ3$*Ylwq$8 +zz0eH65wu;A8O*=tt~i;0#oPYu +ze7|3+r<3x7`PVA`d;LeIt3T?CbUx)$IB^YlIK3M^NA|Hrd@~Q+Y5!|@&0|@(sFUYlus=sc*vlv@hN6@1v~=zQqr!{~GpJ{WYC*T;KK}yTfN` +z`|IdUTmR#DJE0z|wtiVSu`S_Bm*i=vb4dP6=g@QM8FA=Xa$UbA+s{1dzs?#O{C>#p?hgN>c(vubItb;%O8_`DWorC-C=aLJaX0o +zdkVT-?wAz5GBsL<3}yZgH66LM7o)HIXUntBL6>;^y=l&KB!5NJT{tFQ6DN1C>Q3@~ +zlVjZ(z;zT~gk6tqY0ddu=FS3==xWOrcpHu=@ncIin-{53jGsgda +zg#Y%WGKxoMkL85#-sBm3EGImZ4@1#O&-U`nIq8}9yNgeHCOZJRoq#Lp!Szf2hx2X8 +zhrYbWj=E(qJ^fGWu-@GG&ez+&bAEqu#qf(6FUiWjp^;eGY|%}*El=Cw(}8cwMm?8) +zWY3FdxO@LYdYA5acL1k!NYRe;$m&ViOsEH5J!;m>(RNyDl%0_(C)dR^>|0gnkVnwv +z7R0Va&%4;u1Fxr^26QuQ-dm5?U*Rqqq;F13xOJhs?dZGPlYDp~PUU+kTokKo(LyX>7 +zryiZRCw*;fY%)S#dg-tFM*8cK0sZx2_T57L^;&lVa0s4>^zp0oT{`Twv9G%4qK7sQ +zKay6R8S0aM8^UuceOB!Z)@PYBUcJ&~R}AVuczm{)IzxPnV()YYc`RQ)N#A9>w>1o# +z?k*TM-x~+D{XeDup1j_Wd~5FW=^I@PT*9NF!*|Z>FNS|@8;`zSnJ}}{;H4(E%B@6) +zvcoF}=y0N^kB?1C9~Uk~pIUzmr7rsM8*C*1qUU;6?A6czr0l7O|E0`E>d+In`S_T! +zaw6?yV&zFoT_K&1Bv+eqDro(toTgfzX%1@rcH(-j(px)*>$&Bu(X^gh!5CC9=9R>r +zh5Y#7m~2hS=__i)^Hom#U*(j;u8MW1&M}yf=*Vbn6tkwX`eqpGq-gA{+LF^3)@Usn +zxn~@|Q#Gk;SYOOKy*6=Cd=7ittnK!2MLeE+Dtwps`to1I{WqS(QUeVEDJ3?gu<0^En$7}q$U1x|} +z#`9PJN9Ligw?7fQi}UXN4>tA7j_%RqAiY64$o+xt@SOn8F3Jji?Ky>eNG0ftL;u}x +z>rvjLo8hBikVoeX=qSE^@(}jb*E}0)*q>9inGM?fYS89f>J0tL)UTxh?9;vHm$gkZ +zF8Pmq-$23A^Ry33Iq&6%t~PrLZ?JYczQ!1UC%~)5x95n)|3mg;4zf0xn(bz7DY_EP +z7|uJFUS7^RvLRSU-iXZod-KY-f6ZDF-7}AmZvG5=*~)U(Y2;_l@AB4>d(oly2J6VZ +ztRwwAbW^xb=Q=X%*;LQ4qGU7Q?BLonY`jaIKcLR1sB7a&p6%qya^<*AUNi!tajAdS+{QJv&)THRlqs6Sa*2k +z66hexQ9i|6ONP(n&l%;J){@~f&vt*4VUK5XwwSe&{5n|cP^N*kT3H=9C6Mu>&~J^aRUmZclp#~NxO`kOoO4j-1TIQo(F9MPiuyx+vW7tZ_e?#=)A +zJ$~Z(doTTfycSjU@YfS{dhHKSC(rv8=zv#YHx=zbYwKi-pMuY~Ax^)!{#+g?8PomoQj>8WZj>%-Wq%%cuHiK;j6-) +z{`M&MpCb2X#Ewws+0^+GYuq~rz9()a=ePGT^Hc4e&E0SBQagW8dplCc+nXM=CpqD_ +z_kh>lQ?xh#g!Ufpk68bEwP#H^Z9L1Fl)LbUy0qr`)2G*zL@�KQ#N{o^{P! +z%2m0N`zo%ebA6_R`&zDzTu*c5xOQ;u>mAv3-Xtd7wfsg?!G@awfV$N@l1yN +zs~6j!rexFDR!B8%FEll+EO{tjC@ksQQHW%JTBulltgyE4!$LEBVsEvzTT-%*jC2;b +z-?lZW`|XNU{)18LvbM;5z*b^kE$PjF@VD#pA9Qd%u;F!b2S;rJd6Ukn-ixhetT>y` +zxxf`&HZceCA8c9wLE&tCg}zZ(`t7f`D<*p+X9>z){fTJ6&)?nDe=jx)6S)A`+VbP= +z8_DbF7r9%#y{?F@OfDlfAYspUmjpSL=ktCk?+b-?&J-BI`b7R0ZkO`Csx7U#%j`eH +z2o&FS)&|Z`-|(YAM)Is>2)QkI-oEo4*3IUjc71;>{ExYqTv>8Ga3r#gmiVa;5-pmG +z3-R|^;2cd0F4>po6N`};lV;A+=b(M9%TD#ZVyqgSHf)w}r&H$Any8K7OEkwVf%frd +zOBOK~KFK^$*pHr<)1EOCv#8Ha)|5c|3yGt;*!_Tdh#6@S4CS1QR8BoCmPWI`OwK>% +z6J@Kt|ILg;Nv{jdjC|qpY(ig!S +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 +zf4&oazJlybu*`V<` +z`TK0qJJs3PJLjCLo_7b;BOHt#goDBGtDUe9Ar4B^=Ab_MW&SXp(9zMOr*xc${6AKh +zx}pJl%(23hN41^`|9@DRm({Zm3v)Zh^ZaOGYV*;;l(q5TcR%m-zn}M?44(BB=B-$O +z|AU_Q73Myw^_0E~pZ6AS^S;r$-onz3;k*xVr@Q#YuK(JkSmdLudFsv_a;kh<^Wghe +z_vKkcUcc%b7bFX +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 +z_{Rdw7fX +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 +zcn_s+`Z)-X*YSNm% +zDt<1#SUftUNy@jCQSM6md9KGBCbxv+r!gxfrbPJ(%2=!49E{uV{&`dX)$GCf=j!<9 +zHEX;Z2FCR{==aHWKc?It<6HE(b#6eDg~GJ#bI9{!g-NXICiQ-Zp0O>MN9CT}d@o%S +z#Hq}u?$?5ObTF7lAx(SZ&-)X{|73abZaQY-+dhtljHzEOJovdibiT*y>3F6!>_^3aJq$hqH|1#!W=953CL=PkFQ_Rbdj}GlDqRxabBUOhCOFpUMpPc*JrM1j3Y_Zyl(|9gfd!l~kT?Xqgew=}?pXGz~(@@U9=y}59JCFFf8fQU$gl7%Niq=q{;Vg}h +z@UI8Gdfwci^Ke6YXy(}zkN@k8!-uH*xb0T*z~{$4zfj)>^9=IQtY@ENeLbh +z_UTwZz^kWa;c;F3XHNSztb?cIwa4MseB3!8YdJF>zfaMh^sA6w*ODXeY4b|&M(#^# +zYZ>cq+08eS=TCdqtN6d=H6O=RwzazACR5TCUb?h?Mg +z+|+Mg!t+LaMn(g#_MF8>h}*|+=&UyVX5X;Wt8b88sG**GgxX5YE|1K#zjyY4D}^y_`ALYixwQ@v}PL3(h6a@%tj`l`ldwbvAI;ScdY-*(|&5 +zXM=S}n8&D@b#-NU{>`JzH)O+j{9lm~eETkWFOuHgsdN|V0)h`(AkWlnH_LCW8&iQ? +z5dj)c)k$+B|C`5Nd0>=kRRniTf(XO8RAYpG+`Uwxi0~YG*hPM +z5$!E?duun<-yHNo^}ZC;o1={CdxUzH0*l&R+kPAu7otN5o&^C;R#N^y$hn|zp5hyo +zm!HnJ$;BSZ4C#bb=qk#kP(%B&0V{ralBd5^Wo1{rmc5R2Y=3$dm%qQVBA+B)LU|r< +zWZX-f3fDeXohgp(2y8hM@H4%fSavs4^w=!V?jv5o-Z}fi@342Eydha=+uwImJw@!R +zNVZJH?}9wFUB6{*pt_0_w)7-yz}S?o?G>i=jgn1 +z^iA0JkUuV2v#I|u{Ly%NF>7?@K*-1E@D9XLU)-xNO8X1wb7+H73?VX_{q>5hD|;k1 +zWZ|ZWatkR}W-T>r{9 +zntRwMa=vZQ*Ohj`vnm4qu#z%rt0Y)+e4Kv1gmN7x=#wY5FPY%$m5R^v?Gb}z#L2Lg +z{{h(g1KNDQV^cr-44d_>p9k&D^qhdV?BZR9`Q@Lz=)a#4yffyO7I;S6k0~R*9?Dkf +z8>iWHirh;0#pII6EacQ4@|ww?%jcK8^S;gU?G$fJ{WwBo9KI(}bkR4{qXRv2F7xXe +z%6*2tLTgS#uKQ(u`^p>aL!3{H-W1oEbO&WSok8D8CY;H)qTkajbHlv-2)U9vS)U<$ +zkB^71*PkdK>j&gx$oF*yoNT|Zr5_A(a6SF-rhcsl#VZvnaWXxx;(d@-*4hve_gUcW&(Q=t=2uPHY5+jOqZ1@<-8B(?ZQl79>Poz@4w&T$TY +zz5YJ<;JFf~-Q(l=I=WGJ`qu}2+!ygqa$GQB<3*>;ZN`^mv+`{E{s3=!d{p%N<$y+Z +zKIGRY9_P!HFo)Kg=@7Q+04LTl%(p}7NBJg2yMou3pP}Bm_f&dot8|i3p9=ZGeCm+i +zEWF81CmafIgU@r*{q{T(#g``la@g>^*UE(V-LA%Q|o49Laicv6On0e{cu%^fb1g9(>sj +z;}5tLel!<2{M?x{@lU>^GjH8o#F>yjkNZk|+ZvsF-NRAYrf+6A2Jk5u*BG3QMwGsAeoQm{i@Pt*s+2B+r|1%nA +z4R!;%x>p`J>6_h}JOh}78_wnOa_w2OClvw4Gtj@H&UNe&YzEFmRyjzp#wMP+K<8F$&T}AdK_T_(_bl_WK%~@>I65P?chx~ +z(ir{-*z{XCQk)b1De0Yz$u-FRG%*{qz+(qFc9xM(R(Wx)>FG=2Z-}k1IpNf2egv+n +z>~dgP++1X4WF1qLujF|-x)8b4b2F)<$}Yw)Trz`v)W&R=PaWqzHObB>zmjrik8A8| +z^7?!ao#J71ic~&AtVoq@N;>SbJZ5IqoLqko<6jRw)iCa#r47}uwx-gS+Bp+HSeE!r +z%oQwum`Puvp&sTZ4(EDQE$LtYztUW@V_fYPo +z>>}rG_eF5!n7bI09Zkjf4Mfb2{4!#oV)#t_BGR2Ryc3>d@}Kp5h_>P1@;!_%XM^J> +z@O_C8`?fn@?`%wc$61qF>}&yttXpHFT_@JzCYXbhDL2W)@~7L=vEjst*ZEx2u7cZm +zp6N;zmu}9yT=-%3=>0HF^B39>P=Y#U%{wedJ+=lZZ2c2p@yh=a( +z`7qY8@LJ7>drmPQob+R6{we3fKQP}kA3g`%2WZ5ZMO={9QJN3G0#?n3A2J_&-caQ1bz{6QwruYb2UKjgxWw#G +z_HO3HJ?_pwFeiroUzihF=EL7GFaGp75&s{W6Se=J&xw|gnG>~x=7ji!Y>v9)gw0&6 +z%{HSCWuQN7Ea)j`wRN+m$-^JJpv#oK%C+V-)*O408{L_oF;CE4h|QSA`0Yn_)F3-5 +z^W%9p4qvSc`DO-me2HC@F1G$$ITv1y++nQ6^E6i;BNyIga?1_J0=TbsyP1W(5Ajkb)l)g5CO +zrp9^l&m6+&zA~xwN!rGP4U^6*e|$6_7eA};HBJ|k8l3jTT9_RU#8xubB(*$ +z*5m(m5p}(v^4l2W$%wZ+8L`Hb5stlUKt?Ej4SgJV7Ss3Bfk*zJKkSP-%b2%!;xBrw +zJDm5$_N72Z+(@|}WfwY&nJe`?$DSYcJlj-kowUz09?Os89eK#MTXKwkSg3$EKanv)v4|pO;lm*jxb0a>D +zNo3JtLy0u +zI&{?qluczLv)s(-(3<9m)-#u43u3OcGC$TcSK6f$FF+?g$o>H5krPK!lT5}c+|Su~ +z7xQTS^bZT8YoSf$er4Y<+rd1OZkA)7tzw>Ki6hFRgKuF@NjJ0R4d$8sX2LPGJA!#u +zWi!CyeDk=DW@^X5M>Wr+H(fGFNAu@dW7e3*gL$@%dA7%!XGP9k12Sm_`5TVUvtIWx +zZ=Rjl#zExole7`arBF}1Fpx|BJUdZOGtPeI#-cxIo;fGYv!TH}D`K9tda@^+XKG{c +zJUg{6cKU$q(L4)f&v9LBIPXuTiy@POdG=8~(w}GISwCy?^|YTc&xn;ormZsF(8Wjf +zv~ixErg>J~|6w8J>1kPX^RGD5(#K`e>4WsN81t-}c~(DYo?XH`3-z>)V4iJbo;|@l +z%MF@mKNvL6q^D_~JuqmVebbv~Rc4(x&nB4vVs8BFAU#drpcei+^Y2ERx|4w=Fa+W9W9KW4gJfP +zR=lf-yJVX752Tx*BzyM@xi4UDo)0arWUX2#OeU`N-`(#rXSJ5p9A+)cTJthb25R2! +zVogabS0{lAoR>HyIT09EdEZXzZ{XYIz<}P=qGzlxJGEBTycS$L`HnN7Iv4V-{4>-a +z`HHAden0o5cL1Y&xy4JgS0D0|x$vXc(ZAG>?{Zf^{+hC1plm(7Y$f`zbTq;0!}$tu +zUe22HMDfVM&!8G+o`y3Q!YWDlnol&%gO#Fo}Ft- +zm}?&!OT<~7^w-Y|T=w&F6=ro(I!d@+?f`xq`PmnGg+0GJS_QLmM#z2;+75&d>=&JH +z_xpWN-=Al_toRB)HwZTC$G_el+2h-!%(r~oocyR=a|h=wUxsblFH>gEYRh-~<#^Y= +z>t4U?k6C|d>=rnC(+iz_=?ar}<=Y|}(D*B-wrELs{tmx|j~{anZC)l%%#C>`ZDWa4 +zg7_TdY%bAikz4Uxcj5A*HfCKt*MD>L@}q|T@wY5CoNoN%_mBr&=eH;F3v7~efwdRC +zG+*iM8_n&A;Cviqjg-KCHJ-aYSY0>or|~+)hc+C%AY)BMhjkW62Vl-k$<6}??rZ#g +zi_7!uzaekW&dZ;NGc@wu{MR{N@}-UP|1kfH_%B%&_DA-%r@x7P(zCVw88P*yr3Aa0 +z!S3do>wj$6Gb@8u%RQT=_HrM>ru!3YZ?Ev|LhNew(AEg%%mwRv%vIRolFbwCt(`if +zc!#;FvkzL>X>RrGZ}a($eXZs2Gp}He-`t{o+WDrTy`Ee%b7IHRhY!6%Ojx2N?jGBK +z{jIOaJkuMG>)f>V7S_tWwb;|k%5;wQ3;3EHgDz!{JJh+-ynwxZ1o{5@S-V}(sT?WR +zboKGBElE78bO!0Y|HYV4uD!~}(#9MZu$f5jEk}o|1-_Z+Cll@B)ETzI(*dK-r{T9Y +z>3TX~Lw2xSj-uoF`!E%Gds7_S#cJ71QjeKW*PL9x&UF1D^-Jfyjy6<3=d!2cw57RM +z?CeXG+o(I4d_U-=v{SO&*L_QR(Rpd-^6htX*ZV)TM(hDs<@V5qpAXYI&W{P0XfF`{ +zy||F)hsAT{b_D-lkZrY{vBn;KS?lM)Cu7_iXKpgat&A~q{FPQ{;K3>O*PdYm-?l*h~C6%Nrfef${4t?;poIUuUjDmN)e+bGD#|7SazQ&+DCw(r3o9>GIf_>G1$R +z*;MsUGEVmiko_9w2b;MxYv|&hO*73&n#`6 +zE&EHc{T+MxlIK;(bJiK?S6YkIAbWkAi_>VZSNLlX;_IL_!BuIB$W@Z&`@0oOwri1mkRb%m+VKCaevwzTEEeZ*buRM+=j+_beHX%&(oM>?fXd1ys*B5@2RJ4 +zhiRwEhx04V2+m8p0Q>5vv*mVN`Y_+xsB|1lzY~r2o_K93XaD>Q`U1SACC9gdNBd5+ +zg)H09b{#Z$v@i!7<%kyg+wQRcaSid=8_lh4j5Bg&4`+PDU&bcOIUL&=i-Xk>dt{Y;Wt8kCZ=bQ?ARcE79?>h9O#NG{tLL@&AO?^i&30GP9f=3ce(Osf4{IjKc6#7WG4r1&b%Ox +zqnWVQI>qTO&z5m_b5G&b>Z8QCM_AvN#Is(Xi%ju9mC@(#IaA2*w;R{F3VhOT$Tcli +zY~gF^ap3BFlg`&c`{$b-edEpe)L8q~bi_vBC5zl&6kcL3?1g4idF8y +zc)kUnfV$r23tLvdK)DyV@8rId`-|LPw9GJ_&o%-^8p$3?1fw=~lYk|22m}`N#2AJCCj~WZfwjKPJ6PBxd0t*s5IHl$paVEjkR(3zy<;rnn_}R10{3C&WQ6#7 +zOFX@eUhEb-PSTqrc8@nN?m}jkR>x~!!iOFmXn>Bj=RGnm{pw+FA6dLibgeU2R#9)c +zePP}Eg)4jKuwHC78`fpP$rX(0m8`vI+Gfrsc$L`c?$IgwQ~}@Y0Vcms!+X`A2xXd_ +zEy$wXef7MzrqYetR?kPZ$V_IA+>#tleyw5REoO4_;lk_8lR9FJ8&UD{Kr!GEBbdI{pnj~Ms!|1*3^{Y +z-}~SA8mX>j^qDfPw^Ju=wWwaz^}t=(%!h?Xy?kWE$80~}IQjDpImK*Nc0uMswh4L3 +zT)3p)F-_>Sn~p9Uf{ly`%dmJa(|Kg;ljh)9XrE?7f{!Zr1m9C +z>|IGezmamOl;GpKpkq9?z=f=7*az(D051{X)>zfO~*4mCFbJx|}p+5AnTKBuOWz0_*`_~wIY+(a(VKur#sW*2dlkn4j +zR%0)}Q~5|QHMed!d0Y>FV^e>cu?%6OOnVVLK7pQzO?P$Fepq;moU8@>P~EP><^^>BL!6IN!`N;kW_>R<(66R{ +zQ5d^CQ-l5$*c^cIss=w5UEGS6Oh?;`uxi +zAKX=rJU-u4ARFfA$JwtzvwM+YCdTt@V=r?>XON4tRL#c!4tDsbeR1@YL}l +zcktA47<+ZOWnD!7ExJm%%`+bsKwo>12Tg-;)Ywspj9B5U07nn!{t25z39$Hj!JW{n +zOZmha#TQ%pC|<1poOLvM7c|<4e(>gpnh)pVFR+1pySwu>jEUrZ#AwZOs1v&;yzDM_ +zFXd$C^y%+~ww}TPXj*#glJps#Z$Sh6?7%kr2dL;b` +zPws!vcfP65SD2jp1&^NpPVxsHpMihwOZ@`9+n9auj)j37mCjw>{~&Vo41@h296n!& +zg1d5X7X^3a;4TX8%E4W<<51z@t<1p<8`1qr(ETFz@4Pu9JVtFCI@6jlvRv}i(#9E1 +z1u`}I2nh_fSl865&(>T_J5_55{2tvnBc6HmD18U7)`_^Qk4n$I6(5FrzB767(fJ_n +zOBgR}v(&xkkyY42Lb=?GJ!dDhlLx=jWBUucd)FFImxcDWv_8n<;7ydD3QzDjr``un$v&=J^g$X7Y>+2x!Y +zFwL0F+H)ZnWHM%#c^0diF7vql4^s +zSD2e>POiU)xmZ!E`uAb)kbl4uWQ_KAx|04{_W(R_aq4r?9Q5)m?TiK2&GIKA;LESU3A1u!LJ{KdyZ@x2kSeH;W(;Y$qmG^+JP+;szv9xK-6aHK2l;h%*MdSrnHxbcGy-t+Wg&nDbUjmHb%?sQ=Kf_pz~&2cRAFfg6t*IdlQ&-7|8qV{#b +zw3uh!*$6P?nu{NxF6IU&9k$}&B95)77|Wa`6{hhy)d@vRQ!4D%31!l@J%_y&YM{Bf +zOC*!kb_X;IJX@{sB*`l7#WVMq*vauo=bt9JbugK>n=lXK5jpBmB*}KGmy*$Kwg)dW|S7x_3pD71SZXP1qTxLC;^mt(}a;F8` +zrMTTPkCN|8k%uUDE1tZ{ewcjUzc^n}%qR-IMhnTf8^5@ddXa0phgcU-TW~)4zW2%Z +z{c!Q8Oe7Jl*hRkY31S(8GpAa0Dch7$&-Xs@i*GDBwIV)cp*<*N%=>l5{0UjAeBU>z +z7x@Nxh#}Y^U+NxX{!C1)i+YiE=ah4NP^jYTmF;gY=?+&te-WSg;mN&ewg`hA$V#V}}3wriqgmaB^-ACaH< +zb;bh3l>8div +zjRO)3?W#fMBfsF~N8sgpa^UjC8apb>+TrE5Qgz6zq1c+@u`srLgz*h1YlH@7gWEeZ +zo{rd#-xcJ*Yh7NZU-+OSxs<(Lj_qHuzNj{`nD4txk6W!6W-L-#)l9ufNyWZQ#z +z+9cu!Vw@Q%dDaX)&CZk~%j8>z%}q`y=AB*PhyZT~9c9^vo7*B+@u7$RSQJdGRCnURvS=*tlKu>HT-npej +zPehv~YlZU&a=@$2o8#)Pt0x_{}35tgSXuHhZ(U$s;h@-ES^>eDK% +zN0RKx2+m&5cyZ>Xyhm~70`D15EmFbJeNRt3+fi5ii6P2;aDd^yYRgDf4-dZG=)_g_V~HRj(%-^zz7w*nt(L$;ncK+Iav +zZn5qGcEmPZ<7h9v@=ze>$z7mF!q|=M*MseFbFPS=Jf%2m8}z+G`eVW2JD!#f^7O&Y +zxkYXb)Iw(u@;Ktgrwhnq&9`!i=0^?)8ULCapJv}&m%jyr2=nq}{9UwFe0ndixgQxH +zKYrZ#it^FEup_n=~dSR-J^C06UpFe|kBk-e7vwq@u +zH68aO<4;|znm|v+zl4ncHZ_6YP1t4~x#k{Z{MBwvpjXq;gN&D-!CaY_mur4$v25lG +z%t~_2t;u2LSvS{QXZ{Gjf5V;}ThdW$k6+W#LTq{mc)AF>dfkoft2WS+^^XDz#m^+` +zRTEg2(wJ(^I{c5h$olWPHGu~Ew91w9uO*XiZA7v~bW}=1Hy7`CuAaGDX0{WFWzwNo +zEL~>LO<3@(XsinzeJy%HHtf4x!}gDzvn=Hzu5xsyyC*mQflk+zGFG_$6uF46zz3@Bc@$hXb_|8r$YIdumua`%%|+}!dPj@np&t=Pmqt#Vd}Ef4t7#o|n1tg3E`lCH~Rr3}Y>YVq1EC +z26jn1{WAvEe_obdx~!4fqhhMkwetqBPN16D$FqDE7vc>u&U{zCYgi)D97_}TCC;^d +zaS-!WydL}C#Y4GW$3DUx_}SZuadi;m+D?qCgBaI#Vq6^$aZcNoa*G(Jbr$1KfRh?* +z%B{%REy$dDU@qOTl>Bj`y~?U1ZZ{jcnw9?{aJB97)Kk=)ys3G#B^?-4KT +zC@6=ae38css^zoUvpm0DHOt1BB_0nOepkKrE87)QEyK5vt*0EP>{@)#%shLWb6?Ms +z9r&+pHa3*U3m;@c=7a8q$OX6N+TQI%jridap7~2=sC5c_Eq?e*cbWZN#{EhMz8^Mj +zi{xLo`2K!;yGHvr*tq+W%F&$`?McSj8*UZ+FoL$HSa&l1Yq4?5GCPakT2gCvyEOZ| +z;#Hh!Fl@1E&}?&G;rGQ;7XQ9Dv3W4HW!Kx^bi@Z94yga;{r_Hk6khmCM!a#6;XT$j +z;DzZ)<>X?f5BA>uZoi7*vzB0+#<>bRYN)jbnQ*Po2Olu6N5P5Cxj?R1LphJR**(8y +z39=vpA1N<~+*?r%Z>7MCG1d1>Ck7zi5Y4zY2|N<;$BV=Sq$}}#SjTbm2Gx~_PLGXe +z^<2OC;8dUXMX&OiM5q0Uvj+as6MpRBXu5wjb@|Zjgn?GZx#9I*df!NYijn&+n%8YHOsk +z#GaEPrkh^`{1neryvY)uV>1}j+&&c9u?{#?VkbNulHb3An8^lwhkq}q?&Nthpp9H0 +z>ult^KG+p9v$`V0721(6NBQ}CL!SLM +z1OL$T^WURJu+-15NpTK2_FD%q@AdOfasB+_cKNWn{~z)5PqwO)b-sUZS=Ygrl2N-B +z%O3W8`@Komw0DROH}h;~)!)cBe>4>M=A)4{ny2TRKl2~*&3B^9WrI|n +zz&Ed>&lbVX_04~D#5W(hHnUb<`CM^Y!;BnZXrJ +zlfO#M;fMA2w~pxVi_AZ{GON}+;YeoHnNH;MPfGl9*_Ne#d0Eoa-DS=H5x-ovntXE6 +zNrHI1{P8b=BjIp_HEKeCY%Q(hIAF!LXg|RSycB|`_E_y(l;dEXD*Ri~m9VPZXBDRm +zhZIk{8UC8hZy)BbKjJ4$Bp*`;&6oN|Hu7=5m4WV?Go^Jn5n|7te-y;g67biy808zZj%So*C;x@L#jau<@g!p6UYnb< +zk|oIcgygtnOCVR?I6RA7!c~QP!<}1~%#)wph^_ZaaxQnFx0(uehPoGISgl!uzIuw> +zO9c84atQKUUq@dpWxs3O8rnp#ugD>gi;s|t50i_Jkc$tKi;s|t53kXF*Lgor6-I6< +z7b)9J=PF@7LGy~&aIU)j8aaUG_HJx5jhzjHkZ)gcE`*LFjQQ;OZ?JaUnOFH%cXtYFLQ0uvV>v-o_yQx%C}WV2LcC0|$01>+ +zaYVlDO$M>YN;mfC#qiN~mrs +zhFrr3#V-5yl5+gNoyASqU|ktwl{@lDeplR-336SMZ9$zBz7DzWJBc^Q7W*f~WN6pRrpuF1ZZl3T2mj^m>ppcmhA-u6dp5Dq|&71M`dGQ@%g( +zlB#s7WWrXie?1m1dX&CZ +zEIgn`FBU$Ocy`o^CcHR_r*D67SZgP@!6WJ?R#;(tG;6SB{&CSVZ8;OBKx>U@ +z3)+idn+dPFuUMr=cPluXW+3+Rozx#SB2z=jzd3yRcHJ}7eMok0Lhi~=({GC3@qexv +zJI(%xIx*!R)jp^bJ1yjNtRp`6V!^9-A0?V$P9Hz~WM1=7E?F|K+O_E<^G<;tI)KMt +z7N3PYY(W1~05A+VXOrxa?9lz=kZAGV!RGwBWo3`cO=I_%Si*GRsP=;=X5dJq=8Pm~@a2o`bIXAQir@ +zF+JRRIH{W5?L+3*AN!8IjJejgHA>^s7aSFrUYcA(+!=gA8>)Yn-F0+aTK7F$ORP-Z8^gX#gm|$>Q{`PlU3vBj +z@~i`SW+MYnXDyp@d)tTu=9BY@w@AO1M=KLm2o7{3alj7bTBNJoO5;b}mqMl?*V6bA +zdz^4Z6MFSNVjty829qDK%~Je`|ApS2@A?s6voqlR1LWF1_=9sgh*kW1aR+kkgN$Oq +zpEBnW2RxtsTUI3{%c{-8uwDIIzkWXkQHZvDFxWdgR{IM`=oAQYN+qKaaI$wqEkC!_j9|;}(&*ly$e?;!! +z^WgulthuepKR1D50 +zw&u~_7N^Ory?Y0LxU}}})s$k|GstsaK6I%Yd%o)xFBZpdZVbDIeieIOOzoW)cXrT; +ziaU=)CqBhz!iVC{@JaY3!S=wOHEsPW!Zl>~o2AJ9*A5Ko5Jr>w9nyKM=pf!Oo9$3?L6BTc_OBuT>d+ +zmkp-25&9`WGwf$dOtQOgvH0r4!FOW@wQ0RY3VPF?V8QPi(-7_dc7?b9oAyjP_Izyi +zmqV6#`$lO!bokdEy*yLEqKKj?hePOzU#JXs&iIoib846oK{%{Tg=xlVKEE&od2dzi20 +zr~c{aNdG!V@7VtP`Ta-e-?E#M+DkhXo$I);jaECuc#mqRu@z7Fo&dkXq43d{K7~iY +zTeXk+-BOO*$8ALS!I{?P317W?4SLTH{438_a6e?9=cte2=G{82rL^o=8rO+)DaJ!H +zy?q8_^Wfq2KlrcoFPNzRuzkM!jw=5hVY|_NkIuiaqE(L0DJp%JN5jPXfq}*r_1|;s +z{B@6WCERC^H@=XM?*#KHh2^pR1TauL(SPY!O6RNo!ajbJj6K2FMQb~Y<5`P6tx(He +zdYmbrAtzC1tcN_@GlwuR5N}z)K{Szo9{zls_XKnB=I`-#89eKq6BKiC@17+>pMr__ +z-lFePydAIKWBZc~fal!)hEW4AIEz0*j89_~T-E2Xcw+zN55Y!bcKQD@kN?NAKPhYa +z9vx^FJzj2BKW5BNACI#Zb+H{!4@O2EEPlS{nm))ItI9FhVaR*Djq_T+1f2Cp}h~+5ZAt3!(4;@Skriw23 +z`EA2~+X&Z4$usOJm#H#~GBxZ8ta0*}F=l0ZoZmxcL3<7NY}#A=R?Tk_ehc$Gc<1nv +zIgIey$OHAFZK2dlumJ2!%hE>#@Mfd{R1Bx +z$iB(tE*|4Y;W2X@JdXA8IQBn*NA}fo*Lrg9&cnfXcYcgDm|O6Bj5!FWajwE?6<6Uc +zxDV}de;PRVaP~J`g|m-y70!Zo=qb0|$$q;*e!IbbyCGbKub{n45Bz^3TIlDu@6T0u +z3!a0n-SM95kM}%(yytTjjxOLT99_s&I2z4WI0~K*_^V~Ak01E!__#Tm#~%3~!i{Rl +zMW4ZV-2cH->2JbS&`!8H9?nYde-!R|+x^FISla$SgUizA{wp}`eSTE?e+Rb#e%DRb +z`9|X>8*5PVD&uUm_L{WpwLZw|EBK$>C~>No3+E!|=k6?a)`e+f*;T5a%S&hJY@_Dg +z&Saf!bi8wohS8tSKH9gonOIS0sz5&l;g|E8mhs$@=oW`~vU|=^B3k3f7p_DvpldRE +zPc_e@kKFH7e7F7YalS|V?=ikJZnq6p}n8?O(h6 +z>*eUI*L>S9fdB9YZ$HsZ&9|*M_PhaPAU3UcCI)hQ{VD(E*{_p<;rr>$2Xz*O*2yu~ +zj&gF)Rs2tT*0~>jPD;Q-vW30G%n8o|4R`HrRiM)rqw-@`eu4rh4F +zc3-vR^GD7@E!}JP65dZAE*vgJM_87VAU=0@9=}9&OZz5yXBJnxb~5J&FW31dZ>C=2 +zd?9!JANRGc(q>&#gFnCWby^?ziNinn@xboooPVx%?X=ULEtCA?RA +zPtR;MCi6XT!+s(A@n^=hf*bY`aL>YNo#yKl&M9`+dk5#E=p7fSA8-(i@rQo@HTSGzn_=fdo$avV9gxw@7BA@Id@8Z-9|sZ +z%zAURu;rhiZ3vjXTO8S{JwiBtd4uB8!c*{(er}ntRQ5`DD=ryoxNjxM%+4cwr^`f5^WPAC|*w%l&~qPBfoQe)|}-7wlU;vZVd}CGE9$?Q8vRabE8?-I;^k-PG?~XBBHT +zlE|oXf}*ko2U^zTVEmlPu<~RpK6w>;vKQEktI<$yNO) +zIWwZHeds@yHNI6&@AK0(QYUr<9?j8{fzjcjwKtZocV*Y~mB{DGdIz?D9-X)Hg%X^V +zn_JxX&+aqb+1=+B#yg7sCpfQS$Lc+kqLUc^UgTM^5M%t;^?MK7_BD4-l_m3O;@O}t +z%~#{=$Ng9NUGJXDRr6M#?D4#^P@J|gLCvDte!#qg`KZ0x2p*A={%7;Me)Hf{aE^t~ +zjOYiBVD#7EBY4}uqik=C^>jsY=hXR8yDzwCj@R{j_Xun?rgN>@i>FbBjeU{!I;#iaHX+~uGpTe?!VBH-#CY{3%+rDDR2J0I6EG_v;dO?^b#}9 +z)&UeJ2C&hU_qp_QUfgkMh&mG&e=Yb$Luk)BrY)uIM_bfzM29AN;Wf>rr!=$_??2oL +z^-sILVepLlFQun+wA|fGF}SbsE{4WLQ~IrXL}NO%*GXSKC^b?453&+TjV-*_nQT$J +zd*1cVGS>6WyFe`=H-l{I5287W&+#e$`g(^c?3SZWP>)*ZzHAtM+RVRoy&AuK$`*Jb +zLEJ|8*;4|;wnO8u^}E*XTQob7IV=TM<<>+Ox5J~6#J7L}bB5;k +zrC#kf!5JFe=ZNOntH-JCKOY`UyL2u%9ZO3ZzvStB$CJMX{h)K5B!AI~oQtC~y~aJh +z*k6b5(2oDxrg3hSt4~(lw<#J@lw#wRC9>?E+tucecncj1YHH%pnBLDee;3Vem@} +zI)wb*K>B2@Jb;nxo}nhT6+g^9i_pt0jaaUA +zU)n1Jn{KOMwW-asX{K>L;s53w7}*l^>OJl +z#`!|ws0Zt%+;?q5_sq37fyM1b(E)o3egAS`@NKJ?9s+y_7uWEd?8LwZZl32%9*!Qb +zX+VxLcVa8h?hjf*_B_Y3k-fye#A~Oz_WXjDa_$Kp16|rax(zW_e5wU4J;e_{Pkgn5 +z{Uh^+{yC$L$u4Kyx_!2#}@Vod|ys9%M#J`en8k=MszUX%Civqtc7thXc&k!x;+c#3raR!lV +z|I-&|h{ChI@=os#_(QOw?&pXNuK%$yTf+8q#|&9eFW4XSXg+C^xv@X>sNXI|n?bHD +z>HI#nB7SV2+_7--@Ds%B&THi?ux+cBT%45;X>bgOvhN@M{W|R%;ywGu2H{t7T5v9X +zUiFDO^HcZLR`=Dev<NiG!jpqN4Q(mD!Jbn3 +zt%;g~@$@U4#lUHXy$?NIxQqFgn|Ai2-kW;aZKE~5+vsnt`~EU}3ui;Wl7EqVTAz!l +z)1u$rXD!NJ`gp~sImsvGP6oO3JgPxoFWRu__x!yxeXED#K +z-MhR;azCJ@ld-|n#{G@^{dv}^btV)0XMSFPib7>$mHDoPk|9nYQ5b(x4w* +z;Q=@HqWk*4pMMR04|K1tnvZf(r~2~|Zo+nzb29k!-r@bvp4NHIs~`6Rd8>9&e(&Sv +zD@Osd>Fykt(x>jd3C|?Bmf9Gi0dfuQT-9Ffv=&Bl)toigU<}#^MDqoH{(Pq+r%x}W +zct$ZV$zwC5*LDfyXJNE2Khd}HUk9N}#D`D3=*bw-^G@0XK5r>JT>bAquXAropP%vD +z-se}H;CbO!I85;Q40!J;e!bAVdr3OU-1J-0wG-lxp}QY@sW_WGIVE@EkM-lTWcQr( +zK(0ghRPs5EPmE6upW%GY;xmfR1$@TxxrmR$r=Cxm&s09s_*}_n2A^yAH1e6tXFi{s +z_{74yzEi_zIG?llWUwLLEyf>vpHG1gb)%2H2;2>AHO3ys$CwIB<~ix$eu4Y(hD=&| +zP;p4>?pWGFwqT2Z*Z5;0a2aOqdVUb_z%JY_IxOdZT?07Cju*Vs7kc=Ty>+ZTG8|h| +z_K57xO`JO>9Z^Ype#aK!T$~b{Q*o&~d|4@3D#wb9T9IlEj;hZ^tY(*_u_-HeH1JFJAXWiLC#e> +z&SDC5vh#K6}F8u7`_vC-yF0 +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 +z2>2ISoi7)*FG!Zu4 +z8_RUW%(dwno;Rj5wY0W5{WtuE{g;i9TLre+2(kUQ(KUk0Sm5Gdmro-$F8HLe{l1m+ +zV8icO{?Fd}an)d(yxPA@KFvK}g7%-_geLh&YB!ZOvCgt|wOzqlu*Uox#{L{RreLh{ +zb&faQ->`>3*nTr{p$pqZ#622$&ui2RImEM8XAcv5R^40`&&Nl^($W2U)3V?9n&x`Z +zhjLcLYS#TDdaOEH)o>BdhbP1v?!z~#b7Bpm$@{oRe6K~gZ{>T?ullpBW~a#>seJ&! +z_agSR)EO)XQhSFq)yp@M-yb~7{oL*RR&K5&w!9czo|TEm=wt8rbo1JCfO9P0h#xo& +zcxEkU>Ll7i>seyI`31lzZp}_4mc`P_q4X5{x^yXcqPq_dyz1QUpZPSY^;|ut;-A=O +zrf1QXxD-C@YGhnZPP{Oley2g3n%miYkC>zT5jz{4%SNS;+&i}Q{>0c9xIdix{~dX`=071Xy?wNL<)vaP#+RA@Re5>odJm3`ryMOW{{@^#Ufv3> +z19|yHzDr)t<9cn0y!`%uQC@xldiplu3ti3PM|v_Hx>5^~S7`ZU#sRAMK}j`V6G6(9U5 +zbqFuJG4o5K@3V)^;q}Nc>e&9YVgA}(=-wMz;@CNX-U%TiBK)Q^0voImi8Eu34f-Bp +zucZq9f1Y!=Dy-{eM?J?eHEGT%!p@l5R_4YWN3K`?O=I!)CO9jn{FU@do*IKIup7Mi +z`hnEW&wDUcj>(vtvNHy;#{#({{$Jm0kHGd(9ofi&x1T^FOT7&BTS;o;5}c`|c*dN< +z0&7e~urocz-i{;TmJ*^j+~ut~oEidv+H6_v~QwShbl={b{x1>DP;U +zHa@ESdIz5k^C?5kLYg>{k_e3o9b_BTeDT|EVfXqZXR@Y +zTSYidtYX&I06qb1?mY%J7oFS-o4bLH;L^{;ws6Kk-kV>d;LUd`^R;rnbzy!q%-(n7 +zAVdY=Nellewem4@xTI;-!^S+(*x~hN)zvJ +z{hJfvYMSrcJa=$>Ax__O>07znLFWC`8P;^is>?SFsTksf*G_Dpt~Pr?^w#99_WR^G +zo=83--OL_ibGZtC`yRe+MH+u=uu&b>tZrmwZaQ|9ay{=|?aPmz(+jl8axZ(+fX$pK +zP~m(NKjn;yTa#9uGkFN_O=A1>t#cYqGws_n7Q_2vBpmFKh<;$_iu!24V4Tiv*QZ~fP?G@mNIvgKdgcf7md0?su%qvA>@3=K`e +zx9mflxuJd!|4OyZ)gG`KmesCFKV!A$``F2bO1rUP5;UuQ +zqK0#?rPgZLY?*D}wH#t3TN*6hZ?X4HB5IKb9GCmC70Z(+&Ca*Ko8ZhV_QX3S@l7`J +z>u=}T7qKHb5?l5r_LdYZHP*Cw8K3TL^zeRaX%6QuWskaF`D0Y9g!|-&4rib3BRlUT +z)e0uYhUG8b)e=9@oG!;l`E=N9vxw)+3bQuF+==bbO#Mtey)qQ*m_jV6$^Hd8Dn<=_ +zo$K@ci7|4vE@`4)boCVXQnxh>SdQJ7p0^d4o3Zf~z=ld)|uS1CgV3V;76E +z#>`p&rBHs$U}(7o7#ed9{nj{9!x<|^_R5OFWz@fWd+Y07ox5(qYG`k$Z*Ffmo3l;h +z=8_5Tk^>)Ly`C6ptx52G{l5WIy|adQ9t1{p?6+8B?{X9qi6fBvSbNxu_(9Is8JDZE +zmOJ&l^UroB|C7TH7Harz$}%1Q7)Gv=>wA}6$3F8@YN$lRi>Sd`oh!G-b!nfp4Ed0r +z;sZSwM2f6Y+Lc|oEyMcK~KO!VO{2RP+sfXhp$!P;wT>J>Xv-&1(+%J0Ps?75uS +zf&KG2`{~5qA-|Y7XGs3iv)Ol$K5}Q6?Fp?ba*AuRV~cTWh&`V3&bA$w6HP<68;Zqw +zU5d-y%Ua&TV`~e8u5WBO+4_M~{j8@y6ju>#f3tk^LE5ii4@Bx0IOB#|hGFcf6^brr +z&BLtxa;~oz@7SVuImJZV!Qv-+u0$q_Hq)%Hrbef(@R%t~<4k1wbl-mkW6~J(ZtW*= +zvURev-hfK#M^fd$6XiUZ8ja|XGeoxHf6#ILLe57+b +zdD=Gc)wafJYEX^v$wvC|9q=|Tr?D+4(XH#E#2@zJE%!L>jlR +zBaUv>Ha0+8xj_-^s0ob?*KplOY(?@dA6Zm*+?w4$?h6_w)^hi4oWb%%_D$HIiXDEa +z^<3-k6WZ6}Ue+DQ4)1FH`4t{~+kT)Jo1hJ-yk +zak?GrVDI>Z^|SW$ukFlp>*U*7O-^F%u=MZjSl(FFOK`8B;p`OfLwxwzYHa(+^|5rp +zyv#YZYaGePLb0YWlrw7(secRZ6i2BH@SNu2p=xq!OwY(9uCqy +zXJj|pl8G@#wWaW#8!y|@BERNMSDxxQ$+-2?y=T5gd+3T9x}Rp#J#+cokV79oyMt#p +z@vgl2q}zwqR!}>T3;Xcmd$yiu%fZ!I;f!Qd+hyVWmYTkA<2;NnoNLu2&q5yX`{NUV +z>v!yYN2LAE^mxvnjr02jro)jx7q8foFxI%-PUr=ByyI?b1T~GFgX4;|vhRDC*o86I +zgU=CN!r>}ttevqnVK-?{h!)1Deu~9&yW{(-)1Qqdut#n$&M)DIRgujHFQrfY9_Sb8 +z7U>x27wJOjLGkdI?|E>kiS;|8XXf&J4f-R{hfCLH(vl(dhabcS(^-p8ql5Pr9J9Ah +zdRF@%4&!<0%DMwv(mHdu(smlIwV!6q@=oWR!>{C}_x_eW)$p-#_?M!tGwF?@#$ajUGfnx +z52yLK=fN?bcIaI;!dCWUWN(?}uC7HFRIq>U^ToY&OTXz{5;J9!HO5BUB=+GGbmAu% +zcyn^O2XMH6&F~-XeEo@a@ +zV?TEG%ef`%JbWjRrLrq-4Q)OsdrIq&ks~d#sme@yKE-|D(V~5wsTbf}9M9IOHg^)M +zP7p_aJ>}UMO|G4hhF_)UZfVY^FW_7ojdw?%ID54}a~j(sVT;-9|wi$g=4Q;)1hkE1_+(e;Ut({ZtxQaCe%OsY^Wt=bVE^~DBZ +zo#ArPKrqkA{v0`ro;^zNi!7^N=hZ7_Qf-E%2cqxeTmzcgO}rwYA;IbI{paJIebUo- +zUi|hF_IAWXq5JE)v=689HXkqHF?4NC@D+c-E9;wrKHv-Pk!yN6+t2Sywj6C*o7cwD +z1{;gGU_->*h%Mds?hrPkY_YNC%{tkXRFr@aq7zTTJm +z1G+PqgEx*v>z!Z>B{pP>fe+T6m0oaYe8)dRlZvfcCIjvxIcPOIp8b^M{|#T8__o3S +zyU3mQbzRRxmlv|8W(ISQTf>})$#+=9JbneY*C1mg)0H#*dC!AK=v}m` +zIRrZ4hyM7b4@9HV0ar2>JuBZxy5L`V9{p*j3;mN$NlZ3xdr8DGe5 +zPoVc(1>>IL&4u+JOHD9CE`cX4Xl`cqA>@|oGwZB9se0_^y+fMoBig?f9butInO(bL@1A~*ULkRrdV3B_)@+N_<05~xM}_vlsAz45Do3_netV~p(#XcjvxJAn5G&-62w;A48U +zuDpQu$#Nb(w|lJroOD*qTvFI~P_jA%U8JDr)!DuHe;UsypWaV}u4}L<<3l2or2i(n +z@O~rpF6(OcQRi8XZzmsNI_EQ7iGOhgx=X%;Xk0K-?We|6>O0)TJEea_>z5I?z+cQx +z!T#29`~)Ajc5H(l*b6U-4#NdrhKWP5e0XdC)U-f=tf0oh!**xcA% +zWu~xC{P~X7DaK3ej|$dIC7|gLdQEnU&Hu7@SX<0~9TU^u{@D+9^}hG5)Og~7$9rdI +z0sQh#$rZ&4KFNOGUfgx|1E+zbAg(%@d8lUCp;pAQLc|PbL2rq5(g9xurXCL`9tdLY +zQ|OaDy@;o062riOv0h%^&$Ki=0<2c@jOO0%?&t6t^!QGyU_RNM?n$&w^L^dwaC@Ra +zyENmw6dsB2zkHT!?N(wUtxmOdt#c>!H)STDFXMV|&nx*1xJvhI&0cGFIIa9|S?A!_ +z{i5qmdspH;_AFo_{@^@5jC@~U^LR7=Uq}r1d~;J0A85PaB{=ub(ZET}E_m(2%*dzY(9Blg(#8G&U5_Ki~@pMlJY+!rKMr?qso8)&1G%h1f$!)AP~~HXr;Mu!vK?C7A&I +zf5wi{ +zz9Wj~-f7PzcH3(|pJZ)G6xf?&BEGk9aSh`i2!G7A_j3;5e&or_F6mEfz+A}wW#S}k +zgOK&}M6t$%e3gx?azSR<&nTz+<9!Z_bJf +zzLBc+@lYL(A**I)@Bh>0gO@Nzi~lWTmG(AVYR|^c$PkN|?aX7%c_g}wb4N4z8e%XZ +z>oVli`mQFshV!jnO;lS=&L7DqR1r^XvR_Y~X}z908y?+Rd=S1}l$}H_Fi*bQ7{^8jkFDa<0KydV2#QC9U}Ro5qo3n7PS^8xqk(VxHMs`YEY{8_3bmMpqHwxxyZG8e7{Ax3CK0}xIwNdF2;EI +zeT1oDEleU^<;^j-L-PXX|G-r~o@`R-xl%tbuu((!7J+^YY}J+U#ffwy>!)4aD4$Td +zO68-M(!PfAg!kT+uK!sEAE&WHc8ug|v$fc%iDlBVXYA`U`0C@7KOi>BzB$+{hBbcu +zVj1QXFZ5tf=Og2^=R(_s_R_>+>>Jyvb$(RkOg)!4Dl!(GI?t6grLnrV-ram~4r7pC +zUBQ_+pER#@UkLobVc|^PjqK}cL53vvU)M0wnvke&n8ev?a}uGwldzLkXGNdZvWe-H +z)+34Q7*`;hE^zb3yIpy8zL}le;>SNFpT5RB&tP4cWt`_kzZ$dTWvNZ1ysY{v9jn80 +zV;QUDf&5tE;Vj=aKabzlK2PoT2y`@hkv-4)cV9Ln(0$bA@;r8mXB*W{NRMDo;!ByU +zaHzgAL~z=PA9sOS?ku4X!N-&5vZ?o{ +zHf{4@v+wQA2Ui!LbaA0MS>QcSJiX4^%iLjB=51Bf9f^6(bYbtoOgZ^w*mtt&G=IHA +zYXGkPgSQ4i^-C@EueIxLEj;(NUgDNQZ~f+c?*D(Geres69z28krBw%dYjm3be_p@T +zbPR01_Es-!{!g!8+VLiS5%qPd!--M95bU*4ex%Osy(9bCjiRnjYt&U&XQ+7??yt{i +zH>+Dz%drYMaa3JX{*LZy`wF+N$)c|53#KuD?~~M_*{S5eqYJdZ&^gxMCkL57r$}L^ +zKUVP%PPq2%h6|(rl>7(#&#C(8KRE|!m)gCzVHeMaYdaf^d5`>FqbrM5UowMt4mR)L +zBhKnhBPV39N!DCST&oee^NVQ#-R{TNz|X>dvGPxLcfLU#B{H5i*hOcr{ngS%I(dLt-X_c +z%;1OW*;UxgL4NrsJe%QJ^7&a~rsT@ajf@}Pd;A^jyOv6R3LF6c){zzeloYK~w)@i!E7_CTMCJq>-LXE-<5=$QQEE{exo`RvuDk?TZ9izYPJ0koArF~z3^ +zz01nqKyBL0>~HoF^CNem+M{x_fBnDEcM$(J#Fa{GkJ69C3!gR)v}b|;IQB+@Yg3!( +zLa-E#1UM$&@Hq9ck1wGARnQ&vkZ!JP7xtXv>i?N5;IY<$Cs>En?$_!Ghtl8be>TQH>Z41r`R^zU-n+M< +zj5&lWZg8rjPbGqT*J7&!?^gDRUC(ucXy|kohwqWA{1s<97E_n;f!;Q-PvnMC*cjK@ +zd+GNs{EXLALulK-u9LdAuO|oBWzwQO@q}0RrhRif9u)tnw#wtd!?|PmWyc;*4g~z@ +z@!;WXm_CV}=1zC%^J!@DXRVjWHUbZU+zDt*IMI7VYofE@T^la*WY1veH|T#Z?+ZtN +zod{$P>xi?bx^UayDw(A^C@Vj!OYk^^&GVmm-#7gC1@C%)cdv}odlU->-bdauIhso7 +zJ=+e?+9rES@7?{Och2gDUrJ=aynA?qdH(Q*&K=sHdffWq*qaULzA5NR_;y2#dfrj!%(3V} +z2i=&a=FhM%#X9Q#HW7CtZu0m>H;-{awsOqO+$?HlW>EXL3B6N^Z?F;??J3qHd){#U +z0dK9LYX2q^?^;gn-&?6g?H&!q7?c5P3 +z2Z<$?*_#q&(LL1vz2f;l=!-G*+ejWqI9o_;9sh=y`dg`k{#f~~jr(o4zUI~baeu|I +z1G^^QS-T}YAe7IygU>R1cKTFm|I)-7+%;p|Uq)S^6>9I;Z{^)NTD)6%+C(&-(wGkt +zH`$0RU1+DN{o9o~C0a;MFYDYMvO8JF_#Cx=ucrQ$=S64AIT3&H>FO=FHe)_9@X7Gl +zul#Xx-(4@M*v+%AD))1eo0qeqTb#$jv3$hrTOMazL)X@(bK(4U)c`(Eo^XuWGg-eY +zPyAX)HGuo50el1fp&G#9)Z-0He=4LJz~PYpWb!lR|&IhvIG2m}qTx%J|IK|8#m-c!yKYzW&3k9nLUor&H$q +zB0b!G!P#zxP8ez?I{4s;VdkpD@Y7bixuPUvUBx?;^Pmo->xIxnY5+gqqjiWYzn7$j +z>&uSlYX@s5CfT1$yfE~Q`qAda?SYc +zY_X${CAy1GQvdgu_9>zMuZsG=q+kE%?Lq0)|Gnzh|8)^lRSs?32Gv%T*8aWW%fR4$ +zG2Z7CA0igEwxGQqCeZ$4VFL{+54D^8-+K0V%u@H~jprq57b@-R6CbzD(;MBozj4dg +zSj}$TAGo3h@|~3Akmf$4#E#tfidV}O8?%V>o##5`yJx#~f4@P7JdK@S%Xh!t3huJ!T3=6amMncf)Os(q +zUC%XmFs&k&e-ZEPLtg`})!En>)%?{LmRcFktAKW&d3{4YvCG@+3^jj?6A|)aSC{3V +zdmg@tST#<4ZCm>5Wtom!kaK64vz_|glN!ENmSOK=XAAU+z2?Q1l|PVe*y6_}reET{ +zpLbyU{xtiOm#N#KZ!fmj=6nvjc^ommdOMju58HffESVl-lIf+yRzuc9&e*-yl%0o` +z7F0Vp#uSockPWd=&5F)LuYM;(+<&y$I+=4!>oV*!KlZ?u$wSQtsY<($%$TYTt7x~7 +z>q@Q*xVCVe&o#rfk?TUPGq^6`I*sdmu4%4~Tpg}6xQ^vIjq50`X|BV$I$UF1$8xRY +zI*RK+uEV*Ob7k+fryjAkOb%K9%K>%?jh!*JjgI9x7ewohmSXd~`gnKomFAtDs%F&F~sVv`<%*WnzL2J@+@;xA?{=vc0lXT +z!-FC7mb=#_G38v0es(}JHno>OwwltSpOBSuM1LE(U**?3_OWgx?msRUL)L`h^>_K+ +zY)zov@hXRBau)Gn)jW3c`%a#->_^~-JGw?ASE1WBWGuM`Z*O(YYXP+RXFoS3Is22B +zh)F$Dg{|(@JtB);y7B5BwNBWx@l;!T^CS-jOL=A^O^{0_JQmI +z$+SPO_Qp_4-HUXt^zAi_qxQfWSKrE3ShiNV=})ep{R(rK_fZ2GF)i35<>deN)yd}g +zfLI){hHM@E3_q}oTF4?k!9J(VUW_e~Pfv<=Id2@|Ja%k>f3&b8&~>W)v#E7?{m_#g +zE8Kd><#!9u<>oTi&I#(dw(#m9*;~x7hx~~@ +zN4;<1@3AGQha7}XS3TrsEOSJ+Z-P#I{Z1bKli;lr|E6;T{d)TXju9@sy2#~rEUz{L +zsg10}SH#|I#RhG~=4{30Y<2wo?P6ns+Q{X1YdxaomWTdj$Egkt`-5^8Y!KqL6{gtz +zd~sjh3-{%x_SRl?CJiJ;gid;d*K#siz3>4;fFJuJXRBjZ7fVnp(~U9&uAm +zuAwn~j(N?^^$xP?lc5UPL*ufe&?`E}2_AcVnU&e1oIu#zL48N(;ET;=g>y2UeobVJ +zQ~pdfWS{N&D(#G4+Z5DAM*R6j$k{C1x%uFFw=Qxd@%Z)RVtVT$m5*6mn_z9JCm)j& +zIvbW)^@(z12Ky)EtIW-bi_MB|wHs1#f#cOfc<=sw*x54NTK)Kd%-#l_UGow=7%@AR +zN6dWY{h+({qO@)jUdsvg^W7SlmmeSOk1<}thrfBztHGpAtN5^aZ7f}5scv%1WUrp@ +z=gVz7cTC-6Ep?N_>n(UQZnjVEW9@TmPKA%&y2%fyo9y)&ddIS8{d*61@<6p$fjpSX +zI8-~Sal{Xe?>G}WS_Q9I(1bDJTpqsvkx@+U;+{=jtOFiylCK57IJt7unDh3unBVob +z$#+Z`{NTZ>fzd_QUC>cyhjM8zLMsynx4OTppZf=AE?cnHS}``fDmC_cGbLeFLgR7g +zBC9zi+E6{^Pz&m +z`o}%oPvhDD?bcwPK@H{^ZVl$6_#=YHx)S_KzF6pPW8&*Y151cAYF}}S`s^jqYUd7k +zz_u?-XpP#9Jx?OT2Q06p9#gtS{^YeiPacuk!MvoKG@lmq)205L0^KAY$p6OEO_~pF +zRxCp|T}eOac-Iyvt;8&SaZaXIf2OOCUL{|s +zag~ng9LA(^4q`mt33cYpz+T?HrYSQ;vAzHf0S>1{Kk(^u(fU95<0zFUJ^vdkywlxwR;}6J8LGwePvs2%Ss~bg%sKc)cHUqhD7JD8797uxdw-j=LWG +z2%b`n=;pui-re)7%?EcMIvt(7h#JvGm!HLl{mcy|HKK1GsS(}aKPPz+Gm{G)Jb$BG +zBRUse8<*XT{i5-%D&fb68Ovz5PIUAn*#cXD(<$VU`Cb@EUVZG5I?=!QISb_+ly6v+ +z6VL6yF7a@1w7==_ZhXGhO6z6(>P6Yhh;@noh`By1-(NmHHOF1o(3kvw`TAbH=`wa#fyW&p%SG_2GmDG#A(0!+6O_^aoOTB2Bv)-7eL{sv^HMT3Er`~!| +z#kP7F_gfkRa$>bxGaB`6X^l@Z@0-t)JA>{uPTH&>{()btwFq01%w>HDdrJ0#z7I9! +z#0YNeD#!Put}*{P`o9J{{Sw}*@js8gC~fl$bRk)CY~85Fs#t{TMm0A1)rU6ww8uC! +zww_N7z$2 +zF(@QG8y5V`^ +zqwrF;In@4~VnKh8T)32Xk2X`ByPzM|1gE2t;r8S1eqj$4-^8h-TuChy(jqpYsQ@4aU-WCDn>pvFpNCKm{JA+%cYl*=u#ab6HTA(v1B%^7-ZH|AaU8M8X@Qi=Z{ +zf$SKsUTg!8<{7gq*mIP#pd&bErm)q>TVN>34}r{)bDu{U8~Be6Q2R>6_A6qpO|sVm +zhi9)hdGxO#c(Fm`@eS~+#9IoTglDIfS$rY9DYSX-b&FpqUnBIAIH}Rhxx&FSYOoEl +zvzFjXbnM8Fdc;|74qI*cD8G(&WPbMLERjJx27I2#C(iORH9H`5E<#=+GaGVsvFUUC +zBmD%y;RVV7hZ2YSt>9V2Aqp-`xlX*F_+w<>_G7!Bv(>f9BKpbCIut0RO^MIqSu)8yl%n>|2zI8?Dy09jRekS8%}8}`dU-F^e6jO;{UjSHpEV?!oMyw7g!xQ +zh3*1tAag179#_8%*w&@t;cPQbQgAP4KK>MX+QB=0Fa|RgRdh24Z!-Tk+GRTa8Q%qQ +zk}_8D#c8#axgWrHwjSS^tNtA3NjlCQKbZ8h)^0;^cQ*SqJ83H~YZm8F6ZigjNN;Xw@Is^RnLUqE&^-QR~DX*bm{-sn|rH&42g_+$c~{D86tY_+E*=q +zlF(n)!t*^U@K|e#JsBhLHRe?{ajqWh$x5CO5er566k$skLP5g-Bqpa4;0^Y+18^tI2@9?15h3~>^D%-LP +zMc-Ti|E5y)oFlDE1mHRA{J|D-Gt~ii@AC&U;Xm;a&S;Ri4sOl)E^~Z=*syjk(p=U& +z$M#FGE`768bU`c5O!nBV^~u_MzZuzox;RUz_bt{T$7XcavocvLeA`QkUsWaE4>C)F +z_)hNR{GZ4GfoUncDY2G0zupt`;oAfc;X-sHSyRy0%$Q4qwVtuX2KW*sR?Ov0*6?xA +zClnC*^;P05UHa>W-_wjdwsc>=uVqrsua`3RarI*vtJvFawW0l(9@0J%9A50JW9=Hp +z`Y^LqVl3h5`jL8)8E3gxAH+{<#agn*V~C$;my%eY38vru0dpO-{PjgOntuyzF+~~bGu*$}{`1J33+1eW*-q)OWZN!i6$8X67gQ?$Iw!Ov{X78na +zX7d>EBz%+!AKlhxNc$7uzCZf}q5~$`Yu^a2q)&;#_!@pd(a~jXxuKgU@E43v%6v~Y +zVO#O>o(Ud7- +ztP6o#e4MpyGn;>a+z^^b4yklGJ&<@9IZq+`O5m;S`H2>9NE@;y%ihv#V8UBx>L^y* +zGwM&+V@h8uz0ccqDL*BZdR@w%UC>f;EeFB`Zt)d3Fkc3&f)j~N{n`KN8P9O!B`f~a +z$+3qo8Pn%h^DaM$@#~R4yI0=q=RdJv*i0Kf^qE57AB_z9B6+i8X>du5pp#!IY{MsW +z?*GgA{aWljOea2e!Jh6I(Eq>3$3EH%H`8}_a>EO}7Pc}Kp- +z9(mEq=~s)sd~sS%zfv=&Uq$bneu2-*=@(9mKPaN@FRPw8{ru?1BIk05vvhL$UF5`| +zQT|zEqV#d5oPO!;@88v()2|=)tK>f5{CJ0%(=T&lU_AI+qJ}5mVV$`2=#wRqcd(i> +zm9pm|vMRZ``cZifhCY4CB{G{>2lG=M&3%an=n1*RTq55gfAf_uXp7T@MDAq6a^yN-LFi8KOh8*Ao}G=K^C| +z{=R^b=`!>8$+tOtbJmw5FNogv74!ZnxqIsG$=?^pm+<}<$lq7pQ +zkoz +z;P2G@eXr^>=kI%g{C!)`kiYL)Y{9kYTj}}xPI!9e@4M3#G3Ai#HH6Lmm7e+g4%+yX +zy>`Bv@dW*W)5+g=g&eeHbsu0?~ps^zdL{5zog~wOM;`**`TOvvqqBPP0b2R{X4FgmzBA?SySh7fAF(5nyKkkD>01`g +zKm6zL2Q3dx%2dOQ?%aL5V&&uu40t4W-(ov=-@BhHci)z-+{mk5b|CG_PH-as`mbkr5x_9or#r1*MoAA7_FlDltxeg6!fnY-^Mp6~>F2;@E27umV{grC8&9m8kk>~rD&8bIE@ +zykI&$j}%F5k$fu}on-yTm|?mkam +z_;n9H8SI?@t=xUT|D^@Lz#8x@E7|#MckaG;>QLh=z*C<3+j95qU_VUo=;ZF(q5uBe +zeb*z~*gs>>N#fY#e0F#4zL32?Rh}9V`^zsy9)5Q2zFlLjaVIDbUlC8id`->f@6&Vl +z4YKhyA9)w0t`}MjwR88CxD%((-3MNOcYK=Y7>_(+(c8)0xASM|@o8T?cVCeC>g4V_-_G3^HsjN(vB?6_ +z95X)c^XKl%?v=ameAnr7_j%Aidgtz&W{**F_r3kozdd)~GP}Oy?t6s#UnFuatzP5vTK>XRai9K5gPc8s9 +zts?Mt@7#TQ-B|1k$yN9UJUI;d_0HS(&(M4r`wH^@Z_V4c4!`~9$=lbddgkqWP1T(? +zZ{KUgImlk5W2=%2rrEJMKP!%mH74e=^Y$sm?99{NdHXK-jJ$nK4_kA~q4)GgYzp)Q +zhu&GVEwbv=m@zAFpXWd!6L(TaRwPfVE4Tdo%?Nb-?}> +zdn^V)rT@a5&#-g$z14AQ&b~Lux#!4A_^(IKzP&c=={fuAwp;6fvj*&}KdkbUFK8Wsfbe@&6E$ +zFr-#GF@>5qL;Y*u40dkvMZu5a-_laMBGBIuCoV%NC!yqwUj?I??3=-qD +zocOLa^mnFweIH_%iOuQ6ckzGy0Ls^itwz4SvG_@3eiUxe>m&xQ4qC}?@x2{Vb&aRxx%$RXKRs99A#6Q? +zrwI5if|v8n_$w<<-((Zde|w(3bUUH>nbYU#D@Pap@6OZrdsC)%=M4L-Jbh0GEu1>C +z!UwD}@35z8k3gpr%yZBGa-P18zp!AEwQ4>v#GaOTD=Sam4s?FW(^sCd^7Q%DLGtJq +z5t~UaAjV#dZIkPYp!fYcFv0e7i2cgGA-4E9GbfPS-4T0HoA7A5uDoMg +zQ~NSx!vA!RzVtrF(C2ORxz>*PDq!zV_Dsc3Iu+REe;@x}$UHpV{m_y&16hdcK{b?-x&5d?s@*ADoLma5XvlI2df^=quM&j=q2Uj2wOE+OSHF +zzUj1i9X`-c&C!RQXy)isdEuPX=IGlM6COTuj=o=_TleJWmaR?gZ-R@zB}bp==AV_L +zFPKJ$2z`87j=pj|uBJkFcID{14jor=^xci^wT&Eo4*j#vkfU#y-Ite`vqAKA0(p=H +z&8-}L4o*&&qwiFF?BCMV{vh}eKZ4*&a_;rc(bv!JZ!=}ZFLb&beJ;C9gfe#!dv*jK +z*@3@LoBp0WGe=)}O4mysF0&uorz^7Uo*!8J=H%!rrVX*Le{RBck)=(9j+$uka +za${*Pn>=_`MK37!^wk( +zt;0E^pm{GOWqaho6WV^Be2Ff5FIZ%X*aMU4y9{|CI-U4cyq*@Lqt(in_#ecBNc`Bp +zGfyObOwNW$o{Dv5{MhHqmzaW2zDWGo^c@zh<4;e=Cry0sYPgQ4>>r9AYMdrNpR8+6em+?b9sTsj +zjP*?G;%s~&vM!44Cwq{xr~Dx0^O3Pme!e;E1B?EWo}W+j7|9Q(h>7vqv0`%0pR;v6 +z^7HNBoyg=f<>xC;S^4?W*ZWBuMP_v8=W}yD@f+YzbfJrVK5UoIk)Q8y(9F+w8{>22 +z*!j!{$@MHUM&iZ(&GvDMZ2EoO=g-fV4r?9t#sjP1@DlX!G5jyQ_zrrB^lQ}h%*~gf +zE&dU`VJ>yM;s)*9e3H-Hi3iJJpYtcsJkGh!jl>4YT=r`#?;eQ+1`6+;E@z+6MsoHM +z4~wsy`?qN$$Iit!s_oNr@jcRolNrprU9o)|kOA~1Yy1pze(8G2H7YzU=Y!6IHg7ZL +zIN!T-^99V@eCxr%nR4?zNSmf?Fy*+Fo9|zKYT;%QeQvOG^F0CVnwYm8_{*K#d@{cD +z+rFBmcN7;OF5tF&zv33mHR|}g<*+(7N3}$ +z@2oD!BX3Er@t-N~{W^T7c`nlJ`HsQ49CIG#GY=JaKxksjxj&m{{ +zUrYa8`JsyJ_zoHGzH0I5KEeG4DPo#aA)g{2ZO_D}tF-26sg@6R+Hb+pmCIXFq)% +z?Mgnw3E-rdKjOj~oSbp#ILpCim-|_*`|&P`jsClFcdvPGsm#B4T5KlgL&4w04YUvb +zV*HhI7W59{zw-^wY>;b9a_jWOB{0_*pMuXK8=sO->LMGbyo=R6ZsC+W9`W~&Ctj_E +zcy#V*Jz5YBVc$t?h{KQj_jSkNrSoGsZ3zB855N8WIQtIyr5%3L>l|LQaAonD?=-yj +zd2n-}#o{%=OY|`dFNeVk@v0pWHM2wTBD#W{M@%dk-@yj4L0o<45;ZRFVqRRLE?W0H +z`0PL$&X)DUndH|jr0sQe_Fa(h{*fOqtUUq#gx4gtgm{oO)yjfJ=-lxW&Pmv`mHJ2c +zonAjlY;e!|6>EO#?ymnruln({`pltH^70X1BmMf|H9u>#+@UKm;nmUHtSUqF*P+M( +z(K(iT9xyK8?1HP#Fl9r~Jd?gOItV|2mpc8`?x>WPdag`z-B3@;xO6e?2cw)nNn~?| +zUEXJBx`RdZugN2r5j{j?6RIrH_%qvD%5r&V$+5pTAq +z3m4`X5^KIJXB~7N{cVg6<;-j${!_2Y1GaZpr_7uI@uZ)#@;dWM^NhEY)p{u9{lMi9 +z%N)z5d`2cQ=8VOyXB%!^#rM33!~y8T>UjeWTrG3pE1iH=_Ug6nl_WyS3#RO*>k_LI4PB-4R5ZerST{PX0!-HqS-=1)#xN +z%1*|&h0%m2Y*G_doBX>g!i)OTkg!mpIl$T +zUpas5@uQo~Amu==0bL?`r7v8`c@>Fc{#RE^vzNZGl^TliN0*`#t)tB&$meT_ogR%1 +zwU7Ff;GcECP>$b1b0?Knxk-N4mug>v_F0#nG+LlFd(W|*l&kcFjGw!F&|+q?1%Cnc +z>hW2{0{YTWhR;_f{6S1UcU_78P;I!$zrg#j%X5c88G$p}nwpt7gvs<}xS8FV0&-+>v?p-z5q?G$Gw2!ffjS{ARa02{6;4et> +zyM8P1F92TcnPZdye}eYnl&SWtFz&-wB=8?F{T&Ycmwg8OcLM)qJ>Um6fd%*_hWw+@ +zBooH>LhD?{Zq78Z$F+-dq2#lnPZxQ&T&%HS_U*jtnt;n^l-$g?Z_)LEa{XH1T+RTT +zr>-^66c)QGIDc}Oxc(1V!)}Qxl@lH2Ybh-NkNKQ2$|E0QhPsM;06F9ooNW}U=eRHW +zx50em#ZcD!4CK$p+(&YyGJw}w0}bv)$p+ROa4zd$q2f#&ewop#v&OLZX{*5%vGz5$ +zfd6k=d#E*a%$c?5Bl}HU9|oRFR?Au!jYw{%W5DrR>+=aqj!F#3eLs}kgFbxxEunzU +zqJPcY-Uv_l$v>~cU*;@em8a2={BPcKClr(OogDWE(J4MQ&%(=@O5wvQ&s?Jqe5BMw +z#{V8|$UggW&eC6Pe8T$S_G~gdC3WOus%X}_;FNyehsW^Ewxzf2;(SFv+V9I=o71lJ +zC2e~>-!;z)7WWv@nf +z=|6e)*DrIoM`~cT=SgxNb<+mkYQX1FBebbwK9mwe*^@ROL!0{68`5ZV;NdSyn`1p_ +zv()1bK$~U`8I7zyJ!P$1*ax$Le_JR+kk +z+H5gtQwJ?XrXus#NParb0<1;`HDEi}?0~kV%)Khs;O==Nw5e%5_G0(E8S_w6`#&;o +zpeK2WTS61{Zs6(z-*08^>?O8a=8mtqvTN=X6yM3*Ddt||5Pi!T3Ty5Jlhqy<^bxx_ +zA6|WzHkQNV$aa$Veu7=%f|q3OOoN7f^vkF8^FI73b0@v+p7gQW6?rRdd&ygo-u?r6 +zt2uXqJOjGH$mp6oRlwtq20fL`otX*gyCXF*n(GNLcV;#_^G5RaoTZodm^)&t>N^yA +z!5ztBg;@U|fAAFkguOmNkfV +z(d3Z^*26}TohN8t)@S%(`)K$@c;ijx@LA;Td!47qR9VZ=6V`}5snlhwNm~{0?enxDc(}#H +zi-iaDQeZz6dVz6?Ok?e-XC8=b?BaicPwYR|DO*1!cZ3O#m(pQEneR`4vib?_?sxSUzOmG6@G +zUUI{en~HpAosE)9_GY_J8H4nD5WI+dU-#I;+97XQa(#BJshzW#q4ku-&RB!ZVeV~6 +zne*&2hF#`u^7}qQInm$ce)}ucmBw0r3yp+6J80jLFB|z^@Dt^`WA7y&WM9a%ea3R; +z!5{OQIf-X98fwN1VYT>$Yr}!MXK!DtMsDAs +zuG?;KPTQ;RsTaRiof=vH1Umm(br0q8qUG>aSnY|eRZrHOc<~SICEzKl4w2uksy2|> +z89H(N5A9+P`HarSPV$rae3J9{&6@1&&c-}^O{J8{29LSknUxFFoAndHeNr`|!^pim +z$LkNMdm2lS@7J)l?N`^;i+ntx&L-dbw_2Sw^rBrBjzy<)w>rTUG>Q2S9@1}ig +zZFYIA_Lu6v21W1Op=x7C)bYk4-U#dX6VP;d%&SL&|6nsn%Ba$kDGyK +zRGYJmP; +z;6t7=AN!s?)2LJT)atXB7**B25_klg^&V`$6nQcv2gHUpw=M&gT%%a~175Wo-^jb0 +z4!|>7JN!4IL7AxU0{H|ma$wLajB1o +zY4t{{dnKkC^5QD!yZ~Ax!SytFM`XqcHL@1m*ItcW=%*hxDwJ_x7UhzuN5MtwupsyM +zx$$XxN+MyU_C%AZ@5f#EI>vC1ccy+U^pNMN;A5NxbE(^mX~+`cKWQtOx+SiZ5vfy+ +zu?)|Z0kQF1ss(sHY12w2UG53^h^hkEACW^6$E7QpmwKKLYISd020T@#j>m%fyP;X0 +z+u_TqcpYPRd#-2Qo0i-|Sy|&wH^x`6W0;4GapW2qqvTsUp{`pa=dnY;C3iFT({CBj +ze&BliTFKOR80ViE=iSC&?0a`f1>-!#I3IeZoZK|z{0^^WZ$hj0+s@bR!KI$(f`4It +zW~$6k7L&I;|c}3jh2R+v{rD)#`gm7L|cjo==R&&@um#dNg^pK1hDk7GhfN2j7xA +zdv@IAdCzzlol~jJ(G#inhINqlHi)k3_SJ>O)>CTfgJwDC_SIw6WnMik_ybQo_%S*{ +zD)mtN@zl&c%jQJN&H}HY%=XX}eQ%jZEopyTO>8Stv&iS)5&Dw;S>PP~FTrf(3C>MT +zUB#USk7YBa4(=Qm{ADxN$L1v9GqD&JNa#-zTrrk(ZXy +z-&Ex4`S9!GYC>{wT_ijK*xmX`@^!o%9HSl!%}wR4R_ZXYZeb2hB}V97V4anW&M`_| +ze9uq|+sji0Pfw@Zbe_VY|mu1*{it +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 +zA#_m%GdoBXlURj&s4#F9!XHO%R%K +zZ#ufF=(0&<7IP*hb4TQ%)*-{0PtIJr6n|POb#<~`wP+R`5q;4O|hzu`Jx$SkpZLb4vdmV7&`;>LyIQN3> +zq3j*WiHs)*T$YXe0K6i8F~8gygiTqEFJVbS;CI8XayN$fgLm^T#gK~Ge_cwy>>W1W +z1e_Wi7V38mSHuVGBV%Dbu;e`bBm8-V!2KKe$nxj4r#1ukUs<<))3yR1h}fy(GcHf< +z!!Pt3{6hQi3;hPa&_4V^zrioGFMb>vB%p1+eh+vrF|O8!fq4ZqS_;gv76$RHRL3(s +z2aPt?u64lKk9oF~XNY+h)UU#?r`l&@P5VqEZ>_kaBb`><5&Imm0{lN&`gVAzfWGqS +zYa@C{U78-^@Q`sD9=Zk|THT9>8qqc0jAatLAU-M|Jah@Ul$$y?ye#ro_(k+l{;!Xi +zdWpq9VmtA>UiQpA$QQwb*l_{;KUK^l#a%dc&@_S!7Jk#7c6dCLL~b_EM<3b2nS*}% +zw!nR?*%Dv(1~}0e{0;nm=QOkwJ)r*u{;a+DvtGuZwHJTZ%cf5|7dj>wqv#=5n=~zE9M#ZLbP+$a +zTna4@nY5IggklqM`6K>4>_zOP^GooZ&8x%KeIDM~3~yQcZCiWk{P&YrU_ZDLonQ2Q +z(Z?*Ee<0_6=?SNTbcEA^l +zUAq2r*#RGYVLQNzU3xmr4(KVvd&e$0Hh{?RzP)0XdfEZb{PUe*{;dLcRvD4uqQ^_z +zpvyDcv;%~0-TKMF&_HB?CFh}~+KN3e2fxSr2L6!*_5kNMO?#kGY;Y^qVr2cla+X*0 +zS~i6Siu{+{@O_!z|H@Nz{Y+mAHo@`wKl58`f&=g{bF^0E?6y5>%C=p?0>Q^5eQXRFvf$d8?H2aNA%l6$eJMb +z&TY26I3y6he4L+)J_Iis<4g1VToUdlLkM+F8eUe%E|d*aJI@3LPec8}1y +z5uNOKV;ntpA~ah%!3dxDWG3>Iwmh?qW1oyCj=K>)$ivUQ$;f70vR;eq4q_vTpZmQ} +z#72^LZ`MBuegxm_g*@{I-b=a5@Pmt9CugtDU`!F^BWuNi|tk{Tg#6~!=&(@uZz2V(S +zT{#aX@VY!kslY7f1_Vxt^P0r|m%!_cV+b-+&N-DZ9xd>z$ZjX^lE5wZ{}idC!-~`& +zIrlJ}F_gC6ZNoWu>xK2>p= +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 +zRx{#7Hvd`c=F!k-xpTnA53s;{lVa +zp4z>gJ?linTI8H&gHrSc +ze3-0fAJ@!OExRM=AOkrcQSJG8;3kuo#D=Ow-`I`5Q2}pt>lTZZ^W^mSu5ehM~kI8z92UBpzGIs?8rHOM!~ +z)|)#dU+2bK>RNxry5gozu*4ru{8sipOE)9Kqbc{2q|U^zr~Do2_p%o_Jgy?+JH*Ea +z?c$HgdV~(KjV}qO(X{@~v#nP)DC3 +zkqhhM%r@=$SwLj|R&<$<%y(mLdtrB=zqwWlZfA7iR@Td1?bf`hyI$7Ik8AjD;`aw; +z{gWpbTzkBA4gbp=ka_;lv)yu6_;)V##2+Pe48kLqG|B$;j7I;UsS{<->@sxiJWnJn +zd9hNdZ+E2JGn3~ibpOIxNs0el=BeTwn()DlS{a}CDDm$U3ZT`!^|F0r1 +zLMLhCon(F{djk2h=&L$zwR4+sj`{#SqynB^(s547LGo}+G*ri|VlL&StsUg-a_}JI +zzZ^W=>#Cf%hnz=F+eTX3&U#g7*B4mQ>yM%SR99f)xHQ<*Y3d)DBEHJ89TSdbmhOiR +zC$j=Gb6k}29t526=r{w8*hPvGdU#{;9g-GBHpuje8RYhr@7JuON +zhQO6e|9N^D<#P?5A+0M74GjeU1&k?`%HYi2?6!WlN5XgO4ebGV?#81}h41Z?J#o~l +z!@^maPXz~M4mI-JPZ`&jRFt~lp>MeR1fNR1xKFvGB3EDTuX7l~dB(S>KcXa3(*M6~^Po#_N%yTIyE~Rl334A$Zm4wUG-CYH$`{9T0vkf?uoAx5TfL-bWFAd>KEJ +z^z%OPorCxvJAS#WSDl=DmG|xVZQYz-bov`D{n3YiRV19TY9+qme6w$Z_tlva +zlAl84cl;X5e_x2cP=vgYJ(W_{5Faw+I%M}CH5s`(zT@E}ekbu^c>;#`%yP)}#U56; +z`ek2u7%*q6qG)?+QD^)8_qOE`zqf2oWq3HUIK^Dn34geJ%q;Sz=NX2oUZd37Xa@D~ +z$_$c!{#N{i1-=FfQ5nFkEz1Ory$JJ+DYsu7)CN;GW +zQEK0JJbjV<#vZY$fxDKmU`x-a!Hzc1K#R>-KE|J120sg&hMKj;f$_JTNohwnZNLAK +zHo4=`vE#*-mbRoFg*`tXx+>+1OCQp{({_5f-rv&Ok~Yq>+mQYDF8R+GzKjkbV=m$@ +zqo1VO&rV-oynJVE?fed9$}bfC*DAL*tz3Hf17+5JpOhPoFVDqZ1M|StC&g|>x1Umjx_b29P;*)Rj9I2S87gZ_$m;W-SeG4IoR$#f%`iW!!m22-)XzyU1yW9AwTJ +zM-?*D&Aj#*w8{EYV(ORac59KdrUIAf5fO6UJ8(Ns;l~_c5ZF(!e_*YLGa7&3=zpc+ +z8?yFNi_l%3OLecU@A1u9x6|9($9uAY +zyT6#-pX8Ypn8It(f9yWX&2g5-=2J%We`22!wAW=PRrDHf@fpTjNPTI$h5YSeucpIf +z!D^3@a-x6BTo8DjI*y*(QX;m^pRk!upx=mnzbG{qdroBF6=6?QXe7P`fm`&X_15iZz2N93e2TXj*{qXFjaz-L+7irgR~at%lflr@S>YRxZla%a +zg2nTehlBHq!+C0%afP~(e89IE`IHUfN4-Mj<4=vy<`ul3f*c%WoP&<=ZS;~K=&uI7 +zYR2lX@;qmiQ7X@=`ubqDTDov43J?@>!uL%uLGOY=rg6hyI8UhxKey^cw6=uevK5p{)gc>(Bda-jl1Seh}~H^1g!i +z>^nvW^S+$-KHi6UKbiN1_=1Y?z2NJ>rnY?P!Qpi!fy~B$OP3j%{iOluuP)E)0S`Iw +zgP9Z17mQ}>{$>mBJIwtSYYx6Pf%}xOE92O(N`;~>&$Z#7vKMt7aFz{ElpJ9l0@hf4 +zYW%)B?9K(0BcCC-eX>F9P{tL{PPW~4^$hd~l@RtFsaq#rai18hzq=yW{Z_hmKPtG;cHahwOQP +z&+Q3p-#YGI@v0N6`lExC>&5kf;rYy+5k^S)m|vB~)vAJg&sQ5G$g!A-J~9GvE8qKK +zAL-kT5@&6ccr)Kta>Uy@o!cD>xX~~C=+*95Z)cAo&(yh!(7Bd*Dvjr{e-q$D&XdKt +z+oe+PHMXohI4Piq8o;||Dn5LfI}_E5ZEKkWF7>3*M=fcUcu`u&&waNz$?TL^2RxdYmVTD-OoL+(6Ign=q`LY3_Cf8 +zyF&6j72(@F?}v8s{|<1rk9+bi_0^S}#hD)2Ll+tp+V?Ap4SRnG-zfBmvNv}Gf6IQ> +zOqrMa`J2SLTw<@yzO*`F>Riga&CuhbAF0JrfkDQ4Ld}TM#wzJY#^0fKt;QF#MgeCw +zu%P=vry2FVVMqqiZ{ROEC-ptrb$O}-vOg=n8CPa*K+gPM?5ijVqpN%MjHtk>nBNY( +za(2Oj_h6{Xb11ad?js%MN9f}%=8fcI9mD*VcGwr*w*$IKof|kOy$`&*JXPf1p4nUs +z-PQrqPTnOb6NeryblqHR0_|yrc46i}=k7d-aK?(2>^bFQQ(XpKcN;G3sx6u1pahO; +zYyq8FAU4gus9IbL?b>|$BK`yq)|^fTn%cSRCb6HKR~5`T%EXYV^(T0Gc_w+XA6>85 +zZ_456<>}*@&9jha4$mT;cdY$d{@&C{JG#+7w3mJQLc(JfVs$Iv0FDF*Bm=A +zOKs>_z`TzjFQ9M3{7aU%)*%~^0X4+Aa?W8!y_fN4saVH=>?J9_Csp&p_WqK4*YjB5 +zSJ+3wVRPe~_B_wok8*=7Wzy +zzKvln)v>R&7T#XKUBPpiKj3H0<$BlZ9PA{SKi1qCcgp%r$YZX&=9sTmW6bE%nz&CqS1#np}U7y#KxR#V~C-dTkDJ +zSmyH%VjJG}So~bbciuDaXVi)wMjTFOxM^ye_qkDRqJv6#MI6q3o!xek(}%1dN5*x> +zpNYMbZH~jz?+Y2D*R*{k_Ur`lWfFH~#h#rQYxl1%ip6OIJnvR2t9~@}b7IYU>-0u1 +zo&LJhjJMo|CmoJ-7@YpU!XCMdO<)!{B~I<1ZI}kp#$fPo`UQZ8ShH9d|3C;|l2WVc +z{q9`T_A>o=M`bSM;SU?$19sM_gy59EYk-A$YR$_`HD#?*qt+hkKgFo*Kg!_u4u0>D +z7zDBX(&Kf`Kh5|SjJ51bYfNL!y-@mTl>I!$QIG7}i#-nxCnJBXamhIAwk@m;u#O?u +z>*XnbdY&)rqs}&a+=FR5$QnXB)Srjk$urNpI^!^i??RU}ZF(XWuJ7e9>N|t_q{0P^6Qq68dNz^ +zofuEfRc*MzEpeqG@hyqIyl&Yd^V~WMa1Q(bE^*cGp%{C_8a00*pNhN +z+b3tx&S8ECJVmTI0*k;f6d5IOWSVdc>w+VjyfflAfG6r5pMf8}Rd|%KF&-GeSnWx|B_-M)yu5x;! +zo_zhaAss`>rI)QvJTO4*e;`XOYyaVd3OVNm{of4@c0UlhLR}Fg +zx08|M-Wd#HFMIR~qcgQ-IrT~(C`g3I%v)Y|y^56Guq~tP`;;4_?hlq9%_zHEEe-xk +zUlo#Xqm?TZRFTq0bwMak-3x7QU{C6i;P?6MHY&px9QDzL5xxQXx)gc#v_EvYS{9Ud +zw@@!v{XBSq$_w3yd~&O+_{(j-Dl=G|XH)@X9MxiKb!MqO6nhkG-s8@k~vcOme40*~8oZz*kB0MX* +zsyJ7XtFpxi2eWT3zLL2&OMhTIpc185W3UWWzcIY}h%vM!5%y|tppV+aZ(N}2$ns(8 +zFfyTK;0W^Vg@D~f8~L8AIYTy4&bBqD({UDbbRVsNXDW?bq2otWmUIM<4l5n9Vph`a +z&I^XN$vruY51hEVo+0ch1OMCI!qz>RxVD7+be{IFFm;lAvjUY+@_ +zA!o%`dJY*|RLi8>Js*VbqhEpZOmJPvcWIwovPsElAZ_O30}o~{Gd3fSga&WzU)^tis-7sy1eh`gQu(85~rYY%+HlC}BtnS(7OYv^(G +zEGe^}_3|7gv7lBNMVV_@8;Lce9R6|cTk@*A8?x0k#8rM6QtBA~H;H}wBj@m+3C#bo +zRWDn8xJjvP4g0Pj&VX;uS}L-ZG1a8`M$C0pa^e0LcF48YJgg^#?P<6X++GcJe9;@DB_P=la57_ft#EK3#lw +zV~121$X!q&_HZh>hhb*(F|(gn4E^#`=z34Nd6V{VUeDJVPliE}$)??f}mYU9EN< +zTs!=|^J|trTw+LszsnzJs6ij#|M~F4xCS3|u=apV{%*A5Qm$dmzBp2j?iS=6LJ2ya +z?9)r0K|lD>PmK>(!rO9wQTW1(U-$-ML#CSXZg(_HR-I2t+`DVb1lBi+>kxm}`nKyc +z|BE|wJD<8ibv|<~{)8cmBsS_pLi9GY#;!0XZL;@yGJtuGQm;{FIrWy$v++Uu%gSe}h=X2arR{2W>3Yt17}n)gHsM +zErA@(L;gN#1dyrjRjh~n)(SnzbqRXv@c0eHhe#}LKV1p_?`SADb(d>QdpHD5!F4S- +zV-C#_9M*skjcE1t&-C*}CwD%1@_{{V4 +z_aB_+YP02q=vIBV_tdAu)LYB^7T&_oC%9@5ev`Ql{!IQ7Uc^4(`y%*J?q(YvG4D!S +zQDDZ0%I~>iH^6(Y3Bx&Kf=(uL(jI5PoWo5g@51Np9ZW9bRgn^n+$Cq58RrqM6&nFN +zmwk^4Y?6~lEZJCr-FdejpR6xxYOf?=QkEwxDDnHy_GM|q0pB#ukoE +zxx@L0p178}!_BimA}=MMxX8y1$V93C&(znnE%@5Ue8}2T5O#QT26CbTc_DJa#U825 +z3$0#l{iYhXc{=lCfF2N(IWmL)E07fuBR1WZAK$d)#=2`PntoI5T23AI$A_5XouU5l +zfY5EV^7^^(#`U_=QVWCO=mrbUn>50&KD6+E_-?1YwwBB_a3xxDs4Jz +z&vMF7fv>aSIjJY>)lW}az8P81%kB1}#53)uJ=qg1XWmJ>%y;JattYKDoxRt=BU+IK +z{9Ux&tFqeeec0-6kl9BHUFJj1UytqBc#A(-ge^$;Jd`? +z3qOR-esAp%URXO!l}>KTje^HUhaZF&M5nIw5T}!=gZS3>3hX<%JAw9z5BW+bb>gLq +zvfBn8u*UM25tbf0+0=!7tQAk3q+CaN)1(?>kxE+Y1o22ZH!xiLioL`VNt;Px2Ap`3 +zkD^vvaoW1lY-iC)(Ve}6%aCgyvM&7*pBD2196CDq{gjn=bK}-}GGw*Y#%$h8tg?kK +z@*g$zhgaA;VgJ3#J~v^QbuIkk_dqrej~M22QA*~D%n_;YRejrj`jFLbf9epEMBK@( +z@Me(xpRpa2x%={(MRG>*j`|`w=Qj9a`oho8pU^k^G2vNR_Z@lRPaoU>b};$Xq>o;di!Dht*M-k%8vej5j4%(@m1b|bqa-bU~wbP-u9 +za%KuLbcIcu{*-?XK1-KB-TJLH2B|+8y`$v}{^5OvmOUr3N8<4ZsZpyf88_CHLlS51 +z9Xz~i|62B|rN6r}N41%8ssi87@ITvevI}T$5P4FHkXOCS+-aA&fieTh6EGPcrjJ;d +z0Q(gedu9cK*qx!wi;aH#-Kj&x4qYqtodM{%O?3J!?GK=PMwjX;)|wzb)e+FS6xyDd +zhK`Oe^X!Yqd8-+Y?HZ7S!SPdK5_oJ79Zu% +zr}(0sZ*mUuU+r%lLz`rMLO+x^mDAfd2Pm@xS>xF6V&6EjM$Vr*>yOABvFF8(7kR|p +zQL!-k$K0knJ{4E9EZNyH-}7N;|Ap3BOp#j-?)KQ{Fed|tgS)G!a|1jzhBFKX`igaC +z!#dZymbjk+TSgD2j@AF^adB#!wgeEU&IVpLoIV&U?& +z0&^b+SwB2FhW%E9GOQN{zvJSo5WS2sLqE%=`I8Z+Z-RoUAc(oBEnOAatH)(|HhO +zU*?Z23g~Nn{Pj|;SrnU@Y9ywBlBY?--?Jc +zK>neN{0H{N8`x}}{D0E)^*BBUi$6|;jx^P-68;eRAv|>g*pDzu-h5yxVGWY~25sw? +z>FZ7g-@VbZ%r!mz{YQE7{#YY0K*MWIou(tB+t-jTD}{!PS;ktk-}bQ+PjGU|qB~o? +zW=@kusR(QCXf1m-ABMac7Hm=ac*R;DQ`t{Da{9y2eK(D2d!Dl_5*IL=GNtH*f3eH$ +zWX+t+ZyC#F_PH8^GV)H^7d|P(CUe_;fSs)$|_4Azqcxt +zN?4;J#P6V~$_|R6B4D?`TU8;vsSw4b5vOgEuo)K=yL%L;Td0J91y%yuifGdimT1%p +z&}w%xGZt1L0@|QB?I`vFVFx!*5h@F*-}AgnQYnJa%k=Lvf8>*T-}f%(o_p@O=bU@a +zxokTL-%dbJ`%ld0{}{G0$_A7Rra>m?^O0VzDV_UIljkF?9mPjFodep04?XxSY!Z-f +zxyRg&v7x<|xq$!o@KjvrLp +zZEuI~b6{^$&8 +z*z%O^p{eV#%4*ajVslV-a%3_eDi +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 +zPaj?axU`#a{D +z|Ame})N|e4JJd?Qgjv|be9+~SF=pUt4ey2H{`L&U?F$`T&zv@F%UnlmjdPP!)OW%5 +zvq1k2JH?OMj)E@eGaL?CX}iN%_OGY^a82mIdd3Sf_dM@=O^^v5R}h{>T$)`}P;_)t1<^uT*w5`CqK}4oRxxS8anRpn(4X#Ck*fJrG3UCT(>oVD +zdA$7_+--D%F%$Iyxocr73R>pr@NVcyJ0ESGdY(nL-CCi4dj{VyhGyv4Ewr;=B(HY; +z1h#g56<*|1Uls0Yy|GgA-}>_)d(FzlOO4;N;+YzA8Gp?!`65e +z>fZ)m9-hgk$Yjt7Y(*&BV00;HMY@)6ev`JBr~dxn(QpPDX76mB2#M>N{xA-6BO +zCTOwcA};12_#<+G7`Nt(C6PCOE8+BGuK0fm<^bPdb3@Kt +zoO4^H)x})XLVSvQvl&A@HeknlH_poIfO8jO`^fXh+7G}Vv>|c=eD#zj?|%3AW*O&{ +zJkJZS;u;B^*&d?*>T#@<wvd%sY0i72J-PdK!y=}^_MoM +z9EzMb>CGiCZVfmKpfg#sky9mIT>!mpCH(B2(uME)B1_?4FT_WvyGuEY_Z3Akz19);UTg*@v$oJ7scHj;4 +z#eT_8OjroRUTxp#8~9R)F!3-z?t|PmqCELt2aZh16GB)Ewb*BpT{Spc;k#v^HLeFe +zhG;Bs*mYlf3T-8UA5O!(Cx`-H3HMd4t#|yf^y(0vx_R;zz~>3DOfLMuh6+!x2QM?b9^v&{918YcZ{1jJ-1k(Sh}yBwGWSkOOMJFh6TP)&S!-xKCkjg3sf(1g!LZviJu!A9Su`N_gZx`*tiZin`Wl>|T!t~1V@(ov$ZL>y +zMuX21=Yz0z3$?QhNOqSrwHNPz41swZT=y5q-LW_d8vV2HN$C3?Z7ib2SBcFhb249J{jJ4N@@=HR40{&3%syg_1S-@v;zKNK5i~9wfg=po$M}B6&P!|eR +zJ%c(N3%^k|pby43K7Iawif>W~T^2;W6uHFpfKiuykTxb6eO3TZc-H2mFUGzxv<3XD +zS5>)fr_vX)V7aW*bQI#dC-zd(Bk9nF?>IvW$Imxq;#-Zr*bm$K+@ir6Xw`Kg1Lp^- +zzrr(VoV5Nh`Yu3>1n3WZ6)~sycCSoB9G|e*qEogq2ID^CSsKq0xn5@CU0?8~#hb^p +zJ&50f?si5}EE4f?DeV(BrnKNb8?W^ptJjG$Czm|~@o{t8==+>|H}YLUwuXF#wcpY+ +z9q|QXp%u0PMd2MdYeiaHkB>#fhjXf#l70s*J?Wp4im{w9{Agn+cyBKF +zH)E1VYW(sQ#DThz6Xe)Sd0JfZJ3%Yr0rlAA3dJeYjd;*Z1+w$nMEJ*>vI+f;AWu}m +zcO7)p(vvhs8KiYpR~dx(NJ8J_&65^5154ny!?N`MNP?`9qQw++-p%2F3`}{IeqF>@ +zE@YFZA-4{Ne8M|Aw6!g736}5F$L58e5fr55H28O5D;8eg#TviT^BL08zk=%x|3EkT9fp3b=ok4TwkOH;&`+3aGA$xbOo`B6gs~01 +z?Q2{^zF37ggw?J;YWo9nP~j{c{wP{|#|@p^VH4`XXsC4*{HruvcKGRhs`=@BVCchd +zqRe>oeLZ-G5DM<^nA@fxW?48^Mxt}E4}{4^5W37k8r{01sj=&hE=Wp3&ga`N%QPzPUR7qtTMcRe(u2-imN8 +ztTF?32F`=W_s8ggoM?0rVtA)U&hC3PWD_Oq#hL9lSl7sL7NI^#z5H?jeT68B@ZOUP +zz3+rLqu!xFKIGje^f@cSy(hOpFX6o;J>)Ac-kJGJ!`Bru>zbdobN-qxDX}T8XMuOt +zmC<7O2R#&-gx@9j8$4ukfr|Txxo?$-_nUhlmrNS!@II4hR3J{=0a-@zS;itZ6yp)1 +zX$`*#AAE*LJDTrtVLk2RsiLrsG3-gA5c%Gj53jJ^fp@urzRI7iUuO8&?mnZ(30kx{ +zF7f?ITXzrmt@bInceg~FhY8P7ANw5R{1UeKzAe8RqtC~3)J49a4;AFtW&g20PCk4? +z*|Xl4;XU#Xqy1^>M@IX)E#`C282H`M4wHv6UhNL1BA=?SFD>suow%i$IT@(`1%~Kl +z@h*^x^0TmJ$^aYTVBWSe+#M4&_P|te<-(I~u*u_2sfxFGx2S@ch$jOQzS0>(=BQTW +z&a&F(DenWG6!9uzra$x3K9K&!Dz##|3%*ELB4aw9$%bEvhkT6qa=SZw>1 +z+b~}Em%okq^7le}EL#Z}u0mUkcYYIb&Tg5fU`_cgay9tY{=Rn5^B#RKi!Ot2xD>D8 +zUfnM|k0$Fl5~*|HV*!7=)==v_+ZyD7@+fX&jnUVJWlf)T%w=#p%6$rYFz1!DP8uhD +zA2xig6>&{f4a)V9gR#CpT{9l*Dcw<`YGZrbLmUG~$R7>3I^NfMRPNE7qgkLS$|4r? +z>;%4a6VTq*@R1_Fe+BhG!+sm`RZbN(@XNTx|8wyW>>+8*KC#}PE;eIdbRpLJ)w*=# +zauD5_S3+?`*c!%F8&X^5GqDTlXU1MJ~r3_>SCKDL~G +zAci=5VHoG;jj&CxG-8M=abHp%V#F(vGkTix7W_qsn};z*6UVV@C$FXZwR08Tn`_4o +zdLbUowKMBweXf&G=30y`_S?P2x6hkHtyn*i+cjD_oBma_Y0_~L=#;Ui)Ef%X9&qco +zU@l%D-559y!d_+K_+_IE*9i5KF_{0@wRAncC)f@ucF-~Bpi&&i9In>pkn@M!S%{nZ +zOq)OId=^`}3p^Wm(qjsAdim7zrZ`@=QLL|fLp)T6yC&DC;=2QXx%gxJ!GmAwcnG5p +z#>o=~fpIfdp6fbYq`MND6y$}Nr?{~n +z9A`pPiAK8?YXyA#bvV+K5$6v&c0)Ey7kPk#|0@8;6os^J0X(GfPqg{dWuX6D`9pi` +zTz^?-toaCixzi%MaW7-6e0TJ;E-xl&ve2kAlzYk$&!Fdg1U)V7j9+;ZWo_K6u=Y(^ +zETuyR8`Y*h=``*^nhd#9*0CJgtuo6{9-ECe%pCB9a|3*rba{31dgj&_QUZ6r>O0K1 +zb;zeG>X>bqu$%U!Tzq3r3*?PJ{@78-1MyZHbL*zfuZ{FV-nW9MSGN5kvobOc@s|(S +zH%I6XHX^Jdc5j;^WhwF@G~rBWM#OG?8!@{BFs_CLQxmr4pv +zkZ+Ou!g(x1g>4G_KO29D5fr&f2IBTC)@h0hvJi7O>T{oN%)LjMr_KEo$SvuLwdumk +zri!7U)s~(nz9Qd(XK41gVUW|l^3eW9osaiablT`nYIh;(wqoS*g-w|BVcO|%9=C2b +zWPJD!2O{|YrJzsW>x&Wu$XqrxdH3tPLKYEXYNgdaPpJmqvess*&*Q%oH%I921^;$U29>bA +z!7nn*`-_Fp#3%oEJeGZM-(H3y8$x$`f+xr`GkK-iHJ+Ma; +z7GYrwY>A(JuhIHm5l9dq(XVqB}2(Jq{@12qBQ7<9p +zxefDSv5!}+kWn^>(evdvM?rO>qY<`%x64P}A#E2Br|VqW&t^KJvm+SGmV9!DOqO^2yq!c +z%H@RZYVlvC*%KIW_$KnrL4GoUeNWd7e1-G_)lUlkh0U%2;#GYZUh|`f%>N4C^2B +z7MOGs{8{kqPr(0#tGvPj^Cg?M#psyY9d@^6( +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 +ztEnPyA^G@GvpexzqtQtU;vyt)k_+3^Eb#LR +zduG9FVvo;)yx&uB?^1?vyZYmteH`rksbb%vf~Uu{<@Y}9`9-EPlI=kLR%-)dDZ^^E +zNc5!R-1p97TfEF^5B`O-x(2uI7jQtCi1!}o@)_b$IAG9ZM +zYh-VjcmXc7y67{QfOAxR&&$LbS^@f6TbDEt>kMc6rw?>(=l5ubdnM2RDWCR?j0ubA +zm^L91Glg?~`jzwU6=^F~67Y@duAj*8dte_B5$-SG$*>c^N1(1vYil&lxt;25lKgZI +z`aXa=oA+tCrQ1%k{tE3rLi!X~?{UDthId+*z+Y}I;^%lz2XbUsGT<-g#9c7Be+T_1 +zzLTM5f_LWG7r1+jy9jx1f;iOSuaV!ua~r|iGnIVsT>5Mz +zirorgM#*zkm+*BwOZfjy!gID*rDTbX3izX1Ijm-UC3r6Rq{br+o|_=kHJv&^PE&-a +ztjx1L0iL_E5ohM`Q{p_V2skyqn^`CAo4qM`$NQB!`EL#RuWIsNj?d)5oj8Ji+rfV| +zS;7Zeq%2XR;Rt=fPeJ4Hkh%QKB@Um1#trZvnFCys-u1KjO~H2XGR{jsv8wJ)e4Ay& +zY;x~@&WInW{D6D+WdHrzcgl10Lzz)G70*9A3g6~`B*)RPWz*CS%U`SvB +z);aZ4&rfwY$ZPN}@W!sL{D!*h&G^&(2=;llJ>Cg-CCbhN+_UA*s@Q(0vko!Zy&Gk~ +zQ_iW&z8=%wFq9p8It_C&x{~L<)IEF4nVQ~;cWbwwie6&gAMyRuV;ZG6)p8f;qz>n8 +zLM-*=^*#t)`Oz-+8jmL1J_=pTsa)o86rx@5Ih=!ybrkN>V#q#*OWc5Y{l{+ePU;=; +z^tW$uOZdY$a7JjI?|`pd3H%${s~OML7QH+=0&>vo7iZ%P{vk0ePZS$&j>T&dcNa +z&J`KKDvZ^Fv6%LK@;IKe(Z7Lka6GeL++EH8R?238h!k&S&s0p1twA#Pe|U +z@h6Od<30{s{bzdn(C6pieu1tyI})86whA3*R>X&!I3vDTmiW;8a?mDon$H5=AQsra +z0Y01N+>u`U$OkcZd+IrNccDLii}ewCHGy^(-S5j+jT{6xo1iSTIZLN8iM$Dvg&gnc +z@$b(hDB%j|e{Y^D?yzgq_TaMXIv@@N&+4P`9DTeT*TP1+#9CzoeT!-Z=-%KacAp$>`%X4KF$BBj|%NtZt9Vu50`D +zY<%=T2mI6H+79l}@eyU)&~=Knwl`^QCqP#_)J@wv&jI(%acxg9+Wsxtjz(RP3i$qy +zL;Jnp6HVAxS@nI+JTG{+3L=wp=;y%{PXYi@!V*|cyK0rWel#8po5b( +zoklCBDGkH1v1Y|#0fY2ZmphRb8%P*Po;3cpW8kKJ~~R6=TD@2 +z`r4UiQLJadT11Q?c$6ElLQ_Dl#f`Bx^2Af7je2FIZ_eHpH~6U8mg(2Y@*cEf1;2UD +z_6Tg$O`G9s=i?nW`WcoB`1CK*!mJY>PzgueRGNt`d8LR +z4*f)FqjnupH2ZYARlIAiQTk@CPuJIG<-4KQKYp7AdYcoV?+n^2Tm({mI +z*D=p1-I_=e+aW +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 +z+4K7PGUtCL=D#2KNs?$%N=5&5_+ +z8ZMviQ?Gy?_(?PeF)IyjDP54yJg`rtR`HHsrdcir?+)RN&LSJ#2{I3M&2;p+5q`v#xLU1G0_S%55h=43i*&oBEO(`ga$^ir +z0sDT8fjOx6VGK@;0r9xfk9I5l*`h)lLl(-L@3M?{nKAD&@h-z?(=3;PclsC(0N&?- +zKaa~ID_qDCWsE1aDhix&EH+!7!d#jznQM$E1LJuMj3g?WiamqwhBg*xYBIOhX; +z{y%*_5RV%_ANjC9;2f~q`IzWB3HVJOP2NM^O+JmapxL8My>;76ea&zW;yRhOROde? +z56{HBK4xonmqo^GxePqcY?FJPX;Ywm!Q^kWDVTd6`!H<_^+rGBag<5hp6#?Pkngg8 +zu3PSb>9#}eEU`+Vt)W&Z;}3#o?1Mb|d;B;1r#*{fA`DB7wkgxHof@>wu~6=0f8(*A +znDq!}cepU&oEL|WJJ1%}AwCE<+uICZPqRJpW3xSu_a|}n`^D5}UB&>z*3?d0dfB3D +zTV6w38;p2m?nx#ti9@!HI_vYNckWNbQTUlqE6=YuR&$J5uzB8(ao%tLsAZ;NG|4S}go<$Q1(-3-2rldl3iU?y}#cZQ=9{JQy;|}LgYO*# +z&!~(%f$|<%hP68te6O^I!86O6<#O;2J_uo}eA{ht{Wi0q36Jblcm?#i!rWa823K#5HBd;W4-- +zuZus&BOWHj;ks^#&i9CC@2%a7qF&32>F1z69y+IrsA%=K)_G1(DY$9kS_$N-fw +z>-iAYb1l}hugiMY<(TPR)-&Jbiq3cXde+-Kdp(Ja#_nc;r3cdpeIL9(5k8zax+3JDtbs?@S)c +z_hwz4$G(O5icN^aSPg%rLmtY7bOHXkfD>3`>st%ms%)PohocJ}G +zc_fBrc30~-(ckGbvm0l4+^h9>oiww%+I*+eOj-l!rIS`DzY`a0Vra#b-%VP{cijt~ +zbhk0K3g||PSgnm`%Ky>v+<@_zGAHP|3tys~NZFJ0{|DoooU~7V@yw!5`IT!xXf&dq +z3&!#{)@?NElBcljB-CB@9pyL1mCr@_2V=^22PgY^#i&Qy9^pK(u&cbz^Qzlp`0%;f +zS=Q0cHCj7$XSL&0pFlgYeASexiOUUvpDmucTjv+kP#5u>Rg}jlH*oxvTViz+A=H{D +zAyYzImr(&whnuI=h&Y9KRUMQ7#sC2>Rk6~ +zww9d8@YX0|+#TR;3T!Roupg$oaW}A%4Zft?T4-Z2?G(DsF(2hkIb*Pxg1s+Z=g{AE +z)j6hUItR;|b#qXcb_%O>!oJf0UgcX(xuEM><9W<4FJP^O;@Y{Xn|9K`quQdOwz5UFk+raknZIY^ +zw+Sch2D(huy^Va0(GO)B?%^NKKiiHw96Hw;L0Pt4JFo4OWplvi%faWoy*pkEc=O!|E* +zycF`NNekxwL;06H-jsRMJ7`Upvv!f{R+T$AVp*`-6 +z=F8Th5 +z(LU*&`|iPtPM)e$^M1``Xk!=d*L2xW +zA{P(O*GJdm{&~c?464czn{akBI>@+|9Ne)d#30C~ql0Wa);IMIw1M{l+=s5kk|YR6 +z*o-3?+Hv2i4$o-7W5U3AomAAFrQLIX26x^c3G{+}Jr%Jt4!|)%On!5cnDb^X;%$Z^ +z1}8+yElVQN^M_y?zJ8BB-;nUKh*&n>6foc_?5CxA#@zfme&B6<1}0z#a)mJ +z`acnUA9u=5UJTq+0XJ25;=Xp^r3!dKe9nq0;Ghb4!MV`n<-pnUCGuk}PA5SO(c*OI +zhs9VOAzc0xxexa^?(-xd=EjP+9NY=g=+Xa&t%%RzU6`@u7*}GJMf`1eD130g04-Uy +zxSWzOb7wM6$EwBUl)y%z$LUxRmvb4~D#kP8bfVFf&5X-QCf?{fh1eD^Xodcul^35K +z+max5;*Qpxk=!pDy#BF$3!n@)&^9xxUsAIwx4VT%T9_p3Fs7q@V`D*H2F`Z&ina@1 +zT9kO*vEy{hY}}j1`S94Db0vu0%`AU8V6);`h@Jj4;J_t(1=(V&sxr5OxC(cMIq|mx +zwoMiDSf|x7<90rWpRZO9aXX1Uarda$4p_G%hN!{Ialw|UjqC3I99IKijfppcEs1eP +zPom6tz;y(;@f_N!?v3KkF5?^Tv=P3QXCA=ZGk&}XHm!WX)fUb7^LHeA7&`oz2>s5j +z4u|?=4<)<{G)!GSUuG-2;QNSY_-&NCNTa6T9q#~MhP&lUZ7yXB&hPF4&C(Y%!L~q) +z`*BIHdutE<3{iQScTKL>>`6QiCG`AFELB7h*0jmak6~b;1c>w~ctV19&1jv3RJ7?Zb|<9gcYCqeW;-lESv4)ha^2AaPCk3d^!`71@zDs-MI*Vpn+(le{G|eG=Vt?mg9bsM+|!5 +zf8H;(8*@|e^j`RjY>f;Q_9s)tHspaj;?EWRJ#%DI^8j(wlW0Bcz7uxo?BqtonXKk|(J|6lB{(!Nwk8#5`?dzIWvK4kP~VFk+sX5c3p8%+t!& +zL3f{SNwj>7T)KzbCu}_3k`38WymP>NBig;o?(i(Oq_y4ng|jgCZV`Fj=77()V+-${ +zzii+Z& +zB#fN2VZ=ObYgU1;KH^JHB4VC?kFhZ3X(QGUe23c9V_OQ`V|@h{#1p2?KOC7V#^+hA +z+gw~j9pS$WLn2yYkHXtva{l|NfdSSE?ZL9RFE!b?ff=^gL1br$(|=;p}+eEIRH(EN1! +zqFj?Fd$GA5Z-LCQIIs)lxGv|T>~+HD(tQ-JblnWPSqA!e@1k%~AJGT=;r;qjTZ4;d +z{4=`Y0e?Vj4ErJvC*MJ9A3Xn^GLYMVI9^f^2z%hdd3~Jtz-^l|GJ{Hddk{A7# +z@tr)NG4A^$wEw#CojhP|-1j^1{Z-?;&I6Q!N|Z5q0QnWhQ8gZWIN-0c^qs4i>)(wt +zoTPU#;Vj^kK#MLpt^clnLlG@({}g +zmd_5gl2$m!r~`R~G}9MnJ{ILe=u7_wnn{Vpi>1H?r%TG0&uBlg?ow+$8u(4J)ZziCQWm1yV95&?lF~*lDdZd+-vlGlWRubN4eLW9;?r@x!1h$h)HY3jojBr +z#|3DIbPe7BdixY}d=2QW)HMP0M)|@G{~GQs4`Tn}{MEt-m2=0l#|oUw-5pDRCAXcI +z{)p%1s!sYNe=_NhGPcR@1_IXli)xA}X9&?7`=CyHH-PpY1?^Fmrq3DWmYX57oashp +zp)SS#NQ*lRK55cm-M>+H(q$NqC-$uImyl-;Xydv?r^k}(40_aJ0wGr&UmuN*Yrb7H +zh3)VYu9&VA;9YP8=rRv;l8m_`UG~Cxb#KHh7Xp86(O#INV+LQ-=O`Hc0<>7)9E^UR +z!!>#WbV{1!TJ;-q*Gu%Si~N+dc&vjKlSHpYKI3~5zVD9vo`CPOJLbN3-Nv}@0^esD +z-+^1uqEf*1zYOI_lbi#c7RQw4YqWS!qs0u!B}MXP7iAn5`1caXJe1#bd57bpoKqh| +zgMsFWF>tsrA4Aax{1qYZjA`V$MH`yD(+B*NwATYZXk724Im$ijpl|axWtiRgepK|; +z{0SM$lO(oPrwBXrp$5>%k!tuU1yaS4z)U8+bPiQmH_t~GyzL3*KwGBs{kMG3>++Udpe_^{?5|A$??O}sp68=*YX7Tx@TJ-j(V9D&?-f3sO1 +zeuNFwIT_2-79Cs{yKi$1+=h8E@uAt%v$*w{(H&?;d{y0 +zoeJy``#sblcqY9J^vQE+%03(m^@s_GNBIF_c;fYlIrh%|fOBE)2kiT(u?Lxbr=ss$ +z?42^i7|11*A-<>S634sf5|kY*avyx1V|9ryHC=-Fqb7(xF|xO*Pkah};>!+wVnd!j +z_sbp*wSu27D#3mnt5eh&-)H0d|Ht0B$5&aM`F_2*kbnqL(Z(stPCyBW5~`ijsmQyN +zfIA^d6r5s5AzZBSQelpr8Cn&>MH}c&U|QSK@fNGrph=)pJ7wk=CTK)#sZx7mT3h24 +z5D>IlcP=F7`+L`VlbsL{dzmxm^ErRyljL3ZXFd1lS!==1*J5MzDX(?qb0~+O<1g)7 +zzQL7aTLkvRWa@>w#CqU;JbU6&?<@WEi9G?24|%(#Giy&QbK`_Oe%F#-9={(RF51}) +z{yf4t%Cj;f=#M#-LxHLIU_^X8UFSOdmM#1*zw&8=eco>UZD+wbkyyoA#r|HXe>2l> +zQ6Cz=jyoInnitwfzym^@ig+)y=}eXO^-6GN7WlRlx{G*+IH%rSxEJ15)neftji$wP +zcV$R#IeT(q!U5{nA9SVYX#r76%Jxv=I~tk)i;^e0^XI1LVL?u!z-J@xujrs +zXdZLnL!lhk+%yNx2VR2T=XY)PJhINMzFl~on~V6r@LF@Zcd?bjn#(85UC|i0o_UJ7 +zEYs`&&xfNcd(m%pOl`gyTI-MJ^_j=U^9%anc|PN$XSTL<1h{T(=Btn+A+AebE`aAs +z-WNi<G)$atalixLFSM|)zeTt{_$XXI +z=*r`iOONS~>u&k`eT8H>YDRmh?;444F&met6=c9|!XJ$a7p-xla +z)kLM&po=8wG**8eNT+$qjTPd1>lb?Q{b-%W+R*T+z=r-f@et7i_dd9+EaiiG@kV2Zc{?E?lU54$Td0*l1 +zzSP_4A8)>!X{))Vm|D)KA1K_7A9{XzX_T||&F^)`@$dbp?Ih&W{PdRSg7i|(*5~@~ +zW<;8iOM&i*ZHLe1b@)(UUybyza{M$|$e$6MEv-qvAbPdiql+2yz3w4v4|n(FjaRtx +zk(4JWr%oTdN+NQKxgvT(mv2j1gmObCA|3rXC8zvvXcTkI?`M$8+v{F +z)Mj|XHr@y5<44<)B>zI$H{R`Ogs~*Eb(UE&Tk`hS4;kkl8AoTg`;YU@0mjL4<7~On +zj-#{M8bf1U?Z(0X5TBg7jXd!wossV-#&vns^Io**)A)^KYf9JWe(fsdzHzoQ_Q^p> +zwr1t@6Vmm&)>_^Z`XWMIKlDe4_vSOl(AE^LC)=8zZlBluYtD3rbR&I6KFTjAty%OE +z!uQ3v9S@ofcu(^UO&z>39<1Rm)^Pox+U9W?&Aql}<+%gen*Y0#yUhQBw&wZ*J5Sk~ +z+03!Oty$&DWosrX`j(4FSGsc9n!Edzi$^bY<;k|@7V3!y2*!VITk{$>UdWeYj1~Gd +z7oo!sgijBrC*f21r6+_>H=Y1KwO)U0e0qfZ&glc-)4NH$I2oTV>4#5C=sOvo-bhDh +z9h8JmWMTaIeqeM{b-n<{|&MVT=%uQ!( +zrZzv0Juh>vRUKB;dv3&BMuc*a06D@1K+UR5kZ$SG`Ma +zocwK()TgTt1wOfnoWq;P9b((oM9--#E-({{WEb6>@qC+nx;g31#mb}8-zoS-FW|S% +zi~eM1ch?uO1Ajtn>Qnf}i5nGP$~Y-1PyJM%v)9v21mE#C;)UDMf1gc^Hcv-oCwk`d +zF=NKo>HPJLoi9J7yad^R>R;clbGEbY`V;+W-m(LpKYdS;U@kv$Cj4D_s43V1E4@NL +zD>bF2M-PIp)~vDc>Ce9lk%96ji+?X!)YP#stGraWU`(p?<-kw)qr|-Cn~;nBd3Pke +zSMN!twS{gkLf)N5zq}I^%+F(flhc~FX+PwvQqH2{Ov+EGvj&C +zN*?9XALO^mGGhaO;a&I(zmz6kxfnfkTj!wW=iC|fr}6U+>f^7jfQDq(2|o^2^~J$+ +z(ZQs9hdKmx;|Jzjo-cf~cxe6ApHCm;=Otcleh&S+KOQz80}r=38582+?ev}O^BfG% +zzb%kmhgb*sHqGM(_{w&(Cm>u;5HQbtg; +zC+2zJicv?VPYdICnQaTrPI&X;`Vr>RD$YFTZzeKm +zIe9ZraSughvEr4*UzV?Qm9uSg&57xTW1 +z&WE3ZEcRTE!F2iS(;_Y6Q+?x$)|VriZ*_7%_Qcmdr)~pI~pTatN3h& +z*~^*u%Zb&t64!nzdUp?;55)yv3+rds2+kp_1ZUaIYkKO=B$w%_H3icw{tZ+&1$Yd4 +z{8RrIccfsJ6 +z;$ebwaWnY;Z1it><|n?oJfS}9xR-MGh4A`7Fqd3>&l#-*JJVC5A)X7jy^K6xcz!8& +zmTF$?T~FVm>03Nv34Wgy=#F7tM7Y*8VD(i8hwxjSd7(O7|7l5c3(K=;BYGKVZ!=u| +zux@f+E0W-?Jxb2gD7db&IF+@J2KYI8`f7oVEFfoj*n^#z4a;Ct+L_x;iWq&<{ZZSZb(hG+h%^K-FD=zUimFw +zS+Wlxl-CnJXXQ6~jKALLkAK6ts9WJ3=+h12AD6;66z>xqw7Pq}l5>>8c;8Q*z960@ +zIrZe#R%Z2&^Q}*#Qe@hM^BDF*q9$NzI*Ds6@Q51pMAb3&R27Zh0Rbiv@VNz_KoumTYHx) +zC+1gocuwDPY^1fzTsbknx?TOsr4#<6D<|fMZ`KcD&YP(xxc>s*UvB2q`SLf*x2Je> +zDY~-!rPx^wieqwD9sVxqmqU|cDq7R?#L41qb9=@gR;T!08GVQGJ@qYnO|aTPpF_~a +z*RvUH|v! +zBFF1ze!qS$rk`IQ83i3JCO6frkxt^9<~8b9`ha+y?siJ!j)_o5$sxyRSjsl+yl11g +zpwk?0ylHMc#mF`Hoqucb{UyeftrXgN`Q(&_Yn6Vj`&!RPqD|f#EtE``oK>tZgu{CJ +zlZ-cJP(Yi+Li}0pPi=nIv$UyrhfowO=EH5=x-5EFX8vwW3|4J&VDc@ +zq_H7&^;h+!p-gC`!Ifv?2afkE7mYpQ%B7dy+^<|TcAqPkAGs&~LA|BSJ*2T>XiNGE +z^bpXMa)uPEEFspXKD0+R|IzXb(brd!##OxVz1g8YJeB+nOIr)QR^9--X|WaU4l|0=rmz3!(t +z*Gx{d)eB{VYYfFXw4cJ=z;8qRTK%fOaD4S8oZ2<3H-;@6@!a&C+LYmkq6z`mr&+}>r&f`lGdfVG1`1O;Bk8k +zpGty9*e1`_7p-ZGZ0cVC{NkoI@J$Qvb>BgE_o~3h@v+Y3fh~El^KmG@L@`0-I?2bO +zGmn?U!;6@|`~$_{R^K>ymGJKThGuhiGTZ6}_}W5_yo@1YfED1b_49I%mDI+Mj2C!@uXj<8R^) +z#V>fH+6G-OJ75oI?wecIJ@s* +z?k=>sxNrJ4pY@mAU8r2#?FD1esq;)mRJph_!Lc3SkZ51HD|{CH%Rh#1tmYQS-#3>v +zb=<{T8Sh8|dV6RWTOEIA(XiBE$o<9jRwo}8wL1Az(f;<}6^tkQBeZX2+lKb(F6dD< +zNsKxn9M>|Y^v8(wM|^m1a9>0R=TRQKdLg+5i|hAsMl!7XGujOUPS!t!U!^BDGg^6o +zHOc%Hu%3Q;eDby*om~j&KBUJY*O%rhdaR<)&^Ou& +zF5uJb;g23NN<4{}WBnE2;OVYyDQ%=XiFSv0g~&?lOS^+N9Fym+{0+@N!?hbhyV>v} +zwG+Kxky!pmO$`{&39&^SRpy&Eg^8ST0(r1N<#9pDx?i63IDKlb-iTX^4On{-s= +z4GzMNkj`Sf<{m$Ul;1EwKmW^> +z`;=cwc_>@xvtE7a9Q7&BS$K}5j_7R*c%d;v_=;C3rb0ea?Mu*g|2bUk#t3Qkr5TFJ +z**NuG1I+2Ne)a2<>JLkj=^-qluD)VIw^R4a0n9D@s{%iy{rkU=>(`jj7KUH-*pGG( +zlX*r4_M>u;(0%I%yZ%Sg_ZIf1Zy#Z+^f9XFW3mI!mLi=8zJ|Xbba5AY1I&>_?OMxbQ2S!%zFo +z;mKk<2d!W8NIOO!qW`duKJ@SU6TOS>Z>GOcXX(bK6dZKcGK0JMLzsm9G`hCp?OIDd +zZSzfGoM7E)IzOf}akuaWsC*4e=qo%Mso$q^J~9#e!^pMn!mEtMOV#nrsKmwe5!Ma+ +z4%e4`g8e7f_x3-oU;i&%I&lB3%zFuQdc+%*$mBdJheAs@LrI?5JB7uUMvAqTE12(K +zvyXZ2D_lj=R*u(NXhzJRZm@;1)tj{j+E$-oB8dp!XkTs0Bc+j^wU6Hz)=^pbJzU>p +z=BDxc^nG}0Vg)udaBLG(idQ->4 +zN&V%R^64J2V9rl9Uv8qT({ENk>O*tnH0b0 +zGu$NnTmkdW^@lLlLrHT8;N{kI(ot*bJJuQf#yZxT4?)`j{!eS_XcqomXG+chm$Z-C +z!(!gWE5S#R&ADLh;|%sR!dYO(Z_(OQrkRp<-tk?Mh*V{rQCOs$*YCPHk7JL=dF9h1 +z?0fRw(HHxtv$VZLR +zJ8xTe#I>D3n^##^GJLc7rh2va-?mQc)cUjzW9~ar9Gq|N3f8x`CEliWYrX0}FF5o3 +zyN0#yoLHXOSG}vKspC}BN}O|I)miL=`mI`{dvFgFHV?P+7cOhf!qqzJhij(4YR+nN +zmbk0W`ZJk7=Rn%?%_wpTY#(`MaQ!0M&IA^3c8_X)8{MSpM|zWNT>UO@BV;zb=KO;X +z77sDC&kQ2Spm}V#%f4l#+{rPtHSjx~FJZ2AzW^qg@K!JV!RT`4{T15m_KK^Ow~%Qz +zvDb&$r{RqklE-&rzod*x^`p$b^~S8_=ehL}Z{OIxLxx1#hTP~UhLrdV`JL(2mVP?5wltfc4~C4# +zA6DTnpsX|V2LFSU+S2)aE8yLcJwx~Tdozp4k)P}@q-@cUwcMlC>A#UV&M(UN78gIK +zMj31K0_tR&!QXo=bB#ZrvPJx!mhl}(XyfL>jQRfOhd$?Lnj1Dx&uD=cJ-2y;DXz*i +zP?T3?pg$Ge};t^I41dh+G*g@OmlAx$szKV>R;Z(&8% +zwDcnX6nr&l{QeBzJhMF!3(nK)oNReZrkP(QzFkC{ce)=4+MHwCwCFC`5#-?(@mpnM +zsB;p1r1JY9@El6pG3l@QgMx3b`Fr`6#kaDQSH_O!PP*5DV=~_gWllEpIw$>gKhgc4 +zjPW{eV`+@ni4i@3oavq4Zu)bwJdkb4a%*U?w%7fiVVk7UwuQD?d@D--roWB96)V&@ +z(!#vNS{x2z4yDgM&r`;~^imLBo6G>0h{_P^4dTW=Zoh)Db +zG(LVmbfLNJ4(d;;lK(Wh{=d5Vty69NuTlT^N&CGc_e+=QN`Tn8be81+#FL&d=&G_M7Xx_=N+~rNGO7xrmO4mN(+W(IBl69fJkjZ!5 +z$01&yXUeLDv%*vHK=FRbhQZjez^ZBlYYE5JxFIixkN4ZA=&=di0&SVe)x4JrC9H35?t8=5PQ#L@IY*%N#t21GMIuTcAj;oV7K%G2SXQr$3 +z`o%}DJ>S)t?&>rTP-n8MGsV@pcYr#+t8;YCV%ym%;eg%>wLdnR>8TO{=+{3{l>cxx}ftxRz0q@H#r;icag{rP9qE)snY +znmZm{BTxcy3g1(UXhQ4Q0pCmOw)L{9lSf_M9~07$)!FtJ&N|uF +zdGBwUI&=rj@z#{hdsEQzQ)|64_}SWO$3JmBV*XNs%mFb4MzZ<_#5%AtP5JXZa*sonNf +z?+eUj2Kr{N9(uNG7YWuRIbiLpWd0TEqRD#rvG~|apSFDLQEatjJ+v&<@-gOA_nTwz +zu?T$ZUfN#?~wO|@;;k-qP5MA2Z_%l^B?(#tS+ECu71~mebx}e9yMkObd^)p +zmk*uQwYMd!J-vrE$Hkxg>s}u8@qRq$wIdeJcT-0^NcX>ov}(**T^d{cO&V(J-Auh> +z@u84rWj~fV{Uh7FQcX_MHm&_Ke$<~Kr%GeU_9{1r#-g*sPl%;lX2)2WKE%&toMLEF +z_O;5c=B=`DwkI@4iiTeFHH8 +z?r$rp&NG*^C+m;$&E=V{$HCipf_vO9J(~^|`SlA0 +zA3NuKzE9@I=jYEc|E~`){|d(Qfp;>T1!Kuj>F8F5&)plk4j}%VW`bv!m?|tEL1#MB{nbviK@ZB=Esx)ydzqFMz}FH|;tv +zVh+kv6bytHQ-Evmx2v1(>J6pdZmF?SH +zd(p{G>dQ}%#XL1eGrHD4cXtfed{yq_8`PXr+?=h=X7N_zRna~i%b5JiaJ)MBRgRg; +zc$3<%OB(N*0ml1>k1$>~?fd#B@6WOkH>>>t4Ost)GxBuh~3)cvDRJ@em +z)bSa3;6?aUz@Z~qW?m1Tn96Z&!jDzy8y)B63RjAg@nk*y$esgN +z;hi(Ull|bydEm)@@MJ%DvL8Iz|F{oN797F(>Rz4A!tWw;;h!{zp>7V?lmV}|xb#-x +z9d5k`CN^~_|8)j@On4ITKfZu7vD;txST;ZSqc(M3AQ`>y@icP-eU6S4 +zWT>w~LTdAZzM|aMfRCI0diN&uV}$;bvad77uWaA7^w-Kd!m?K4vOjcXt0~j|sxR$v +z*pJp*5wz>Im&EhrOSAkgSaaJSx9+zJ7rJ$8y;^s~6gQ+X-tpFK>9cpu%%f+%^63h; +zTK5RIwz~7fb=xwn`%A7YPFeE0lluzgR|R!;!Ha}zk^x%(iSG9>_6OO|8HN+zLv+3X +z7sGwhT3-33-NTnAG<7KFTV;8?FQ>I?J=5HJo}^ssp)BBi+RL!Na6KESlkLq*tmh8a +zFL|Sg?-Ud$r(n)q1#zvh%v{no&YM&e4sAx|E7ND7mr9qa@GhxeMI3E{ +z;%LN#%!r$(E7o;BYafbjj?PuRB7IF1yRrp8@M?U@)u)+p?WdU`=qeklPc{2iXdQ+; +zt_(B3?O=DbUA}tJO=!4d_;Y{exBkUZ#_7~n-P60(Ce1P$McpK +z{jiROniK0U3}oA>%)<}-kNt7xe&Ey_16ks98OeN%p17;`a|Q#%FA`S6kj>Cu8KQ=&zJNlpNhd5Iiib}NyyDfl48Z^GE0WYe)?cHw^Q +z9gjWl_DXvZ>U!EM?T>5+=^c~ZK3wef;oj78_F)D0`REPc$`{V`E{@Jm|8#T=|8t)# +zakU$O(Hiu-eXCD3#g*(YddsrDaBXY(oM +zx$m5620u918yj7jJ`TPcU~aXKyTj&M}>`Ejo;s!rnyco7&Cs)8FL)9gl^?Z1_$_&uX4bdKHzFL@eZzvWU=138 +zUk|SNFkTk}zS-u2c)q!Se81My$Tx~+nab7ZV64%Pd)^p7Vs5FYPW_qads*gk>UxQl +z+;zh}6!7z5YctK|HQ~8{>~G$-?mFi?LIxDRlqdPs4GoS;{FU){+Ws%EKh_v~=rhgS +za!eV54ak_srj0VkkJ7VC=2&0+^@Z3n>rM~UhnoS&EzM_(Xq8(rQp8oW9`vQ_DcH{ +z@~dzUxgWcpz2okpx$v``stVe&$G~F|a=JW8PLJu4)7J!h_yW9haocI$)HdVI!zQ1o +zJ#Al+et~}xyzFG}9rpEn_O%*2`s8-Kr5Pcwb~UE3GV6BF)j@3P~UGp=%61{t$6i*pD6$zDxG +zr_LjuYs|q-Kji-*=#q->19S5C%YDuWuK`br@rkxjZzFe4^4^AM{en9FU&Eg8_p6%} +zV=8y=+zBVnaX4|{oTiTZlFB6O*1ED?ls!vXe|*`(_WI<5Gvy(A5O$XC<}I9-#e_@Ahr~53%0%2gdYmznlNd+_kAY|2^(IEX5cg}_HoL*)S>Ta$TiJ%&I&Hg=v=I+uF6{e_$mh|%+5@}5 +zzVOMd6~AW<)tep6bQV?dzR>>E|FY*o8&v1s`j?&IY(4QK;eurLy}SpLj4L63sTytZ +zWeI*J>Gj&jO!!E#%{6JvGWR!L?dE?Cb+f>kY;Y#z&%zhs&t!))w5`^9CQ~=mqr-89 +zKiNSa`ElW<-7CqRUOA)v%rxt(r90X?vqg)8Ynr+1OK&6-i^taJYwNV+YF_7&_c|UK +zqWGy|2Yu_*QpcE+z*~ItSnlmw%)ZdBS7Vg_p(*^(59b9ME$M_pxPg`a1`|QS( +zy$F2dvMPAY;}yJvrukQXO)!5OJLEv&5XYaIbF2^XQ}7^U?Ka`v-+_aw6Z%H(rH=aH +ze#YiX)*FMTdg+Bxa1c3Me3$x`zr}}Fl(C+$9sk!XqOJCMRA4V#e(jm@3E{z7Z)UWT +zHO=VJR}bQI8&ZD}ZGHw0O75LZyHnPfnDIC;>*S;I9?E#LIvl4n($s;YqJr!>dVzF7jV__Wh+I!7s&dsHIXchq=;d`DehS02$zl#8z=w;k`=Hd7Y* +zQ?tmeS~_}Qdfz}j?Q<DJB2xhtFDA&30p58SuEb +z0$P)-ln=Yz!CpKvpL+a;zfEXhoPfuP&W=T6;tz?lH9t#Vn&)nKd?oYL+%%sGXe0C& +zLA%WFKwyi9`i^K#G`19cd5!#3!7a+X9;RREY3MfSCHHk^Ze4`#aBN@2Qs(XPE=X2Y +zam@nb_s}YHI#O=7wux42N8W^e6hXJTq<%DYc+cX9=Dh3P+t$rShY4iQ*2Td&m3s%< +zxtM8bv25mYuIOm%#CTTKbJc1iS}o2e~fIa4Xe(gjo!ZWd~_Q6ykH~q4(NqF>7kdg0bU%9 +z6YQgSZ?)*9($Py+)xJ$y&u^Gp0AF~NNs|xu+D@}Im)!7PSP3>;Mq1hYHR@+>O(T!b +z`UyVsGYhM`DGze+T$yyP9WUClrIhKsy4px?K3~yGM}huBxiOz)9oMp^g1Fyd{jNJ! +z>uw>*&36iU-=iy}rHyw?;%(`}0WAqPXF^vtE+oCo+F9UJqxhTr31!F#-r;H7l6Fb` +zZ+`Fg|KrwI`4xu)8cSn{4?IEtKXvt)*1}*x#@ehpL;3)yCiuK=YQ`U +z6H}Wd!F~{{r|(+qR)tPt-H{FUNeenRt`DEo`K +z<}=Ur=KeK4cs>5$iefLlfSkmsEgJ&d@@jZn>Zwfg3O+e(Px9tAyOHu0-hLfwo%o{Uy}*(o+f~ +zXEe8Dx;%WQ&JQhHH^h`bU6#?&vzH|fcDr182&-oPr;mWnz#Z0N<v%`r&q=?> +zFJZnVr;ovhc6Oj|iMO3n>=%b~6(1TwpH1i?SLGCcFK_m@evtd;16TNatzr`|qoZBYHi$f7s|!ar +z^3G(#jcFFI@|oA&&>{Ln&DR1S{gh70iL9;L9t`z9-W)vwPpn?bJ5Ss1cs}s8iPnh2 +zfJc&>mL7F}Zuh&k-`yW;>R96FTQW#>L{lxBZTS|;D}W_DrA9JnmgEF@bR~M0&W&0+ +zTt+*G|J2v}yfJ8E4mcl8f35&OealrQ@)O<(3h3ao-XPx7(ftA6sv2`}1wMmT&XbA` +zZt!OWxSLETV*=Xf?*3&vXCXSKd)o_)ITxMkQ*}A%XGHOtfdA%cy~&yCn^?}l`LPvu +zMq=bSLr<5)1+T2F(Mr*}?m&xXC>9$*r_HZQF$;rOq3AJZaIWuN9|`QPIm{som}Oym +z3ZC@QxS4U%gM4>O6IDsFXEyz@_v^B$>vKOZxKa&{Ab0LZ?rg0FC(w<1^|iZO_My*C +z>3nfgPUSNC1y=&R&c^N)-?|bQhp^r5&c8^1%s->4V;a1RoJVwtsfk;_XU}A|HSt?` +zueDx9``NUg#r`O_-rB3e0b(S?^1^*;J-w;p8?+1YPdJwX?meGs_pzDsOowlS0(@iL +z@a(LuuRXMob}ul8nXdih$JFnXPTrR40_OE!UXayZ>hwtI0?ey^Dg8-?sQoNxUvL#X +zMU!gxi#y0MV2%mS!QA<{i*G`oDgEd(kA7+cJ@dk>yTr2QmAbsxzI>%EncG +zAIM1qU5Z8}9}BUoiO0$}^%xro$G9 +zm)C{%=kC)&c%swX(-)TX*B~8P`bKJSe!<%E@)H{DW9Cvn$mJBQryrj>S>WYt)}Dr6 +zD>pqe=JS8f2){@$4)=@q)*6Wiwh8tjK3bUHUsFauV}Q5xQS`-X=?H@TKyV*P-4e!< +zUNF=f>T@>^_&lM?dnT7R*dmBYy(7nYe)umsWI$u(oO@NDBOSkzU9tOAYwI2crn*GPpcPl=e6~-hHnN6SB+U%saOJVsz1e) +zGpB*iKPk6R=bt7c_YLuf6!PDB|2zpNUO~U=mBX#rr`W!UY;Zjbd7Nb~sf$1Z)0`f= +z^AsD)RZQ$y=ZfTS4)N*ZNox!7sfs?dKGC6F3pS6l1BFYGtv4LkPC7ThY5W2B$rMY# +zPU!N?wOzoc>uvbNRmha=t#`MZwB_yDRadq*kDS!Lp)ITZqIWFcn&I#vlX+k=MA4bn +z*f9sTF-~E;AwfNI8?Zl_H)F2d2v4aNJuzqT@4#Of**Z9&ed+hRUa;eB$g(~Ol}&c? +zQ-0NpcG>c!l=D3+g}T=eO8)yj96rlW +zWzt5q=WQLr`p<3**RHi{{affqJiQ^%?YlPpn0EPFhxOn?sl$gV>OGKDCS3TQE4!Jp +zXWV$=$1|=wnjgog^QYj4{}J#b5B!+i4?oOV7C-boZvgz@`+)dy_sPBZk>~K^a7|zQ +zD0I4o@M976g&%niKkU5!`|)GTiU3gp70|q +z6Ml?y_)$t(GJZV0=xF@NqmKM+=&~g#>GnLXc!c!Y%aA1@{|IwR#B(1Gbn2{{?^r#q +zdk4PFgtN7GpVZWGFEq_NNP*l_**l^APuVvp%XVe?*ePAEtd=qwK)2+q@5_meFp-z4 +z%#a$%V$O`>SIw4nH;DzQ8b_sLUxpC+0mm +zHC9C3EK|K!{AUMeOYte7cTVYg@amkzNy{b$XXtNDnLquagDXlVy4civL*N1E&wqtK +zD;t|@YQS%zHB;b=yzP6Wqg!W1d1s}H+ad0V^A^i~^p{r7X`RmCLn9*EY-_D +zuDmyV6}4K!;EbH;$4%rJ?N9O={tLV1!`85iI+~ksd`XD^%;87OA>_weqj+){V|to0 +z?S*^-L78h`?%L%NrP)G?p$(p^IRWe4A+zhqlGf<3afe;#r=b^^MKbe2ryiu4xd$dCTMw(AezsO%i+ +zFLTge%C_FxUcU9p_KF>o+MjT?&u(v?hMgVJfNpLWWT4};}s))eZ0$?z-NdQ*D{!w`N=4t^WfkpJM|XPC!Fg`eQYd;@!m +zxdygWNMp(HyTZZm-a$%5@6ytAcOxD`ERI%n9t)DMu8q +z^aUs2Qx3oWFxX54Hp2fU{`}bf5x)sc{fY%dGWRu +zzCZchKH=o&Qr1$Q*3@wTnIv0FxVnWt>gYr3tY8k}gG=ZOIMlCa4nw_iKL@$Ama`M` +zXMGZwQ@^GH7+JrMjh!{4TPj~*3pQSt)42|(S{rwAAhUgs|uI@wdd-eeN +zF4~%n9k3aj+vd~0U06#$iw@eosiPm1^OnudPL{9m-|^QdE*7T@nBgN|M!ZTsDBbU% +zxRvH*>r_xjKKPmF(uMr&_^z`#vgp@yYpcbE;O=mAkesT(xAz==J^A*gMPkoj<5%F5DrW!mo49g~ +zV7|p{ZO=60Yq&=MKj(hrdv_am3!r;&uO#DX?99MNw5z!UYH%7|ps%m7)#(Olet9g#toFxn2Rir(A1>e?V(vp9T;!)*@5fT6`RH1H +zbLu(e0Y2Qp*>>d~2{*pXZ_QJ-k@fSsJ!GB_d)$|V{w~^E&v}-i+)LtlmDpCJ&}pJ| +z8J&Ao-Xm^) +zxvnp*IeDH>7;@%Z?E5doRpC +zTA!ao-~UtiRn7qXYLJT)2*#Vc|ML9mMMqmcV->?6{#brB`GCdMMAy;$s`@co_7Y_u +z#;>+e=g-NnwtIH$a{B%6;#V8pmgnVE1%8#rJpUa0>Y?(Z`BhyX5ibLTmS38S3o`;XVa`*x3BQki!H9@Gp?nV +z)`y6j!nem&Mo)gFFm>8k&hPP?++&^n8-gtJOffPjw^H}pdc@mRFO7N&sh5^s8B5Jr +z595coBmBP8C-Z5<-s;B-2n%f8H +zIy$#uB8J+QuO +zAfF+y7h>c-DJNoxa@IIUdFeeCw)|as+!MUj{P_=&Y%Ca(5N`eI9eso2YtAAlyg6 +zKDkZ;ePKcRMqhf4F^|?~2Jb(Q3GgQw2Y6?R_d8cae-6B2=p(uKLXc$@4$h}r%Fy;pW}po=k2 +z@iWU?-bu{iT?OBH +zZc4aUt!+F1(A2Rq{jKQd0$jNxI7eV}9dzgL{=)C}X6<>FKWtsyGmDn@0X#?%nEHja(@OvhL+-&kzroqQD +zl^+2w>mXl7eMu+3)B8@$XH6C6VA~wCHLw%Qz^~BOiXoqCxx@(tt +z?s3S{r>gbtc7|!*hV7ZqT^5`H#y(f>eF1OxE^o2-M_8O*>qU!2o7j5XQ2@C4YeU^!Z*(-*o9Q3!E@+D~2Y5hyxHr)+hew>8 +zL<7R_O|EUCdtyU5^|H-Z<1Oztb&U32iKcq1*t4gxvzxbtxGz~+W)9u+?@mVnmspoc +z#Azd6kK#dty%Jx3vDN99k+Zn3@HOb5VgNcQqmAf*H$+Zb!r1r|@agQw|8Wr7pMYPY +zv?kl!Oguz>k4x$`2l*vJTF;_AJarxW3tydEJ&;cT97Ts}KdFLwE(JcGSLkcbiSAdR +znG)ZFX42SO!H)Y_663unbaNy2v|ur`F~uA2uS~zpe*t;J{sev}%|mok?qH|2RlRdG +z-7Mjo<_`ajhwIWBlh=lfIBH#!Y4@DN^MTGMWd~!O1@ADx>`%+@zKPuUFu%Lyu+8tD +z8R%yBbuRgk{O+58oASH!iK$*itSF3cFsCEr&IS41k+TNQ@6PLqlkP99aQWSL53+Mn +ztaLJSITM_(Aiq0*fc$R0_sQ>0qyFX87d({TollH1%0}yA$wj)^9}R6Q^37^ +z;<0+ue4t!y3xk1U5XgiR&ecAVn0|<>`NzrCuIQJmt#uA%U7|b1SeGQ_YVUg1u6ys> +zHdi|=Q#|NeSGJQf`D;WI$IEeln0lfS_%b;6+D7@01Z(L_e|v3T{=1aA(qksW&xm8V +zdu6&B^5Me~@-(F<`S4?CmOFSAza1a1;2!PiPR1%HYdW%^{xmy(?odmZta*t%`klo( +zbN1-|l3YK>+s4^st7mM0C(niF=9_ixlg-3-`X)xUzwjiNOZxgj<+aUAWW%TPIftn{ +zBJNn@Eu{x}ZbEtBx_fX1=NISKOdy7cEfDb99d`xifX}aN5)TMz%ib#?zoRF4T9=%g^xieS`;e?(?mb}7D`Ov& +zc*M{1llCQ=k?ZHNFOviLco_Mpd+g@IZ%f$gx%K3fw&fi2_Dcldq1U5{#xY;#DF#5_+fFs-Oc)R!67_iDFv;UgA;`OUt +z`4-Cg-jlyp$N%s#E357KJ1{LWM^0=T<{z&)Kiw6pLEaP_2sdmpDOD7Dfm(Q +z5%41her)K6ADbP1=zDAc{NVe5`0?{Md+{UY@I!Jm89zRgl;8L;^@SfXhaYy{|NZ!p +z%{*A=3FF6xe)yra3O{zgaWsC^CgH~jhaYv+6Mlqc!jCVxvN&bQ_;K0*_)$TfW@m>Y +zR|5WuJZQ*6=GL76Z#|Lxnl13x&Ez#SlV6kh+@$s|EVE||lwVWxrp5Et*Zby&*s%xR +zzZ1!?sY~Lm&$ZYwZf6XgS5{dvZ$00^>l(^suZh0`ixbMP$)ipG{F==J9!7zm1KRWm+zve{;zuMP6I{c28Uy}^KFFE*K%oxhAQCVJ+Z2GM$ +zA4xgi`{dVT^6kU&Yd#D%e`L0yZoAF@G$eaE5X4@?aP7V+YWxAoG*X1SI!>~ +z2R}-Fjo?*<-=?x(e$8kHx7S}eI={xYNs|Ar?iT7+0pl>grjGxUBxF) +zr7F&du3gsPa%v9YLw!3qTXW}ImfrC3)(>TVTd`|G8(|JU2l4vHk=!)(w4CTV0YuC?4M^#RYJx`_kxJ}^A|H7aOeNy$Ea$ZexIC=QiWYGP(BK< +z2=Y;WjBil;62vv|dulx!Sj!w>sl5??B>QHEGEePC3TM2=12=qB%u6{XIk7OOqyoDg +zTXLo5$vH91seb+Mnuv{#!oN2+ +z7(?xp7Zc{h$d9IeWydN<=pM$J&hKy>_9SVn)z}|i-FMu2r{gG1ag7{1$cf +zH!?EFO`+dlEX{*C@pn#DIdD^M3hQk7D)j|J`7QFU?yJj%`HEY9`+t|-zcB#4ui4j& +zpCg&ye+Ruk{8}%)*S&N!y(b>D>!;lP@4`j|=;}o-PuyXz#atNm47o59E@mHM> +zm5e7Q&6&kZ>i^*)OAEKtmlyb@l(R8|^6|&X*(kw3lUrGGLOC06J*4=N`m;G3=fVGa +z^C|8^CS@j#H*mhjiH*m(7UW*v{%sD&_{v);Q_PPwGk$S!CbyQck0lFDcPR4yEiug|17y0C)Eu}UrS7L9=RG5Y;FU& +z0bfQA{?f{Bmv6uwPp;2rU7zZY@!~)KRo^~G(C5(fdVhQO1N3=LPoMMYlei^kX&y(W +z*zW`9;Ywno7PJ+7`;a{dbNQS-cqx`1;_7f`qA!%=QE({s7Z$?yJro9MZ +zEqs0;$oY6AaX)MFcqd5bOZEHCB$mBUlX8#bx< +z^D9fej3_xfqQ6kL4CzO4<#F}oDWE@&tLGkE?B{XBA;!h|srSia(A{2IZ{p{6y_v)= +zG#|aOsl0aaF7jfyf6>yF#@I#OEJvd~`j2a$hhD7qvs~No{J7d}=+`be-mtV^d%c4& +zi`cuyzmoWZ=AgToGLz;JJ5GOjl=KNY-@;!uoxPOTkli^j~2VPco +z{hqt_?S4qMao)aVHhcVU$AOVzD#wCRf7s+>?;;->$GCOL?&n(#-)btDo9_A$j6Q5k +za(j{8T#5 +z?>cgVHxY$>whIvAM~?+NAT<(h279{fX~e9FdJ%L7z5P +zCbAW2P^5a!;f`91}_{k;YoV>%m6H^33%I9vmy_ol?n}5QT5s~4cepu+un+NfGW~1LtpUA9 +zdhl0s(;76-(}0)uM0e}i^G4l;yN-dsyu(PWQ1~lc3i)b?Ga-Mqbp20T?VgpeXHUE! +zx<2tSm=pLaoV55FcYRgRkM=MeKZHxf?P)KrF7KiDpZCGl-tW5Cus^&q>0e`J6Gs)l +zzB1sq_N~fr{-1u;uIr`e?R^(%!T#yo+R<+p*f$Gu>m-~1Fu-^l=mY(jyF7B@ySP_8 +z^o?mO?U8UQ+@~;CG4zF@v#v1QEm(Z=zQQ~YyF5KoELk9W3D&Td`*~f=A)j$LC%sMI +ztGIW;cd@E$zKj3Q3D&^wo8RPkv5<-}QM}#eqLScLr@3yl>N9ewHN4 +zxd)STGyIMJzkWTxYx$|;XT#ueb-Vf9%Fkhb68!At+i%ck4iDFz5lu&$A8n}i(ho*W +z%5v^ld7$m%;9$)BF79_v2e2X}R6jjO*L9!tJq +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 +z^cp$&3ln#xFCZuX%J4aEu@M6PY-`Sdg#x0 +z#cwZ2qJ_i%aWpNA`7_f(5K3OnR5$tZ<_H@3Cv&!56;{y{f#W2sx69 +zyuLW_(=EVn_X@t5oWv6E)v>2?W?AQ-bq~qvZFizu%}ZQ{TpY7!1?Txz`eVEn{80GA +z`<#O-a_8V)-!wPlb?NIzJaQc+Umv+fcV{RzKcw-@z!rN8ebed&z3&O^D}1Xn)C~?6 +zw*Elp7PW}Y+GL}U +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 +zV8CFpwaT_`OLtuj2o-YA2pYQkke4n6vtsBFS +zUS;OGRc5{WJ#Ze=+DeRrZ0liS6=dfsDWC5)Vh3zw4PET<^_`wCeX5l#_+!2;qbB}-&l-LyZDF%GsWK`%j~Kh# +z$$wqkhU)6hkLZFS&DS#j=%^vh_w%$1Of&ZKZtgc}zR}|aWFER>TroGqyl?6D={*iD +zef6KV_kAB-%i}L}Tj^vGGqJyPY2}GKcKPKjdhXqnn}N*u4DBhNNPIZkJkooMFOl +z`HA-pSxuY>dbxl0(wJXw&^!(1qQ}7?WmE>V?5Z6Y`)Z+%O_7R{QJfeuJQXXzXCa6dHnX=veYe#^GE@b9bA +z5$GW9{YFL>;jkJU<^q@shh5+B*0__x<2CfrP94dYkMJyEoOe_<=042-vO)Ov2jr(M +z!Df%%MxMs;e3NXxf~QH&IXMrT^yT_LOkPVp%jV=R<4Npnu9jzh>6~1(p8SsRR2;j~cGACEA +zZ^=2iQl4ehae^}1*M{^B{H)^+j4{voH1qI3`t;IAY`f;st0!e5oIS|=+Ap&>DDxY> +z{U9_acU)y6b8^RmvOVk<7X)Re1!Z3kzU?J0@bkeL-1^{KPw*{E-2HEZZ^MFbzx2KZ +zbk_1-I{PW#gd^_#iN6@MktDaygie2)`@ZhaWv{-ub8^oHWg5tt_4~bknM_b-XYj3S +z*%#N$2y#)b4Zdv)z7=@!m7RXwMSTBY07I=e74e%(1^*1?i`Sbt1WpjvLlJEQqXI@^O!%5BkSI)N7W(ECIx0^V<4j`ChEI +zMb6RRx}d+sXZ0t&?E|O$vD^~$=j(0QCW^+J3hFnURbTqkw*vprr9u6l0oN+0rTJc9 +zQPBJ5GbZVMsY}nT_o=U9z3=XzzrA1E-d9I#xgS62pM{dnC;ja&f_@*TjNl}_O*HlY +z0=y3Q@)k%hBM(%d3l;RT#j1nO(nVSE{u8PLKR)i&^>wQC{9n+~)Ycgt?YFUlj&@$q +zu5`2rZ8mtYzdRLU-+7ccMZ2IH5jH2+fn4%qNH6bt(CfpuHTb&PZ)3*;y5Ii~zOJ_H +zf1#`W4ed!+`&`g&@w^WPa4hI*N!r)E@AT$&Ze8s*@7sH2WqBYgZ{eGCwZ9Jf67PJB +z9QEQE`LuP{1!wQFUn#9?)|y|+^LFQTd=NcDFY)$kl_$cs)h(3O9;0OC*to+z5h3nE +z8L)9Y_o2MzhDs;7cENbXzjwbwTwgw4o5QD=wVaz#+(M!Lan_r{p3BmIi0|Al(tW}k +zUwzVrXEi2c&g{F2`Fr8t%iikSzdGS_>3q`nitnzKo~W4SdVKe~%K;twX>^RI=Zy0C +z#*Q-aTH4XtU*h5ap4Nef7bFHcEeYu&){M=O_lvyq_zLieeNcLpS<_zVx1PHWlguZtAgH4 +zyyhRrQR|#wOQ381Ejh#T`OAA-4_76Ww|F*i*<>3M(B9i9q;ST@jl7>$T{9Gbk{oZrDZ{hvh`O9<1^UcCh +z{2#%u@CB`>+dR7aV;qd5j_`!t9YMQ^UC@o9JOS5#l;q5QMp1>P;R-^KS9+BKnx!Fe=4)_h2* +zYzy+2j7hJ9=g3R!>9g7&SE6SpANAXh!Z!J0jK&8NNk +z1wO2!uG&z2$s%%RvcI0l{+d{nQtKKQz2~Tn8^^jwie%>TN$1|*?q93`$fduH~YFoNvJcrnpY{`PL@fg2L +zCLz0#)AsP__+ZMbzVM-ZDJlHX-v~vzy?Nkgmfig8zwrBiYmMLMXG6LNV?Gw%%vXo1+4^Iv?oxP>tx^+@C{*Fh(v{hd14nhBy +zUF0p^(JnOn<@{D?)6cnxAN>7(d$qLp8hat`>x6E`xZ`Q7hx{?NEs}8Tm}pH~3-?h~ +z<(4@$(T^be7ctKeYv6pR$<5iM4;%Du&O_jjIf$QpCg;DmWX3-2x6kji8NRfy#X-(9 +zX1=AnJGS?&aBk)fm!$i;P15E}_TSJPI?Oz1_gsGe73{}O5|^Yiz4FhjH7{;)@y}rU +z&luy9wbi{oZrDpT+xq=Xl@1`~By5AK`t^ +zIo_A?{>VArA5SCy&+&dg?{nvPpXI#)UT4Fni}z*cc)ynSmFIZBnD@ia@xF!kqO%h2 +zQ~5eES84lLqQXu?->B%YW^->D_&K}pan#`+vnV-FpyAc+Gi`Dgyqe|?6>=#wMn4Mw +z>D+nqIrNF+4{q=KJo3p``rLyD$ey(#2gS9GTBhdS@w%5^1)K-d^pxLZ3 +zvf<7Cxj#OBryFRu9J(>4ZBrpuqoG9p=O#~YI0=oq*k=DH@lA@gbxVBzbDg;hxF4gQ +z-`Df0?R}r~i-jwyL?%?q_Lt8npfo{UfuD$Z6;#!5MbO|KqfD^Afw8^T=azNxM2X +z3AkR#**ITj|0=iK-pw|+Dz~=3n?7FqMv`wA*~2dPoQ+Omztg$3GH1P8+5gPb!znYI +zXM|^jXC2Qvp7lKIc{cED;OX*odB%ChdCuZFi|1^fvw61gY~i_(=R%%~crN0(nCD`i +zNuEibDV`~w`?*_ixvh?e?2VjRi$#~&X^d|Jyi|pb*vQ{)xfR}d?#D8{tcT_HIlhnG +zth`DQaEI=J46ADAeh|(PyPgaat)5L^<5o$oj8E%6G5Lfz|47XDTQL_K(ppa*9f*B1 +z(D@{Dw5E%03wY2v{?-HA`$mG}zo3rn`m&X3T~!Qx4A?7{xXe6=t-RVz+i{HZEzVj# +z*fpJUH*(f8N||o{FT^q{h8aIYD&)+FkB8pHgW?zQNkLXhPKth{Kf#mnvB02&z8kR5 +zZ;`$1Ju&`g;-&wfZ_t(I;^#>7>9m$PM4_h-dwRj!TVzWt_+)(9ShZUIMCtnj*au1n +zyxH>``t=X3^zM^ltmD)8HD5kk4{U~)fCFP)7C)c4M&OeIUlw55NgLu#QgpS;U>(xIy=4ymRfTT +z#O4KXkuBsz;~BkP{_Qf_1ZG~0O7_GneIe{(miUfhT|SC@F6i8Ro;2;>{OEo1D_71iE@+FZ8(q995b(wuFcWVNbrLj6V}rKhfy-Y1@{@6BQx9 +z59MS1Vh}TS=}5n?;q)Qd@-(zi7>8oOh6Q8EE!P+#IpM?m&KkBYSO@NV%5P&E@_8=n +zmKi=W_Y&okj_bOm5%v;;GY^JL_5<9ZC_Ps)N$cUcblu`Rn$%ArCh1CiF4r=it?0hj +zA!`+%q&$@`1+h +zS?`kYL51g+nvqmnKMlF)OdX!DykNH}?mtC48Y}bYD8QlGJ`W6(V|`}kI`$iXAIx3r +zCEmmFQ&81>jINSw)*j1b=Z+74)EddQmc68jVwAe8U50lS94kOqHyH#Sc9W=*pCA{=|r;h!|(rD9GL4A;=tO7wRn4r@^}gc +zi}5+=Y>w!dGY}c#;xhXJdglMM&PCKQ=4rsWgnga%t}jCW)@g|jfL~tl#yOVw6ze|A +z|Jx{E107mZliN$#LDZS&bVol`q}Qnr=>kta8PEngT?_D3f7zt&gxwu=OGEBW(AHk? +zw#~e_c_jH?{x^KFH8}S&10JA_)AS+!P~U?CoFf-lJI5uP=-1diQN|pqC-&(}$LB@B2Gzy2+KA +zI*+ndQzG~_FGnVh>Do%)sr*jz2uUwO=MDCTs+XZ&D>B)bE0bo{PWUF>D|kDllcLhU +zH`>-7`ME!6LUPqjw=}2PMSrC@;mA;GGcV&*!P}ewy*B56Lwj-^XIV`oPVl>Z=oa +zb?NVmVUvaaJ-Vo8EVl&bgR1S7ZampY-1iJ_Azv{1@7pu-;eZn +z)$#ASMbCt`t_0tz%i7GIeBJ;qot$V_k|w8^6+-%f5dnGRNQdF9h!?}Xs5<(symf8NBf&9bMPD1S?>O;2iIEPcMY6>&;C;F +zSTmp4!%w+eL!Iz(ZL*1VUN}1H;dClECC;HV7HvHLU@UD~x_6hj(E8h3h!s95JWqp8 +zuf(qX`(=$e(X!4GNnb74st!;`wyJL!-&XY+zl&{EUuWEVna2Pp8=vct=cja+yEv5X +z4s2J^ZVlzX?G3cVB%iQPP#lcuIJ;F7z8CefMZfajJQs5y)A| +z1e~PZQ%g*D5B*7IR${}%j@dyz;*JtKpEgQ5LiVxfRd#x#+WLyUmUmyyCyUyi)a8UbWFC^3cx7VK+kOZH%60-sH?&s~d7AyPvTx`xJkTkt}~c?9)sc +zZT`|*uf`^YFX0zkTlW*vsqpXo;gt6LetvNAZ>RRi;EWs}@a(wc!`_~GTvFduS2-^= +z?lNLvoBk==hw`z3p3#y<_Msl4{rq7ljP8T=g|;g4@G +ze7%r5?@~Sm?7jkC@_ouB-y;U+?wxcl9@pdNbhdThSM#A8v&oIfVNj +zo5t2E>B~gONX%qtYiIZHA!!rl05~P^21C0F?N5!_iq{#Nyg|; +za0mmV0n`z$E$^*qA*O0YPTzP3tyFhbi~mfC$BUB5Z_{Ui-rjzf+}_Zc=vnu`=qzCc +zI-z3Y&!)2``u{i9vkGTglo*_Ng_BHFl#X*RGs#_oljveC^3A7(N$xAiQ|%|Rz+;Wz +zVSJm;&it$0>%n~!bJo2j#kP`d9$v?K>&9P#bMg0w`dK$8WVkMM@hlKJf4Vt+d|GF#AJq#qV^ +zL+OR;b0%^1DleU|iSmC+CsdgT-=#B%9=-tm71}LcuTC!B-nWo(OGatU(j0}a-yvso +z{$?HU`Wkkk0*-_i*;#~}f^L^8;@1rA?ZNK67oP35ti!CGiV^hnmIOF~Hf%L(POGcj +za?{!O4e)qT`N{EdVAs?4R&t%zffr;&TK+-JbKo7FiB`LwwcL7o!Q!HRucqH)`H@+b +zFYuPNV_l +z9dB1B`;!f7f1uayz|2p9+j**uIzuZq;41SUFj@&)muLk^w5L3$D +zJN-dDZ9QW`e@lIF&A7Y#z82Hho8CU~y>>Xo>7=N4A{5DrrjwF?&NBCoQ{>|EY>(0C +z7m-yZfxdYgZFqcAq$~XAC4L{$6^7Bz5cVos6SW>y+k4%9>c~FuccNYAUe@u~VqxQE +zg%ib3g`8c{66AP3A5Df4cxv6Up*VGvQam4YU2Jb)&=n{wwDdksl>lpi^RLv +zPDv&-refVH^?B}w5p3aItrg-E>bQT2jlRIU$a?HaT6^B!QqW)Fsl-6WBAHGM6}&tX +znL^A0vi;*F{yfLg_SZZ(_%h%KaSoRCp!yCszRam6zme{{_x*;#c^aEc;hrhs{jJZ* +zu4x#@m-F&BNPZvBXS`gm1Bt(TH;{imoej)%d*!bHr_Z|wc7zpuE2aS1-+@#FcYdTZdqR5%$Wqwf_v6Az7vQN*-%GA!9xJizjEz`I(nLgAE2b(c_gZ +z-jf`Q{rWN=SF8hR;p01$wKnA0qmezH%=i)OePIm6vNuUt%?U>{yf*JW`;_I-#XRSk +zXuyx%f1V%ZyX*G&@pJH_`0z8#Kjg({O7|5l9^6om%}r;`_MtcKH!tQQc4lr7>v9rW +zxz4k{y@)+~O{UJ?_w-_T%ga4!XLj(rV;%cz>ErvjFI%wMie0JckUw|b1-tFj_`E$j +zh1VY<*RUOY;yV}l-`DZ&C~JapL}uv^WqGJSmWl5f%VNHB#ggbB{#eF8Ejd6= +z_Msu}MI7QjvXyx~FH4U~}$;wIXc +zZFRflYz;L1NgK&VOx0=GAis5s8UM8W@E;H6+X=r)Hk@3vojVK%XZYTsn5HwZITULS +z%4*Ne95eeUt8$L*ba|KAN?%$N*!!hlu!?D#oCANG2ibY7^Up-DMGx@WJH59&7SlM^ +zJrU5)aNTR-?L`9Vp~GW+q)F}NXKHQg8eXi +zPWF%E(}J$Qc&?}hvS=qu3Q +zPI%1kL-p4L<%XSAzb$xw@?O9Gk5oU%4U*44n$vxc;#F%cbB%UQYfXS-=V(n +z&3EVtwL&;bRTO7%tFN5+wwa|wLvts;v?GH}h8k9Nv`)t1F +zi+G^Lli_FfD*Wzfpv(+#eLriU)*!~7*$wUZYtlsccD&cGWWwrTk7KA)EK^nl?~mN+ +z%Y;3Qr=Vx==6~78K2F@Lp2l33ybgW+7UsLpqfcL777QXLF$m+nh{ +zm9|BD;uFC#gj~EFyUJAoU7z9cLmn-ujRK#G$3?@lXhUnR>QD3LyELc#ngu>D*0C<7 +z>@^+_4en4|!jtfIHjICFhtIza%;#LX+DpNA^)Fh`_?OV9%KBq`uO0aDp!{&r1N0?7 +z-0*7@&%YD>RqMFs<;(cX0=O@tj%4}mz&h!zEsvt3jc=D6K6|`PlwHL9turcmxOd`d +zpGEQ9Bb0fi*Wcewr_Dyj`d>U{ztG-k`iY&MJSvQ(xbC5a+xsR_c8Jb@^M4QVjEXtd +zJ%(jo?4*BZz(rn8hs)E0;bHl6mEYRhs;FYHTD`rlzgI7AJ4Ji)YmM%)KbwE9K(V}$bHrN~Vy-Wwf5`&b>BzU--N>_yeQapKSmL^{seAE&*wl#! +z96(vccI#g~X8#3V4jW6f$=>_TY31Tjeb5F?i +z=&qK037jKStoVuZ$sgzMZ_Z=CNRFIO`7!>Z;3vh`Dkctp3Tw$xa6k?L+Tbi$uiDWa +z5q=(xe5{YWRA<_WocK=A&QKHCt$Ow7;G8w`{8U$8=$B1V=3@FWrWu(%ko%R7dhHeZ +zvF5rHhl6%+p{&NjJk!S93%x7nfX4O5=S_;w6D|s9rJ&RFV+Sy-?-khW3^~kx4Sv+0 +z`0^_5gek=E3SUPSZ0`%3S>)e(g=f7N!z-~npwp5_ZN!swJ_uPMi +zuU^LTGB6F1b5bZEJ!zeOv}bGfDjdO!Zg6~iWRb~PEVeQs5JwByF-JBMQ7P)~PB +zh&+ULxBJb~-R=XW%iIB_KXfm{-*?JpPwUg@I-VUw^OYXEFwkQ)#~(fB&xLpBA?yv% +zujPlAULu{yovVG&_>L7$D{*ll&L$<@pA(OLrR+fH*X5kUEzVE>6UMLn^jbfGF*yBl +zem3&H%*^Y$iaCY3A4@sRhnr)gD`@Y!gxjp~N$(ju)gMczrxVRgf2T#b?s-b%07u~I +z-jwh)GJvPx{S^A1?y=doV_xdJybn_*JZgTt3%Ksvu?#-AD_;A?Dtsu*+zr5A{f9T+ +z1s^2+vifaiBzTt&{vmJQ@=ws?3hWBw +z8RvX&U3t_-h@CmenTZ#r>xe$vp-(U8JM@X1UD6I+wnLZLFJEcj7vzCM_UFRSEsxs) +zD>ys4%*B4bpE0B^1zsU%5@W>oG-`qPn7J_SU|he1hxA)Mk2-u)8msQ{Bldq+pmhPKur$?txK&Q*WMM>$W+!|tMuIHOK +zj??y>L#)qhGNR3zKcY?YUqYLr$H#Bg`GDmCO@`g~{~4Mb0IZ7R1y(r9rT-{+KFB$N +zgTxPuR+pTnRcxMH3ba~gVqMsEHdmMuk5RJdN%LpX=d=fZnRB7DtZf9Ir_ZdHfjiw7cQbJPQ{x+_Z{SHXR5;W5ckzngGa38- +z_vZU!5$}>WM6t*n$xm+YyN&fwd;?!}{gv0ogv}pkp4Vf0FXSg)Yu0#nShe3$B-gK| +zek1a1GW-9v9-Y6~e#NRteDepYn$9;zV=4MjoqFzAsW5|1jN*KxueVLueDW6U1AAiX +z>jreO;{ML==XuJipK+d@;e~egnVXN~U)`fU#pwU#n3F+U7kgt~18JBmH(K5&1Z2S3FbYOViF$ep&9`e)Dc(9Qlle}gSaZK|C@n}znMN1Oz< +zciK`rC-Y%%y)DMe!$CVev=fHU=Q-_BojoaT&xf~k;5S*@d|Op<8?$NSI5z8$Gd=o4 +zPj;ReOEInr``_Zamlpb`zRsk#0^hGf-^8E;@B7j-=<|wIZrpy;jSG&OKhW4Dcnj8| +zn=Z3uv+P;q683zx@(Jip5bj83e^E@Iipv*1&OZT6JX$Lr$5;P)d*3^ZL9%?V(-GA@ +z?xLB0WK5QO6*UjVYn{wrnG%j9JLMz$Oeiv~(2oyy{78R-2kPlVw7JrQwcn5O)Ey4^ +zQMLu`1H^~EEIq@A;=$Za+xueF{~Yy+<3KKZYewc*j1hW7R#c@$m(XeER^+R`-^n-8 +zj@p)-De!s0W+53Po_?6NH8%BA!rmuIS;c46QeR`59kiqU$e@Pz?nh=*cU|Wvz1)ik +z&*90RYcJ`qUk&I;!@&dR(Y^gi*evR;M|YC0q+;^1WU!|dX|)5c-Lnl_pNO^O%oF*`Cx$Qe~i%(dXw +zg|AwEmCv2GP@|F*nT+~Kf#(i2Ir)b}ncE|4w +zMY`9L_rv1DCWk2eHE1>K?&&^08MI$P``l9+ldK0U^1bsFYL +z@GKpqzt_htztd|!p?s8z{RO6-|Ah=10sZX&W}($NXxZ2$$eUL-k0bssnn)%FU~gVE +zr4yZQS+C*|j+<99wcu{>l%9B*oj}a_+cCTH!T6xk1JOpC-BYsQ!T50WlY`dmHs@lI0PbE6xcl2HMKR)eRZ;owk +zpSJFvR_EU6NzPz@m@!1*Bh7J^eFQ!C4Ps9p$xJJKJLcIMpvzY0j_5RCJ(jj-^1Y6; +z_p(bEGx$Axd{=oy*2sX|D>Gw +zN8>KGxx}xBpPfi_8FVNcwD4-34)v-{s^D{L|;yYVSc +zzo$NQG|Fvaj+9M^_M_0UXxf-*sj#`bS9{(ly0!z&pO2rTTjPS)M7tknu3>oXqc+Jr +z$EFlVSxcX)=bhuA&Tr9Gwm~;t{X4Vrsc~*IRkCql{9J +zn9TxDjI;ORdS7Pb^ZDFZ&Z_e*&A0UE@z_~s8e*7>FdCs<*?5-;IGy|~p +zcJfYf(;DM{fwQmmFXg`4Gcrl-%TM*ooZr6MJbA6|vg?VduW{sDQyoy&Iur+8p{f{d2(O +zyX?V#g-mGzuHEFbBX1h?pu0Q6<}z?HHZB|TapXmrd7{mj+tbd*jfo0#C^y{PmUhkZ +z)NQu2y8*kwMWcF}Ioq=vzT@ul40>slb5)bv^&z*r!aRV?IvV?#59`&l`$z6pF8yK| +z_>ExRVdgCU0bj_Cbng#5`WTlQLd@0=z;hXGI~%_l|30{@@cw@){yqLb4!u@_ANJen +z!q^^y2H-nn_s~-?#Gdcr|jo$~?~5{?EG_SICKb@%eL|1NbbfUCw=E4fBxf=sz{_wCp&Jzb9EQRLL7CoUZbvrOE9hFVIb}A2U +z?oQnR-xu@HwZwl`w!qR3YX}d(t6u +z3;Z@Q_tuPpoo`&%AA+*Jp7vI3U_d|Jl;O-z>;Yg)_vcFC5nd*A(a?C*$iN{;DIBQrZb4qR?PRx8fcKkK2hKK-7|o?W!hokqX-F*s}8 +z6I%{U*RlR|(x&G2xG~*b%$;>J)6zd@*T4M{j9!bC1TfORo4oPyFzwZp&j-IXF#?f*4n#9XHn0pvGNIWL^xvST= +z&rSu;cOefC#y-bbMMo-&eHQxW-pqjSRWEEF?A19(wSTAA#yDV@?tPMXoLx^X;9Z62 +ziazJ@f2H^T*!Ud&AIAUUwMV`B530|ciQLs2LLb+8rRvDExM$mRV%&k^GS20cxs7uU +zce(4#Yok?e`l+4W;Yq7F2lgo6W2q4K|LM%_Wd3gWc6o2gYum@$bM%SMD!q*}0zS@! +zL*eama`G8;G_6_1c>C(KGkE*g0B=_n(ZUCTUvkVN=WKJL*XARC)TUe1W>vpW3m>3O +zZ=J{X!kv*DcE0P=^)Sj_3(X9L{yULjDs!CJMCqM>2+ACvN*t~=*b@h>uHgKdWY==9 +zJ>Y(LRJ?Vx_QmKsysI!zq`rYXT!QSAOg?oozgzP75f5KA;BI;ENBLjtdn-Ej?@vzb +zjzQa66T~mA*ujqT?piP2_BQNTTlNz>;6T?i81FQAqAIciy%$WsExkoJvQQ( +zT6y<7U~)a{b|>rahmR)Xq7C(_{-XAU#`h(%&Bn}ST^_x9F?ws#yz=x!yKOHnq-SS7%g=sY$V2_4qf8?bbS%x$mOGO@TH_ +zos({t>A`NBipl1Y&!5a)NPClLFGhPh^E1HoJgZnr3tU31W#qBOu5_Rg9f7td(e^X6 +zy^-}$xxy!N&-0w_i|r=Pb<;?S% +zRHL)reTTKVjJhZD@l>@Fb-w@}Zel#!X$yF6E;B#eEE=seudlxn{8zFc=`tm4Tg`Iz +zJ{!{WjQL4j#3XLvTvpgTf8qxGDs@L~Vz}M0*|m?56YUSNh@G&x!QQ(0L0b|{l)f8_ +z+gCQ%*?wXbSQCjQt+%ga1V_nJ>)aik1ROK@aj8CNZfkxTbAD?yX5J`vg`|xTw`HnX +z;}6C{-n)7D#%kP>WJ|o}_LjKdqVxN}sm(gid3G$(OPm~uth?y0uk|YK7(YGqDx2Qh +zvEOjAys$3wKD~B|f8Ro-oshnX?>ADO`Lr{ScE;U48#%$4)6A)zeIT&)b!GK&9rL@k +zwAa&>7s6ZWCu#bhUSvjW*6x^1CbT5>NNM?bK4nCcUr8(?RDT*E_wn^7Ys;+N(07xL0^b +zy20dP);73NI|}}@4=z46@|kG)@_4MgWU6G4eB$!!e;PT{aMVnV+Cj152{YBR^EhMO +zyLrEc9JOKdd1#;^=bfeFOsBQGzyqdjvp(Pl(exy@g>i%FrlVcbq$jukD-Y?c0P$?THKLEU)5xg!aWV0=UYLv2T*jB9F){_hKN)m1=Lz +zTn{aGp`&dz3!&K~9oz%|d>wRj3ukF>fL_W>MW1N430zM>X3m5zFknTeBP*3hpb`AX +zkTuibi>ct(r&ZzyoYhhCbV93_2ef(~GU!ccbs_WiX|>GML90iQF?v_lYWZ!Gx8o`d$Q~KU-Odfbmvt!m+Jkz +z)}H2R)E#7ZN2l`rKTj^*^JVZPe{>mhpuFdgRvy);7t`U#f)6k9Nz1QX7x<;+lU6>n +zhQKd9oo^POb3E`%%l;|*1@y?;H9pg6#^+q@%zk{V;_0`*qi=7KT^;*zdlx>A-&Oi@ +z0iRCVn(4{KG3hABV#I!BYI;`1b;h)C=Nxg}na?9T6;E=5@#9J4zgS7E!b`%vcJm08uz>m9?_}nIycDirdPW;X2 +zHN|E)@g0sM{;oB2Gobl}`E^`#)$EVk+{gc7ZHvr#& +zbfI$kDvYu1{b$ApjML*74>^F6#yZHHo(+PfH*WlV_!lxY0W1aYOn#~O0)KQY^>f}^ +z>Z!bg>!(cHfQ-sS<3Squ%%?{{9W_L%?5SanO+mvS(Cz{kG=boL7(crPMo*wxEaP +z49!XH@m^(mi3?So!u!>%vEmo`v>wC$SfEYCDTtnAOa5mY$^K9M(uKRo6?^JDw*kNO +z##~J~_$Jnf{*$G^Pw_0J%tP@;jFb6j4)*PmREkLpjwI1FH}f68Agf3oObwC0cX1?(vOTaX1C +zl#4=V8RRdjG_UlQ<2yZeu|FpHZ^gUWiCPoj2^(_Jt>fqhn?-YyY0D1R#8a$6IwLx5 +z1o^dWwd<{G!Tk~;;2wf@L?3qnLybeeB+b3xL(*Jl)5q1;KsS%FSMbLwzNVioWhU7v +z`qLep<>V6+PxxaVoOvb~tH!DE4x=6MfyOC6xW>r(oe9|z#&vLm#yiOByx&Ots)IXj +z@nZ^-iYXYtT2zQBNYWP0>!J9u(r>cQnSGA9=FSO<@u51 +zNxUyj%rgG)7X0D2dH(PueW-lp*SK2~oZf%FKL)k`*2n(XAFjSq!MTv)K7K&iA@pI) +z3+?o=`3=t(J~CI~jd>1ZR?Nm3Kk0ur=DTU{RKLcoyat?+1J20u)4uR!PGi(=^!?#2 +zw5_#9K5?D_!>>Q; +z`LgMsalaRy`>xsE_jAUk_6l>l0r{!6^7->m0Ot8sXDfF7>^7#+2DX0oEYqUT!B=P3E#T=~^iWA%&hT|_gkI&l6>c<^RwovH +z2;HavbNR%zPAmT4iXi@AGw}z4wS3}=r@08(J`LI6`@_@d>B(JZ#!`r(@O|RtroxL0 +zD5jegANBp=J}l&`zSn(&G02~&v;Fcv6nx_O{FO=JNpf2@f?}Vz;x)8}3GU~b^QH82 +z$7z`R{Sf!(`NX9oAd5Wug4QzkvX4{$I;$$U7h>_@$J4SX&fNLk@%&%;zVgBBDFjEs +z6G!$?$+_pxA?FJ4zSQH3rNI8a%w+!Wm!25(C;e?EcK<>wZXw=tHhszejdC%Zad~>% +ztUo9(_Jqw5^s`y!)*qmo{s5oqW*2=-ak|P;bt5|4bbQg3_`>BMzX|=#nth&s9KWmQ +z3)lL(&-33_rH|tSH)c_5SNW|O`NFgO^8-z8Fmpe8 +z^NL}gol?c$rTD?+<2Lq@OikI++qAdIp=VEHZ+|mmk-u_L>&M8s5^+mBdZ|fI_4M<* +zTB{=S6P7y-&-lBypPV*wBkP6sOlSPv^o_4+MZ6&t>9)?DG1(6W;-@5*n)Ul2dk4{B +zO}Y`g2KM8WW&fmmO%+F|_|XKk!nyudYo6S37v9&03D4O +z={=L;|Aq}tGA9I2UNCs6`)~O<&svl4bht1&+(y3d+wovZe(OS9VJB<=A*>>AYy2?ZH1rUKwQY*iaw(dF&&T1^@Fr+Wu?P6ZoE8XfM(``0y0&fSH8P@IX}Yhc#u7;#D}R_S$9pq>pym +zZC5;__PmjBc30Lc!T)?Gd?LT}oAg198s|V3!8a}JOHY_dd$Ef{(a3&byX&H|cHZbIh>tQ>at`tR +zFtNQ4#;+jnnlZls2W>g~`p)=Z^9Sg>r@IH6dFb_5o5?3c`v+Tf?&ksV4g5$vee`Ai +z|1sm6;mOBXdi>D?iIvW;qP{*JO^M&wvt@fUM{A+Os^l`hKWk<-&Bew#yF@%(OTV?f +zTEhzb9LE3n74h%JDe;f$i98y>xUDJg`#dxr#m0h%P1UaEFBvLXq`isa +z2Lv<0a4Z2To*3DMi_3Tw&g@_J&_E7gD(PC;mNW8 +z;7);W6}K-uhoF6Y2Hg{&nR9*Xr5=f+o +zRXt$6z#GG(Io|gkK|b6Hd^_!k6N-J2eRDE8jQryA-G!jdW%%xN=cF-Dbo#l>p3RwD +zQ|^7>E{-kDa#x2jTaqDoq7<5ZC!c40GduvNS`64+}+CTBMj5&c#|0?)A +z#COX&@Y_?|wZJ=HZk@?bg3Qfm&$jX=Unc7;k7O6`(?6&$_>ISQU8r`vHNK5|smPg4 +zThdErcsAP?TIH+MdjG3aa~PX+mjkgAywm@Z70P|3`dV-HFc!(x>yfFFtrtm7gN_7K_ +zFQ>kI#}}&|=!~;N;Offc2KB){-uE3}2~4ml(dIw#UgbES2>y9b`}lmkI@I&d1oe3I +zG$#3w*M@YfG2VOGaYTD*-j@iT^xMY&*m}Ko9^ik6|M~OE%Z{V@-)xrl-sz27cA<`( +zDSM%J5^_MaDF0D0T~ZCf_^w&fdAdqx#fHaC~{Pb`yT6*K6XgO}ah#h!@XQRbK60ABwyjGUK%d^nQUp +zRaSJR_^o>MN8wetRQ?xF_d7f){tf)r=kvS7#FL+Ayc2_UqV$w-l3&(;lG&UFrn3bnDz0&7G9*`c34HbfOO?wf-xvq1Ab(@g2TxEx$EA +zbX8=kZ*%DNeAK@0N;z!h7rxblZ?P`4Xx#R`gZQkq4>>?TRrUb;fsewARjKDZ+HX!y +zVFO`IXAr4#d3NDVa=6Bq@5Vep{f)~M4WtB-ci#*Z-E3B~@!pjUHOrek+E +zhHmFvmkqK0Jnn8B*3=~an?l=@X=A7F(vtuW@j@{FU +zQ3k($x3`B}fer6t=kVz_cs~7VPo{ndUMuLpE5TP8{yx^B&C-Qac1iCv@GV_fyz+7M +zSlMO@XHb0n`TS9gzpa;V?|aA?XsX%s>sxea`StGsmtCyuj@h02cmVqW_6he4{HM5s +zPs9Jh{6OOI3 +z+3W!D7cy_=zU1vGR#LWfx$1hpbl`7jyEi|w`&9lha4{e!dQgnPN+;ye5It~eQl+#Tp-iP6u_j_~T|J*M|AMyburK@~|CQv2%mr?#{bpkw8TO9m`A=6k?Lbp3PgI(s0dwi}ESTj4a(MkzTgA4Tsv;x^iw +zfo-VmX#dDvjpa4*rt*?Rh%#>=H)flguop+-bw>?%$V8!iR8O-J*se%A&PuljU2g!f +zMC3Yw2DrbMm^$e)xH{3hRCYaO4>AsYgMOWFx<8|ie6^0#4X$@)we}>?XGS8AZpN-C +zJq5aK{}*V;j}7Qvy_GWy+e~+Qxyiop;Yham7I^Xo+GB6I`NKzdH7_O}pq@DL1U{mF +zu-%Of>}_4*1EwPn7TNwxg!q7|@ai;T&g$%l%`@$U&Sv!VS+@V_*>=g(E%uS87uqF3 +z%mDcaoqM8x&03$yUlI6WuSjt&el&UMqS!5x8h_Zdy4J4X_pa6w;sV~uFU@K#SoF{r +z*DOT8Q(jrc1*|m_whXq*$&aTTif_km4}5@>!4^AV&1Xj=1EEXBj@-ic$-rPHyvN+| +z$G_4(i8dH>JM(L2UhT|_J5DAf8G8p~?_lg5j6JP;$P4{vv0?eKLnmV`tVtS=`rn4H +zcO5YVXRlEjV>B2SbI@i><^cmT{G^Qvq0fL`w +z5m(ta8~vDoH)FRA_Sf(3QRH1F9^fw-cbAFd`>%s0%i6JLKi?2><9C~AZa#F5?$y_D +z)K2{bIJ^ZpIswrC8xdpJMFqr1+0 +zqRkK&Z|$AXneYEU&s+}O1;5Fesk@>Ic$W=@bK~S*=#3TdejWV}vG+%X_bxAX#Me!> +zV*AVz*CZWc)q2B_abeNTs>{u2QJDuXskX+ySX#cjNWjFG$%y_P@=#cRlY +z{jU;JrF~dFrZq%%@h-~ionqMw@9*P(!CSWLPI8my^BZ%%4D01S&Pmau^mn#BJ5?il +zwtvrM%e$}i)wAw$o{M}S>Gpz6JAwV$KL@{KbES9g{W!4*OE$~C9mjTUtc9N<*kq^i +zSCw8@b}RVAPCQEYbjw!Z$1`ZH{*N-BW)1evp{v|PCH?z)*_-6Ei$oPa=;!lL%0KLs1^?vRu|?z_S;RaRBa@Qh +zS2m}@6Ffc8E!wj!q|b|yCCTuJjzP{Kbf@f|*`AI5y=R|Y%JE+DCmjQwfs|`GXSv}) +zIUp9VngV?AdHyqd(&vyh8dEZ?`&j*R7RBS}sUm+4^vm~-g`6c3>;yOUCs^J9T?ls9 +z*=v2hzi1ARQ};#MFVM!t(1z&1aL)#Ixn>q!?(#F}>ua%b5c`S#uDm95Ta%o36aUZR +zEWrKbb&R?tRynVf2eXlN=Qd)kV(tL;T(zt_)x>Y;?gr7Pa)9X0KRpXH$9ce%-d$u` +zo-Z@U(>0Nnxbm4P7s+Mb{qpSP#zeex9*v%E-H09LTJog0*dh;jXF9Ce;Lc-x7ToBo +z+q2h1I^(k03~@dvI-H?Cok%49CUY+It!D#si<@hS1&q2^&}NzW3O1knQ;uzQW20JV +zV^Y$XS)Bt-OZPb5mpF6XGXAe*?)m(yxy#DCxzDeLK5k1X7N*4c6mV+kE?GI%yN6Zr +zFqiP#vacMAth9TkvR{v6FZRxFjwJS~zEfl4jM9I&jH84xHUhs|;OC$5JX1!tG;*DI +zcj5}3g}Ncy5)2E!)sCf|DyN#UMrdagbExlBT=)p)SR5Bl9v*D&I!o%ecQgO1tj2U< +z(R=-FF!y(b?Q&Q0N#$jSf(|+h<=;>FP|>(9J?r-ctK8;8`8m5sob|pKA71>^NcOR9 +zEzKpHlFhoOGBi5U96<&xGHcu6?alPxyO_1(yz=X!^~jrb=nN%OBF!njmEm*Kov{i0 +zS;OJuI(%-*yE5I2jY2LVt7am*>P-f|T*7*CEBIc*eG;^AL_RXdii#CdX~o_lb>h5A(lb92oB!=A?NedzZ8Whj!-F +z&b-?jOn-Z4kXr{Cmfla>z#`qrJxDhl9-WwNYsf7eb-VhbDaJP1wtA)PTdVR-S#*xYPN0SkB6Z~X+ +z?|4xAwF1mH02g;mPvZOV@qp1iiHQAG?0ZE#{Z+HolP59sl~Ul^iJS_{R$-gKuP-|W +z2eQMO7Prx9aiho=;)t`8oKE*V)7jl=>eHc3CT?vtb*elWB0D1M*ktj6fwzv+r|_fS +zXVY)|Qt2S|Ddi*+J&I-vK3~zF=rYPWI2`&h$%!ZDBF9>tD)w($yL9iXpWAp~BGO!( +z*ZBA)+!TJq&YF+KTfVR6oB +z*-Z+uJzt_N@Rd~_Wk0v0PmdMw`5Bt@+YlVYzj5jy6IeGY|0E2Qqm6aO1(@BTh{29j +ziCme8-5}9rjO&e6bngNi^%Du`+)}mxpCP8o#SZ$U?nfB{tO{e^`+nu$BR&vY>e2j2 +zZ|q@Ho>I)Y#@EGnF3RxoX9+*TiST0&N4=a>i%eyj>&@aJ^yD%#7depVLf3PREpf}Z +z4}`nio*r(Z_~Nfm*PCcYF+pYKGijGRq!GT?@fT`tVgEWeQ@tu0|0@$koXGX#Ct +z<#|D-z}N6G_FrfUoGYH8j(f8AmW(_R;ru&vLLa_v#QP53b^Pw)?f6!f5Nn~hhPHGW +z=hhY}$2Brpb2cWK`5E&Ro|WH9^W8=r<+GXnKx3NqE~#8^nz!guI-F#rU?94boRv&P +zwxGw2p#N{R8_v?%(rRFFRl8(m8+3YyiR`K~R}siRnjAzeoC&!nT~$8Uz0O4T&n6B{ +z<7z<%@pG{$M~L$AAB~}-cOnlwc~M^^FNQHjmDio=DqEw7yuVdv?9YsW&aCC%aK4w5NUxXS@7*6FSeXcQ^Gah+|D?ERJDMP~k2x +z$vu{P%R^3&ccytRG+k#_r|M0!?j1at&(F=(nKfP2cQnT9xQ8w@+Kq?#zuwGDDIS(P +zPF())s@IvT(i-BWv6Y&!@WGe8SdxXvP!q&i&II=UdFnsEE-VV@>i>d^)J6X{T+E`L +zU@ClUg7*F|eOLS+`+n(tJ{_q4FXbohQQSeCHAVUKl=l(ePM7Yd6F#*U`s8R|-xYtX +zqiz`8Zfg-=sE&9;{2=~Nt_tym_(XZ@#VZZ)$Re{9AAZZeancbC{#5kCG2p+<+xN)- +zULD1^(hCo@h1yyYT2spKr-q!U=YwHQNj1VlIwQK49Q{@0QTJ$m;{J>|*0z-#P212f +zLe5NAYp%wwJ6z(dy%FwlK?fsl%a;$lOTTm>Icx2K=-^0C!jQB60%Qc|XOY7#n>04s +zM6SAdsqL+&^ue|eXVGnOd0 +zAg4-JbJ=DFWtdNw{5NN>m%}NW1okd6*_TDz*=ufYmyEjF)VB%FCJx)>StA>aky7~ppd4eOZci*m+m&WeM;M%i54_S%psU7Nu_oT;x%XGtt=W#}hHPo?AG;G(oQ=HwvXk!w8fa}|3AMecP +zH+23spU;A;6I{511=37*hcG>%<-3)^MXo1gpz{}=f9F77uto1XSwp!M!! +z$j++tERU`hrOJZ!uCUfk4|uqEy%VjCGqc*T19PrxZSpdwCfbD!a*TbZDFj?*nMLWl +zS?lUeds~f@hz|Akgww%8`zD{4e0kkfB(JMO|2=ND2DpiE&u|*Jjy0D4|H<{F?x5q*4DVv!&w_Uu0x++7@Wfr4f4LDlRP~-*Okw=u5 +zcP{)J_W1YK3cvkq<@Ub6hgRmBMahTYBjN0O;4fkpF^5OUvov9I+C0)b8`v(!=A1z9 +zoe5oB9>|ECH{Tt-ny>Vb{Q*3U<3<1i5ELSwJyZlJwp@GpO01V2mK +z>?oo!;*N`Gtd_E2=UY*oP1=xul)0>dPX|NG+JE@*?}BUCw&C+CZyaK48~-_w&4&hU +z?~{&E#+XAkfm{f6R`S2r+j3yd@2>Ci9lp)syMq?jc>7uO@0{B6%XF`=Q +z^L+M`v>D^i1#qh_EZh>;jj2zXEuA|o`no@Oonl;WIQX9Z}P2-cLT(y_DR@V*jRrE@tIk!0dLc-gT}@O@?1|Lb20Y?lDrdoo+SF&~aS&2z=dY+|@M>fPHs +z3>n*(zc<%pZ%R1S7kp|G@VGtX##&qA*6obfVb=@scTN8BuBLo#S3^F$Nq$Qw*%^29 +zO)oAXzf +z*z?@w&LaGNOWAYZlh&Pxn&%wmc?&sP4&+zoYK}%3|8(yT2KX|w+?gMr$@kgF$H~Zo +zCeIh}YkUC*W47fnZ|v`99_1~a@oA>E%O)R-U&7ccJ3HgE^tgR8{DPiN&e8EZ +z`&fLaSsx!3Sx=4`e)l{UztCMDH!bTqzsYa2A%1Ccef;9i_3;+{j%;$@M?;tTb=WkbBweJoyO7Ub^M@8pKKF^_jG(*K4pu*H{sxZ-JdzLE6s(A4!Wz!q4M&s#7$3T^)?7W3$S +z19S7wdCx=c_raUW(E|KC-@C5-8ky^_D_a8@SqZNRUz1yL)v}KK!>E?T-t&~NoxA%u +zbM}!)PaNA#-;K5jz2pJt<=ss;+E}#2ev1FUwrQZrK0D8O8hRn7GoYC&b5oPX6LJ=y +z&(~q^uIVD5;#0C4iD#PNmCMZS(Gp_a!{z~Znv-#P-&MliFwQr}JmK=}y4qaPcAkkv +zE6fqjmer!O&TmrenP{-U#}UpRRKSoJyNbbCnLEd +zacTFfw4-_Z^H{z~aiIP^mdlfh(N%le`;6fJh=R`K?SE)vA9_+{pi}#~s^39o+`6TV +zbwxVTwb(D@2hjeLoa4y!MX8Xfa#?e*p~c)gSwFsDBD-p^jnyK5_3d`zGd_jx%39~z +z(jU6Y$%f4fS$rOPNLvOzjd +zwJW>!JNV*NrxqVWp&!+O=l5c(->cmHWoB&01(YeszA@&i=mngYp2hk*Dxj5z%e41X +zev{SUsLFNB4V%lmO39mCV#^vswzN^-4fcPH +zFUp+)lbw0^0J7c2%DIzIGXZ7-YOvPQXS-p_^L&5j%psEy +z+dj|!pU($ANzS>?{c>H`eZAk;-KLrxz46Y^@hddB|vY&hF88>ECIoR~w +z3<|FwL)asawe?WK}z+;uuR)pK=5!+798XV% +zR%(I=?YGP#Z2trHpP=hDKjodpYD6v=%eL#`Rfae~v)M`xbSrvQ9Qedisu>5_;X_@X +zv4BgE?_<_1;+acq>0sK=#>Bhc1NZnJkZZ@0Nhe47dYNJX(&I|siQW^;Prm;Maa7T| +z_^5X;iToMiUYj|eKih5^3Ewtjo$D-OlsYG+n1NI0#RaN}K@w?!CtIQW1RK@&mM4wZJEWFUqYW_Db2zR?c&@04uK_pZ5H|=7JypooLd3ezO^w +zDt+EUK8isB_uq^D4?j#j*@GVMa-f62p-IWAGR2NAF+==YQMm@L&ws) +z*9r^wYtHzda<2gQ!Tr}KwlTi)(0zQ&w|smE7sp}cieW8qef*`h;2UV?$C*l>SM!{B +z7T*lcpD;XEtZV4=!)E)b@G#H!@w|SR=i7Mh=TDT5+r@L}r$aEPD#}Lf-!#wV3$B8` +zw11&9*B1$|b=NoQt%dOJ1zUXIFud9I1>3}K@O^G>#m_e#d{q;#uIF1~RG9?!qG`7i +zrwc1j7tkq#8(Wg2cF7;iSDUg5X(``O2P;a`1UH_ZF3yl*JJZyM&k6-*Js$tBm(PB9Ge9>piEpv`kb +z4ocJx@prXp-xM}`Hr1QtCi=@(m>yzj$;`d%3HeQi((5$(^K06c(qGtpuJsM3`wI8D +z;4}F7@%MEH(q;K?6!)IL|Mv4-@=ZFtXmWJBCwFwlSTsAw<%|B_T(Bho{g7vX9u@1< +z7~v8=mZ2}<{1O*u%QA(sg(u6~4QJH86~P;OSfFB_pitw(BZUhoak +zG%=~RV7smSAM#H#Ry#JE<$#MQGGvlnwhKKNIr$r80KT+NwHF+#p_Ntrp1f{h9#v*- +zM*ZlFP&M{|#+k$ap)kMNZ95Tq24(%V|H2cE7Jp-%0KF-{0oD +zw9%b!@GsUoiL)v*a`nt}xH+z)Z3FLy&V2>Xrw#MGh3DL9c2@fY&uyMZaKw%#<|mkp +zwnn2jPflag?xkL4rp<~t9!$Oa=c<5fqTs=`!tIwjo^CubDw`GsmH7Ouf@fKDVevE3vt+Guxaix>SrC0Ij`Qch +zQn_B+%p~CHIK*u_#+oTP?6_MmSs +zo>2<_&(f}faipJBn6vK^yvBWh_II`JxVrOB=aUA*y@GdH>}<}55KoR`Ur~F~y#4gU +z{2z`-7G)I4@|9KpGX9JvVo +zl2PPKp|f;b)*R%7TcZ-VHFob073mY2Sjref=iSUR>A;pX2|jW*EEGMCyzPYSXbfWcM +ziwsnKG-z=XHL-ST?)h*2&4cWL{$`$kcI6c(-#F#1FHQe{L5|v~!rkxRwDR^7jnIK= +zj@O%Wh{Zehl43kX=ja01jmo9VpvN_uYrE$ZZJ9>;pq@A}GS$8q7;7oxyjUD3Oq&>b +z#zb_V(l+|$^R&wq+vWe;Yj+cKnzqWz%huTiHz&!oW?pe^ywz(QY?%?22W`b%bzZfB +z+PQ}FLjh!Rn>EocpN-GTwISOwjiLL%ZCe&U8g=o+uYKFj%eN9reUX|BYZdmoo;RIDHfM4&QEBjlzkKk4Nyqy5FNWo{Jw#{)92% +zTvBnR(!7MN^rL)`UVK`7n>A){kNUyT9(Mee;`l50PI!W!pM|G?{i`cZ-c)SYTx>Vh +z#nathJ(%!ing&m++UXmvz`CLb>dI+EURysYH2Y +zuf57@0;Z3%PoCuGs;s56GQo(WJe{llP=DC=|8M$J3{LZ##aWx-=Qj(xqjY|6{NDME +zqQ9Z|xeNSci}$T`|I)+bMWu9V4~F??E%}Z92%Zueo=#PBZRi}tV;?Bap?0`AScB&< +z?teIkJ;Ti5ubIPb#W{2x_i~hOFM)$-#H%$IBPMw;PTT`HJh3LWC!7dX?yxQRy=o|V +zytU2ct)dm|_5GrknW1lqZnD4P%x4ed|DVC@1nT)O%>CW};r`lO_@F;mK28o|lzBI0 +zwHL=iKOaV4)}ECt@%HQ@ch8owXYcG^nUn6SJ^N;1S;{^0rS^MT5@nT7*pfBK7T~v< +zpRHNd)^mX6SnB$C^xew-W8bl-IBz*VMBT?@g;lAV;@(?r-NtuM6!+e0_FgPs7EBWJ +zS(&?W7@VfS>3^T_WcS{8J=&f;2&c~#`EMkHy#qem*2IyOA=a(+slIOm^D%{;;4_lf +z__ascz;mkiH-*=FKkAOTn)%$%yjEx5p3=Hza><%%jES?`@guJTGmsJES6mDd;hXCYcf@@F^A#TRdE)+ +z4xYi6YQ=i;QtL{)c%sHguWD#$U9*WRi}tiWXmSw!m4$AFzqY{t|1b?|ZQpVGoIsx* +zzxMhZDpPbOyp(5ukWBIR_M`tl^x00IvIn-kE&b_F-8yM4{jXv(ODEpy`ZT2v%YUwW +zK$K@GUHN)+W%(6+U7E8Sn+>(qo38KtCyrud-csVkJMVZ!Jt%8^a0Jvl>0qPJDtI +zSOe!iHrO@r9r@Ul`xdiej$(5cx2F=8^)YM>CskHwlZ$;YegymwyC4Q|Ky5ZunA{HL +zky+k$H@<{2=pyFV4@z5Zo3;%toEf(9OI4dX<+(#gVSKMs+*pk6ZP(gL=kg2eG49a@ +zo*Ogkt?A5ZrhE13<~WuV8jT_Z#yUvmRqUmRfJ7 +zlh1_x8mzS|nZpQ6d8^Ts;!?_E`BU@y*9(Q3Gi~ITG~}UJz+}LWGtQ=_h|b*ht|!ke +zg5OSivX~#3CFg)Mj|VvK)W1bFGBf5Iioa1ugqo;L7{8`d)Xf +zeEU_e&1ZS9JTT=9`gXMP=FTbJV()B)GwthOEIs$~fL_P8uC>#^#+bLaSmYVG{EE4Ixs=LplwV*P^wJ94B5Rw; +z6XZ<9mY)>iV{tD%&+zSE`e4gp@+HxWy)`~Y4GyjG-mVeQ-+VV`_i_5EQ$If4b$N7G +zDAL_{dp|Jp*Z80AyryNAy5D**m%ko3otZ~-5eNI<8XgDPGxH3enddgzK6?fij}>vz +z)}`}Q8R`iOR?3O==|r#*O@OzPqLF4`IoZ>7+?q7`VZge#%hGu03U1C$u$~%IkL8T1AUEKVQ>GBkpX2V^ +zDe$3>*>5n9X6&)9!gKj*?)2vD(Ww^d;kT4OpRco?z)#&r?A)sZQ5GC$w-8(HDzv6$ +zFO*vwviT-^Mn_NyW7oIHP%9M_Ggew +z`d)nW%vACj%iBZMZ*D*JHnp897*lXpZfj}Vr;6>4AJVyudot5ZP0AUs7-mh^FVGuw +zZc21s!J72Fa(wFkWZ-N<7x-irLoq- +zZ|Hp8g!Eif+3g^UK0#j^ZxwTy%sd*Hhs~Xk3H)12&7O3fdCIOeYi-^U!*B17nkMAQ +zZT8H%oa7k3{|T9q=&bm{fXA{PzGaTfx@(wA3;k*iQ)wsIR^X@o(XTzcwJ?uqtW7k$ +z0$%B#K`#sZVL6cUV`YrZ_}T4+g}X}UTsjZUllm#{8mp0ylbPQEaP7w+%>C4WFh|{7 +zpn2p=KVCc&l6!soDeY^`+myt3x_SOGK9C>rZnf1y-oYO7D2_Z0uF@LoPpz)rR&esa +z6`Ll0Qz*Q6qTKqHeXi9BZGS#>PH4Gm`tNEsl^v^%*%b!IoCR1ll{|!7fLAATJa^^} +z&O#O9Kjm!vTzrYI&|Wz5*VtfsdNi(&i$|DCwb?`c5Y-eZ#1*F)7rf1W!B8uQe24MD +zUAFFu8Dn-SkF3eEuCV7#2q)s!)R^*7X495)1idq%U!7A?oEbQ|@=EX-L*DC^rYZIp +zMc8OAPafQU>Q36$@a;K_@igld-3>=`chOe#W^u=HG@ZjXS@g3y_5_CQZP-PnjP>rCpDa91*Dy5M0O(uraoM=?AT?aPxVP&c!@XgqM%EyAEtW +zrS?AF8t7km6g(#Z%W-CwGs3#hP6xk9-Kh~X?+b1Q2D#oSb1xKLI?_T6)R$^;_nh<Lo$T#H +z#nySB+22R((pqazwWivw!E>d@^}f%!-8S@>*Z5uZEq-&3IY5oz&pFaR!}wj$bFxdw +z%bw5AFmt%Zl>Eu9e>TE!6}93Tv?$z +zK9mb|18~0?_$yz=vLd$jTMf@DP1g@T80S6h@!$qWI2Z0V10Uwnei7e^=Y5&Kg^%xH +z>t7ArCIge&pz^F%xp`Ju^s$-fj^w*s0IzCSTf=$OQAWQ1WJa_#B6z?aWj$aAteLiS +zTVozbdHJY|Q{>KdVRw>Obp)P#q9FkioWDQ)z3A`HS*)iVUhyLSDDjd!fBXC`|LwndaMEwRJ@oJ|pe^2ca(o#w +z`N$J>=4qFY1(Ba+E+6ZGk1gxIlXixD2#Z_^>4PB4-D~U@bgL=M*IKm{c_=%c{gnlg +zoWZ$t?G$q^zs}&gd*VIH32Wc)%`0%|`^hrKI{k|B5~wc`w8=$? +z+qd>F?41j|mNA!7o~8Oh;#+@t2F^Y0-{spD+9_9WF=J@|Y5ZD#kLp|Bg>b_Yv6Y}ZkjWP~*?MzMR=x*=64ypY%3 +z&lS*n(7Kst8&j6~W>>y&*^VCyR;)=nS+05@@7j-P$v&@Ue&uG~TE#p4cvfkCY`JNE +z>SFk}`cXbOxgJl6=9Ev_j85n0zW|4<@+kNHTrthQ_{GM+&nLS4OXp|~7kPO%@1?V# +z=RL@H#NQTl_%Yh^Of&gF4eRv&;OJ)ZhZ@KUY9=S>_;+}|b+~Wv|7}qY`rE)$>q*eR +z;&WOH?cKBWrTzr==}y+$-b$WnG9;LjlnkOVq}Qw9>%SYaL(l0;Qrv( +zL-0P%$zUriPLB$=BxeOz+ZFtO7eCw9!lG^`#QkHyO8JW3UL3$f>DsiGfv%PpV}$kWFhj$<1H2D+AeH*+8=1=j5v1w +zdvVqKy5qk*o^#%zx0A&5(=FtyQlsQ_dcX3)&VzTsgZCUvO80X@waj5kcN=w9=p$2u +z4MI#Sc?ENvU`LXbZ_P-yZ5)@J!gIwf?QkTYv?7ejot6IGI?V5C<~MECH{4hu^Gc7f +zCO8&3u*NF4bL9IOgDFj}UwNnzIr>fLE4D`Qszt$rZho4zCz_BgSUMm4Q@s;fCV6w1 +zS(`+jxO1qEoIMBNa@wqk=1odDu5FGLjN13H28%th)U|1@bA4N%LnkfW`##MTa}PSe +zX~*)SO=Fv;bQyF%GsN9XLFIu_3ku$?K7m=+5ooEjW|8W0EH+K4%PgC^qN`cslD10D +z(Reuf+y>!GIn7n%DS>Cfpxwu%@=zvn2J8Kwc(@yRXwD$q?fr?)BaU=&SGFfs#GP`^ +zrgTs0Tar}0qET-RAD{3oI%VcmqaM;Zc=FTMOf%o0t +zVI9JyXvgL*kTUCbCvfQYGq_aFrUl&?lj4ky*1331S*SH39VLcLV}9V#o14yEk1c_j +z?4uO<4!XmkLVgJsSK-7ca6KJFJrRX#4Jr9?)JoC=8&LBUs%?b0j +z)+0QP;HU8UC;l9GZ_NxRE@I8!;u-64zqz2~8?8g%oIB*3k$j_jr`>ha&j`NRS@L&) +zzyGDA&;I^_c|d<|pC_c#h^~t3`ET0XR`Sg+`CIVU+~0NeGjD!x^E_I7ez@fMp^`C- +z<&Du-^8Obk@9p9o_Lsc>Pu@q0{r;%r`44$sQ+&R+l`tX +zr!q4=osjco-*RmsY#+{NFHefcz0kifx0A8)<)@;{+LEHTRpZfd`ESjXO)uUawYhV? +zcLXq2A3^LX>O;6Z@}K!uyaZYTH;dZ@bLvBEP~WNpsl6oKGjid8Kd}2{Pd}4xCOOTW +zZSPAiOKzi|pHSTs$#VGs`wJ_%6W*(R(vZ@9ddEv@+rNVjIe4$mrSECfa9|$5;d3eU +zIXf7vNt8pc7WH5f2&PGIC +z8wZ~u@JZ$?IeR`vHldl|=I{fQJM`9_r7}BQl+XHx^I5rH +zVV_vRn{B~gcI7XCo!?&irQqg&Q);g){h{Yi77SF6rqrkG(~<0#F!gDCKeFz*QhuSQ +z`*}6^pxKk6vl~tS(>6MK!oA;Wat2>&*601FU-D{JsMdl%p1wpz9>uJ+q +z!l|X(4ku{i!l1Oj4E+gKm(w3{ +z8sdUSSY1lf|(8gr*a=IM8 +zRAt6=M1uF(CKBbYY(Z1AK_+hn?>G!Sv(v?gTZvYOybLuPSp#ZyeR8`o|xwe50w7dD9pEsPU}l +zEpWP_%L=}csAK+`A9KSW_{H=HbV+Mh4K)(pqE^G3@p10^D}dEQ-2p3VlgpK=2|jOA +zpEhR&gYJFm73K>19ml(fdq;_Cb!w~;fN`36x!c0t28U0$aA5795r1ZkPx8~6S>vAj +zdx3AX&$$Dm`+0C3Lhh@^k>t2|ub!VS)PviJ-I@zke6W$ONGV3VgrBl2Cz~rCs7^Bf +zV3d6>-9_`7rg^#daah5R+IzuEwfQ#s$U_fs4@M?vZR7n$bdm4cmK%@Wkg`Hs6FX@q +zdJ?USr7tHq4*vg8MzOwf?lixIoVSmeC^p$;r^>B1TXa#)UF}wI8e?A)57CZ#u+YUD +z(8Zb}U3}CQU5qdR`2Ne?qUn0*RrAo_0rNO>h%%oIDe1#EARp?B`v3kCzMS8!a~ac9 +zqkxgMF`BrOKEF(R>DWH3zQo_YO)1!Yp1-yCrTZMDQh%xZ>ZU*WFXX#Wj_^D;7v8IN +zp#7u0x9O{10MF)^9ll;1#_Vc+fMg8w9nP)ToE;mngcr^r%#>tz>4sA1; +zHs#dOqE-_%%KBbX{n#$_#foG&X{epzxIO~>%{^iC00-FYga)GN5$(`c@POmhQ`xol +zMq|D=8h^*k;6dkl)0MkO@A!Ql_p>(;w^R)6a?|%hU9i<5-@TV}+KzO~5ws2REWqFM +zsBc4Ts8=xj5N%9w1il~R+WvotXZyCk)`A{JUX^O!9f*A&`c!}K0snckyAsq4>O|g9 +zgXXu$pQG_+>beUirL|(KzXwmIUc1KcBQB{L>mWHMQ`qzVqs-9gUM`v59sr+)KaT +z|APE@Q!~8pn1$@p89Bj}ww;z$4-5z3DOd_7y~NrCKgCCte;|3H=X;CK1+VSITvg*) +zc6}-REM+|TH(lJ~k8OaCMw^#iznAoxYBTSI&fJN1L^JYxseYh%vB#_DQ8(q6Pgk3l +zd#aK-@b1a3Fy{rT=(`%(EBXtX+{+iS&qkYpvq11__W4}+V`*){=-L2h{3t6)F?!xX88qMw^*Pw72Yghf&z6;jKS7D}fSfN(O<>l?+M5RlEI{%!6_9{D7 +z8{5?}@oTnGC&Alu$!_vBqz|9*A+z=l*4*LCcArmc4sOjrz8`5~=gm1C;4T6 +z2JYpAsw}ul|iu3n{)#*zLWeeTi`4^|iHy +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 +z;z7~2D`5rYzUs~) +zXuZxJ5N+&YeXD@uM&QU)|go-2d!U)(|^c&DqzF&?hnxUWV`0^@)lX>CR)-Y8NfsfKEhgJ&TRGc?{p^ +z%;&^nJXZHC@Gg_uESvb%PThN~{Z<2=Z8N7kbLJ6J>{jNlG5-*MssFJbiq1v@kAS(! +z4z$?ry~1TFe2B(La2^o&uTGbTQ;E32?`RfL(|C0}j?4|X@0h2F+ht)pQDNI|d&OXl +zd45${@SmLv&2Qba&7<)dE@e*Sp~s}N8FMSJAGcclYCly6QBR@evfx+jU%5smP?4IaeMr%UKuC +zlz+$lML&3-8m&CP_vRUi5$<<0_-;A+iT7QY@1EEDjWZHE-hVD<-OKx%my_30V{hkM +z@)S;7#JGaz-|(}EIc}pp_N2SdEcTBT?6vFNy@!p++O_w-LLPfp^i#CQv?&>P}M&xI?-ze&nYtVkCNI!AJSoeYXAX`CAmT6T8@}mKa9X_iHMyaW(V!Gjw`Wyx&g!W0xpq-@zO@!bLq#HKwLO7skvjX`f%rV^7;2kyHtCB_6>YnUbiD0p)sB$wH`e2= +zi5z5iO%u9b1YYX*bYYQV>G1x?a;;W`^*+aWhgPS~dYV17h?@NyICB!i-y8uZt?9<# +zZSb$ha{5+zTguf}-k{*1SdZ@J^YSdtzMpRnK7e}WBp=CBg_S!h%rblr6VlJ~z3^4R +zJ1@RA*ltrkxoUX%aW&QVQe7|kIh2>CyH_gPyEv0_l(i1F{hxVi`zgJjfZoKNP52Es +zcVJDx?sMP|bC3--c)>>&ob37n_5HdM-^E>gKMCB`^R2!sm#s`*7Wr$rGGYh#CD4U7 +zv@7>SzuySF6}MFWjC>TdU#mXTC4GkJa|HA8`_!3$QFX1!k>vAwF}4r33;fuc)--gk +zyL+~udJkTu7@ztax*xiE@86FkKb^i8?aD@`#{Zc(<{aQVntdsF`!JSYT)raN)Vdo; +zcJy5Gw+u0sgqcn}Gn`aB#;1FHYuRfUZ!WMSH{SIp(e6ZrxjfUr-C1XRJ@|LVQ0Kaw +z+?1LRK9(gHzqj +z;Nz5dXioC!5_r=9ZjQLP8H$&5x0h3OF}OkIq~)gyxPGdr{WAUNj+)_ei<-G^|C~piiF)oWyA~QR +zvn~hb@l@bm@-y;*Wa?%u=zZC_q@Dp8^!ZvYsamcn9k(rZWVoh9KJ*iS>pP?j5|qk +zi$Znw8uT#qwRBhEb?T%q&Zqkij>k9a>HxImydZi_h`Z^7<8chqT +zegk@i_V9V`Ixoj}*p{A$j&7qv=(`mqc%9347Bw&C!sF!g6^!QbySMhiV}xl-ADO3% +zd-ZJjG7w7#HyzDI`N00koFB}%|vJ=ljUUf%(1)9Dd(?m(%t?p;zI*kuiMyixx_0U?uymnl_`7sRZwm8aH5_7t@>^ +zSI=upmz#r6e-I2SigOZd1V`$PyZ!ld8-*YET71M+^og8KE6?4>MJdnDJ?X*slfYMb +z@|uSao1u7nn6|>3avvW#1BYLMW8#`F-44dx61VRKoeu#I_DtuEL;7A`LKD+y`#IX_ +zyhXL)+!Oxx8?051c#|<#cDM0-I6iLp&S5^11uM{d@czGIMP!;+C`4jFLI-i#> +zhnFvBY%dr0`|$7E*$dB|Cg0|SDIDTntv%Qf%h|26tdf_Q~|;7iGUU780c=iibia2~drY878^`gVx6m$FAC13Wn%&5|>V +zJcx>4oaGyDa(UGU%X;nobtQgr5 +zQE@!!&B&{)?wJwpFJc}QuFncRh}h={YX`U-mkx$D*bkByRbke2eiFFoel}09c{@IK +z&%I4o@42r@b19|yM#iDeCL-VgYNE8;D;eX1U|LPv5HJ;f(L3nXT=_`sm>RxznpLjV!l6kt*4u8jH +z{6LvBbfhu%mB4HT{fjqj7M{2le7Sj`gH4y`tWs8Yt+RhJ=UH)k7BVSqp3Vf8=?;&K +z@SknN!5O!n)Luu%Khgex3GY-~)8j+BKh+zrG;UMDcs$RLgWbD=*r)Ed67ST!j+e}< +z?=erO)w{chb?SX7t>$=tmzkbUjW-F!q@7UMmc6!){g?*Us$C=--;0kPQy(Y&`IN>; +zSJ02<O<@BRMHp+DuO-36>Nh09Z6_ErnO-&NSsE}h%wbEWI8=KJ43lc~bx +z>8}AW;o3BBC +zA7q;mD`g$UJQwh|o^Ni12Km>s6n@@9?uuY9e}Klg%RJkoaau~?-@-R~r*)AN;=(0W +z^4{jXV5Yg~+fx0mmUq$>fqB{qT}uvaPx=s4xjgEu4}>5JM`z# +z!r(PEGq&0sD(W+eHLQTQk0!qLRLS1$#|P}&B$8*3_>dpXbfcF9@ROEV +z<>)AjGqJHPbD^nhBp9_HXaB();5Cyn6Nwp8ckAiA?wGNn_Hq}eZ5>}AckB{)@^bV2 +zjysT%iZ_rij1D7v(#zv&E}7Ghzph&NTF15Sz7D{Th~0J8;8c^&!97|hW7a|VP}H?U +zOZUrqzQxwbAy-ab!Wm@wLi7#m>iiVr-AL@>0%9i`*XtwZ_K_$V|3><#049o!r-zZ7 +zSMz=@V`xpv7xwF_{~53dyE12LXO(&Ev|~k>{Pr8{zelr6UEJPXuuJCk-Tx&WP&L{f&3ux5i2c8pcHqf&h@aZe6VDOM +zQdR(Xna*=vcr^}!m&QQeA|D3xnU*ts-_!YRSJqAK)SUkwT2H%Yjy!(n3!dfQJjOoLnP1U0bc*a4yw~3NN9~z!AoJE_plR0A=*HP~Z-))f +z`a^rVtEf+?U)3AC0T}9xkjC$P*W-&CH|35qc3zXQu`@>LdOwV#y}q&qu$ +zZ$=N&wHwFL2}VukfSVSe{=Z!#+BO&Kf0+K(^oInQ7S7(t)wF*hiio +zC%=m3Rw|pG{0H%{OS|8J&ZJv?7d!&LjOwQ-R*9~Mj`Btvy(p`1*O%<6rF{EczTLu_ +zF2Qd%#u6;sJJ8+v{yi5aygxbGTEiR$!(=kwI?xU8k@J(YkJ5+upuUxivaDM6;Q*e9 +zRk^yjzlTcovcA9Heri2DT)NpV=w3Ru_~mG`L-5*?!;iEcK3i>;Q9H*@idU~=pLMgQ +z0C~J!F8$%J$8S-M-=c*%C?3U6`g{Yp?yxrjSM{rR2A)`j%|RY+I!>%W{`@j*Un^K^ +zqcdbhXF9VCllw1#iTlRL#b@ZGoj74+zF#GB7y>f^ADl|S{0dDYFI>SHYqe#dg?E)?#=SE>A| +z9n`#gH9af%J^bXaxwsdutIg%9(cx55dT|)PVhZ}uz8h_N(+gc*dIkGvI&tZU6JXx* +ztN$nQ5TDm*Uk%+;`~S9dPff_G?z!O0y%6r%o?ZMcA2T%S>ie>nMMs}wylU#7Rhc9F +zy{A*SBu+srVowIx<~=?T$%r;Qye!D(h?DIz{n_1|#o15XjJ3OPKVAa&1oIKx{u&k@GFTu6LIUHx7CHo`<;#Mw(Psz7@1sxgQu(L@TC1gvLoB70z^Ksh>kW1R#}1Ad~hf{m+q&l9}=GBGkF%ib7{vp&~`(yAHNTMJM_EL>pZyW +zn~UI6+B>n}Xy+O9Ho@cP(C|?BtB+FHZ!7ju2Hd|{cy5ni|6~!K@|Q^deX7_`i^~TG +za5=QEJBocBf8WEQ@*UJh`p@p*UxXyX8hJKI|KXdfxr4M%c8$Hzy|c!k)AXbB>zurF +zp9py`ZQ#5WzG@SzBsOi!9<1S6#4IA9e}#QTz-iQ2;S#!fwEneI +z=lQV=)j?fXtUo-TK8MC6^qp!^>Fz4!$SXg@rcUNSEy36Ax6JCsI6QR{@v~X@I4tN_ +zZR_1S3hnI0WyF3r*cSX&chBoyYu(YR__p#fiup<@bU|tfKIg_o{Ca}G_rZ!{Y}KEO +z3lm`X`QjZtU7fO7rgLAi;)M$y1P>j4TgAQnKJ>oy-E8LiMiIxdU+2@$)oy*Dv+K7> +zrxmW(ai6hps2UE!uS1M?46q)9UgE>Fx&*J~^jQW@Bf;B<{d;`epO5B3zh~w;89c_& +zHGbp5IO+DSn%^JPcX!A3Q%B&YQY` +zzC+GCobBWO@dKVdzs}{WE%**55r6A{8kxSOkN?Zf(T=ZJo*yBMzKzb=Sw;OS&)(kA +zUf!O=-mZ<|o8+8`V?W0nRFlbvOLGZrE@iAy@Q`xOuAuJsvC4J4O +z%^Yl+@40+ccw2xS(!a&iFRiR-LbwFKPBXu&o`q;3K&}seXYX-k>k)M4v*B^NUAFVY +zjP#&3bRX&Y1$g{={@#jiC0)OpKDRMP?2#VYW>ptUb1ap=&(Mzvn#6hV*x}&*Fz;3S +z0)4G}xOv>g`zV7gCW^bQNIzz*ydSjJ0 +zMmOgK@sD}?YZ7!KIvDNJfR9)CWM!wGjn}^T=wu&+w=UWWZ{IB9t=L}U@V!G^Te`08?%Ag@+7HI09PN#=Wro<-Jy{Z$>=?Pf +z#)QGq&h}T>m$F~jYbW=k&r7!!zEUN9m(zDIHn#efY?q&*v~B4g+kd~OZ@0tK)0}%> +z3U2nB1=Q<*FHRqB|L0l`v@_Ti@8Ubr)>7z)`rWdFiZ)RsQwdG>0{74d?9(NDtM{Up +zv9wYBg;VHP;w$1K$I)3|?O(a8nYmP=$Bg4WZPQEXS7VCjX-{Ymh`;eSFgUQ~YTCiG +z;mP4)dGfLQwx1F|{vf~pZdZPIG7CD+=4gKf`1SdR=x;83!Q&wJpRD0K +z=)JoIn0}l&nbgA5=c0!!lDsk3+R@;3HfPX!$C%BI&h}TE@Qd1$>c`c)(77s18Tj_* +zay9*($2``%`^J;E=P%2-vUZ)-sss)P3_`~?P>h25B$&f0lCw|evz#fxqC +z4B5n!*U?UX;A-S}75a?y)^hVD`27uQ8<1(!T;Dr-VhIh~j5Cro)BZue>tGCc!aeYW +zN8t(2cF=bR<8?F_b;XA{$Gje0#+awu%gx&M8gwM#=SKG8MAL!|Jt0$$--a^}d;1DY +z$TO|6%gqz%U~n@v#k+dTf>}p$NHkSvI-DBob=G#E2fMt7bD}+?fiM1>EaP-nQ=g@q +zu_DBK@gL>7sn0&v{1_ki5$Py{=6i*CC^p=jU0iSdn+NZC|I~S^bzE(p=u-YyS5c?( +z^Wer9?jh_M(8251Y(E8Zau1uzwd<*SE`3XVNeAQGY*mkGI=@HySCu`fNDu4Loq@^P +z->jD3chXwHN;U%U>ehJ{f6P)@nxm~~<}u#;I-B&hZnux3o`w!^oI8PZ$Gvbr%^Yvf +zqqFQ|KmG=tMYwG?3%(0K$%+=r%|q?-yL$U9j;?;sCTm$=5}0ifZHSIU3&^I;X=EVu +zo1FviQhr{AwIEB)g_n0CgP;rUn0FEt=>BD#n+<^9ve^dTNlPveYEDc>Pd3y`n+Weq +zv#*q^%g<~8eISN@^=-E$WN^2L3d6bCLY1~ULy)BR2T2YL-Y%PJ~u@tdl_%iQ0Uw3Ka@=V^9b;sg7KdJiTnvdpE +zs-r!_cN*VV(y`8tVL!}!&Gj7XTIMw+^C@rvT&P7K?$!Lg7(z57emfdpl!M+ArOm^f +zIX#!VM#J3A?7)W}18-YtBbpU%t^;1+siPd*V<-(@FMG|~`>xGY;oc?X=~OE%)q5Ds +zhtB3f3m&N|-Y2!r)s2;>=ACgq4quY&sWSgo*tXJxnc}iu9SE<@;gU8F7u$Rvc_*Jr +zHMFpeH56?RHy=cFa5wKfz1oBKP*`ic1bqqCf~R2Z!}MunKR8PFFvd>$S&mOK3yq5o +zMB80_Q|9U^i_?AV^%;fd_UcS9@FS-CF7^HTHv#`m(TbI=hh2N}Kzy6|9Pg)RRztJK +zJP({dk5684SJ7Eq{kU{r3BM2x3kUox@{z}F_Fyk#GfyXTj5&>^o)LGPv|nWPy`-F^ +zx$d|NI&R{32iRVRJkmLXB>PQqn6aEGl3jD5TmR^{v02cIU>9e9&O|?L17_p}Gq2CJ +zUuhO|hP)|8?aG%Xo2kg2iPQ|058peJu$*~~A?K;eI^-;6KM=d$9D38kA@9)Bp3VH` +zZrLNRcK#c*PyE33e@nmh>=!Q=qOSz6-=%$pdAB2izpxEI&wqe}#jMjVj^D@levY!n +z*SINi-ZZx6l`rXQIeq!_piQUd(F{$g|Ci{~+gk(noM_=1z7fu6@m@Ggx-dKzA01YG +z=%e6tdL~NF^_}3S5B)%UW)|?ho-^D@exJ+Q^c{PWm`KDq2jB2y;%JK1XQ%3Ndgn}@uxB!kmuuY1nQX64r-i+2Svz9*qNxqxBnEPgC%QSN +zmYJIWC}UFx6@K%%wVy!WFE`h&tt5BrQ>^bscTM;MSYxW_FZOjO!L9tOoD0OZ;2mcj +z`r@^~=TqREJK@q}iP2l=Mhl9xqxu`vY(9xTNNm8Pm)^hGe(G{`48_ZS%^*T>+O^ygZ^UCdf%HRC8(R=oWg=t{cF +zHuPBG|2p~s*QWy7>6dIhUfl;K{*(<~)60 +za1<{bgRSHHTQ!dO;5Cf37oNvAS@75WHTqi5UY-k&n8EL*`$Fqeok{g8-Tf-?>FaL# +zS%v;~_$%Ap`gQB@)yQ||-{)12-bFpgcKOoM=4EuE>6@z2&-|Jj*x{}(61lQzx%nmj +zFwXxj>qJ#hStXTXy^X;At@ksVj?^2gf&UJ16FVn{Nn=(!Z +zeReQb2lE+Z_b)H%_R1Na%{SACJ#n^W=QQ)9j`?PRd;g&9c-gmFvoGrfJHtAu>Dc`l +z=$_h2Ygg!wAodPA2edPwtEugeS4e(OAil5wT0cs@it4>eucMB<6}9alI)T3F;v1f4 +znxHw!sa@RT)-uEgqjoE3ryNP~juqU~;mx5d$^6kTBbkcRJFHsWT1tx%2R7?_usxDWyH1{+7D^{3SX|EMt!MZ!!D$ +z|1Sfz+4AJ@%61eT8tejB_xJ3^O{1x~DLN&7mJvPXk?qFn-%`PU+x&7%g8$X#*p_@^ +zdiKRY%ies|qj||;cv)s`1e1iD$K_+ +zfjVOId+Oj@Z^R?i{7S(?12?A<(EvX;rV>H@Jd{ez;HPqc`A^)f)z%$NPX)q15REB6 +zgIwsO{IJA4&*W$bfATN1eA$b?TxpqHgm%hn+RvKu^^dwWFp(|Uxfd_US69Az(jup} +zdQAVxUheyZ50fttB`DYbwAQd6zXbNuW_V8anu`~Z^YdtSEB$n_FXdOR;(s;&SFqoA +z1K(WX#kA%m*ibuld^Ncay@jSswduqTItV2pE5KkPM6QcF3 +z`@cP(Q@=62>VE(xJ8abwP+qZDr~h5ouO#@C(sMK4ODB-L3Y*`4y@E5w(j)SP3$t&* +zXPc3g(IeRJz&nMnDNS2r-uQZ7p*Cx1-&goZR=QjQnvd~6Yz`oc7lG>?8S*Of>^08l +zj;F@JEq1=J$gKmMGX0%t_B?k(oajbJ^4k6GB+rm3{hK*6<1{iJ{bp4!%$R@Wj`yxa +zu<~Ael{FXm?BvewUHp7JOY95Vvo`Ssbix4j6ISTw{nXh9cA}*p@%NMFx^xWr_YHnu +zVP5K-1uVPG=KOAR-AUD+r7k;bx`}ygWWF!t^M(65P4J(vr+#vBQD{*t5W11M&&tjY +z9VA|JS+2EE$XVpY%g1do#xqu!F{Zk;X&&cy#$bLLqmwZ@PpVc0byk7N2*y~$7#kU5 +zS7#{rFk^5pTqtZuLOWvlLLGN`JB(4tC9pH<-?5U_6Be9MJu=O+qRu4GGvSv{x%bL` +zCS{WSCnI|}zhiyWmd>AlEy5X@sLorzqIlbd;l4x|7>B3@;RMG!UqBw*#F^)^o?L>n +zX1n?dBdIfejC0@baNb(J(>`$6=iZ+KEdrC8;(TNIvDl^Zfm@*~fJJR~W@rQFgCE;@ +zh!|eJYC*n{`Q7NQ^E<5bO1``Eq=(lVPL2sS#cD!ztWkGxiUzLA-WXcVS=ct}rOnux +zuU?QxH%qJl|D0Rq9A#=}zUtYGN#2tWU_-Zs&pbbuLtFFNulTX>q4sBO +z;^Cap-Hcq=qCIlFXuoQYP5zQ}=;;~SXK0VS>d(-=gZ7=Ye{hX4z0#?w++2uzh^-J8 +zwc^Y-LhSy7$5>Y~#_lgF);@gycd!p1;Eel)!9B5rm3v{dxjmgj$00tIz6d(mha8tY +z9(uk_b6-xsPB4=Eb8tT~Os$Cz--9o;5TE##&6!0fnd%<}p5GpyLLbD}meksPf0Vv& +z;QK1K&EV(NJP!}^-0-|%nCFL=Be#cnzK`e4!#v-{^Oj+rckz7rFwfIGw}NY(@5A$` +zJC!uaNAtSJ&g{FLnDD4h)%mGnjYHSh%y&+3;+gti+>6vd|GuAeBFmtin_Rug3P`sa +zh)oZtGnu3pJBP1t;cVIt!Cd(G{|fhQUl<3O#oT63q0=Z^muzL +z9}3#`tk6&3L%ZNZg&Z;<6Qnk#>KWzH?+d41%LhZ>wE3O!niJevm($#$Wp6O3tmxkD!)e +zBy@mrJ-NfUxu@P=m}_k*Ag +zCX~{t_%=E0-Sfcf8~rnOx$DBtHr5Pe<$xc+HlwoNy`6o?U1mRLJ@R9v__-DNAYT8N +zTf51#(IvNr`(E-!m{uH*j{5%($-AyL&JLXr7Pbz{AJUttswx?=a80rcfquqYmMUoNfM2Gipo4UZQ +ziDI9W4tQ{UO|mu7V_IIZ!sK6~50(WdKyNF_TRKWEiRLm`uH_5}t>Lc|Mot4Z}RYn&6Q$%o^F=;>s-1qS@C3zZ}^)3V)k)-Sl`cK%#-#B@y;-EY=b*b3wRlsn)K0*zvo=C^5$NtQ=bx-Y&-MtDd*LSN8at*_@x(CgFADt&>n`jRFCeb?byIQR +z>#L{(mH(HWo%!cttb51iRLIFH1}J@6yh!?V{(H)2AD{gcFl(+DpZ%oXgFpFq{{7To +z8(aRJiltut)RY;64fb4qn(McDpE|1VxjvmL{5OifqC0Go|EJkV5A$j<$mUjlXt{aq +zec9gBJ?X$NioQ8LYaOx@#4LK3;|mRt+idp8zc{y>7+l_1oDD?p=UhFqun(Epx22x^ +zJ8H3JxidWzcK`0%VsoyntSOb4W>VRj`&$!#Zd$sCM{<{ee4V7rn>if~sM*!i#ecux +z#t_cO4)k?5`3%9sus*MrqR*?!Xw7f9YgW7i-FS<`zB*ch|Bnxc|6AnO`33%!7cy1v +zzsh+D<;gA2ZX0@ZDTdJ}PdUF!%8HLU`-+O^PS`^&6VFyFzp#8mbTU +z{vgQFqKNN(Dl#i8YtB%w5D?m6H8yOnB}#M|Ew;oJ)5kuc*k7xH_v +znVlJH*__9|HFLhzl4~*dW5cD0DMr%RxA>5w)bG{LnsgaBo@VM&kt5**^aQ_Km~Z7i +z#bv=G@%6}QD>Q*Upu5Nlt~@y&(AX=XyT|f}flC*2A8mE9)>nbU0&KJQ;yKn*Z{EyQ +z;m;~3cdy#ql6lfRo;KF2nJ#Ky6gm`3wrM0 +z|C9U;tTP#NOS+4>s~+V@v)FD89-yYo(Rc^r{6ksl<>LY9MtNs^v!DO_0@J${U$DXd +zhH|_2vw;O^lbUflVu#)Q`xHR +z@Lli{ts9yq4{w83E5`U+_k2vS<}|)=wLQ0jT5OUN&DK3Vs+&<|y_!8v +z-{>Zr@X2MLV4+%9 +zPG|@9I)Gy`oX9huTfuwCdJ8;q-pGA_z~0Kf-p{wk`8E>d4({MBj^3pL;a=WltV8TC +zYkIcXnx2msoBeel-oW1pU^dOVClf4dq1~hG$F_uO(K;Jbi6#FJYwsT)Rdwh8pF5K= +z37`bEHf^m;5|Hpih^@70t8gb1^d|g@zuI)GFd)=e>6-1ww%Ju-l3*Ql5@Ksxy0sV- +z+d&3lTeqcK!2tteYg@K!x3skwekiCYu|MntLgxE?-8%zgjO>0M-_IZOxO4A4_xyOD +z_wVyQ??eAWOQOyP{LqYVO^kkblvrzs%iGqmmpB~exkKlHgaWf%*hrtQ^077tyyd6F +z4;Llg2ESrOG|Ib?=Khf2Q^uM0<$+(&zjC{g{x$lh$I8v(kmkw9nL*0`puByr!tZG?Ankab!OH=btt5*^h(g;H$sdI5%*W%<%yu#gSbD|JON)-u_hWarD;5>^#3|*Nt0G +z%%t2N#s}`LRKIKREsQh~_+F^i;!IWfiW}k2dwdrq#8>j;BO3U=kumW;zGrYOaUko_ +zpX=gh-x_pkt(hU{3L0J!yAOgeoC{mP-cjvgskOSLmk{@KAl#Il$NY8B^yj>Ke@2~I +zygvoge7xU7xy`<19rWS2)*hQItv!0<%wMNTP_CIcsFBte8P`bg{GI$U=GHSmKEjQK +zniRhryo>m@tsF&c&FMXB3++a5q=dOcZ$@@#FF~u|q#3;_rSB +zuR=z|#Jj#aIHTtRaQ+CoOM-7(@wZv%_}XuCy*0ld+KO#~w`h-H8@Ue8wjK!;fJ@2) +zApTdxzRVu*N&9@nSK*)d85X20V$~w(GJ8ZvCY3^ujx|FgBh3Wn^YiPwXwM?&^4GvQ +zA6NC|?LaUUr4ODyRKXf;xpNM1v#mApFI!R8rS`dcWUKW{^02%Th9A1}YIhzTr#~y1 +zHW*KUbKPb_6g~FE7U(gKUiJ;dp+AOS6DZ&?#^ri|QqtpRjzcpS70 +z9J4;FVAK&UjkwhYmtLb?Psfkb)-2@hoj#L-2fA|W2HMDdmtVG7>z|abr~FGQZw(S# +zwGaF0^>Ea3*E5OzR1D94>i6PXbxxe@6V(HqB#WU9#gqLLd$!b3MUTk|)zpj(Wh +zZqeXf*1q*k)^u#{H}KWI;jXFV_6F;ly^Z+rz~>148H&qK@h-x=h$iDcy9fVg{Cn=T +zKK@;9=QF4EpA_YDyjSfdvh5`((>t90!}Hz4Ja6IoMtn8inY4eT8*UK@Wxyr}$625O5WK9&^h`n0z +zd|n4$Ae+eVgpRB4^7+KxPkZt{$M3}dR3@M2JxLkqlK8@sIllID_ylERyJ<6st{I}A +zOBkoanH*!_AB^!n^+7OH_k3iKDN1&HkbdW6-w5iq@c{Dwa +z??wO<;T(Gn)9|H)!+c4<9pR2Y*>M(E^-D2u(uex#TMM`x$EN)T_}T?uQQumvFTy(x +z4$C{9x?$@H@r}2s%he&RL2~ygmXTa8;FaHc-ClWefvaPt!8_@A20ioQcj%crpof}h +zPT%|&%AeLZC$R3iAa%3gX3dW`q4WHR|H9)Cw#xzW4r^chQ0D&h7U~wy?ZYRRG8c6y +zCvAazgS1;g-fQWo(oKm8m~f#P7loyy@VAQ=qn5Sbyh{zpSE=t +zjBLmTU?`kh4PRjcJ~-s@x{~$Lx*UH?Uhm>Kc4D+nc$q76HhY|NWuT3u6);YWvZ2CD +z>`xC!ADNNWi>D{|Q+L%cbkaciw|JMcKk!xb^!e7r=NClrLk@2GFWzB4B-O_~{Fl7Y +z{E4?A_mj=|Lt3mg>!Vy_{O)2r>R&#uJ9?eR>*}(7&*wXPcz352+=)Lfeid-vOdsa} +zW7UygE0+4!>G{ +z4g6;FYvgx5zX-n@`8Dxd%&(c>QhqJ`?%)^YcNf1HzZLwt_{I6H=Jz1KZhjB(OYoC# +zb{*F!K4A0$#wMSfUI8QmK83>z~O3B +z8(oJ@N}l)){y?|Wh72e$UrR_9$Y_{S|9*dQx?``X;t1>Z$0ZQ$5oZHocV&K7f3 +zy3w}}z9=2zz=W<$c}(#PmRZPotP%30Es9;pTD)b}+J5t>9m|v_c$QEu5-ad+FJ~!q +zJHzxoU&I`Q0*g4;Oy|3j^Tk4DFh0$P`cM&UbJT}c>-%=a;f2nFmgLtW`rPISo`S33 +zDYym#?Y3Yl*b1hCtzatH3Z{asU@F)Oo`P+X-)4SK^4r4iDSjz_J^Xg_d!FAOelPIb +z%kM>gz5EXG)4XU-n)v_6%+oHemC}Fpy~x^zt#garYK?==LkadQB>dQS^5fSA9%Vno +z!}xFJV}q2(E$C5m!}_EPcj2tYoCMC9%(K8jJZvrSJ``@q<~#6HN0Ev2+++QK`VV}! +z$SjH72#g0Z3uEoHJIdS~i)3N0x$y_SMsA1YsaH;T^xTc#!@4@?eD1`Io-gvOK{n~Y +zOFQL@@OaLee-ik +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 +zxrxuAceS!7@atC4l|5q^o5tn&(>3m +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 +zj8O-)=HhTm9=(>(E_+vF&>wysq_$q4Itc +zLErtygdZN|pBZs>px0@AU%3UnxtyHH@lW6hO)mm}D(sKYhVAm6Gt)FW1vb#}kvW?F +z5c}Qh_>SBc(Dc*L^m=gh=~FcAt$9w2lS2dgS_@5I!kSb!G+pt(qUkU1^k{m@`#oIM +zK6mX49FB&HDC4bpdieRJ!|%k;BNu4Sz6U>B5wA84(OzO|i#UH)_-7MG3lD#)+Rd3b +zpL2u$%$Pjcl9MUMERI*PZ>aq69A^bN^dscLYkm1s2hojk?)8EPz2w~U?15wKeJ)Qvon0H(+GH*LjGAc)W6u~E#3$Gq +zSR1;WmF?ISj5Vc_3b +z8=8@t7_=SLqZlxqsgnDCg_*Yg`S(c{j7~}ySlxXkYZ#Voh#$tDBnD+-Y#n{_?F>3A +zkv+}6TVvhCVusL(l}oOid~_?Y_Y_~i^X_jj-^D(AJ9bmNkiH|AM8k3A^KD}6Iaus9 +z$2JHKn>m9^FdboZe#-QI#Tiwa#T}B*Em_zcG4t2A0LO0Xtfa5dP`rsc5Ai&W-0$Oh +zl;6$B$aQ93tjJo{J-hIhkpJEw>o8>w>oQ68b#dURORpoXHQmLO8G$`k!k*gS;IEaP +zgY1mU4!rsN*4h^8=RS#^np}bn`5^0hIU3a2);aja&)<6DT%3D*$x*8FnVv2PVo%;4 +zdx85G$&t<;a=R>0ZvT`u+A++F>QEfH;1JAP1FNN;!|0L``mw@X1g&oGXf{(jir5$6 +zwL7sx-{i}e623{Z$05iXoA9UEya{ianrPxWwCthtWJkQYY0EIS-frHdhIzi3=ObB1 +z_(%Glvvr%{zprI!vy1l;=7Rpl@c(Wq;`c4r2a}DP|Nfn;h&>-%wfxfKA9%*2=NtLP +z54@PmXo&gY+THA{1E;1%rQ?(_U+u<5SE>M?rgiJNMY*qAL6-Bb90-mpgO^TAejZ-% +zwBJq%#y_;8+wpn1Fs}&guy?uVpKrIjnX@Kr9j%Yyzri+DPOAB_fVB=?cLn?0Lv{kZ +zl8)`O!nQxK9lSpfP4moWUCsZRD7H)YTkz5s%)Z24ejfeLXKsjB9vNl)CT<0la=4e<5x{)-o{bbwj)-0XNcrz +zrjdF|ImbqAX*{{|x%bt)2d8{G +zm41^FuIAdRGFNw$)Y)~pHuvyN6Z_bE`0hK%;0XFuYoN9+0IXliOv10<8x9h8Swo-7 +z4p%r=At!8nN;W>rF#fbjW`*;S-gc)f)$V+IGudu;J{4?ts!Y3cX>XhJ(NvprS$CWBv1prfMWoI7gx%&;2iu&Fn>Oe2-d3kF +z)#^;>ZY9U&A#9LCj7?{Qj8BX*GdGl&$2iyPp7rQ)_$`*KztAk%5Hx|u$C>euSDGb{ +zPcipAUS%G8{4#UT2J(9Pj;30pyEvK+fPoLB@OJx;t)mH7zq!+)mCOUSgR)Bby~g~{`y +zybRX(a%T%VR|&ki%8aAjA>?*jTxFEwyAoey7q}RTRzXe@f`Uv-rOWyligZmt|g{t0Wm%G#PsNjub%(px80%f +zYn)?U-Ew;DIefte9W(0cRH4ohforjo?E3n`nhvWVB1SCm0W?Zx%^JD<+>hEPFzNL@fc6G97MJp6hCuqQr3{5V{iY?r~EAa>?3D9>{BB5v3HIX@z(v5ifilUa<6Z-_E2J; +z3tjfM*ViDv!x-P0zzF*+WE=7cKS*atdvWvqTRQjC3hb_X6POm8%DN(*36hzZCf6zR +zI!0myI7f+|Wou}>G$(%p? +za6jt>J!gYU%7<5q-@BSP+EOzsiJuBs&mzaRXZMaI*QY-abY>Oa9D0KoR^^qb(pl<( +za^eqX^i-P3omFNQxbr4HmfJRJ{K0(vXQXV9k*se8iAf34SH8Wc%z1?|>I^r-e#}ZU +zi&&|k?ZYlZpNaW77guq6qCxK6{tz39tbT$VPjArvqG*w9@+AwM(fBWk|8zD&^FHuC +z2z>@QlUe65`k;O9ela{hF^uD+t`=3e~XOZdXs3!kKjTK_f +z7bQyBE3f>M$7nam`LLB{ZU^TKQ-^eKPd-+g)|FZp9AVXj-s@b4suApi_lY*6>($0< +znTJ`|?Io9s@`+y(AHm#>BDZFJ;q1`wSpy_CiE{$qfLAGwcWzvMA>pz1sTbo9bo1eo +zd%_AV3Mt02ioRRq3@rdZMsrV0A8SR*Td6%;-k#~EJU#WHV#RqF_q$QTz)h+ +zt}_Ev?$RPmC6kj5kX`K18qKf)7hgM*g{Z0BLSPG7U=L38% +z{@9ESTWu<$R-y1y^H~911XF@D*B9fgi`8?VgJC0nloIeT*Y9fd9-hUYFWh?KPsR{i +z?d~1uxe^@X9cSv`!&O`XHsNT~+Qk}L*P&6Z?w$?qHy4@xKjPVD^|Lh)c5_eR_k<60 +z#>JDrt05xv8ebus#Y +zPv&UYX3dki?6=S*ODwBKO9$BIF +zeR$&p7ayUoo>Anz2nCjg{z^Z+bM>UJA7lOf-MI_X0c0(*Y!CC3e0@_C`O?I>1w(OpF=c~1AI|=C +zcsHE=S;ceNpVR5P^nlFCv8VD=N>^}pc=ET1a`Llyy21f;g#(-ZiY(Q7jvxFg2u86} +z7Kfg2v%F+L%ls6!d>C5 +z1i8M&a{RdndHmC#d9WDp%T65J@M-EO!f#b+#zAX~(C;FQ +zEu5@0JMODR&vlT;SHC>L30o=p_{@FA?0$U8$xN!t{A1iI-fou_E_C(d3BXZyQzhpn +z*vRM-GrHqHK~iH@p?};o(99WhCo(4oy1wsQrSpBXo^!O~F#3Atc-Ym+arIgUC)~q+ +z;@_HX;{IH_I!3$zFg!3CeueISFkD1Cp6q#Vybdxp;jVW^(|eao`;bwTJIj@2?_F*W +zb0npii1V<&hJPDffVM +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 +zSMjUnM_U^&!g)Tnk(?TO<-w#dx +z-`WgKS==h+`_nKzO&>XYxX_(P4_ET_WYJKrjNm5TBi@nEFH(QrdZGtEj@}nx%h1Qc +zoISI9+@;55&-~q7dVFTKFLBDhn8Udt<-bYXgUWw0TUPX}ev76fe3zr^T%U6IP|Z8V +zxRxD`*88yWs-RDJ4D|U|=(8{Ezy}-9JEfb?g}qmSEp`gp}DeY_ePmEIy; +zmCsrFNs$|Cz!_}B;$F*7w5zt?q5sm3SNHIG3jW?ygqT*w@}7E1F0Pb3NcR<(jrZv+ +z@*-Cz?Av&zwvY75K9r17o)zimcW0zuIF5(AyLr#^xY~ayTTU<&yjom4fUzLM_gw9j +zU+tFPhTh`AP`sEd0j;fABUQ +zF>5%3$eRPXZFD9PH<0;d%vS-V64%d9W{~oN`PI +zh5gfcuoq2Mo2sbntFwrw2wlxNsHUo$xa7ylm;XeGdBF7}dC%S=?&U4y;9Hw=zNH*L +zP8?OAB$GcpD7`^=?XAIN!s!a-!1w66Me-!;qrHP~c)m*h$4u4hL7bS>*+IX +zYsoZXcp^P-;RnrR#*yOy*C^jB<}LTV*6}3=H7<+xeY|J?MbB|yr7|{SQ=bgyE$5H@ +z)c9X_{fDkB5gtodlrBEUg^8!5K%cIjf-FN;4Q>?uIoN;4{=?&$+9S1?dZho#&jSx{ +z9r^N-I_1%#T-+kJxa?5np;pZJrRbj6B*;rohEaqesJk$ks`@cnNh%k5oC) +zeTh{Dy?Sl-z2^D!q?6C3UFo71=h40Lsc*{q)_N#A4gOSO{le8nb2JZp$nSX+*p(b# +zmo2-Rvg(K1w>(}I<#{^u>y7Ss0`>NvhtNf@tH2*1d&4;#lcwXdwFTHYj +z`{Kx9&;M(DuKdM@zVc+_*Cuw1Db#wkc-KVsLa@Kh1b3V<3A1 +zon=&I%}Y`?E}j`Ebey22*rTJa-$ZTO%wjcO6zv=5Xs+md(v3T@uMHx +z)J6Q5RoLLvtXH1Ac3W$hzN>8~LK*xuUGS +zaN+GSnLL#ng8YyNWeR@MfZoos#O+9`TjIx_~t?R6(3c3BK62Kt<>i@cw4T +z=|cuC4%FIdE9$|9Jru0h;!`+)UOF$?Xf`E(7WV4rK5j~vpO6l(HC^7t3utpi;B%ba +z7PSvsQRVXtz;2$W;J~(!N<>Dbo{9`>4ntC +zvt%o6cLT3GiLGeEw=bP>Dg8J`EMT9xuU~76Wrxdv$J+j2W>jYh-zuL>l$zD1q&l`bulw-n$kL$-d8ooD+yFL5SY48JE#-Pu7x>SyTw}IE9sf5bF +z$4iVa+2F?fdUlb{!}4^biT$6;#^k8HY~MThMmVqdG5P1dt+jpnU&~m;KjpW~jprAv +zng0}jJGs!JwO2=3|E@`^jLwkB@3Uo|=>KfC-_SJe*!`nu=WOfokj2?aqV0<;=vw^r +z6wlZn-dyAH3iZvDE=cd~-FiZ_xCovh{-}PISa#|nbBW6%M1wg#;pe&dK?q);dOf>Q +zYrtO99f2mZEzc#79fl{IE=R*yXAxZpe{TVC^Kd<)X*(`>%=6)u7= +zd3~20<~jUsf4G~Rg;PFyy8oq={RKYcCdR*-I%+syGD81@$QqsLqWRZ%;uoH*Sd|>k +zKmYtoTTe)KxOj~(xdl8u&!o0fSA2E*m2Q4<$*FqgU9!q&1<|kDRvtz#5gcM&vbArg +zk8g&L+~)O<`*;iW7K1mO-9#)|cJG}ZxRcLSdcy!XYP)Mozeavbe;DjQZg+eJ_#(4A +zg4p=TYV7=N=*aszZ2#}j^N)|LG`G2ODuwyfcQB +z-(y9f44w6nWIyt-*m{ollhKnV#e>Wpx(7V0tiu<;bVPQEhY43*n#<>Ze-dArMqac1 +z;f>HSd9_-VVEwN=IVoozTEzJys_*)>z?v@>HFv;?w-HTx%|WXejML_z@_(TapJaL9I6M_ +zLrcJczP52zfMU>YJ4Kf{SoZ!=w#e=A5AeRqr6a9VdG+`3ZZ0&g^Q@Jt`drG82ahp$ +zyeC)gAs?!Wv!e%KdNW&T-MQE!gs$g +z@aM4hlq!COc}cYfz7!(s0tcG4{R(LkR{ +zvF&oWp!jZsth@mI+ORj`b>MkEW6=JFql`iQg9iFFmbIU~^tj@dOL_0c6)YjoBlgu% +zzEQagDEB1e_+|E9-|3s@xX+Ctlere3iuPl@7G9bi$GO%Bd&}=-WBvKjUu3@>$+s_1 +z*MD$7z}|=;dmqo|Ss=QuD-d0r9&HYG6`A&~3l2w|B_ke1{_X23F%|7ve;#A}?dO_< +zZHGr3w2zEvw-@t!Wz=^2uu07=vQl%Er)Fkh!aiKoY9B0GYX`|wwV3}`6+WwaHY-L6 +zpKr3tOn>xJbJ3$8F@ukM)C@lQZMScy`|{TEbzN^QU!2x@jK)8L{{5UjcVzoK!EEbN +zzsZx){{i~^f#`}Z^{>!8qrSHr`d&<*N6_Dq^mmkbrtNIwZ#~BxjJ`Z-Eqxh$RDC}< +z;u-s9V`kT4XC0)UGYcQJse3c)OG#wbqZ8@pB>Fj-eois_9=XI^w05c)?7l7AuXAYs +ziDj1_SFUW$gJ@#s?>w5QGH=DEm`m?BX3YI%feGQDIegqH><^a*()PElzM4;y`;T=O +zH-|ycJX>>xIbzoYF0^lecCnj!YVL{7y4<{2Bff|~xTm5!IxA?LbkJO$mannmmWb14 +zHQ24>CiX`oj>!;Dm)Q|7h(=laJ}`kj3gF#-u4QSR_uM<^OZE=UFQ+S4FpRf~Jyv +znSXcfZ;kKt*xFW^%=YZqyfNj*=#8y)Q}5so#?!WnF)_B*O^lK8w5?)HjIDJOV`MyS +zs~8hwYu&^c^Tu`yxgwH%P!IS^x#JMD{OKU +z$e-cy!s+lr`C7GRqrD&dHuk}f)9k4;7J3)?0alx7PsH$L>^8SQvDvJ8VhcVE_Mfo6 +zC;5COev`5|@uv6y@E@=@Ouh~2*++PmqKxmc3GSW;_7)PmS8mU=uszID@S-9*3pt~B +zT$LYMPJ50fSxZB^(H(c2Uw26FM9#+dQ12Xgj1PRg7X81@)%)-hd`IW?D*ui0%D)i~ +z{@CNA)xX7FL)M8ly!GZc!Z-c9_fC84F68}u-Urz)7Bs)=_Y-dwwceZn&h5O&JeuB( +zOfn@eaklpi_sscb#+1NE;>q?+_zjM2QqCdC_9ioJ;~wH=%H2G#FNgP-+sPqx6dhn5 +z`=}0uKOeZtZZN+FPWkNgZ?z5H*Z0{-h>{SU`~p_Pv9K?68;Q7 +zF~ZOA+{aZmifkib-yJlgI)m7avL92}_%CP1?$WnsQ%>hR)4vY-)Nym*4fYu?wA=6@ +zF`kZ#OlqgvI+r^4(uVY3@}|VRoLXhlZu%BXs#U6R?6X!91dua>0d(YYHFq^#_<@UqK#S$|W{|o2kaQ|J&N#2)c-+!C?ZfNfT;AgQ9 +zv&1ai_yYHu58%6TE;yih(VS>*mNPHk;l1WfbD03AyYK-FozMFzBO2TLKpF7yVh9G1 +zMY$M)Xw-`d03IEez2MD5ZvLF#Xq~B-c&*#98_+RUNQZotezb8P?p(3YD_=^vZ_$o$ +z>p~Zn-#fYYfp~{vu8n!Vqcf|cD1IT=_QY(v??2V%?cmI`_zV9zT$^vwW;<<$I&aCg +zsXnfwEPd%{Wd3hvZco$a(eRg_%#B61C}$#4RyZ`u-P2UTyd2y>of|zosz|ibfA(Ft +z-e!tcj~Br@T9RAJDh& +z#)s}x_)y-l`M*3EsNHJ%WlSe~-`U=1AaJY+VwX175B;)!%8r>GpVx_Pkij)A+0Y +z3y*|PFJ#Y2kHWtiDGP26v_!YNXX03aFNT7w#}NYtUa^N5np6xp=aDmqqc}G}`*_}@ +zE{`s@XX_e8J$-J!J-?r5M!KK)=S`ox^!QJ*k}BlC;(=xnpP`tahU|KVVu4sg-5A7XQXVbE33)Lr%AvI^#<`>` +z*BJ9F)_Y=#^|~LLDm8U6+3)06OHASC#gwr}*Ol+%of*8dmW+4CTfrXrsWZ?8@nIXZ +zKh%()AV}V)^2m7Cm*@Mz0_RgIue=53H~p$ZxK;nY;OuJRiPdfu?bSeE`0TQ6p1xQ6 +zmAv9tWdBlG6kq3)UwJk!IGx)&pJmsx9{l-M +z;vfuu#Q7TybSWLdX%5zJ^nAqL*<$!O!G*gs)p@aB4s|h)?m3tb +zphK&VtuD^5?NGh48-2`?WC`>fKWoVZ{L%->|9F+%?vCw}DC@%RcRq3f+yyMW?_1-- +zJ<+=Qrn6>p{k^hPd6d?m>nvk^X?ilhk3;*Hc+QL4_yX(hUHD@0Pe=^%o^p>7c(6yK1&ZMiQPsxE$$8-Pbjq{=1!o_*6T)vL^6+ApW?X~cQ**MP@$|&z1 +zemoc7a&3BJoS0BQH7DxF`}ogUil_Q4TGDgT@ohIum@QvkZq9sJ91~7y?u1`|1J61s +z^Wh7^O_}GZTXwN4|F~CtwA^|(p! +ztm)Xt%aC)5Zzzl5D@F%hmMj2|s>jtQCJuVzpls~dl0o%hHY7n@#y( +zwl0mgddT;pC)MGN#fu?T9b5A1D9Wp2s6XMz&Ug36t7~x65Ay2hp2{3GZ%$jZOTMF7+4~2w_p`J29ohRi+545*`?=Zsd$RZQviGgo`-bfO +z-PwDMw}tkv$v!W$(0|Wgc$Mj!K|V*z_DjYPZ>_zq>d)%-yW{1$XI(=63gg-$Hny?% +zUiDQ{pNY;G5bWdBt2hGr$Q9oL95?$ZP%Pj +z+vKUF-KwzW@Ije5#EMRS* +zU`Tn^_H3O?ADv*3LFKiYm;C-Fc6juovuqTf#ri67Mweo1EB3ME_@tkByhQMbQZ_#h +z%f)~9`;&u>U;8_@Ox21Mb=b_6zBlHpaoWm_f5_yTDT2uE2K5ze(Tt}7ETgtvr)t#&NHS`J97p7igZjOeEx7V~6K0`j;g|>Bg +z24{QD=sDjM#;VWGc@@t-Xy&h*LjC~7QVS<#2U(oKr#W!(f4kuS(Rh~&d+A%kb#I-Bx;Nr?M-FU* +z-|xdN8r-abC6>e~O`XObZSQDa4$-cp!^1cHL1RZClilS~4W5FUJJFRcpUsbaN4>qF@m +zg#m*OItjGb+tSvD@T5^DKznUVThRf7VzrijuU{|iwHmA_Do?%IekTDkzxQXKbI1^5 +z+t=&+`y;QDIcGntz4qE`t-aRTYjYo}@-UMlgqTzANI<7i>|MtW+Dr~I>sFQ?T3fq3 +zT!np2y87Rb?_B8PMPpOmF&FAaw>BZ8ZnE))i=2Z$zOrC{^k8-%`I-)qgO2kPz?N^`Oq^S@FIH^t96~qYEY*Q* +z{o{Z2*Y#`95Sx=twuQqNpqJl5+`;=JDzI}+K}UKAo4s%|A01QUMaGen=18S%iiIXh +zp0|Blz#ll9l_D7N>;u_@ts%2N!`vQk1RiK_c_#bPI%qH6nN77A^H{u#r^EBZ?9Hvm +z_`idCvioU|5X^53nBvT>=FXTC#3mkT(i{^r<#n3xI`|4W=?vz5nt8Z$ +zfcZ(M=6?!wVX)cYhf5Wjm8`cL?fru~Q!o6F#ozD6ro9(U`u7Lyep+`Ja2}7bm0Mb# +zlAvG4DcfeWwa`q7E0!+8T<3E~F}{8KeIVcPakVOsxv9x#O&Zn#xiV}l-Mi7&C;Yjk +z{nvN;A) +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 +zXu6J=E8(Rtxs)snXhZN1 +zP+8SCF?OSN}}4DW-Ww)8Esh6O@r2 +ztv$xyE7#zc`{s%9AIqaIr_BEarU2G0z{=f)7S_K&vwsg(L){qoal*?h6$jnd8SU3n +zoSX4!Rd&XAUb?oRuYK8*loLG!dha=}dbIQ)?|bL_NZ7Jt8bioD*=3!Y2zl#=Vmpkq +z%a$x%Ki_Ok6h5;Ic~Z@MlqCk5x#XSeAV=|^$yqgr|Em)pW``w01?#LXX73qB_adee +z+hl%1?G$oW-`PK&KG?sS)x2AJoHdcjriW#^^x4)pnzk +ztnANOP|mtnmYW;nv)Io%D3{BK??R7K7>jmCjq>E-S}5}gW6DlfQm +z%k6z!_;`<4IOX8*mCEv%)Yk0gm*dzrUA``#yk`#3;(P +zt~_NI(B|>%8@tM(1($gzmSJUu`OV7D9oko0a%e~GC&T-yzF<0@8)aU&Z^tt~`A`>{JNbGffAAs&$z{9KZ4h( +z9mVL5%4XAwj~!*&pLmO>=8L|71@uAOH +zf6dktiu3Gl8-vWmPf8Ap4cPIAey_U;0{ImwEU;{Lrj{hPx&-}WB4+<$ircvb;-6L8xz +zyuj21OijSv1nf=I@vlq^d2#v!O?_elKI;7;7kGXWPt#Za#Fkif2;7_R0!y{~r|iu1 +zQfyA2G%c^;e@hGtyRp|o4e0^EcczW2I-_~7S=Fq#Al;El|K!1ZGulC1zW7`uM=l;% +z=lQ3;ZcJKd;k+?^vvVBdEo6MVc_*5~uDTPyeu8_5cjujl{jMUyIiq2&@YP{fWqh0w +zJ5d?O?+Z?Lus+u&1cUmQUwe#MLJaHc#L_<9%30@BH82gKJh;wquW-BKu8%T5b@0i2 +zlT0WUKy`z?na@JFT&rJ5a_8{1{`ljf0P$#FPj*TT?n2yvxENjh|T?>*i`N| +zYF$mci}-8d?>f$i8t0MY`5mibgZMU`HQ6)ovpPG>g_%9X9&Y@rCS!+avzz4PQ|re4Ndf(gSl(HdmlLqr1L<~YE|11 +z`W}Qo`+w8_pWp|;lsr8=+Wisdcmh2A+{W~e^6^AY8uOP;W&CkoWV2DOu7Zl#Z=h@S +zxB5qmR~0%JBJchj{rnl8j62xEeO``fFLbsf6-PzAW@7wPtH~X*+CP7A03W$%es!r= +zXB%~X39aOV;}Z0;6#gRSC8=0o?rddVZ%$CZN%~rw(@?McE5do9vj7{&n>xR-CB&UQ +zOQ0{#jIS*HhFhCgQyC)$J;hm`RD$)?!nx+8X#wtfbpB|Jyz;RX;B*jiYAdP7U0n(G +zWbK1_BKMDdv1!&M>GvV>nar{8$8*lqp{qgW#m@8SEBsEnb{jaZ!?vSy +zS6dnD81@)x`u+rTKrVuK1v#_opqopK+j5SX6u*?`xjZl9`AMFi<5^(luja1v)qfs1 +zpZk8e62r{j%I~d)JAcP^cdqJH-F1sr!6to804p$ +zQXIa4?zfo*tAHO`Sb+R<+bT>4YscMCWF|Kf+r6pKq+5~gtpiO9_>Q+;%(ve|3zwLV +zO +z6K)m0*J!~afQz|r7cw@Ub9mMiY{Mttx^+UqPIAWFExE^d<6Fy^1C2SxKAL+ScC`XG +zu@Q-ojn9^k@1~|M;)N}ZFz?IZU7FWCVg{B1bAq`Jk(;N@*;qqtb^99XpXVqRYtl;5 +zPH*~HM7)V|IP8XA?u9oEHqY??mQ2#m|A0qD#`Zo06bRFdq;9op~^KGf|{1(j6bmA|p?O;8~k5Vo_3T2jV^xEP7bbJa`jpSg;HNmR4XX=J_bk!93B8GG$H6e1All+d|n0@3CWH122U}8g>Yd +zy-kZ(m6rJ1~ub7Q5WXT(Z5=b+g2*^a*b>BNKWQxexZ?n`;lgJO-ND{hYM4mGqt +z*nW7E{BZy0qN;ccxEzJN6P$a9kI0bEgS~avf_WZ%)xfsU=HVv3nwY%L)O+to@xBfm +zUYuvr3xRt~o|`VZ-^*igz%0lxubB+%a1SsGPvS#@e+qj?t@k)|6T-H(oBkCeq5t6x +zseJQNB8?B;@*n85)$;SZvb#Ay$T#W9%A-rBCqvLm!{7{fInfjD_#XkQgt7zaBcX#;3Sbr~h#DgxLw!9sW=&=TZ^YSG8}4 +z4RT$*@AHEPe(2dkCw42YX=bNvVj9owj8FL2JK;WeObyi0-Fu=>=_-PC5l_+V82S+` +ze&4N%*AK=m8>Qx7?d8(vzeAtHa_BRk_Qjv3<0pn+Cbu!4@@0xnxle;QwMW2R4Y-=g +zv$FN;wvSWWoX=U`TWR<7oOXGaOs(skT1+0e(Ypkvkt9tc6!6d1dzSeKO+^-aQ?1dE#m2 +zA&gC3dU=Go%sY>DRw2F?b+O+i3e9)pp1$kRp+|%3Tl3LN**m4HiRHPLHl@dZg{PpxeF04u%H(u+3O`4KeBIpmuQHy +z|CatV?jn3Lg=Pigod*pnzGWP=>y4%T-xWXLk|Uync;b%eHSjjom!2aWOf(Ir(BLe_ +zkV|{t@Nse{?fe%wna$iAWRnN8a{74jmxB2`ALeP4WuAa}s)d=g56laC!8{I_y?OFr +zUUCxVA|K`{z$>_sZKuHee|y0!Ig<;s>%+YJ0T1R&fq6A+RO?xOr>od|ORp*Q_XRDK +ztE8V7p*!&xc!|Z$5T}8?LMl;M`4#f;i`+x@4PYAN7|nn4K*!yA)GV-b8~8SgbN0Cg_^!iV +zb`*Sy9>rH#+pM?QiK+CT=Ni`N97}H};Q4|NnU~VJsu9pw-U|I*kSe3BV6f+uSXZJQ +zZ(UtTT*6)1v7G-ZgchfvuV{@aw)VSkdUVA5q;$nQ|IO1|zUFkWj&5e%K9*F>voRA_ +zstv_Kb01pjZgj8d=qS>`0=XT~q-69_`WQo7Rp6a+N$Mo$Afp#JCjC{%{VhJu&O+{L +z)_9fQ}pR`8I8BM~6;UPT@g +z#dQxd=d#z`-3l&K;2|YlMtBm=8qAT+%Qk!X2CgRIL^{pD?`=OO{=xTV;Y#?^TnHxh +z=Z`PmuVzQAu +zl+9ghvb#vWs(r<+Y7G^_BgJpDj$B{w&Rt7SuJ-gqt@q*RyVOah!D&c(sv})wUTRMG +zDEv9U;Kyc^h3jN4j{%*78^84$(xzt=~&RqJQOuw2_ +zkLG{ZtU3KDa4_Gj?K9zt{ZitwS~I8lx|U@78~!~*AFd)V9(dpko7G*lKAaViSl!Pe +z_0#P8NeR^>_hM!mu}9)RdA=O0TkF`Qt&OyyYo^5HC +z?pJ|b>RRkEMWOJ7fWJ+nyaQco&O_{Vkv-ItZA$dz;a)JE;p1K9B0e1O5{vU-zw`_I +z`@*Zn7wF!?@3lUD-)iE#rhiwY?9U^2U0YB{8xOYMlKATJrSP}&69a0nd7^I(2)niS +z&2nq8ztG2#R6F(5?lgNQ=v19PNxRY?C1b`PTdF-hW3l`=^>fuD$DKD9rOZWXLU+Tz +z$G&4CYsA-^QfxNQ4%VdfmXBML5&9C{RaqIQ^@xsqay`zn>oJe@cn17g_J%xc3kCeI +zJLT74uj7yV4zt!K778Py=~ui*?;K(bX7W40yJ&vvI*$g_XKT`%|B3V+$ZO?BsDci3 +zuaab3z#k;b;Cs!IQ{oSwrQ8L`4(*2vvqQ|Un-xDn&J1{S +zF}yikc?8}($m~Q0zqwiU)ebhFEyPQ=9;B>fhTcgo==(z2sWLm@UsF@^p9xm=r9MBS +z{>;ytUgEuQC!7j*s;4sN@V$3@!2J8QAG#j@K~=J-%gbw3Y-0nuu|fVN%AU5Z0w0Is +z0+g5A;M*v||1k!ihw@uNH^~m$*MiLl!WX89h1{uo3!Iwr*zX;kbrnj`D~o4;?ePYe1!i+*Jn=wJ^beMs?LqT@ZRXXQWK +z<80|N`QtOMnN?lvnYvyxM>g%{o9L}5M~A!oKF&HLU$((dwU-?b9#GX+4EZ3+b o +zho)iIYuqcS{oAb}cSi+r?xz#`1)tm{-`ukDNbE|+D4)3cYQg`zkU2XFzdQJ}({=Fa +zl0;$EMO`W4Ee75gul+ht<-Z!hoo5Z;?iXM6*1(39!~yVLZ75&QpGJA_l}C3L`E!$e +zUryYOYc*@AJF1tsl1gBJ9{jrsh8R +zCoeu!S(hKKuKGN=%Cp&L$fx!G`XT%|ra3c|XT)r3J;#ZscLPs8d?}B;viv{!_;&jH +z`OOV_bqu{)=SySqV@StF_c`NsZ)}6Hi$xe;p|c7bM*V%oW)%0(d$AI#o9~y)+`IkQ +zrH2f(5gO@JxvDIEM&=v)o}iG +zDYRNyzK)p3M>4k{n_H+;>aMFTeFq;*q{{B&V%)!)?yltS;91T2W_fH+_p)ZS{W<7C +ze)7HDYn!=?H2KN!zq;fWB&T2rc?2EhBy29s?n@StoA6uCRaLh-w^k|VVjS7~iIr~M +z*()3BZgU=}`h@c>_jc!JRcAZ5x($v2zN?xCt&GvZg_iN5`ZiT7YY|Q6Zox74Nx{38Lrg&9_`PSxhojcqD=LWw2+vf1fH1A(!FZU#6 +z?`;k{^LT#_v=iS_VJ_$IQ~d4a_dT1}Fy5B#9nG!X`;uG9pJ+^Y)wb@nNx>?31dIAt +ze}ct>VGwqS&#zMd>UW;Ak#WD;+>d_4D_dfM!KCdXP`Npv+VMH%ZWM^^FM^OYlK((rVC|8sfmj)py7 +zxyK{ov9s-Yzn*om;tL*452SzjDFs&sKTO1o?^Zlh2!AH_8=Fh{3wQMJkB+;&I9Txz +z$HX&#>wYACko~^y1sdHwz8xNIWobQaNWP9@Z{Q$X&*NLSFC&$+QoN_wge^XFF8;>H +zygu%v{b#TVAI#n#7fjmM?#Z5yPDid>{Jheuu7aoh{t2(VbgM(z7nj#l?{N0CWk<5_ +z$B$+=v1h!$C0vWbNMz?_Rv>;Q|l7hUMFj{gE@B)LS+g +zdO3Px{H`K$l`E$>I&-Gp`ewaY<_vNV{g{2K{MqkCzvAb&;5Rvr&TJh_TRK1D@ykgG +z=@t&M_XNC3dXI4~Y^9CP|7M?)_USg)7XQjJ?Agp?4-OhE4mKeh3OP?&L~Pf5a4^jw +zU#7Dvg&n3zI(s9zS$~3`O#7mIlq$`!=3g>P@i{T}3)A7D)0{KA<~fb7=6i*+&Yi|y +zxX_e$z42(zyz?%34RBD0eeRh}oO|DW4SN!YJFV5v+t9q?xI}+-PNaS%VaoH5${~iBBTN&v=aoUg#kUmcwczPv1i0X*Lekl){ +ztsK!YDffQ%iM(rI9pzz<5sV)qmoI<@fKFS{nKoU+Upw(y<-}{%6s&N|`mc+XPkts= +z*7h)Rd4+47XO5ShzAP5**b+0#8jrtYR#ac-9BG{Z4m9_=cR}alW2`-$i+}lFygpl& +zY(Ew@*kT#y8fPkJDwnbUtX7;1@33j2#}7T~mA#F!vWEn)>;6dBhkZKVl>b0=6g%PR +z)m}Z;YU*;n4`LlGVlJ*={uY)gCx2zKg|#og-CNMzV}5<@$T@+2ogLr_7a0tDHf7FOQ7+i}C#!ImM6CC-Ls& +zG+~cg(FonmU~f)-H_I1?HO^8#!SEP2pI8>feab%Mlvl+#)0CF|=4aS$>^z`52KiQX +z|LPx~_VA$oJMP5J>c1iwQrA>mdzItrQZvz&`6U8~oBbFE_NWgp_1>hF}m``=yPyWcT6xlVMq +z#$0nzW}eNJb1^V_IGGMSc@`(?@-~#pXZKs6lHmz-0#ne##78Ybls%< +zkik6Y?&@0ZGSzr={y_5}TY`7)UF;Ve8+?L&FoO<(`!fZx4ruf +z+6dN^=5IQ61O6g<6#aQLIRn4&65;|QJF)LHb5qS3>XQ2_|Ld5avpie_pU$Cpcm4^+-taA?4(AB*zk9yVT)Mu7Z_-nBS3!Uq +zJ%yjKd;<=?X=HudFG5pZ0fl;wZF24JX +z*Uian#ZSF~d{BzF>|an?+rZcryDFR9y6Z}q+YtJs#x(kVQ{|LL>R7K`{jk@mZV_;*?nRu5&^mmIvbQ4RRnNAKEkobi +z{PrH?`%Qcw=;vVA`hC&L_1((vhn=+RvtPc-`e#*Vk6&j#b!Jd!tTPVY>E+KH>ku#O +zbZ_B2dMeI1$2c=EgMX&G!Wox(9-U*~dmcQasQX(-^5d@K6^|2t?Q|n6hQWtdvA?Kn +zDrLXM8Q@Oj--!tAuc5scmyPVqw=#2b(=>9p6mnja*vlR2dn-Bj^BKRF1NXgX^kJ`` +z_S?4~`vBYa|70K85pl@>6kg!|ha(w#H*h|T?)-4_Zf7p*C)y?$)c-rsZa#c(A^83# +z|Ce+26&R8OxEJ~tj=M`TF2cANTXLCGO5J^17+-RX^K`TL(WjUX!PK(G%h|jEoN->g +zOSui9k*d3!%Mh(OL0<5Qmm!>pqJ)2^CuWw#&qrAo__PG`;f(HN3;b; +zZX{x2pAXN#rrO=4`!%(07-y=4@yz#g(J0na_b-HfedVcJw;%fg{H=e@vf9g`apL)E +zl~-A@c8d9yZwFryFnGCaGF!aZU#tI7*Wk~(7FwSU{4O}v`qsQFzTKGjw=}S3L(tYs +z_+$-x4~;`GXdjLO`OP?M +z>uz`Jb!J0%KKC`wHEM@(me_GFVVt`2TsCEmM=?$Nw$w5PjrUdB8EfZYMxXQd{-=B9 +zubOrrXZ{8dN0&10Z(VRDJc4i5d>%5mGU%)QId@%WQ;Y%)($Upzr{r#?ih(sdSs +z+q;H%eIzOKE%pu5fK}(L;7zvuYl!DxfL{RGx4Z~`%{b)$Qx0Bl-Fs{32y^YNp~%U; +zBbl+ZORmARe0}0&YCmWj-fLm%y%yHw;4-t&tB<^oUXdNTN9TgGoZlB+C47#>|fE9N0kiv%)`prbK7Z?|RkAW@js_&Bf|HA)gIdzqq +z1L+ykm6xp;Rd><%N7bL@lvc3@G?vZCIQW7$FCQ-0e(X-@Tw{=qE&9y#B(@D+;LT}_@qa!1Ue0`5 +z-1RZvy6?rC?+st``V-HL(U<1?vXk>|$7Jiv?$Q_U8=N!Wg?@dlor|(FfA8fZxB{73 +z0&dne&jW|rmqnZ*mUkY7ZzaetuJP`^g*}EZ(-cE%*AsdH`0tX;IPWa4Tnpu#?xE?M +zY+Kn=+Pd9u>rToj)+?75f_dEf8Lyq`l*#4)Px$X$-algPHQwEXx%y%m-_YMIuL*dJ +z_=}CR)B48_aLM*-3wrxtG`<7h&^*4s<*&dc{c^AU&7Kl_@u_<#-Iu(i&D%eH!2aof +za`sQUFZqM$VqZ=eyZ^6GK0sTdFUKiz#h3ntbs^hvfAami@Ne^xed(!tsd{)$K!@HP +z5AQ>pt1D}LS~T#jQ5Ig&;ee$082isQ#YUfHeImh{ICRRIAg=V3_3+lsUTzF@-LznT +zQ#9=Nor~wEDEE851vx7MC`lPzBnSb+J5)s +z;}t${|MU+%8oE6UZo?)v2-v<<&{DO+v^+N*n=I=Q8TfndU75i89%b8{OFJR+&939w +z>yJ+&Hg(OT>yl@)r!0gII^0wJQ>#mTHa^&Vfc(9Qn4nv2&OUUkbclU!W6i{v@(q^u +zUq{}-nR^u%HkJ4|&D%8i(Kp$L$cA;6bAHuOpFX%-&-#CFy9piZot}GC=c7aD9@U;X +z?}(;3i#CmWKV#S(CHEJZEu9AA4mL#iOUL@>Hh5!>&{iF^h959v@|SkWmn->(pA((ndGssEqrd+huaC>= +z<7&oO4oui`lh6z2?xjmOb{q$C^sOSwHUM{})*mo2_o+X?D@`~O`!8sCarT*=s=tJN +zNx*Z}Z>~=C(v50EV{uZVCwoTqWA4NLE^Vs*8f@E|BhAl6l?h8I1WuF!v-^?!E8T9*caMqt}Bb3tp@VR}Kqf=OVW3LtH +zHG?TXlz#MHGVj~J?#X={*iSNF!_SXx(6jw*hhMkJ=G=zv*BMh@Xy&KT@^0C-dt{z$ +zDW2_QwDj(j`sm1+zZTl9N9Xs}(tDPN?alcf*LT(;AKImBkrUOsKRNOSe5^9ASm`t1 +zf6CX|5B`+rRJnQ1de@ja0v56oOpn0){gecx;NuP_DkMgV6x>o)zIoc +zkgrX$$u#)(SZ7{MO!uAYo|i+!z>-fFKHmu66|EkD_dfiQ@ot?bTe-%oyGuSg-qn1^ +zM$8XheUQV0rIXf7LL(X!3S2Zd}4`=1m>EJ`3Np&pNyby~*>NXzvi%D`lsj?9T;r&@|xP +ziR|&^7q5)>cOsQz*%NtZ{$EIHUV7Hfv#z&x*1LmPJLo%%rSG*P8~0edkDFxI&n4g? +z7+cS{Jl&LhDAtbY)YQa2tu?d124C+?@Ya|aWAmvi#n;< +zR!11gKD-2ck4)u}FG?^8hIg_{pHsWS@3cPrOD{Em8*JO>vc}_fe>@|34g7AQc^cWb +zq`3k65`4EAx@9aH59bAQ)=853YQL|x7y50tTDtT2_7%__xLpO_n +z6L@aIUe>hLr@wQ!<5OeG9Zwl}l;5hIwXA*v9QDS{hci9gNH-argP)&6W7oisq@x6N +zX~*t~(>ddMlKM}u{y%PP5Aa=h+f92aBmBxIEj{#E|GA#0>|!lE1)t>g{lDzt%>loN +z(bj76(?{7mEyO-tVP*3rO$q1W1Zy9;{WSi(4~ZXoy$zgg83V1l?6sz|2a7|03Fc-I +z^ℑ=QiY63$%E;b4wL;w>gc!!ekSv&Y#9N@p=<;*tF2kGaZ^YDYn7pPI!p< +zY1G^h7o{9ab7}Jua%4x{2HLdt6zuvz+kdZJ!MhE*-q`QhnI+gRL$%eMaUgGa|7v$- +z_L04DcvTtuBgB~9U*+8a4qAB2#(xs$TNa7OeouVZ;%s&YYt70VwUL0Irn$4M +z6`tAxPleZhEKeOv`>M0B4}LwEZ-QeE{R)S()IWVTnyQ-ru%3i6H7HSCefs|BQO2wsR-zBlLddy=wK?1J +z2=Rq3?7n$?ll@%ZcS9e!Wj??**8$(y%b#c@i1#Yud{MpAye=EfojH*md!fr`nfqZ4)v-O~B~os(<@?KH=ERP>NkGnIR +zQs68}V1uI1eP^m~^mXs-pf!~p!(L51N4`wX +zlXWe^=X@o6eGfj(*n=LN;yu%8NA#1QZ_=u#IHc{^h8omkZ!jJHgoL-kr>) +z$n6BORrtyEvla9G)9kxcpIB9VyOrpeZu<}NJI>ZS@rnM@4w +zE{*&Uoc<%(bUFQL&NbKM>}#J+pBLx1?D}4Q2lM5PL9|)x!#~i6zn1dkIf +z-sK59?*VM@MoWFz7E)j1_$IdSUqWw_>07pO_@bTDBG!s*(69c$gU_XWf2XCAGa0+k +zW8;au2sRk6>|T82+DCrw0k7;J%Br1#?2m*OudRd8XZ^NLN8kAHOWOB(cbpRMuydHy0W!~Xu`4-+>Th;^A^Jv;hofX2L8lGJF +z0()PzX8W;Xd_3^MM8F5{q#g0W)cGIf +zgK1zpy`U_1QC`a~`RG#6VPC$LB<U3U>&~rHOxfKVhY_R7e$hFfvGwrfVrNKmg!m3m +zXWwVXm#eGf+wl!aonzPP%bl|MtpTq=y}z)>yb^oTb?7>3W0BQ^Pu)+YuNIDmAou0Z +z=3K8`Pae$sY8rMrw`T}B`#Pd;zTrG8VABW+*0Cu~yrDyzgqQM{eJYX;V6alk%KnZ7#LMuj+Bh+nQ +z&hs;Q$gg>2v1{O6&c-tQ*^%~zdD>TibL4;*yK)eH|46j?evcPuZKki>erzp#C!0-n +zE(?#UB#y=AkLkUh9-v%b>+DY6?}mPU);&HgUN9Hkh5b&`<#ta~A3vBqIARL4p#B3` +zJbUVqsQPr^L6fj|%8oEU2QGdmD` +zeSgkI`*U`kZA1Qecs9D7^g8Ktb6FQhFY)Ff;Jsrhdo{EeoV(2Bzk~QD{wrFQ?`9Y> +zMs~i37)M_+?yaeUafywQeBk&};FLbn8;0)nfDZSZAKE94+{yR8Xk;$$rAMv}#qEA^8*oZDab(B!>Gkjlt(kGMm*GQtH`;>y4g6QR +zb6-qbe-F=@$@(stdbh=Mv89Pq&t@tvU=QVX!nbl|e?WVE$@~`EuIR=| +z^Y>?M+`>ridmL}^BK!$=lHFEk1h2XB_!`<0KL317=MuWNoaNU)1P&B~&)$taa#cK3 +zUK1N}d?x(Qv)RmdW^mR-``=~2aekZ5UtAk<(+iO&l0VmAFT5Iid@znUI?rF}L$UA0d53W7Ymm_t@p` +zDGpiq@3MDPXszq6U9Hi#IJ2yIh|y=TZZLFl8jp)M5O6H<}g>Uu0ntK +z`H7k7s+zfV*v8vS8|K!9-kBL|ToH|(X5z?~hmMaK-I&oC2W&(M?iFM`zj-D&LvNbJ +zyJ2x>qte +zdA+j)KAcZ(vYR+R7TRAOV?Tl{o{=P%X<9mim52CHBr6qfr8VN|GUULrdfe>g=>4g_ +zV&f|&d3yrw7yrb%^Y$9|vj4lEJ+$ES;JOF63RX;tec5!hSM&UDWOP3Jy?Vifj<^qf +zPcXfK?y?8kyXnLuY1u3I-{xsy%+Qs$hZRn=hdqP43>7c?3j0^?X16ekt{0i^)Rm|I +zCHik`yg3AR_Nm>;#yW3btNNpk3D*1DLf}%m(nRE52Xf7W`Q`Y8)8B?(UQfwxT5k8W +z_hvl3Hz>0+-fv@j>=APCgv|4qtI#(lVn^Ex4nv%ORjxJ8xSl=ikbS&|SH@jrZ8E<2k7x^%)V9vxBgpX|Yu(g$GZJo|K&>SgtLTl&; +zeyn3Y?P?DQ;oG(jfTPQ3OMFoB*t^U6?xug~9=|JM*Y6d_WhYtv%Vqea1~wO&QJtsR +zIC%IJGP?yk8|P{|$A8b8-%OVCIL2f)#PIR3NBe7b=yQU@JHMqECa>I`d>0&_wRGCC +zUOc{#v$78!8^5#2q&lTnN7z&4S$!zJmNvUG+0k~dv^t@Fy?E`<_;ECROOB$=4=v80 +z>Aa8eY28Whd>>p$wh0fSNx_rLV~f@}ZvU|FZ3~M#HjCJE*X<4CTQ%E{Z9~R(uztT_<;#Wft68tE +zzqdGwErR${&W_7posE9LS-Q)Kt&n_brS53z0#mXD*kn)gbcQ##c(I6Y@hoZDNB>UE +zdGOyzTKf4E<~N^x$0+KGUT1}yD@UFfkG#y?gB+&6BhhapyuP#txt#vA?@&3duM3

uU^Ie(%VCHM8D{-n=_m<+z+cIR}ZgmM7I;|X)X2#7WU}f +z(r?#(<)W@z!Mpk?WKX2=2j>R=!1#4`@WriOpBrfFYT9@bo}#h+>iGDy#;0|h%}#02 +z*nW0gFi#<;`QZ_|tF^B^j_?pghQiagk+U9eX4l@IiFKra!Q*g1y;p{4m;|y~4X(owqmrY@jXHYH~%VhcEf^ +z*8KEZ%!aqD4O{pQM{lPM=@Dw@8-6)2Z|vdd^{YKRUPn8X;8AOTBy(7c9@e|Bv6Pu@ +z*SAAZS^mj=-u~I +z)QS7JxV$siH!6nnRNndk<%EyVo-)q&qr?1h-sbnMe#nj2ei*vZ|IhO59WN21>=^5x +zzlOM@Zu&Z5??B(fxskE>KPTaj$6wZlzl{6MKfsS<{q^|gl_SaXg-Rx@=Ff1ZzJ=!^ +z!oS(|Zq9e&aoo0)HPtbNh9v8S;PPN0`yzj(NF!|0KnmDt+2TPj^S@1{B% +zCla1lr!!%dJga#+<@4$;6KN!pC&_^ziXs^w;#K*okR= +z{}Xujh5y0S`7QiJ{qY?-uWBj{M`DB7X9akco-&$sInw#4o%ppYgy(VAzv9hRhU$oas9pPpqFxj!e`#<#)oi*4OCE3VF_}L=L2eEdBcn!tc6~e3F**m$zE(yNU +zob7E|Y0r@NZysRZk3>(_zW!7`JBqfXduPzM3yGampS{ZzQl`+n2iTsQ@Qkr8hrWk +zbN6H4q`f%z>Y<0cO{~Ck8NDBjO`tTgjD2`xOm>3h?8z(fSrV_979Us^UdKK+l0FdP +zOaT8!X%D+8kRwTF%|Km%3%Og6ZyE6R{gKu!Xzp_^1o!V7rLA +zr`j&Ovk=0|0P}A27`V}yo>!9|es*g;e33KZ;HN)hk&P#?o#y&a_kO|i%iRJW3+7hy +zxRv^fw+cD4D*2x|EnOy<|C8JmwB4+|M*(Nk`)ae%Z!@3^&iXjzVK6du>c)B9cKYDaF+EQO$asYOcO`9je7uqQFet+ctHyNE+w5dVd3`hgdS;q +z@A5G=`8eWT^J|~qe(aKvX?OO|t@}W79UIaTd?=yvNUeh`Q*5dH*-!FL{*^=E@=oFj +zw%W6~??>rhXRXOE_0hPoJ88QP8hsBrz88FIt+VGixz@GD`}^x%be_9kb*USyb=B=_ +ztq-QmzayvU8#!@meZx0wO||QtNcti8(y4Rl`J-2&_W(a}V&gi`Vx6cR?Rlg>s=ZvF +z+SakspNFI_brcKVn>M`m?w~#4@eu2XHj}p?D?Iz2{9UK|?Hg!MxS5AMx*hlyQNEb@ +z{Stcx;kMAmWj@??H8MRH$3^~}=IRTB{I;&5t*2~T$_?;zo5rm647{zc`4U~jAE9l| +zUFYZp?Vs~t8%KMsIk*dASSC0PJ45I@pTl-0oCWap#@U^;Bb*&z{sWwym(!m55850K +z?zTe5tU)^;3!&i<^tKb8P{s3e$TZRB#Pq>)o5v*U>X+2m0&4)}S+vr_$LP+8E%#CwE;~`^RqS0jcJ` +zaIJc|{>28r@BQ6F(^J7oh?v(07-Nq<7tEb_k$je?j?2T{sq;3_Z}TPQP3JG#;ja$s +zxQTWB_vY!9OTBqoc#^jFkuP}xd{6ri4-bdBg@%Crb8^r=@);>s{~qMSyI~{88SOu +zYGe72@?NlLzq-sRMeaDwTYa9{dPz@=Okcb|!S{E;{{iqKeynyX9$UQXt#5ho&*%G7 +z*t@*%M^1i!&Ho!7QjP^T|CQ2V($ZXxxB-$}smOX>(m!Fo{HT%PvY +zXT5oMp?|@8HRb=8Xr?Aodn}u>ei_vRZDYu6HWkb_h1@7B}7vG%vA8b;>(Gc3wd?`L>K5$6S +zk$%&Sp7YRsJ}uG4VA{Ng^&lT%0Bg{9?pz~tJ`L>gGf1Dkj|C$WFF0K-b#U;k#={iT=mwf{(s>Cs6F&CSf;67~Q?nq_b4 +zjf*&C3(?RG+#}gfh1^Qpj*ica +zbQ&fs3zt-uvUa_EVm*5`+H9h&CfaHmLrl2q@7;voIKGCf&h=<<3jIcaP5P|P@hZ=@ +z*1*U0bvk_o`H}bNz7fBjy%%gh_B!~{`QcJz0Qnin^Ku@vSJ%4tW8NR)eQ;i34fX$D +z@iXK9NBj)P!H)s9-uU^rzIx*);c$o8}`wT~;8m(FcbmOb;Sc>@PxtKe>3o6n$-I_fJyUh<># +zJI(j8tB)J}*bTLzw%!`mlm9Q6&)vMsH>(qU*(?NWsfoWNJ>qoq2V(WmJ-o95x$CIW +zws9Y8WdQ4JBymjdMk~Y1+_TYhLXRsJJyfM!8OrIIR}+aj^CI@H=_1HL}_jF``A#ufdk23~*Y3eUz_vvqLBA@c(lx^*6z65vL +z`fT5g-jVgzv-+7vKblK&e~^cNWa5Co&T{!tMGpMA`6>eV#goK~G=_TY&Fym1vXF2UsaCk{m~_2uhRe4h+lBcZ{3#!PHdLOC}FF^|Xx#!b8qK5>m( +zdF4XnbwYn>Ei{#n7n!y2$7PQXHnYG(?J0QZ#pCSx!d#qOgZa*k{QL7QdqybSDgFq6IXdXxN7@n*3M%-9tP2mM<*i_?^-(fXk7cz5doe& +zI?>wFc=qx>-;9B_r&*qt%MU~o!j;zg$HAiz2w@!UhU?# +zcc9#ZFKAC~A=l9HXKY!}tDSbr=E8@6qfs!Dzh;BYefrLLe1t-`Dz6Ze_pV{`niVeT3@5Ry%9Nn3YzV@9&0N5_@ll~{881j5@C<|J4*E}i}goemt8)ZH7xo`uek7v5OeVj95LtmHyRc^wW>w*=d5TPJ6~d4I+6`Twr- +zsCOMd@YtMWrM;VOX}4&qm3)ngVJF9R*C)u!BOg;S`ORC;oRi2dE$O_-RuQ|H4^A&i`ZXheSbOo;WaXu%;rFU*mMOQP;sV}_{^bg< +ztPA{3xS{s7Qeq739YCe7V|9VMAI}4Botc##O0a7@g8ODa|DEt9+wKG(SF34bFZ2@l +znmz51i +zPHO)wSgyX>8&^JMg0Ti;f6^cGffDQh)DQ9{6<~iU;NC>X#+FvLzMS*TdpB$43x0pv +zKMr}K=ghX&&l=hj&FTzw1OBuC{?+gmt&Kvvrn)-?UlDUz%-nKUOJ{_2Re_#Hd`RaQ +zbhNRoCG8tEKe|H-KR^5H(M_w(H=5Rvr+-l}e)>yr--6l`ZK=N)bP;>e8@n-&Hx^Q6 +zF6S`EbBE0EZ;-L(hMzny~TV(5dhFX0>MSI{0S=k7?SU~8XQZt-}9o!p{(0-Aa+!NLo=0x22&M0E5R7$ +z-%y<3;pmV3F&2_b{*|HfmqcQ}rtY)MH~X#oRA=n^#j92f@Nki$%$Kb`dVfN913BhB +zyRT7yz}p18P3XvtSHjbrf|8ilQo@WpIY(McT33Ja`%Rc{kW*`N^L4b_Vn#Q|&FSm~ +zy}n%DZ8M`2&csNpf_8MT0C*zjWrH{7a7j$|gI01%n4+cdiP7W_?~X3pQ62l9Q^md3 +zCFDjK=9V}+qWBTHYibEHpM0DhbGT1pmV2Btz&d9ZH{VDq2bu2esKO6gM;jZj(|sLZ +z2lro3WvxyAy)6N(vcY*doIN<#3?ZK{d_}p91m79VC$Yha61SxODKoltsZXP0(V_4E +zlJ42_azyW8EuHV<^%~kxeg)xAwuJ!qy7%ae60e^zlo@Plx#wx*eMNp7t;D8&&;Rb2 +zhD;GfY9COn>m( +zzm9S@Gw#(Uy#sg?&t%8%UPP?UtZ=FOlwVi8AeYv@$osjrz1sVcW!6vdX?XLrg086e +zbBSzBgJw;TooN~J?H*{vz+2@TvtvZh@aVrQy2`&B@$1Sp7Ni)>&qT;o_66!j3z1fufTK_{7f)uZ!ufB1uf6u#Yp=ET+G|%+7Jmw3x_OdMX|?NL +z?j6Ld&=1L6_3KxZ72UqhJMy!2q`;9O>anrr%T7g3kI9CzBYgjzu6!wa@)Y&}M)ck7 +z*P^cj`vCC5SXP=n4PiVBqF8breW0pGvLVQYKFV_s(S~{aTKyLo(tBUz4B(5L7iC>+ +z-*J9@Zr3H1vVk{MR?KTO_?gimvXK^ugvaHB@K`cE73_;%a2a4bs1588YhRQ`wbs6fw#PGsUopIV5q3#Z9%!7CxT(JI +z+f@c`)7I#l&SWAQB|9%p&670pz)G7rr&LC3-3rTK3>HPs`dz%#3p2h4oWoYbcwv-&B9^+qNE5J=dp!e#Rg1 +zP4z+@mEXdb}3(;;<;oO30}w%E4#?qQWrs^DQ(*SiO4l^95jJv$aAc| +zDW-E`o8BMvvQK9%WN(j-o;~o?EsoAhia(I90|%{ZiZ^9Hfc*A1+PyICYnGWi`^uKe +z7IHR1EAryhWv=d_lXag|OIOUkbt^U*dewG*@v(NYpDtS%GI+DzE +zew)SE`saCk>VU0tdFpc!eHG3p(qG}FzCN+k^|jpgb!vy}>(uOaFT2EVQ#`-f@jr>R +zxnSVj2y11b9iQC|G5V1BZS}Gn*%RRz*(tlxM1}BZ+!MYF-fG}UerZkB8u4q^spR|_ +zhixX_(EMR8Wsl5B)~!m@dV$tM{K&oI$c-H#KO-|YS2=E8BX)wFUj^j(8O3*CFgK^- +z)7}HWx%njggj*H$lKAaU^!*j?7)#2dz2n&9@^~J>C8008Q5po;L7ub&zZZI3%G^-S +z_#`a?9qOP1F$fQHhhs;nIS0D5^ri55)bhvw*_t5h$z7qC(XXRd?0BaeXX-+irj8og +zkuN$aXP6rU5*EiVDs-K2NqLu20zA9F)&f5XPqiztKKy&e51>Xdx +zve=L#&cPY&eHv;*ehKV@KArCv?_oZ5LO2Vc^=}V$Y2YV!??@T`LGhFBNRXfK5Af5G +z{!>?TZz%jtbaS7^O8A#1@Lx=w&_=*Lz?;ptA24SEFZMGpbbqpR*s33=$rBJ|mN3rv +z*zhMPx1{Ffl^w)&`gzHEWARM&{K?}P+7NwmW7z}5F7N-HVxaOeoS43PbO$T9m8aVA +z=|vqqQA_s91pO|vd%G=tzwrLn9^f@0i$~(q?y+%=PS$m!nG+mE0PaN2jfCEV(64MJ+v( +z@ITc=cl2b*frM|XeG9)c`TZ`x__Nx3`OWaV&D^xE2LI3wbgw#ock&zayNlmee)sa* +z#&0P;twsD+@SCC^Y6^ysmW_OqN +zt9FhBK1?AQl~QN8`L_3Xa*&U{ +zX$E&aY}5JXZHc*;q{-`D2Q=pb&D +zw_~){$Cn$PMt@$6zB3fRyk6P_JOd3Rj~00Nzx!{3UkdzI=7Z!#>D?jT;7at?8J(IR +zZcf~EK)S1V$lb$sCceh0oOO2dF^zoNHcI#EX-=hfsEj)wfi29M@?*aif1NV2H>k^+ +zJOll|D%KndbA`Ex{cuxf_n>w8$KzbILC$ +z|F+_0G}qqi^^_jsiZnmbBl=Egaxe@q+`fpjsdC)8dY>Q9r%D}8rRXqW&DDC#TFc!6 +zDg0Nd-pPLL6~4|dO8!ni&g-a8-*dKoB|%Qf7A!zA8=OO+Tc1j_&R$_q%RDwYb5u2)~?O# +z8j@G-p8uwM{`;QqQ#!$q?ZCHoL4nplVh2j9>apLpMG@oJR-daZnH3{bk&!p{&qkj+ +zKA|T!Q#Y*Jig&G8s(oqBhu`sq+dBr~669wEb!sK=3#JXQJK2Az-)#3`ot_|DOne-4 +zBH2*#OV}LK(X>O>hH0w=zjKHIN7sg~i*l*<8StjcNY8k9n01!ihYeGxv%vC1lU)bk +zP4so0`xvMXOAp%Vd4j#ooZ8uJZdy5;xkS7>xh-}#v~nku+I|9Gsrs+DN9_8Ib@T__ +zbmQ1jj>j*eEbqH`-*w7y@^#$Q_2=-!HX;sE`;z#O*f)EZhqbeK>%sr@d?A~kJ?0~E +zkm3pP*x>its}LOd7%GMtpT)p^z5LM5dcD%mQPC}?Zjv7^PVhtNFzuBd)n5G|{<}2K +zf42|hznw(`+gqM!@AUK9$RyvL2H#EXT31N_;Xm=-v2Y#CckLe5 +zZ0d(S=fV6H_NfQIPx9U86XT-wuoQR$`EB^|uVH_!E5UC&3kHt=zbD53xcXUm>#=5j4jmvOX#tf`X~B+RoeLXyx+3`zhVhQ)oqSjhOzC`Ap~D^jOx!fa^lo?h5;^SA+vfav{_eD~F$ue=mwnrR@bN9xz$Y)h +zUBmXT`oisB_3uaVp15rLUi-4k{CnMZTJ^%7rdJQ6D;F2U)i#D<_xAtOKj+trrDL8k +zkvp=cZM%X0gKl{?vbT*`pUE$*;e1#$V|4Lk{M6kKsr=Z5y-j1$FQzO^%{adJ-Ss>A +zAKxDI$l$vfja-%f_K;sAYw&$N>G7El9xt%34y=`9OMaSGJ`mAgd%x^gWUut)#=EvN +zyz4m6;yyn9so%%Wu>Yg@B(3Ft?`7C1%82gkfM@Z1#N+u$YKCHqgqzO7hBf=FH3Qc) +z@xzYS+_@_r=bP4tq%$f;j@-Mzzp-CD)_18Z +z-%EML4HQxS925T<-Olof_<}gOcJY*W#SrIk8D$okmKD?O9jtB~pZ9PU11AE`nJ=Vu +z&M-5gIGwKNzFK0|R;o?$MHugylzl(2Y+EIB(^2tR_RPTX(TnNP_>`=F$z0O2!|siI +zg1d7Y;s$6XU5Rza?u{^Ct)`+_irhLP9rw!EvejBZayvhh9k-O)Bf7|Sq@>SrA`|3@nvzn0UlpchFeDE09;S_5+j +zv<50KmUM#W$;+1*@5K61?(tEKM}~8jYD2ogsUB7qIK1!pIdsn31E=T0d8r={^ZvQS +zxE!Atmt`K0ZylQZefc*ee=@YO8C{B4lS5j2nD>m&jLs-l9N1y@5p@^QRL&Dj-GHq= +zL*t}gX +zt!;PHik-9EIF2lCO=l>3D)LF^jDF*3DxFI3lKTR`@N`vw$RlFgRz4B6-RRrR{mJz! +z*!7|BD))Y0<`=#UiJtAasx8SI7yp^=(L5Edvh(h^Ge561UaP6A^1H468+-kCx7B|& +zR*DbM7%49)aXEQ8li)ku5joz{TE3dWyr19GwCDePJdteQ6m4rC=vZ(SBb2mvukrPF +z|8eWVQY$lEn|Zkz_5y>wJICIifWM&USDrr39?8ECX82 +z@Xw;(Z1B*2*xsZJPSEDf`r0M$0?c10+S~gF$z}H9u(f3;$=4qpH_h(R-{6FT41M%X`FI$s&TB5&VhVF4?;KP9!EX9 +zvaLEJj%`{*`IGE=D!Fl^&Cx>}`0ZRSmX{;>Y)<2OFwYHKJ6ru8CUCVrbnW4MGyive +z%8%I;f39^(fj!q+e>HH0-xDVFlUDM=8B=ZJTs{<~w$0|woOH?4>Gx4)HtYDvDDKsM +z;%v$-U{A4|+?}nuR|h#H9~koffcn|Pee2Tq{(wzd7Of%9Xy4ku$+`ZHdv)uW+oC +zY;5IHlufEQgIAYM>HC)Fvn#-1CiD0*@UUg^$2gsKcSEVivyL+7MP?iE5>`iRM~~2) +z-&yPWUcvWw@qH(KP!9Z%lc9pxm@V{|Jlok@{>qho{uOub;T@47Kg$F3TW9d6c8)Gy +z6OS&|T_`v9w{g!eIfd_28yBAA>fKMhZyM8!ENP3jPsn@~*?pYV8B-n56q{x|`?{0k +zm++m09EQ?IPc*xc*Scdtdb(`#ml_IuzgmH*J5F=bE6ttwxR;~vR$Je;>8;E?iaoLu +z{Mx~jdmrOnz~064BF0#H!Y_F4rET%ok$jKDPfd>I$6vj{;k~rDJALS7C;z3(iT4_# +z?rq|&rTCs3h*P-A#EnJK+<0E`lK4HuiHomA2c6ZOMSkICXqd72WF1VNSzqty=mG9T +z=qOk!uf2KhFHMh)M#qkaPs^4QFLX{cIsVA4u5K^m?crdfE#`d`rQlCu=bt_!qq_nAc({MN`o6&G7z5+t?%%)lpyE|SeOo56 +zKfjl6;ulMYd%kdcljqGFs26xj-@h}((P2LC|IYK1)_C#MXBbb;m9{CD9C}#C+gN`K +zCN^d&N59MNb&z+i_rrv>EZ +ziTv_&dxV#rOVCHS9XdOVZ%fCHmt2mw^S}{W+4^I-he9%{(9*4;XKwLR4YGlI4o`a+ +z89F50ZUD|2a0@(@JR{x8H{l@pZOZfc&nTPC@a@ZoiPt7JNwkK?vj3K#KmEz($1vS4 +zJ!m$4r0j-t$?o*q-~q|?R&cKzXBrn!|7Pk-PjUM!Izx9_R`DCqhy2+M@IqD34Zsnu +z&AbzCNqjfIh^_%G|J|3-cg>No=Fnbt6=ifcifFI#xRd{pg_eGL7g?E@ZdYBqr(|jW +ze8Wj68#h-k2ETOs%jCLJ-Q>7+CC06sx;obx#ynZ~HtH_r+mZT=xxU}z +z>+gI)eq5vZZ`YnOn5CQkYHeaZvOZM7KXX|Fmc-f*A-_J~oUAa|%@d;u=~*RDTc6|D +zWv)LOlN*3L+QPjFxGi>#n_FC!ekZZ%frjp^(vwHlZ_%=mdTtEw=vZ#Y@Q&>9jA4KO +z@*HuPl&-&C#~JNn4o^o-O0`g=#uNt6Q~^49G;Vp|SrpU^gbmAoD+zL%Uy$_&|xL7u72 +zElc3#BE@DQ#~_|DX5|k)@7lfpImg!)H|YEg=q#F8{hx2jqiA8^Ka|c=p0L~ggua5F +zy#XC-lkPjNi>78L?{ILhpsxB|=KI~|>(}6Gl%DhZKe%$|Qm)*W5e?n>jsAwKJpIP; +z9k|fN#bBHQU1$%R$mNNM6ESFNW3!DP+t=_L5C0d>THDO#0K>#Oc9*E&+`pLg@D +zKDrzM`x+*B+N`GTZfF^3^C3?g(WgA<|2bz5e8E5e!9VZx&oBGu?OvaJ!9R<>b--VR +zo^I(&-;=ZzodRtY^Ci7nG+uzbJJ09uNRb~kw@*G}om;u_wTcJN>LL%H<;O+bBWB9y +zz>E7DYP{}T@!&-rJ1CDFZ8(`az=E#VK$G#Y_NM|}V`8|$#rm2SCH%C5<$1+}BeRQv +zHw$=Apzr9O#b+(=x!7GjySU<1&r=CH7A5GIoPRaIO2KbQI*10cCA9CNGlY4YW8i)6 +z^UdM=)R$e+P1*l~2AUVkCZuN&ht?^3as_9aBJN5Hv~CxlKuhTfv-y3-%W2Vc-CoWv +zIhyv@pttG_tjo3XV#7x~U#Z*;l$+Agg8jZc<-AfCtH^pdsQMX@vn=4N1S +zE;VD;l$n>hjilyOaS+yl1}bAZ?pQa*?)7cV8w(?B{7#(D=x6{A<_dY%@pgOUGj7)a~si~c42X*a<~_2X{am#Z}9oJJ=`Ko2V6(xACH6cIM?sng9nO`3k{>iN$ +z|KZn%tNrtP{r9>4`G@}dmHzpC{`*J#^N;-Z5Bld3{`)Ndyu*LL*gvoE-<$k1`6fC_ +z$#>jJJ`i-cIK}y-Vk_HfnNtJb2Y>G3C*A&{(}xD`E4nykx0fXOeUZ&)pWjQ;o!7>k +z)3yseSvJxw%;OrfusucWPJuZKeRO=R^CRcMuND4Gtn5(b0>k#KmoD>f{(Q{HXk@(q +z3E3Ratt~a9S4O5bH;pl<HKw)qNUR#TMNO%U+9 +zL#vItyP}pew*_A$cN2J2n5ItkU$&t335YG(CAfyztA~E?_*i|w!k*Un=V%W;GsHrJ~j*4w^)dt +zp!)>4gD6Tf_UV?}3k43qJ-Oly7qs^pf760hatY;=wtb-R1ZCrv3fCioNZ`MWe +z!49qHwWb_yM_D$vhS`Mx2ADqbQN~7 +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 +zv@Lmt-|H~G-@aFu$_EcD +z7E`@Wv0pW;cj}95l8<>GTP<~TUS>MqH3y2|edZdvRvWy3c+=Z?-$Os&OTPQ5{2%n$ +z+yh%}ycYQvX9T@OcB*o6$ZmtS_HHogFwk^^bQS3_|Hk|g4!Q>u`>-#Qi0N1d%o)sy +zHrAP0U*w$fg{}B3%DU=I_l9dvn$oEFZWPq@<@S!p73^)e{bj9TrRW$NKILRnu76b5 +z63%;G0laHZN;UqG{iDd7)u(e0ON+@baB{j)YlHAet_jtYpGo_-TK(>k&V~5*p!rIz +zsq*(Lm(iM!RAP_pVIO5`R`ru>>r-2ue`=9kC!4zD=fA?F)_s(mw58lvCwxng!R6*t +z#AIpDqNyu3`_34ZYQxVm@xUaTyB6J#{vdbkUiM<&C!V|7fv*yw$$`)kWP5Q8D@s+Bz2of)G4^zWX!qo%oa0d-LLu|++J>8viggQuW9NM +zj;ymAgs*VLce3FZ{d1t}wA?3Hmn)Iyqf6GLKWw_U2i!z2)?Ul!NjiP^yV7+>aF*Ei +zqrD7S!T#k2eEaL7FQ(AVQtSz9e1^6;;3ex*Z}sw9W214=m?Ya4y@zW5Jm3CqyEc10 +zCb2f3!gr0i=#=!26!BhsqnMV#-}e5y;zbnyc-W3@JO2lHYRhA+hj`5$iEr`~7HEwo +zr^TbknA`2Z{}c5jyL8q(@UP@ju%YKuW?=t!58Z#tiT>U6UpYb57x@mf9~=A!Iw$bj +z^KL#NH+r;BF^YO$Lq5?)dzx|Lx96+Wm;JK$-vqO{L+6z>=QaOjy9C)#$y$1asamca +z<(2!$*T5K`%v=~u$8O+U!Cfcy*y<{WZ);n*sltEqM8m82I!pO~aGmQ0)#2_l&L+#& +zA2@!Elw&Qz@03D@?nCdIcoeJ@WpcDrKGgX0Z79BY{$DNK+r_)mOOkSS)XPU`xN-;O +z-UiPH9YFZW*HadiVfQRtvBd8QeVuYAY7gGas3Z@zsV&QYgXc!D!yU{|dRWbrS8Uo) +zu+HTh?Gl@CdQQ0nlK#jFzV$Me8b9pP&g7T|8}#$gF*fBZmG1+;Mm_tM+vb^t%M0P> +zd1m6eXhLh|544p=SbtabFgGxl<)s*Rk)-u8RZ_wASPUQ|*#gR>y` +zFO-|zot;s<2EM4}(S@nZ@z~(_N;=DqrT_nnTgyw$v)IU5!zZrO-Ri10hI%G)G_Rta +z{=?I9<l{FL>s;To0vzVIpA`Fizdnko<1X$QSKR@*AbK1qj~x-@R!ED +z6dkU{)bp3Nx}okh*bFTSZ)we}!>11eqr14VEP>9+`8UbWgADCrOl`wAc&p~{BD3&- +zaFcB#nHrm>dm?jbU!9L(sGz*Nmq0vmWB+3AQz`aq@uC0a?&*xAW6+-EVb*Nu)K}-v +z%&+`}oA)~@%RAzS*!!~l<=Q*}|G}xgt$MTK?kwfRqs_zy1v-n@MBiHcnl=2vORVGm +z?3L%iXnHEM1RNBL<@)9Bg;Kv_Q?G +zz!<{czLpQ5C63;ET#;juhEs7LhR@=9_hEc>N{@59v3i|61Z{rX46o&#?4~v^O^G +zK%mVPz;?29QV09Z)^{skq{@mH*jFPC#ohZTx+m9>M>lI7nF<~wvRY5m$UeywyLLh| +zC)1q1a`fJ0{%i(%{*k?zq2}5LJ;wMg#Mr6c;PT>+P$uYJf!|hdLeHa} +zo#tXdZz(t_e$m+=&*JYGz8&pJ2fwFsUCr}wdN*!8__(Fz(RqNhw(U?xG!0bWZ&{DKnn`g`@IIpUt&nc4CATrvBXzOwjCn?rE6jRpLG-Sc;MwKyAse#&ODGEed@=~E1OkGK!#fN}<&$Zw#13O&=E +zD|o))Ur% +zAR`C!wD?(afVH+^GVurE@#C!Q7%aox`sB`?X)PRT?4AEO#s+#Xce8|bAO?>-e>gZn +z#%cbnUjP4Y{@m_$R*ge7?H+6XEPmRJS+3{*&-oK~`9k6 +z!Srq`EO5F(xN~A+Wb@OdS*OqgWJeB`69eUc^B|od!+rLz_%oj~!Gq_n?z^RHy@al% +zyV74kUOh*gDtX6;Y1`=m?re$lfa84ZSTk@Gzvc9*f%(OMG0gj+^sQ3h{3f9XyqPh}z~33#+t1h|`Hmfit}=@~xOhhcHk;yr6oaBTD}BdbMEpYE +z$Z-B&@9}N*mQ%l+dV2m7&lNmZ_-FaHQ#_~qvvT9rnDUMqGo{0jdrt6b%%{<3<`7Fh +zF!pO4ZR@TOd*2JN3u#~U0^h9aRhXZm8-EMk_|y2IzSOY*n60#9%+747*^KXP6+Wm% +z*_3I{*7!Qc?B5jhzU2C~>n`}$>gTd=Z?t(&G}l7j*%Uf}n}fQWevjxZUr0v}`uGo@ +zbaL%0z`*!DqW36v-P*yXt-Xqz8%wue$obc}SLX?2dw1Vc-w~Bn>%3ene=D%S-T7Z9 +zB-ZbkeO|4-oBfy)M=&J47^`iDxIuKo-1G2~Xs7>=rr*TuQ+!8vr#<=Vrb5Sw*+u-a +z$6(_bxL-W0J>V3-?flB0r}WSz_2FO9Iq1MEJYB`t=kZ-USO#5^bgE9!>GjZv7zN8y;_W~ebS2MM6SI45 +zA4S8{b5Fks8tqEZ=$9+<@p6m1ojt#Eh0C{EeuB9qZwI!J9(!7!=(OW~jvg7x7g>8C +z$mYCnp&VZ+{A2yqt?zZ^D=7ae`m^@L&RCYeFQ?bz5O_Vvm%Vp7`BFID%#ckge*O^r +z)4=mYXw=T0b@>D{;|6Y*r{VX>&(j?0k`waEB86PPUtb_XBM|o^KJ0D6#4Px +zjVbf(jg!om@2fTE+;^@y;l4Wa%Du7q*~W}{WmB^`VZ&^GTg@xk1^h1JZ!v#u{HebI +zS7Y874I9BV9)gB%l71VTq2J}uZ#MM10)J&IX9*Vg^8~~IgY%wE0avZP!d-p_o%fdv +z3wyy%7Ug+SG0)A|S(1r!eN36^idQ8ORTGRSe| +zm5Gt*5QNF&y?C&|n?CeRIRg6t@wtn1Ijivn7QML{lU(Ng2G_R^b&VSe}S~YJ} +zI(~B0+?fA2H=F(6$?(T_{-4sZq@+5-85X;CBSX6N6hFzruyGn-_pbD}Ta|a!2sV +z41tf;|Gw_@KkaEA%bzCw4|)^3;_ly;Kkb*p=sm~IukCccuwP==K>R;-_g5d58@lhi2Y8F%O}EB7 +zKPJ9O&Nj3#ClpUSjk!IQIoq-++Mb%Byb3k=a-`=BckjSEJsy-p{w%b4X--97l02au +zd#}Z+Ap2SWSnvCiu!i!B$PY4(_+QGlkLT`)g6VOla$G~>?=0`#XnnU%&Y@REh3vz` +zJ@WSkJ?E(}=JlK;J$qI=`%`^O(m?%HUn^c`Unw_iUsL~&`?}uuRs6E!AKmzB4=33_ +z?Ez_w)lZ!#)O~tkY{|EK)Lmx8m-HU%E;{At74Id-{O!Yxx#O>!Rt9)UJ{xKt@54XG +zUfYmktg|j*jISLu#lY&v!#InlPadM*@OkfW_n=Y!s6JO5qtCRrQn1ut +z-P5LdHB^6@&hH{aV +zGTzw0?CI9tt9*^T&&*<8@a|saLls=DYoe30@s(d9LblAcce9JX79`-E2)uKtD?ErZ +zd$`mrYBz0n9oJ!C_`wYl!;-cHO6`86P +zylc`s;-Qh-+*iO_=Jp4kYk0`}Dz2mL@J?lRUSf)7e6y%Sv;RVUt`Iw +z@zbN$#PuZ?#=k3FLN3=dG43td`TRe<NyE|XZ_P8=lTn*I7VoXnCxEcmai-zUn)D(p+hvxBz`T%$F=O25Q@1mhtZiKl}f +zhyHj!&dUvx;%Ve$YT0z+^;7UUoY^rO`8rfzV#W;KZ#dVO?KSMZoo@E6sw4j>z7qDQ +zPFvPw4lf;VnsPJDV@nPBjwVs&nNfS<#!an7nwWS%FQFIYR!u7nY{bh +zsE6WndC!?PcwmLb4_o7oj;lwkwc~T3bPeOMB)*zojl+c{2V&Z19IlQpDA^X1e`#~d +zl&!5a`|heTkK6_9&1ag0tHzs&tDYP+FXsQvb4OLhXPJF#dAE5IzmxfUH-BgIN1xF@ +zoX<%*sOFydJ}%j7eNL@M#^}n9O6iE!COn<|m<6#R23Y%nVO{x}9|zID{dT7x>Dwyy +z0*at@a!!n696o31E`3RHhf}jt3cWAG;ta&V4r?z`ym%^Y48>!z&741es5tV0cE*W5)(at#xK2I9JPe`GgD+P3m}y*Rp>ym{>adCR +z?Ty;ZVJ_%b%p}$q&eUT^4BT(roVRg_ +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 +zXs!1EuJxC)hI^ +z23)ys>z*&%{#~yx?wzYR7WJcvZ)IKD&y}Ae^y8zxAH9^*Tzt{a7uOHbEzd)D9GS-h +z`xLA!FJga5eA?Vz*%ji2m?ss)@;cp}IZ|V0 +zxwy0PoBMjhe6{vT3o%{f00&k~KSEpT%WmlL3ilDbf~=FiQ`0@Auem+y+k5AweSdSB +z!*Lw-RG-{QtQCP*^Ke3cN0`U^%FOAkZT-2Jxi!Kp;trDi4cI+Qi6{U0kNwNK@td_p +z<|=e+-CG!=<1T5dAN^EA!7UeMbiY$%*6{pv!*RtIWXkYK9>@EWO>gfX``31>j_NuX +zmAU=IDN9E$0A~H@CmM=xxq!0W+X^OJfIT;-w=lft*}k8CLFTu-|6~96?kWV9_Wo6N +z7w-h4;OYx9zx4GAZn+@yGh239x61yMvVvDod_m?%_WhIg{SSHn$Ns`KDx-Yvffj*( +zc3mm{xRU$M>pM1EKS0YS$r<@v5A|>LG3EJqr3`m}>0B6VxV8H)!FT%s#_Zsd4cde5 +z$lwFexa~r3)A?tYM+%$rVK-I_Xm1_zM`hZ{jW@#QvoJ+>9{BhNU71G8l*x`~Ty+2O +zPy2VDk=A`D#nqXJJfhqw7R&G9?nzFi|7dOF-D?H2oPB^<*zb}_%Rb_HI7+2oy+Zv= +zwZ+`e>|mub(bd%!*3Ye-jT~n`8XqJ&h^v3?Rj&U1)RoWTD<1EP#M-c$Z!v4NF=MjC +zussxTknccn=6M`Oa0lKZSC)0twIv)?W|nVfrf=tSL$p)t+bJEUolK&g(qY>9Yv0aO +zf8+Y|(IMK|!8i4%e3*9LooJ`ql|8CIr}}no@a>#GL_4jv?rB{Wv@^xazEa}5rPEZK +zPho3(pzrUOP3hZM;l`kr@@ELn1e19eyrFgdL_2SjeDrL?e_ig!obq4rx?Y|a-F*aC +za_6Yl^+!Lt_25gCvAKnjEsP8E;41NOhcOLy|5N#6gG@=TeasK7f7Wl)?EN+=^U{6Q +z{0TSZ;o+WG?t3t~?TP;}+>gA!E%E;+`QP#m^JY4C7lrv*2adg79|-#S733Mz9Mv3D +zF3Kh7ui$9?D3SRoG3pO6CR3I)joycymfC(Ebec;)B2$G=V-oXo-kKWjg{~#v>#Rq* +zo5p@THG>>3eZ)gznp!VN&IjErudjqLjT83g4t#=&m+al?c&2Ce)`LIsV->#rtN+%)H|4y9*9d+jHjTv)x +zHuAa@d#>#5&dKqDaUOPXW%Lm1XuQqrZ(;p=Vw2fjpIZj)581nyb$_k% +zLAG$VM(aXz$>D~d&v7)p99V{2*jF(&vv_ak0r|0!*WFk1PCOCuKXK)2@8#@{=5C5Q +z=zGk~6las>&+s3zwLEj$r-+K5~ZLV3#ah8>m)uG)T?DO4>{0?(U^S5 +z>k#BI>on9Ae}dYMie!~VGBy7tFI>~AM>|0~OWa^UUss~lTSILp>c`~Dod +zOnUK)4T_x)<0OAe(Cr`P`^og-4AZoV@mlr7sHS-CsEIMpn^R`rces!CJLUY9^2hhh +z%2_U3(cSCg_Pk3Ix=@F0@7ab&kfl3{tuS3VSZd2x%m0XKhOKG>VPTwgq$Oy +zOLG6)$*HO2mx;-ra4CMSbC~a6?%;eq|F`tjNA=d17k(?aGfaC6;kjTTXM?PduO(Y+ +z{hP>1{Gi0K^eNxSHN?G3-qd-&-{wn?_WLE*3;8QQ_;>mBdokq${=?(0+z+$BcZ$W? +zkawz_yi@_l@cVjkmz^Xz^8P`%zdGyBdzgP)s3ZJ`$NjCPyKo;p2=DV=2j02Q +z4wTga|6DWoAs~yF4G}~1M)yuNUweSJ^eu!p8+Zf#!3D?k2iFWPzjOHVoHfJtCf}wR +zyAhd&&nMbQt`K~%wLI%C>HX-8`Mj9qIP2gWdvq~ntFo$tEz7Tq8MFQWfaGy=TN-<| +zp0&J*GL6XM3mCVtRv+KrR)}3?%v0Uxkyo$~d#wn&P5C2gc#fu5W{B0<)>!g1cX-IZ +zC40NPFThj&oWkkVnGj +z_qwH9(aW5S(|V@8_1XuUu#;{=?%inpt=i)Z`hUfQA08MLb*Cl!W#`Pddf|%=)ekti +zmAiQB!Fg79NZLs+HgwE#-*@r-oqVsDa8?`lM|T)T6+C85c%tV`Hvb +zURbg$E;Ft0L{-}bHs1|;)(~a>#2t(US62_X>+~YVT>Vh&lYSMmUW%+PM^;}|T#eqA +z#!uS{-(8wjysG%*KcK7b(G1_YGt#cvt>_xftb=QR;`$I3kBQCnC^L?}M8&C$Ar`=t +zq+-ql_o^+e3u;HOY<^V6hq1w*vaLxzfclau`W3?m3ptDYBx5Zf&P2;+NuLAvk#K(a +zEcQ06tvJwsL3uN7Vq=XNnSGC^ZJKeqVWxaq&jC|&X%D<{v_25lL!D*FuO;Hc8`&56 +z9elKB?cVAiX7^TKYxNS7SaU0Y&mBcs`9cl;jq9Ovxp|Ix{oJMs^W1$Ye$jv1E@8ed +z;GW14(Y@(I{jZ^8Y<-QfKJd@WHXOKX*-HmbV(u2I58N}XF^w4aD4NT-S1ylAmZaYf +z{uSIkR(VD$!*5T}Cz7~yTqM~Lw+R=uHM%L(dL=ofTd`dUVFtgQL)m +zj(a^YFLeFp@a!O%I>WKA;d&3V9he_S{}IdxU2wjS+mN1lzMY%<8a6aLzMU(bm-11R +zic{vStj=^8b1J-FsA%)_r-=Ix|Wlyzrl9p1_v6>PBKa6UPK +z^UjR+>-!t<34wRqF1*M+V{z^>Rkp6U@@lQ^_fC*bfn^8h$U_BLcEf1fxP>C?3jKD()v +zvTwvj5I@vV$L%+S^U&wN#yD+)=epoG%M)rRd!(IxoR656%UytM;*3Mv8LSNnz7D!g +z7_S|aOEF$9rtLL*7mU_rW004$lX-A7>xr{L-I!hZT3Cw>zJ^`FhQJRU#^rioW*&TD +zQw%LcujKyBY`(?NVkrLn4s+`N68G+bQ5RR=_%r)i5C0eyll34MCQr$7RN##USU)V8$s +z5-wIiQM|O>Tu9!}XD-=qmIToHd*468GT)gwGjrz5IcLtCIdi9(50v9vRLHpiPivqI +zY!4oOO5xLse5T=B(Mec*OXlY37v+IQ;oYOFk7y5 +z*d%ZkoF?v&=l!Pd=yQAr>Mj86>rkJ2>EQ7PO4tU=S3mBLO-ZW>SQ!=e6ssmM#abQk +zu81ICwGDj5tJyZ{PelE~RmzuXxKL*U7JQmQ8fT60?JKZ;8=y}*W2hF0uLj=xg{Bw4 +zSS-grHIgp(yR-pLjnIxb74}5REH`*&`s))zY3>H-oRLr(bk4s)XP{0H$asur29PIH +zrCg^DYPU?TW4sWyl{zo2#mRXgJ(0&>qG@Ui^7xi7^}NS#^(P_|UHHq26E`iZ{m^54 +zanM0b2=(61HT`&L(hlI1`|aA6gYy;CyEEbuFF*%*0d%)1794pbm~JhzGnU^LTIN0y +z%y743Y+tg|tu0uCYt~HIS`%86!||?$KT3EXc>~Ak*La~0m#+0O;*0tm@k5<1J)_3< +zZ>ZdRv+Be^^7jV +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 +z4xAF7iKzqA(5g$c*%whEFn8rsg +zeA3BBNNZ2%d>i@13G$#HD0(yS49(D=fIe`}wR%&=->|k+yo|p*ul%S?dE(>P70~HH +zUu>^%L;u*!q&d|i!#{2c3 +zq@4%*9oQSPe91ahsIvm)OR-NHAtHMK6Jt|vP%Ovy!OntO9lW^_@{Bf6?nh~(y6SV@ +z&g)-KwlM;2(8f7O&V@P$$%p<-J?(4Hs&YrCsJ_pD&RZ_;+AqNyw90=JcVR=K-Jh6@ +z^+O%+bdNugqjlXz>OzP>|+GBrBy9^|o)&b)8xyuhq*Nf`ON +zrM+G0A}lvq=iA8pIp~9UJOCNYF@N=5Z|5UA--rC>-beTUw=ToD39OIx*imy-^{xAI +z%r*AW7l8-x4mrfDg`VYTS`O4f37wZJhXj1euJ@rk|;zF%%@SQhMWJ95>XSn{V6z@c1|IQtA)w6mzS +zhBo6HQ0^wo?;o&#VOh?P6W?n^n98w&|4h^%L`C`)_HuPM%nZx?ar-377CP +zHM}<1;Hjfs1pHBdGcZr}UJsw9_u!kiq*Luz5pQ)=pg0fv#W&Mc-<@r|l#^_O@OL1+ +z9dJ2MoF5x=H5WP|=ZEvc`QjV&Y;PW959bwfO4{arjQQdobl8wn%gP?Fc=!(2+=`JR +z^7=g2?G?lE>l!`2$PXKv5LdyL=xZ$kth*ki_k7HE&6t$Hf#QRIU$J+>luB#@ZISOhbH2igi5Ys%htKMq%eD98BeY4W@j +z{NJ4wm@j#Kc7#4)JX7|INg>LF8u&5N&(A9kgC0jd`DyU80LqU;c}pxs+>yh +z-#ot+2>3030Df5k`jTBN{j08k%`nzcz +zRSi?c;UCf#>lf1k+3vRj+-q1F*?hZw-*D?LzHCWf_eH~8OTsvx!5j?lbd6pTu-ucB9XTV*{uyv4#L1@uz+bv`dw}l^1GlY+ +z1qK?K4>~ICAZ{6>9zLS5+J-|@#nGJW;Sb7q50+Sid7c!)ISYK^-wbX-d#)kdDi%OC +zvHjbTmhka^-sQOfcw{-AfipHK1Beq+ +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 +ztHs>k3uM8TRswprk?C^ESS3N8Ccr#72m$ +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 +z{MZ4MAuZC*nL0m|eHgz({!Q-E?^_{aI* +zdwoLp&8)8-sJj9Ex+6d=bm%!)GygD>e$q;D5d +zBrcBQz7TMH`n3OK1@^o5c1K$lMtSyUA+E!0=$w(3;I?SXw5?{oZUXJ#ZB)dr8Q)o{ +z$Cioy4MaQDTJKBzUF93v2{>ryWtrEve!Hp1+z7h)>|OrEO!$KGZVuMZw#MU3BA;eHQ$Ev&zcEc?g$%$(b#mV*LK|TM- +zaX3@qS>37N9P6Kp{rwM&-JC1ZKb7aQ=Dyk~1TFwo#0FsHc+(>orW`1@@M*lcj>dx324JBM5`rQVMqHF)?*&* +zkCW{$V9d7U<^AOf+K_z9&{3JDBbR%A;2oStyWB4XPGW!0IS{yiqWsTE`zM2s6f64S +zJn${t?eEj4cpUf*;3Fh!A_NDGh#Bi+C_gJe@{wnE5#kq!W9dN>N +zj$;$A3m!f`5G +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 +zSsKoC;E(Ok*6C|>n(bAhJ;I@GQo+ +z^^MRC=o5FYw&~|azhJ^V0NFfG!>j~6`n(JjxBsO)yBJjiZ9ZR06Y1Ql4}p|s)y=Pj^~O_x@G-pUB4aY?n-Y^ +z^)qp&3V)sNrNAlEaE!iS`o`Z=x_^)B{uS%=V~+lMP(Mju4Fk~E`=Bp%2Q(jgGj(Va +zUxPGvA?|m7U&EE_A%&*0&x58?>FM#E3Rm+%Pj|GDo*1K2`BdHrS~^>MijI^Y9O>x4 +zH7pq6*P@{Nq+!NJ-}#m~QKI0E%w?Zd-y$laM8 +z^cR6VYCJf|_kr-UXyv%g64a-{1{?IYe&`8nRRAEfP6 +zKK^G7uK{q9e7rw>CHZ*&?*q|SIp7d~2PFQ?`g6*|!QZEOPxpBsKIK0*pOX6{BlGUj +z<06l0d&WsyCxT~dCzZbbw}uk|jMw_s8TH;JxKEyk^;gn(zVFkJKNSMb1;XCD&8hP^ +zbQHXs44sE@1%0h1=CaEQqn)CtYkx`TBG@jBj$+=gk@#}JpkFs(m~sY=(RJJs-mJzq +zF`hL1pZ7oHo*6OhX!B1kFD#{J@t%$0wfyCHD)*ZG=T$f-UEItw3Ev>|2%j~n&rv62 +z-;8YKoYCI$jDGiu`P^HK0c>Zv!Sp|l!}RCio?Tte`-Tg|O!Ui#Gn(=6BRuoGw(&!j +zuSWSJgN*N^=&QMaclcw3cd%96zq=JMsf*IS&U>xc6D2C4qg3IJcQxcw1o!Zuuf#nP +zKiregXcVwj}f- +zH|`&djg;$(=iJtEAKp&jn+tPeQJic43(hNWPqZTlUPAq=-@IY2{P?>R`#!UtqkX``cc5t=akI4ZZ~5rw+Gu%&X4lsn}!~)8-yM_sPoU_=a&CV_<8Ch;%C0b&)8jq +zPXWEV6)%YJHGQ1Pbu2BQI0Z=>#V;_TO{wsr`oI;mx%J!qv7+- +z852W-Z7~J_e7A6Z`t`o{x}H>Rz4YH7zAeKq>rr>R#XTls +zt)He(J^Pi9J?Qt=d>OIpX7=#jpNP7QL4@kUa +zLJwd}2K7en@nF-DWO;$|*P`qTr_HV9GI +z!25q``zMBGi`{ESTJ!Dkh@;3i%y^!VjkBQD6DvX^aA#`_e6(@?A3-N^epUp3{3@uh +z%kY5Gd;J5eo?s#1JI?=C!d@@J-?fYRX9)tS7Kw0{W82Bu+TeksR +zLJrT1o!UYF?=1T>z{~mAhRU=bQvK>zYN@A>vRVU(c@*V&nB~S_#$$oQXjep9;2U%z +z_!acs!oAvbz#pysgE$WG{JwE>|52~|RgV6^hYh-dNHC6)gpITKclEsw-pL?ssB2$SD7wGgmI(>ysPtoZ-ovza9i8}pNo%ZYWl{$TyPG7ClpVaB^ +z>GZ`q{a2m7K&R_I{jOn{;f`5qth?y +z^dX&oUZ>yI>HRwWu1@dK>A&gpE}a%GWv6~xr~Nwrr#hXb(?8PbZ|bz!cQoqsR-J#T +zPCu^GD3xeChDvG)CtN{@Uf&WZrUHn7RuO$1AXUxP{S{4^|*&>{QZYc +zyB+wf|F2zL-xvfxA67rQUBfx~WYYd#2>6scYQBs;Tg5Y?K2Zuh8hbW%3)-{i>-nQ@ +zaRKbvU(|3vteqD1YYh%5Cumc9Py0hGK)Ve;;@q8d*s_lY2Wv~w`P))9(~j-Y^H&ZS +zAJtAP*FWkLKieUiR4oF%;(ycv25+b+Xfa;tH!mpV_WJmP5$ +zb1YybZE5{&jlb)o@BZJNHb~;{VDmuy^Ze}pUmXNrzH{TNpY3sx9uM&|5B+i4wFhe> +z6(?WUFg&Qw{jyry{l`9-z1HA__-JeT=hxfvLGY4wZoHha-aetn#r2ktzNN0W!P-h) +zZ&Ng!W840@_11{`TyF>DdNcOw^P`u48w4*OmR^4Q)1<5&i~cz2Ww16<>E)P)aWMYR +z(Mvt*C;3mS=06|p{A2AP`1xnfKknD#q`VFB{NpL&>&)|y!P-`MOP*u@K*MVQoWa)9 +zhdTcNoE3W9{uDjz!^+S5HJr<~D*0KV)1TDo2Xy*kotFIXNz5N;nR7@Pmy3J$skTM% +zl3Jw;@vbZ51)G?Mm&b-$Lv6g>whq27@xMH-=#p=_tpQxz%io84XHo3mx+k9ul!#M^ +z*^9fizLQo+xQE%OgFTnJ7n1?rK>dZfj8lhcb;uOjfoII?zn{xQJM4D?`$XDRxKH%r +zJ^}3xv@al*%xM>5knk?bFLZ3JEbNz$ZdEo9y!VAYXVNC^b+kvAgvYw@ZRvcW%x#yhtvJ|1oO-+f-q6aEkUuZz*f`f}s0t}$}1mg3#d37FHR#oWUi +z-1r=L;XJ&IIP|6;=9m460uE`ZzrN-?&pWsO!Qb^hCv`n=Uy_YJoy%^KsAV&Z=Lu`^#@A&Yj91{U*om2;7j_(VQ*pP +z(Ydyu_tjFzJyUO6+*GK?srcsNx*bm#yd`~r&em=!-<+r6RRYdm`t+0j=c2zK9nMI?gfaa3*fKukF((ETy&L6Q`oyTy`%lHi6idi9(tTO;(p*w +z=(Z<kbj9`OL4EQ9zL!V7Kt70dE@Nz~vmoFkPpyZVJ2O8DLo +zAz}H7ys!(qte{9{Xx2N#dwWW%;vVVnupQQJJ_`|vR>8}RSFFqSN2PnG{P6%z5?_PsqvQ$7UhtlL10lH|J|*M)&>!cQ8gHrl(Fsxpo!cKL +zm1i9JFSU-im$~gR;*EOfN$iFBMic!ij|T^9Q{gRXKS*d;nSjGPY6I=}82f9W?@oSt +zuwhr%^MlYw8pioy{b{3s7g+8qB|mWq-~T9m%=fIYW+vLu&h;7oBJT11DY`DpJKOSy +z{iVErQ-gDcQ#cD4jK7%k`@wt&jIW1T@5dfh{IMOr=F}HW-2Gb}{>N=7WAs2nTc&;^ +z@?QKH@l_6ZRp>{}+9JG}L!DLmUsS{Ag7QoCuY`Oh&U1J2$(O(<16H62_uZnF^%!LP +zq0#i$KpmV_%!p@#e@p)i;QR&j^@fbVfH=QEx<=&?CSc@LFDpBp+67c{q`*LL!Nyunlbt0zdIh@)%Clxz;n{|cZc`-eYp3f*ArxBE7#-ypbvwsM?)K? +z@BW4lw;s9fX-ggqC!`I$Q7Gj*=s1G&U95k~{QMa25#X)DxKmb}^_RPm>-RFeCm>=Q +z{-O3gJ9ON4#8-yBo@=P5;|mX{x2-cF&-u<;F8IB9YfV5$sPs&W&;7dM$1nX*ohzr~ +z9Fljcw%79Bkv}@pQaTaOAbAfDdQs2MEZi|0QqZ{q@ZWD$^&dk0xuC00S)%Q(JJlV$ +zHpGo-6z?>Tfsgu^zT!`87w1+ei=1wZ?B-LSOMpx?UOe$Wa8R#}D7ZCUq;1Wz=Gyh*H;s6stTFhY9oirkA~r?^ +z(tGgN-dc%w@F-&$YwzFnnq%7>liPY8`s2h}+_~KE?DzlRJUf6o7+>vtjB_5wHU#(V +zFBEHRbyjmINLV}vrYvLp75c>i$BC%;P2ylnRxM+p?ZDe@|BmzMm11E7N7~e)b_>vq|?rWIiILeywzb2+N;LdIzT}8y`TECWg+<);-R4L*B +zy*p9W&&FOwc$XyZ01TYxb@H9VrS2@-Z}FW&*r84>#yIc}V0%%5@qrna3TqR72Z-G* +z{kf+#Ee0*F?NIQ>0uJ8&L;U?7=#KOi!v0P6dy$Oe|8Ec6(D`7yDtqcbcz2g~V|#++ +zVJs_sE5OV4=($>qIj5h^3n)u|_Cn9heJzMFU}Qh*@C}s0jA@-y$OkQ#Erj*py?T5x +z)Vl%o=r6;v=1qud;P4LkVbE8i5@qhzIHF!qIwz?YP~L`+PrZz~5Mo*|ZfCRiR>XIQ +z9ta&6G3~`(q=BbJ@~*SkeE0eTElVG?;k)65&jw=9)h)7ATi#obH+O%R^k?jf$@`Y9 +zM>$OTmi{!l4r5EOd>iVaojCddd!(wz{x#w|ZCh!G;l?->=~&m?OZ4_We42fJ;G&fY +z@2yk7hZk?-{$es>23&zV{Jbw1M!XKcH9wG#b2yGG3pC98gtWKvZT1YYx5Gv(_mC*r +zw%VO-Pkp1cgmHzizPC+<-_ez5Z+rU6jzZKSemyuxM4X{*F2rre+;)1w3(cK8fqu@1 +zJR5Eew;4}`@4`+N^T7}940uqd!u?C|gOxp*fRFvmKJ*!Db5S>N`6O|TI9}LG-`h(( +z@!l6>U6byI^x^ic=7xuyxJ{lr8@rO(|JXww?anUog_emmxSKWsbp3F5^%HAi*=e`g +z*@$V+_eU9jF=DMe&9Sv<`Y1%)VA|@;n5LjT`tIC@_a13R>il{Pb|A=^vb|R;{D(rwDo0cnO!JW +z#E0WO)UCR0%5Sd!e?dF6=YAhF{6oD?zz>@__glV08krK`jXFj@iQ*gWE~Fzv!=wf8 +zttIO;EyuCe_aIFg=(BelI|^~W0r%^t`?~>__XM`G+*F +z*w2IiThY2{`*Gd&PW8P5^i#(?XB^1}L2k%RX +zE4LvVar|aN?>i*zy53v&Cu}i0RwgFJ@-0^p-W;@{yY36)TPD8cioeG4hq@rMPX#wf +zJJE*Nzre2N#T%f7C}Tl~!T;mrsfZm~>H +zVso%g-T=RO9eqBt&TY_5)>sdq>;%|x3T(!@<6Gctmv4Q)3p%K=a*$tvH=4g{Uj*Ng +zV$h~n6vry8B0GWjE(7)T_ptS|KkNtf1l1S5tI2oB`I{f-SrhL0BfSUhEkk=1=<7b@ +zRpDC&%f^4J>Co&6NFRv}T%(J+ZM^-BIRwvqxcgX3QLMdXS@cxPnwa0pva=C)i@eC6 +zmlewTij5fC*|sY!XlD&Af(CzXFYcfBl +zpmXtN&Fj(bG96=i!?#)PmDA+ym+~xT(ywv;^LB9M7ggD#>-i>wXrr#5mq*k8OPqJjH|eagY};0_~i_JqX%7tC0SZhQ9{z +zfgHeBI!QU=dTns2wz>ZtEyj0OqD%fDBEP#V +z=LpvBoR|;sj%%>)(=n!8u__ioe3CWp4R$8<@3NfLQM>_+_gZ^{6RL+GEqVb2ZAn2fy6j-c_ix#r_-C +zWhUCjnHSbl5!$E$|4A##MvMc-gUKpEypa-DDc6QKEv?9`4X;&Zvu_i@gAlg}Ptq<) +zWFh{avSC-rcy{!)h2FO>%@@WxslvXmb9h!B;N=YtZ@7l%wY)`M#AX7I!n!S6!?@}e +z^g`Im_NjGOCf8ji_+O@qCB4Q{Z?mO-kLvHTefEKTl4IWM;2B)MZ86gBg>~fN)Qc4V +zzPC3Dne-ifPPqkToP6KOZ=#O+)JdH6SL^z>4N{+bf5h~}93W;9-r5agtQEkYkG8_A +zl?~stW#}gpu(qSG#%}L{4#s;hWjT|hORkSA8yd3ehJ``rB=(S$zN#jt)m +z%5r{*HT^c`WNOUw-N<~-J=y_ne`Ooj-14+Wu!q`sx;uhB%(gh*Z*Qc|l`H0BPEN+H +zj0v_!{B;}JYb5Ou*BDp7b8+X|F4Ouc%1d67h}^yY0?+~8dah&KpRZa4MHj5|m6~xK +zeNc_d#P8voN8Eqs3$J_+<-&Eo5--NLWU|5o$Ndx3c^0&iiGK0?&fvcu-zihd?_U!; +zfH&-G_GFcEkK?q(aGygv4DBzJ&Bphib{TVLiS`-136Fi+9?Z{e&;jmh%C+vIt~BVr +zhBhG@+&SpBi;5CuPb`c1aV(P!8JAtMG~`NK +zin+KQdU+ObJ~>XgQI<0``g@7@=~#D*z?*O`l~aT<9YXw_>D~FT=Van7_@P$Ai$(5D +zcrU&;cscs%_iZZixylkj*zw7uIBrX1g(BjagikEPy2|bhi(qGiSk~DpR(H0G&4??T +zmhf4tyKF1FD{Q58MXV#84c0TAtyWq`yLBYdej4vx_w0=yJG~TdGH(hA*RsT^(^*Z4 +z(?v}~+>hCwo~2FRo>fhmJ)4?*J+63e&#LD9o~-7=9#^y7bGRwgv$v_N$F;4z=P<^0 +z_=geLc>dD+S}WqA!6uMzyR58$5WzV4g9mzr5BU?_SJ<7sE&E`P0zE&Pc(3=~9`#nh +zl1|uDnyxtcSjmpBeXVoNM&G>Qc*i>|)&n+T@FJGuop&jki9``k5VoLNYg3?HG;f0~ +zB__n?TAw(Q!*-Act7oH@1l?5jo1Tmj1fny +ztBnt+I6D7J%EgC4Cu;!rXpFE(LoQ#WBv)kDQI3qj{WWQSb!Xd%GuTSlHSPku1?1aj +z;4`LWY8!=U!@}K&#X_`}1E0jBeKc`n9kJ<-GkA+oGH(%b{+5 +zq?taLw1eD_U#=gPW_akh? +zY@{qVGI56Whq;VBU6#=qguFlu>Tc{k9%;tdnlQE|jI9Y{Ybu2Nv&C-AT?6in?dpAL +zjnqZsWze_F5l1|XdoGn?cf3lxih1pcN5r^oQSmC?dG2Yd7vq{6#Ej-f=%wuEF`T2- +zbl;MJcI(h)9ok!u_Uh1H9onlydv$1UJ=%lSx;q$x-imf&XeWktK+n5lXeWktVrZup +z?bM;2I<&JM?W{*Tv2hreCAx<m8`ES4EP-UghFsJ{{QH=_PV)ZZ9}9KBR@ +z!3OpZiBo5LNB0lh-nA#Kx!0Za&;7XDYt!xFZP%T+v%3@c+nF|OS=i?pk8#b!nA(@U +zj&Ze%wc)WVthpS^tt)Egj&+X>;=PDx*1+aLJY}QKrK2B};{~jZfVB~@($oH3-mCI}R@jc;s>k~c9l>Bu +z`&`6lKj630arU6nc)#iZ;A0QJI0pE!eDGMn0MFkYLt99n**BL}WT(M4bC0xzKKk6X +z)-tT=p56)8Dx6XDUX+@jj{NMraA+gSPqeb^yDwQY$3JH69PR;dma&ibNz7RJyAk7? +zAPlA1Z!xqV1?1n)=s8l>4~OYdt34Gylgx`MR%jLp~+nuv1O +zT(Wk~*auqi{{-rncaPs+{9Hw9w+8o|V{4c{Y>l32%Xs1? +zb3*=%EE{tk_Tzi%{9lL%Fi8WP|IZ8GuddrVWbS1m^4w9(mzjHmchdYocs4kREP1pS +zYj-Dn^>@0kb|#5cVUE3B?3cf6gK3o6h%y_mMSG?$e=)D1n@8eoo3vu+!;~SN@c-<` +z`Oph#!}J}nK_`z4NGAq^AJr$RxpX4ECT{-#3OZx`qAA|9$cJQm! +zz@y?x5c +z#r`De?-tm&AAQbmWnnHe2aVv_h4Tlk22%-TZe+Q^B5S4M=5?Kc@=n+lUI>`uJilmj?K6(SOpmZ +znmdC}4K$}0g9kMX6Jf)LZq|J0Qt%=6=Unq@`jEV&M!9{x7 +zHBxS+@*gJ+T$n-w(EES)(fQAr^WR@ysr+-z{~7Yi!GEr`K6%C(xjU_Xj+6gzE`Ron +z|CviO#s;0=4ZcUh-gEGqcrW^m(b6|0AG&dU!*m&6VB$%uG)P_zA4&m#2?6_3o5+e< +zVSmW~6FXL>?3UHl*N-aWqR>dg0F-<@m|?$LUQt(BbwB;g{V_1C7Y%6Df6 +z-H8z*+BP#)NPt$nl8&C1siHebb%*W*<{VFlwpQb940Q)Mz0A<5XuxQxgVky6l+M^T +zC{_?qT5H`2ko?}C_5FU6O$aDw&N;v1>-R@qNxtj$tYOoh!+j+#8 +zIN0-7hA(kHj85#dV^`)|)R{y-(c~G}<*=0}$C_^Y*16g_dFQ!79od@=u@`!02D^E3 +z^7?k$zTowonsDAjZWT7YT&I~jOOmo%myc?4bEX*LNneFG^o^-l>E%bzyI&6WGsVsu +zF83E$e?il#oV-TjGQGNX{(pOt^LLrg2W0*x_fGPg563~da6nwDhl79?^jrAYzWgNd +zVLssWFs0!rdf5KelbnC#13v#tht2;h-uz3A^aoI@BjC3XXC#R_+^Jz +zylI#32bbTw26;X*c*n`R(G4AyUG?H+7hYo2e_`+mHq +z-a9(tR*!dn79}@Vq7WG^7*DZzpZ5E5!VS^2^jDpy_x)zuI!*uewl#{onUDWWISL*w +z^2S|4y}ji6+HPhfN1Lgx?uNG#7wMXD#Buc4xRew5yj|blEgw$_@fq9`LRdMJIbZy3}=bMh9sS2$mG{r5AI +zy3by&H<{2wv;8sJAIonTqOTWOAFYknKx?D*P(E>d5S>G~Z){y>rnPeKGEoGswT|4= +zvpylMvBO)7zx}X>M+d*)IrKluiLf?h3CYh|8@==9<%HN9>o4@`9=u+0%X^9Unb`fJ +znU)Oj3mmQ5Bcq*YbhUF?6!=%#asZn~%9?+xqAN28_>v8lx +z_twMP=kK*1(Iod$yS@08Sx4>hE1X%ZM{%WSfjAOZbppG_G>exjQnG1i4uf_K=IxzN +zjo3FzprP2H9pm`)Qv&@oqpKv)RbtRjNpcc#NS>||^>vjPx=I!G0$t^l2n%0&bILCq_{#p*>X1V+@$vQEKqk&!kKynR(b)eTuu6ZbSa7s{ +zE8R)@l6RM60Da>Qt4js%GNF@Lz3SexJiW)5^{ts}JU#dQ>a<_?+dAm9Ptf*6I_;Yu +z^~PCCz5f+DZT9+n5cJ!1S8q8K=(Watxi!#jwI0%MwN~$?&z1%FMxU*vzZ2=RHD`GE +zj!^IaZ~CnEL+Ka1`=`RQ@JlS{5#c!42L)Z%aR(q4al&pqhjS!KES^aW-Lq3JMcD`< +z-gp&^qg<{ktMFq^d$^l+h~i +zDV{}m5l`@PI{)^Fa2D_o*L*d0u7j-s)YHeX-Yby!vKNZhR8;|9~y0DOr|MjyDhPk=Nh?%IVL> +zLhD{x9r%JqY%VIV?8Ns=yx5VxF@j%k1@}N@LtIx+{+i_8jmk45x{w`fEV1E+HAKe}AWKL@LFRW*zYy2QR{P00T$DYrNK0XRA%t_Km#L`E_d(g+V7S|qqly_CPl|l#e +zvgl)zPapbT-ZexYCifO{gS-{v`-t>$0dNaHGoX+1E{{I)p{s2AxFtM9AGy>QeQ1xD +zca_<-(cTT&y|}Wa6ga)Pj7&4c-ycOYqn*px>#Nsi)6S=Do%csOfThg7^fbZzt +zCGjNj9q}dIL1V8F|9)}$8;VBCqMJ*l^!K1^1wm^1}3@uu$bqwbhIfmBWw&wfKcyM;n?h?mf;~s7A +zyr}GPzw8mpW>bdGAz8GyNOxpkPLd-)d#)+d(5t*oPIwx3aCLXF>4bE9ffMOc+kDg1 +znQO|ezmVS@`R01Yt!Y!fGv#5h@R0-M!M`fX{E%D>lKpN8HD2XF +zws�^5ERe_@$OMb0UD8(Cx?dSq +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 +z@}E4M$AV@^btYUaa$i +zjZR*%JD30G@w4CB%01t05Q8;2-=pCR84J5Nyifkv>Db%KtS@n7|7f-K$5vY;$ +z-HSiA41a8y?~k31PCMj}{XYCQKWn^^{lD*Ty!)76o_VY96R-Ew6qrwB;(33GHHI6b +z=;inkKf1#i>d)U6(_2)=6|%$@m0?s{rc?qU2`twt&xVV;!)e&>b%|Z0lhqj{sNrvzS)!z +z_2kb~UDd;v-SwA&g*#VTbapMb# +zJN>ubJTtzx^mS7mjL-X?;I1rDvGTW8=Dn2nN=@YV)@OgFbEYeq)|jsllTk$8jz!?U +za#bjAn;W%$eveK9{MdMaVfEf++)$V|B)&d5UWvc{qu{4H@3olLD8Q+0msN+iz`7QN +z*YnPi%h->B%h&NEPx5@_0WQHK@AOz4ZuIA%et2t>`MkbyvN607Iu<+o#LV}=lg8A0 +z%<}hX+(!P+H~aA)@84L+5AQEL(;QyU+n>{-+Jisx{i@zum3w2Cj`H@MW4ijfCv7=2 +zo;O(2!awu+55^P@f;VH-<}-u!d;0FB{siZf(XrImI_uqox!98K&ie4Fx{RE^Ksxk204r +zK5BiG)9iaYAF(>#u{0OZ*}%Y+@PZZAw<;g1{HCLwsl4?nfBqW}S70xWkM_@1QJsHeS^?M~p|tpBy= +z-~1wR(}2CUoi%jPnR+%x_zBvTn^Ec8X*-s7+tK4H_}?Y= +z{ylV5c)sqM?ZpRe-|#rf4p~ZnZ}~K(`4#eiJM${%9X!DwF`MLf?yN8`qTAo$&*x~n +zvd*D#&P}{6wITXB_8K{Zt^a$pGuq|u1@pM9wU(F{Y{0zh^o`c1Okyj3dwB1TXmhxP +z_ox)ZLwp!|68~myR=? +zHz%j1SNiqqs9S2j0o?!6s=mwb4)o{)(E0vY8Dr>um`{)Q`Y#G6sw1?SM_(c4Pzv2C +zR;|E%BQ=A!s*0QgQ3o0>3Quys11~N#V=z^%>MaVJ8u7d4@C(t3ta-%A+g}dde$06x +zTHtJAK5xZ-@5e<6CUDY5ozxE_f^*-->CS(Rj%DuSoJVN0CVIZ}izxMYS9C*EysF&X +zkUHOadT<{^DAOKbP3%5ktp;Pr8hrcnDNc2?G2HE*4O{`d1&(=c9yT4~TQWt=C&zh^ +zHF!AsUFJ}aj8g^9i7QJv*onSny5Oagh`ZTM4C5;H_i!ypZv4_(Qg#d~tB@tep+ +z2Vw~y_l2|@%{$%|6Sa@8Z!ZL|j%n^4>(oYzoz`gBX^SG~r^}p9Gaj;{*-dPc^x4pbF682afcmuEB3y|)Z*~d;NlONtC4X^dE4BW +zOCI#__H*!av%8hH@=><`_sWz3zCXgdyG&y;0zcC|HsU^aXb)z1`*uN%H@{6E-E!zn +z#&FDCy~3O5AwfT)L681;m)z1%V?wx&je8aOY%%ouDm1rv74q53i^DTr;F(gx81E1p +zcpCrb;G6RB^coc}az&TnSTxyYaM6X$rmHsE!qIeRUgil=?dsjd9A&x?fH +zd#QU9aH+0rfZ}sHKfmAX;jfAE`$s7Mo?l)^`Ad}7u&1=I%J>@|(q`aWfo)muNl#AB +z>id|vGP;v^1l^}AH~U%(XNeh9Zfg!-$va`hE^wZz +zUbfHdcIxRI8~%L>-#Lfj^NNQGVx+t`c7r#wnPcTN=6e6&Jg;jjr`>DJDO;W@V`}V#KW>D#jycEMIJZ-qZM#t$ +zig-6}QFtmkhl?F@s@u%piZcytvzO`I#*i7@1J}KO%~f*-HvbF==I!}cudsK)Jp5KM +z&i;Xk^gY^@3}NL4`fzy{`*{5X>z7Ykm-~kmyq#O*6m!PUaycL2I}_o5ibZ2BdBbhf +zz@Z5N9)sVKC$^tWd+;f_NHJgacc)sL%z`JEn>(It=e|G(vS7m8|76lU`Q#?v)7s2? +zT9P~Ds}bIVcs$7<-((N0#n&9HO@UpD>A*Iw4ZeXa#Cvz(a%H%e&$fG#JY$88pY4&-#@RZ!P#&477hoexEr*#ueZ04uMaz1_(~E(RX08~w7d@yZZOk8`kD`aN=NcL0ZQk1HJ=im|=F`Af +znve3u3f__8ttxzYB;O1F5#Y+^bAm^EuE;5Y59!@+$v&g(-1AxAfahexB3^iqH|s=0 +zJI@d=K7RdxHw5_UpuX^PGVm1m{TG}7o*h0sar!?|{o(Kw{!hSD=)+TZ0(d%ncs8Fd +zpOA;2k?IeJCrSMPKL>}cm)0s+C-w!hS%7!W!U9t}bQXH&?L9sW7trVN>JA@2pSs*7 +zPi|st(Z2Slc==`U4c(&>uNH3(Y?1Szoqz`!bjJep#;M3pflgQr-_tpC7IId;S)VM9 +zw8u|z9<_PbRz9;Zu6 +zzXwD2B;vW3CgQqxrF_htPIXls=ZWOQ-wZs^O`HxfAqRMIQaN6{z463pin+OiGlbY+ +zc)R#_2j41IUc~-_hg-WP`i1qu7AK5pPv!V_Lr?a77@X+7!_&wI4PA~|giPC%KA$&W +zD}5PvV4x(C>$k~uR`GtvBeYqyDmSm&{WEZxM<>Sb70+n(Q|ml|kg +z$QBjZR!D48m{@CUnmfgF^NGL7pXA|a9sMb`N%D(w^r*a!dy)H(c;(9}KX#3VWFPhQ +zPKj5ymb&(gryunh^z|FRFYz+c~IiYcUlT81*U~LT$d^;h}13)$H)~u)%|jKQYE=7o<%o6Ta&Gx=X3M$FCcViLS)H +zC~nWDlk72tlPVu4rL@;L&-weYkpBa_o@6MkaUJx_S;HRHT6=VT9(=0Md>LD0Su&be +z;^yQP!@G9H@|b%tuJ}wKqhzm%XjJrn1+r9)Ppj?Y$w>f>Vx#>H=d6v}7Trsq&^{K`!;&v0ilbp%@1@5#{ilJIM>uR0A+k2USKkBWQc55FJWNso9f +z7ANlYKSEw#iXY|w)JtQ%vF(`LGg2Mp?-%{5?V2-(>TB#p;WuI?G_n5?+KKUh0_Mp@N@%yd*Ss8_DU`| +z4RAP}deSX;huhjdEAwW!rw+n-BX+Nt{D8xF&;Hn_d_3$Qz2#8Y@@Dix&f*GlBXhZv +zxh!h8FtNY1*3bBK@dWini-oq$*ftj&<#6yWvg5deIKP5A!uLdfoK>_#(FT8G+tlxn +zKDIaZ&9NRm2)7N?Ll1NL8=iHno#aBwRj-_NiI^K%uPW9n=Kk~Gdfn)+*CO`^77sT< +zJGH4rVcv(&I-5Lxy+8J@&qH^Q^5PtsKX|wcyTDVuL+g51J9{tnQP#{Dr|lyUUCWf7 +z>bs`2SI6>7qNAons{e;+*ck~$dquOKW!_gIGfAe>Ucp~9g?uu-SLQt!y(R3~gqHem +z#@qZ)jNNl&bX#R!dvqM}+&N*dUx#t_VH0$%o;`H-h!4R#T1&I+D2S#A=>lB{(AD=?yp}iGiZ)u;ge(7MJooDR`y2tLF^J{uNTDXcf6a6v7 +zF?M1F8|P12k!i-{=dYwf2wyezk~A)IXH!_j2O}ZczNHL +z0^Xq@7aP8qa^!|9kQ<808(kcK*UE7phhNqu9n%Q^xCK5RZU19dUx7Tj{1ly~1xdsE +z6{o^`)ut%odb!A-nH{%w8}te35;;z#>**4alnaeHPKj$wBRUni7m!(uiPQ?N06v|^ +zh4i0omkII$>wL{)PYHL*3!vDNHNIT1JG|x4_2Hh_1QXdxTtG@Nw1>)iBc_O0YX_dS +zmpv@MKeo86y_=?8!;!L-VlUAv*sJ2@Lwhxl*#dkDzU8!`ADdrcEph{~qMZfE42FA^ +zUjDTO{4E>C!B_-&p%giRJNL*6zvFv}#qm-zGyM|$tpK?~Flmp(&Ajv%d|6;3zE#89 +zO?*q8&Ui(y7jYlI#4U2R#!k_BaPSV+=+%v;XK`j#xKVEtvk!J{T!4MPgtfr$(pqm` +z*x0~N5xQwJ`78Ewt`#-7aqif1UuI*k@@!P}rh1FY$g_c7p#K}?Q(GU2k9QiQrP$Vs +zT{kWn>q_>M{8@W)_Dv}_u{Oafxa+fU*^sN4_#5EuWBP*n4dw>!SjX%fv+G_!-JI~v +zQO)l);!p&$-lkkE|B6}MJEoMY^hk+#Q{qCq)fi)xwA7zUSbvxEKR2#yF1y +z#|+>&035Q*2@eORobPs3mz(G@u+#%fJ@w1YIPl=rZ@^DCQr+p)b;6HFUq`1EY{44j +zmq_Cn9ZE0CONlKpJ5*qv9^WIrI|hEF}vnk +z<1sCfIB_x2I@Zx0xI7gZn2{_TxT)2c1FUZ)InSXt)}oeib6OgphsDu)>Xz6uw6=}h +zCg{+$$qHxxlvD0;^eaZex89(pICoRk`uxGWe`&-$ot)I{9M+Q>-#vQHfPxO{2v9JCPzre4p-uj1u +zr-*f$*7l2m+0PD#XEE^X_4)RV!1EvQ$l-PBsng@viBsnnmN!S)vqN*6k59V+oJvlr +zqCWfg;a~b~PN&Tkv=MF2Wev1nwO2pkf4dA?6usW!k1f0W{-Pnfd^W$@Zbss#(yeE~ +z8^wQ!-wU5wDY@6em$j!;v>gYJAB&DTmbe#mFMgg&E)k#En-`yK95-Sj?xel<#EZ-& +zZYaFOHD*qgF%Cb+@=@{63i_0OTMAFq*osS$zAyWQ^egFA(Al~M +zJb%=4^l`ixpgLc+6|F^(JEELpBlR7jZ{#1_x8m)G)1skVbKAw8!$SBQaTG0!nSb%# +zq4}5Wz1Ge@gicX*MzreR24+8#Z{J4Smy%Dn7+$zE@7hd7-js}TL@h!-3AK<{-HEx| +zGtK0ANp$sOqR`l`DIs{;ZO~UazW)$sEHQzWucGsByaamSOi8UC?DOmNIr*qQbCET- +zXBz3V;ix`kNA~(`wtebN_Chly>0+;yeY24~K~COQcM^{8ZP$TkB8FcV1<{X?EZx5_Eq8uQ}-Wz(AUu>i^sDrk;S0z1GbyZJzt{K-u +z{bSGC<xbRkK>m;aC +zl~7qz^LIVFvy%(&NTkBf*RdJj&EJz-up1}K%%tcN=2T{)?jn9)hmB%!_*Ldw5?#Rm +z*90=a_BzwfZ6P(T7~<=3D$0 +zJmS|0&Og;rJWe*hE~H<{m8z$+QoKWUCfS|l!5ou{Rold|ok`?xR4n%lSs@Tjq+bL#H!DW?T>m#x7T +zW$hRV>Py!=CCir4;P>&j$XRN?y-hN0|3)tc{7q=;&Di6o24}vTxPbb#^g*0q7jVH# +zb~Vo%r@PAio#Rc<^YfsSpdVtzh>MxsHzCqft@H9*em~?KN$v0T`pFHyg6tzXSb1A! +zBRg{s8J`0G^Lsk>#5ZCy$yqbYDXUb!vMVn1<%&n>!}HzNKz|dkhs?3D5US_-sEI+L +z{eQgc!GA0DJ$p#D&sI77_QvM>bcPQ#RY$#CXC6A|YIHhsw1wxoI)A)e&_~;hBGi@r +zLB4;^PtInujkQX(hl;t=esP;*;H!W^c8P3##?9gbFK49BjA|Q)f9FpF6Q322UKBnM +zn~+z`o0&aZJv>JfibIOw$I_i2eG74xDxN|*AM`RTuH$H1MU&6Z1*>AV1*6uv)~;6w +znQ7v)1{;X%=F;o1f$Y$ocJk&u9NeSIruR}{)_Eyhi{3@2x@(}g-F$0{9Sbfz*+8@$ +z*k48aqI2zyZ+$eN(dns|-}Uyl>|CPf2y&eI_UIX3nNK^V=0@x%6Z<)j#hoH0Q6@+$x}fTYcGa=U>E^zR_A}-fXEbX=K~! +z@QYevXB1~y?0y!U5JOI`C(jNc-Luf_!d~}A>?gkc{9gK)%iKQF@o2Zjd9Ig7cIa`5Syi0SJe`kkZ +zFHSwJ1#$@coOZqMObLXEm-mIi#Z0#TI9nUUt2e4`XNDjTfQ~M|1T+#X|a4fr!-i|WB +z#@!2K!&FV{@^z +zT$7q^>8!Y2K0W+dE>99w*gVC)zF5}6kdaT|0jaaom +z&UD7{?DxuhF5ha+;64`)9-?oJ735$MU46o*iGzOFM#6(CISL_9{ +zWLFM$hj63^nf&RfF)@2@=k?R)R7qym`LUcn_d!dEBfDDm4h#^B<;``e=}%AM-QFd{ +z92B%9;=vsFp4$FL;bgSkSHg>Ol;$x;`GH-7_42W2aJHq|srxzRT0s3$Gd*eCiM^Nd +zf2s3q=F`9{ou?8wclO`i+0*}r$M^LAfqwt+oeK7dbh#+>d9eQv>ofi5brP$YF#}(M +zR;OF}5Pb}LX>BswUaEXfj#KG6#IYJ1YDp9AnIb=WM5~F_*SG+;4it_EU?`>}Y%_mR_=&^6dVV +z#mnmt*TN@=TW_sFJ}e}5Ks1zq*D3bIA>L#ie;1kqE##D7kM=yH^Y|mcAAu%=H7+Nf +zTl{f4_Y{KltzDm}7GK=+mi!<+v9V@9e9*w3BI&WFXT5Zie3Mv@EWkQ6bRwg}uga2+ +z>|*Ru^xY2N*-&b(z!oEa&x(Q4ESV}vzm%sE$S}3^p9@Tt;Gxvl(Mypr!7)4`l|=7h +z4*RiFC#Ltj*_|vq3An3Aze$+|9p&sf+?r*6ec*5FrtVt&u)!L8WBeudCBKenNd2}`PcVsZsGV#E +zmOqiF>A$nDN*W^Z<)$BhA31TcSr?TZYd?3KU6lpqtTnFrYDzZrrcv)sX)y2hRXAtH +zN}R9Ydwx1v=exvc2XwC2W-_XJJvM*!i3r +za<^|DXbfd}Ea2)_D7@FjcLnJw*}EgxIhW~T@_DYRxe_0DG8&*$~VZV&$^ +zdM14(oqx=n>1?e`^v_8q`(N8&%xhDY_fN)G%1b!FvM1D>*&JeA-&T@iZ6!oDgeTxyl{)4zfV5dlhS3{Ie)|kgK@Y;^MoP +zeWk>GgSnKOM>9_NA6@PyvVY%w*yiXGeQ{49pqb1*#Z!8ESN8WFzO(mQmxGIxxfmPt +zbDj7>(&+RZoMT(nSE+fc)zWKLe;u?V@a!4x2Pee@#uW)rLt{^N1O1sT=DQwcx9#5N<8yvyD$IgA^q(@6HoEKXh}Z4JNbLKJeSWH +zFZKua(k;ZVcOs)*3@_6i%Y($Vy=~<=o#D0E2o$p-IZtw*OFVm=cy{FERH<`u`Wg=C +zbFjfV*g@yOo8qRfmBSm{crgqK^soDW;_c0~Zz%4*+U~934uk6L!B%~fA1ikwbv{g- +zgKP5=+|ed^tR7oQxpTkOOV+KtZOtox<@M)Mm+`lwFCNq9ALz5*@00dzh14CsPKIxv +zF$vE5i@4`gWc`|5*lQvt@?v&gpv&OTio+^}&w4sSaeFYo2=n{CKfg_T71!3a^)s9Y +z=jc4hn-u2^?*dOLav<3_dzb&gw4({>v)?jYI8VQ$SAD26*^8@;+M?Y6SQuP_|zk=j#Ykqy%7chH!_j^1$ +z%^R_QzSUoU+Wrq82HC4#`pC%sg{9P!oXNc{&cTb>b6&3Y2JTcWQ`?3-k3oxQX{U%hzn+*2FD +zmp%@B+g}%6z5JCu?4x{iv_kfV{I#;ddwb>L&SQPG#i?~>-iA$P!iMc;8TUliY$$YQ +zrq6TSZHmX!xY{qj_-7Aa4R##Xi`W3={=I=*EK@G^%Bm>49KKiPNG@qe%;7HCnp4`l +z^cI%npn-vF4wrtsD6{g!E4Nv}|tj%i-tTk9_^9 +zxEC9{%az=ilQ+pd(`lgpMTyJhYez0|UcWQ0v4+?C3vnqXcOgFbVt1?)={^u@?|u=R +z;yQeEo(~?!8~^`3`>u=n`KBa!FKhas6M3eK@sXced+2iyKRU;Rn;x?) +zBfm}pTsWL(%!R{e=Ahizp})=ZZRO^sl=M(ze#Tz?S?Uwc)0N*0Z>{`(Zr8SazDqw- +zUvXeWA5Z3+0~?J)pUCJ3&CJe>+1Q!yEbAz6<{`K5ifv{c+UfhOyj}4*dGE$}yWv@K +zmL-?sQF1;OzmYnsnJ +z#lN*MDu?z>>1`pe?|kQc;Ci7i=sVZ;-R#PjY6c!mb`9*BQW9yme)GGYxidc2G<0=< +z!?Tb9paJ5#zRK@c?>6q8nVh_@vUfxqU&8M9D)H-IbpM>w-Yr-j31OQb*k$3=SsZ4* +zy7#X8N9Cp!oZf`)J;}!2-js{&$eC$zcL+GKKUuwocnkEJo6&0;2ID{!BPV#I&#|uj +zE^!t2VTd1>O#wNabMpLDf<8wY>#I4$a9A3-DZQEBN&1q1PB?-WL|1ZF?>94(IgGkr<6l<&v$BCWwR#^y6ciqUh?oG)@eeIvT@+FjO@2DT0F=zWcp_cEW +zYw5t)2spPR@czB_vinPIG+D|0KT;R>L|QuW*WYb&M5B5=NGRy>TgCO`(8lk +zwQ2EO;`((rwi3C{n4GWY_c$fu9cU?1^g +z`Z$QrUq(EHcwl~BZWR0bR>#~xpCyUQ{JRH1j+2msU(b1kK9u)krAwZZ?oc=~n9pN6 +za;Nj?lz1UH#-EZXGUvs`%QpLbr+IQwyo564Ff9Fe%H|3z@Z%1MQJ{^d^XNRjIpg8q +zaCfg^*Oo)?_%Ugl@HxrGrFapoSH!o^R#1n#kgV;p)Kl>5@uoJh#gXmL`p%$H*}WVa +z-z-}ETh4RcRgv9UevO=GI)QZ_dtzq#*XRt`H51NjGveeB=?dv@aQLtMt-0i&XC4_S +z>wVsy`y=Ml@d2_k9$BW1KEO4K0@M!>>VpjuMBSW49{;{mN970WzOw(R?(1#b+YJfFJl?CaxqSN~-#Ak_XZG^`kbD}7O;aqoCxd3kR*t3b +z>byvF6flfq4x7MP0Bf*UPi3!a&zGB=w!in`?=Z{SUi!Uf4+!>(_N(%Me9hl4n<#&$ +z|M#3j^Wee7$v^eWhB71N!tWGo^qsyKZMYgT#OO9Ky +zdcIw|>~=eU=d}}zL0jh6a#sKBt@wlciL0nC2j6PnVQ#VQm%~T?T;;9(I@*u*=b`m+ +z%mc(R4fr&0>>4eley~Pi+ioUjMi6&*biCb#)Wv3OW836&DSCY?|Z-J%Z3MkyXDYj>YMCNyR? +zJ*eHgw0XyuZ-R5^KI-e-lS~wxedmC~8#yy{p5$YrL8j<*IM>IUH)CJmdq79mL;Ip{ +z6Fo9s=Uw4OY{?B> +zn%j`i;y~;leb{?m4s6LYQp4$1xdr})vnQC}NOR*1=Zu<>(pk%ID+3)w=0fgF{{yzD +zP2eKH^AU^ZP}`%HuXyL7Y}0Gr^l0cRVA(&cEa{h3P_~o4g1Kwn$Y$wa?oT6|25Y1~ +zzvj0yv{Rd((C>EETxX+VdZOsE{GS$H3fVv3e8+>~#sAoH=)1#UxYqCMhm^@DKN3I5 +zwP$}$+p06Yev;IU+kNWUrey01{7Z4*xRG+L-%9H*8rP=v%0>8I%sP(FTCYHMsPWfJ +zZOdtUtKZJdNZz4A@ +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 +zS_^w5rM**){q&O +z{tRTsOzNMv94b4*sbW8LeujN4TG6_Seu^x8&g|F+?{rODs@&Y1^5}CQrZrW3sBBvG +z?6^aHILjZ`dkd0IeAOm-#QIl8gH(6LDqh_kep|H?+{Jg#hv;K +z@Y$)JXjwG7)ZjM`=Tv?bS>g_l*SInI`2l-Tw4(d!qEqbez0!N`qI{~;fWI_R +zJ?gatxdE?pr!c~(*!1Zfxwr9mu=9*2~q5X +zarQY;V`*CV=fp3>C*Tilo8hIzn6+&;^Ew6w7Gjqwjboec_=u$g;>o_Ly8s*eWOF!p +zp(j&qH*1oYv9I@R);+6f8TK)JYmIH=ymoDMqxjt9hU#bN1KgzGJ*`?d;punS+Vxv} +zQ1OL@;B-6RL=W+GLu37D*jTp@8|yV>$U^2Dot!|<4tQO&n;D2guf>U?_Q_T@52K@T +zH)HUBhyO$TFPR-#9^N?<{y$+g{Ix@Q?{s!9BCknK7nQ%$dnDLsld@;bj;dog{HaUQ*AeuS>&%=2ThJv~Bt$)3l&@|~2cZ|M@E0pi5%I%vO3r_5YLrhsMcsKwP<55@6)djQ`CZJV8+M+-)MvHC%$EM7M%Tr6;oa;a@T7gRo%wVF +zw|JCyK0VaCDtwcB17~k8ysIj&#l6{{!wWfwm-RaEEn{w4Q-0(Cbl=%~uBH1K(0#U? +z`-YVxmZPtGbbqXzoA}`neI$`VHTI(L!_ivKUeUeir82MD(!KWOD)y@Arrxe;wBt|s +z7aFPmGW4oFs_$p;xA=Cw)fFanoC^LVt2V8#eXrIkG;KlEd) +zQy1+EO*9z_Uq)UCw`&~xqk{h<>@j`w?%hX;=~_q}_eDnz-7b4b4>VEZewzIxT1|pS +zV~SdJ59iSBMVT_EXwHe&?oNO0Zv8>9cHWyFTD#M;*6uog?P{r)y>@@a+I`lporyn5 +ztiN!;+1~vrWMARrUnvtVzIWsS@Uq6@PT#Q|bv)Pqz}5%BgXjwZp8O93v6uOO^T0#! +zgzrV~0+(vrOAZ|26uU~t7R`@!Qk`aKYjjc9M_l#IZlfC9aPcRaE`Q$y# +zp-BOB)-@LQ_fsO$%o37)uxXIAoPpV!daE3$=3HzKDZI8q*t6-NqNZ@^~M +zxJLHD@8mTi`*=L#@Fr_VXKk+|-cT~pW#|+o!0n`Et1qC)H7OgY;U<*IKy$J))mWZwsHhA@FaF^8Gqh=Hm6$;YhXY`Pj_Rf6q;y3T|C< +zaYuDtS>;&zR*pN-OJS?*RSj$2#@=1ZUCGUJWs@m73V%;*#I|qFO-3ghav?-mtBX^` +zyo=Nf4P*w?zPL&;VUm0Kv9@(=vwZh_YwXp*`D(6pgElvB4}F6(Dxl@SeidiTKsS)y +zA6g%&F$Ie0mkmqzbo+Y?xT_bzo>dBN8o__Dvn^H*T~uJlaLXq%8jeu?xT5e0hTS(F%xW*MqfU+AT{qb3G?JB{v7OaZcRd%hr2my+;P@pR6 +zP0}{s=WAx(z3<%K{`#)#=i?uFBze!wnKNh3oL_ThX7OOSHk00Gk$=nDnt*WuV`}n_ +zVogrSjPVNt-;Wz#`oq|DJ4gC<{moq~2P>da)yVa2lf5SB@^I=zue*QR$n_mFy(Z|j +z{ls9Tmpk+SCHR2plLi +zsY5r$t~mF^f3joq;PDN;x|=wD-IA^9#xaTl=qF==$hd4%c%l +z^<<+o+)>-sO*~rrR?<&8d#~6$V_F&RZ-x6=+OKHf{CyW|YN}aN)tR)nFrzo-bk8aK +zBE2c(K+<10xX7=l)t*-m`^?S!{t|qWMg}c0vS(guvEdiHMyO-*hkyFI9Y+`S)*vIF +z|0d@fs1JR1YCKwV8(rO(=3a?xJBK}~xx`A&8C*->{gjn*w&r^d4td;}ZuUkt0qb61 +zu@6Vi{M^i8I)6qSyM_NVBX4pZ1JGtDd|jx;8yre +z$RF~fS(AGIpnha>Z*ruxmwTl$*WP|5Fs5ieO)NDza&7N#m)h|)FqV^n=@&gz!L;_3^&wkXya0dn7E}JxT+Xe-57ZTZz)!k& +z@f^b=CA1T7#o(DDzTFU6U;T&gy}o2KMc16{hZ4prJMhM$8)~)AO1!40MQi1D{mJc@ +z%Ldu<&$<^RdmqCz=6IO*26Ex8rCvUGdi(in?rfmo-J1vAYkA-`N8pu2_U1VIvj@+g +zhIsm=fnZaw{j5Cjf0hS+Nd$g${Mti$ErRcsf7*Ne-^&AUE%ic~unD>fXUQz>CtA5R +zeU3 +zU?bZ{&(A%1@GGb8$jDbRnxmurqibuyMR*kYg|)KH*qchpUM@xs)?n|%isl59{6*$2 +z9O0vRUjW<$_$%I`eF1b2ZLVZbq^4WS1o4+=O?9h9`wvOs&>*?IE#t?u* +z$XmJm)ci<(ddeme4WSu!t=+G^GKZFD(st}9I=*h`SQDkAqv2TU=F%^bhklz^SpF{Z +zkIB-`&`oi+#mIf#U&Z6mZyX|bSGwBJ?o?ndx+<78GO{>Rg-oirT7TnH +zo4t#vz?jHGCod)Ro{B%IDfwG`9^adqin;H)Q`Dc?lvHkAjPC{RySeA=s;1=5k%u!| +zC@Y|>kR0nmPcaV*Q@Hs>Gk9AszTv+|z7I}QQ@XD#?DG}c<<7_O$lUe5_bujaMrIPW +zlFwK#!j4tj8Sn?VaX#3*Eobm%zneb3g|3Qk7#TSuLq6QovJ1XXf4;Zn;n(>4XvQqK +z*c#~2D~I%LkN$r+zx>$5d8RX*{uGWEQ!nJ1khZ_%eTQ8BsoDp;G<^I@WPKOrf%k(v +z@HRhW^VyV>seON)dDa?N-cQ3Flkr(>9-DI3Qsl4|dfy-V_K)MU#iL=~8hKOe{nTsg8_v_*Gx96QO%1^631Q`go^zkZQ@uT$ff4Cu^R?_UF7!IXU!j2TUf +zkiO->k*^%ZzueqmgbZ-F;-9X+$m9;ev*1?_K0DlQn(I22omPW_<->wy%D(gnmDWJat +z(dqmMo&H#wrIYkwrrXlz#-h*FhI9$>8w*~@*$(w9d_-&ECtN&-hv>5w7`gPR-Uofs +z)D?Zgz4$Wpcs2KIM`;yAawW0ZR)st!{t^w3<&L>HKD+27oLX3 +zy|4p*>RsycuKC;W)>v>5%?gnZ!k@lJ@s_#&Cqk!ijfq|xAF%kBgLl|>6nEu#3g1?8 +z%!IGa@odCCe{z*@79W;l-)JpWaG$C0)m?PQ`W1orA;kHz9Gn~I_dqz`nuD|OEvKF0 +z8O=)-kFc~l6MAb+sPAL_d$EK3j==RNdTd>uozHOWA%AbAEQAwXS9Tn~#}0odaVFyu +z+>;_O@67{K__gxAA6!I3Yd0u=+u91UAK*RW7*DSJd)BDlKj^=|t=;pk=jWt!#kPuM +z;Ket~ULY>lruT^y@3>HMpF6wA{p=++mGWoSB=w%adyP$evY|r{`;*%D;x2}vk&#)* +z^vURr2bWGLUQu@hKiCC5$f0hJH_A#~p0V!geCB@U!Sk5=%5(wwPSde#Yl=?^?kozh +zPbz!rxxe1?;w$HcIV@fm?-h(R(75^rum)|{)IorC4y^y=FurkLdj`hra +zeZ%0H_$InjvAiErPxRkmev6;UQNHKqWt(oWZMvv$@BbOstFnQ%o0omyMq73ZWz)QI +zZGxdP*;JKw+`gg^AX +zY&rSW>#d9we{QBsIj^!GKXjL3fRZl@M%GYoHFvY;u8$t-hyJ{Q_f78RAI0ClP2ltF +z7HAWbZDCw?hm +zw~CCH!WS>D31Y>yNxk9eanDBsan2@wK1!^vz`v%Z$$N5;{6ykjFAT~zZXr$}Jd?;! +zok6gpE +zaW_T^S|!Ne3^rU*G_MByHk3l6$*f=Oxpl;kxsR$c`5kA^_F$7KHgx&B?3hK5C%$gw +zVKjeZ1>fF7d%a!GcwNjY>p$zBYsp#Zo!m9eyc4g==5u!4X7iIhyRVRr&1B#1kqYLw +zCeS-i0#{v?CSD_N7rc>!zkn2xM0syDJ|EOfOpjueTa +z09izyt&v3&kVP89OXj?N+Qe9=a6WDgvZ&t4qI%@;f)UB<5$+zUMCR%anH!2uLdMSO +zk^I)a>16-Bb8WnGTcVUY_r2H7k>;?RF-c|}&t8k(wyPg3>_{VA>Xp=Hha&t`uF^T!1J2Y1y{{aK2KcpuA(byjv;rF9OIhvO@7bI4-4=A +zV7^rURX1;voxk~<9ar$RzTp?$cgfqE-1jQJE3P7%NuEASKCI_i89J6S!5u9_N00qb +zW$1d>@0x!YEkn;-m!H4V)Z66bp?FI9w&E$tKgmP!miX>O$5$gG_D&+rzvlglq6=&7 +zoXa2PE~(ggGsF{P_(5OyjN3Eslhbkf(!AT;ZVx?O!@P%QC|*I{PsRsX*sgUboyywV +zGiPPU9nH(T-Ml3B%**8Tn})u2{R(!th6Cb|Q8-<<-EZ`=>Ue%3bDl~UUbQ6oYvTV~ +zBXe{Wa}=(>=C4|R@SdWJYDEuZ*!lw2_-z=p75+fN+c7tTOgwk7v0o)m6;IF`PZsx( +z&nj6{+UK&o7I3~I%M*2x{xbL4{_ZWh*z{N8rPhmg)*|CSa%s4R8kapsy|9mvxBk|_ +z3FV0NWzRm~rQp#sBJh^vfj1!!yaoqv5%jP=nqqd6pWO40Ze6%Gi(_>jm`6rn3cr#Z +zco*~DvgnL0)?a4s4qY(PNi1+p1n%a0_8xnN+|_X0;cqj3>dICK=dZ-$12m$piD19GHUF;Naa`bknH$DZh{NP!V`%=7IOKJn%}WC)#aZa`Q6bsj**rwZ&`u +zS8U#Ip|LG;`Ra1R%bp*Dj|243j3n_aGY^t8kLUCi@^cq3)z4RoPIveRhQHMRhh4wo +z;hU(J%U=)Vz!W`_4&KO7^1m8af2F7fKRb9@V`^P=^Rhddvowz9fq7>Hrr>4nw)@Fi +zD~aNZc&jJ7?^01Zk@vrB98>a1=Y_`>TvRK)r@pZb*sJ_Kd#f*)HxSOp_o>0Yyu0Y` +znp*soGfn>VDaKFX+z+~udsmE|-jAJL&H2hxd8b46sOqhcRu+xvgM&E>99hXN+Oh`96i<_l +zIh(&Zla-^tMvv=I_1Do3haJmC>#rr>&%eGmQcr%b_@x$pxpE);BL0|%j6NKG(fy?2 +zlUno~an22k(JRW&z%JlUew{zfrDrzQWan3JM@!$mllX3vrHhZ<8-UAs%#HHhu48UO +zID#4Kq%bZsuiyqVADlae-|T$+aOdbTYCUZ2=o{|pwl-%dADr#k=8^xQ%@vfn6?pQyQ123HePjL^$*)$gIL6rhiInNh|ct-Yk8uGyZSPuLu2R}>8 +zscG#uh?aUQ-qN$WNB3)p2D$jw=D^$BHhTQ%GlOe2KE!y=K5JbH&g0a}g>_m4R;Uls +z4xaD`=Un;H9|-qEJ(^p2 +zqw{m=GI*bJ%ETJx^$3T8q7}gjz#hPE6nyQssE^l79>wVK+5L-qSUWYDiT+oD?EVGs +zb3!-E2es^9U(vGz-=m=Do}d8O+PmPK_S1^RJWW4^-b;_kMh*8a)|tJFD~9wfYVWMQ +zGe3U>#EFYt%tCW;FZFWy{P3d-vow&rX{NpO%fZIug`eW_ +z&p13p>ndP`az9)*vvX(@(mRv>^T*@6$&uP$JpNMFrQ}9Pvs=L7K(XzO1z9?UJR^Ed +zbNGkxc=a8f=Ra3G{^T5-H-7oRIDaDtXW^TsT{IpqeDlTQ%Upk&&j#9r^BImkoWE%X +z-hvUq5#NOST(o0fVRSrx7#;}abzvTu!f)#xS^xb1rTEV@?8QTg|9BI^u@e7bOtpUn +z@t<0McHrVakL@e|^QlkUaRs-Jj{m%Ky<1a!kH&v4Aa{IE{D-nXcl@W;;j?DRX#4r` +zC-Se?H1#&Yr&^R~uJ~1@AU{)Lv7S4x#^ix?J +z=2I_seBa1{Y2?3ymm6Qmus?I!ZCQB7=7IO+Jn*(IviRk~YsUWgcm&=C>gD2hV;*>2 +z)H@h|>K=UMFjgdg>ez^_(~zgHhMc}a`c^soKVS5%TFrNf*KO?K6zk_|cXzYqu`mzJ +zL=H^RcXP_pV=s8%c$B*jUGN^KUM@XO%L6a%;N4X86^CES;J2e4{32tXp9kLi^1z$6 +z4|r=e-Uz&7^S~?4fj3tA?^Y|HTzALHkHbo`sy +zH~!xke}9lOe)>Jo_`jcT{It{fh3A3B|FG-RjQ{3+jGymTG +zejjzy*b9dd^CO3ueC=(Csoa&NdS!RtyzFrB)!#{Ui|#<_BnO4Po}ph?*!Gvv{-8$+S`1CeJKxo2S%pz^TP0L>`{66!6jZJF^q+6@>yOcrr`S% +zf(rj+?gF0|C}#d^Vo%DcxX9#F*j$Rspv5BE=kjmEm#qF7DX{VWMcl(yXzUhjkso=p +za&^vExW^=fVff#*KjWGvWB=GVfR)|Jhk4(DJQc}n&H0Wm?ybWX=D^!X9oa8uUXwEL +zZYsJPJz;fN8u|U>2)yn*@UG2)*XrQiz`iCpDE?{mit@4Ty^|w}MZd8)&Ze&L%pLP3 +z4yMLiMV&BT<(8a$l>%rS(nh~kKhtXYS$&JAIsdXte0}d-ler&b2l<{lpTpgD%(Hm4 +z2mSJgT8qyUwEa_rKi6&bW>q$Ovueprm{3}qtT?|WIdNqZ`?3>>Lk%7N(CgTsQ@mM0 +zam@U$`f=(9#qpq`G?t8?KR#Kpays?nln*4>lY7qVpSyFyr#b)l+W4eb90ZlT5vzSx +zFIBtKJGN$q;Ktvy=Oc+r18YZO@vEmLmFMA?PMCH2n~JB_)E@2qF0pQFFzfVY{eL?B +z)y_Ko{JFE#-_hRb#Lk0n3KsVk>>S~K3+=Bers$Ve&N}_mSr~6I-h$GKS+UpV3Jy8Z +zEI*(8n~^Is%Bj-*_H*7{IYWCH{fw`g@zocX1@Y3@tm^Z}&x)@cmn`$j7~c*zzH@f+ +z?(HnUxH_nW28yl6OZ}vms^F|mr5Rr}C$xrdG^=2LO+W1-6 +zA}gD|b9TGzb=?EcoRYURz4y3TteGj^tYhiF_pUiZML +z +ze=xK7!Qd=&|9o{ycVH_HtMO@E!ZYSa@9w^W^P+Q!!H&JzJDxrQ#-z8&XK+rz^Zqtn0KXLS_G_%@Yk|iYf@0BiAOXz&_t9?=d-|jM +zTVE?buo4)zo!Fhcz38w6{BGV>n_2vjd6&X}YEp6&xjBX0Ei8O@j@;4nHF&z#KP&Kg +z58d1!#$DDG15@aGQScqggg-Q3KAB(E4|=a(@+!1KNK$G53#bRhEb=aKz+$)o0* +zkimD^{U_}^MR{K3Ny@|gI@uvQ3tL4VNj3Yk%B7o)KAgt>toZ$Wvv)gvWgK}Hut%FD +zpY9fKH$HqN_e^ouHpB+2~T2q$pN^fiTiQ$vywLxt()=WydV{a!+?)18EDld4|g(mmFt~dVgXt}X( +zSnnC1&Rln;OIZ&KM(Xj4Z{ciT%3IFavbPc?CJ$~oxz4&PMsLBrk+=l8Zgkkp!sN-o +zc!9HAUFpefCmZ_TztfI0e}1XXr2=n8F=aL)niPPIwM|0c8ntbYbPYPe^=Z-(jnaV=+ +z&bl$sYaG6p9j9m`dd&ci==BZ8t9C4)V@lQ)8a<^w|(n +z!+JAWILiMzHHRNJQ(kTO%+f;j)}os?L6gnoD`t65d2zpw@ZKNDnH$Y}P39ib##KG= +z4Dv+zlD)0uh;QWo>layEyV)Oarq93iy?)*UuVWo05BHTLaQV*rHdLl>=Ing|`~Nk_ +zro`>nCr|RV=X5q@FF*DlQ!7&BNwen2H_;wCJj(gWU2Dnl6pyaG>sfOb;YI8NXVb_-+j6B#(o~zd&xI&zbjA=}R#n)iE(4^6}Jn +zeK)+$nDj31C6x8!8{0en-ZK4uJ#G8c8O&Sg^G5pYce$k=`*v@hYs)XA%wz2~P!BqF +z=>52h;Q1Erl7^Pt+46>9FDo(hv~8+r6XTxS8u%i?&vVFC@?GKG8EKu{c^C5jT=0Ll +z;kPM0Yk^(j_OvU0L~iBP{E%aL9%D;U_C+^FjZbGIm2>#C;g?w^2WC4mHsx@S@_6@W +zbvNSlHs+J{&)ItDG5}rHyLnDg4y>hVGrmUfs|3G_%xwCbfDY4q%z)NyW}o)#otoRF +z{H?JFZb%E!Mf4CYL=*Ls;V$bEZ#g_Ry?2QHc&!1!E2GcWk?|WXP8Of#4xb&L=^H+U +z{t5%`M)H;f6M3V3E&N^L)uyE@D@$htv8#h*jQvaK%id-ad9k-{(A+PE9y+5b`smGZ +z(L?huT%t5-qYuq_3?18y{^`L-u(-UkI;<}mebM1`nX6xkO|+Q3)CKelFSd1o7pfs( +zOwi5WBd1tL{BPeWT?8FfejquuDH4m3yipEKC}$W)@AIGT8@^TYls?tB@KxVqP3*I# +zM{^OK-&x^0rk(VG%DZl}a#d}$mQ-IbfQcMyq{&X;qiN{VsUGVaFS-P~su +zE2<2*HzcWfEg@IH#%xfdNS+ob#eHpXr6sgHf3 +zed+G>l(t6x7aslOvgy3{_2lWdkh9MnwX4hN6PUXsQ_IZydUEB!3{i +zJL-h?f_VS$Qx?|6z!AJSQU>=&quW1{(LKYgmJf2OL%_r(QJFTt#JE4|TfJukW#K +zR9ALvXy52vfpTY~$PT%IJrAv$7TPJ#Ei9A$GIEt0KV@H_EVPTwU4FnMXQt-~z6%HO +z_(;wkzwG65+J^SB>WRN)H;cca%^sUM%Htt_i~pnca>DU=Gcs&LbKme+9gkNXfXA0G +zHzAMrzzcKv9~g#q;&b{KWL~(pX8B6-x##s69xpfNU*P#ED+lB7cn>@-{+8|AwbasP +z8hBK~-;}}MO;68(zh%$%IR1VQJQL61Z~h;}-|t*)@82RY*H61%`ZBmRlV2?UR(~G2 +zggibkVsAe|+gIQTjq41?W&9CCkNi9?dpjJvc>GC6(-z)ai-vx#~vwypMKO +z5k6n*csWfw+1p{6_~0Lw^q54Q>0i +zIktTXw!Q3n+4r*lN__DbbLVXPwfKcQM|SOMMIY*n(^nV09kK8A9_QPMBk!`fm(k~u +zzHIyZO&)hM^M#)7?c{eCwqhx|^*yW|_^#~{c#sG}G6sI!UqF7?ONmi-a_NL1w3Bt- +z?1R)7Ub6c~+xu_RZrsrQw_681Ui7?#7?iy`TYf{< +zE}KE!$GveqF=#3O@8`xw=ByTa|5md;rnm8K05;J%+##aa%LDw(#b4(>GQKr4UgZ)n +zZ=>!1oN@ga7@g3g6PQNk0!uJQM%1>kr`h=8lY1n$ftB{LYwMszdbG`F>^*F^UiioG +zjMja>!O;#FXGL4^s3%a!*0ONsm*YP +z6WZIc>pd>{4zd%wW!L!$wdah~fU(InN9y}Q*Z0mV&}XC0mw9Q)FWox~-(#1~FmaqT +za1SJJLOWVx2cJi+UH6jFgOUrL=cOfkW<%2p_#Lr{@huyB)lRVtavt~CnupJ|ym2vj +zuA$Ab@Z+5$53JW*XdcAF;aq5L8>z!@Z0U)~g=X$7y`%cM1X$RQ;P~?DZ&3enZ~0RB +zE!dcQ$++j|vF9`?Rks=b5`I2+RLOQ9=cS&)FMG<;d7SY@WRJ^+FK1q4*FuAy+kmfF +zo%%8B*7z5)neDjb3*15<&B)p)tkAa*9Py~7=}W6W3!Kl;FYgc<_}B5j?CBxwY1#ja +z_+RTsvPtVlYsd7+rnf^JgRS`CoJ7^I9?b?Z}_1c*?gDV=Xs7Y +zXyxSc>qags4inNY?}=6HQ!YPpx#gKB +zF3T^M#lKm(Jf&x@kq_vo{mA7OVC^lJ=jN5mGpM_7xjgp(a(VJW$>lAdJXE`8;8~qlEVT_^XWXW(y9V8|@3Uy{ +zhv&-f>NC1BPELi@^Y`yYpR?z2`EKCteutP-^}2h9yuw?D)}-eQ#ivXiO81lvorkS< +zoZnr0H+gjOd42!9np-|0{jg}M?Ki*Ar1dj~y5LJ(b9%ey-T5f^wqt9zgL6B3JLcT( +zv~{I>V*k}H9#sx}-NUG|X(2ro|99n?OZ)JJ$F=EBCh4oK{4e@kg5D{IM)YB5gf3cH +zC7<~K^r-?@*_fgSwiNVOuv@xEHavFz?mu$(!;Ezm*zG6mu7^g+bvJ_Z^xlSbbB3yZ +zICW^V%Zb=b9?4^lP8Wld=!_W!4dyMiIOM05?#0r*oZ!6-{K4VcN5Q=v-1pEaFtm7b +zmC+0M60f?L-u4F3;>nJmK?_^Q@gMX`I(luSj^K)B>O+0y>m%g1F6wWBp5ib1BhJ;h +zI=SwoHt`?rIp-~(=ImVuqU!|eWoc^ZC>kc$T{py@?2u>~((n~W!>*;gFX?Dl1|A1X +zL++q9G}O34o&(o*@m#gzHPI)e-&Y;|dOzMb{GX0?RS{krbmeW7^PPKT?HL;JTPxob +zk4Zw0Cf1*5p)>FSbgG9w4F|z{=uT3ArL#g?z`{GuM5F@8E@1%pd=YH}O~5 +zYZZ_F(c}m$SN;cgpo%xY4R4C3H^P^5;LE8)Z$VeBVc(Aj)wC^ewu9F3;~%r@cz?Xf +z-O6SiGqz=n7v8+{QN~AXuCbl5@7XgHZPVbG0@qf9JN65F`e8@M8T7^X4$6_K(>vsU +z*)~~zz0cJxr*0aWzeF9;yTssmIX+Hpo8r7CUIUGz`^U`nYOQ@}MeN|omEqoTG~U~M +zfSA`cW=_sFd&g_j*K{F8=SBc8QH&Rb%_Eb^FF^@HMW-2ED}Cd-9!i=hWW& +z#XB!n{>bwu8wB@2cvsV$8 +zDNbAB_-P|$ieCvw`8yBsu6($!ApYv1+{U3SkEvd`Uo8EhH!7q2CBBRD7`lBGcJitw +z_g1BH6|@F=h(~RNUta#A#ZkUvKwmF0=jx*hzg~Ai%imZ_EOnSWp=IaG-WN@E$MU!C +zux$%z$C~IxMzrB~_O8Y5m+VjsPrjXO2;_PozWlh`>phA2&hGWNoT&+?6>~H?YHX91>#o*-{t&`?`vd5 +zbj`%+KSu1L!tApuhNU{$edxHuGgD9e{LMvm+F!jES}^zG2@}(h+}zjx>Sq{-%Hic@ +z$jbJ(voYXjY=dkbNEjDlPR+ix#Y1n%S$geu{M-T_18!Z}eOSdVEG-#d@5PjV)x=56 +zo-yyG&dmsxjgjrW54+XDEvMbd(76X56OWg|*WzzW3&o1!$@d{|8^BNSZ0shx|N5T} +z&ZduQJ|{0l->k%ssr#<+W9>fuzkqiGyr8yL2T$lxf9gYiTp0h-n(K9S)t8OqOfc(6 +zak=lgzUI@H=0J0S%@-)PM89UQ_ho!)#gptjv6qf69=#{JxMuX8=oP_#m_5;xGna!i +zNbZqcH~t|jyFzjfI8m0g`qKb9NY&E8d3;_Np03RUPv>>=dW?vFhGkWndbWOj@r+P2*q`KmrFrVre +z|HfLrtx6&zFC_maA66PaUkknR5Q-M*Phb{$}Q1v;O8E+#Z|k)Un_rf7AAx +ze@+k9-%Lk*fO{RSdd{={rpluJX2zALDUbS_t^B_~f3x!d^f?%R^Iqp~c0;2s=Wq7l +zZ*Iij9Mh&d4LKiyzj;*3&i9sCqkScdLw;HvjKA4wXz}DK^&>mJ&e7r)`U(9_TPJJ3 +z_qsX_)RBHUSbwvM`nmpQR~~=!Ky=-gzuD#dP0=!>;jxZ}@;B!=8g|zmJPi-V-xPg9 +z`VG4H+gbD>e^X^uMyH`uS(}$T+8s|h-$(hIC44)Ozj+|q9IU@7zQZm!D1WmXf3wTb +z^hWq{4tzOv2d5FL8bVwspi0&^}bw4+y|3%=ygq1&&{6@uf~%nttcd7dDL1<;wYNIm?zeQ^q(u +z7&HFB8~6jfHAp@7Gr6BMyLT2)Pkum6#1G*8sy#lyjT&v +zMvdvm#!kxm0O)UnYg7+EG1JDZnFGpr1Bv;S9as1Fb}aW%E+3$oIn~{@+6SqoFWLXi +z(6%ba{+G?SzkJK*oc;eWxGCNvf2Ethg_~%v{-gLEPyeE~@+~Le2c)r4Ev~Pu4(kiw +z6CA$VXW05-zU9^U1MmR8ne_+28JpIZy=we?_>ljtO>-UNvgP}?Yt}fshWRDOV!6X- +zqQPCb3^~4T0+-SLKz8mKZ|@Aszk=N&+=QdXC0jY%J53whvi{B%2e*WFlcBrHLw|tw +z^slIbOaD(a~Z +z>jPx__-;6U`e=nd8k=wO9xKxHXM6y?cObtHpV^eh{3hcAz-OcKA~hd2FY<~&ezNi+ +zn`;yY4gl-9PvQ +zd=lFJo3Q=YV9$TV+5Yv|{oUC8Wz3JhZ^G^up0f32=gSu6`>K4l{+Zw{TlW3P!A;KA +zFQ;8JH}Rv+pOl?nNd4cyKbx@gCxMg2JHL&i_*KaBjIpiWtb>EM<(u|n%eU5Guk6E? +zuSX95%FUI{*BU>xCdZc7SY^vk1CGYOk};{B^0wBlJ93ZBu>F%(CY4a{fk>I`g$pmU +zW!nSx&m+9?#&5H{5&DN4sT1n6CitUa4lYvaUyS9*rkyKXrfl7(_DWUusIs4wD-q1oyf;u2OSH8G#MD^&L#O8yYr2Ji71&Ec`kkLYOQJz4oq +z|Go3+>xb|%GR?%2L)ku-w#s{Lg$9Blxm^q#$x6>#v6A_3QybN%oNrlu1rPDRUAL9s +zVaxZgue#mZ6-_D~-oiObm&ebRtQPE-R&RlR`dhJ8=@;>%z6&4l;_r%d6a1#V@IK`D +zX6g%`WbsjX)>{Lx_vb%vJb-^F|5@<0R~zo1MfYh|^(|Uz`^+yZLw}I9&AoeXDDMUto`1h~W5lP~@Cmz)n(0UTwJO8sgI?CB +zsdDlwNjcx!bmzI^3)A?2fBy5P1JK9qKkl^qWxKHf?%(|!ehdAwKW6tCJ?2Y$Vgt}= +zGyd~deCMrCO&yvY@tp%lubvOHMxd9a)x4#)|NYYnxo2Xi`Swva89HQr=Px-r1@t4| +zc@uQ7b+WYjwX1VHb;=LYcMj$I)(`FNKX1gwjRLn{ +z+k{VdAlgWF3m5IvDlfpU%Ra+*Rm3sl_<7<(=57`DDA0%9pA{cgqvygsTII?Q;5TnJ +zw1h98ngdTx9hwh4@5@=g<=`Ez-~I9A-+-I;^cjy?ze%@#8EZTGt)21h*{2oV(s}&m +zf4|hO<@=^dE@t;>N!&ENnvT%=bVutJ>hir!Hh*+Kt%2|V6MHms2=?dz_UMirdvuet +zNA-Omk3Guwy!Pmdzs=gC1I`|8`NqEO(VM6*dvw6rqZaS{a^ru~9^Lvu{H{Z=M|b4d +zqZ+I1(H`LB+M}6>J(_ep(n>wqqhXos(Uq?3GRmU%=tth(+a8@pokO)pZ}>CWqp!J` +zhU}2XKk%2aM}O@0h_KJv0{YCgN5@UGYcEdOf$Y(pXa05Dqi2D?=n%#?{x|K>=g#=+ +zu}3F@>z~6Oz3#2O*W1R^N6Ta7&&c1CuO~gI`xmhNR%7?=70V1`1SRYDfA7L&=%6r0 +zu$9~yZ~dJeb>MdZ +z){oxz)0jnvvA_`>9&@n*#X3vYXYWmT>El+0JYU^6e1D`&viaNwTh>omR5lNAUwNpv +z!{28Ak9whemL6B^yL&@rT0Em%81aqxCHmfVbYHpN>{~V|wzR4V+bB&QOb_R7zMqqe +ze+lmCFop<{Nfa4tfM`#gt;!35XQjs +z#S*ZW^28EsKFlXuE$yh&wuC+}%ZY)n{-7y9K0_V?q@K>RKhj0^4!bLa= +zH`%kD>>=(x(vCrNttj%6-KX{q|0C@v-z#SPS^A`28}q*mdC`s^ly@&Yj2TB`8(jy8 +zZT#59Hondn!q~xVasp-=nj?>NhvP1)O?sqW=e2k6}Dp@dCxN!+1v;+yqy#1m%!G +z)BYL!4*O9oU2SY%IXe$beuAGS}~TR)UX^uwhe +zvupeb>PbI@Wzr8%y0UJ{qWYo1@kpo}LVjtb-v4d=a8DlnQ11L^t((o0|1$a^++UI$ +znopm(`r*V6Sh~-k>|pf6@znc&Nk5eHmgw>$M(c-E)nA8x*mUCmUHxz|{r{!)!}IU| +z^XP|5c_SxW?`dG}FP>es{+bLi`nb=%E(O>JH97A@9!xwtzTTca$`H@4I%(=q$**}+ +z)$OZ>@$3@t2;*V4&;0WGP~zED>$5S&vP&$VcTKYKY?Vdh**CfJR?4IC>}LMoUp%|| +z0QAWh&pvZ~{&;o(ou;k7aVWWd&QSX4sY4G(;@NGEUYjS5j>Fpi_fISAxP8X6s|_8p +z@$9EBcJhFJ!g#i=Bl}~4$!D7EXf>NU<%by0E~m{Vw~q}xvwuBp{Yluu);|r;A03FU +z`-*2zTW{mpqGd?ORgrl1vyP6P6Aqq^2NTa0jYJ>Cvp?@>crtw`A53Lc#(uN(`;{vn +zOF7?1#j`V&2aabSh&KC*XN&I+HJ%-;|28}+THXjx&VeVV4*eVS+?um~li(e$-~I9A +zp~SOAH*Da&&K;fL==V&;-tlbPCd;b}UEOZ#rt`$J(|q5b{A)PC`aT%>SMTJXw{*@> +z68V?>P1(?ypSSC5kNg9Vkbbt${jX{HXb0NQYl!gVri+~Xi(C1pvZ(w!)6uDw@=@}S +z|D*nc;sl41f6~1E;PX#PmezGNtsk9#(sYu|KhgJ+rF-X}@EzY_?_Bf8$7kdHB}?ty +zomHKqQGEXp50*t$1=R8ePt_EYKr@-?6R +zv}7OlQzvpZjh^blero>d)S;&%_S0E6Ir;a#(R$zZpMM@hTXTQ*Q_9HEto`%_N4IMF +z3GF9aC##cw7NADQ#$Z +zBRn|=o}4=LU(mD5(Q%Ld2k%h-?~j&;Vn2y)`Ru2kUTD`sTlwDhlWmjb)l(gkWVNm)Y;V;08-O?Q_=C=d_&s!-uME +zc{OGA2gpAhOPy#u=&vpRaQ3^A0np(uvERGpxWAtL-ZR0q6}tRS^AF$Vosr!5?B-(+ +zeZBqR&$Qk?>-NjE-Yy1@zeK+84WG-dw}E5!UT;sIX3P62JJ5Q&k2-(N>+SiY|8nc? +zCi?no$@ksxu0PLuJ0{P1YX-LLl5+Ctcc9|>V(21W?8z`+!(!kH%~&+tA4?CTA@ +z!lG32nAdJKa0Tnb)Hz-6j1+I+ZJqC(dt=e>O+TOKzVsu!)CS#I?G+yv@H@e#B>j~^ +zw~uuD-XolmdX1m*A^)lFr1ob6=%6=63W~3+jd@?GEdsxo-j@Lf-LH9A@w#Bg$cxm| +zdon|ZGyWxh@uI}|$W`$io@*8;|5Hq&ZK~ +zN^Xo-`29i6X_CIRm&aXroSS=-y?XoJLp|r|!u)}qM_OL9XCTJ)Dlb=k3s>E%s&}8% +z|0yk5nfMHCwvCMM*IlQ_a87DukzyG%bfvOZ?AJ_=bM?=JpD +zZK1y*IM3@}&wcyi=~~?-EuQwhk|DEJSR)(YbBz}|*f*GH8}rvQ&e|oh;>7{)llA*v +zJ$p2jDcxhKJ6A-D0_qj`KcL=~OEk7Wk$(}pYNAEKlcUUP;kQ&t9;aX@R~Rb2c^Q0NVS^CjK&#ak2KfiCvlBFoDo +zymb`94Pi?D_8e~4)EeIOi^}g#;;>Qqy@Y!C2>5`_!Q#uO(IJ)iVd%5(VCai(}rR#lAOhF=t~Imzed~*!w+~;}m_%>sa7N@y(3M +zm0vpNw}1IHDX;wcEqQhJK9GIMuftsoTJmcN{l@npzdR$q#vM?8on>%m55%0|+PD1L +z^_i^v8cUmlm0!rWLy}+E;N)!CT&S`R&hxCZ{oY&JH>~>wL-};vmaKegr7SQqX~9Sj +z_svTVQIGf3u4|X>kZjVt>n*-eUvS6HpmG&CQ{1)|Isf3i%jo?Uzj#8Rx8?LMm+rd}E+xDZBYwi4-d)5SA?LtXPkg6r=vOaUc+Z#g4WGvX +z(;0=bWfg78cS9y}UzBA0dFF1fyP%QYlnmEfc1jGM6y)0gzmO&^;&0l-Dt4-N7>X&5AmW +zv9xG%ptn>?i{f>q#ghZ>uzJeSU2k|4o9ms#eKuyCSL1#=cH5S9n8JyTkqN|a&2y*&F|5rA$>*Lo_+Lp +zw`+TYYa7sZ)2O!a4>pJB8_v_W$hi@XkEQNc_5t@Y2lp}uck5wVANj|8qpN$NtNR3X +zU)V?8Yh2xPUENOV>RgxM1$6YquZ;FJLwl;3dSQHj+TsOm1G`@^ale*DeQlC~<*bP~ +zYl3ywOMd6-9)6fl@iM)##HU)4pPD6un>lN{c$*3G)<;f!&>In*S!)scQv +zaFpL2l>5_rg;)L8^ycOp=B_loZS&Y7OTXue%sp$*bi?;O=4@eQFf#Je!`)`Bx1^I1;@mhw&YegSJ59PRrBozNy~10g@!kqz9nwY;4@ +zlXm1mJMy4C?pr^^@No`5UdFxq>R0!OcA@7r{t|LS_11^{rIBi;r9(U +z!MhdYG5rYs{&(8xzK$>On|#_)?L|Lq(V+s@USph3`#SXAwe%aViTV3!`;N=IR@*At +za>qqthpBII)qH9lFLrZTithAO&)=5NSz7sVzBg--Iq3Z~|E~e}PV#>L4ja3f+~Qf- +z`kps`NsKjJ<;`m6Eva>d9`~aZC4yn>?J{rHo#oz`4tT?iO>d9MFFgItnprEK4tZ>0 +zTbtK6{5E=$JKow--jls4c&QVfZNiQbO$W#!e>86EUq;=KhON*LfwxcEKkmjKXWUh$ +z-MHSc?KQOh9Bt9vge;=vGyw8LTZNZ;_KlbT5p@V4+C0oUhrJrUH-$@EIr2YHi1_*H#3_)FM>BJUaP>5sthXpbqRc- +z4c?AM);#yn4Af?B)q}qZ`n|@cN%Yn?PhKBzRH&^>>a!NhHqx= +zH=%33$a;x;6=oj0c;hSSoyHvuzfJtm$v*Z-!Q<8p-#a$YPI%OU55BF#r3qXXf(!Rz +z4qTa8QZx@-9@v9R{6WF|Xs_^@17DqMaQRK*Yd^BMP}VjdxaR^B`*f#h-_QH?Yug{p +ztZlF8EcR~iEP1UvS>nB#^88p(>@{_IUeGyj%%ot;nA?LTo_Bst@x)+DNj!LEY*R3g +z-&c$cf<*Cr)m@|asj0uF#2e^NdOz!(d5`T^W8c0@GGqW=Uog@jd&)bix6JeJoIfvH +zhc;~+saNJz+*x1z8&h}dN}c7kbyiSzEHbSD`p9Djr!q!V2X9<&y3G1VeQEmtwVR~ +z-Vw&K8r#vtc;rJVpGdJacmP|mvG_PtyFKOnpyQE0n%@j-N;(65Fr@cbPPo_3@%6)f +z!xu2`v-!Eu^EP_kHA@?iNhAI_8Ga8ocuzi3;=RpS-o_4o`>~p$c{LNk!He-0qVSB} +z3jDgB@C?To?{(g~8rORSHl29H^G-?oys2HGHr#bIQh<%HyCze?d$JW?VutP=i2+l0 +z#>S@b4r-O&nXP24pzFwG`h+)qg?$fRcM5M$tiIdgEkEq>A^EuDHz-CjQgBYD7C6UC +zCIRz2_?WToEEuWCY^I#|C{jI>ln-47Aag|&Cm@A(_c@q89b=wKp +zys=;c=VXX`^yqw#Kc%TIR@GEj!x~o~g4^j}Nq&FO@lNP(WCpYRQ@`_tVfhSe3Krfj +zKZE%+F_$>J6Z#OL?|_}P%JZ7gVU4RQK0==}=hdb0KRTW7A^%hNu*#?GDOlM1y;vMt +zEEuUK2Ohg^uqW0y_`a{$@%A&vH-U%d5c}xSesB4ss;l?hv736%D6Oa)=6-hk0_?oq +zt4pimbtUjlXk*=d%N+RV^~3;W7ZsmTbDZ0!mYsGyaC@-P*7DYkV9I8bU5BsPapn7L +z|LuAscEK(^vSe5UE`o>$PTx=G?<;)SYMW2VQSKEylsnHJWd^nj19<6E!%SM1lp +zZsOT%Vowgf$G33BSIPmI4QzZd`21|v@3>x{c#-!03%$vA=*}MXGeB-ti0iS`uY^ZG +z>ef~_eA(b^u+0zLyo|Un^czT=bB^t2%bz6M>#%1gBfstY)gHR|Po1`0{Jw!YPaxyf +zm*wHN69tYx>*386l%tE6#)^JZ$Gf!~s=T_kf=6DfoArUF*+=q!P0+W43(ara+tGNtVhhyje5I!#RCWBXL2ewQG+Z(>OHa;@Q#P4O>%Z6J6 +zFUZE%+l6nw%i=v2IEwSAjbcC8%DWW*dEz^5gCFXc3Jta=KJjZ?ci@kG!`QLBD?EUX +z)*VK)L2mur?aB62eiSlljiciZctfycM{P|{9cq2e!dU~1F6yd%^t@e)Z}K@*9~;H+ +z`&RBo9QP&Lu8Hz0Z!&yi#|O`Fm%a8StnVV6LRxst{o`(oRkYI>HI{Ik!fOuWo8ZP) +zNS%CR`-U6amOt>`DDNciYiu=iUo|garD*8vTqO`06?@6w|*{(0Gp#s*5bVyZf`cQaYxd&RG?CQvl{-yJ?j^&%~ +zHwU&ogIS<;Yjs#{OgewNV&uz^dF{x$yuQ(z0_z)f^HyCKYr2vxCjRbuo_NB(*4=&Y +zn01t{gNIg7_g16R7L0U~(`R+xKw#5)EExc2*E%fgs110+;<6d<46waVt +zST6gt!pWVJ`7YV!djak3x*b5?J$RPmf7ed7m6i8w?=;5 +zE?J{`NzM~vD-9`bz17?OC~|seD{p7*;H}6b{Qerxd-Jiv3vC}g!1#OLd*+W`yZ>4zxBD(@^M&kTE5@jGzJ|Jnt`R-a#W(TH6hDgd+vxiT +z2EXI*zKJ?t$37ANs=au(%JFUkWwK|G^KBc!eE@z}owdv>ODAYHWA*PO?$>_h6Bd_= +zw7H1!SlNsP^NyOYyao;@qX8~oBP%4siS)%RZo1acshE( +z@cM(7P8|}j{pQ0Kch!$mKjmnub&~O>4`#4iE^%~9Bae3OAP>;$U~NQpWXa{T%Ke9uyec^E|`*+CLQj-S9{O +zxZ6GEw-f#DelOwD3>?M9k&$K%mina*26yGLewI2I0r6Um-^QulPF(56uJtp~z?j>w +zH%ycPdmwAZ})kb%1;ML&-=lnBmS+K#l&K6Q!E*nF?{qR&?k0%)OJAk_39(aUs{9f +zh|{;TU#>O0{Vm>^cH^wRTlUC+S*PKDMc#lh&I&Q-t&eGv5_8~rqA +zqc=ME`;tpd@ciHXx5ei&VCBlCe{new0cF!X@3|=59(Ht^NZA(pk=(O7*V-G0JW +z^RCbRyPB{?WKRjNP-cYo$nA_R=Ejx+R%nBmx~#pMBlygxoO=a;Yh#7cd6P_uJ9%49F7jeL@y4-X#|jUTpBuDFHD<(m;NSm}AYh$FsD +zOnN#ow%sOnp;(Rfh84fi9XpEkD8`{!#`)aAdO_q4@c@5MvG&>C@^9AD-rn8&QR0h= +zv1?82Ufse^EA#a7-&h*#c)f4hIefVTr8ajYKT$iCVE&k2@djArb}(=*)MEul`USz{kHai?QV93}rAa=ti<;EEnm +z*vC8ARlwH!YU)#S`5`x#p}${3d5pK8RURisy?kW!d~Ds;XU>nrW~OG<5WBq?x|Wz& +z?%B+V{1NRz?p__|r;49y^X|ztZPW0%PD2jFW>zGXb21T~gFU_CG;cYvN^e%2xjf!` +zF>{o+rnAJWCtlgoxn=C4;MFl}g4f2>2UqZO<(QU$9M|(-%rC +z1##eC!QV5Azl@OCOU!pM_?>*Ulg15YToVT!hyw}+Ma)iDwBhRAz +z+_TlvPkSiBEth`4%LrfD7owwZjWl0a8y1~18u|j=B8cB3({Kw@GgE)D}B{MOUa~yDe+m*c4ZYZ;$2noS;(BhFlMFq +z1liviRO|}hVAWQi_rdU~I*C^`5wE(actWlGEBsLQ51(8WH~!aKi5BEToY)sKXeEAT +z@2&0(Nx%3$*0^NDZ-m>}4($O7C&{nk*zSkdns=4oVoz}TqZ_HaiJ#5<4Dj;=^Q+iJ +zKfizQZYz6k0?zr!jCsf(>9e?3-FAy_V^8rsv8Nf-N8duvZ0xD*-z+TZ_f}DUkMH%{ +zI%9h~!Kcf!e#0gce>-PT@v5ucdAoOBB?kvv6`Q4fj6Ws_VTW;A?oGP05If*o9kvhI +z3ma(jQE)zwpBYB~%je=wXyQb&o65Xe;xv^V*S0ylXwylXS`#z6HeFj(Sy%AL)#Sfj +z5gg_0S!@5jo%q~`ZJW!eAIdnzhmN`3e)qk}H8UtHB_^b}_!{iMpTlbmwSlC;)WciIbXH0>S7awCjbp97!+i#qpI%fG<`w_u1 +zw-*6UJr1Wd@YTQW`D|tmx3OM@zwpS?yApcG?)2hINU!7n-* +zpG>_Jywzj)&+47b68eVM6fgLAWG)J+%ZA{FW`Eorg4so0(TmRi?(wGIS^1`)-117_ +zFnIy9w8!~^o1<>_(_{3JhL_{KJBqAgKV3S}?gMMS-sSE%xsUcwx)`DI_)3U*nphP2 +zvw?P>|FUeOmlIowbM}&#^0OQ598lIapSA`s>_Ss#ZMG~)S#FHuLf~9I&DIeO#Lp9{ +z*UQ*ti!0|lMW5s}a%a>+=$$aW)c4%DY%JnU>D{*-Ny% +z)Ic0Wb$ZM)1hg`jCS4V5OlX8t;YuWmq>{H`6?#uVAXb8vZWwyWMd{20^1vL7!uhX-s^O({C?|yzKPx(KlHkTrS{d-lmE#$O?)V~-*33O@;?iyEB`YMegB9p +z-)wlo&adYc+*$ADcJqMVqt5!i;``jVgVvz<_lFMt3fgF|USltN+(%1KJ6t_)Jvno&PTU?kotRKqTY7yOIKX9;?e(BKtPu9RQl9X5F|^eIZb +zmbNmlzHJGz&-W%|P9xu{#H;RwH&PRjjT1}bHMiY;l@&)SK3|TZTklL +zZIExK|HagsjZ9VS#`kKdTMrI?ssbDq-99O~l{}7$(*BzFc=6}e$6N5xhrHD01Uwbu +z{_iIDV8KWey8ngK!?jKh!wY@Gr+|anh5c=Ge5<;@h}3=V*LoLFd2ZVue(0oAQsZei +z%pH@%Blqu8JVbdUYtL9YxZ{jAaQ`%U<%;(nPAvO6qhpnSQ|5QpC|330x83{$^DNeW +zX*^!%zZ$R88Iv*G)yKRnW1iZXmv-i@ow*?P8(VFM`hLtD(MudioUAf?PQhoFc$QyqS|jzEsi!x{js45tVLqs5 +z&ez!d^tIT(C6PRvVb*6ke5^d2np?|;W?|2Zzww(^UVx3P+^sP0hCC0(UD=i?JgxT= +z#da=s{I|_R(>j&DBG&>PH;@?f9b5i>>8Y}FIO}p+$0q8=U-Ogmiu@q%_a_e1zRiy5 +z%p18j0~N&K;^e!`CC)jpTJSp4%DvH^gYJq~-pw0{9WIxq6{OdFVo#E@ +zmn?fQbIG!bPUTE1@8vM^UX;_Ke3op!OaJT|m+zun7v;Gq$3?j=*l%kdaj~Mc>q~pb +z(qDz|fm=L{4{iF&5SPe!pB+>Vv{$ITmp90f60cCcCl@;2^T|ssEzJJsf3YWt{UlsB +zlIyNEr{Xu94_`jz@_5#+uTxG_?|szW$vUC#uFIFTAt$sZD${=P`;+g5uLQ&9F28Kn +z(e30|DK2vv?I<&QR?Jl!HjA-E=Nns8_T9ndsdz;;PeuJ~iuh$af2H@&j_MVjFA#5T +z_Lk8{Wx8NeDw&jAyJ}JLCe~-n?|!NPT$R_WH+Xa5JPsUxrk|V)UQI4Xry4s^`#Mj$ +zc~&3ltCPCwqZ+tj-86g9qFn%ADlh8OkK6I{f17flE~CvH>MPGieG9gDGpsLOUE%r( +z+f>n}-urCZ43pEPaV;1rUu3lD6WKa9#RV|)m_P;nA>*?%VRv{Vd=fOKloqqoLrGQ%|sdY36u! +zyZCM%@}(k0-V1rZItw75JnU2DKXo!pF}-e$T@KTcc+iG|EG9{e7CsAo&s~o +z8}ij}`o#Eb-}T-{JDyP;#(aaJJ8_5yWslAw=JZD5pCi2Pc}MoHpswgHdVUdlX1uo_ +z{yp}N@Qv|*Xz!Wa>2M!>W;_`KKbz0?2Dt>*p6cY?-v4$!8@Lh6GP=6JSUkdy*HJd +zC&|;Xls)F?AI{4I5q#yFhH>=P`|RGpf4crQJvSQH(4Sw+_g5Id#-MoX3;&t5VWq#j +zC=cUTo!FtWGZnK|OzHxsqh*uI29=E}`*WI!fh!g@z4xnLoOL~Q33+|Vhm5Y+wX1*q +zX-jS}fA{V33QbPk&ddJolqK^xpD@L%soAjpVRZ4#oI4~Z#fPv>lrOLR)`S=QRB%QL +z9w5fPyjN|*{l@c{OYJ$5AIiAcb1XVHc>=QO@OV>QWzn@Y$g6&}RhuMv%oU%GC*NPn +z`2q6feDXc?y|(z=fI2H;-UTaaiY5i@$88Xf`X*W_pN>2@){Xq_?TP2VZ0AU^rRHDs +z5$7974B($(TkqVk{&vPQBc3Q8IL}MXk1MY?=DnP#MV4MHndzN?j`X0H{Ou(PZ +zOA<#=&LMSHw4FM4=eCDxGgmQYjXPHGP%v}b!^zsEGm@3w%-~!vNWR}&AI$Xn`TwEd +zcK)yMCIw!sBBT1cqgwP(UfjpimIlf5&)HeKtspu7=Y7L(-dK_GIh0bfZ6fU|gIX^R +zoEqQ-$s+GT{_jSw)C7z9Ug5=p2H=Xut-#%|zQD*&-H~{*%grhQrhL-|{MZI>xyhSs +zGJj8BaRIvUYSXR=U2J2`x_@e^Yx~T<+xrk6rcUUSif-~nPjkNLeUyc3;eC;{5c+dz +zV1)Cf^{|V)d-1*YXzIOp;fGAePqTT4pYM=O8XN`fxiu{boY((R%23f0Kn5n>0{Y0Drg9 +zK31FvPDSr4t_Pp56Rc2{pW<}nWzAzZ=ywu3pF@=pS(x4~bm!vEL#Wu0@b#%C8_ +zDxX@s>H8BnUs)5JXy~=$F^#P|W#g3EmqfRuSf{f~yt>|heA@)UuMCvykpg#GTy^CG_8t76@eR4=S$D((3CqwgaE^SO&<13+#;wf5N +zI#V0utU2sS^i6eJVA_w~Q-9{CTK}aTe;OJ8bduljrKy|DQ@5MCs-wEZB*~-H8XCRF +zsTk$aeo(8pjcBnE-{gT5h4fa@3zU +zw&~eBf603jzjAi!4)S$`qkK%^DL5PdX!&Xy?f#v80ZWJc_v)48S=Zsd+X~*dko~f8 +z{g|ODw@xMV$DU*1Z~lqS#7!suG7j0&h|ab#nXtXuX)Mw)_qbfH6||9FGxiUEYaQ(x +znM>@-uAzFb3|ZT_+RE@s?2I^j#j-W>^WDY3I9R@`qHaj{T>dvSck)Vd<$<|&jPLw7 +zzg&5q?~*Ips|oejM!tpXM`M7uOib}Wd}w9s*}DuKn8SK_Ejs>+{f(bK4|@F64adJf +zo_JplPlU14TpE4M(P-0;^3!N7-$kQeIvxsnq0I3@7v++>A)ko1KJUtIp-j9L@>PgK +zR30}N_-C}qRuKQlex6NULTD%J{Mbib?uTTWWQ6Q%^wTPIz^W$nWea`W%XoFhuK=52 +zwu#vyZyYaZFMb#N@IE)zEgP*){W5xHPaZ6}PSRsmhFLqIz~yK@PJMJ)hjOy*8%l2{ +zK51l~<*$1w_wnnsSIYU<4W|)H&{-$h#N(OwGXD3xMabOGqGx=Yqscx=(p!cMpVzB+ +zg_)N~>?SaMo`#M(XT#yrhs0g1JkE|wWBN^_#i7iN>1X7n96qV3PVv(Vy{4zKYh>?O +zYgFIAGjjQ^@~N{1zsFo^-v*_MTsPCQpZfo(d-wP#%QOG~ekK_*!6*T#rn?pSG*Hr+)CCylMGbZfh8TVVo$4mb(1b=!131;KWJ38A*z(yi!lEVj0?Ter*iyS5Dq +z0*Zwy)k(nQ`~Ex!7?8H^Z-2kv>-GI3uP5_7_wl-~(|ujnecds0?;89rU6F!Q(IV5Z +z)2}Dp6Q8qF_cE_8?~--Y=MDh+Elr;Ec%!c~b$`$8qlz-;>r8fz&cy$%A<9Tz4q^_j +z4&>@gg1u|Yhye3R>F@u)3lp_9FY!@?RG7 +zPXB{{$rA7X^_2B-+vg{XX?F{_{R!usr0{z-`tJ?zN;ZSfU3>pRzE;@}eLI3;O@Luv +zX!IAHeYP80@9JJvjtp_{FX6jO7NUO>;&-@o3&=* +z{X@MN!PM?;r#K(i%J){mn)0nKZ%|!#EaCz8dF2;Vz6AQ@8!(d(XLgI(IXVgU=g?{bhU$lFGuwe^He$QQ4apK`+Wl6HKtsCQ^7lD9PCY`o4e;mjz-TP&p&v5oZN}Of$_BG?17&5 +z+TYK&M&47`*;DxXN{06qe4vIgy?|Ze{5gpC{M2jzAHTbdOZf5c}4I{~)}Ju{w3c&)(YXmfuDBUr~N5 +zJqTUUWRV-h*9&{+b;gJ^~pq +zdG`@;A;J3BAcLs~Z$G!*H@$jw)caCSJ%2u~UHN!4>6NRZ9A}rDc3jzTJo+h5h7|Gb +zFUf{u85bVYS%-vUPxANE$ItAiulDeUv3EXA`8r^)d2|C~aDcue$q;@!;t7xP>wWEF05uX3-m8Jdnl$}Ufl~Gxp@w^azy*kTX +z>tb(S_W>Js@9g5&zyFo{{lv4-#Tvit +zo*n=8cLlPw-pD&&#yR>w^;Jf;3+)3;{&4mS(wp6Wg;$Fy!#T^-RjaIYu_tSM`B?AO +z@4$z+&(i_L>$Mk`kF&~=?X$a1dbZm}dwlQnJBoXUHoEPXP@giK7gYOmTL(G!Xku@} +zMq=_Ghp)T_UpX4RqR%aVi?DaOwy%I~%)HcF%vaL><5mWLT{6?*BuzaY!61a}m_gI^c;Jc=#)e*W~odk?#O0^;S}LdoOBpeFXc7WBaYQ-eJa}apG1$CUFnD)Axnty<%YpQqGt87rci(Ctvsn|Hg&Y +z)7#vfM*H|SAxE~~?|pxS?~?6&b7Z^vxKP`<_|ixnt#b+RV*bv3HTy4+Z~ZU9vfP8E +z3&*qY+wbLD7Yu#)UGBlJo%3jA9zX7W`o9l9&CSOfVA;YPT70|_j6?_0m7eqBZoWz% +zy01pxs&e3WwFkdheCPc+_tnIBw+Q&e;63#Yj4p8h`d`4au?~+SmIzrOe8a{Lo;}(J +zj&255Hw*9HCO($6+gwZ^(jkO<#Cl_M>Feqy$NGNYC)_-uduo1uD>%scQs6krgWoh{ +zneeaUC(yRD?oEFd2gyC~{_kA}UJ1q)XRM1Evk%uVcyO(tPu{oky_IsUihB}_6FD$` +z(JPz%SH)lrbM9Ri{T|`B=r;s>Sxac|hIeyy%j{o(t!P-|2`~3y`zW^2JAm&EeJ4Ho +zJt5fTFYO)2{WJ}u$MVRgN6NXD`2{hu5#HPIh>7DqY+?WAPh@UIjbBELRt2FGMT^`?{T< +z`?L1CzXg8&-NzHSf5hxO_kNoAX!m{^y`OM_`$u@c8NF}wOlL3T!j#{wLmBt2;N+Fa +z^$FhnBXMlDx%ZFE@MRM5KnJ(F_m52Q?jLc-ec?6u|MGsCdd9&#-}n7AX6HcWuYHd@ +zcglxa4_I{f6*SqD9{K&n3#Q&zfTA_yv&-2ZXS(40O_rke0 +zbVvSC#`iBYfFBWJk3<;9dm3^ih!52>XXO@H +z#J5Ju7FuEZ1MI#2hCEK%$BY2)bpNl)NUr1e#4ZfKW)Edk{x(AWPh`O+Wyf#i|w3kSLmLU;P#*CU0GdJnI+8=bvEX`%sq +zv!+(Wwy`JMPkG^z=bj(5jFZ_rMcg+4U_ +znzM;9h(T-Mcyj2@k%{*F8R==x-u2Pb#XA@LS^oSf=tOnY)`zLnX2udTx3pLEe4AO* +zQw^QSP8R1+IV&iu_(R6qhY|b!wo{Yg;kPON2S3+DXWWbjcwO(w-f^63ilK18P-!BlpMB_2#OeES11-RQJ&FFGW)GcS%$>-AM{EbWy04dwLRx7B{p +z8^>^Xo${!Cl``6wmmQA8<_Dv8nYDwM(uVVLsLk_osFB}|w&dfU4L*qv7h_wC{m>nA +z6>Z6m;`4pQ(aU~L>>YExx8*`O=H@(g&wUK>@T_}_llS2ao)v*Bwi6#&;ozElRvL$o +zYZE-Uq^PI+uowK9b^5Reo3B##LhJPCrnBobi!!&;mU0RhYw~HyGUCvBtnRTfVsTT- +zFOV=@tlt{P&coRpcc0NN`}<>^`OaB3`CXssd;oc^IH-Kuyd;N)E^_E#)CK1i@aDCz +z%bnL4Z(hQu(bxpe$HBf0ZXX?#ukh?JJ`UcMGp}a8UqM@fp?F){FV5v{XZHV;Yv}py +zsVV3YG4z0v96r}Epbwv}Vn@bAEP$BP5kZ_bd9j1GxWjhMkKF3+#hQn +zFe&{2@vJ(#D?8seE5q3OK4KRFgFyucVwan4d?I6-FDKq=uIb)$Ipx8Sf9sKBineXYJ*T37UTlnm?Ocvtxj3KZq3ER(%-0-bXucF#qe{uxjGu +zfWa=(GdFlJx;QYbb5US+XJfF3c)BV(3ZDJZbnnN$u>0GUrPJ;*;h(Y}J6&K7ejQcg +z>(y-*d{j9BL*EFQ#By`k)D)Vk_<1PzCt_E9_4e +z9I3v&V0$&~JViTCg-r9hLQ}DB>>EurbAzvw%kVh;m)o@g?52TXtpkGttGD;h0XFB_ +ztG0G-J0+jcgA2=RxAsroqq%5KCjZ&qe_%eE%i_Q@n-?>m%L^`#UIi@G#{&9jq>uc9 +z{KzKGCzKbE({^e@>>B7^u*MeXz*;t@2M?9j9_^pJL%i?Y@y)d#ad6P(Edl&Z$W|v; +z<17!?#8-INTEaNz2j7g`;`#o>Kg6d#_Af5Jo=Cg8?IvK|4y?(C7yCGQ?{6h0iZyWf +zSK~v{Vf#2kHl|l+kKU?u>+&x71L|*q?gguptnK$1t94U1v0C9>dpYx)!Ka|uq=JH% +zV{zpBqQE51(9KTY-j+nyoy0lj8&3aiTWL0F9hed@m#kbIc&s&Jp6QLFGcF1&A%4Qm +z=d^d(SJr&K+wE8PBu=E?pL)DryommLKkyy*`xSgU#+cq_JUE-liSfCW4(}u`Qs-Z1 +zqDQ;A(_W937S64`w5p-@;{|i8cQ177zqAQIk!AKS4|YeE5Ob$_eU*09hG5Zv?Or}U +z&TNnys1IMsq^`{#O!$URtS{L?8@ylhV|YP{X(hYII7M=)P0(`cnL1>O#;S2HHp8$#P3j6!-_X`c__t(>Kjzd1>Ab^QH12OPZpMMWcA)n$=s!jK +zj3J3lz>zsmd+QHjtO>P(={`@diK +zK5`y>V~o>>uk>LbzBgU~z6<^Wd<)Nm@3HTmZCmjDu7|6_b*;Vd-N*Hr9hzk7k7BRkOTM_7~2@aZ=_eL;AlH4y$Ra{8at`j5eDqMQ0A!`@td +zPkiE+-*@{_A2#JaPP@E0pv{V4CQgO^L5Kj4+?>F?iReXTo&oe7@) +z$)r_qQ1>95(NE#i@Pe1I6U3vZKgY2SZH1TA=s_& +z$trIQep^=1wyj_|W)*zYZUQ&^`@?Z-cV%pe^M5ya8>H7ol3#ZCs{6mrZ3KYtXFXiL +znejcHlPl-tpZ#5d@cW0(yD`nb;92~DdtO&-`Yzwx7}T=VX1+;(Uq+k0e!F`|3UOVQN*V(xQ<+YbAVBG4nnD%B>yWiO>CmQ*# +zeDS{Bz%L_P0X~*hGrh7CDRBt3E;-$@%E*2|w!Pl|8w3+o>gdZ)Csnr0Li` +z%k(8~WKR>L&ycw@874-i*sM%89cqew5FEM!xGW1!u{o2RDN-JV;7xWB|A+X$#C#{A +z`*tedSQ`rjr`iK}pKmydywHwaVmfvOg4MBL*wlnRFm;O6z?p@+_~Q&(h1F!|S#xdm +zk?-J9Iqj6jRve1N4)#9_-tI}h)c-pNU*t;;(FSL;YKm8xTA$~PW*#%Zx%-iaw>V?J +zx+UV|Z)$0w-5TxLZ(!`X{f@SpB866IMBhK+^gF`ocRBrPFS0y1-5$sMi_G1LS>~}s +zUT}eZ99=lX?-J9JD1T#atm2KPnBH?nkGbC6oWHOkR?d0xyx=^>zBDt`Y)DkRvAw3d +zzd9Q>g}wQ!;<4qxBi}k0F=l=0V%pa^@#Vp?YW+{{q2@f=xQ_k@H-u})-^CyM)iP_Q +zU2F}mR^2?l5ih%P`NDARAL!$faHi%@&Fg3IE@L`de$xN!?o!5Kt%3(y2k862rVzGA +zA7>ND=C6CU=l0VCa`yiA=6Ixk4MKW?rrjH47^L;L;E3E9zH@(^vo9C#cF$BPR_a*vm6Tg%C}kMSnKe^<-=A8q +zhBI*vuHVGXLlH>?7FKgVjP1lc9s^zjlw-x=Ns*N7m0DNXafY1-zxGGBIsSafJ;6#m +z-G$pY$(~N}v1!atybZAhPByKAPPe=Bb@LzR^3oXXWpyWrHI1?^&KVQmkc)TVoD-{| +z^(&#g?~f|>*0CL56n<>hPO?^aRLD*wzKg#%JiJ$TRFp8*D#pgzz=MCww{Y?ZcEpX| +zIn>M}+~Xk}J<->7;&;DA4?GUIWu~IKiXOUGS64|JDXD! +zo85|Vj5}gj&%)JOgZ;?fBJ%QR|EHWhLy_UK9lZ1v7Z-F6CB)c?8>UWo^lR{ajY;EK +zj9os#IMjX-V{GS~XUeSU?9dqby_NB9VJ;b-dl_4vBOl!{d@g4U^~f0c>!d^c{>x|k +zZF^X`Wz=usYUz3YJrMQa^w1%0xkk#!K0nvkd%uc}|2N3gy=Ks=P(gmpEMs;@;LB6c +z|DyQbZl@2$zbXgRir_Bpb?bmnuS?{cqlsYfyUd{jKD~|@<)aD7qpRLH5Yzhsyw5l5 +znl1C|-hzc4vA^e@!{F48*cXsbxjghjGU-Z3CT)+sf=p@z4&^4ZLvVM`X3a>Ghl;)H +zAn?VVkLJSfmiB+%c51Z4)7-rbuqXGM?AN~s4l~$O4}umgrburFk>MfX&Z!!TrC +z-&ExA0&-jYqYFFf;-|m0jaVz`;V%DBzA({#1v$hj$lEUeN{v_kdCFc4zZi{eMZBN9 +z=PAYmF4Q_cF#HJ6_PKfhws?mZt9>698gH)5eb9rO;L}JS#(~d=oHM;XpSI2Hr^TxU +z6Y=K#W^9jmb}o;GPiz*Smh9LMZNfXdj_`MazrD~!)>&WIea7T>$gfrd!^Rr>|a&{%U=*6@t9W@c$X@djX1Eyd_=#Z&l +zL3R&l$i%L^i$B^gx9+qHtXFN-$zwdm{IoeiyZ8#X4-DJq=&0ha{#<_H$c1-W@g?jj +zG4&D4WTU4Yd;*_2yHIDk(i7gWreO>2ookguw^|eI2d%-;!n@5hf1NV$PRb=m|I@Zp +zH_>_d8<85_7Zuq)KQ^GIA=XHqk5Y7Be9vj=!0+eoDEH2&8Lb(3p3ft7MnL1KL)O=u +zdpoz77rHvYu|jKveY%WZk-;I8@ +zEcj`AC+!xQ>Fmpya4=+E1z+EeE;HsATc9J|8+{{x+8^g}-+5;MpAC1758yt%XmCJe +zv9mXsm+0Wm!%s4weC|KA%q!WG{r$T#)HmkxP4lfM?RC~dyVaU!Ti{l#|CgO5CY@Ms +zewm$OK9^m#u%jl$I!)mBV%BXD{}-Fhsi(;afIiik0G@?|=Ge8!w|3xq3;WfZu}$gj +zyAL(V#1P=z +z{&nIu!J(-6^x6_L5;=2q^F*^cWt-adIv?ZPI+W{KdjwY(UW+c=fG({3DxYZ)kIB`A +zC(>rNf9dW*t0uDF408CZF&j2W-cZ(&)$lyv?dA`NFgwALzr`uSr@J-AKx6_EGX9kcXG&F42x9(3vVYge6L=RWG}VIImk~KXXZRL4WXF=gT=fO-ab_g85bsVgFaCdkHHtp2Zmy!u8t5oay;{m3qgu-FUv>Zw +zXt70OzXJY3&YkV>gCsgbvXc4977L$9N?)w7w%ZxLq4Or!Tg&ZcYo$#rbs}L7T$NAk +ziDl-4^9{SM#NILA+56Bm2)0pMyK-iAKgTTd?x$Ao!w74{rp>4?`&5yWo{4s89 +zOzvEDmgC+2NOoCeb*zs0rgCsh_!Tk(Hy3&H%|ln8(55}kE9*4xDb#gocm{F9>v~Ge +z^F1B(Sp^*j8OP-&YS*K$t?8fhJbWuDTiH$gMSzv)IS>p)o)OJ3w*vD@v>JW6*~!BZ +zfu0XsbvyPhckaue=f^#IzHHN6YrehKDz}@gGW+{hxAUI+;S%$$cdFM}|6nh-=79?3 +z>?68=8S9^)?f?c&(70g4|LL3IW$ZW7DQI~bI657=_UXI^TV*ZueG6kWX0$`EA9Hx! +zNOBg4Ug2YAH1xW*X8?4XLhh{O$z33s0nqCjev2nuNm=R26U>P02l;=3DO^);o=e0{ +zP1ZI?TVv+A);d$z!d*r1otn0|DTJ>-mr9tUo7>EDo7+uc=e(kbJ=|<>d$nl0o?A-H +zf$tadhaKhn)Y%d?2iBGHSH@pCf6~c|&8Rqit`FdofamM3wb*x=Z_|qPHP~d~L8F_k +z3-S1ccFj)YVif$H&bkAiBrs`#_q710mK%Xl$do7NSYhT>o*dxF%Sf{Y-Yf{dj2{#` +zPeFwpaQjGn7N5c_vpj17i!k_k3;fTT8j00Ve}UQA6Ni7zGST&eO}c4baBZa1icGoY +z?hfJ!>>Z*x$vxd?DZRZP{pS+v-y{F*`D(Ycpc@|Us5#XC>~`+2$@ZgXUu~|ot;6eT +ztilNNFs6ffCZ>CS4biX8%YF=d*rz<1DLC9iJBmvRtgvJM3huKO$vEqEG3zC`vsMo5 +zy>&PT{(O56{K?_&z@Ii8`2Wy@|8fuh9gg1N@)M0`8RPk|H=dW0@G{0CocRO&gAct` +zrf_qynHD#uZv6n@xY@z2NNlU{k@alJ;ZJH$_nMaG%r8ls%?^E+W}7O@V#9&G&(GE~ +zPt^%AX4#c5_38z!i|yN}XUrjJe01}D)R%sN+-vdiL9qR!=a^ujU$hY*Oo7j +zc$W>)W)-sN0c4VRM>Fy$fjqjFH3|lwsQDCo+(G8wz8*3&+e!|HYi-77%=g-6n8F9q +z!%o}gxwigH_|)42|E>C+fiubBKGR+}@O$>J17^lM{2eK>B6mV3)djcPQwx4%zZ2rF +z1*6XM +zV6-6zMkS^$^&RE_&u1@PxY^ZVUPzwRL+`ZbKtH}5lbmisp508HSbu4H8c*>?(b->9 +zt^t0@-aY$$-VZg$R#ziKr||cYaChw|(Um1jt>E_RzXoS@|93vJHxgWLfA8JN@cS!~ +zrLSHUL!RZEJ?Ie!9Nl=XRc#w{WaC<^3_Sw*$kRgSRR1B)yu<6$E9lSH8P3;{?q^)m +zSJaN$XtJ*44s^vYJl^vak2lCh`!73nR`2niZtq(Q>ugO*@|CH-{ +zl0Cw;&EDU?HOGg$g>vQC7O~A{D2shn`CHw+e{Oq;oc7Mw1MlIR>iYH6e?9NI>0kDc +z8tk(8JX&Q()_5$=A5gG`i|=ncBg5=)jch(%t{(8d +z`iTH`yThJemAb8J)Yi-J;&D#7KUGHKZ>NpYxLvC`l!fiu(yxUbolx`9 +zJmmX=??FSZt!G{^N^YS8&e=xgARWoPO5d1U+jJ-#yULO8b;(jw9UH~}<7rQ8VHK2C +zUt=QGgA1;y9&E0y);zbcHeH^NV<=-VrqHpA493Pj&i5u3+be~1o-ulwcKdF2nT +zQ27z$mMG1Z-i?1Q9FA4Pa|@7xgW(@G`&7Z_eE7MA@))0(kdc~yZ4NA?Z2jEa<+k3nbS?%PBjI$MIo+>@xIonrQf +z*u+-hbAo64KA5>F$41Cqw>Gvz?QIqWqt&+tmQNW{W7l5m#l09)v%y9lzZlou+`ro` +z-zvY;YA4qoljgh1iNEQad<(KC2&p~=jC!M~R=JW~|K;qiY1X_NI>tGX?xo^;7VBZalTn=Cn3I)FHP@ax5;~LJ)Q9tl +z{%PPqAHTnm$~Rv~6`M=pKfl^gWWKS1_Ba18hqn3MI@G)#6|SiM7HGoFyK*#o +z>OQyJ6w2KU>|FeCeGiiz{Lopt{~msr6SI*?_yoGEvnzrT@LBrvfvy*F)=;og45;kP +z8mAAFT}zytK&_l_p^lGJ@s#FUj4vC?x@ +zfnCO%tIF0>R`V6#QCT17G?oc`^Y0QD?o9G>y|q) +zQq|Z?gVIy6^%NnWtwRmO=!AELh|6{KlHhn-`W$j5VVMqO@;FBpzt#UN{Bb^T3nct{ +zZ&FTtZoW0&j#>+BWAdou%4MJbYdnej-Sg|tJl@0aT)YD?WSWb8RceM@;2_N4d4YheZHkXE$J2bS^p&{`!*2v+vk_GZ5 +zHaqg*_pI%l-jDvhyB_y_W!tG~;P?N=*P1Y6638*^Tw{8ZX3Q%5z&ZT7ECpWHV9Q-C +zUOg`ufmcVS3^{7o?j_d6;ag_p2F``l}qAlJ8Ks=$3ceQ<<+)R(il*aBC5` +z^>_|${ruUpxFsISnIr6=W=Cl_T-#qT$KmDT(@jBVkCd_4%jrz3c)iMwzni#0%A$`x +zAzm!}4ACDtPi+PqT~^t^w>P89D;r||eiZ*;ZL}b2D=y1e?!Hv92a5L;uIem)HQ!|i +zkSzHyYgQKSs0|#R6I*u3j*W*`j?!=Q$7o)`rs}KNTl`aSef22Qu_Mn8J9*dU2j-!d +zN9~IW=0z?-{*7WzmKkL`XY$N-j=ir5*+V>W#v)hYVCFOgKiD;PLyct(takUyu049l +z;W_MIBOTHa0_gbU!hV9Ywwq6KrooYqoYg7$2c4@&&RIjMS?hH+F$)9DG~zx-MvPgt +z)-tQu|Brz7N;`+zaoSr=xwHE^=HH@tMn9H;y4AXSM)2JFCD%Se%&P-S!BI54tkRCL +z<~^+>1e=F3XdBPjx9+vHx)a0 +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 +z4*pX{c+Z*db7bLr)?%kc|MFo^OID%hpAUy( +z4-S%P;XeU~BKjKSz`$fLa@J%x=R-6vSB90cCg-n*kDG6^A0dAGQdb_1Oe?NLb9yfv +ztTS*pHOGa+LknFvW&0fjEdz!7ZLWk +zwWZH%pZ=sv_;~n(e?5zbK93MS9+@wizQf7y8t+rwO&`2# +zQm1|1`5WaZIRE?&wkGECX4erjV{zu9ZyMABS +zaX+(cBzr02&f~(l0f}SIVAt9nGM|n!fApV`^k19gd}p$o_}wGKXBpGjQOI}pB^}00 +zO%o564q)HRH=`16yoVdR56md*#_sQRVDtWL-K^CkaW8IPW7vm3#W~|7JW>xW~9dnR{USjoa{4Wz1kUT7dS1r +zo;}wq{ry<<9d8XZz8}nS&-TiXqi^_9z-#J2M<2>_=aHlgxeJr0Ion%rjU~3XA|`v4 +z&h(~;GtfDNf%Nqsta<*zcqVJBgPpveqR2z}Wv3X@#{^7pb{Hbxy!9AWi(!VF$yf70xL?0z)T~_Cgb#6AlA&y=j +zJQbR1YAWuE$9{cT$yBv_rM1frTI+4qd73)Ltl$h>JoaN_b~grh*+1eLFu@fim8RzR +z{ljI%aqUX{t3?M?Sp^vc1cBw9HLYB{-)_Is> +z@>gJoON=({sfTjtxDLI1P`SJA58bit)GFdu=k)hyz*GG9obL{D4{$-mUgF`Fcu^O* +zH^qw*;KE+`rQ!t_P&c1kE-wEXm?|_QvC)3Iqu8u=@JoCe`gVBr&&Rp-t9E{_rGk3! +zvCfC+m%SZ({9{q|?c?NPa-*oP>@4Zm()Hc*nEIZpWAEp?+ShwuCVbE9=V`uumG%Ye +zFgDGQ`E}bBhcmT<%w^xmxAM^+E_+b0>KXWJJ3H{Q=$$;T&x_9};ct+Wzj1xrjRpJd +zY-pE#Cx49tFN?$qJ{WmBlpks2@AiT{)ym_zuxLH`8ne|?3sTsT4-yZ(>nZYvY?%PO +z>D$?xWjW6}fHO#q_;I1J^ym4XIF)pRIi7ydDz9B+Uf7K9nlmgf05^B;)J^lQ_4MEA +zY}yO0lvO+s{^l9PHjGVvj`kC*dj<4ktY=Rz1!qJrd&2SQyiYgq-7=47+u)mb@W1$x +z`1SPu-|hL7^X*x_b)|3Tf5HAq=iTpk_d4wtzw72p1l>_m`9qF$l +zC75K_>OU#F1~|Ote4Xr!|LxuI&d*TyPwO?(>yGu0NXS0omc6j<@G5(f@Xm{zxF^ZM +zO=a#n-S)S-pU8#R`LLS6x7YaQ*Av~1_v&52w*!33)$c;QGr+^o%P#$@n!TPIBj)PS +z{+V>e;Yj~eT$%JP>4DPu66A;|HcNXHw;-6_?7&oK)Ms}pjzBtf12_mSZO-!hNl#8l +zE=k^m%&|?-_>;*`aTW%hO!}Ml^uXtg?&h9V*FL;E`iZ+;I83MfWyUzN$fd=j(O-^r +zzm4M?eI+UL4x;nmR^H^(mR%M*$p3dwamQ%Pv91(jOwtx-($^{HfU};&8~lOaK3v}9 +z|F`%%LfzJ|Teprn9DqNQZzKjRS(mOxbPVYojqpp!fAnt7`;GPTJgy-wFChqn9tFoxI=bPi>#g7cwK8 +zB43EBclbF&W~4Ke*~fVIpO-Tv?v3HBUI7g0_kag;^*f7xl{3WED~?9(9KE7|oJ8W` +z*HMP|Nf_?l{j86LUNH$=ijW^occ>mQ#}kTS{3LvW7**nmx)P1>xlrElo-2{3$_wJ0 +zw_a$+BJ9_4b&fFbb9D|YHo?J9H!oE)I>>d%*=0f7CPq2)CVpq-!jjFJ`_k>-qZ=z9 +zmizlA@4R)iS?8<|p;HV&-xzB09=QIEwKeA5DOsIu&krW-vd`M+D)HC{gC8WWdq?#Z +z1ygMNmp@&^_{$h;NiaZcq~Z72HGzVw;h&RFsgLUmE2ag4pR)IP=g)ll7~s)I47@A8 +zecP#zIBV$2j9fW);uG6WjfGdVkRMTd%JX5c3|MmB86W&ybcg<4#mf)}1U`Lxlg3i< +zM(MPYV16{j*c29Xf5=Bt6fS&2C(fbVcQ#(wa6f +z9-RjkeYiO~=43@LG5CrvzZ$`XiIkfRUG^e}RaSO`cgY3r+Y3tgE_*>~(5^k-)+HN( +z{0h3eMD_vM5_Av6ExZ$7lbldYVLkSiT8}ri!Cz%Jz}MP?PSO`MeVc}muSu~zx55Kf +zUgwU#<2LCHlY9Bg=7E>)b<~8$ABz_A@N4KGd$-S3jTg +z+P5it4ecs#Fk@L&7#tH>^kix4$h?`6ksIuqf#$U+a%;C>vWUDCs{hxQyZz)-H+Kxg +zif^d3Y9oX1wrl*c7;{m&`{Ro7l6}Ip*@1`f-t*<)**ssqT|#}1V=d=+{6qZxA=8=P{9Q$2=U-x-a$CJy+h9 +zP^JMpMrkly>#pY=*otafqz}03e}eT_9NFwH;fIe0@^7?Tv*pu(kCfJG{o5_U!i_hM +z{smZcSgwBHm49#FuSfG9Jll8J +z>pMn0#VMU%=M&(!KjxV^^@e!$imCVS7pUjfc|H1E&OC!&otNs|oZz|mw3m14JO0R7 +zUx@N0iD!v6(tI!W>~qpT+r9GbEpGXVvH2QFvn%-1uI +zt~>vo+MnRHzX)F9>$xS||KrAp3`4(|-L=Z=Cjzb&QC_hn0TbR!xn$TB+J3vf-zRsz +z`)6S9^6af!(Nmytc%rK(V$bi)m`Oc0e3BTho*4WTTWcqKf}VQ#X(PI$bi=LakK-7} +zR?4@Lce&lUV{A;agL|4%#Ofu?GuR3zrC;Zs3&C*#eNJPnC^!y2x5Gqh~+5f_4gl>sE5Y62snX@XK+wC^N9quDOCSUP9hH +z>i6hwtF7=KD_E%bYDWjnqWOjNwN-S(|E07UsVt3U92k*1*TmyiVJR`46?T5G +zDN>F;B%jSzcs%$O&&&C4VFP@M_xOpH74n|FS61x}DU8(KS}+A4={5F7+AR+^#E5sa +zA0}6ZKOfD*pM%D&IoaOW#Y_D0Pw>VszxuZrb35?VdZ=z2dCb+`KImj9e%6wl`q}B^ +zkp^JC%<^^IN8`3rAd^b9t(XvMI`x5eunzeZnadO%*?IN77Ko5U<}z8U6NgPHm~3dA!%WB>$fM +z!MQelXaCFG#`XRd8_KxmeZeKk?%*@Y{lUlBKTql`%oloHl5Q~1q~-JE+!=G(hOgksq}Df1PETTZlI_rS2Xws^x;EzHEd$J! +z74_6JW?^zMW%dS_q=$I2s_k1}S(D+uuYU75epuzk(%o3Uk3LO4K;fqL0QJ+hoho7- +z{Pi);`h*jrYr#=46;DInp=%DKpR&|O_B-|9vS71lotrn#jlUk2{>Ng!ZIeZJN}jI8 +zR%DqBI%4coPEMfv`xmd4Zl+w*uSFjm>Xuj8=PCO!l`ULbb8%Hi&CLaCBM*=>_v&y* +zO~zV+9if^r;D?0&ZQ*&bH7_!QHlWom@F3k3ygKqxuMf>#^VWQo_d#=)o$CIaxzD1% +zT6p1Sf!De7kuU1^(HqaqC7c~cS@F%UQg*JfpVQnmk2?HT4c;6=l=)luDr<<1NATMX +zp4;TYdKG(InSDQSHrB?-Koie$#*+LDIu8_%lLI7PX;nm&V@WiBD`iWAPZ96vFBWk(9GvV(M@u4X93+xW^ +zuEKO=bf(4%M(k3)!6$?t@PIIU=KwO|Kv%2DWa7{+yg4KKxjo3;5hk-I?v#BwwHP|w +z!vBrH2VY0Bdgzl=LeO@D`+ZX!yt>$Wia>78F;Z6iiYIz{IcpExgBv2tuCh6|9I;oz +z&uW1^IGJ35z9o2XWv__LOUj-pJi%Xr{(rxdt7&g=5`DVOqHVpw$-Ww57!J +z?W3bAW}pSSY}x1CyX@13`t#{S{Hq&YC^~WZi+IcMGc@A!AK8|mPv+g%ImmiFQf_?) +z+u@S*{k)F@hkW2_Or--W3s{kdL}PY%X$*R{@*nR7_n}|qhIer|^R7!X?Kipjd#ChH +z4<9quu->OVorLB;d(ZFGF&w4qsJop4T?w9T=v!1Y*ADTjr`=z@U)5m^t +zP*<4)=x4KOw>*74bp@yCP8&;-Gmw>e-ukce`V?=yjWU`a6Dx6LTqL#C8DqrZzv8{( +zyJ{!Je1vDhFV)d|-3u+aNlty>`+ry9%SK<0QNcM+(Kr=bH1|EJY&|}K)PTp59Rrpm +z+Xl=|ZW-`Qa_fM;Wcz?g$r5x;$t&eshDN$1&!7=!|F+eULl1+`OVXpPm(ihq+bJ1l +ztYMokI^0mxhWyHMKg0as+(-slwaC*!69XPgUt=0F71k(wjWs#j6l}7`fOpVo5*;8Yk514}n{}WIdQX>_De2n+9hs(JP2|=qi5Fd_A~1j&SoO6zL7#!`LGvkmD5=8 +z9-af&hbVg+F$9mAhUWxN=`KDj@8cUX9G*Q2y`!OLZg5)U8_#@9049=mzikj)7(O!0)1WT!oHNY3H#Q+U@Bb +z(SkWp}5> +zqA`5H!#VY*apZw}rzd0oHLpZ2v35rCIL|!pE>jz}E~zdx-RQ3eq7laQdf((sH)9%W +zUXJXi-mR>G`jA`|9Ti%4f~y6@)m{Y~v(bxwo2Fd48~p0_=B+*x^mU0fz`hh+3Z3{o +znB~0(W>=pFv+2~AO!i^+eeg +zoh%Jj*y7#B9PX0d_G{`HYe_O>b|!y;zBtajn*2A@4g8-;o{-JNnsiEcV;Jk1R{0)3 +z$sJ~;!SBTC3l2p~@~)h&SbNEN<$OBe)V~sccf@|4wVQYG%fRfD>n(JL^5EN?|9|IU +z-Ln@kpCp&0?0RL*L(DtmhI%_XmpJw*j4kwm`1H%dnc5Ki$qHT;?WG;%RXqgXL*67U +zaMMC>u4kUoCw$#jxDfz1+E^>>?v7;#VQW9<)3azzv9}t-t&|t+#+n9OYakkLfYyQ@{P;h41?{TO3BXY_@)4dH;8|kz +zrIioT*B^Y{K{{nAYj%R%U@7n&nUIw1l^k~Tm*98di{dTh@?_tr^P9#@Nnx|dTJX^7 +zq2cMzDX$o7fR2+)SO=00 +z_+Yf0IUDmu#!{XvT@~j1MQKd*cm>~^tSJ7yg?5`&nn+sn6N-)VVRD;U>gXJuJpV&UP;zwvjqNW(?w2zhZr$!|jn^DEd9-mlCa8p~wVsxqi?pjml^EEf`i+ +z7+%6%I0@@Nd)us!W~<>x($79(?X2$WU)F5Q6U}|-{qupvo$QyR$j?ITdfEQ%tkHpF +z7P}~A)^mn-eIEN^-laJYl~%sm5N(IdJDi=k{uFq}|3{)$aDx2`b3rEom)yDgG7p~Y +z$e7HxTsZhVy8ZfXr@q-Y+@WFV7AiLd{^Qy|q+@9B=<*`Xec~D20s9YiYp`pqLH>vb +zNXN_7GlE4P?~$zt92!k|@?KTo=5Pe{~JGkvBC`Tf%b@e)2~A +zxRSSS4xIATSZAJPsdnlba-&K=X$RiA2X`NLU^5PE)_pCE)wu(kv9>VQ7RK1Z*jgH~ +zUF`Gjz`lZ*WnxLPKFtj^_oT+)ZxW1jpLDUAzEQNY7+-Im6$UrwCv4)H4nE+n`Gk*d +zJ9Q_z;|XA-I^DpP_!RB^d&gl{H0WMo*;(?R?JeP1%%Aonw}A^G{wIzJzk%W%UW;B{ +z>b6;dP5IzQ^pPNb>t_1M3tm#ai9Nc?sq(3ukuZ2cNoJO#@zzlv@mAq=CKyW+QL|&nLcR7_a(bN +zrv`WvwiWyd7Pz1_8R_lo%ThXHkjp(R7xKCHjvt!pvgehqAVKJ({b_`C;0 +z;n)6a-Vgl1A8_m}ez`FuXYuQ;XxxKeg7$<97i*vAz;5LKBiMC#u$$nucR8>V+ypNl +zb|K(qpaCCt@C4^BD8WA$M^BD_FWl-qxb5egdq08i@65%!Q6AonOzB*d;FY3$vF9%q +z&P~XXSvAmPuH2H$lB^PKN_HU^81FV@R%Z(_W8yoT;a8g%Be#e(f`49(EFPP_+Jogp +z`kDqTVKTr{GPnlaYzDmUv&ld(YAa{A&X~PlndIM1xf-LE)SASNh5Qzk~73jX2pNvJjH+7d5R|5cp9Dy +zhP&fJR$^CJlPqC;l4mjEX9cq%#=NNZtApjlg4mhr-DUVu?TocB98)YbcF#=l10V9_ +z$WnaVLB?aJ1Y`01atGd#)FAfo;?aVC2eE%i?l2=Ry|tZqUvhn|N-<`14fYOW)7P_3 +z^N9Pd2p)?Dh->>>V(k)UMq(IG)fpPh!)G4fvSGOV^LyU9OyvD? +z@UAp|m3P)V92;dFKyKZU3|LbcZ#BHJCKZ@!$NrtzHQziblbPTPlAJN2tIT2^VtzOS63v!SZ2i +zL-pl(bF$zTd3m3xeg#+xhot+&7-Jp$@~_6ZbkA?-enx9}w96wuV3|yc@deQ9%imZV +zvx4&+AElF9i@inAviH2<(j#-Y7aJdOioi^H!X@8*U!nSw4ztheXX_~C*>l%u5%;&B +z;ykQkw}nfo>xfr;&>c@3<(fVId49P^D7U~X*GRc9QLdPC1;yrB?D1>xg>|Jxdz@G3 +zIo-eQ^dMsO$8oRy4+hc@myKh2&g-TB~- +zZ0Cd3ZI>U;#6o7zvNp4(wZMFboIp+F{h3QHpc}~z^c|agK(|yw7l*jxU><)ukE5JF +zw6}%!wy>{$LNHWJ(^mLE9cOsN^To5ZPnoH^^m6tpMMk{lb!V><{c9JNig}@4%aoBi +ztKJ<|Y+?s%2A(EWwuqR5MezJ~*8AhMx7dNn*w#2asfs?Z6+tfQ?=kT98R%VmlS!Q# +zSML7gr4ieRdm7Y=yh`3eKcXSa;n86S?{fDkTPS-;WrjG#4Eb^8CvoxQMh{Qg_&y0d +zDKaDD*kyNJ%yS+xM(e7*Wj^ww$kY-iwuBh+vFOt?kY)F#xAJG1)ys_8xJ>J>J$Ar+ +zdRd;SUFM$S2VV5G7kMFAKJ?)D-g@d!oa(}AE9)d!mC*lM`WJr`TrBJPh&wmV8ClbX +z3yHj7ezh@E*&|7Zh;TNr;XU)*TP0ZpjH&O>@nUa|X}%egTvhbs*J?&v$T<3ovkuIM +zJfW|#-{?v*uU6HQ-DfDag19vTJYSzuZr95na>v|m9mS7G4os^sy};{_9JQPL{{Ar5 +zEjN*GN3jt#0HdZub7P9_X7B6F&!u1Gtrh)Nc=TI|JaE^g+iN3x6>(>@aS7}32z$Cg +zJgv%b?Ax?8jPW~dFKi(8d-5)=mDa~!mv8f3`;P?pp?=!wTXqnaS5%~S(60Iu?{438 +zF7NjF_hS0j`S%Iv{nA~-t}izYebbiq&BU`N+`IUs3&bc-nKkU~Px*Oee3>Bqvx@K3 +zapEZy_uFAxu5wu>w#($pL06icN=$sKh!%9d%R+DVth6H-uSFQyGYeo%H-cOMYe+BoBGXUytfc9r`m>)zS*=i@*+ym;dQ +z#CcszTvw4f(K9+6uc>GJI@@4z9=+6B8;PLbT@3x{TfY1WW^`6()roV?2-b=pbmJ(G +zNALQhi)SxZ>g>nx7yU6iIK{YS`;s1|{0Q`ul>)sSgqJn9QuW>?CZl%V}q|19!xXRg0);oigT6PA&0 +zw8`DuaDMOq@b>QUQI==^|NTrdBtej<)W%j}CIJZtHCU@@w}odiiB149wbf;}HY6O{ +zSX)cG?k-&wCL!3tP6BQ1mTeV-fW|r;+PYo7+X90Gr7c>vcK1tLs{s!ng2Y30LPF;E +z{yYaV#PqbU-|PFwyk_Qk?&Eb|=li;^8{RQ4Ws0-pkg{#d3W+bYf#ZB`Z`Qrix^rXp +zXnYyw_P7=NEOGV^_C-g(7!B@S9P0+Ix&!1RCz?46(K7pd;2t)gtyRB`!H=-t1?~h| +z*%xZDCzyMPxgwW~=5Nl$cOK#XTJ{-;b85wG$v$rrK&I22=FN +zn(VQx+t?$Hz>C7I+5R&=!k7XK~ +z14mx04HUI-w(t;rJkuL1Xd%w)By!}aGuKl3))|wQi4kzec6ee1dz>-$i(MY9J7%BX +zasb|2^-Xt8c!&P+e0xXPjy@Ka*!A_bR&YWLKQ?RnKW!D}ok@cCqvTT;UIBMPKpyNZ +z0_LtCb#mw5IQ+%+_tvp4irLY=>RL1IRKm~00uI-))|K?LmVTCJXYLcuR49)MxGz1u +z@f>$dDmRL9?DM1p)*O5uNv_AeYb +zl>(n9HYa%R+hp4JfZkF8_I!Dsx;x>v*+Bgu`yg7+`)PNIsbPO_Z$$UNZD;<&`N((T +zBVR(>OQ~B*J>f*I{`q4^rd*vA?v#+XU9sk@9sIg9wUu|{S&MMNBJ|s-=xHJR0?+h{ +zo(iGU#_aOlqFbL{$1;WhbS<2BXnODBTJ})8&^`N<>!bmEDd)_E`Y18h=I_wH?>`cr +z8gjD9uYZ^^>uiB+5b=-M{PtsYHGai7x%*_1&UD0OJY~PgzL_omB|c5rH`t_GT|dec=udY+jM;+Tfgk0H)CHHh>%z14eEPW_ +z{;~j?kz5yU$ajvs=UyD$H6h>mveZ!Dx%5%#tA+6S27Kr8E!ELZ%+pQF&`mqXyE&3C +zM}I;WgAb2s=WZx`>BI)2j}_AHP3TaH-}hyFBF7G1M19q%rQHDj>7d7Ra`jD{GKw*A +z#*ICa^5#~~bLI-)chBiu1y7Z4@-OuPb$B_=S!d@?bd6&UgfElR6Jr)&u9=|l)L%CUf&)T&e-Ti&|{l_ +zwnO_u`2JJ!!RZ_?>jn;O-7?y;nOi$+>iFXlo$MRM`2A@UdO~xSE&A1IE}q?giRAp+$aNAV2cBeEKekyJF&p{lz+rf6FZ5^CG{n9m+C}eFJo4?ty5vo4 +zh^^uKKC}8>?9+QCcd*fW?>9HxtA3^bzm5D+jM>Ml-2N}7e;>DHZzZs|Tg{Q^C>Tc7r2NbMa^q<#g7hmh&kZpN~s#d2p@fz4r6aNgO|C1N{B3 +z@h5b9dvB~SJpT&fnMPNQbk_CrtF)Ie+?Wo0P`EufmIK~cw(~rkUR-<5rq4NgPBU^a +zQZSX=c!#3$w{!mgUagtGURpb?nd~&JmA`feBJP?s(cU+ym%FZh-KV@dd%dzBqpV_I +z^NuX9)tJc-xV!X3V{P6PJ2tf_66<4MOaJAcEFq>gMOop@zwqsk!*AOk$M3y9QeGbi +zKd_@uc@PxObAoTqN+w+X66w_1;}3fDe&@Ms=hTz)KGz;uOZ^`Bd1=thQZ8ohpU2j( +z->UnEs#cm=qdY!R2!3iT%5yg1o6}GI^goJEUGuOD6Uwjt6zvpyHjnZ%t?8_yZ{lI7 +zr#dR%Y?UID!tIlD>Ro(RJ-58y&nT~-OLEE|zi6-@Xa9r$YZ$-mq})8jCCDE3JfS1y +zRFJ(t3p%Jz1yBxjS5!Ik^6dqKtzby1?u_>vgSOmVw5?~-9}M~NBu8$)$DMP7Gmctl +zv4}RupTe(1p2gYZH-9bqRbs9`^XYKr##Qz#@}uG(n3+*t@DhHnFeV_~-{=2h;s1gk +zwqF}_Xk*-MOU}U2?Yo@waxu=a-Qe{tedVPR_T7=?@Wqt+9{rhc1{*c?^PIJQkzD8g +zTI<`{|DfIySAILTocOR{C*CUgEqEyh8ROY382WZ6@^*7fwg+}!oHNCMEYiSPIbe!z +z(}>JDg#BL;PXJ^1cq%d^$LR#-8OJ9kxq3nJY67t%(yPki +z#+=*1z22OIex`TmcwT~!Gaqyia_uu0<#rQqVGIsj63!aAHtt7;StH=mhCSW}Tm-ka +zHQt()s_)>J?4z_Vo3k(bK>tL1=8s?1nkgmD$s!+Nl~oPCRXJzx7X)kU-{U83K&K=Z +zfBFe8<}+^AB_h~CrC!Wu>E?Ruu!ya4k%DIGm*NMS0e>6^EE<8iI}gSCYaTkA{uH)G +zWy=oAun%g5$@%jT^*9S=4vs|j%y1>5#n#;QAQ1%Juyn>@S`zAU}a&BrKw@Z&X* +z$ESod%E4I98DZfJx69%hHqOw1?ZJ|^ +z6aIYO${F8fIpaI{zTEsNZafKNJ2R$|VaBwPIy^tqe|}E?p&Z&1EY8oNAxHnEuKYo{ +z@CeZ#?Vah9alZ!+71ZN7ecs9$3*~_uhi+bGJ2`Vrv^sYT;FRM#^4H@H_@7U|N5?um +z$-&WL#$nZ%S%SaDqcs^yv!dx3blTwgjOKBk;3zceoExmMW?f0Xd|$7V3=uDM<7edW +zd4PUelSiF#FLL7lU(12jpNjwQ@#diOGn$9=AMy3=oZbE*d|m!`%Phin-PjT^tu6S& +zTi%`N()v95%V(Y+LjP(AUSR(O{2?~J-GK*pv&dK3vBE8T@B;TvwqJuE3G|vZj&3xr +zH^N+m_r>Pu))GGWC*u}2baZkk)??OXbO)4Whp_#sGQnVJEWhYbOnLCvW><8+o!ynr +zX0yF>@l99pQQjcs{)*vqP`lUixtZUE_)iK#-Q)^Pcg5gilu(g9>?hfcc +zcX|lFT2oIZ}A^N#OTJ+=P^vcQ4H4yBs&D(3^H#^3@555J~nf-{< +z@JsaMbt&a&RSaj(ip{-M!B-=Jf(4Oj$U$t7-SF(>N7<(c>-_hu^Ahl*DmdBxFZgDFd2~Dd +znaoG=(Py)Ehwh)41C7b=x0F5$={vB=u6>$v_nUfn$_xEja;EvYP@dvBG;$W6b|Rx( +zJbjIr*Yz#un&y_#rmp@(OcSF +zd@ZN^e=;tuwbuC#et#5sZs8}&WbWAMBx@e_RA8;rRYy|g~{an`XI +zpQqx+6;E!gY)1R)#Pr9N$2?{f)0!U%n8FBg$9B0%KcQI6{9ruR5J5b+}LrR^ZUk*^Z5>#8#^xGJCASW#?$y3gOhBfz!J_DQ8LuJG&54MsIu`%xb7#468F9!bjMs7n# +zsAnIg-qEkBnXB$9DuieI`W1Y7tL@ljw;`{WrT(6II(g%3CdHcgt#!fA)thw2x2ykJ +zbTq~Ii!aINo6WM0~ +z*osXJv5%lzg}W~W=H0Q6@-DE-)QabD9}w$%DB6Oqauqs?WsVTPT*3bC%=B%XI|!JK +zoQb(Ca+%g?TbwtYWR)&CBT2>*Y?x5XW=$n&b>@(*Yo=mQ@(IYnQLuF-qoC7*V{OyGXkaD>>7u7C$C +ze=U)L9a_(7cr*@{3-o*ramO1~A6oct+QSdg+YC&9#c#zV*Li1LmgeYOU88o8Q)v7F +zZKb4n_CH^Ct5S?hx +zs}B9rrJ?$*(luu@o^w5UK#XT?_c`q8GM=KEaP9j|Xs`I7=u6NZE0znx2yo_kJI~wK(1-A((1iA>AN$+b0qmXnXUFgM&RE_;Iobf{T)x5l +z9rU2`$|~KHXP(B!bV-df7#tnQos4Kd+hC0e|WMuk+ShhBg_Wd|`T? +z=R9B0A$SPyd|e4Y#3}KGa!iBpDHs4OHBzQ~i +z*F#bDw*(v0xd(^-ny^2#Hj$UVR{K@PX_+~v!qzpB2=|Wsqcd)om$~}!yV1BO=PmQg +zOyLOf-EbD{{niNkcH}d;*qR%I+V4F{4v^gu?IFuvX$)?N)X|pCb!2Bgi2ZF=+oqd+ +zTf@3luDI5O_E-g#v#Y_K4_hNSBl&&=C&1H~o9X|@=nE05d`7rZjrZD(pdqOA{ +zD+`s!LZ+oJWDaE}kYiEj%UUO{h^?5oFjh78{_619&s8fHL+2{V*9^QS#zik`3*9Sy +zQ7AO~q9ZeBmsl6E_LVFCGduICI_A+#Zb;=k(mdTg?Xu3jjL-3%F{iwu=2%|A0^-9O +z?K~?QkV +z`5m1{btny5X8`a|WzzC7{MinvcVE?@ltbq{2&gT{SZ<1?&tRQfLZn;)}4zBkrl +zNjwZMsxtBoMC=HBOy4*2Jpo->d$ajR9t8f)=#X)A-!<_vp6Ahi#5C|-X2XB@+-!%5 +zp{V9en|q&9IHogSimM2i7S4#r96NDEu%_xFXOE?(L%N*S-Wj`eNN~U(@2`Qy7|MmM +zN9-^(E?mW5*tIbDCjQO_aC%ZlKJ9-c_(Sl(hR3|TL2ZStAJ`Gj?2iB+26@7K;u3Rt +z!eNK^Su1D9@JC~J)x>_|;I`XW9({4vuB#<@T@`sl!K+Cfy05T`v%>J>w8i=bs3TiJ +za{oH;!Jmu#knZp08TqEa0)NHd$@t#bAikT$PgbIvlzDo_+s4%cIYZ&-BW_%U&iLp&;)&=9FPBXyXkz;* +zJDNCl>Yvd|qyuV?`H%5^+tW|vo7dcZJ>}W;gSLSW|0de+aQp;yRV}RLSnCeQ&edGB +z{?cV7?=+ve=d#wqmW-U>@TM!9x!WRb>&2Qf7TWQvLFE$m9!p!<^SF3zm`7!_85l+`4u6`!w#u(AXhlh2ZU;v;ENe +zQTUQ##J}JRz<)Omy$RP-+q`ogv4?fGe!koKh3BrR#?9iQQ}+M8;p8D5TDXR$(O1`X}02*qT?c0X+a5=XoCS-y_T$ +z-_xCNYO4x)a}D;8&W-zWYT?*R=Y&ljwpoPzgXtY*=mdGe&)PBQt<>|W854_#(>1ZZ +z@M{~JU%IVeG5GtI-#yk_{ +zTm0{GGoG^3in;{xV?sU+`76Soy-`Dc2$MZXFfAr&Rf|J@^(|qUZ+q^ujcTh$?r6Q{cdM#=%=5EkJ=7#?QSq&eA +zzjb6?*u^NTy-+uwpFar +z{sHbJmL1y~++)kHSV|uGa0mO}*a+es;xj92E+q~&iXO_n?nQ_2Z+E1z3l5${?ijNt +z{+jG*{HNjv@_Xt#7aoZW^o0H*Jn{E?1rwK^D&kse`IXD9dhQYs4C=54v=>ksSAGk< +z!zY&xhbFl9h;Eu1%b>%luX0Bxarb;bNSU*6I>$#MzfL*(gs#u#ShUE~Z;rpaqwfSc +zP|D2={P>~tWWKFU6S+rhW|zO-P59va+$cY#ykWmxdZvSi_+HjMIH=QTJ=Rj@|HXVK +z{T1`|(QW?vLjAaJXNRgZpE0<{BD;_rm!S +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 +z;i{zQeFo2&=>>J$JaGLsoWTGe +z%F#LZ-0st#ixXoRGZS!d02>jUSdeM4uCs*${@TaAwavZbL)2PoNk(=jB69laQOPgrw45^_I`%7$vBvC2A15b;N+&UTzGbV +zgm>a`-JZT~!&CnLlsncCeZ2~N#B&6rTz-@9jrFUnopQM@hqo^E+xYICtG{@k+s1Q0 +z+tEjUA3)~vN#Vem_2-@DS_?eg^^c!fe`7|bena1i57PRpey*<6O5Ks(*d@cY_aj-U +za+tLt*kh@BJv=tF7r?8@X^B +z<&`@SbLrs*IU#QUApVgT$e-Ee_e}dw1t}vk|h^0yd@KNW=%P{@`H@}M; +zx4Mm7fBt$E)2{H7JQt3{^4Ud4(#S8H!` +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 +z7u|Jz{NH!d_)Wwx=wfL|N%Z3BjFz^)D0 +zwWZJKouN!N&z+BaTb=YPoEE>7pRmVjgg<|rJ0UD^y0P=6oV9`^`$1pq;blA +zU4#9~I9RJ0TN=FF0E}Zx44aiPZhh)}7dE_a=Y9KC)U5@7<~ir9*0od4u~$R*GfMa< +zmZ_NULO#a%oDGlTKZ0+eAE*tDLAL4tczqn;oqTUTY?gR7sh!@M2)hj!Gq?uqi}2aLf@o&Ut929KqK>pnB!y;<|T9=yd~-SVR6FKl97 +z)wH8=j>lfjouBL)e~zwxB44QP)jj6S>8$nt;d|%%U2neKyvv<0V>}BF{@VG=CUNFZ +zyFI6{IlvF?Wt0T#ljXs6=t=0R!JWxaa9L9DKySnbp0RllCVv1XJvlIWBPu#&A2OwT +z^u#~c;FCdj#g5vP^l7{Uxza;!q3zHlbc?RKY|8;)nP=H{z>3?&LHR06JJDwzGp2_1 +znjS9Ftn>WeSN^Un3`xYrEw^v&(-HU(4$-$;Q@-gH{|I!y+e9mSKG&M8B +zyS7C?Aciq$+1o6Wh98L+C3Sb4eEiG}UbT*ME8L}xe}=iWGe>mP8JpE^2)Zu;M#aDY +zJrdZQjqm;2i0uI`VeT|nU*w04Y%<+@*P5M46EyhN*;6ghJ*OtU*6|&dC4k9+;;&zl +z+|D>GD*#Q06Z`1r06YQvWj8VRZH$Heon8G_@TJIY*2LoU&xrjT2UJ+Xpt^asF^bxp2a!QC>zReAVXKlFfIjn_N$c@m%OYwQag7Y0{E-b5EJ!57-> +zoD+$(zwYFxFnrqBcRmkZx>a#A=DeeYfpd>FHBo4$DsNdPuO<{LDJYHZ +zMDNX88H)W*_QJ$aY!CHr##R81ZF3x$3bul=cp>>dn6Kbk1}-n;&emHBRzyp!_*2H3 +z*?$r1HNu3R$^e&}3!bRD(7Y4Pa2G0TiVwFTJ#_7r#|4}NKSG&>{65OO-{rf9@5QXU +z_8Y`Ywcesz&Y^*0qEFX%P#6SGo_}P3@@fkn>B_4iJPID*$SQct{l!7oPa=HM8q6c# +zfM`T?WaTd>7e+lX3&*2#JwLAKp?k9%6G-P>32O@ceLT22uvPRdx)IJ>NAP)Ie~GSl +zGY{}^H9oT0A9d!W*xZ4wg2fK>C5Qf?dC~hFxB0X#`MEr^l)jpgzqD}{oy)i3)49f~ +zG3L_wpQG^-+I@h;U!rLX{8|7_%SQe;$Ja42@g4SK_A$ms;Ln1&?(IZ;*@A12HIk`Y +z9JL=$9=dU?_LH_drd?qI*{JzwVKH+KyV-OEB +z<|X9s%kbMnkKL71PwO$X?z|y&wJy2!Umtj3?{8^C_$%BM4$p!&+&?KkdngXyKsoUy +zGiD~X(IR32%4{WJ~3`WW{Li=QZe1h#D-XJlEsdy_F!-TpGUW#1Wi +zaCaT?Fm4{*YU1V>vM1J>vGz7NxUeAjrUT>O0viiHqquq9Q+^cqt1tJC?K#OjWVJD6lqu~zM%%&@*$-9RQIG*v +zHy7+a!+SJ#U!N>tJ}Uc{=#w8RK3kuB>CwMlpVS?)K5xID`a|`}DzA???{f94zgC~} +z^~p-w(fs~5`s58`{Q0u~(fPmACv)eUqK%>R9pTM)4exU2`~R0dSxLKp>H7ZU%zRyY +zA>W(xyc~PsB6OW4?EjR5_p%p!-MX0ng?!Mhz}2&5_~Vbfci#KFzSi%J0>oFPhjW$`t>x^FNzZzoONcPqg~=^U&Kbmac^URE2G({gUYy +zR#aD+it2#*aw~VGx5{>w4?}(UZ5N{J_90tF@hv-n`;`*9kFTuFy^~CJIIF^0@c?IZ +zrYDqxPdRuE`u+*#6);O^dwOf2#*V2^l|Khxsh@Xn$u||3rt`Mb`4pde_Dk+OCuk1H +z`sZllceJlq4)*zIKTP`(r+wvL5WF%Q@hkMZ`E5J#Yd7T0NH*myOD@gBCd;c&RDeH~ +z;EnF=T#Fqpcq&&*AvQ)ac3KHGYY3b`Ug5W1mWoq9L4BP+Z$R%|Lp$Z@#Bpq|I&7~F +zXYY0AmV@9@Cv~<{XDxMDGiU#64RsDUG**_Jm&bjh$K5%_k=yu2Qgw{in!-8L@;Gb3 +z9SP_mZ(HZy8|Hr5BH*8~E>GNKg`RWcfL?cWy%=#Ob;sOx3aP)%(Ln}tA1LpEatovD +z-1E^HZaLcQq|I3O2H|vfbS1j_FYD+l#P2v`J!Y0| +zEVtIBD)>LjRxS!VE%{zY9owqkoKL;L6m$=K$T7;*S<6z|dpk}n#&I)aW2MEtw01*m +zl+_aP;}T1(WxYixdc+_gONonINuCjOPmN9U>Og;UeM_%J|IUlOk$8Sv!mW=1Q0 +zaQEdGBQ2BU!*ur|s|s4|Ip}#2bfRwqw+5{t-_lie9=nHe$H2iDb;&=7ZYf)%8hnaW +zEv4Tk%3GYR_$4yRAtTj%V +z!;e(~cjecfcaIVMP_KdUm)Wl{egkiUZXLf~F}4!4+Xn5nL7#2VIsTS`wuU^H{|YAp +z;Kcdx8_|0j_#C7!Y|GA;N#NSvOPv_?hnV|NTKh+DeD`-~eAFWs+Hc@Dg3SuP=ke@X +zVvmBR0bhgKoCUuvgNK&dqTzqa?%FH7;w&D|t9c%=zYNYbbH6p~m3WFaPE!Uuxc4@G +z3tttZiywZ#*S$jYJqz4HX-?x4L3dx~tfTT~853oV&rQ|P*D$~+ +z0$#~@W~4Osn1e^_HYuK2<4`VL=1uI~{Qh~?vWyA5;OwLGtdp{gr!)~Z&5e85V$W3fMWS=}zRkU~Z!eg@Ky?A8Ufvk2TSO`($Ws9kMIyoc-6l{Wj8G8~Yy6+RsRqAL^CtG +zUug4~^L)m1^qn+pT8S3%d#o(J^289H}zu}khsek-|qr$*ccxGr;F|qyfeHb(P +z9<|ZXcIWB`y!s*JV3PXPtbbwP9Ea~qekxCtd>i9E98$SOlzW!g3>O~CCF=TZB+EbJ +zt;NSEqnNmaRhz&U=740o&cGSHdR(Z3_#4Q*&I|5<27 +zYniYnCxjd1(aPkpmI34_>zK%Y8Gj)66=`3L{=kcAohfHcKc15dImDVz>wMT-)7&wz +z@8yi4G^hXg_uRgJKzY%Me^yR&cF)P(y2{7DkT>TTb;vvWDEl>!f^hG_k8<9popb9; +z5_SMS6R1zl3#>~v1a>By0?#LfAM&FQ>UG3i1)is$!E^5LtW+Gnw1oOgsc)lGEWt10 +z#|_14OZX@Jy2ToJ>;QUU8vSlNG3lN6}dJO7JNdvN2E6$WXyT!VHJ$mSj(7$moE*TCpd<3_>lSTj=n{lwazDYbVO~s +zc8xV76SAJ)d{jCsp9X87cP;Z-N}rvgHLnfD@w#V4ve6%TapO%^eOrSCoZdnYGsQ8Rpk^pH)u` +zt9$2a2f9=@V>s7Z6iEQL!ocN;a>h8<@zJ{eS;pOY4KW|w!`$CboJPcS*E%?}0iE~Z +zO_{ofpUe>ZX1g)hn}FGq$>^((FyC>fO7k{Fkb$xMg3t1PqOITh{wCk0R<&JKTg7*j +zdvL0%=6L4=_N@i~STxZnZT3z;zOp{(fbts#pp~$rOG;JU-EcT8lHdPJF=@Rdy{48!wnbk9Dh +z-wV8c$2$EkOTNUpD!*UlZ4s_!v*cjmK9S4F+dbOa5|QqbvO)(tSepd+3_Tl{Pe)e`!X{=%L}r+Bww?=Hsn>YxrfXV(GV%VslXv17MyWh~HF@{`1Wpu>6Z +zKI^=j3tV+CbqsuEyxQYQ?sNLOI~)I3*?x`pYP@yO=Xus5Tex$9^~oypjyq0`k9Wzn +z-`>%OU}k?~7voxxFz4cf9`j(o$Pf25qt`pUf%XTDd6@OdPb~w+mAoHZvup4DDtK57%(pR? +zLTep$XQUJl6St-&?*}G6uKTcecmz0q^D8dgL-g&#-hneP&j-eZ*c~HSd+@R=KR(le +zy?ie0-EuCxv~?q6VZV&?coW$FbI!l?D~I(5t%fea_aBHCV^1K{0lX8;xsWwD$QnFM +z{EhtF_gOPGB8!p_4MUGtcw=k*){efARo^c8q!=ZQJy$j@;{6UBw +z=D)msZQ(`oo8;%DKI^Y|;B3b#Vt80v=sP3cTNq$3+1iO-pxk7{YXo)@OY>s1(DS8O +zH6|9LjaA@4n(_2l^_;8R?c66TJMm$j?_-Seb5#WD6N;14^A4WNJ_wixd+)QBZJY-@ +zbq-GB5bcOoq)!rcI$%Gd7PjS`30 +z5quBgfr|rEy?S?0PjKiz{Q~oT<*`$=VFN3{Ww4I32kzkBC0@OcIrWxNj@bXx%c=X~ +zW5=nx1Q?2Mx^OM+eChP^u9tZ(+|!=fKd$_Afh*4<_l{#+zKtn=@X>b0LOl6AVB5eL +zn$UfXS<=>IElVze52K@QZgAq2-V$s!FU1B>tkU)DDS+>r>m2{^8{$LohI)8_*61_% +zqpFg{X6mX0zT^^X=axci+?E6IiEZ%EgOo)cJ3RgeR%mw}cv^x^TorGe8wO7|!DEF7 +zCNLj=$Zf6Dka63o6As?UJ&d1n&Z&Kj@)ewwmQE5V0LQPg=UfHf`~kkPJnl!_#P`Hd +zs5TV%1$hi#jgB=_GZRm&kCg;wXI5Je+vFi?J(u`r#sLi|)ZeIJHh2R%LcTFw<(#b*-r?&?Ok~a)?=PLXPfcK( +z5w~=bGk}V5T$Vh*Sl#nC$DG@fAAbSjV{B*d_<3 +zbH-HejcFNU+RB*noH5lirUi-fkl`8n?V(-4-U_jgz+Hm;PnDtrSlFl;+7;Yez`KWt +zE!Mgj%iXu1#G^ben(SH9%(=FYG0=mYN(#o#RKoXF?f_YpbqulN)`jvQh< +zoj2pN8>DZSCtT{a(?B~8egs~7-%$RQ!nk&{^ +zc%-|Q9C@_+r8Q$r_Zm=g&C!u#BK;$;up9X-9Qh@?&`Qs}KQBG^$f$1nv!l{ZELybS +zF8iIrkbShU!EWSxA>Y>(yhCh!_qJGp6}h%x4?NHOfcCb%-!!Zthx3{jM=h}Vy{&On +zDQ0?T8~H&tT*T)Cd_KrW<5nz%@;erqlD;r>7BnwMfpM*9uNiqP} +z(W<;Fq#REELiQWeBg(o4fw#DkV8xGfy2kz;9qU5Md-VXj4duC=#LBuY~W_K$OcIBR}^jQ +z@})B`f-cr23(dl0UcqAf?~tn_cn_*G&(9`I_b%+OO&Pu8f2U}z7~W^hLfUGKjULjL +z-%bI~_lb7B`Z`mm_WX7V&27n1z%NkH$Uc#MMju)WOne&nXDV!3 +zQUgv~^{H>szePQ*#TtHZX8a}ShVt!cU0mOvyBFxw^@Sc?H&A9M%_}BaG_NxeL*ISO +zdv_!6G-t`^5L@zn<(zYX?-;OqUanlvZQlkL>P3z76dgP@4RPw^WMn2q4SQxXX@ZHf9?Dg2av0u#c11& +zOSoi!_1KDx-fZt#0&byJ<6FUIO-Gy@{AJ|e7Y|~ehiA%_9@|rduhH<^_bd5(ecbV| +z@=o~TOfO%73$N!|xt|rk8ug%Yw+=oR`s@ZT^l|Ik+{qyLC@1`{y#4wP>K@J+yT5)3 +zo)g>MN}P48@=|F0#o(3leE7LlH81TS>uf1^v617GJCxx$7JCk(ow?kd9UA*^-{;&h +zm(xCT>2vIbV%vnl`6=M#B?B)0mxb^(ai>J|tUDztX_xUNjd!nBg#UkP53C~xZrk9g +zO}ZZvT-5&5yZ-)fv%9z4EuS;_NWixz{55jtQNg%?A9G>MPK>eObDKAxR_c#oKIkmi +z%Js=O@@pwFeF^$Z6Lw&Xy!UnF)~+8`Zi8I>JsKaxU*W89SZjQtGslmgw)fonCwWbY +zvyO_D4s%9Ad}m6^tuy@kT;P-$q)Q)f6;m%5=8k<1V>|B5x9AMN`SEKmo>lNpK5cuC +z`%bXqhi%jm5{`k>ssR +zFW=EOhczVce}6?_8u(=sPm+xucz7YYNSVC=zH==+>(Almwag#??e1dkzAQG=5_x7< +z@504)Z1ejTR9nIIk@L}$l_N@RJ2*v7qHlA4U1RtdW3YMmUcPa5Oh=uM(}8L5MEqd1 +zdkony*39V@pH++pcgV`RMXUJiVcwJHl0BWNHhVfeC)UZMUuXWycJ%!Q{BI0i +z7C|@c<=lPm2i)~;)!OA*Uymr?yLh+m$~cbR{4{HzdHjlRY!xr>b2$0q?9AupVsq1v +zN7t99v?rR2*PX1h`i;@=k9Zd|)7q|MUE*dM_i%+Hv;i$%4((vSF^&@RI`Z}ly`mTG +zr#ZOf#NNLOKA&W~n|r@C-)-~lyNNl-UeRtDlksB~GUQYnN&cB1f5z(@XXOodl#Qr0+L=H{CIl>w)#JBNi=3;OnpF7ejtV5H?IRxLRa$*_( +zKkD8;KI-bq|9`(H2?@U>uGFSmtCIjF{L8@yi;9{jpTidc-s{ynG5W)Iu5+M0JU-#ZOnS`ix +zx1aB~`^P-q?|I)}=bn4+x#ygF?zt1*Gh@2$$O(IE8`pETWl7%sl|`%@Px%q<4ERM? +zv$w13a_Z99oxOJxdhOF)HNB$@4eHEPq0t!+jjyKd1Y;RTKMcFEETuo4J)@ddVebgW +z{CzHM1Zjs!YtBmh8<%$Y>xwHp3L9u&x#2GDS<*b(U!Rqh>(VxmRzTW@th8fuEzR6b +zS|Mp|S!r*&v;=8Iq;1PeJLJ+9kQOFwPF7l{ON*0MN?J`;+AfzinY1#}YO~UQ@6rlM +zD<`ckEA7`V?e(w0M@XyBO55(zc9Iq+Es>SB)ula3S~Y16S!s{Cv}V%gkhU@_?WZnn +z73*Cy>)xkX|CcGBw`fHTItj8m@GSz4dui|96%FY0lwZO4HZj)8)BXAA@UnBse)HRI +zFYlF#)BPZ?0(Ldx4)5l^&b#hobrZp2!gY2)|!O^88=%`*9@Ke}v!NksSYf +z{Ob9AB{Iy9MZW+qTY=x6=k?KKV4zzVj1N-f$@{@jC}8bt|@z)E8|`x +zb>GOkG2O(C8RBb?by{+9-eO=>yzzU}I*aA`&8!t`nPV4Zrh0e4Bd+ew_r|O*$4YK$lg}o{1FlA=CGKJm&d_YE~+bCB>dWF})da*W1Jb=uF%-i>Sz1^d{vyPkr +zKRd%)oT<%wu_A|<3%jvJ9H#F}^OihbV?Zdg=;J+syCeW*)v6!gg4Ge3cuCF +zQ7s^zDzPn><#=N<#n@ez=FN-b&Pc?65C17NaOK7X*N?K`YBg|$maFXoZwY%#X~Qq4~Kd`pIPZI;TO)x-Zy6NJnU)LWa@fymvbKI`w94Iq3PR;;}fg_ +z`FRgS4j=Q^ynZZq`RhD0JTp9x@;u7ZQ@I}C=b6j1fM)^E5j;omEaX|pb2QJ|KJg4)V&NI$4 +z&a;YV70+s()jVhOoXv9%&pAA=pyw686y{l74d+%>J%2Rjqisn19^+`6^!Q6eHks0)D8utHJVu#^H +z3GZd-F4?u%Umcaa;Cb`RxON~L9CqWl;VZOp7opFw7B?b`HX@5QmIEt$lf)3{9mx1_<&yOIXaI}2LxO%-@Aq(*p;!!Pbjji$aLS2mCzHr(7NKS*zs+#oqY@fURO +zH2pBTqU4HfxmvP=^hC{*Y`MCY`YwW>4D)5DsDa0XSqB%Tf8~XrFF;T9xkutmU-6Xh +z1$Sd3=VD(co%KLzG42hU$M{F6H`*fmt@OmdfqzP8lubC$8zWm5fSk_I4w8 +zL$7>G?)Vb20_*YD(0$;?@b1O%?v^gW!(4-Z`*#Fz!Jpyd^Wfvfz%(i?7(A~T9-dgs +zSi-}-wS}Gs53hl)!Uk5wLM!x^uSxjVbtSyzT}$%rh%N^|VejXSE1{(yqbtR|HAZi# +zBeoTB6TwSk+Bdjp>6)MS#ptq!YAO}Ka+dJQn5<+j%kNn+Ip7hj@$-+*tg>pqvymqi&+LO-NAp!^#$I6*7@j5PmGRE9|7Hz +z(q7V^;Le8j=R?c#whZJ$ZSprAvUgM5&@*=6(DJr;asD*u#m0u-L2PL9q>}kdB4wfF +z%%ywaAImg%pl9nV)>U2-E=4QK*j|R@~ +z2GTv#=3MsFJ7V+L3%cCUKoxs0BwztPGzapRek&mBYP#o_dhPQC@Ytq%n*}(BTTcy{_+J(q!ih`Vy>H1$^J()+zNv_F397 +zx~9MDJ;hp#z5PQBPG6X#zUX9(nrmY-(JJ7K|Oh4YvpPu#Ftkdv=&Dc{KoD|2o%_Cn;^p@v2e<9DdGFFIoLXs#D{)-ry{WA5Z+KXy_C|DSfngl2AUN1risTfSA-K4<%NC1rv> +z+k4**#C8+UOL&QpHj_DWuc^=CMe(|y4%#H0aclW!N8^ekEtpE-bzgba;TE{~-*of_ +zok=Ksu$jE_{Sa==yiojaSKkiuEE|NLHt=2a6v1B|e74m7^eV<;T8reJD&P}siLNC3 +z4D*M<2PQT`7wB*kn8%XgC#2s+_A|7k^RR+R>vSn=wB;$Q8-w+^3^*h=y=?ddaW9Q; +zYO{$gv&r?r+-;5CID)*vUTlFkJk5T68v9GL=Uorn;whA8o&|M3d%d~Op{v@a#v6rIYhFFF!^ +z2IKs4t=*G3)yQ@M4Mm`#{jo9!LlJVZY!BPWE1o0zt^H}gGceF;7&lc +z>ZvDyOR$J13qH-6_p|3vuB4aGMArjm$_;~`Phw5AaNg(OTtFKG_df)Gm4P$8 +z2K(;T6Jb5BD;j +zedA;M+~(F>`Ad{gR=n8AY<>>35J^c!FgQle`RLdCEs^Ih|LBL39h>(yP7K^@$Ob@$g-ycx>DKEsfwlO?*#i%;H3S-HvaAV6WM7 +zpmEy*?Xh=k^1N9MlNcLpq>VToZLQui5xc=H#%Blp6@G~98xF_$o~jMXqes-DyL|r> +z_Z@AZp57;ko5MXcb?6c?^m*hg_U?5~su-W&xtx>IzQHZM)yoxEaax*h?tbipvERMk +z2UGQynGNSrUkUzvyr*)2pO}p3Fozn60d8PD${v*R$qyVqxfFW$j@etP8Y-@>h*z5Z +z96L_x@7=_$P=9w`gD*ZlUWMK>;DIZvsjBT3y$7Q*1 +zsjl6zTU>gQG|J%jDZgraFHa%3c(eDao(=!!QpR<6><1a!ZVh?0&!+JSF{V6IPL?~4 +ziyVUsV*PDdn|{>5xTlrNhmXq?n%_m#1AQN@+2RvR$U_bnO?Y}Yy04#C79mClJg0lO +z@^{Wt{(B(jvobYX#wOW+ZIceCI0@K$vCr;`DgHtfSPS_d%Bzlav4@9krePTME6)gY +z1>#0CKIrOOq@zb8@{Ly;s#j0>Z0k8^%Yw9?HCv{qU(13$;NNqAry76k3yrQ~=VLIo +zn(K_2@yiJ2zvjH=c(4v>u512FcdX_tValJD{!jd&MBBAnCN}add9-HZkvmwUq~};3 +zv2X31Eotifg7yE*SH-^bZo&Ta^M7pAJW +z%;Kz7N&HOu%KhWp1?RT=#X~J!o#tq28SMpqP?~sS8}VoiOr!xLa9jl5N+SOO{@+DD +zZj^0wy|az(Vvg&4j%gD*Eya&H#od*jw>%|YDVm)FuaTV3o>KZ!&L*o}-jj!~9!R^p +zVoztK?;u_EuID~JmH!>SxKjX5)?DuWvvXYa +zscy}&DOq(MoooA4i2s-1{gbncs1A*52kA4JXO@r8YT#RnAU3S0f6)4Jv~J6~#`-NK +z=rRYpuF2aKoeb>@2l6Kqy+yE>hLMev?|JZIYnuuB^L#Qv-4_^H^ZcU|IIB{(<&_rA +zwZxWaGH*?yasvLsQFNL-9NQYPJ#nU-b3q-aX%1@s6?pT~VQe9}c{3v2=A8XK$A+#6 +zSBh3ezxE9EK5UGAbUcf=5#k4;;hHVQEf<@<+=5>%wgvok=y&=~zcilMlG7wQDex9| +zsULxiEWBtew_U}&WbTXt{`xITTF9T4K7(De{k>+M9AwT+Oaey>Px$i$_V0RQQPbYO +zwVEp*HShiTbk9hOpBn0y95V(RlI%%=4XNCe5kK42s&hDkTlO38AN%B*YW*T +z&Zak}$rr4F*>ZN$e1AE1h4IC+W$O7x8_aiX=gfET2mRQ6kO=K$%X&Mq>_F=CmiqpE +z7XL1#z6AZ{4vL0L=?~@MRaY5#SN&9f)z_e(A^cO2{qetAlzuOCt~Q4Q1G2_(m@dqM +zDI1=IgNN8lw-YbL@VO4+D;GN(g*P-ee)koOKtmn78v^LV@&lAvJ&4958 +z)~{9MlfD$-UgLpIC;h5LYm|5R)~?(A`?^kN{gGZoztM|k(s$`bB@Ns+v{|wX?d_kfQ@&}R?(Iu)5x;RafjeO&RN3!&X2aHq3YCH`i7nT8pvU$w#f&-xQOL(>pwu +za=R&4LAj_aM?G0`q~uxMy&?U-&O0YHGruSH1ZRdtd+X3qGtO56q7$4}Vu3z|B!5da2cU~?UTbRuC7e^ArtLIzV +z_s2xO|A||V_C9${CYCqG=q~cdlJ25(=`Q3=Kj1YRU8;lmd$X%Q@m`BJ@OXPYbys=e +zC%z8;bPkd6Y^w3jX-wchCwX;bxVaL00XUr570tUb`hJ6_vSh+LjDJI6_gnNK%pRL? +zg-=R*qW5}u*Z%RZqB|6MW0Kel+H&(IM83<}=jn`}ho7DN|8n?t#ON0jI9s=Ge0Dp; +zzTvFXjnS9Lce6Lj%sIg?TfnCr?4jEdm8;PG-yo*lqo3iP8!t9J`JTlyvS~)LUF8Vd +z*Cctk-v!u^i=qEu|LRLd#?!vdGmN2le-EuU5$*-kTv|Z-I@0~y^6`5Qw~axD8rWWEj?G(6-Y*Z*9{zP*dtH5_$)mVVnujyk +z%lsZ`-_`%TQ{}@Co)!SYuc> +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 +zrG+2Axr}_(x0CPW&(C1vzmpQvsdDUuI|?P +zm;x`zj#c=PsWZJQ0`T|OXft4mubcnmCdKlZ8X +z`_{HV9*UDk_I1G|n=X8ucF#u!n9vCCW!{Mg_pnw>NEWf*FyEcOFQlB}nvjS7_)Vu6 +z+jiOUbx!BA4Suuc>~mwZFFGw*NPgYz#Csaw?I)<0Ix5YYZT%nY+85Z{Rgdva^m7cUOCuWKB|xlTQ4kMxXy7J7~y8728Z-;DlO +zY{yS^NWQc>-mB<%iX~=cEXiJhyeT;|yRFf#EzL2VGkv$dOZN%-AHWoh%~W9F+z4k5 +z?>QFndb<=4^cx>bb`AAki7w82B`W?fVM4ePe?LRpk}qa*Z^ZR}WptQ-dsMt<(S>%L +z4~LCxyG{JU_ntIoL4$f!ht7~GhL~czP4ugx!8)|_2TPEnij%`~s-lhl#Zlq|G%n9C +z=HA}k(`Lb2o*RJw2HKJQ9tB_M@a)IEz<#y%1 +z_m|I--JtLL9{2rOzH9F#$o~iT{ZYP;@+RGRsy8W7;N7v3SO~~vAL#A;(&d@w?s|A- +z#}9TA7v+}Tj}>nIc4=Yg&eFo&nO%2%{YdAR-hxN1U97YCvS}82yP=oe4`hZ-iq7?> +zHUACu73Cx@erwnrkp=wT3MDQs@;0|zJ8W%adj6_Nrr=wVH%I(O#f2P= +zpUK}@aV^i<5&6-}^IxpEntI~-c~RQ_QCZ>cAC(v0zZw|+C0sbal{ON>;l~S0n#q^= +zJDveeb)KpDag11hcdS$&1XF7M-qzIoPi6#@`V;g+a0@QMuD&o&x`V!E!=4RyHq3%o +z{Rm)IAO1TqpEn51wU_Q~t-bW!VHO?y{{eI211I9Sv|?{-X~nz4th4v~7?%L<34R}~ +z2-l*QfKEgo!ntVVFNN>+Gy20Wn&>=tZ)@kdpEUF>JGf{hpbyc8Xe5C5MA}#$+2i08 +zyt@X#8qFUIeQ(L4jgs{zOV35XDqRnLkc5}45TB9GCw&hd(oeTu*}f^I^t;^iZue|< +z&j)!1`gb6YY-YJ{+Sk3~nr(e^&p#S&FHR0&4G5WdL{ZkH2z+{8sxVZX +zBqj|qwCWjr-PGEl{-|$-$JfWcdr|6sW%+s$@X2TKjP|~JQGVmnj{a@79&GJ2!CD#g +zZzp+V?^OT9e|3iueDIiL6Y*x*GlTU`yjVQAwEc#6?Ej?(_KnBN+8Z0s#%JR~^j5|7 +z(B1SCy|%Uj?}Nxz#ZkrODfBMv!q&AZ##&W@Jx+IIfD^{@e)5cqAh(czOatf3jUVhd +z?i$qhm-#NgGsR5Tc^zU!M>)USW?>r~r}$s79!nk%@H#l1R3EpSS$WC#D!a8d{>}2p +z%s9RT)yA%5@z4LJRqwODpB+vYHL|p~0(@tIhM2^k|uejh2ML +ziGh@cK8(G#5Wf~buR0pY*V%ghH>h9sT;g0nONuk3GZ}rj59$bL(%AnfBiTUqn8UrLd)a>X=4_Y8C(1t +zq|497mYtmNIqw_h+^@>Y4bqdMu7di_u^yYOGck;+I)<9p*`Tf6}UGyX187H+WuG9cF5n1JjdNE +z`SXGM>UP1hjx^s}2(0NYFZ_6B7XFI(dv4Xp-`l{fB1V)-0GUu~w|DW<&o4_>=oq^&CUC9+{W!@(&1AP@W$H;<3! +z`CFs@-cNv^hnCID+Z7wPW_A3w@y+09bwp?Li~YuE-b>*)ajL*qaa_LsqWz*J)~=@5 +z%GxvO#a49K`6p%GV||kl_y^5ffF157mv=jPe}>-F(|aqnK8t7gcl#p-Cw5!|+_uuT +z#5@$?@G#}`pY +zHvaO!UorSt?eOvF=#59d0zN`sZzeBNQ<=jU5Ahy~aEDdK-@7I54_!^%vp>e>Vf&B{ +z)Wn&Aq38xSZC9j{cimsic~wIv^A)ELTC@G>Ph-UI-sD4LzPY1CxUe*q^U#6Hd#E?4 +z<68Kh=qt0${T;@Bn%Y@HJNmAA +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 +z{6Kn^OjSi(uKU^ +z{j*b{)Ll)mcrQj|@Ve<$M>NaDN!}X)RmHb8I+f>Rmv+ +zw^A?h(y2Gc@sxlz6hkiH6V3uu`5f8_Z&_4lX6)yqd-`(WkByk=;prAx7Tg85ud{_OQsG@x+^ +zWE>AZ1s*n)9rR}oTkhdQescJiUr>PmA>dy)l6-qFK24HYv|rQKBU*WT{Ga0JP3um! +zU+_R4t+_MZ;i#56cMZVb8kbf@n&PMjG%0zaoNvf7+!b@Ubrrvc1;x-qSz6yxmBs7> +z+4s&*$bZYe$3Iw{AqKh0Q$UR7uzN4RyqJ9?`@MWvai+|@H$;mwIu+;|Nfvw)XmrhljXj`^+S}}Gk2gCWrnU(H6 +zHNH60?A{wD6=zcJy=X#lX1#mg#`g{Gy`1;9AV2-x=H4?ii!(cd{N=@&o$h_k$BHu@ +z?mZ4pI^BEe=ZZ6j-Fs10aVF#58-{~t-@;ksA8zd&LH~KK;#c6l*Mq}C_r47rhTZ$l +z3h?aS3#Nl-_de%K;Mu)z_%e8Q?{RP*ckiX|0k=V()4{EKFB%PQgZzv|oqL~iJ$QES +z4U9{|y|1bU&q4mLg6H6!F=}@2wTw~9y{Dj`_3pg@d~R^>+dcxG-Fy9|;Mu)rhJt7J +z9;fd+gZy>i*}boVemaBiwcy#k7XW95cgZ*btq1cxeq`g3mGJu|dDRu-vCK0eeMnOf`lyu6VW;sLCo*n|IM&P>TBDgH3a@oVm!U8mSvvN>YIPN$vzsMrJ65B*Rq +zicS8;h@JD>yJe@6j?(b}^PjrTF*X)t!M5@xAFz6GxHoe-vPp=|71#!POb4-{v8~AV +z;e2IJ5_e5Sd@yOqNpum4`RC__5SDOsZBn9o+ +zJ+XOOqs=}LagwoF5Chi4(>=uA%hlaA=wg?D-@;u3zn6V@H1HP>9ZRelpR&>E>`kXe +z<*kUa@3i$e{OrrA-JlP$Rk0syY)2t~KIODedVgd#XIy-*in(p?3O<{@=-gDWFE|j! +zH-M3Q-Z$lYPj}nC-Iw|3-nN;A-bXW^%zu;dT1|Wy+12d6V$AT)6njwGS6*%U8p01| +zxM|n;geIz-Jxz8Rwv&$M8$!OfdS7TioxBySF$HFCu>{=fUV+`lp2nJN$Hdj`Q-;08 +zw#9i>k&uDoTP+3NUiwo)JG;%9F}}BX`0@DOlCDB;d`2+;nljo$(YYeKA5fC2HF~MF +zW1nlvyzTniC>wU2lY +zho{-G_Pw^Q(hUB3{wvWcTTgU8cVJ(F&LNxGebgD0iDR468eGji*M(W-`QJoZW9M6{ +zrz!ev*N$uqKe)Qj#-R0Q19>zbgY|mpxSE-gg#ufH=A-7JjXT>vc2o^9Mm0Y*FE8PY +z(ky8t+eFe%}y9Dvz!1u|GKm9gw+?CcbvnH6LKlBd +zFn7Em|L;B>P2;_dZz^Al{Z4XsQ1McAEd3Poa!j!T!7+5S~+!X*x`*@_2;rrSn`k4NmOS`#GxI2QazRJ*yV(U#yf6Lif{c(&x?Tla^^PRD<=gZz{ +zEUH~UBjlgWoUri%1N)24o!~>1?xT~o*F`61HkCVD!_Mz~eZ_yd_8%mT?@4>M(vHQ> +zxqb5{8z1%LRo&9|B;|?UW7aBr2KnXK&%a>nt|RTw +z@jVOp4Soa>*0SZpuAN>vEH8q7FtbbNU;}zDqTT?%vV#VCfnufx=OTqa`H=|U0Y4JH +z6$eW6rZG|c@;e-U+y7*3;JNUYV%C;Iow?1M!aWG#cFSWFYf^iUuYhlR=V3POETg>e +zEt?_x$XWO}6#J&bM-6%2#WrBpj)9rft9U!vDgLgqQ|AMxtGtn&{^8G- +zon+swMs_Oro~6rbCp+yt+$TE~kB&?aO$^8VQqG1VKWYCA|G?Bgm^(wQ{1SR;T>NY7 +zEB!qwHf4Fz(dvPvnbZB#nO7EOkO@!t$^SE1Og7SNInQ^p*u1p^R=Y^Q-7wy*cBP29QMqILL>e8->7oa3m%{wcp9 +z*8fE4r5SPUCu(0vJV +z)<>=ye0?b*?_Z02cGDp{rzD>(J9zT)Sq3>Q@O_C>?(O8W_Xq1AdEWoOKtB8RmHo#| +z@=@)}C(37v+og5rGUT)8UF-Gu&*ihr +zkk9ZzK0!V^%fYU-ZyD|UrRB5rS@Kz!`UlEqUv};1k~UC2s~a#Df&8#@f1msy`K(WV +z=#$SRKU{{qAlq*spGjVoJ|o#dGDU>7GENNduf1Z&Awj(tv;JS;WHe}+dnE%I&HBM) +z_otftfy_`0A1lCKU*ruxE~jZP{i$+W_gM1oH*!|C9JfEV#ii$xo-N0{VC1+>PL4Yp +zIqvDM-}jT_6o>JZ@jrIu+xHEW;||8=Tx;7-k#;h2OZA^2w`9|2ocaTKE_*x_!&9=d +z#=_pIVB@P>-O`R#Aj@g26#D|*VBP6%JPvo_OUig?e`hvw@@3#NI~K3n%pQ+6@(1Gq +z9k&(gj;p-0Bk~KR-llvnyt&B58;~r#z~Qcea(ny9!1xt9+$|*SFNr(xlOoj#-Rf+i +z?wr&9(R%I!ZX;%?a257`)YX6#>$qHWpOgm2*& +zd5Q01u@Tio=AaMNKd3E%~eySMIgC%vgM`evG`0Zy#~vr{UZDSc_}|?4cR?*`8NF7<>NXt}JKO +z!<5B#6s>nY4SjMcF@WHuUv+Eh>woN%OT*qp3E7i|_z~oebBF`OTnwLu-LK;`?niA4 +z`PiAfT}yoSudZaR5BVjrQu#_@A0U3mvWk&!#d7m=W3QY0c#l4SJPYq$L5vUU`-QGz +z>Q_BF?_lj|yYc_xZgylB*(QXCm9!DbB%T6aBw!SBHPhgB#+t$`+ +zedo-$V88sV>M?diTX%>uoJDAxm$y{5KJfg#bb_^uv6YFWge__;GA~o1!^} +z*2Wr}@2`-(pmS&UyRQrSm)+0Mv$Y#3F3$egn~s)OzG&(A8}Jt&yHNyLyav1^s6)2d +z(`PKJ^zzzf%6`PY=o;0>_#6Ln=1|ge{^j2?aJ{n(+va#{HvQs+?Yx^+H>50Y)z3Wo)C)c^XT=##zkzp4^((pgg!;ko1Pv7#r +zu}40>H_W(O9R5gl;QTJet_yqSeO*85y>AQmCbx2Dxjta$;+};WHSx6B$M2*6Y}lU6 +zf^90Wtp+w^{D%9OL%BTf;mP^k2KnNQX`Dyg`Ni>2UMw;hn)`0=eeEO2qqyx}Z^hAX +zlh^a_JL-D}9tiPMe{wsRa^4-yY46^Y?o!X;9X&8v$Q|mXz$l(DnkT#td)+)MmHHNGHGE4@uFr;7k`g^Yiz(?1 +zr+9ZHMtBF72(FRdQ%ekffM*oniSK;B?>%+D;M17+!;4c +zY2Q@m4ho!&HaHV!_f^E_UxgR#kNy35mZxstC7I1*zUXe|>!8WtJX{pt&M^^u5t&Ci +z2RBbPtj1uU^PSGX)l;YX`*vsGvg^@$7AOCXF3DjRWWxBAW?0Ks`uDP5H!WQlnrnQ2 +zgY$8#Sl5cYFDDcJwDd}RK(+2suFiTNe30H(=gZOTI<>#OIB#E6_fDVd +zpA-GOulppYCELJhJvap>_EvjXXBVZJ%jpC#ZU7(6-rTOCGs4`Bun1qrMNOY(KFr3} +z1^%1BMH8|GYu=)?Xfc%~lP6!0e`h39g`9OiYmVfnUT{Hv!#B%_*&)09xlv1RSCW4j +z^tKHf40EYzPw%bZG)esJ*J8Qg6Z=HddUt;)cUEs!d!`P?MD?8I>S4|_ji#>Gkh^x$ +zKjHLa28X>}qZp%N>MCSCU&44?o3}I?%AXPWAn?)G$Be6+trTz +zo#gBEuxq0eT&#ayazu>rjWE8f%aonN9)!+Bbx{5=d6xKWJ9r`P^_hk}^?UdgW74{TpLhmwZ5+RtlG8vOU|z@ +z49}d>AUG;%yD)TSQvAB$f%7P;QhZN0w;9um-P +zN!soOV(;b-okyIFs_ffeUjg2_-#XXg{lWj*cqG$v7VE5~&xgUW-rL|O!C2PNru@N~ +z7tC$u?MmqY_u?0(_2>c<%MDl>eeZ_ugCDl_R#C6-T~E5r6O@yEOt$nrE+6M2Dnohf +z0g-mrqsL4M-)`gM0g$L|%pbHB0S +z5A*l4pKs?q>qk@ic)tCuHH`BH@^aTWd&YZOzDR!qyT9nI*wI^(JdzoUxU>FS_;l;6 +z1iZ1^8FKOI&Yax-+2N3lm0*{pT>WCT1)u&-tnvGBa5)5SpQ7z1!_%Zo&e{i#38<*yTZs%O~dUy9u +zjrW;N(uvhS?GgUU!IL0O@}uGdDNQolGnbz@K6A*YbnOocPl_9)eX0OA^RQ(|7w^N( +z8{Fsm`f+(h_cK{J1^EbE%|TA7gMZY+M}D`@;znm8UjN<3BRVH48;J1sA=ceFrq8di +zwg>m8+4FSbGoIry+5JsZM+iJese}8r+eUjAH-z#kBL|V?i`av$g-;0|>Q5a!1K)}! +z@v3X5S~$d;7E;HqZ2Ji5YOk%PFHf92!I(v$eQ0D*9vO_?fW5H>#qZVGsh-~AOt3c= +z$j6<(?ZdbB$pSo2^k0L=96pX`jlrE{I@!OyLb$dxS=gOqJ*7|UGzQil +z_(tq&4(AElxdc3&51vQ*4@c)f%j!Qq5%?(x-!F3q&0N+^?b+%aum8SnN4ER~U(~+sGp_uzzX|Mp=N~QmVR15oZ?Ml< +zxbe&->&t9?BL(MY+&I;-t~66_ULJc=oI}=meBfi=m86N6kagC}M;_|Gf2)1qV0_I{zn_0WXf9qX+WsJS*E8u6#+VRdVUo}Yia=r!njsKH;7w^5;*hPC%`S(Zj%o&II>?LSQ`gXCR(=)6?%Ua#urvx1(h=@$!%M +zR;Q$s{Ii1%pW?;^zcPG?`F2e*LVTaG-hs86bHw1pCdTc +z3s>=rydn>0GnEmZantT~AtqJi5zDX;ug7vzf>)r#!?cA$?IA8cwM` +zyGEC!c95<%;px*_plRX=TvicgPL(p3=H(5oQ0z*@ +zIQE$Dy6aB!r-*r1&Rnv0-p_{zowKgmTfscKDLouJw%YHrMISJ>=x3d7R7?BN7xdHd +z0I`L^gW`%#GB(G2Uw#tDj13=~bXShw0q(Y-H=zrYW^A0^+Jx`jfsg3{=R5G?_=~WM +z_W2IvL<1jFU**FuAd~ydwXq513+^h+!Cso<=R|3LSzi9xf=|$R< +zuaMfjF#jdm^2s}IneTm&_J5Gc$^VDQ1n-aIXObp+s%`U+59A+j^9xC(`QAgc?_%~F +z8|^&N1NPrdv}t`~bXVcoMknBYc&B4Tp3%7};fZsqE*-peKkw4Rq<>+M^c-SA{Kn-u +z`n2p3w-S@q))Q~E_J^ULv9vDy7a#PwtK#a+bL1`LUO;4gE)z&>%J;T+f7JP}#*P1K +zan$-y9CLmwk7wTNzn8w)zDdXRyx%z=icNek#y&pI`LkXR4q}O!=mR=?-RIA0^W~H8 +zt=?Ye&$=HTBpz1+p8Nb+OWjz=U&P{XobzX$>HJya=q3f|(j~OBdw@S{1$L@ZY~01h +zpS7Bpx0+XhKPxykc4*>ULyva8f8O-xh1BcAFcW9>@RWmA_y<_&E`;@Yc*(=;(?&d`;e%NU^^uHU$3W9bN?P_OyB(*JN(X +zn-@9S`#5;sW!Byx?yzL2i(I_mOP#DKo{~fR9`&D1{GMX(?8w>P7b9if3z;$8_j&fg +zO~h;Jh~@a#XdZymUCkld&!cTZ@erHf@wQX^r=y;K3i$1K;3mUYIx%6NmH9C~x}qJ~ +zc?-NP>-dO&$HVw{R7Mr&2|gaV$?48^-)euXEYMxOL|5&0?5xBXm5n{XO=(to+@vpz +z9z^#WLLYo^xQ@It>F0-C8S%G&pM4^KE1+xwz83J`rGJLMZr$7X>q@_ozb^9YI^Pkkr&?8cqGT!@cZAhVrE +zIle=i@YMl6yWibw>n|ivG4nj|*=2nr|1fJi%ktgTdQorIHS51yZ0P)*_gfOj*EDPA +zSKXtGo&N$8Ge>n=o%5VjC*vc%PxnCRoBVw3e!w|qebc-Pe0l9Yz(-81fAvjcdSTX> +zN`5T=xml0<`SU9Nq}HQ_=L@1!H+%$4abqU +zNgvd&cV$*T&Y(=7A8M^0s2^S)?0^4<#<$O}ckdwj;qF27!%w>Mk5GP~U+=T{(@0)i +zMcQB5uQ!|i%Bg?7qd(!C@n;Xm#^jWqGwI;GO6UQ3?Xec&T=XfQ1;rh=J|K$>4a%2V +zb|cYj75hCa9o~07VdLYC2S3$DH<$e<;90d5; +ze(fYJm|y?h^BP~nK8ya<9T{+5BkJH5#&bVIlR?ep7iCPru3G +z?)A+l`U5T;Fctwmw~;sC?`_N@@rz)Mvv%1_=jio_m1VGu6?m` +zR9*+?FAnuPf3b>sPZnR&m;3mO?uD@D!GuGd*HApOi4JEG>Q(>6m*4KpMK;a~$uFE; +zOc{K}u=$^D;wAfe6C#T3&%P9NS9~0Y`<;Al`SPJy*x_kgoA4z6%>NFan){t&&$c}W +z^i@m!e=Ynu$KhK1`Ps+cnLn?@&Y8`hZ|24;t^eZBt0+4de{K!vpY;C?{P_!?I*~tb +zcDZx}`19u77T#v+eK-D` +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 +zzlie@JUXfKpJ~qp_*O^1f`|Nc +zf`@GRK<5kadb!>LoQ16~9F&c#bEuzJ+BxoDx%Ke)G6S4;dphOLP>z9} +zlxcnEdHRw)`;!iW?zE|N4#&;f*kR$HV5EDY!b{;|fP)DyZ^oRBoXclg$z8h|-j`M$jiLwJ +z^MzA#2YzAUIFqr2gE(b+l)v~8d3raKQ?rY>re1titMMJ}Bt|J~Uh3=Q&cSYe$d%Qn +z*rF_TTKM5SE{C5lQ*~foqKWcm+U+J+*dl&wjk|b5(#E~)i=R(CyJ+|MyX8O78+bZL +zvTsu;MyAS_PthXczp0agfAo@TcQ0OomCoBC7AL%&VBnz_rsjs=nSLYsdB*`&S#W=c5zNH;@(I$#XQ)D+~fF# +z)VFe*?#6G}bGGe!$5*!=zSidfE_WUSSUv8akz^_Frfr&jI8S_5W6ovFH2v#5x3Z|p +ztuXOvL0pPrsm@476ZjHy0j*M&>K +ze%+h%_%v})eaaPv|8VdfW&B=>owI%~`?mLpyDAdFn`x}^l=*6R-nI3x;(4^64dgWx +zY{F+on<>{f8&^fl_Dl<})%Lp=4+Jg)TYHyAZ}Gh!`Dlu4tc>Dab}-Y +zuCKta7pzNbQrWR}2{ynZ9M|)&^_H)B`rmRJ&!fDWI%8@?Hi%A%cjOHB%FMMUwlZNV +zpxODWg8kV}8|thQUkJZZ8~$7TQZX3eZ|Xn%zs7H&uP%70!<{mRH#)?3#2*=B#)gXT>q@T}?hxtXQCB)qR_<)Vt1e;3spS^YQ(4oH1J&qnMzgE^2Pf)p+^YZ_JTvJx8n|FeI-W@Na +zQbYXPU-kFS!uQ1Yfotef>*^vGjbs$>U~_Ndqu$+(^z9e)C$^XMpXU3OG}e)&lARwt +zQnSne$K&@?`?HI3_1C*J$d@17_kWXIsgiYbHWm4}o}=z?c%b$a1y5W;){w37$1VY{@=L%0Xi)q|@H_Nv(fP!7!Vh`XvY +zjo^Ugt7?BUQ* +zQ0$i0))iQ_;9y>~7L<5<2>KtBhd70r7y>x=MzS!n*b#aj=*=F#9t +zbd)LFfg14knzseKz1AAj)Y-xuy7!ow$IBjI)($+|yF&cCm>4E|zx$)Sn>@GwReVg3f4{8%S#q~( +z{Olc)gVuiRU3dGcM}BR;ck*3t6=+_?cip~fN99!F-$k>wd=ceI+7$ttEoMYc@tCTs +zIAqcD3~)*Mj`&{i7QyyR!`&Vbb33woU61%|i +zzGn7U{7?9?h4a-c|4;UDq{pP%pS|7Ms()!x+iH~i78;83n;cg?W&Bo-tA*&h#Iml8 +zl0)Ayjrk`27tJFZ(c>F4(GbnF(4TVcYppwxvE=>jlPxCNK9gK`g6VAPj0P^M(+Ny( +z@#kZVNnc7Cb3C?}&Fm%XIpy04n?w8Av-|?$a+o;%V=x>3i6@g=Vm)gGJD_j0| +z@oTx4pt-P)+>XEAdiX`?yvBcjPw^Jwv6Ab+0{v=6xAdoSb5D0c)V33>I%zlH#oUhU +z_%QXkOTybJ2jl4S9ZlFwjqrc$hFqsNmqn~;PLABOz-Ga!08bM1fzJUwQZhks+a3R* +zk1LBFxqa2cU3NUh!bYiEY-VJYC%D|(o0;z4!gGRoTf1prd@Ht%*0%qzwjSQax;p*- +zgr~LGzhOMxL7f@k=^2c#HT9U&b4!Sy^!88w5@!&n87HTC+)o>wF=;Nh`F#to&jhcf +zQxLf8;kEF&*{f^ixb(MTUw^p&Q+AF$@TmlK$OE_yTJC^ez^PhrYLLfPQ*Q0~K^sNu +zEA{#gX#99xPc)_Rds_zM`;D3Wj(FwF?Ir0#5C4vDt2Ni*$9b&B&W(ELEOS=n=!1FV +zXE}Zh^`E9}vrn(WckyQW@pOHy72JhhrCSdAtm@D)Y)s0WO*Y17qGv15_^cf_#(rE( +zzk;P~K5sAJQ#MbXeZyQb`8Su?`i0aL-XuJ_vATEhNp$ak|22l_Mf>*csa6JQJzM@V +z$cKLCK`L85IfwnkKh!6C?5=Uq +zB=%0a$hf=8O&dI>6&|o~`LOA!1Ub1`XGKOa(Y%MWO>N%-j|w6&;xb>3*K<#b_+Zsf +zn=ehp4x5S&a8tIB{|os|Y;C%j-=$_+y1-0WS85vAJA7^UDSqM4?ZvNbJMjC5Asyp`7z$v_#V8o(_iP|0jnz-d_|qkRC4%EJ=!>Vex9F>V#d?Fip{bPqrc4) +z_~+*KcYXDO{y$!5;j#QLtgQPDyymcH%et8+)|4N3;HW#fE$>dAmr1dnKjMcg=3U8V +zXk<41WFNh+e-Z0N|LAX7Wpff(S-TiMsdWzOl2OJGju*2|}Tu0 +zV;|knKHlZ;@V*pXR&cT^zBh{V5-VfsNrSv5nmn_!WhT?GC +z$KkO)4wq8j;;_}5g~J#6IDF_*(P-Fag)l`OLoW +zy4-b<-}bzd;9M#sKi&&YU-99TqJP2Zx8T-)6i%b*OK=+D@q!cA`1Yc$ho24M(Sga9 +zKffD1f9~s_kJD}_JYTA@@advV@#+EX2mC$Fcfs;Rf6^gjzV$ucN^F&IcDBja +zU~Tw$+@+Wa4=hO9wWk<23SRRqJqet0rl*qVe4cJo3*IWmv%w0OZs=V?06?@7e$9aw&q&>_Pt+}jp_Mf`hEcnq*GZux3;3qwHfGvR{jTi5^HV` +za2CL5dwxO&o`rvRO73!h9Z~un>EjOHsoUVur|y%`4xAZ02MqL=0AJv@;L{uN +zpMA!{^!Z!19zFoRFfRU@8@V)Or+3&L6H1&G?^$K^x>lFS7x3o^X +zF7e_AyDjcbz^*M>e^<8t4^#%Kb-h>|34_GYy1?&8}-{=0Dw;p~Y +zL>JZv`$oLoFMpQuS12z=Ce%tk0HZLk%uycnUF-Qh-iVjNckcAtXDH{)%4;l#L8ZpX%F4_*w~kHypv +z=4k!-Z^W+-*8hdAhd21+s2}wa_Psqzx$t^z2(KSTwgh-Bevze4l>L=HP){tm#*&RK +zT_-hp9&dmCKF;rs-Rzls55~L$jvs87zSzqdS-CHV!DseedeFbdmm?RY3$uUdz25su +zN5Pv-DR5qShNN3Ii?2B3Pw;4GZr>uE5q)V%zJ>47rI*87csrHyMeBC)t(m-g;uraw +zcq0#b*Lhm8aXncqeT6gB?#+xTy(G=}TbTb2=99knzW%KAmakpaUxePWlW|&To8~uT +z;#1R^>f%fnzYp=-@H@}%Vtz|M)xFhVU+-Y-Cg4C`4fIs}&)iuI`$n#%oVn7+6`qWh +zd=>xExf$!ncAU}JbL?kNqVzE^pnICT +zE#4kIxL)rtPHVB_^fp`n)<45rTAgz`K7u`3505Rvzt6q8Oziq6lMB2z&F1M|JHDpM +zjB`UY;ane0V2g4uq%!lb-hDjo_VPw9_Z#q&%+IK8?Su#OF=u=1^k`4A&@4#r{N=oC +zxWE1WT?pBr7yI*RVm?vcE*30z;M?ELTg8n9bNav=@O$c!UjFA>pW{XoyPYZ7|9*~L +zN7S@uYRoO*&D10EEq8rYc@a;8&JJXv^jT(p3axc#q-(Ym&Fx?9Ou_FpHJ|4EL1z?M +z{?8K^(CN&{MV)i{yZ8-#~UtN^I&e5Bb4`p+`Y(|0{vUx@qL_Q2_Kqou>7fuGptr;O25Y5 +zT42j&Qie`|KVP;ycaFd<`88hqmMyPC$CyMN#VCaN@@T(L`TxN^_TuxNEUa@xODEd% +zfxM7B2VbG7Irl>c_t#Fa@}tq8m*$Z7^Gay$xj(c1vl{r2<{h3xCuRCR5?T+=LRBZ= +z1&b&*yk}hjZgh=WLOjMx-HL^1hQ}519sZQ7cPicByt}gahx589)46vRT+lvr!4FKq +zOMUoBwqFFkIz{JsZxV5rDXqEg`WwmHAL858`-1Xs26uG!#|w!cdKLV+ik!b%izyoE +z?!I2{=#ANa+Nim_t25d2cN0U?_at_O`jdXFvsL-OOMTx`mNwRwL&id%uM@kX{yO>o +zHRMLPpSkp-^A!0_bU!l}@}0csw`-!E?tj8hRz1V{aSGg9?GW<<4QF|ydIvB##JSi` +z;B&}%qHmXXHZ><#RXlfI1GwRsJ&HpS?&f>=tuuCqxo^hb3LbH;zC2&M{C2(R%bFH) +z4)y?N2cORvXYt`W%C>;JT5Dph)>2@_Y|Cyc%2SiRCMJcfP>998WRt)@>E}d!c#37uxG1Ny2gP`6}?y`^8z# +zA$su(?1*S@#fK)Pox7rmD?D8XpEzf&dJp|-a9Q`SsGHUPrZ^`F^y|m>`}-E5p3Ln-(%l<%Fg0fC$N_w+1C#`$; +zTF1}m3w{XiJBKse199PF!36kzO_cXeE8Vx8DeD4SUN@ijkKbjzN#Gk^^9#nVEm-p+ +z+J@KF#Q(vX6+aO!yOgpS3c+9`5b#*?4-k<&;xaaNf*l1$7Cy%X7A$y7T?a`3_p}wuI +z{d)XKzc0pVH|Q{`+e*LT`qrkk=X)E8X4Ke?)R8Yh>#=r&E&q;R9`3I;)L*bx{nmPm +zDf4*ODc1Y9{v2OSy|?{ci~qmVS%STm><`xXjNkr#+8^@gEEojwGi`qP9hCP{&iAx* +z2@js=*U}qa@pK5gR%`-vn%CoB@YgzxcK;lLMU7v+z%Q?+{GY(#L3_f+69|sQl!ajx +zz&(IZ@7(u>&z1iCAEz$(fL=9dPX_%7#)3^4E`rlizioI9t@IPL8@gXj{(Nfj71;Bj +zx$x;Zo0|Q8GUxFPwQd{QjU1xBYY8d%wfDJj$QLqqLL1h5b)E(1U$X +zg0m;i^#`!$b(W|Y9NCk_SAE&r%U-{23vB~Gk?^yb|H*Tg)?B5x0jCq_vDm!1q0C&F +zgYM8@-aXbxYkrA%DeZe1{k|Q-#Q;}dnr6!nUAOh{{t!+D@kh`3?RQfCYN$NG|sXh5F<&OYIncTz5Y%Fz93;d>eDRlJ?>zX14QhvBooASan-%mw&b`$yJNr`+Q+ +zZ*I{4<)$%x8fVUx$kSnCUGF?7Xd~DJ?V?`abLr>GEahHbQO=-iI5X7SdB)tz_bVCe +z0(67^k$U@Y>9RqGcq)P +z@^c`&(;dKR1<`TaV2-fRXT_>DobjI2kUKV~XH8yCH0BQS#!NMa--izy&CF4GpF32TGn&6 +zNv!}L$%)OW;w@0f|MOPv|`CO!Ms>DI$zLgnC+H&%mR +z-b49^{Bp&wfk$5X@7}R%>Y{v9sGL3V%75#Zw^CjVOqdsRo64Vxhrm0s;QT3hM;UdP +z<0mre>}nC`KuWd*--&)OHL2N@1VCTf_X|m6YUrHINL>i#TKt(jzQl+ +zoj!k#cTlGg|H57VI)eLFq6zpzE=BpilaxVgxoMQ0#rT1&)NjcP$?)Kt3@vnzt4IZ5>8SS0ZqVEpI{Am2ulqsG=wzcH9!u6hmr**?n*XTnRrF6)KGSyExGiysfiDvyXn4##tr;jcHS26(x1gnr!0u6`77Z1 +ze(r&E`fx2aqmIc9WN==&H(l1w88LYXUyhfiT9cD*Xib)y{qd)KUnu3slP_hW%yBg1 +z>pYo!M(p7p-i1NDy@!k}Gv^~uPAzjrQ>WN;p%Zi^#x{2)rt@ZZMajd7v9o^Y=>$cF +z{|~G|pLi|aR#chz9=y5SY|4HBJuPZhAv?PgrSL(~mg_{BQx*HNJdd9^KfEaAo{B#n +z8K}a5MF?%-D@uQeL;nPn1n>MEXck%!6d%K6*uk_BzJUOIt`EP +zoBHAlqF>olqJ_;>4mTTl6QU}X4SY6-8rAQKc5E=$VEi3ky;F~W>#^}o$NkjT_`^9z +zuw$2bV+Z55oMK#0|9_Y9f>;6ZldF%77j2(JecnXgwxx>u0#*AqY_7VId!dT`f8)5b +zJmdFkb?Eb!bg?F~vqdxRK?8n|g8GNi=u#)da^6GfK{CGc5xJ>Iw(>}a^ +z+B@x;)+7E{>8~Y*o|vMpV0VZ!dd1#tsfxkFm*h8BRd{RKTs1GNxCi((zF9l>8oz&? +zA6UM(FW&91tCTXyq<7nA&9C?J!TDK#gU%@CY&vqj?H`zysuC|oz3!?CV&j(dH}k#3xiA*+=WBf1{|@>&{`_I^d|I)$i^d)w +zdpnc*@*fg!wOz3Vns1%v%lTdEUtZ#V%3|hfV@V}10$HN@3$|sZ(~~ngyOtbTT{$Ip +zhiTmw?1wRpE5tXq`D@Ly))!}OJv@vY_!rvyE$y|eyBK}IDVpFOhKH4Ue^27wtf@Wf +zCymd)j=N~q_iXQ+-1`v=yJF5~%Fr`1^eLI8bDHqoh@1KTWltt4#$eEAHJk6{w3Bc8 +z&%AQ(PjmND?f=&Ww(nZ%)KV6V5%eF%-BRi_c>eRjvy0$7LT4DC`X=w``mt@hXWG~v +z^;7Ge4bX-&$*Z2Tm-W>4f8rpQBZ%KDL`8)K3an->)Ptw6eBUiwKL_-Ph{=<31q>4W5-b&saKF`hz +zoguTm!N$Q~gZ$S1?ckoUm4W->cm1oacRzKEGqU3h;sLMX%uV%*+2=pv6BNJL@%LZu +z|Ax=+7Ew3ql*_8b`WqD%l66i8<_RE;AZe-ee{0i&KOlxtcT! +zp_7$AwQKL9P8syk2z{LXF7$D}Pam}FxQ+ViCrlsL@@-&XNnZDxRhC{Wf9jb2cl@(P +zV4J&?IuF4QgSq|{^YrEuI-7jW$GcMM24|Dals|Qboh#$#-cHyYdAbW3v{#=x-_*I$ +zY@Y@Le$zvJ`7%U1TDR8*7&HXyr+nwY7;pVSjIr?cg^NBP3Ff+$K7+fL0sc07?Op;F +zi_%s$+88kLZ{euUWhyvZQ||0Sd|%LC?sU$3AJ; +zef^G7x5n?|4C=Shhva$GuNUm2^oc2QU_9&MUQ+13 +z$7trHb4ZOJjQujWr~S;w|6TL-VDn!!--XQS-R7I{=c_etAr1js)63Z_I71ul0d5E{ +zjTy1>JDrw4ImBg@(N_1-iaeN)PlxGfID9kMUl%_D{j~>Yk|})KP57jPa+Ou$1FAFy +zuIdK$qSPan`hr6UWdqD3k +z)Y%EW46a}KiEV75U?5+ZU?6*Dl5wAF;@mA|CbVD4+N4_++z?HUHx;ppqKPqLn}5`3 +zR<GO)%q>~)v&V@{ +za2Y$N@m@uSNKREA*hXBk%}o{H<_9Rhf;9{syP2^+ggn;#D-Y~Ro@ai>TRN4o3a8TR +z_ooBD0XGNw5+Rw-y#RcO(y!kYUp*bS(bog6fL9&_7d5tI?5*gB0sMQXSbUV66?}sj +zeBq$*QG3wr#dA)OzL1MupGpX>$W`#NGE?DHyRqw|_(8=_s?$dX7U09vI}l^?KRR}n +zy2c&rpQVoNegeI1jjQu&`UMA<=I9q5V)Zt3`jhHy+P`W~2f1^gCbV}o%>N*~p0f8L +zQ^sc%dl10kd>;-0jY>Z3njFBR_7w1lG2fdq_1C-TqlL +z#>DYy>P?z4`R&KfPM5mX{@H1D_k;LHmja6`fx|rXlvw7-Kz*Ly{~?%+W)1%anB>AR +zc^&&K438a`T6rm$1@cFiPa*Z*Rw^@z)*G +z=M)E&G8>RL_he-IRFy1DR5Eb+cVy3OA+Wm-!hn6k^xn_B})&HZ^BX@g;-dU+GS)P!Nh(El(im{@MHLPf% +zdyx0QY8fl)MBRD#qIr+l-Q%|P^aO8d#0C} +z5%skPoQ9xprzn~nhEL`BPuV<)u}GEsG5Q`LK1Ampg{CWi8~OH{ui|Yp&c#|xay>e6 +zj{EL8oiz}HksJnJ;H(ThCME!#t(CkeA6ryNZw^g7Px +zpo4vz7I}Kz`{QrI&7pVK{-YG>fpSALW{>$nt +z&PuO*{*n{z^T+vS-%vST$6v>H*|pm5)%-nFo>_fnb9*4mgag`JkKZD*BSIn3%XH<*NLZdpYvea9$gH@bz3ZXwxYVU?|u +zZV}B(_8H2X%zek?=OJ4qXDjzTm0V-cf{-T +z*5owu4C>xlv&ngTLp~q&rj)&znW-=ZCVTTk_GS`$ +zvwu@Hb((0C;$E{Ua$LJVR_@hNb}D%u$nr+>EaT7g_vL2xrL^O8r^nwHotN5uDPx_U +z4WNE0Z!*uaFQqx@q?*sac>A*7-xvGtr|2TA7d`t4?{46B$uHsed+pD;$M$C}`!h4k +zyB|HLMb@)Fx$b|Yz53U_TaEI+TP%_ZLf +ze%;N|?}%j|ldo{DCqBOdeYWzH=Y+h+i;rOue5Ml~)IYM$91>l4zAM>_V~z~Iyx(rxH4x +zlKXTBhSiKK7{Vig;Z_fZ#_5VB@O5&RrGxt&F;}SXAt;fy!aT8FZ=z$^V-#h@!I9Dd-1}-IAygPn#=DZ|6cey>gk?n +z(6_zMYy1C{-*+o@f*5Ya#b{i7PTm|Y@atSl9gQnLVSrBwz6JeSc+BW7lbKNuK +z-BNhqVrbx;wU?Nq4>z5bkN@due~f?19PRqFd8zBN)Aq(cbJ}m?mzpQKCYuMlrl0m& +zeA;QR#;2IYT~p1RuJ~!M#OqIcIesyDIf$XzILVkF8RN7eFI&$VmukRg%U#25jK8M! +z%1B>)Rmh +zgl#s}%O@Jxy<^#D<dNRPYX9 +zEx4EbJ7Fz23*M7`SW8wIbn{DDgK?uX!|<>^zCnFCfQ9x{JmxkZ1_5pd^woQw{L?z; +zsLhNTwdBaCQ48|bE8N8LNSj+2S?0Dys@=jBt%;?PrEV2A{IbY=x9XM@<#BfyF;i`k +zd2VI0HF42JOO7lhX8NLw7Vu_!++BujE=anxn?_vFJnG>;>5lS$%ymjC_`k}n9`7cu +zzIw?Kjdk_a_zf7Z$XV`yD?dx2Q^C3W@TlDVTBg-pGt$ +zdv8cwvZAMMy= +zCmYIX`{BLgW;8iY{2Hes{=vQ9Z8&@H-80ParnGVXYGsqNrv4KpPc@ifb@!aL_vwZv +z`Zh)7_k7OTR&OFNtc*u)bK{W|Ynac^XZg8?pC*1j=fzy##oE3R`M&$r$ajGEwuVY? +z%%>YP-%qaSNoc+rTk{>h;;Dq4@9KLr=5Xh?^`@{Ot@&P3vMo_p@?=7D_|V?H4I2MX +zojvuMyVhWae~$Tnf92;`!^cXVN|<4PSUG&}(}~Z~w<&sI5*|4V_25_b<>8P+zoSMy +zXn%{AzPKkHcQA_4LBs=FPnD +zr_4mSv-EUFBCg|zcKGb%QqE0n%uk{DhkjG`8|6#Drd!;7c;KV&3=F)` +zALy6q$;Ew#2ma+qsriQ$(k&fR+}CT4(l3uKqcd^8ynprNALGOP^UjF5@NbN{s&kn6 +zT4&lhC-uejntg^^FV&fal}x@X+P +zCHq`>=byPT=VR`N?;bZJx;~aDzroBfg=@3)3U{tSLwpNKib +zb$ob*nNhc5*bMo?nj&@a&Vg|`r)Y0|-2rFD>Ve3nQgm)(YS5*6#|fwO{%{T( +zyJ|e}WKRli1fDkz!gB+-ex|v(bF`UxFF){}N%;?%OeeqZEjG`l8%ET}k|Qc&PmWmX +zZW}SrZHVxHq#{;;&u*C67axD1g1Fb7?TUZ>wuwG@hB>2NIb_n7*u&YU3Nr)>H5*qND^K- +zf%`x@J2~jtl`Xo*jqN49B8m-t?Eb^YwjOT5erUyZXv7Cd%trD<6Qaqp8t^6Votkub +z@4NV>XtH4M++=>>3te=Z9Nyq2`v%^4xPRa$4;S9#CJzscTytb#M%Oz7Z*(0U_z7t| +z@9E+mGWR=f?mENlfA|CD*@w?GrE7p!*9Xo1uCvUuUBIksHZg931M4Mzd`|aGK0Kti +zh2hcc!DHUN!%Q3S*hVb%0D5^0n9S=8*0+5`n>%B~yjU^0l|8tO_>4OvvJg9RO0FJy +zn!vh7nm2&IJqrRJ*sLB*(B&;m*86upGGp!grY*W74oo7zw2{08`WqN^i;mGBv#5^pK#ET40g@HKy8;(G|Y?fkRK@ML-M7!%G#H*w+~_G8RW>-#B3{$ +zk-t~T9(|TNWxmZGv<=43`t5`Jy0y@X`nY3AAL*0yq4Asj_Oh)tzH;iS{k4AXygW-w3U47|9a@A>o8+%!kk)qHE| +zCzxljN1AW3Ki^aNQ-1YvyY?3=6#HxN9q3JwF@D^{iEs$!ROtIJ?tPaz-A{kvIcYvE +zd{cYfQL_GwV6O(>SGbZGDB<5s>b@6j)K4&vxZiFx?Sg!G!P^MM{(Wru5rcOU^hUxz +z`>}#U;ki3{{M-Y4-@`#Ep4=AobgXZz%9#&!qj(c@2eUjXxjJ +zpWrF_qst+Y71n*OdP4mRk|rCy0&b_ZoJWUs8QllN5q +z$+pos#X`!G_%|jYV=e>sK@QHYb{jAKUGmP~?c?{w)MfmYoHKiRi1H$Jt+0KSdt=!A +zok81mZ5Q;n_-*qa_426FcEqu^_xf#Lq>Qy>f;{I|a +zep|fn!~(E?2YW5d$45M3tnxbL6)eP2tN +z_46wiAF)b|y&F06^<8$HODR|Gq@}9|b53_WWy_+JDOOr->cE+|pC8OQ{TMk)1ANba +z1bfos6EA`1|H7Tb=e#%u;dmu+eB{HSfQVGZd0Rqkn=>BhNVr@w>WEBU|jnQ6SYRUfnYna)iY +z+!amyHStiIuX0Bz9#v;;+Q%RKot=~JY25KATMz#pyXYopoH2pRoyYPy-AvxWoAJ4} +zmO=JKP&!z9Zhb|On;cEOhZt+bU2gKz +z#JDyS-&IJwf%x*Nav6N?j*26#ZSp6M&jxP;Xs@*%-P`E)VVwK0-RG|o_pUh@^4Mu# +z%9ywAVrg%JeOdS`JGU0voa6IAmpA3K2dWdSb>m&OUIX}}bHGOGt9&Hu57w!@QtSq? +z;w$DKTk}2Zqtx9#F!vYp;SqwZ-g$6nCmiIxpX_yfC!d-<8}nhNzDt}E*m82k6@FjO +zmwU8Co8QX7XM?#Uz(@7r`fW8X-!iM|Lv`)gmDwpi-;yu-=i>(H +zv6*@9NX#X=zY*mlt;j{vVymZz*IBl@@M0_0AG~UIF~- +z9QZf6;8r;g^;JZp-aYQNqDk(v&|sbE$kci{Wfv0jXLDl&`7nZ97{kDM?mcIB5=*W- +z2oCY*TWQ-wpM|Dyh5C$|g7vbOGxYmC?v^#eBaCTVQE29^C^l`}r*@LdUK^L#L?1i3 +zlN-aIz09e?_O8l2LSM5Yudt7mX>y*e&q0Tk%vrG5^_|;SWubrKY4A}l=?AXeX<)6h +zHN}C72mGYZu9>oS>Sd}w1P>l-5|`5lZPPjP5_JFM%I(DAJ>A=rsA!IISGR}UCT;HY +z$ZN!*RVK!9XID8+6pN<2yW_f#!cW@VB15^;^W)9toE49nqv;oVO|quhB)9eMPK;~b +zok&D>;O8z#*324{yeu*fAOFjVPjtW3FmBd>cmKE4?5KClICosMH979U9uM|T(H{2} +z)@;mymE5OjmyNg69L#+3z#h(`cAr@sWej{lPEm2P!;wE_9Pm?4wNHBY?F#w7(EN0z +zzJ21rwg#u@6Rz@27MpS8$lE*aSRNv1Rd5qt>U@UxU2^zD;BQBBf@8Bex=}uiRYewl +z{GECAgOZOfbSpjzKjD6p@{{(Dv~>hu+3G#iqrVLOW#|t({+xFD>)`Io_R-Am6ZpI} +zzYlRPIFFy_%j^sP`W|~jaS>d>hgMWeF-0_%ttJ6r^gSKqxr;jwQ}yKwXOI^J7?-<_||a=FXv|Qs4*0W?kP^&`2?FRBAtzi%xsnO59~+RIq=Gxlf)- +zR*xpnAF!|BTp;G0i|=z7^!v(M=rL{A{YCB=EzMR%p?ByxQ*^Tnosx@eeinZZcTFm@ +zKN@(*r{RJXVLC2w%#Vsqfu|1@gBx4CcSh&rv=5q-@aju{9K@CT&fI$VAN(_Mz16!K +zy;^izW*+W)vv9E9&D3+ypA@sMH7AJi*B)yuerGTI=wMyppG$q=+*?P-JpXq-Pu1O7 +z$tE*G`j4%@(~QcMQFn$h9zXGNO*n()yC^^O0o?p6+bKT3351tcl+Sc;9v~APqDUgvlseblMw%yS2WH&mu~^R +z2roq|qLFLBnVsZ19tW@WXvf*>-tFumU#;aI<>0hvahNermHXf3(N29dpdXZ(yH^ln +zogYj85x!05cSW={0l)S3TfA8LC7*_miiZjY+V@ywk1O6Hc!)2L^JARhyWG=05En1y +z{9XA_l^!(7&eUYs@FI@Wy?-N_lu7-l+$>!$85cp2Xx$z@ +zgzofa%Vaan$v~eTtc2_E(~XLG_@s~L%cQnqZEnnPS351Aqahax^tX|>?sDP@ +z+q`mnj{fl2&qsjAiW2YJb@25140qn)-IX3s7oU2JvcTR*kFxKdSl#6vFZZ`}9PW1k +z<0+nft@w|?z7ArZ^!|}_AK4*#`$jpj<>PL9?XskN@Y8&`Af2hfX^53YEu0E&bd%+b +zi61<-llr>{>)4=h;%znut7Cx9oD;Dr;? +zdbfAM=-4!4Zdq3izpN~3O^hX`y&gS37I`(Uye9>zRHC8_TOsKt9P;Fp56sUO6Td!; +zyJ-bZWvtgcMSm}U>k!|nTU!(G;&F$#A5c`(=H|_l*|#Zwo8O1{eTd)t`MsatZw~yh +zXIN`AvCx^HsCRC1OPp$S-=%5kTSth+RE)f1=5d~}BHKr-wtRKSDDUk8&LEIcS9o`U +z@A6=DYWakG1UGdr^mGq@cjE`1joo@1`L(g@(HZ8*Ch6br^I@0%x146*x4g|fk>(vG +zU^U&n4tU&*eX$6=t2)}1r~+Qd$}HzEf-AoT*GIBd-07^ptILDoS%M*FZ53Tz9_(tg +zF5o!KsRDlW!0(mx$>2BKgWt=*?-k(pGVpr^_`MALUIBhD1Ha$&#GT4S(i!g-uouRx +z@L^XEt&c~Z3wBFA*bOY13hc(@D~r~+6{DxK-{-E|2>*L8cw|HH$d)RmW=xOZfm|S; +zu%&Zgm8&mW>k=E8TVSS7BMy)J*zmE=_;3f +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 +zWvsC)uOahnHBpN$U}P +zNk5d1m*9O=-P6xPGwA-$Nrz71bCI4do1+n3N;KKBybb@=oIdH+_+OZ_wUdphTJbZV +zex@-8oyDk3_U$kH@00jGDrDdO(*Hi%>|gJqTa2c>9GyzGt;S6;_h#mJ=sOFr8IEph +zLFY4OL8g&&_g-SKSXXUpwCUdu+O+4Iu9)(5Y$q>B6R}dP$-8F(ocP=35EvDrMeWy6I+Xsk+2_5| +zp`_2dz?%I28{P=f+h0P5L+LI57Bu7YL+Iv+_G|D>V#^bSpW0*B^EobB!5Ex{2EGZq +z&%)g;={4}kD>A}~Chi=GM`nSO_DS|!6Y)%nYY=^2YaaZz@=|=S)51mh=oT@T2JELg +z=xvUfv%D~JS>ofIO&=VXyNj^}n`1T}eH_&uXy0Vh&DNX5?3wm0u;XT9!-Z(bvh~jJY(4A0us(>et!LkizSYM& +z?e+ciBU`U4Wa|xsUXi`tK538aUR!+|K75StzSmyE|FP-Z#D4Tn!Ry<=>9Np$A4b*= +z-S1-NGFyP*Yrc+t|Dmmir+Yg3g!}^5g-z|r#$tR=imQ^`KIdn4{})l0axdO0kmq^s +zGTh{sH&Tvcz_SNBGuU-y)>rt~et9kBm-ywO53!hcoRSaq6W)$vt5PfCQ)x9 +zXhhmgtHz+%2CJ1?y34K#0b_fiHzD1!yQ#Gr73)PWgm&F6yA=%--Plq~w|@3RcWn)d +zD<~*!?d~OD?)UYcd7k9SB>~*F`}zK%;m*u6bLPxBXU;iu=1gx@SxYHzrL2YqJ#?Z) +z>_IWs?~-Htv7v~&B<|n|%A;wWPeLaf%ADqOxzm`ga4=87v-GD4AGC9AVJz@OUp5B# +zdT=wGJ|%gK43!KvHdeRKP~Pj)h+chsuzg_j<-4?!ylhqHI@aW>5 +zOQ74TsEeJQ5B1KY&Y +zp2xev?{>B%k^k8L=4|6F`1@d0(cG}x9r$n*E8LKLK47sJTV$-7W8T0{M@Pu-_ +zPc~;3GYt&K>ofsRuzwHO8;XaNJ*>BT=Wn!Q(odUwIFlG#aCP!#LI9`q@%GVfW&7x{ +zm4E5O*tm24#)EHeJNg1^uz07=)$h*M!MES~vh8mdb^jcy>xGu{zGCaPQ1_D%P2G=; +z8mwdRH*9OGOzXRx@1*N$oun69*=x`If;$mm`iaxN$iIgXE-$A%kelK1VpDEyz;L-k +zIb*d#C(=n4`@tUJ-dhsaIe!J`UgMA#vKcDO +zdfM~+i-%cD&tE^@rA&HGC9-Y>u_!AI-W6k~7&`3}<;G{Q2p>-jUA!bgyVOkf_Hy>B +zHeW~fraAF)VC8KP;zd_*meoL8`@Pmt@w>~g|AW}>Apd4K#=CN~&Bdv6XT?A3Jwx4d +za5)cCUd}Sc)3`@`U*uB2&U#M2 +zqni613(?iEb{RKk8rS+!58!7QoZ~zHY4&FW7xObP +zhwERY{)f=Hc)H1#(K=HuABLx;vn=)by3z39%mjH4S(}E0+guu_|CDk8YCrx}cFM85 +zs2A_vRzm*JdEE1vnbLl+$mg9P&Q^RZ`uMs(r)uCy&_?qK?g5A4ol53HnM%2FcF%!28OBV$A7 +z6UEd$NS;_?`r0^S+>u+KdBxJ)aCI+HC;2rWI?Mg8o4O{qA?Y}uPv#Yp-wV6lGvkk} +zuYtGLrG9LR>Cf=O+g0BoYEnA0!@19`^c(%GgZQ)SBOCfm_<^|alyJdbMl88(P5Vs+ +z?U@_#2a~xEV(*BG$LkMb~`0>K1=(=qp*rKC^}I#0Np!1@y0Tt46`Q-K!ywcsqHJQ~SoQ^)kZ=7JRz3-lN3!weVln=$lP$ +zmTBb0o;s#FJ{6vr37?noO*!$;(xE587w_Y3Ut*QenXX8blbe3Fqx`rxprf2`?w#Q0 +zC7xh@N;#b4*HmUIocYi&_7`?WfRC4Yw;km!u;a#E1Wm%`5s@Mw!unXxr)E@6){*@s@+_p!k=7_Y`xXb05iE +z`4IIULOA|iz9s4TihZdsn3MjSH!K{Ii!@khzm^nrjTpoIe3EredL +zLBG`9RCFkR-d@D%-6MQfP&ShN5E;f!h|oSt`EdMx +z@Rx$czDpgp6<(w~I)ePzN}Xhc!F5RPbW+ZGwpw^cwl9{`PWrIU*V|p?0F|$C(2f-y +zh(25Gp1oI2x44SZugVnTWqs#wRDI=TTUTIUL%;It +zi~W2PEB*R?zu0!P)Zf=~{Sop-ob`=aeMKLzeQl*}*cb8E-`ny|%I)5_=(zLy7V3Z* +z*=hIWk^H-X9;JRX=V(Z0^XQ|;9iIxHr(}zV?s=k*V%k}IV-{yT4dC{Ac&&E8M-cE? +zu*Y#HA30f@Y(jrI4gJN!Y2#0-LUb=(gZ^4suU5Wo73~M`7CBe5m(6OEP9%HI<86RI +zHY+~j=lk{FcANuksi2t)O69;9lruu(r+eICX{W0~b+cracd;Wdf(clc-`h9IbPf?ySbZq4!e!`RbF}H;DOzDi! +zHgY#x)w{v=DIdPZY@+YrU7a%M-td6obKB0NK6idU^W(IpQm6U#7@y+j!ReKTe~Qr6 +z*k7TKTIgej!I@~|7yY)+gFoMP^!uT`>%3w3sfRY5@19(L)Y{8WuKf#JVDo%mcSOh7 +z%vthgt-16_>5uh!gZg6={f`s}kWU;y0lLXN+Q=_kg>C#fVr1}XnV24n&oSvna9Y-~ +z7=QIXeAM4MR*oM#;`{(QdL+5@nikHP<(pZ<+0_c-n){CwI|tImPH#HuJfB97;BPm7 +zJJWX#tcm8JSmFngFYb{K)XHj`Bkj$qX6~xDKr`~San_Pf@NelM?IF4Rl7E(;;QL_R +zmYTJHv+8Dl-EO7sdic2$Jxp{K!Ar|=>9^#%4a{W}6)^YHNwv48(f>t)Y-1G_2n0Pj#@<3yle#UeY#UQvwD +zoJ~#6PoO9HoL3l~OYzN$UDnxelY3#hw!^~ha%SF4-z)uf(K+sC-M1gnJQh7~+gxYH +zwrj3<<$7Y8Z}jUtzm9m>);h{{c0AS{>zR4bmz5pas!#jvXF@CYoExnv;=B3KL(6Lq +z)+jFZT&J-+wmm=Y6s^pZyso#yreK3^uNtM;v%@Q}r(f-IdT+|K6fWY8fd`?Xyd^>f{Rc-ayk0ph9)he_X~8H7g}r4$3%;w +zKha_hcDra$d#m=?I(~~D16l-6X~|u1wmAY#UgF<3IQTOYTVwV_or@B0j-6r8@3;KO +z;$D7_9@@dcTzp< +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 +zIoA1=5KfAmhnmj-Cucgb=Cii +zI`B;ZzOPd!J^7RTl}wNwdLO>NA^ZRLPVR4NM2`>rP4yvv(>%VdGyBNUvx3>C{CI!U +zB+4Tv@i+aOuU8%Z$Km}=dni9_;$5!CX0A-ubB~)ojXu&%9H#V_tI$bw)-1in>LU$Z +z(l@aW@kc$qDTTgLl((X_IIn>iu@#$_qq{VtyKp9l&I8|=_?Nr0i3IP>EU+@Ok#RrZ +z^lm3s93CspD7L8FS<<=)ANmwx$CdZn=KJRTVEivStL|ps>|sw=Oy@$*M|R_jJ&b;o +zLBG&?)RXh(ale0u{-g9=2CgTNqjqlPO_>|{W)}mzFFkQe^g@I%Qq{%x*i`wJ~oI@PLc*E8mY8GC_YXXwSg1gUx%eNpk+-h~9cM`r9P3R8^oCO8*G=nOdTJ-eb``y&tMV;VLT{sr;N$M1*EnQB& +zOmd79|F_26@o9Iaw>7aQ!oS|F>DzAMX#$RBeOKsux6rTXM{Ps{XZUM$9raOX3I6sq +zZJq9%%vSsd!5a6nww>sUjYfCu?+VuUBLCYc-!>7i)J!aqOZlv1i)pZ#i&vx=*K5?gQy9wCQn`OKfiDDROb}uH^PT^tYQf5vQ@I +zoBpA<pi62s&D&eOR}k?+ie9G +z`0+aCL_wb?0a8%qqP-pAx#bE44k +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 +zAvgu!OMd{kF8!P +z-%^js&thX#H1|M9{o+3@=)01;D;GXw;n>#^!VPfL_%O)7vx_>}_1SDu-x#+%hECAz +zK07V`lChHxJo4|ptZ!1zD_1;yuxiX2pC{3ElYIX#*j0*y5H4hQ{}ew?upcy0A7$O; +zI}P#ziGGD!-TR4i)*+v&aI3uG!h5-ib({w-4nML7`|%nlI)G;nJj)l|=;Juy^gj|| +z42_+@#^HXcsYf?EGGU)T|G%?#%*UKgXw0sc`mtvf=Jfa;{cZC#oS6$w +z#WmQxLvLXNlCRUxdk}+%5`TkFi8jQpa<=q98+vS;-ic7&FwO|zd)bk8{`IsKjCJID +z(_Q1Bf7vKO|MD&E{F-fFM*BB(K0Hmi#O}6t`VGCNSwF}-TCadNCG*5f;!EMM7M%R4A6LGfZ^rxdCZ2=Vj#xT5P<4^t +zW+`p*O`G0FVz1p$gFMHlW96`LH3;kA9wIqvZEN}b->e$z-V*zaFROSD;StHHsDU?- +z=fQk!AEJlM*RB4fxrXBmjB+3%E7U>V=O&-k&zv6l88{m=b&^JoJed*Y!zmfQ^^#+KF% +z@V&iTCRvO=cjV`vvEv^5Yx_=z$^xH`*88^5dhel4BkL?Z(7Amj@y~;DISP)X8=iM) +zQLSY2pwH#k_*{Nvd@jY%LYx?(h0NQ1wy}n@*Uj(@xSN-3;@oSg{3A~PV|mWf4IRkt +zPnmVMI;?bB>8;mbr$bX|>8=aWTjd|)yr-`d9rY^yUD9XgGZR>a|Bw2#rZa+4*VZkE +zcXfs&J+g>)3+N{S?8G5$%AlYAH~J~^t84#v*7q&fTLSAA^l{F~Ivrp?*SUt?8qoI* +zz%l4^-TF20LvPhNjH$j)M?OcK^UQbHS?J4yZIiSO^w_WtyNvQtoU<9I@wHL9ns +z!>so_a`?XS*aBy=IVV1sb%#cW=&)hG5IAq`^w)m@u@QSYOD1LtfBSizka=~Abjgysc^16X+q%yZ{4}QHMPDUc?;hQ_YV=Lp}59C +zcKmzcpdM}Pf7)H_JVU;K2ay$bXB*etx$b6PR;#{=`la8yB&qXX$8|lu(Xf>_8rVCD +zx9A%e$nroQRnT5?NbSY5OTTx0tK^U5x4&*(bQ9xTqV-a<=Mo3DnlnG(QfzK!ot0ceW%cmFr{A?@yD8gZeAq+J%(ha#b(r!_$`21yo}hg9Fy%`r-!n{kJ>|W_ +zlzWtS4pUx6d4Mywuq1}9LtfD1^Yb~h8|z*HUfzHgN0yI!+L(urU*VOtX{CLa-orru +z=B!?NMDYEfZ0_W2MSdvdQRujRR$pRgQQzC&w7ArFE%f^6hk>neKVd +zJMm^WpRS@wy`#ck_R71nOR*g~{cjVr7c45@ifwtz0IW_M`qbK`)K{^mOLoiWt+=*K +zHkMF4*-T=&DhsDnR%18k6VJt40GW(AOGbBVCSD~PtvzE&v^LP4C(+kfBcEm@6o-*# +zVq$Akt6a~^WJ@+OUZUBJdOu(u$Fk84gYsago@ihNXMgPDZ08!;$K-J``mU8#b4Un5gRAM5;_b)tcZ)U9$$SW~xcY~k3-h&iteDmh-LF+jS0Al@!kK +ze(s;SiauWP#}ZA|(QcLdP|S5Up{K+Wd4)9|_b$5~XB9ZUV$ItjSrzOT#e&P{mo4Bm +z;FaNWdk1k^vh8%wPWTr7FY#g6&wO@$#lDO4L1?jtcyXKCW_l~}=i8;*xrGnKjsky? +z`S`KPUpeW +zO^z5m>EE%~fAR0AvviHxehA!RKO5N*j$fKbzoVQ+;v#Z!H>h{?5MvwUY`e*yoA^%O +zi1#Ma2k^EAytf}2rJQuZeD~jrkIl%{Ey)Vbb|vF158Ct1%a}7ZO<$SQo-B8kCZpIj +z!apWvCOsCxg=?Y>`mm3?#%I0Rq;Ws+S@qXUs0X@aq-(&Iz +z?eBO9KKX(KM;JcEW(vNjc~fGknL|7Tqu>%eI`s5TRfo>4sFU9u( +z{)U53v7NsQeDU`H-}i@sFLDz2bf^AzfiHE>spIeK!@$?X_ZEMa_Nt(_@cLTV=A_D4 +zQ=PGi_E<;mlIy%=dNRD0limX?OLJfe)^pG5q41mt7U9mqGiO+MlJo_9r$qDfMt~$Y+>w%qt@`tc_%) +z&)|d79#)bhA3FPN%;Xt3irzsSWO7vDC%q=88=b2p`Psrty)P4&j~#pD(TT5Aw>Ueh +ze}muUqmIKIe}cT#Jav!ZZQ_+~XJ5D~S?qjfT@m+AT<2x^x-y5khm?T^9G7!Y&WwuP +zIjN}obh?Z?LfZQUcQr5zXX+>7<4ff;Dc79J!I_CIn&!k)=%K6uJZIk;tTy<_-9HEP +zzE=5vol$l_l^tE-y!}L3i{9M2FeMy)kNHHLu4I|B&g_kvPdRg`U@n4(*x{65)*M8? +z4sb`93wN6a;BQ$mJp8v(F8Fr?b1=UkrcLvkN4 +z?_99mr>%mynNGef<$hbqM6dcZ-ZlCl$rPmjkzWh`*wsotg(EfN-s1Q4Bh%gP`KO~p +z5@#Hn9*x$F8M7o-9(8KlMn4aq@P1?q_w&)2&HB@C_`6?orZd)w*Tf1Rj~zgd0-X3KV_!w?ra%4*cKnw4$5f@{n@kk+%w@VIl9gZ(0CxH1YbSh3-8Ql6LT3jUlmNk +zd$1nD{YCz{pX|-cz^QP3rSOgX5uDf~iShI|5BWo0WO&-z(WghdYpRdhHj+{M@7#8@ +z6+6RmPQxa>+q^m7;rG!)U99l)F`eDu!%mEidNt_%M`DGw*f|HzMaSLw&)JP@xEqCS +zI=8z!JH6$m)Am-mqo>B-Auoe;Zuw$^HGKfvLa;5RU%{ciPjwB2p9;Q{y?8WF?~`#( +z#C<`<+zVfdjZ{ot^WhS7n#t&dbKt>-u43bVpAHYtN%uWIu!gKrP4e(x;Xf?2chCYl +z0=K?BX!X&X{Wa3~TWPQHc{|MALGfhWpLc-Y@X +z*xvHFlbg*8u-;`ABZ_@3nlLvv;)>Yz4H>eKSCH`~Q6Sb=*z4;s`>xx7hiVaDF-)IDUm(E#R#b^v<>N&k4`_pRlppn%j8VOh-40IG=0BU(`O4 +zyV6sfPX0Ex-!%4fyt8$M_j+WJ_uBY}y#I{Eyqoyd~t`zS{yU#C1X+MxM>bmtpb-4D7)}&#nje;l_|m%^hdGNb=RF0=}DpJiLW@@%A$Lm^7zizPEb6y+7T_d&UR+ +z`5ybCWSab?Z#<##H9yVE>P*3&r#mNRc+c9bvo_m1*6n#og2}Z#*QocES +zTrVgF*k#{Am-sRMY3LUJ+^WHRb6>p9&OtiyLi!b*6YoR5IgfmEbGtoah6S5qY=^@B +z06evqypeVe9z1jW{2oxe#}NOs)^GnEgZvDx(f|A5>37j1-e%r&Hi@S-FZ%29ki`x@ +zyEyV#^A(Q=`k3oHcw}qhp(DEUD1NUaZpQMs>;PhJ$X!6J^Tq|}L!!5Z&I6As{^+~p +z*webXj+bc!mMFf!)1jYF^1gk+=*#2dcn|Vz-nnPYHpXw$TB|?hihK3iL3~Z++kD5_ +zjZ97oKf;IQQF{k7taA*m`5=EX@76&cts$3z7e9#2Cpdn>__`CJaiw#Vz@r1}{{@Rb +z$*Np=D7-R0) +zcJxpEdhNS5j@5qKL!I_n`Rnz)>VrMkEo?OVYMM5ZAKF(x&wi@+iE4>Ki1QAS-|0OB*%9mg +zy}IXi$w+^1!Ctz9xGvG_7Rr0^vkNBs{`>*_ur5I^?Q7p3C9^Jo=EoKr0>{v +z;_)Wh%CEo5*mB3iwK@dX=Y6=!bKsii!&OYV-Yka>jC@f%Qs5u2b^0HBdb1t(@aMN3 +zy(2`^x1v{QF1a`f^o}}z+^u{!lHTz%U+?%*p&diKnxwt@4eN-@D3k6eeC5{FQ@0kl +z0{)8o-)mq0i+6{{_zkCj7t@}{eN6tek@W9(ZWBzy?>~E}3%);@{+-V0NAk3Tvf=da +zIB&gcuAR!^;?wV~=6g#&(!+1}X-7KuLh6RoyDKR7a^gTlk5S5p)5jyG-0HC5H8_0h +zsp;cAwA`y_W-kZWVed$MuuL_Y_S=jUHh{vpL# +z{@j;y#{c&@*1m9@_aWq+=Gb^TF5rybGIj|Ke(7O_6gta_EL5<<87B^pw_IlrQ1)+;JCBeg2qz{n*d|z1({w|1)01 +z8IKQQ*XF1*9zCKZSy0o=T&9}2ta7LM^GyQ7D(Y85JGZ63;mam_7CLC>RRGsjz(0@w +z&NF(Z^nbfANiQkq&EQ~vlFl%m_TBgwjjxb)VIDZRWZTiO{CB=-<-huq96ZbS8SJFp +z0>&F^YhBX+pRKd{K3-t))k&LMfjQit@O!@Br{XQcb$fl8zR#C+fxN4ypCDg(U}pt- +zm~<}b4B|uS789MNM*{t;(P=+Y=WJm;E&oZ!xC-4vxnKf4Y&m{gv=nCsnfM-xw9@U`nR#mw{PN2 +zsdU1*DqZgHE8?+^rfo;RMBFNGP9>;IqU)vZA!p5*F%Ayo@)dyW#C0aM$Cx%sH=jQ}-Ei*;IMF>q9?pcP03* +z$XS>2UUTDr4nG&m=SZ#$>;m5Ll27v%e8dNkOZIM&=sNRRyC2CeuxH{2s`l=%Yxoj% +ziw#YEKDpafU(&O0NneFd8fPB6-G^HvP9<`DzTwFVr!^zKd^o={MqZZqY8Uo%N?YN} +zXB!M(PH(-=#30tdla<5?+<+}w1K-%(#s6*26qJ+B{{9WWInPf<{om-l;EDYK|0;3g +zy!W+_Io;3~B}d@GUJEnj$ui*9yI;$V?mZoTtYKXzti8dUt6LeRHPo7E9kqUS{(9~I +zjO?+qGw%mpjn&SXkd3*0li2fY)h(OsINh|<+7cT|Y>o$xZ%;jB@_txdxyjD~BHQ-2 +zKHntyM)olMnz(eUtJ%2pDx>G-+F--$j(MjZw}&BCj{rXl}*GFmRqO@ +za5l8xG=8!7pJRXIy*~Cl-cvZw_y(S1p~)XMKQ{Utd;}YKU*dB71yk`ARC|l~dn144 +zFW~zvmyOyk_m@5`pt*+j7SD&9uCkF7LdUs(IC*4P(!8NBD(7b|@G;!X7R +zgYfp7RpY1Hb?;e>Z``*HWM6pPF%I_Ym1)~%18pEUc-6{b*$aUTPEfaJ1pDD4?(9wH +zEr45TGavc7s<5Uq=wrHjQMK|ODd&;$9hK8I=+iZJM`z7!zPpm|Do2-kE_$?VhI`o) +zJz~G`F>Ta7hddykvflYT&Ft6O}$wH{Kn|`%2QMBd=6jU +z-T2tQy0Myg==y~>Wp=xVx+4C02|gwExRt!cC;!xnR3&?_?3U6oF#|_|bKZt={yMiX +zPKv*!9 +zLWB0~-R7=?^7)|C@}F#wXO0~8d0RHfz8md1$?_3wkQ#p +zS3lMkJ6Lu9r|lRK>Xa{VxG@6T=7WC!FD)9`w)y%uZI0(T!~tkMw$N7VB>2>KSg%-b +z>U8cnwEQkp{?>8jizz3GmVr_Jg)zv_0sg11u~c`_6raXf8-CFv{nieWy-`NJ{7>TX +zIPY#tE=WgEUI57p$%x(VdC3n$FVa8cOMVEv2KbQeD_rmSZ#%C&jU($iSt~dhVfe&s}=pj=*sFpS9iOMcD3;2WV6Sz=H@;^bki9%QO?xP?&D2j{D;99 +zW7BoCpGW)mhuX`x7xqsS5r0`mJJ|}m-77Tr0pFeA%Y`ez!A@|XcXfudnO?lX>V?A9 +z8?@7TviLlAJ=3%s?)&wj@85U-tUi*Z4cN2G_08j#B&TxLDXS^9YUL2qIhe73 +z8zfVm7h?B1wO1gEOFNy~W7%IEo8){g^C!+7nbOaC@k^nZfBf2WnY?B%zArnqnKyU8 +zskZ_Pn>+b*-?;@&OD0nIuy^j7C}WhwN4x*xx$bsgd7ZW;&Cg_C?d;A@>Dr#Cl= +zS0>N5S6x_8In9T=(0$g2`%wdTfA*2iEPef&cZFT2h&A0?b*3Amk6%9`{0UE$K5k?e +z2%qumx8bwC8a-uJ`(gOJ%INeB?9;!hdS(38-lFldJnFYl&wo|Tm8ZSJ9aOKontB(w +zwC@PtHl}52bBwhf#XMYatop)eXM8pK4RNgTY___SvoikLem+C~E|)r;vxxRRVy;VH +z@a5li(g%n7P|W&ME`7!D3O>xRPgHVA@=0>Z%BvN|ev!>09Y%VK&W70M(q+8)AXyWq +zzvgIQ0y$Aey=*fZXCoh+_0{#_FPh@VBoxrb>MU0FX3+gpe%=0S;YV{m +zj;!YVrH=dZ($j)BU?k)3_Tz`VX-@np+D}5(=v*rBs|mI}j5pWsbG`Z;=4|vX%B7En +zeU^%m6&@v1!}2QEUpZWVGwDzA*T$V&-}GOxmxcAm2yK2J>#_6S?0Rhd^oiG_gZh!y +z;~D>KYZ+~F*Q46UT|ITV>k;U17T<4HeK52hGig84di;k!UV-`?W<3sm>i4@I_tRhQ +zdb~epJ(kl({xs3dVf5)ZXDZ?ed%kb?Yn`hor&XZSD>mJp%QSRd#ob80!56b)6M1Ad +zJI+I`m-_qiB>I*gxzy~JS0+AsXjRQj?9#6nemz#^G(M;M4>|)@9@`H>cbvl<`2cs` +zFF3TfrVg1QT}F2Txu1+}dgueC0WgDEsr?`xsn*6r>3zV=FRnc65UK +zX3Qn_tQ4Q(81^FhD1L2lbmH~$d>v1+>>VHW0R9g8b)33HFLO}rw`hCJXT4g%E4nUm +zrn8SXbWML>$)%zlt>xMHfGkeVCMGhva}=~FJ_^%KaQ3RZ1VIjG?GI&)_YOYRDds+g +ze9HDMWYO*Nf0~6(Y2!=P_Sh$e_j#+&;NGs(i*<$Pyp>iGKvbs-&G_QY@h +z%kBw+B{yDa|3Yg&aIQ;SgZztw{spa*?1&QdNXL0RS-@H$lgJy~JY>DJRukdJGDH8? +zK9zh4aG?1Ic7bqBTpISrAPyG;!(nq5We)xwo!w4P9fYnFyMSJkP%*Aiy4>Ui{9Zq?EE!Ujd{N&pY&v72#g>z}$lQTzS|ItP<7t#&2UJ>Jm +zxtg;9?keFQn_zN=H>`6mRUTJsn<-W}4_)R6vQz63UW+{ohU#^ykA&80YfgPGzB{Pj +zZD9G`=;?hq^z`BPfbWUG5T+;L6`D$0J!w`_^r}7Pb@rIt`R%#dzKasj)j1)Y3*TF* +zmwXn^wFlDo}KuWSIKQmA@bU%$4`= +zMIJ5#hA@A^n;Sy%z9o?Ni?CJ0^6+B53(Lc~!{Dd*4>Z5`vY)M=e`@m!&#jSf!uwey +zXKsPMP(iyuzUIoGV87NrZujgbkTF-U3ij>V)861tg5A4`g)}@pc0kTrSwya?A^VzS +z(a^nHHj4J+L3y)b-nOG}v40cy{g7mhRD~_A%)+>U!E;->`+i7R#x?+{p +zX_h>s+zP?I(jJ;;c)s;~ce440=Q@%;_Pgw#FV+sFU&Sj(C$sB1R3}qin2tO6*1r30 +z^|DWf=Bf2uPW|s=e!24Jz3}HdHACljD*9$O--P)y8k$#l{W@ruALRYRC-l$9FtdEU +z+svQ(PNP56CEzRchhLySywDo){bDuP{j!rp)3N~-Tceo4!2Xj@0H1KHY$vW>CuKj8 +zV<}zk+fY;C>muwYoda4wlf4J_=g_)m?7tJ+c8$J{Xmx{&5_N{xZ(JuGihrjAyICf?%Y9SYs|8)_Rj(U0T2*`@O$ +z$qbDbmKkyC=VQO`LT=P?o@B?G_joXtd>Z?*E1#1Mn?DWzH1bS&7te8epVe6Q459%) +ziS-F6FNESkGMC#p5`0G|^a%)$U;CB)_9?!(23Us1f!O?tpYVMG|LDibwbS-N=9G7- +z7k>sj|C{KV!oz*p8+L@(MRBS2o|GA)S +zeQO4gTB|;?G|n$DhK3 +zc)42lIGwLCo_%w>oV5-3fICp#mAva^=>MxW*XQj&wR5c|_ts*@QAY8?b&0+5> +zc&7cx^j7D~fuHdP%3)~ieZYRY+ZN-^pGO1-cI6K1bJv=|XV7E-@A_)(eZ!xbEvHWW +zE}8frKJAJ}%MZD=!S~|Pg|wRouaOt$g#7t9dEDi*iPC-~-mLX`^Cx~>$~#rtj>-=w +zxaB+8#Cr<^^iSPk1Gk&`LJ&*PBrv(pekIyztY+|?BR*2P6M$$ +z_=rwmD@vz}`?ezerJ}@<1-QANzH)7yV9a<3re(CtwRPtCYY^ZvSdTbuwFVvV!(%xz +zOZYCM{{K(-?ueZj-^;0o@VehCzGYkH;(I22oeI7SXqSuc!|Z8cTnG5x<5_%f1*%|QS=+8lX=J0bN}`CIR3%8mX`xQ +z&K-Z(arO9rDEmX`uP3sf#Y17d%?1Y9&y*W}&9$G^UOX!MSu_*y=dn3M?dRKbXh8h5 +zhc5L|;?D9)@dY14 +zN2mSfGVWLh_F5U|Sms@L+wtqnn=snfSKS=t +z&1&Lbh;b<P)G3$l +z$>tg6U*UT>-`VpIY$oph=GvG++$L|YFkii+r8~vCL;7p{Y!8U`x)d8C8&keFz0p#^ +zdCg(pwkf9n0`yDD6P#aTI~_2#mOXE>wx4o{54Se5i-YyK23y+Zs8_CaYvYykUU0DH +zTRt}UE}U$r>)sx^7ir$eN28y(%{n)hTpi4nF{IwPNV0U8`Xas`{6;)=qTh!8f$K2* +zCps1lTmDu)umew!Be83gc|T;R4{F~ZZ6kj5K-VBn0)3VIx73CCSw84o-WcaZcZiXj#mdQ8(YV`+hOT7&iE>mjcnt> +z1GzLNT~6It*1C-M1f$$RQ@`RfJ5J3;aA0D}0vV^g9IFGT +zyo*MLl*3iapRXKp7h%uyC7DKOQ0?$-rIi<`gEme4yMzBI%PjTlfw8ONhk7e`&L*8T +zCj4^cLEFkVj&ln>!2Tze`{jCbsE2ahg>LrC_Vc^l|9A0^Dl;ka8g}wKpv{TE?D2*~ +z4fq^0En1U{(|0~<2|ExdcDb^j5ul#JhL!Hn}ReVTg1b-cU3I1^ge)(orX14G5;-yVqymEA@S2CtD +zUONAVc*&+Yao6ED@`gPF{(En8IK8Def9bmWoFA6UQh&8~lfI8ou5Xl&RyuOb+@r8M80R$4X+FVR$Rjs|=Ja0EmxJ}tIIKzcg@bcf +z|0#aI*Z#%#qG|R2F+WCCaH#*roc`ndw)$M%~ypwE>#huO;x6YF!lK37b8(WY`K +z2e=ZiB=-k+ciJ)+*f>$O3*TFLiE`-+DpyXmF8>?8ZxwtyO?@wSx(D~ilqs|ArPpXI +z@v7nwrMpPK(HRQgcS(OK$4~wZzu#N=wiX)bxaaOx-GvzEj`JL6?Hcmzn6n$rp7#+{FQ&~?oaqGjJZ|IuMLTB?rxm7SSEAEwppYr;mc)oLEd{=+Ln%({TS_++q +z;kSL~l56Cf&EzI;CZ@iwfA3?X3Lo)m``wLK_V3-Wkhb--t*3keWuK(%I?5U;YozSc +zlr>Pcn6f6ynkc)Gvd>UW`zgx*k+OfLtediK%63xr +zG-W#|>!Hsc%ATXYjoFvGSGzZQtK22f!4B-$hg+2MJ)hj~{n@>bRTth9mzG1&j@ok{D?dLw>}yj@J4H(e``FG<9k{afc6Vfh)M +zJ^Lp2Z!42^M{V9Nr{KXpbO@8%hw(OblB*{Q&&tjygJ;PXO`d?as+N+oOKg<{O(?j1S0}vg&9n*L;SrqZ +zotyugx2uE${@o^c7n^>()P;f_nAP9G?915Q*&}*CPkD2s18Cg*8ty;i=gBX;$9sc3 +zlf_P@?#=LK(8`RybNJ0XnfL1EJaRD1%J){N4u!e5iE_VeG_{}FR*}DXzDjr_j7+%dx7M?eXm>Z +zciUVcu4B*7gZKu$wbp&_0;AtSf1B6-&8)t0*!~IbI*7iPqvPqVwLScO6XoZhx_rrFHE?_zIG!1RV><0-8F(#C?;$^&&V7Z)PS#aE0_8ZZm}u9+bs94r=SXL{A)~#y +znsr&t_shw%yuq2XhP!_FBbK1UGS?jjlPJbI~ +zzpl_d$5UKwzWbOLaUM?>x=r{BZ{hbpqS}l__jx=$#{CQY9Ji#WyCt!FcY39ASzH8u +z6O6mMa7t_*^VYpH?#=923Xf|p@(FsJ4L3noyrYIKJ$X|d^oCs8eEHAp9A&RipPV{P +zcJBj8+93-jx6-bSc5S2F%e-v%vSwro@y@l$(d1>xW-o6Z&u`_-h`4cn$D6?m{)^h= +z``u6S`;*P`%a!r_1MZ*k`_G!AW?gOv=M4!<(>En_4^p!9Ys8X^-$+hp)*@JkJN$KM +zp30ja)CD-ze$@_MziRPn<{BYpRqL(!HWt~rjVX-AG^aSa&{%QVx>ZxA{6dU7{;>Gl3WrF@;_qAxFen!fFRQq8`w +z6?ltG?sU6nFxDpdiE6RUdz^+0F;2#>q`hW0dq|Z1M*EEXr7PJ-9Oqo--oI%la%;Tt +zC)>E48gQm}1?!R9>^bCMUjeT@y}1cJNB*g@!a3>4nHEna?t!YUB{n9_eLWh7xr?tr +z{>?|H83SLZfKj=TJHWlphT8cpzHked#6E>hfedL|4sVy4eaPlA)V`#=h}ZgKETsP{ +z%|7%w_MFZPdr@oD>F#4cO0plp>rbZ<)Xb$bxf5QDaOb-RxqvK6??F!NXAZrz(fwli +zhR$)L>_IoM2Tj3;pnG1W9=a9$dIL27Rb>CvXueZQmy418E4$5i_~mEvU6DH(`NkcB +z!n{iSV#vgyHe)KP^}E~bQ{aj9visEcT^D@>H-HG{eKbL(AT^HZTgMB@$ +ze|L+1cg;BR3ge9By;X90KFj(h +zl}AkZCS7L=dsnnu7A}fCj&0#MpEGNBAF|2%b?v@&jxYD> +zXur$O`^W>d*$=*UGu9sTRCJDHySu%nz@6^pxdoMZ$aBg3dkZi3`pK=-0lfNM79A~7hC}`Vl#np(Ww1 +z4jy9-j`W>w=R-NPxgxn`vi6)`CJPFiy=Ty01ZS~x>$+9$f5gB^*LR%mAIA!J)I^{q +z_(^+b*W1|(GUe{~GczJ98_$cZTvWmxf8mgP+?h`yZ#tZ>WSX)CYi`Z9tX-OI`RcOl +z;x${K!R6V4uilm2x3)REb8Sm@Um}q$NF=jU*R0PLtSvj_*33S%sb3c9 +zS=GgdR$UQs6P2CW#cLIJy$9ntk-CXQeR7Knm#P;{!+jW@w54azw`q-iEwVD3Hu08!X +zr)MA9OP+%F$KLP$SEZAEjrK2AUW{KWl6`jbX!jkDajO)&H`+bs6=e&%-tUevIirfR +zg_}mZ2dLjsDH$E5J#_X>`O4n!7RAb_&tnbCDOX;ui2KvZX6Mn&X!p$6N4fLq;d9v9 +zU%2Um?r)%lI{v$w{}y=N{ja4LgQGn68m|X<&jmiw$p_tYtH!#OvB$E{?8u*RLu}lH +zm9d)9N6?+1ANNnaYWH09nCgV%OxxtL9uda6yl{I=IT>_+NZ*ceOL@O3+bzAV6Iz3` +zVlMd^78O3^eHK0x?JX*N!@GumYkxk2x{pC)H^DFBCCe}OZu%&6Et?OTNmjA$5pr1U +zhOPpByUg9;?VAF}J%pEB!r#!_eJ@X|FCEUgwy;vBEv +z+A`9oMBi7F14A?}+Wzfs+fH;VT7K!nx?8z|Tzr;>ugbps(`MlAWL{^G(_vBJue|e_ +zo96K&d=`%L;WqKS`qufe`tSAoBq!egN88!QM^)YV|K3T4NqCT;w540ClMo;Q6tLFf +zuEL!e9%cdxTD5dl3fC9S5{}fru`7(k2o##HHG)%(7(jb37KihH;-0qpo0j1HT2&(d1ofJjKRW`i@yELUZ$UQzo{+ +zxT$C|$Gfvwi{r>n$A^I%ZZR+rUhMujciDH2Z(V6%XZ4x$@E;cHlj|s>v9Civls~l0 +z*TbY!M$uQQ&`s^~c_GgR##%J$C7jjf1-M$D#uLv2gsiQ)UKh@!!!Ocj9{~ +zgm)EfG;}IPaX&i9icAUmT^YKU!#(YaxdBgpD^LB8_@ifTjsoK<^un?Dt`@q}GK<^= +znRTtzbuT&nx9sMOyf$aSmL_NImIkMJ%OTD+gcoA#Ey&Jur)B>!6n$B1Apb@V+dc4I +zY;~Hm?>Y-Q`k_;{p?BVjt~nJv{+iE!nz##S#mDSfWzrYR-8VVACyKn-;jME<8GVtn +z3?-wzZTz=-!j4!59FUscLhGTJBwE +z+NvCFamHO8wsywobm8IP{DLfdMX>o6WXJMd#<$1!Aik4)NBQ0?KID$7rwsm%wvIvW +zTHxBqIg*FtMXB1P%b9G~!>=z!rk8M*XZhsDRH-{Sw%6&;J}l@O|0#M<>p*u@9iHhV +zvY2;kvwB|rk--!8I?ZcDe~r#G=KSf{tZ>XL2}SWmEa7gcX_=GGDEP&GbgfwX$6RlR +zazwr;+ti&_$6630&0`C!Wv+=PWI1}*6!?kE%TO6Rpk4D`JXBNsP##N!aHNr +zX-jYtj7pp-hKKg%>;ukG*l`86lhrlXysus?8OOZ`;M*gadG092!MTL+;6z9|ug+N5 +z13pUc?W_kE>pvIi6z;Juch`e^_26VZ_*cKs{jH%@#)0k|L-+Mw=^IU>^TygkkLcTL +zT@2s-pz$cjzml=*+y}uxx-Pi9MtCH=0k_vQ0uwHD$6s?av6pi*j`2p9^k;-Dl8OzU39UZ+Oexcyh1{?{;tSiVoJIuT11! +z!dn(jdINw(3wX1Qb~FyjImfxS30cQ?qUmn>!6%WEKSAfp3l197)&7_q#`Mp;tE1mG +z+8GPZhF4W4`JcJh-BBa`uQ#$Ol&VaA$6X4}GA{JRh#QHOtaPTto$$ooZo60Fd?Y)_ +z`OhqUZ|?0TVr9;?*)O~47vLM2cz9WIptG^=tFFhH^~IbQ7-^5g#}&hk9(0o&{Nau6 +zOj7p{@uHIUZKvjK8R*W5eMW=d#w3_~;pObhIlm=b +zw32&sFFo;b=H1(!7;~KVX6|p>1^hCj-91^!CEwi^e#J7_Q6c>$aD8>>E-^$lbpC7T9J-1)?Ls%2)H}W +zrN8xXIJ5lTG$@cfp +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 +zQ;~BSyGx$!-N1Moq_QqWk3de +z={dLRSJXemn5JQifRCAL&7EkkLZ`bj&1^zVAz#*5H?{a{F%?4V}f@=!@X;X_^UWg%}02b1XZL80tj)vZcrk +z;q~;$8;R$V7XO6L0S!?Pdu0K(!=B7#%!j%e>eep}Z!o;@%i#BUPBrxOpy7qH!>IL2-M9k1$FV`<7swp*Ih +zm^7A1ID)^q4LrwRNgGwbJh(?ka_zQWc3!ioyPEr(4gnY8(HB|!p78QA%FU$>_(4v3 +z1H2#`?bhaXew$^K9mczW?xm+F$A~_VQTV>$0eSqLDQuKLS2uWuzTLw3ZLZB!6N^?~ +zg}&?mBG+acbGErQ$x3Bq| +zj6dLWT8FFAWv&7rv<||PpZ(0jPp}ruEB|cQ;3dY^2yVJ=uULr_;(Mw08z=f=JY11_ +z1s%8%nmd+HDgSQPXtymlqGU;J#lcu|o%3^Y;+2ONCl7C5qAq`H-MoA+^6+k5-3ab2 +z%-=&U-mR+^<$IBb_a=FGyU4>EN)Fzm#CmT1`eN<`RBUElzL&|rDmIQ~-Sux7=Cl#_R6 +zKHl7de7t+f#~W6Vj~8j?o}ho>oJe9RK|bC=%Kv-(GGZbn`JZi3yrznH&&SBgQ%t5T +zA0Z#_P<+VI4aq_IgS@XI*7R)rZ;sBI5~X|?L808dkGdz~RlN6zXUXSU;=U9g&HJ=- +zkQ}@SF`)r5#g@YEPsp>o$P1Hy8Fs(V=Lf`jh7so(N}Oj{vvkm~yMZ$0@RgOsc^=%^ +zhg`fOa`9s1;@#_d-XwPlvRM1%4}u$y*5&fU$U{yM+u4=VI9|xSGRr^4p0l_K9e^VRLc!Ey1{fDe2QyykZX +zo{&*)`99v4;9C;jDsEwAaV&c-&n5dM^M{H~oT$;)Y%Jt}pRcw6zPZ-$r_cI#u}aqx +zFB-_$i^IiU?@sbk=@UIC)8A<$F7vR-Q=5R!z`W22-aj|(d3aHf%ceXva&Z{r9?lk! +zujG>KpNMm`FmA~$(awYPBmNPa3q6~u0C{r&ZkzSzlXub%ewUjKJe#`ynf!{~qb8UDNRoaU$O +zT!=qx4&pgB4^i{Hd-H7C*51uB?r>BeTZv5sa~RFLLD*6Fz1Kzy_U%pYp8rO<2K*m| +z`zPYqKx0iT!k+CJ?4PKj&neyZPtf+}InKCt4PKceiu +zQ?GW#*9Or};Qy&LejjUR;X{It*m#WQQp$#k1>Hv8_@ntgZuqK)X^YuR_F +zZ?E-f^j5q7FBnJSv~R}5F0f06Q0@YBwZfb(!6*&<&pGY0Ka%)cA4c-aM332h{WqeA +zukiik7t)UUzLB=@>-aw2*RgX_-S*iXPJHHCOOG$V6Zq(N#-75*Be)CJFjhL_nd9lnb-@b*i!5Ch{XWoF1d#uyeu3YV?^A>)Ex5!z@w~uvd(Cu%^ +zRk1&Ax>J+&I8!Of=eN{vpgr|ted!PIo{y1N0S|m2Go5xv()Tp*tjgd>;E#U5-^0Lp +z&G_H(KU4Q`;`vZl-5J2+_)+MSHY6wZ8hb+f9Nz1PZlRpL2eK=->?i)*ALiYc4R5~@ +zAG7t9Ka8JTFtGmN2Xp%W5dYP-zBMn=?pZ$V2L75Ev=z{=_1jwdJ=0h7r_;U~#ip$v +z*ZOLvLfi7y$WJ4Bw?5oa*=v4c=bbxZX)@C7EaIvD`@OuEJc&3L=Ct3olsphaqwx16 +zy0hYhF~2PTGg-gAKJExlG1Fe%d^?x;Wz&>1?cmc1xj&EfLC2Af|IZWcxB|PTmU2tk +zBNM|Xa0r?^PrjgT{+ySV1^{LLZ9 +zQJz3!Z@*mI+lt9M#FnGE9sZnEUS})YI&aZOw6W9ALD*`_M=2j`|Diu;+x|`DOUb7# +z85V2&qhCI4%D>lVJ{w<}_-Vj9hr3f^io@RS>oQ5|U150W<;H&`AJGivYcc)53;;YW%^DsFl!KIPe``If0Oq&9goby$u)XM!H2k!-^(m9vvV?JMW?Vh*rzStPmA%H~0X&V) +zWpiYOCxY2L)?lFT@9yQxF51n#blA%7p-wF^ggvW@hP0&csliV#Y`>hgq(_NH?7roN +z@cLTj3|+Ht`M_r_{?*ZjczscLW9&(@r+70lgSB;=-~ozvs=WAUlh2oCQ2sZ}M=%uc +z-|{}T@My|CX8DNWIg+yvw=Qowz%$lxmGT%0+i&pO&mG!+!o-i>#~!UVZSLE6t@&=- +zIGJzmlG_NqzS&9_e&+#*g`B#q)moyDoiY9_6H; +z>3kl+LT7m>mjT>iZ);6`EpqhZ$PDQt+Q&*9=wazCwVXu(U3LWL2K2{=uJsJ|eCqB( +z8^hAx=$Y9;SK9T^y5x=IRZpAs#L4ib+C7Vb +z{d9gZ$jkT-ocVt-u{xM-YtC3=6h1)XC7nO8jmEriIIoBWzMv%tDUtE +z(dO2#JIxPeoc@jV&f1M@oKYJmXY8C|)X8Gz-3$J&ID^L?6bCtiJOf`Ule!y(yiMr9 +z#x|6HtyoEk^Wr9KoF>H@tbhGjvuL@m(+}DCeEST1ImON$O+$PcxBdWoL1|m(IoY$E +zhoVf +z!#OUShdh|Ja&pcq@T-X~_cvQRd_-LcTKNt7?f(30JKQ;yN%jx(-qLNYS-*VZlDT%Q +z$lOfJ>pHtV+QK_{%Ct<~IX96LR!&|5{!(x(po?>XAGZ7^(Z-$5sE5hd?Z{2F?JS~= +zzjB-xW&p>3gC{1jy^%i|wK<(O2fNBy-F|ZVqmSe&&HlJYGBGEebe&4*6S{{!iz9Qq +ziB6PfLr#DHGyf|JX!UF-9+wQznCxC;-HkE6ecaV{9LM)tAGn?s>Z4!ykFFS^=yNya +zTA)jb5 +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 +z7L>_A2wt@UC^}&DytY=X5yX +zEw<|unpm9N_KWTC3D3+&=W)w6dt!@yzm9iDk44!LW0r$U{ +zc>lM4XvZae!gah3_2<+J~-u9^tm|YaM(%(B1n|R=h>|db~fab4Pt%9jtBlcWS2rzWt5P6a52O5yYJd8w-r#R_rV98D@XzXXkmpfo=d->Hd-vz&4%XdK +z=RB1I_pFSS94~|ga>nHHXuQfnX>b)+vSX&7>{i;54)!MaE?x3S!Md$``OL8g<6lG_ +z!9(k(@oElDt@Hn)Oc~(w8OfCI`uf3W+OhR|=KX!nn2Vi9Q)?;XM-ISmXOFYPQ_eEa@|`37@6ez{%GLA3Q|5A(dnpJ#6O`_EJKx|jF= +zQ~Z=}68CkQ2HN>cbNV3se9E6sl6Jb|XSqL@k^Wr%5`LCYM(bs9^G5W88p#v*#a*XF +zgW{hvR*isXh!*V~QsAZGQB~L@QS>(1HP;0C@6WcM7>NGc#XIa>QIN3lB +z8fg>Q7#QsDf&X0W!(kESm+sj{~)!YZmJH4m2yc1b1eNuIHiO +zO5c}mZ~b*Prx~~-$3|u9I6uDL*JT~Iv-!v~>=ko6AJ;h~IdlZkY6EnlyAE|GNniBq +zroSoA@h!$V8oTR_ukI9ajV&Of3 +zHf7Tk!FLySIyvn{kdKNo%x}KQ-LiBa*bQB|TP+3ike=>3pX}6l)X&&^$~wOKW825p +z*5R499m)Z{DaW3_9RITi3;1!RKgR$!1Nv;D4m!`t`&iTHbTd~H79U#3x +zYoc-`l#`#MgmR^RxmQ|jxmPF`%x^c(l>ZT|m*%$k$=<6)cUrfA*5H$yu{CNGA9tKr +z(Zy}-g_!24^ph9XA6S1|yN&Z5PTc6*inr7Dc-FD2?ER-CYyY@DL)jyV&-&#iP!0qx +zD7W2|+qHf(<&Gv&ez|ig2l5n@yUUdOwcq!6zudb|Z$B}?FDL(j)=&N78|mEEx^JWF +z)24L$7bvTBWzOGoozb}f){WT5mIm{Q=SEpLucs`zXYljOPi}2hKEs*%K%oum71$O@ +zYzz4$@=y8Y2T}exzx)sV^;UVct@us~ +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 +zP^OggNwQVz6rs^advD1 +z-pqMc)3*GQ9mERLeXy5V4>Lx!C)%tn&>5e)U$Mu#GiNg|+Xm}FF0a)y-%j*@)Q;~y +z%5C)Z6)RugG5)^4FIba1Df8WeGU`vT(c0bNms4L;DW`GRc3w~1TF}O5-svoxt}&nY +zo-vnDM)5BUGRAz~8nspT2=N$T^_3xZyzGm}9awMI;6ZcVW6<9__-5M@se(SAqTKBT +z{fn|UtaoI(Efme@+ZG@=J*fsU*it+CADAP +zVaKoWywI)uHvR|gs-9%`QosCq)7F{rtn=HK-K%=qwU_bHNEF^2ju+Pn(|HM$svd5*5sEw +z$a$V`C&rWxt@%{xtu;lFSj@$*QyQs^S8SSGb53M-yd*p)Hhfd0M*GkzoKMAi&39^Q +zB46+#^SzqB>_>mVah|=~Nx%3UJ{H|UOUvp7rI~w8$v$_ORk}M`EMgJ>IS1J>GD4 +zQmlObq*Ts{?seK8%vEk$%9&RaVikQ3Br4J|?k!HYl)L*AMWxHU^3r{=;?n(`7dqG* +z%=zeVa6V&&lk$2;y=3Bz$*D=`eBX6zTRi+2gG*O4uSwqU(&1iz>bj-qV${=kHI78& +zt=NFWb5n{pTN5VYG>&%&ST;;K2!^zS#nZ!rbd>>`Z`D0?``XLAa_)+7ymhT +zt-as;M^pVGSHz0oHD%btQzJ`F`HjfNP`WzjI@Rs}#yez1Zq)p?RDKEPJw&)OV*aFL +zsap~29ZAK;%;&C;O_Nh&jt;9yMW)3is#+&PWLMJgm?YjH)FSk-;DM4@$PTIJHglm){U-(^Wf^X +zRR3XZsTgY-0?yMS3p}0En$L57B6!j}5(mbUQ^Tvh)U?PnZ#iR50E<65wJjsT#l>!V +zhv?-JBwdC@vUHkGKX#ib1=a*W9^eNiGyg +zcu#;YaoSM(m$M$rnd@rSqmp||D%@D?mT)WI32!jtyf9R|ca-}kcE@l}YjGu?x#45b +z*f4|dOu&qDG4(ah&-ml~9^;JBN0Rw#oEn$Lq&1tSyYZHcZ!cr)!au=jdZd3`WZ|)6k>pY6yk>O?x75JD0L%~)sy;$=Vo!~=t=cH?v +z4QolA1>Po|mS;oI33gQMmySp7^Z1ifz`=k%669u-_c@lhm~$bZ{iF+D=;&P1@-FAr +zPX~9ma`un#^iRxH{Hp@oErNg5L=ub(c&@xMX?Yj-$x{D&f@$eaZ%Ao8=9%(0d%Aa_ +zKmS8KXD+du!^%b2AM5XOSQNU;&EbRKQOvu;pK~X0(!972=hQTKQH1-!N}OrATf)<* +zzdvE_=%(zuoO7ZwyUF(!th(20?|f~C&ZG+++{b=lFZrLHH?VBm}2Db`)drHw~K~E +zJEEIyv^|P?oOcNB?%{j6S26#d5w{(wv)F +z(Kb0*6iyod+YskbPxrbH;m(c<gb#vaug5+^8S&nCfpfrn&x7^_i)rAGcy1XyS3LM{9rzzSm%Ht9 +zqTO=wU+DMjNX+NEXU8|tp713Pe-^$8Z&cp!YUEQt@a==fw3RlHN$uA`Tg9v)xDOq? +z&K>Ld#I50byvph{_s~y@6(KkKpXQGTVt+%u?tDqGuEakQ=AE1VZ0=R&Af8o2ta2K6 +z-vn#&NAteA9sOSP+=0yB`4RB3h;^3CvGYE^Lv=oA(%o`GW-d|CYND(b3_p6INacf#p%LkrSrhI-F)XNGwHpYpG@6s2xW +zs_nvdd&7s+cHgiE?>`g1KXY0qKBc}2^qLn>jYk(6e=-EV^=93~ +zlh%=AljQuLM{l$IC`vvN|JO`kv;D-5Q|Is9P8(C1gYLE$3?K4gDETS5BiIFURPZx0 +z)aVy({2+A(qc2v9Z-Ot_jJ<;QqQ}33uLtz0H5o*I_T2slPkmEs489lQ +z`K9o8^?i`F)!Jz73UTv1>ICJl?l!+7=9h>(!~7Db=l40vYaA)y{Q~E7icbXmLA*hH +zVS423_ER_;fkVRGk5MkrH8sE4 +zr*3NfglGW$MYfQ5o8ZhCPQibZw^IJ&tZPs7zJf8UjTMZs!i*bzeVE6%6BB;OzNYO1l}k6uQW0^=BC5#y|Cj(!WTY;Jt+IH(iviGK-qlC +zr|jooUttT%=8L0mZNN$PjbXJlZulFqA3+04oW>V7aKa;7`%m|RcDMhAoVNd-KJ`i8{`+VT_TT7Gm;HA|WMizKb2M?5Z~vWy +zCZ*Sw82j(F_Os^iLf^gewEcHQWP>UHsMB)V{`;|S|BaYm`yuSVDcB}U-(&xEaxTk% +z$Nrmz{W%r>HUgb57MUDd!`jYqWB2t7HzMC+@qX10A#+0UZ-G1SXZz`l72(^BI$sGqYyb~m%|HF3^*>Y_|3f@7 +z!K+0Vo6MNL<+d5w+UI>_Yd<4f`mKk~I!{md+{c|8 +zn;V`BU$pomZEQgo-^EkF +z1Dz0^a&qi5tjis=dnbC(5Ny6m?A=-6H~3zP9)3@9Kq$I*1UgBDTZ8TTC*@A3){{j3ByvtRBzwZ2@*nzRw6yO+JxhC1g!|qKs +zFz>;o2fV7%3D|)uU+L*w>^}T2=J}M!Ex`EzJY*JUm*0y1`v!2mm380gE%oQyWzRiL +z{_b0eFy~U1I8(3#r%>P8fevM@9r*OA=a4~X+JUy-pF8uu9XQL_fqyb~;F;~b!yE;V +z02Wq1wS28-JMd^C*}KaQ+`D4?iFPBus&iW3@A&JVF0gmBHf4;rCtLAvRoB>x@=ML~ +zxL*L7F`0XYjqk|26nOp|-JlOR8Ujas8UaTqrO-uvThZb`cUy5YZIAGA`xaz{Y(?Sr +zmpFqo7MUIUYByW)XO#bs&htOiIv)h@yRUOaw{@Ov)_FFv>gS%;xsZmgrmz2r{Wrz8 +z|H|E?*nh~ya1-`l44U474!2?AZRn`NG1-5DErIpuqkUzL@gJrU9(&2aQLtmF+jd*nV$f`^8V&esjb3`nKO> +zWBc_vY<*)>Sfk6Rhtj`8dfgOsxB!lMp7+F`D&bEK@1&oX(bv<|9SBYx1cxMFBxl6W +z0y$&ty;yu6b-Lr&{XE+u{??6;eUCOJGn#v}_4>rGrCv{TG>YfK#|neTMt3nb!I?H& +z+SqKji-#fS-N>?77~Uv*rpkHx)W?9ebY1DUpMXbcF4kt-pO_4Mgkz$^SI`&Fw6_jS +ze53m_=fK1^o^{!6Prt`*+sk{&%Ae=+1`dH<8|bv+@6u;2zKr(7=Rd+cxr_6(Zt}`$ +z8*amUY`9O)JJW{Cq>1ri!@WSiI`>?5u=;ypnasPl~PVy|4ZD8tn!+7vNza6KC>HejTmR +z7Uo}wuh(>*j}A1+`w8}$bRDfzpVthEpGBYeM#d7*M3_l6N2Nf&RYf^RRDX*LR=WE7JW8jx5P(UICtVx4mws?O*!syu;nAI=ipX-WtdI +zz}C`t1bgeyT{iygu6%EN4c~Wb1@=@qF^K$<*YJBz@~W_(9!B4A(>LdS#5%a}*umIO +zvbEfno!l`!%acxV9qoUPkMs)p2V*?1JUX{#EVft3{Yw1v#JDS}CneKq<&$~Sh@xXwK%N)L`l2Rob?f)0Cv`vam^ +z-;ztX&%_;vyQtia3CDT8e=3rr{{!GtJ7a2tR&t5Z#5VHuu{-9p)!ZRFWJp`hIL0Dd +zS+=Qi`P{?hso_T_rxYt1033+N#Nd;=w4X<@N@9`q#3D`ZX%PQbefVUD>K_CCA1ylI +z4Jm5(qI?$>ReB{wmwIFQRPsB*^RWA`-dDr_iXKqQoy*sGMQ)RKbJ+9dgy(r5-^6{* +zZZ7`!;s1(%lmpENYkL_Jy_VVK|>$um6{vvd+P5UPB +zPhtB{OxH|@50*K{v3UfmbWNFo6+E2pid927ThTN6isN0@5uzXI?JoMM{N#ynMf^Wl +z*WuvEu=#DtJkMPGE`sTRNJV@KzJ^DE5%x=*bGBO)-yG5wOFqfn9)tV*F)_y3nDd-O +z?uM0*C7*E8KfBnug?qWdgVIEtJE{y$3;^f8MjMl%?@OIF+Sq5>co11r+2=TIJWLxC +zatYe_u2b83u~V6wthFt5;{#e=JB_Ep(V?_?o!{1ZoC_|Sgq%lcH*azyr}<;WrIG6o +z?p!yyrAGG}YfR+z=04AR;nfuG+)DA8hYqW;T{o<&oJ%>i^QpsgYS5Ib(DCyjdfHJ>u88vABi|W&hvXs?jMvh_5L_48VTq{^C4!}Lcj|7hrQ-r +zg>OB&s~9|qBg^_ZX>jF1A6JSEuIw>%m9E*%x8!y4kaW$>;mP25%!@m-CdQqm6Dq)! +zV(wL3hJQ&urlHsoLrN?0k>Jm9pnHDHwvfI#IWiO+KfsyqZAtbU7~GV85#Xk5K*hJFdZX!up1 +zO^+E~H6=1P7GjK&3;#%6!9nnMfdzMLo%Y{Xk;nM2b1a={KQRB-G<;Qe0p>X)b^I%; +z{{`xgfENlDif4*GPSeJ~SraeinRM4;#;@naE7P2V2Hgx?I^iPTT?s4=E%M%78BNyE +ze{nZFpGY~uX*l2A<$dn&$Y1yKX_QL_k1%Ik6z0}+&#Td%i+P+WF#&y`9631H=mQVt +zJb08Fsq}`S6I`OTNyl=N;o~FG2a1U2%ctd_7bM8{7%+b*a=pA=JZoy?OZc?&M#sMp +zeV_`xz(pr0uO7-C>UX&NT5WB}T_(R&OLEADvVB0?Uu)+U&JFxPr8NV+6i)w +z*F@g&YOjtH&v_>ihmSi>ye{NEgq+^rKNd;Gucgh(K8F&Qv@J~z!cSL;d=Vavaaubh +z6Fg@{?sF@DR)cODFLT>=5zmPo8(-Oe2pCR92976wUf$>RL`7S9a)4XgT8?ayPBMmA +z`^8Rqhv$^%Caj#C>{~h@j(@gwK+A*XPBLr9)w^Uz-W?z&!p4v8IHV}iVcpuG2`h?n52j?^~P7&yE>lw +z7UMGdmw7Lmw&QKkc!#wlH73D7cY0hEb*{Ss*zfDFIFNiLl36x>y(3k9RQzU)XLYJE +zv5OrKKkQNe{3yG>=WTo>-E}PRGT3Wt^KbpU9Ct`9cyo|_PSKXLu-(*``c!|f8<_87 +zt%y^Oug*QrxpcZGqXPX!Wh++Qlj_o8s&j!3(-#{RpH)XZJjVNt^r87qvU+|RU-M15 +z0h{hMbC8~MMI;)3o<6MXeHz(&)2Tw)tDI)-H`>a%u#&(0U$f}T+7~Zd(CCW5JfC=y +z|HbeX%O_*lly4F5`B_RlTIIx_-=a(aPu0ot|9S3obSKs(55w<^=F}#4@n7?j-{=bD +zxNP>)!$Xi+t73xtgVb3TUK%TAP9eURha1VuPk4Xg|JnHdE2^F3nCf(@-{DB|>PS3Z +zvFg#J^oT}sNZnQ3tLHqB6U~KJZQz`&2eKY9OLB^{N$xSx-Q=G|)@~SM=gPATxw&gH +zU$S|}y3d62YlapzdS~;wIXpBT1 +zeck1;CBUPf`$%knI|lb}y8Y&`eqY7d#&~P#Z&~=4-eZhMWjYJqtGsefd-DJND?I*k +zcvQHyrKa4u#0!;%V>-_=Tsjfi9z*`e;|Fb-4yV@RY}bl-QE4r?Ugb4TsS_Uq51ASn +z9G4$cYgx_O3TI=)s7^7KG2pED`#+%<4&XDSG~`txGo?FKIOOQ?JH#{P=6I1I%r%7W +z;pOJPD~TyiW_)E;OUa{MSM%npFm%bKXEUW}n +zX7KLg(myCmyx)tjyf9hEIIoKI^}dU)s5&Yu`KNk8oj_;7cWK6;Z;j!0qqB@hXL-84 +zy0pUREI}RjaKJwTn`}(1l644hRJbS{6fO!Ug`cO`Q!3iC_&76j@{1N9g^R<$!(M!( +zzkCLrP_h<0K%a?8M{L#eukc;O_q_0(;ZmyG`hG12iD>Rv-X`FwTz)zndLzWP!w%WV9pnnwv^{8j$^ +z9g;_bfO&VE;7ljm&O#caZwcFIXyVvLf~83MSw_P6`TJZ9$ed0)=^obx{K +zbI$v`&)b@To>3EzndbT8->p{rJng>}TK71%$dRn!Uc+^EVYtuvzjkU8T3%>>$$|O# +z!L}n0vqxbQH=L~v%8VQ6%csA}iwC5S&R~rYO~s3f=lIC7oG!TbdYu)`)}DtRsP*Xr +z+F(6NXk9twzFQNL%@-GKQT)*(ns+K|G4H0J-~EcV^LgYSJRT8Gh)0IdbEP-BbQ6Er +z@W*^xv480Qna|UPt82QnOIdf#eVuoOj$DkQgGS-!7itTw)wcZ5M;QB{@Bkl5&m3Z3 +zp^&o$!E(QK+MbwsfpQwNV(_g*()Ag`}fj4#k-Ty +zE48OL1%0wyI$?5kW-9vOhtYeiWIHxD-^|Nm_<;N5?K8q>)SOXtgU$N=$e8dCST}n6 +zq^CC)g=NIHZcufLEOsG;oQM`U}8|A=LIPH-z8P&V@qxbsMI;+boeZ+Bv5 +zfN|B)7WcvQS;<)DSI{C(8~ym>-r(JBQZh-ldGF&u +z{60wn*{zG836t!JNR3Y +ziGshe$Tj)v#`BHuk^R!bnlkV-uV`*f6r4%7JB4>+k>PrGI`dKG$MIcD8QwW{&T{Y` +zt$9EHHBJ+aE(qe6y%eYX@3O0q6)sQsxNY@ttMcGF)3zda4uSjPv7r`iB!&ZCuug#v0~}{R^Hi*PMoCH^3hnTc~KE +z{qM{d2j&U0=KaK@iR1rl8F`+e(L3)XK6sLMg3Fp~5>fOa%_B3R>?nMy-*bZcsX%?z +zg;5jv^;=F*e|}#5sLssh^{zCNXdS)cP9a$r1J}KI9ySGuFZK3 +z_7vrhk^e>hn37OzZdq}y-5MUiK6{bR>N@T+LH@2ftemBi<@)^}{QmL7SEJiZwhQoA +zRN^}fQLhAFj_MLC6n~R4)}eT!ta6NVe&lKRu;h@{z&h)+_iwzH+?OvvvYotqkIb?L +zYG>PvGoQ2XKomWknKhAaj0mnUAO<%gnVtM;SZl>3Wmzf +z8v3tt#xbk7yhi5)@K@u{nd6FzO2&X*0E`7__rE)dc^McLw +z*9%6wH#Y7?V4O2_6h;%PDPYZ>WPRD5Wy&+B7fr4aUIicf1e`q8juhQNzEbW&!1fUTfqJ|A5V7ryq4K^d +z=)v{uOVrupfz_N}IaIbjnkZiH_EErH@j63sDY|qp&c{E`&mQVy8n0-gyseY)9nZp7 +zJomBoL*ZWjFWL)T +zZ41~C4{u0@u|C(ptqg;q`+%Hf4B$$T)JrJ +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 +zB7R!sk6gpv+ndhUV`skw5C7wpqh+r9#569 +z*LQZf%>HTi`A2%;RUDLO#_vtm_cCX9K%c#4cF!g=JF|zlsD9v(pXbI*w8t1zDn4o^ +zhw&D(YjBWU@H^nY9p6?iczhq8J-?&g<)Irhe~urhJX%xKf00SnMh`oB_6xPv+-Tx- +zXx9VWJAn6ebV&dHGC%ifGyaEO#_97F>t?5H1H;;7vEH-+SCaoXW=z;TYIkU~M#x6vj8nZrC0ZpTvQ|j_1j&aWB;x7S^9E`S&6Q?s3*!i5)SQvp4W4spC2@rvzu{kWSq!K +z&xgyN`Rf5(ec8j6*0&bwbB@oUuiy4ntd0J9l;A!7G;GPWsV&3L4G(j-hjL77eTuR! +zac99hcYZp?9^%TaTBC-!m+4ct>zwSO?WbIo8oV6&H2e0NOyyY%=jpzoPdWI#8<}}K +z{;sur|2S!kzUOw{cJ`BXO@*7&4OY$Evst?Y&yIFCFOMl)Jk*4qf}d^Mx-YwPG=Y4y +z&91KWJn1K|LE8_fCBK#b`Z8proA3G6+P~o*9ktc`cdidfu@`TH4`=+;ZTs$3DXk0A +zA8MU7anW|=$uw37d0^waksbMMU|h}o4ly5e=S&U%?@r@4LPp-5Ehc)&ML%y_=}t +z?cJZ=bW6;^i{?z*cQ5D^9D*x~E?b2jTkXu5SgP1622b^=7Hf7ITP0ly?cj}69db^6 +zH93As;u@e$f@e*R&0NXvMd@waYc8K&f1R7Nc@nmAHTG^5{#1WVeY}ez&uH6$hq(6b +z5k4h+fD3)!5}m;PRgRwoSWV|M2R@OQR)dCR3ITp>DRV=DgN@9%Q@t8jFY +z%Ji%7iTbEBi`I)r;B#{QTlhWHX7lzJ1M}+p-^tO|$7h7L9)PY<=7xVaweTrC*3-Z5 +z2fdVep}SocqTgZfK(|HA_30__#kkyc!H4g`+MT+eKz5+sGuDgJHvf&eHm$p1p~V*R +zNju{w2B0@M_EPW8EMMUq;z`4i%IhGu&7uOYsOxXUrnUvxIjt1{~ti)B`4 +zY9@SxJ(ksVzRl&xjx*L~9$>xdL4PSV_uy-jjk7FcO2ULq?$1oI_SY^eSPIGRP8aYU +zvRa4*CI-eVt+TADwpBF61}0>@<}7Owd5@=_@4|99urMazb7iW0r$HQ|dpdqeA9ojc +zxRX37rEa%J?}+)^PT>tX486}AT;R=R;SM@%mA_m2FfGg@=Ek;v#P6ETrU!}B-)eCe +zsqDCBU_|bvn!$WO!Z&I|*5ly1omin*=9=()&Z0B^ToZ$2Oe9hL`tXGlS +z>hFj2xAACy>c{Q#OX-)Cr=3W8PuiJCHif +ze7;*cM8td<-kH^X_JL#qeDeDznaF|OglJ^Uy{VVRvM*tJ7c3b&i5RMK?piCet>S2+ +z6kF(hW@YzFm +zkFY0D+)QqOb#^m*0_@>Zck=^Lt6#cn+I%!Rzto}kh0dB(;L$r8psUuPUy+C0ADh4a +z>^WcKyZNxj)!$bR&n#l?ch}D-?ezB%AI5yGAf`ofsT99YJvvSW`dBF3Xlp+XJ1On1 +z?;kp{x36_nyD82-Q91S9d%kWydbgN(rVbdym%;eg9PC#e-q%;w`2lpYeSI~VF^=re +zU1j9agx4#GkE~$d`b^$OO(i~~`cC$#o*f$=TSL6|Zr-I_*vit{Khl5VFVfHOdvBks +zxAt?Eq3{DP|L*u>KiB?=$AYi4FIfNWKl1pW`r^gNeK&0^|ID%YZgSsyd(pExG}nc1 +z&GCA4CI9|8&2i~8{yf(@X4t#dJpUW;h;Ih}RF-_7ZhU7W_ox*z{&~DBG=~Pq9(ca~ +zTw5HB7U#o +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 +z`qiE(#6h7`eR*vhHtU##ns!#}JudDxk>wVpY( +zyQYIVg`C`7VM3j%*Ajkls#Djhz)onlAII;lcHV$5ZkgJfu)M^+^YY(hzOTpNvjKI|b4$1?SaM6ZQOt5130Uu#N6O +zpZGAb2AV7NT}|-6`0i445Xp^JPuK8y*Pqt|leDK_oPLybrqGxTd@@y5iLG)$U)3JU +z`M#=gfw4^T#!~2wWsEl#tx59NypOVy-39vZ`Ex|iC@`uIM>lZRjDY4JL!(U{*Dg2B{+^x7>6YVhOKKSk&e36s6&xv~u;kgvC&cq3H_|LV! +z)*fE2GctW4=3ZH)?hmp@l)wdjoQ@+ro*Pmj2i}Ncpymk6mpI$X^Y3#BK +zPi4K<{@dvu+#lrKdDw=m3HU~Gwk2!OP|1Pa^=FV%Zi82rE#D222?J$nuQGKu^B`nB +zQX~5spEz{74`0|5+x{3l)*>JNEkKKJ1FL)*qQ&j}R$poU`*;_8k|Te5f6f=}`#0L0 +z{;E3qktvcN5#*Wn&=n_(?|55@`TRD;IS{jx&TtmL)SSL8%J02>EAZ9SMlH@Xi~jMc +zin}Y14nYU@Z_&TS6Biur?~AAU`(oQF%%xtPV`KE<%=J^8^6tEjdUJShU-3|>Y +z+sK{bADH0sWnWBZEoM8sr7{|y_Jme>@9*Zl&VtC_zKP$QpE%C=-r8Pb-rD|uWqdE4 +z>5lK^=;-6S&>uhV{qgPKw?962Jy=BSj=S%ybzltq4_!AxSL_ylFF6;lA^Wh3I23RQ +zjotoT+V_K-{_V@1_M;x{ZTwyRwNVp=me-w-{_O7s>A#hIKd;W{^#2)rySH!LQCg1o +z#=39f&SB}F{yXu(*E~Eu#5?7?5-+o +z@aS}Y%6tDT??pG!&z}?iSpD(tpv;NK>+<;j=6Gj#;~9UP@qXER|JsL6KHfc)(R>%* +zYTS}nz8)lg7rnJ7>+A#aayU4@KGraTpAiu4Ae(0gBj!6IK{$x%7&?#pXD-|@y11rEj7=EE2H1H$*+ +zcLCo955D9FMu)G3=RW>~JL!2Evp-hxUJo%ezO1aKd?PYZ&x1Bo)M+PI&!4Xm=Q%zt +z@(*l*M!v2t`Rng{`8*wrB}h2yU>Wx1?32pgjjrr{XJ6kFodxVOU5K7mVV>@sYkILU +zXF7fo?VTtWr}P!UZlJF}rsaRMbNCX*^a*@_uACp8$FHZKiP*Uj^XKx#$=*yw%}n&N +z<=9zuY3->cz+cpy+U4&nOLt~3?5GaD)YDrp@pM7p&pcj32w)zPgh%o5^TI9KjGkK@;FePn$Y74UdU)%iD~i;o +z;8MTD458tF8Pw(6W)6+Qv>7PjjwU-d6ahUAZ6|9AW0H{8D3=!+bC +zd*G{1;wpDnJN->h+k9ga;P;WAd3suTBK)zh^TsayvYPry#=9hZdQIsFd;AFNlH~7^ +zLCy%g6Lt2nH*c-Ftde`3iAQkuw4WotgYLC<_e5Io+se)@Dg4d$Ci5nC<0a`2Fy`vQ +z&!$R3^WmkX#F5$1xGHIxy~L(eC&Icvm;JABxG^z>?@+iY@nOxW{gV^dTXt`p7)tyL +z*h6>12QQq~Sa>n#)TUymyi#iwU|X<%vz=&Z&kpEN&r@PD*z;y39tPF(u8bUsGUTg|!nXI`moVGmol +zR4ihdmxpuUEc{x9Gg7VQl9bMeN~VT@kFqJ9k#gHwLTpmpi3RiPt3B=Qm3Zy+(2nZ< +zkUk^U#ZI0q@&}MxRkGr)o(TRzolPnTS8+an6>HrqwHP}NZ3U0JPxwmhVK0|mlh>YL +zS8Ri2s=5nJV|Un;3^f*RO~uDfu^%6+`yQt_c?GS4$wzT2n>QcMSG;yLF5|VG8{Z4x +zl8yc8!WpZbdYlc?8KqY9IqczAYQNx(5m-`v6Wno%cHPtonMQb`Dp}yc6)KLCO9=V~ +z;89Kml@SkwC>Nx^a+2l4`h5@9%e}sY1Ha6J-n$^ps=adgbSoo=5;;E{+FhO3PjzVe +z(4Ageubt_R=}NDRVo^n((!v=-JzkkTUYX1C+KEzTqgUo`uZ-#mUbVByd#Cuc4)1+c +z;f$VmUOS@y&0g6ny>kAz)y^&6JDYd;FsSaId+$ZxC}j%RANKVF@t4}l(K`-Ktn?DE +zj_CT@8OVFiQ+yx*mvRME6h4Jt|CL(7tTrwW)Y;+HIWrP_CPDf(5*!3-Zbe +ze{;OD!qIZCtokE~(+J*B*^hcN*zLfJ#U+D7J{Bv0!E=fIex_sY1LO#aRO_bLdb$1HCQ(A|4u5ylSQJZR~ +zkv7$q;+PkE?YV87l3q)DYNI!Ae4^uF?|fmCQ>Nd+r9ZykdhbMI?pMg1@0AJCRdP(S +z>OR`u%Q>+)a`P7+&b5BNea{s|I+t~~cNQyi?@b#&_o~hyy6boH%F)-?JtfjlUHwsI +zJ2)RXkRjhyXfgPA{Wn`evvuAKf6+=};@lWjKQ4v+74~YgtUvCayL$$*EEOr5oxU*T +z;(IxLSmvBei-R}UZ>4@(L$kr>q1p?)a_3V{`JIv>H+DSn4>=t&%Dao;wI^7^i5Ee? +z*}~d}j{K#YHqKyO=ng6W$5T$c`o1x<(-lYl$1D==>@@GII9p84kf9Q* +zHLm-N=ySE=4Vv&pTKnfT$ak!En^0X{Wd6tSeBNuA8n>}>N1jkN*&zYC5olxu0_rx|rNs+HtMupqVAhcT-ke$M( +z%^6IcS9{Z=gK*6rK-Z*GoEY0K;kyK1{#NLHv4iXWS{Q(RA>~S&ol5dt_O$lu#)|*L +zGZI`5!?>%6GimG|$2?gww#t5SY@;ojYF#(X*G~rE&^$ng9eUb>K{6aadTPsf@&AI% +zFmPM&et}hB!*l5+w6EAn+k<1V*Op|{Q+KJ*0 +zxA99tRnBw&e`((Ps=WWwpEKif`Ozdlve^>$t)(|#;GC^P=XB(nc%TB?*SAsm4O}b8 +zS=L|MOBKX2@f9S=5F-t7RBMRXW+y$ +z77)KO3HiB(Z*sczlGm4gyk>B6bJphE<2OAUPkkBM^7{&rn^(DlRc>GMrj0iS%Iz!8 +zm20Ox$yUX7lF!7MH)_joM{-+mvk&3OH^nAwWz1@~8~m;gw3`gHt1&7Mtzs2y#%5SQ +zG~dGq&Lu}Z^60>_M5y>KyP&@r+4Lf1SKGgH`uK8MbK%(fwo`x1flCsT5832oTb8hj +zcRTg9KT=oJPW^}bbUQvfe<|Anzw?(v}XGOFTJz!X06tA0mFJ8~DqkKN}oeWXOw@KVH +z!sm4t08b&$E=wh@6QH@_-x<8t{srAjl5Y& +z4wpl<6FuJ5Z=QAWuB*?f@5;JMk%hi2(SGh10(W(&zc}x~M@f;XIlP&?70EF*nN4eI +zh*t`+3`~TUWj#JG`|vfVe%yh|0b$m{T4!#nFAN5cDT!O7v>avXR!QCIxn#LeEx9Z +zu7;m$kPV~ZT<`_w;6n5})|VlT$(@4_GY3b)?dHGGT-@x;#WQw}#CTKjSNoK&C{NVRXt@8M$iMx0^5ivha-6?>=jigJhq{8d +z)RWiEtSdoyeZCg22xebaiw|-_21*vzu<7o`dCWy#h;6sH$9Anx6#~o2Wb3P2a`Rm9?>X%9N6(jCe7bX6`r_Nj$vcL&)w+DLg>vXm +zj|sn&>Gb(U_J*Eu9v}OllKqg}JGI}E*S;^mH+k)&x!&tRZ07z8Bw}@&Q#_@(JL_BKP{4o)7BoVV%Fa;IP_sbFTfW +zcGJoje)vNKKDgzZ;l~TT{gfLi@9Ve1YpXRIKiwTeHu@@j;H>R_tT4Wwu1|Tmpl{au +z`Kj}%FFFzmnjT58^L8nhM{Up`F9M;7el<;_P^Ms6r1BE~=5; +z!k@+{oH)2S4ql$};-FLX^=|NDd3d>!^7Pk5UtPk79}g`YslPMx@bFQ}p9l|j9v(gt +z;BB9O4i38Wz4!K<{8E3%oA1A_$;rhBs2k)<;dc|yg6p^15^jC}5;XoF+b=)%V5sos +z^>q3?*}Q)Hj@-QV=aAq%n90ef-rIBfYChb52>EnJ-Z+*6%gM&^NMIa-zk)jA^Mgm_ +zy{rGFiAV7DwFqT`bQ&@K-?N|o&Pe%D6l_9~o@_^;akWzfyz6=R@bEO$L^lX4}AcLIw +z^_6GbG1T!cC|lgQcXPJ-Yd39N^h38ylrp|d5iS}-u1u*$rc~w06wR;Y9)5tuktqj% +zcjCE}42|?_HV5bs#OEg3=?9;}Pf)%HC%%jc;!1e(WsL9(Y>w|ixbY*d2ET +z{pI6ru7|hrygMG=N<6$B{O#y6$H5^o=a2I6)Jypj$((2&p3V;7N&MPIed!lLd859L +zCvS$X%JH#H-5?)3{LizXyir^4wY>R-2ZJwf9(w!a^K{?l(dA7Wb$xv(C~xxN{zJ%{ +zd-KNe_HRx;j&BCWA$;$kj^HoFuCEE`yFr}$HcuP8oW$;t%~Qa7cH7M8f=jWHW%uOU +z#lAfs^?X!K?H+%7GCuJxV7(~-tG~WQMu9h9_k1tl?f<)x@NW9`$#HwhDDXB>&*zU8 +z{3qO-KC1sDxQ+_PzVF1vvsuuJ-f|*52mL1RBuB#j>{};?J(>r*kMB*?75rZaf4(Nj +z6XF5EBVF=Sj$c7{GrN0CXLIk2;x;75WcSF=Q!{PwR?Bq|uGZnm#Iyq=JcYWwT +zN5VVZgEy!T2K|@S>~kf)>h4KMAAIX}cW#QG4-UBSDmSlk?*?J^aVq@!uq!8H1!ohv +zN4b}K>KvHmJ89;uZ~=Z3_!pn+qVzw*>z4tyVl1NgdNy&#k=A2hhP2Udz8uYm`2zu% +z`#hNawZ_MHg$MtC7vHiIPloT$?;Z*JLvNlO_SbI9;rpure78|oboTvKHP}(&S@DHv +zAQ>S#2yepQpLo2<`;9hrkCFdgdz#a-cTd*d@4%_A7Y)2|Y5{_5bJ;1YdG^Z5T1_@4D2|K;Yc0&kv+|6}m}rx^dTXLGRD1^N*F +z#M55^$9`WvKa_g?`TQ(+)vw~?F9X+3UHG-s>GRXpoM-X1Vjmhj+)pW8tmJ+cW(+`)c{}rj2?*c>B2v^A7>N}-L*35=>b|^xWL>}h9-g;SPrj8Pp9a^%C^YqTW$BWw-rlWjI{7iBJA?DI +zY&&&IP4U-ZZ7+q%aabHanCh5p{{m>>Oz +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 +z(rwg{y)O2@qz+cc_ddZ{ZB;Nm5?4_H3<+l6U +zza3vU-OD@iZcxV#>J8F)N3)kUQBU})VjY$ZFZ|Sd`wWuzUv%1aZ5`paMdb&MY~TB) +zo0Fgl9v$ZH`k?F-4WGX13q!)Q+N0Y|1H8#lPR>=y@J9PQz~zs8i}7ZYFo^r~4yZHL|WJ-nAK +zd?B;OJK+o*mHa*#YO+ZXT8s+X3@|UAh@}@Qknl1WylZhj7Urwv%I8 +zy7>Fa7w^WDRdyJQyE4qG!(ZP6oJsBm#imn!`Z44RuuSvd6w|!Bi9PKEF$ZNJATd?{;(6XY4_-^P_--h+U4S3V!#p7(usoOv5`<8-1OFCs(2oaRL2kHCsi*j?rB!S{@(K)z1=H2%=A{{Pm_*Pg^#|%y<;b>dp9C{$bZIK>HFSu`q~ca8dK8I +zi~b?K)z?8x$>KrvA^k(PZ8od?(mC5Udc&QA2UqD{p+(!}OId&oe2(?m_}C&lKHb>6 +zwYIjg@6^qmZ!zoQ_>%BBb{%q}&0Op3doIMjRE}hSPofGqlBW2UCG2mF#V@-wJWwnD +z@pR_C#>HJ79ih-F?vkm`*k*mkA6EhQrE6>&Z;e@A7j?#2mJ$wpADQ$HU*}*fo!IA{ +z=pLQG-D!I|NQr4oMNL(g6~5H|338#EJ33?5>kizy2R&&%$2q>mL$j>1nxG%E?P1wQ +z(G0nN8Jq53adn4%#H4F{RV1&|-9pCmYnrG@B&fq!?|#B7E8knkK6eeR;GKLH(m(Wk +zwfDS)=ZuX!Vf88brhWd%?8?o5t;K8{OYqL$2O>;^OMJ$?prC+p73*Z^O1I +zpGMlXp<^rbzZ70k+vi#5p?kUQSJ7?>mzY4yR2yTotSEZqQeyim(;@k#xpPJMg_q%l +zc+%%(-zLxbGAlc#V<)ihnNS(gU3g&*V~b1wd=X!b%l{6J$#Zm%XS=0$61(K!zV>MQ +zsvoSAU|+A8z+2S~`ej?GOCKHCBQ74*pUWrgaiYg9_iVI;SI)=x-SCZaL&u9Iy*qfJ +z%R4`Jad!Bjox`HZeO`T#URvy&;i>A;dS|gmWyqWRV1QrtP$$Yw- +z^Y?LQ(L#rp*xQI`Z==j!z<Gq9BXjhal^>v88! +zE#(H&emwdL_cCjr>gMcT@{)e`Ef=3@+UPb4h +zf&J}+F3kMz%6xC<@O}7X<;T<=5H0kfdmhJH@wjB*i`i9=v>`j#L(5-xwfjzCYp+1ca0{``C_Og05gCk@Wye^tmc4>T;xim8kd~ugo?^wnt{HfiqfV)!e +zClk)T!+mAOTE%`@xxGERihZs6R5@kKtU9~ET52yZda1T1ywsj_=vMOa)!E-2^s`ASc=m-eU7F3Db+d?i6VzrDlV(`jK`rP%r7kWb>1 +zd>Qp5gIg)_V9~>%=)dZR}YQ2e3!$B){S7W95kN +zUr{~zrW7-yJME-9`1-?+f6iB}fz(VSep|J=kpbd);_;_;cx&01u{#k?DfeyMhoP8{v4wWnJ%<7&IWrrUX8mq7AN0xJaHaytY+^nn~jn8 +zbg^^yvS_LCJf2;=dujMuXv1F6Sr^rWsiZlKdNsHXW+6xMWpCDcQk}axV +zVvVh-FypsPv#yPwf_@xhA7%!>f9mm?@{dbzycC{@|CKvG4C5NlxTu#F9bFyz5VGJk +z*2!z*!b!z3O<9+V!E +zPp|JCaQhZNcGKP%WY9VEmCZgpxb>`y<|;p>>ORc3O)i^i@K}#-zW~^^Zi|Lr#<$kR +zd(D>wZTS9(@sk$o>;|^QV*Hu29lvKAaSEC@aYr^)^$4C0_DuHfcj1Uoztz;=r@f;s +zUyY@>8$Gky)NfI&x}Td!I$N)&@8xv83y1^IUgK575Y({##=O`8$v`)rK+n|g>*!=b +zp7Gld{2l)!_^%@VOYsO*9pfjh%E-5Jym1&)lhWSPp)9crcP-1TCf0&69d7x4Eps+E +zzD?fvDros>6f1Qq--?yO&Knsk +z<>}$_yX4~cbl3OnP9L|0W-)UFJ$=laAt&!x38H~wD}!)HI9lL+SXGfsEC$z~1m%`NM< +zpP-B{FIr9G`dlBbuZ2D2%*DvEsAHcsb~*A78&zl8&$Hq+KlAo<4ef{r8_h#N|&cy{@6kr`XAh9yU6RS8Q(_ATNm0WS85Ki +zXL<Hv# +zNUo=@=A=JIeSSS2EtmPUgjOG=u2oc#(7x8mi6!Mc8!Y*tyV(b>$ +z7bBNTu#4oAGm(eU16@ClY@>M5WIJNkV<)Un*G#yfPP7qUS7GyT4IHzckWLYZ9ABEf^E>-Ta;W%eQW3N8^nl8XL%jGjy9Ip +z1Ld!z{M*>(YFGC&U=PZNx2+Bx`vLx|AK6^bzT(oWg7PY(F<>WdQ(4&`aptn^_;(f~ +zbJ@c{cgXp8;ywRH8R;hn@0Whq*agpZ`FqNut1rXb!)7WQs{X6e{e&5G4aJ3EI-6pv%T&RD=G5y|)J9*G4 +zGkSdfCf@n-T5|;cbmoiSj^dAA_u9FhvSG(IS+OzV#NE0yz1(YGydC6a(W{zwF*B(_ +zzNvQN`U=6b_R0j~o(FH*_%~+^pLRB9LUh(a)P|RXony_S^8JLr44_h|<_X<9(t3G_DHkPD4 +ztj{k$=iUXX`;7j0Z_d{C=@|hY@wMKgs?9 +zV_O$32)8@&m%0PnB(LVa=~cl0QZ4#J@A2Xk0(%DV`Vj7wo3lyo;`+?nF5WL@UA*yL +z$tvB4>8=g((P-@yE~bGC#bq^E&GXvB7sZj^;DR+9`Lfb$ql)^n{rvbXz56Tg-2~p1 +zBlnDXm3zD0_=Rcgkw_kBt{E$2L$~|(dVDWj`S{xR&7H&TlXbU;;;c*XL9u4RS8L;= +zpR3XQ^3T;c^ryb?E!$Rgw{X^=k@kgi>?Y@ql~U)9m3T@ti8}GLl_}+nsvvIgcklD$ +zn&bDZPc_n>e4jo)Xify>f_y9&e95J|`Y)w?j{ndHx^njI;d?Z<7j0~2&nOCxeZCqo +ze#)r63$J?)NaHAB{`fNNLCO?|qxEXX<e-Tm>w~;I+4wSdk3PN!z@tCDXDIV-$JcY5_BIhK<+r!?ztCP2WhZF`|}yt6tz +zd|Hq`)x2li&fQAAL(dI|!p#j9r{DOevjFn{swYXdTxljG7aC-drhJGiO2tywymN> +z{rHgEM+fIkZgS3={HpfgHEv%C`k0Tr*v5J(dJ7KSf!5#R%@YTPXl8+@Yi~lY-{IU< +z_d@L-`)78z8&3PArgUPakn+i}ZQDgryThE8{!+;Fe#p$suz#D09f)y;p$z~1?%FZZ +z=?4Bk_TB@$ilXoT-jfgrMT~+P`yqgI2t|zrI7t8#q!$Hgp=m%$C@P9TC~A--prS@a +zjbaHJ1bakE)PUGgQL&?MWnXE7M;Jb4HCwoW!M3YxF +zLs<{5;x~Xlxa&>}IH#mzE90Q4A0yZ=@&79z*KohkS8T53`S+e%wf!dGcN_lbzcK@S +z<1OOh?kRsVrj+N+&&hXb-muo6{mwr_=%1X@8XOl4*Czo&5dGQU8YtaKH-N!RgC@xJ?14H*xsck{}i630v3<34$<_1tqCQg%OevTE*j84GZ) +zGb+gSb|7h5K<33?mKO6JL*nYTv4kl3KCAcrvfWX^V$Os8@V?O+it@hED&ij^rUi^|A7ib4*$G$i2alp$3(_^LXXlopSyrIgNTCb!(^ItHqw}#I7loeo(@Z +zI_4184ID4mpC?ud78h~M8E%=+aQnjHQFXO1OrtNHPFwkgzHoTy4N*hs3)j%+eC3vR +zI^~{4|3{wetW_zqI4+PYee1sRFDpwb_3F9TKlImnAaTg2?T)!u?mx*r-ja}f8;R%L +zi(ih|Tq|GV?8M~+5QfVFM>w5xGvqLYs`C8A-|48!rFZyK(C*X`Ijf%QFv^*l8 +zc3dyB1Nk6jB-fq%u7om`dy&bBNymJhob9BQyc`*#uK&7hH*0cI&RwXd&7Jn8f6YoN +zmAWk7>+8teO}=X-=lP0blF@q{zOy#6Ny<0aBRkfoFHI{6eA^)9F5K%CQyxolW(DF1KaP8X +z-Z!B)TjS7Y_b^7#&q|-b`ftg_kxt2G&L@2)*VU9oYOY)dM+Qa^Mr3Y8;K9UJfv!ms +z)-8daxbfRuE4*yNldw_;pFB&PK$su9<5iPPDK9BsS*Lh}`edZ+ +z9Nyc$ID#@O<(%TaNbIQWlViD=sUReHK_n1EAwh>;s{=7?mwpy(|l6offS?XR-`qvuF3FX_W5)ZqcP3HXX +zGM?3l>XI0szSW4zOs!F+Y3M8`^CihAsTT|A-@LleG4uufDfbu{m&X^*m;BK5uPOVo +zuGn*Cv6;WfyvWQA +zWnL)fJT=41eTMx{M~;}*n|BtXOQ}E9re$IYmZk=@gvVLNFOC*mZVYA +z{wMv6ywfm`{JN8G9-1Va87G@f3UWmQ>1w +zx)F$D%$XUA$GvNnEyG0+S9%`#(lmkF>xw=Riw^0hZBaR-JUBvI@~*l%oRFtp5wSy +zkug!mqqxAh&|Z$|O#8Y`>Tc9H#_?~Gx$jaeWg_?8BcfhPjHDkgE90L04Hu_yADyy& +zhjz6tQSLPt?rFcNfN??EE@S&*nNvyomAR3$-JTa^rb?XbxmD5at9D%`c}v@su|nDj +z$Ar#hoyD|W`g-1@C}YpB%gp?hHkB&t%hIRIyS|IrFJVjHUWey+rEecd*mt`5;PnAp +zxmO)vJct_=N|_ZE7dkN@YwA_q`XgnY9f(V@pNTz<1Us!y+}KidE@aBLE7{9>@OqI +zO7Q2VN9sIt(?XsNDD8)KTc>+7f-?iu7%4-8G@9!RNo4KpQ`?*X3^e&Plv6kV*gH<)Mu2 +zQXeMo%e%QbGNu<1&M|=;Y0s2nvuv5Ov3^MVnwMBw_M@9`GT!4>Sh!oBADf#a*H#iA +zy}sJ-dC)Y%bJqsA9y^gbVEPR+Pq+JvHm={fIq%bFNM9v!mHt@b6X66HYqg(sjw!5x +zU-?$^X4kLGfxK&08K0gX=lNqC$d>Zhaw~Zph@j6HLc9~*KI3)9dlLt{?_G{xNt4_Y +zD=Qne-*w7t>cz0AS9mtUZI2}fZ;w0!8Ypqw<5jdrX@`?Ye}t2{)|>lEUHp1+d|-a5 +zQ)$M|4a^%iIq#GP1Kqi=H=pbGWn6P_;oYk56b1wH3mXQ;KQV>2CC}R6Cl`Be9@p10 +zAK&22ch|{ftt+Of=26E=DO+z@wJXi7r~Gb__m2ky$L`D=qItub4yv0lo_v|q`8bB-(Y93wc#N1UJY65keX +z8D;UE^bPbM5l?#Y2;nD@a+J6P1IuzG9B(b?=j1_JHzlp7;V-~?hn?05EDkz#_Vo>U +zfG4C8wM+T_B +z4q?alRrjWP{OfYOzVoZB?EX@@FC}d?5D1Xg#DXsDm$5^_UgK_eE0t^Zd?0TNw-WbF +z^eZx6d)K}Ejvl|qyYBC}?$W>1#Lir5=?!SSvn0DA^O_*@Ou5IMK;Iu7Ant+rg{9Q< +z*g*Hfm_UodWa_o#hxE@WoJ;0uJ&2p>qov;Bo}HdU9#Nmab=ymO;@6_^N8-x!tOp#m^GA*Qp0mcJxWvGUi4^RZ3dJ+(VA_E5j|>UU{>h +z`oy$?IZZ?qbGa&Up(nYoe<+PYeb7#PiCVUr#%i^(IM!Tx&_ZWnKAY +z^~ZWV*AAo~zl7zjsS@{VSRsx%!#ceac?<}h& +z*I#Lz!_70RuPC@#!ap{9u=)w#pT+(%s|}>NeR%n`3ijM|{B)y?CNKud7)0C)U#9MO +zV^VwK(84{h^a+=wc=-^|F?OHQL)~L>mp)}J@iFu4m)Vx}vA*QJsNQ@>S|V1pQ)T)>T?*y)JL#Tim)NWoO#C +zl$+GyOu~?HT#oPJrgui^430PL+-_T4@Oz=#hK|jZu%w)%yu$Oi9{wb}1k&R-SF5D^ +z<@{0?B>vMmr}*{a$XvoI(~VhPc(GC+s9$oAb<6AlRV07Baa_{n_2s``o+~wYT9m16TJdd-}p{;UV#IqCSekH#B+^~L2o=1EojuO8*Vb4ZH +z5~qON&v)CcJeM&oJ8r-G`;mlQ{#=HA|FrZ*@A-X6({|>%@=S!h!>8Ykow=SW&mZ3J +z&N{#-S=Y$ox)vH|%Xc8+xlhmY4TTBZs~`WKmwxWEGXAy8eu%Igr!(mtRe)d0H!dW< +zS&3&m1~=|$keB7p)`zU$DoGu?m^xDE3tmR#X(hg*e*RB87_sE^9Tm#MFd6aEcQcS%y`M)0bBTD}f`cKFI0^%icOyPZg +zlucND{KIXp)G^*2E#FNTMg4m1X0F|HxUZg7+j))W-j-wsnTtu?>qoupK|PgsP*ESA +z;N2ceTe45x2S!2-A$+NZk>Jbx|_gzqH0rz<@Z0a)M>tjz&S_B +zxg<`UPujq!!tgqt5mv`rGtbDx@XoIoCy{nHGb`E|Dt*W@ +zSzibe{}|%WvrEhk+7(K^$+)`P@_ypb_+H@`L9&2J5N&C1>pn7wp|#3PfwO2(eEPW1f8 +z<9{H2X^X7AbavCqnkaL+CRzOc33t|j9^o6!&SviA%X3!0Ca)Rn9sB1@`5ph6`~1kg +zdD;KG?%&A%udV&NdFPMpkDkr@qtwrG{O~(PHw^Du^Vj65nojbAwcyash4|rqPf|bD +zBzy3iF^N+a-!1D&STTW@6Q_>y;xht&au1j~%XPYUUpA99wQD~0_IF_aYOedEozdCU +zU*;Xjp%u(K9PDXoe-3*V?`4yB?>O7#y*tSv`5mh~yRnRQ&lvn>sNcukV~GpTN{8I? +z;P-r54x2LR2NsFm04fiJ;O^|9QRVZ^bI0?5g|$2M>>a-acBwO-jw!G +znfAG!V-lG&)c$^GXX!iTdo9}p>%rn +zHCO|YaaVrdL73$CXxc|ziluz~4RMV@Th1|Ka5U?^;{OlwLCU?(zWD_CN*$0f&weLW +zn&y!i`%Hf2P4}MvOCrzqvMyUz_NBgKpsoAtU!6w5lvwxqzhSgn`Arn>SLEH$ULMTN +zj^Y|Az&+BW+GlkbUi*;_LHaxTn?j!5D*S`@U`RPi`lWws!@0uyIQk>TIPaNDDa&)L +zcuM({PCNYZ%q@TXZ_x2co=1z|8wT?1s`P_q-XvpFwA*)k&rL@=$L);&-svpA#q;J( +z?Fu(M=*8Ws@1#s2Ov!7?vLwiF&&h+`8MhCo&lpl#k9X_^0(BA{-f=0vGmFWqlU+3s +zkG;-PFWp{QR`w~&@U;JvSw7a7@+rOk-;Ty=^<_qJ>_2BL9XE$EZpwHnW%8S}1Li&DbJ!Hx+K=yeWfGA0aZHtG +zv4h3*3t4=lg7>1xd_I+TXErLpFZInEW5UPx9%1$E?y&e~5w4^4N3J0@P#5n9%pua5&(oeB<2lGD66pU! +z&V9>B<1)tP$NM>ZpJ1NwL^|`POy*5l&KHFXm^bCq1`CMGa`G*Y@5E&>-{N;dT*Ibj +zrSP1Ql*LxoV2Ws`#rU0qU%nq!*o(DhiF@XC-h1}q^*wu%7wa`IWE?5cG?Eut{qRda +zRuE6VbFYfITRW~Fcs~ouGfd3A+GUeo=3ebcN27v%*yFLMq0AAPOdF#WZ;%X-&l;DbQbWt2iEtbK6vl3<=G3K +zSv>G}L{4D;eyFxpFHD~)^*Q}oZ@jSkljwc*R-Rk+#sz){w@&gnfw^8ocb-s|JimsQ +zxAh1ko;WphzQ~qmc@o_5`myYkN0PETY-^Che7PVpYGkNRWLzks%B+z5RyuK8FooX{ +zFh6Wmz;{@Sseki1FW0W_c$H(ug(^R7PIhU;Mksp-DD0hrIA*^3CePXoZxcS$E{F8eK8{hWwZtFE(7_v5L +zu5(UgejsD5H@_HKV15rN`XR@0vraJ=+Kl7{6z*VB@A>3^imq%2d2f6LFkb4$N7 +zhT~=3KAyQ-ht@LW|daIIi3uW+RmR;{^ +zI6bqXoe5z2&EJX3>cV*1v{w(O(*_4i`zk!u{Y^h>k9Wx0Df}BQaHx0W75C&z)k9z^s)We4x(u& +zeXQH3N*^ozq4cp+&=8u5(k~Wfq0-kbK&7wEL(|ZFl)l#OW2LWMj$Qg%dH%%Y&s)>W +z`;UH;R~`0xgOqPW{IBQtPP6|F>tqt%rb(<#Qa)Teb(Zz{C~wVfsktuaT@5Ky+;^o& +z9hpns+*eqc>lm&LxW6}Kcc5zhP|aYH`~D)<5leb=U*XLP;&&2dCF^(%z4qW<6P+A( +zO|(GEk8&tYrd~)`vD69qKBI&km`nYyWB^-%okG%5mOE^ZJ6~`aHN2?m**qk8c7Syt_ +z``0`TpKzJ0$a?Bua@;a6TyMQ5U7!7uJV-yxuub_S;9v4HJU?QYdzt*Gji1BKkF6QZ +zBj?@gz9-m}Q|&-zlH`Fit31qN{2i>UO#Jfjx0(1IEd9&%*+Dn`_&=PyHQ^^5B))lf +zmB%;cFyp&*ynlX9;rR=bpC$M?-2BX|AiP-mdK2E{BM2`=!}G=@eh<&RJ`+w;_8qKD +zq`pU25T6XzmrOWY#vOk8itxLC{rk%uR}-xCEj)to(klpWy;b)*96@-o8lK6oba!pR +z>u+|CJ#>C;!jEYO(grfEeqiNc9G|Dhhqup$thJf^o{XQvtxqWxgtwmGfSd5@9YJ`d +zWA;y9{=?*)u$poK0JMycKPGyaMPELUo-DM)cuw4doGUi2d^$UleI7J`*s7k +zcINkgWqZrc-1!*ufgV+MB@bW>Pjma}f2zCv|COtF|HOjq4fIhlyw6b9tEH~Ud#fZ( +z^wmq{+FX7o9CV*0TD2!OXDRO(C`%q1=$x1sXdDVSop;O%)D2bT_XaUe9QOs}_rh`6 +za^EoI49jtxvGeCunaXpdKk{CSw3pnzly%>y*LwAEGI5A;YUB=Je@vh%eXZv{(2ZL* +z*Sce}XGYx|;vFu!0jG0kiLw+#c?R(FlyS`@n;{yDe{y^3)g6?m_LhUM4QcASG8 +z&-3_e|6*<+isK37Gh& +zXgHzVVZ+`K+J@?(W`W&*iKDB>csZ_x^q&;j+mpo{@+Y5Wp?#(aM +zaj$>2zYxK*bioqMgWYaE&Ez{7FVx8$d90TQh3>KCaSyLw*q|^neFny8aPk&FLh*>)F4-oxir-eH`z?h!`cmHTL?6;MzK+avx0k3#nf-1A!#@t+Cgq +z)X6!SwGMgDk-X=y;F3C}X=Ayc#q*L8fmw-;GnD>2>4`|b{kX6FbFO)Tj8u7snENGr +zct$(-)#o`Tsz#EmsfOo6Q~W#5Jo>EQ+Ed+oGgWiBH%Yq*cF< +z)u4}xpe(MOik2zzl^a0L_pO;0iNX$ONy#^h$ugyoV_-a|q +zy0{%N>mqVlJGi;!&viPFsOi;*82al1!XU0Mb=J1(&`*ea4X5$Vj#DjH{P$D;Q}Aov +zVQ%-|X}C-O?N_hJ+nn&aW!if~j+6Q&^-0P*>mKhp7Ri6FT{g}+g}CuenLXnM$ot26 +zPSgDjMdQLiRP`hoU&8Zl<8XIv{eUrdCGLLx(L=aX4mtb|!OO>@K(0IonK{7gpZ(5} +z;T|)MI%>w3L3>hGRNptwM8|shn}WZD6^(OJR{Xe(wI05ACjDWf9NgUcYUkl;`2EK> +z54}1o{aNWSFTbR`r623DqK;cvCI48DpdV=D)+aNLIQ)*}WNi;CIo2WX_)Q4M?B9>% +zvrpod>aKAd2=9<*@}(X~-)fHC#5MHb +zbG>6X4E2tk8Pzz%{H`R!Y0mFAI`60&Xp$J~NImk#5TxYsd+&C8pyt&k9!B)`L1BriKHXOY0h!pvC__F9pl9}h#&LpfPKDb_t*;O +zaycO#?@XBXv2Uh%-#f7T^CH~5xq?>~GQLV(Nar_UW*l3HpQ06#Kc;R^bLTw0dAEy< +zA(P$x2adT?Kl|+q->aWe<_Sf0a+r%Sk8YGDbxit}#2bSAo=bl7xqn@Y<@mq$YXkfD +z*QG+xdsTr;Mhz?@I&Nr3mQGREZCZ7%#=g@h&F9`laxyd%1_ajATZ +zDBRy1{Ba&xcb0Ka$IJ3~+4!{N6gae17A$sg*-HN88=r9HzXzNjqz}a%RpH#<7`E!%}4&8%?|TwXDgG +zV#YCfuWh66>!eaPJ3?jEDEl88WYS(@_)TPZeoW?^>-UPE{mX8k#Kp(G1MZuA+?(RQ +z*~h&$?puA_cMqcO`nYewz0}A3P23$fE&Ipw8Qi0N+!x^<*1c@<6Z;zKvc8Dd+3L54m4#>S&ip%8|{$!KzQD79w_hrZIbvm_1ABn +zP|SX*zfzCO>+t^9gi@dK@Mq@B(zZ;yGX3?Yl|y+>J~>#4Ic6l+*Bu&czSvnXoA+wn +zUmS3@xW8pTu&vy;Z~T{dXD~-w9^v&R4LP5NbUUK%e}P +zckE9CXh%8T8Nc9=k@=EiWIkahLq$`n@E;I1yleCS?`mdi(nCJU{99*?N;4Lm9H>I#{p6 +zd*Gfv*Q=+?d3RdIX3u|uhIuu0x}q|=+%2Q3xto2%|7ny +zao_6Wz8v@MKJIzAm-@J8;(oVVN2)T`dgX1;HPYBGb;WV#O#Xf@R6o4Sv*d4n7a{#k +zL)`57zw|e0tGsd29=mZ{Ds{|0=TDcK`EuJm{Z<{ACvUR9-zs~aGC0Q`L*@Jh_>ulj +z&MW<$%!g#mHvQfD)uWiV^13;PHT&fIW@~ldO7{7U0p{Aw?f>y(mxts@Y29k>{3=S<1T&UTou7Y+wtxJW +z)@{6_wC)efg3M>U-$3tQP95+QT_Fne!PB7)!fQjcCtP<^ChqB*00&NtWd*}dJ$u-otf~m-2H8LH+&_KTZu4Y9q)ae +zQ+WSj@724GHEZ|Ae?R=&^+)27@`~4!M%wt4S1O(_XTI|9nJ;(XoPP7=rVg2-#4vnIrq^eT*>D|-b*Cw +z5y``Z%N&A-1aU>|c^x4)KW28(Yn>r{c<$fyW+e2I1v4;WuEe8QCa&@U{! +z4Tl+Cu!8WS!@}EqnBi^ccHkHx@higJPVe@^3@@{S@Y2J=b8bAm{EM$3yja|&J_dM( +zN!pU!lXUbRQ*FkLXdQo|^}9Dx?pwO@E*JN=L{hJoXV>Jn?tI&>RPI;sd{(V${QjNa +zi12)V9oA!#N-IUx5AEc=DBd&T-u%kUIb!u2({}xtL-_LBSoUShxGVjF@h|n<;Fdpr +zi;2Hk+myNC)hEa}Y;(K2 +zNdMM2k#(Ws%&JZKjfae#gZ3?6E`_;fa~Qv +z)*xo`O*p=(TfFJmrr9lsOVP14nE!e61G{`W5cXE~Z9VoU`lS8)k%sJ({FHq4S(nHO +z>6~O!i@#nNTr-kd_@V{Aw +z?nxbej!5oZK~UvEA9xz~l+9Y6-}1ckTKj~#-)=8r<)L}@?!7z3$H%wi&o8>=d(ZX> +zzI^XFK6@`sPD$)Fq>t?B)~92yZi!u-zI{3+?C($*flb=nr +ziM&scRx;hd?E>=7ncTb8{>O=fTW)^tX3e|n@jfZ +z+a}HDm>eMoBzq6oXFDYL`XCdAP$iqE_PRuBh{Vl4$UQ@1@8r}}za1RRvCaDS_S@OF +zce4r)^gkjsscY+V&h-l`xkp7idRKT3lcn*kq&N;pRNro?$=y42?2_82PnQGQnknUq +z_qgp-!$?ZKh%+2$st21mwOc#wQ+fA(Hc~sKCMWhu?cR-O)&#D}opEqHGy|@!Tob|n%1{HuEda-Y +zm^NL%VIJ^JSs`S@7|6s;+?%pp1Aby#+@66h*yZ?t1&PPOj+6KwY=1@j5pNt(|D +z3EP;4W&;iWhpGfk2Mg*i?LoKKcC%}nt62!vE +za0;9Xr@`rP2Al~&r~`3O7wSQMI13s;Ludqzp$RmFX3!j3Ks>aBR?r&Sz}avPoC^tX +z9-I#sz=hBj+Ch5=!B7|m!(jxBgv;RyNQY4{8m@#fFc!wac*uYWFcBufWVi~hhHGF7 +zTnpF102l~^U@#1UH26=Qe=6s?9;U%`m;sqE6K26|m;*P!jc^lW!Cbf*=0P^(KrYOO +z1#k=83b(;RxE=0*J0TD5g1g}!SOoXNeQ-bI!vpXjEQW{RVR!@{g#uUtkHOBaFR>5jm1I6$XybP~E39N;6@G7i_*Wh({1KxzU +z;B9yZHo&{^9=s15;RE;(K7vi~F?<4_!e{U~d;wp=X7~!ehHqdCd<);f_plYV!4L2w +z`~*M4FYqgDhu`3L_yhigzu<592TEZF?1Wvg8}`6nD1%HmTK@k>%l~Nq?}VuTiI4=z +z&;dF^C%6bwAQd{p#n1)1LO19RJ)kG_g5J;v`obk}DfEN>a2X7MfiMUL!w^V=|J3=X +za<1!P8cc^7kO@cI|NqhUPuY8`FcF8)$RPg0Im9uC3e)Tlq%rF({@00Sh&>z*c8+L< +zY+slPME@J9C=Ss~7kptF68&!^{QMD=;Zbum2mbHoKm@DM`~O7-Bg|jep8frKwm@2? +z;)DG~Z#wXAfB(@RSbuAy59`kkA^Jn>Z(a0Z{h8yBw*R12^&7G+bHGNH+l6ck#xye< +zsQ8z8pY8uDYkyN~yB*ttF+nz3LJMdEK`YFig +z{br1v2D$DtM*09_?6Q`47-Q#!Tw59={f!-03D*w8KBt`yJ3ML2#@KCelyOAu?Q1P} +z``D{3_baSzX+Or;;oEJ@4u3M9?KWWVyV3-NO1n2^tl2=NeH&xnqh5Ew6-g1 +z0}>}=?DSu59MR!m$6L-}hi9MPPLmy;?WZF5v#fItv$n(Ytv~zHto?_w+i9`$$3CB| +zRTwkDY@p{EBv*T*FFMIn?`6T;|v9~2Zjj`in +z`>AMK>YLsFgy)^)RhkJL75^PAyY$a#mfg-b@oU@dJePjiK2G{$+b(4wakleK>Vxe^ +z*5GWr#NGC9k2^{1Gv;3zgY0lC8k6kwNnDLNoH58QgC6EU^l-)<$p>TXwq%cM$#}5i +zEp|Ii;dyQBwjasQG%!ZWH_ceWwxy2P`^2vuPqEwOV~VQs4j&(+&#=>SsQrg(8;3gnaML6H?08AJ*!Dy1mpP5? +zU-HzpAF6I1YQNMyJG}5d>rnfXIsS0!jPzCZd8Dth?G3OS6K6Ki;Q#Wr3Ep0ZJKXJx +z{Ml)-x0{-ip|-o7UVB^o+sD}Znpk1UxM56lvw_OCpWSu~TK?0*w*Bn3o4t-{uSM1& +z9Ko0tW&@SABYXWwwr#(%ZSN0aKU^bqv90A<=Cjhz86$08>a#u1mG;#w%xx%kiSuwU +z#<CzjBOS7RF85lrdMB4OH5VF%@k~-)oG-)fjubi*ZE9Slf~=V`STon?3Kh +zui@>ysc2iq9mz}kybZC7dsk=##z_BWOm{XUJ!6dnYVS|7-0i%Td5bajw#300`&vZe +zV2qvSQN|IK>o;R$US^CPzU|+h8wT-g*3(&i8zwG(`%IXA`_AQ9IiKG?b3S&v +z#;)J8?Pm{nv#+(ow{5?&FFZ`!&GswX{oELN|H8Lzzp^hpT)U0fb=t0fc6}XXolCa; +z?BQ-#TgQZN+kRzVc$l`E?N_#^SmB0m+kRzVc(`^yB>kW>447$f`bIGO!^er$iz +zhxY}$PW8s#9qjQ#+@vp-`e=;wm40q=thgH^{^UG8jRTqpQg`J#%oypb#jhO~ag%c! +zBXP3B7Qc2seM#7U*=O&UbJ}B&Nh{8-5qqj`i%6T2b4a|55jP1(`WIu2oAkHF7`N8O +z0X1%IEH}v;$qzd(Bpx!qm3_vT{0<+}Sz3BrI{4bQmM~ByPrB#D;B` +ze6#HmrfrvPdk!FJ4KL3jxEUjHw#!<^d&$#A#seyDlBeNrt$o}iPs9Dm*b(k_j*pv+ +zBjNrMeB93Sag#X5SK#iK9&z(aleqh(OWgg^ChmUe6L-Hfio0Jr#oaHh;_jDTiF-xq +z4bMZrbo!;yFMWP#^Glasn*7q^mljE5MQM?J;pq`Kzch)vU%JHIFKy!Pmp*a#OQX2^ +zrBmGf(kkwL>Gdl+@!K4X5kIzF(q-EvJ+@uaVcRACwq4?F+aEm{}kDFX4hMzax$8D64n_R1eAA6;b+ZZ1=nUjSdJI=>#ypLOkkJ|(vw~0P(lYHDJ +z`?y`@<94-=+ciFJQ+(X6^>Mq-$4$oV@O+UmI^0dh=x{d~Tf^OCtPOXQF+JQ(#`SQw +z6d$)#AGgjvZZdBP4^PJRa5tHggu8X~ag+IDxW67gZasb6dil8Z_Hpau`MCA>ag())@U$K654`7T!t>?-T7M8e53#Q+uczJ^)5L6`|J&PA2FA#>s$gG- +z%C?`~b_?Ri7~9>ia*^vYbS2S|TzjLg?;yNvmL%}!M2 +zeX@U|f +z6lAVvjD+duE^)QjUnH)!UE&&UmwBo&5_j7!=dtZFZ;`o`F|t40P0|zYCTR+H>*M1l +z@w3w@@v-evzP4S?Z`&`&F2@)n>9_3?zHOIn+b(%(+a-M4Zu}3%UD}f|=D2Wo@gMGH +z!VGt}!nLtt7Ej%va?MlK8ckAloCgmLNPuiN)Unx6d +zY`5@u`RxmjpVV_ZEmF?5UCPVVAsM^mznsr*=i)B?q8+vz +zXZK4|*4KhD>1;^6jFI*(b-|cXY)C#Bb1@r&F|sY`G)Cey*;r6%=aODy#BPTtc8Rl{ +z4sn|T#>nx*j0F|D#7q1cBW@Co?I!7v^cW-MD|sV+?K~2HLRTC*&bWLx5FjM(kC8vo&b!u?4+?EGzF0{kyfd)>OC?WR^d?J}@`pCa>T +zW9(-V>KI3~p|#z}+LqtO8#B#ppmnY7v#f3Vo|B!I%`89R_lL|bd!9bfIHL8e?fTYs +z$l5lWcADahBWlODqVVi=G_a1XC~qoCt6e5`y6y6j{>GSivw_OI)tFXh18r?>%ly!o +zv&{y2jB1 +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 +zd`1a)9Iql7l2ak{lxWiR3WJ&m>1kejzzZ +z@+-+PlHW*;%&^l5`~LNivXRBsrZV6G>*0EF@=;WF|L6Qqe3XxnyaxqC^ +zl1oS~B`HF38Oh}&SCCvuaurEYlB-FIkz7Mkoa9=P5+v7=lq9*Hq!h^wBsY@WL{ggM +zW|A@_Wl74Blqab`Qjw$*NoA5MBvnbOkyIzCL2?U8O_Ew9wMpub)FruPf6C0tR-1T@)^l`lFvytkbFV1kz^CeW|A*SwvcQk +z*+%je$##;jNxmW3L9&x%7s+mtZ%Ou$d`GgEWFN_XlJ7|lko-V$kmN^_LnJ?u947gh +z!4S`majVkIk2W2v9%DUJ0T={TQ42(XIqYf)r3S;G{tYLaS#s)kO;|;0%?#A8ITECkPSJI3;9q0x1kVoCv-y(^g=%jz#t64FpR(`jKMfe01aM_RE;`%U<4*$0ajoG4wwaV +zfE###5BNa<1VIQE!x9jI<**V&K@7w}0wh5SHi9(BfE*}*5~zS0Xn-bYgD&WS0T_V^ +zn1UJX1PibN8?XZhZ~_-_1$XcOFYp0h@Pqx}4*?JeK@bd~5C-880Z|YQF%S!9AP(Xo +z0TLk@QXmb|ApiI;5HOO5fnoSltLL)KqXW`HPk>I)I$R_LNl~L8??h4 +z=!9 +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 +zemDUBa1a9E5CpoI@ +ziFK0er8aEbB)wTiR!&|)QAt@vRZU%Ei>8*gj_y`HeFH-yW0P&B+s$_DG`Fy{vbM3c +zvv+WGa(3C}>gK-N!_&*#XOHh*zkT};_#X^76nHr3NN`B#(XeCT$0H)6PDG!KITd^Q +z%-Ohe@#hmRBqk+aOi4|Ow`%dBAqI<>nOCFRyEGw^g +zRQb5-N%hm3+PY`;&l_GeHZ{L&X>EJe{`yTvXIJ;zo_D={{qF}p41OH?H2itw%jnm! +zZ{y!5CV38ZOmct;=zV?EYUP^djO;XFe +zm|>@87+INFCTC2}WSd$;HR5ABGb|6(=$Uo8FK +zEYMD)26x7fKjNrA=BSx}aH7M0)c#XR9cDVP!vc^6TCAm`ozBQWPdAMgYuGv1+1VL@ +zhkY(P`vP`Oc4}+;;mJlyTc2g +z$YHpy&))RobnsV}0=BqbK>8= +zS{Q^+r2pxI_opw|k53^#r|G)Wy?=a=%c6$!#~4pTQmC>16+M>!J6QdHyZ2L-@!57rv +zw+%7FLKbXDQa^L2CXS^)Gcow*D_Bn9=j$jSmio#P)9cUFY2ypDxJ^H@bA|!+{Lu9H +zsLiF4BekCT8j2>-Lz{;gDd)%W$rKq-mg0Y$>g2xLQ1BvT*bZN1Yjk3B=|+D0OdQ}S +z{i5CVk@laXhVM~uKwVfy+WASQ;smLm +zxha$7^&~aWA@%#3_LJqQXCnp&j)EU!i*?l3yVSIF9lnPH>i=O;(-o51PWT=Q9LWV4 +zkUWPkn9opOG?QuSx~G<>o`OpUJrQ +zJ{1-aTFsXu`fY3B4xQJrneQ*&%QB7^*WW$<_7vmzgT=g;kLBvFLKPhrs#R7@NBlq{7cGeryY~&JhQ`RFPIT_I_ye#lT_XPdM*j;sb}?{ +zy0CxI&a{KP%RE+W|Ga(Se%Ig&B?2MZ{AWY?9&)XF$TEjd;D9D?}; +zTwWhoFrp}M;BfVY_!aXPl^e<|dSTIGdu-v>VToEZ{@`uak1pI<5xpj+=hF1$7cQ7O +z7Fm@la71|dZKv;;U&NOx)ELHDDsh`3Z%*TlHradJd=DcFV+*eL5A6E<-TB*^Ew;n? +z+>(48-%fcuPpI;>91Um+NKL&P5GW!TXUE>RCTcV=^ioO0aq0o!SIF8VaA +zu5w&}u`OLvUH_ry^1I!aSWl~4C1Q4n)idxl +zGzpW}`M+q`|6hL?+V-`xZ5^09WVH_DJU#wKeW9vozd=XHK#(_M{++O6k|&b7QVn-K +z7xml|_+6n^w>Rhb&8-P5CC(H!>sEYha1EZdQi3-`eQ$J$<7l0R=n1>X@8!E!1zj@k +z(=%LD_5R?ucK+Z`uj2)!)N^N_mY}^a(PrQh9xsx9Nzv}ks!ukLJ7_1p0^W%p?T9&e +zpCj7sV|s&tNcxRCez9_MxJ=)F(>tpqkURSUbN4mwl)~f%ft(+6ZDxJ*dUX55m4@<$ +zb(3llig$UHY>m=NISh9?NNO6cJsqrmWn$sone){rr0r5xow=mh`*W#t$PdONw*Dfjp6SfBam!wb8f!BZ+; +zN5T~j#X65C?c0Ci1+VnrKKZ`2+fRJqGB(e0iTutq{bfX^@b#PBX1?1Gl^MP4RdE|A +z8qjVu)aR9MQ%WvA>UsVypN~Fo&Dp10N)p;ORQt?4biK%Zpx;n*uf^!|E$4TA{uUhi +z?Xc;G*$)*XpdpYV(6It0$ +z*BB^ZQ>nQw +z6^dzi!!*BJV9TRB&=9mvRaJwql9>0{+d5)b>|vE|}kwbnKk>t9uO`Me-fK +zS+7cR?44=(4lZJUa;0dqm$1{d7u`211K338EIo0`l2dKbO4`#jA%S1FJPwNI9t~g3 +z5L(~e>R>r{b|C}vj7jEDp4g>t;~E&DkSz@DFPtWRMV;&yhJwW%~ +zEqsIXP~0Znl$b|~b0zX}PN#X_zonZQz5TH?gH`*ab{8 +z^jrrP0l!-d-N(GdynHUX%pD2)wx{o0Qh(dW+tIUbT3v92vVvM=S`^YyP2ZF1#$ +zp45ii-4v}bX%+e8Q`8bs?v|a*^Db0u+wnbp!Der%t;<%hY~WeV6(HQyxJsrm=&P4# +zh~KpZ3HMhSXuYq=``Yi_YZdc~Mf#ycQWoom`sDRtqGJ{Q;)fP4E!gKO$h3G>J4caj +zLH$XSTPxOF5n8ljfw1fhr8a-7dq>NgJx&!c{pMR0zKC3Kc4WUy>UGKbj*XCCV3yR`x_qdKP_cia<9BL-``1m +zb2sm`0rNMrBUXr651igLvC3rrY2i}o`JMZ%0$Aemj$f%*-Ta*L5W5 +zR?LSCj*z;9w?2|ftan*zCPP4wH%gH9HeBS5kJJ-E*%+)@ez@clp??c?L(dr%RmTq?;+H +zZ~9_pg!0sB7FQZek*Qi@&R*{^Kxv+^S+D`cduh*yZ-tAM@JuFdj +zsmh1;{LtnXHAlyeX+7c4G0173yW)Tu%T4u(;P3LX>tEeDrL^$7aZk|m+0ST-#$)M~ +zRBxvQKC0|-O(@Bda_Cb>Z_; +zn;FA+P2IX>^%MWi*=}dO-hH+A&0HALucvXowUB02YXoDP@w(A%l{GS^oO5EQ$j7~1#`kLIiFKb{e=Tf02_B-P0!otNDSki2s +zY~fI*T_$Gr=bzSpj=-NI@aG6%1ZV@E+APtNxX@*-ZlkYzeBZK+LG{%Y%C~%n*%b?% +zH=SfzHELc@`_RVg;~mc%ukR<&^?ciOl#%vb#LNv}0*-%>6`no+le3cN%4omJ&wD#~ +z`HO~Fmd2l7^;zxxioVw#_coSHmTEAqd+Hw;M=NCNw@pfVpHq?Rausz|<(SSYg5)|a?8}q--)Lr&) +zx53jT%ZhF}$X$QbU}{}7U5|$=C~%>1-a0zZ!?`qz`qr#k(|WG8fgwKixSFt*?|M1W +zmCa+($DIUU7&~Rk&p0I>>^EpNX!yjbrc(6ntBc*)#~w*U9`K33zK|im_S$mqBJKk{ +zA}?N_XFV3yB_>5%#(O_`wb2P3=?b}XTO-F!bmzJIUQvyIc-0_v+Cw*y8|<2cs&=l^ +zbI(_tO4)gR%q#vF`(UoL-~OXzxzROpbTT683qFZgG2I+^vpL`XnDjoK6~!w)bljWM +zTmwCG4-MnZRKep*9ttxau}^>NG@y|krSR}doEF>k72lpP +zs()hH@_7OC=}NuV_Y`Khb18EBh_Ro!V{7QFp&8!iBi$XpyS($3zGm{~F}rDQcG7Hl +zdv!W|Vz=C(m3gXmc5zY>`>d-)!7bWjN&Ha)wO{w$dO*kKxjQ12bv@VV>uPW8Z9-3b +zEqb}w-$S~tihH5!3;T$tS)N~?y}v8bAJDLd;fg|bVl3O9xzc9iUOaABsr0 +zyk~WhU(MOdd6?GsRO6QN>$8K|{5L6=#d3^axU|)WD~F}IVf>PW)8Wjjn$41?u4~?_ +zTd3z03eg?7oYZETG4w?LxbcQHm-*&DvSpxq|M*PpQWkCTFqwiK62giiJ&W!|6-!(< +z%Wr0B-Kv{F(`u2D-fSv3}}Zy0_o +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 +z*H9*x*=t)(s(pqwb35i&k&Rar$Q +zlj;)Dg&dPhXU$YF?wimRPTcXDzm4wA$0CHw(XJ3*}jd;b9dgD +zC4KX?i>$%qjifsVBEy`HTdbEc>hY9gSbI@@db`c7%6olZGt7?r@2}Vtb2sPxs*zEl +z2W>{(LgEe&mvFP%A5371S#7XhK`y3FRjjLYwSW?DQ08%wV_%h{55CL2c4?+9SJ;=f +zGjiQ$o}-1uL& +z@o%wuwxsmx==;9&l{#%gX1-q}B%OIW#!lspW}08R_k#PGG|hCj7EqmB| +z;OMYRVxVr*a--_NyYIS0UJf>j9C96OwWHnVP9vLjz{&gbw*VDWx@q#9I%~Jwe*0=7 +zYHN(Q6Nh@?$1eM;9T|3)l3wh7$3{OVS@49{4X)wdkQM>y+>E>gn{cH!%qv3Xq<+GSg$~%ib3?L{=qiWx1aN_JZQWlSiQ33zLi2u_oA1X4;RW!3s_es +zE_8_XMvR&d{v$-3k?)4y*jSOg1}(XHGW<96P1^QKt_*9ul;;|ke%B~=Fg|kouJrG3 +z%MaN+zm%rCBljNHA^kX=9reb=i)pUwpzuIqYa;(nFLs5@yHap1l$1(yg+^wsZnp}7~wn?S>bFs*}BxM8QF%)W-R02LiZmg-OuTmUwEOPb?Ypyk>*8IX1LfOh+&wzerENIGB5dZD?MFi5 +z)V-3KSUk!#=E}v^XSOzFhpXMtQaZ3dX=R>#K)#S@v++HdXp +zYR*Y3#4=Lx$Z|Wr$zZ;uq;cIdK8f}8Ug@CjJC{4c@5}BSpr>a&|5?kYq=fCP^z9lA +z_M#q!12$*7c1WJTAGM5CE3@fx*Q!ea`K?`VH0`Ik?Al)Pm9gE|;_jiA@jUr4g%@WR +zRaF&VJyEu@(RAU1Y|q~8F3!}n_Orv;esA=X<&>Hh3VW+6NxH@{t>?TlU+h@qMFpw? +zC?;CGw-^&WnHc^sG5!zJ^nY?<`ahn;Fa&FWdXL{)kN~`0?!VM4kw=>XD1s7D@5@sG +zRZs(U(10zV30j~HI-m<%K@ar701UwhjKKu90rfV>zxRABu`TugHm!krPo6E<0rj3l +z2XF+uz3-o{Q6lKP%ihb~)^9J3;1(@a16^g)Z8R-x-IJxzKjSB{nLm>UnZo*e`_%eB +zX67&Zs$rkS?A?599YTL +z$I;qW(8kfz+RfF~*4oR~hDOoB(Zxp4!O~OE*4Obb8@y~ib~(CQqEXP&%GJ$dm!*r# +zUO`J&8yvw#(ACXL(AvWms|76ut=&9q1??Ph^1mPNZ}0wdHyrhs{R})TtQts +zVd?Jv7bocH<@TdR|7ZTPEiT8)(bXGU>w36ZV|)ayaAwZ#ZjP>Azct~2xOnQYH0rKC +zmM*vkOB)*xYHKXmyY8~Z#@cSK7za-r&0f&mVXvp7wWZ6{W;8lhP8hURp6<5Rj&_dL +z7&Q-@J(jrgpMx(?jz*2lt{*2a=;bEp_G72tx^$-o)zcI2&h`|vbMu(m@VBkJZ0&75 +zFu*>JHnxIRdj0PK&t^Bg>)X!7Z4Zr#i<>2Nj;nrL;vYBv!`i>Km$$3UUpt&V +zo*P?Vyn|d2W8>}O_1meV=U+Q@!=+#uZ!_2Tw(_+0aCG+)bi;G&W+&)j>1uCFqweBj +zYmeb`bGLT0`E?Qdx!U};n%o3x#CQF=-H$t^>w%HLVen{>!~D|XVQY_DW$Qts=;r?O +zzGFat-V18PJY3Par3=|S +z;`cVOv%k;(x*gRYwX7S5uVvzY?|Z7<1Z}@=PtDV#Eg%8ojpP5PaNzu@zFaU)R8q@R +z{x|1PjB)zo_U^czskW7*pQ+`koa$c_sppQ` +zeyZ=O_Fs=NwIB7|QSHC33qTvS{?|5YzWB@U`aj`&7or{Q6nqQy4^0v%G&71iErXB^ +zRLxSVzAE**4P3B}18);Iz;gI>wBtK*s;2EfI#G3ArzWZvaxqXfo<(p>K@^}_i9RGS +zPyJpLHEhcRRP9|GI-CQ}=U*}Xr}|xqvHNxUYyJMZo|>nw_n)0~aSy5bwbWSq!e8t6 +ze;VgGs6#{fd#4%{3Ho>RD}g$7J-D7ksKUG##?%)Xj{XWT|F7!mfS8bYR#;v3QK%6bJ($-g`J;f2G3khZdMwuc{pck +zeU#?g$te-T>eXX+311(I~5H8|dM) +z4w_A<&*BQ|sy{X{QC6f;R*+Xxp;1;;Q`c0YQC3oxSJK=6bJ5pT*Tt54Ix6T@OH*ANz5Q%b(!uHI$!n`(wY;jlx;AxLx_UaQ +zddm9PR$fyNXO6?+9QAb+v745@s=m4@w#G&VItJUQ_+?o~mpT;IVpEl0+U5UZK}ktZUE5HfIw{Oz4|yYbbzHKxvVoG0F-{UQhT1qc +z>ONo|XRD0P6m_(<Z3Wn6BtLsyZ)Cn8>oKaHNH=ugZQ{IYGRWl?< +z$F*q5Yj4w2rgkz=*HTu}F(ija8_o-d*TnVWNb*|B*jiIZ8@FCfN1q&kn*06ybPSZW +zbg7$zJ@s%zrLBfK)X*5nQ}<6#SqmFbC#6XZFvesXb*h^B)H&fP!iZy0iF*9B@Vuz2 +z{peRmN!~#I$4)=)CLSzmGwh7V1fQuVQ^!bIPeoJ5nB0_~SAubo*H%>4q%Hv?sjNpm +zn$#{BLq%#2d4-=Rg|nmXpQ4%`b!nR7+WOnH@hEAoRimC+&9$i9jL`nE_WvR8ZQ$cL +z%ESLX=?IE&s1gJ<#6Q@C6Oj|^#rDN<94C>ilPo2&q)6vPNu0ae)|H2KOVn31)rhjzA@3B6zvQL4YGbXmUwwHUM~b-JV~&v~ +ziEUj~y&P6`^)#iR;ck*F4{-oAHEs}}iuw%{KU7ckY6U8{#?(#~nWqLTswI;(>o~GB +zNkOxzg6773LwU1ir9L*P9@G6dR@7FOn+`!slC;y$YMQjwG>tyOIdDTY8>J02-Hv~E +zCC$p8%I1ceMyXTGjg|M--<>kwRav3CV`J6bHBtrD_chelG}YJ17@fr%9e;~A;9tv| +zVGDR;{Yu_GU&bAqdhWhF#9fmuys3RVZ(e_#H>f|!o6wP!+*7)x7ZS=MJdVP=jcKP1t`>5|zzER(oec$wb*Y_{J +zXMN{=S7f~^>$O>L$|}veof+Tyth%g?S(`j_zi8GLY#+;dENg$(H?nqQeL3rWS)a@L +zk1StyZuZsL-Pwz?-;jMnc5(L2*|%kvXIE#}XWz$}z9qXo`$JjD>>b&I*^g(vJNt`S +z@6G;T_8(^VXC2ReCVMLTZ1(fnf1Lff>@Q_Mo&AmMf6e-Cw$J|x|Iw`9_P^eLqkonE +z2U$POs_@^<9AfhyOsez4MjAY3aVwi=FLms;$9=KK?8fu!<_Yq$XYZss{DI4t{l7vO +zNoT*4o*Vwy0_l76AQDE(C`aEprDT#lh*^FzwI4*}a^o!X +zZ`UjyWsdtH$DQ|jbCsBOZ(xic#BL+<8-*0 +zK1AGIGscv8Gilh^MZX$z85DgnANH6f0&&mdtY$mza&7CHgC27Zie-+@YLELd+}yHU +zjr*XZa~PI6X8E?I{G9im|DVP9r>0fjWy!n{HDXtk$^#L(B}(gECJ4PyGV_d`ivz^pwhjn_v_fLPn8sMBMTbS-Z~8 +zwywB>FUf|BPOIa~POGzsAM;{l8B&JS;x<}xTCGMJkSMYp*^TT&juxL*dk&sfPa+49 +zBghQ0`16ECb|agxH-F)@+Kj}JA!GzOikwG+e|B00;2iXi5*AsFY)1AVN06K^o>qtP +zmwJ`+t(=!dIPGQ#r%ydSxDfIF9}fQpz8CiZ*XkeSdt&2!TkC3Hsjtr0O`+bvSL7b# +zt7?1s%Gme$;?_03<-U4fk8itwRu#T%RtfhYUV6>0U-G(Hb#~EjPCBodRkg1qZ=^f( +z+p}u*>t@yF>t~e(7rkay9YMVLnJ6&!o#?pk_7cJ%2gvsj;YRV>^u}2g#Xj@@X4TQx +zr*+*hF5UF2-!QB4UTsADMzBl1#C#%<&PzV#arDH!);0_+#!UqG=GPjxPSPErJZ0As +zrRi$fK&$2IwdO{ZRKev*)L%e>4^X#tQ(G^Co6D~$Z +zmuH4^^%kO={-HIqO2pN1-Cesd+oHbiIxWDz1^7Zcwiq?9<1hBM>v#`oj{ +z=-)G|rbu%S`X>l4{t}0{i}@+s_91cP91^cmf8S(ZfC1YTOpX6QsSGJnq80 +zmpm>buK!JvAN|edXCG}n7^8kjH;1~Bx|pNhYpLfwxG!nX%+Df^-Ez!_smHVEK7$-X +zBUfy8-b45?(mY6*eTeAl^quxu)G@2hlhzD!0x6?SMduuCEIcl4 +zPFo+secZ{@7(7JUL9ru&chdhJ``;ynAO6keXZ(Y-#YZ_N_K~g#_0c>+T~jxupO{rU +zF?;JM>aiC(`kUX+F^Fyu`*|o~lkiF6JwSOHp2&>D8{g0e@Ozv#M$b=}!yh-g5{I~p +z?i^`OAV-kBh$UfgZ}^B|C-(f^_zlypA2V*l#PbyCmyxGEj@vTg{J$(A%0Ki;#z#cV +zQWwHq@1gGZQ_r8ute-sG-1-Vok7C|LTW=OtJ{Ic{7(Z{3KSYxlObxJz4m!|vj^+C-hdR9ly!vzz1Eo1UaE?rwfuKjFpN +zy4DkBKk1KPm$n{%_>9`zVq`JQb7ThQAcqjq>2xS&@e_(1#(V;bh+V=Yqi0m0{fvqt +z`;lto8QjEu#F3rwR}qOrU2#9=(3>AO +z9oNmZFT_KHU&vkD-0-3!Vmo=XpxDntub!*#@)`Wckp0L`M9Q@f?nNXHsZR+%zh1p= +z;uk{qESy4g-C)l{qzC(;9BK$;L +z9pQYt*Y8ryZk*ooUnt&RH7z%8si*mQlK%7m2XX7sEuULvDVyu&rCVm{2W9k&c;^{4 +z>c~@Yzax9Q=%<*YP;~Mgidp=GS}-Rui-=vqoExDZ{?Wyy`4eZ<9^|F;F2{f5&9o*VBvqijL%D__NHf5Co+T#BW@n{&(m|=FNcSS!|#bF-($X< +zc>XK8)uh=;y>?34%brzz$Yx{+w_1l{_R2x(;ibgYKPPoZ_+`Yk*b`s4C^Jr1|8lr? +zUL1jW_J!i|J314dyey=5DQ-vS#W6b1z7P8ZKiQ5%Ck5^Mu`rJ?gQ$x?UbZM`Q_lBH|Z6Mw@)^S#|ik&#FD&p?_oF +z{+y8sho#S_-Nf%nNA~~xStTNNH;hoioma&70)9vcvv3pa{DtuoyH^(DH~%Nc{6at3 +zryxJJYU|%Jht&>a4!1je!r|u}9(MR`hyUX6d55w`LViUK?{OG+*fh{4kH__J)7$&xiFkRc+kHsBtv4Rm&w2B}eS~M|<$>#zpX*|`#UngO-xKMM +zS>b-(WFU`oxAN$90{3(>;=*I)yw@Ps(-yNf_UK&jaQB1D><1r4)*!{pY@XwO@OF=P +zp}1@+^tfz#OF9$1JnY@0A3WdmmQ8O>x$CFU?HG@mZ-{mG_V1u@osj_^80Xn@=LG;1 +zmbVT_UKglu +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 +zD*q-&PjsP}AHytuk`W0bVddw>C2{yf +z4@wvbD`s&U6h)mL5I@lqC(#w+XWZQI+EM#SK6O4MZGMsmNmJ5u<9LktBn~%SH-8dV +z+)SF5Wy{%f(9W?3QJ3GKRJ4sj+z?FsM8^^x+=RL!MF)N3CSkgM`pw_)B>HN!}zKlP@Qn__*omI7LswNti)gB#d!0Y2ohtB%V~hhoAeo +zI)ofUrVz1Q` +zZ0RD^!hs&=J4jgcH+Pm&4)-VZ!0V26J&3#1!#YIjLB4k;^&mH7q#kx6QV)NKNXI*b +zT#0-S$wi(;?I`*qcN}P&F71B3JtOsEYfWc^rXKH=JhCX +z;)i}_Mlzq@(Q@ow>+=bB4I@AB0C-P +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 +zq0THVIbbER+hW&&`N%4hrcc{x +zi8fk|zQMy(11uIW6YSw!k-6YWpNz&>^<)%$$$L6|$xaTaXp0$9gaxH;v+$Pa>?TNev9qpK#pi5m*XYiz +zk6mZzA+OBwWmVCvQFK4j!X;D>)7m(k|fSafuR+#j!kFdS-;ujkj=jVkxmJr#rnil?l}k*?wsl}`d-iq{+oJ>5(+(*EQ(nicALusb5)vX9 +zJxz~(mm73#iIdy4N#@s#4O}zce!W!0^>iMlJx+?El}a!}ms9*jb)7-fMBFyOD|~v; +z&x|iar#rHJp1-v=VlJmlBs!<_R5CTX9|JJ?$j#jFCvwzf#;@OVah +zd2TgUB(pO;+u{~oI^>Hz?LwJ^u*WFQLZ(TJ$Ne}y;@m_`#xCuU*IAq&%sueU_%JV* +zV$Cc91BE-JBrMsmjpO>r^N~#x) +zKnK1^0u1RF4S$_a=^g2Av_R`^V~QrXI^3Qk*FJ7-rvs)2UeiSG +z$!$lXWNUYcycbSRZC#vk%<8Y6w6bRPX8mSIIm_xsFx}KF8aaLTQu--PYC>L$vPacq +z=0&aM9xj&>o4wK#pFY^+%;~h6=TLPMVG5bfs@o){N4Zt#P2Sb;G}=OH?p{KfzKUwm +z9jO6C@A=f{L~p!qB$u00PvlJCSsRcYr7wz|YlM#2OVtD86FHTldoy;4L0h+Y1Emjo +z=Mc|4_B}Oz;SQT_l?&=*bhES;$Eh9@Ear_eqI-w8UaoGWhzt3p+SD?+ZgFOw?uun* +z_glDR3nb}I$GTbnyV!KCoEZrFB%*6_E$6H#DqG86O&CJC+7y=Wv8%@f?jYxaMNnovW#4|w1CfnPuU(U?Ya*oUNn_m~W +z^)CC_Q%Yv?q +z@;YP|zij!FrIar_oB!IP|M+|g=d7&M&1!wcq;Iv$%O4~0B7JF^x_Oz>OS>#kHofsl +zrt54YqcWWr?=pli5#@qYhSTlIQu~|kyz@@(jjv>%41Wq%a=){9MRZN- +zkG_ps&^b`hv&Qq++JL3l5xs9jRyz~yUJpNDZ46gfC9!0i*}@^Evet9y8h$`-!-pT} +zYPX7uODwL+ySDd}?Syx~#-qIBQYQaas61S`q3Ld`;Qpe5Zf?z*y+QJt4)=W@+;=c< +zeqbTd7-YAE=baSpLWnH$v2Z~T;k8x~IlrU}vOURvxKrhQ;k;duf7PN); +z3i-2A{scXzVsksaq@Pi@qlkm@#a=y5O^fH-tm^s=&hDPt`&%mN8yhPt!d4{S*BP<6 +zp68N}PRQR#oRxX2jcHBX;$|mr1!;{(xZ%n^_`XhSd$g;A1*{f&P*u@tSsImdQB5Z=$u#0WAAz&9jRm%clM-QV3x0AeSEEH|DHQG`tC-neyTxr%_F_11sM^61o?z2)Y-^A< +zm-lh&cZ1Wr<(((yEjB@ps|*Ku%TR`cyom@0)>=~UM{;-lm=(#Qo;Itds!8N_>&CKx +zRdoBEH}OU{_qDjPRaX}6^`#ECETziXz0LkKD|hFcZd-dt;nKIfHNB$3QQBS1S5t`duC2f5JC2YZvR|>j=_B?MV26?kvWNU{TpR5PAM@upnC9Rf?dQW-F +zI_^-idQZV!7xv9_lo{`o#qN?0$t!YTv8hIFs({xKqyBsbp`o>rbcLZ^fWl#q2 +zgx=+v+|ja?-KBA+w5BN%+gcburF`;gY*T)UsZZgi)Mir!RlefpRS!O#`%r2Qxs^R3 +zW-8_NB(Pq6jN4w*Z8SE^-&*~*N&mgXsHjBlIPeC_HrXT9 +z$FzVr7YN(H=NaVgZ0aVGIY(SZ3H9`Vo^F+I<;jjNZpyWCC~!lQBCHDDB!5@wKMmGh +z>{8}ch8t*_2!FRk5)odR&MV#H1N!CdbPrChlxFo$S)ne`H!^Ud_d{${09bXoER*B%C*x>CRBxw=G(%Z%r-J +z0p*^Q%*V|8z9gWyI02m(q{-${Jpv>w`@y1uwg(Fm4?Sdwi7Y>)-3*Ef5)a<4J<-D= +zX7R@Okj0dxp{2UAwxOkpNwLJa#?Ej{-@IVfqqnokEnUt-Y|J$3?uqXL!L0R>{#LnV +z$c#5bMXJ_f#O&j~6aF&S6&IV+B7>LxV0}ZlroOJYxcDJ%819hG;hf|}{{}g68tZ_B +zWY0JbY|fK3q-*NqnBFT@Vo5nIT>%y)XGeiNsU+X$AdH!0ux##5SGWo@8wwpS$|@Tp +z;t732d4YhEvh1yst7`58$t^^dGW3gQ-6)E=p3+-;&MZFO}UAGv$Z`U#iW(zfn487Gn=xhuv_ +zX=dR~?2eN?8*cR4hbOnVF<4pAWXVlq-F#xRo#V_dbl!+-OD!$63KE3{iKVt|gf(U! +zn0RAyyW?_G>2|9Kc@S|ggPjY_)PgG${+^CEclR-mVeu!y$yf$&^Y|PK9qfqN!a|;8 +z+L&1oOYpMYj&uaFqm~{B*4So%m;1*YfYD<2e|m~2yEo=f8L=}a$P~mmxLqTMw_`Lx +z*d~&C`y?T-IsqIL`o`o@ms&MexpUIXG}e8MBQanDGSN$E%C;NkWU+orHbKYa%qv>~d+D(3$&>XM<10HI +zI0E$ji$rgCY@0lwXr>&J#YC};j9aae;(l$Vlgf<1%=g4a9f=L9Yviysn@gRY12T%Yb@jKgwS%LT6QLWMs9!iTlOk`jW(S9f +z-YwN7Cm`i8Lk<@MQKt;zD4Fe-9XpE+_4w3JzTlJlBkb0}$B>R@6n5s6FBvluE_O=@FyBi{^? +zZwWExcSU6S&kWIOZ?IJqpSkX+n~Tj +zlG)iNM+c*&yVagcCpwx(oib?^bCzTQKD|__qsR#QtB14;-G1+EVlI%!B|P~s>zo(K +z_ChgGlmZqQ-Tz%ZysSFfUmWT0i&$NKtBfK2IF5Ok$I{g*p)&Nv)xNrrbe +z!@AF7xb@20=`%iMq)+InywlIB>zml~QB&Sj*<|&$>&sDdxX49ms{3s2?J@H>RBl*i +zcFM`5&ROcw$Cm_f#%{9*lP7~@mZwK%no!=e&W#}1|F2g})5++EL%1xGomCVVm1A6W)M~PV{YOLf*?|WM$|128vh?k5msf_3a02xHNx;6W)I-H5E$+Z)D +z!^YZhjpbMxE9)CWm5r{oJQQjPH`Z)u3Ds{Xuc>Qt-RpVqt+6IlndzC4x}2%xPNeLD +zG3l`Yk>r9y7PPq(S!1y`M)s`Yq>E+xg((;h376NJG&ynWM`xwg^jVuzIp-8TyEC(4 +z9*L=JYB7`VCaR#A@#Dp7*DWnQiA0Os3F6pbL=l^uYxQI2D_j>sCwd95l?xIr7=rI<|>5-e10+iXunhjg57B16fVo#!8E) +z|9O0~M|K5wC3w)1+w+pP&3p32)p{e3#>=X*dvbBtXXw(h#Njz}JNa>6Vyr`%*Cd+= +z_=Yk42?8o8@95amin>zMJ`3E;k7S^F^0Vev{PNs(>E +zoVMEa1DfV*6P#69h;X0abq+s9`<8C~qI7N)>1jk)yBv?H4XvrCIHgTx%V(e5LL(SR +zND?F|=W@<#-R>q>-sHm+mUl7eCs^b{rnR4yo;LOeh`OuBxyjXW)?}ONTh=w!mxn6K +zo5EHq%tG1HPdKDBxRlfn#qeB@lZ>7;%*&Rn$;zb%uUX(39VRlV@GRVI&$W1)g={A= +z{`z>7h5244H_XO+WDhuA?)zTSK8z!*Pg7*`{0SkP*VZ_j^SN-B=@a{VMbD`lCV*0L +z=0Ndyy9qeabFY+Sxq6j2Tt5Q7XpvxhRK9@LVq%vWZ2B$OSh)Ie-mK2sfO+}x%U_<8 +z^NLqob=50hnV0vfSH1exuX)XDU;Db(Em`u0H`w+Y-&j!arZ+8JdgG1DmX(w&=UMDv +z@RnOvufFZJ+i$<)jE;0 +zJ32Z$w`}R|?&<04OC$ycwr<_AYjGP-p_f;+@EV0?x5May%BB*xjWd*;p{4XFd7j}I)fJ9&{xrdvuovD{TktS}~v +zI(59|{tjJ`HenLyHi>ScXv$i`DrQOlKu-ztOzE^zuLS1`wTz)xkL6-u#FE-Juf~@q +zA;uRsDvr8M;YHii)qAPtL@$+Xc><+{k!6j|XvHZ^-#Fp{PR^`sG|@YwjJG}__4(Vm +z*)30hY?Gt1#a!!qm7TcE*t#|K(bt`&r1U;jKwEb$3@b +z+Uqv1zwWy0QqL}h?kjJsVm(Rj23Q=j`CLfHTZZ}RNdDdONSP&$`8szwI&Pgxe3GA5 +zM1E3Ei9^E5uN>(^T)XS<){DgFZ6nvtcgOTk!i&HAX*kJT;6hvo0O>=k$M-iTfg4=kb0Q!@2#H;#o?{93+YH+r5@zhfVk!Y%u=T|B4$b7 +zHA`Hsxf=5tM06yqYnF1_h`8U6$WP2t))L1oebP0%btgI(ixY1hPYra_x=^}q-;y{Z +zh>eK(zfzV5Jn^{YlC~&Egz}TTiCOxf{CW^cUnoE6Q(|rx3%^pN*rAw3mLu{jL`2u^ +zhfBqgpX)CDOZuLO>*vNVlsCa8_7@lprj@7*@)OB|6&&Xm_u=w +zJ}hbGA{YKCcX)SH9w{sKe?GMF?HR`oPT-;8 +zx6iZdcSokv`@K6;U**$=7v7%s6O(Uno}F*^d4Dg=i_d&(Jsn16#y2?6Zdq>p`#z+9 +zzr6FBgKv6#(>Ef$U)k}aZ+~fLRyry%m1UI?K+ +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 +zrvLwcl-&OiTd@$^1{i5+0L&wwf%Z|@5k7)dW +zb%oZCiATMgc#IsR-jj)YmT^NDR$vfa82&ly1l`Y34vikx7dn5zc%MQ%=3yvAyTt!t +zp3w0t<{3@w!2k}Rg;B}xrG2MT&u^Gtj9@KVeT)Ozeoz0=^#aGagL*L+^?v3FU08_` +ztVPEkIPTDg9T>)gXnT?K1_m(WH0nV+YA-Pl=)g)euoivj#xS;{g`JZAC;Bbvm~uMp +z_%rpO3v~=&DTc8UZLd%t8t6t7+cAg-(ft?31GQJ*RGDYckH1qMt$#94sQsI9K*xWG +z!*G=L=de9W|Iv*m`o>rXsJ+Fymi!eXD)UU*w|PXBqISZFs>Q(85f#ATwhqw{{r@pA*@8_g(J#~j*CWA5cNw&)G!9#JE9!t(2fG)(ZX8P-Z!G$Xv21NU?=L> +zg9e7ti9={&93yCZ4_-E+3dPGuR1F4;M$~?^unR-QBkGWB<1m^A<906lD;ZJwXkj%v +zcC&vpOBoLg;}9BqXm=jzSB|I(43v$iHZ-ncJY*aD(RnrP!U#IfV_f!*s4~>bN0bkP +z7)1S=5!H(k96;l`5fw!@W}HubXvfg?j1yWnFs|sjaYXGyt%7!f}F?8Kb +zJr~fQO6o!9ts_cD3rjI{8}*^BYDCpZ`t9^XwoTfD=H09lo%-(^Q6{>v9?e?zhXL$I +z?W62hwm&hVvqb-u1~7<@&oB;X;s6?-WgH|QwTsCA +z+=$9T7v^FZ3&ncYC2C(9Q4MH(nfXTdSD0@MG>oVahCR$XnvK+VG3{ugJ`6v=Jfij} +zXnTzLMjyr{y@USb(~kh_6P@2;+%f!Z)+hSDGol93b%6DB3H4(>YTsiWqVtIn +zbpXTIhk;J&MaTD9AD6QIB=dmAQ;ZL~x|j!aKFv7D_76u?&U^7kv;!@yknJBcZ)p64 +zaYXk|X*Zfbqkjdo7xU5id&VCfFVKE8wWtcAg@@3!JgT(!(LT&VV?|Wuq8ke_f=)?a +z8CBJij&&HuHc3y9ssQ@18!ha^;OeN#yo~*4P#*PlQPqyY^-CiRWxJg6 +zn1>-W(83CIY>FxuIx&Fm&FlwVS?mYHIE)s`)0vK~)Q3LQW&6aas>A^9Lv34Bd1V{B +z#B9a`o!g@-ieb#!Nqv}$&K-<{coO|a!%n}^b~5e32zI06l&A`$iBa^O%D5I0=ZLBt +z45Jerr_moY&xooH)X$_J=)^$`U>w6|Gakj1e@|4IXktCO&SQVFt+OBTV(K>-H!MRf +zKdP$Gz&i9{JBBfcj!UAdA59#_Af}hF|4Z2)T3CVldub=Su?>BNQPqn<9FXl2#(5Xp +zn1i-b_KQw*pn+`C+a_^oNS{TBhN7&Vjtsxt`W-Z +zp&e1mq3uXi)nFLgF)~UVy2co9)GgM>mF#DN`q4SbIAeH<^@PS-Q8k2`imHq<@-YXs +zlq0GP4Xj3A>JinB!L%c)7hTJbsFbU4#SxW*K{U|9D%95;QEif*K|F?W0JXJ8R1`yK +zyPEc|JEHP1h!tqAKcea|fbAH;AUZOSsD8=EVRUX_|9dI7>4?fl-_|3l7A^Fm`$Wp2 +zxsCmzkxhKL96#(A^&Ll40UDh|0KzxU-L_LUdyl`p!9` +z8qk(^L>)x!yd!EzJpYKwyq5AhM9iyrMLnn`_ +zS~O234mHQ9>ct>N(RCX2R#5-xqpB30XN;;E3}G8;XO60FbmIWJ&KgzeH{sc%Dj$v9 +zQDvg7%L>oflG0(lLhaizs(9 +z^;|NlDlvi$=q?ylJ!mT&RVkJ9rPic#f8{TBK!-p+X4Mm<=75tDhq&53Xz$4U)LG+=so%Mx2j7a`t%->z)f1P^K!hNVcKB|Hk +z_$KwD?>nO^=Yzyy0fw<0BWR+9`%pW;e4!0H(1AhJu@?;-ko51eE~<(D9_>Zr3HFap +ztVI*u=)!gkU=SnNj}}Hy>tsC9h8Z8CUbLg_`y7X;J;`w_KEu4C`v=SiTES5j7JtZk +zK*vv*kGt6~=AiF6+Jm8AFwW@uCF6|YUr`SAUvqq-)=Rk$lm6nUa-tTcy%@lQXdI!v +zXpM4Q)=;lCstVBk;#bc@mLl{OQe@qQw_>wUd +zM_a*|((k2SEEV53ruLzJ*_i4;$K_)xghmnZ7%C?IKFaMHQ?+R99a9G|aLt$+MC-aS +zWvitg=a|Yt>-sTOjqV%A)P8hUjH!dD-8`l&$w&MBSUIK&F?`#YszKZBW2#-!u?HRZ +z5HEgoOyz!rcGQh26Mdf|Cky^TgRAke2o2el8@on8_ILdxL +zNj+OERf)m(S}K6f%Plp4)=o=heF`fqRe`~qEak#5Hc0yWE!BnY+buPO+MUFI8cjuE<0aeUmWrTnl6t;`TaGFd&22~3ezdR$9cLa@ +z_AfIYXB|~eG|xV&8ZeAqXv;my_b!OXCxe9aSOp +z;V?SSKg#zm*v32zpn(=vp?(47(ZDt|F@P@YMmP3h2sID&>qk`q8W$f``_O$E@fgM) +zbXKMjS)C!NPN_1mA2GNHWcA;Y@?QCMZ=%{K(qxh)mlx@uR +z(m#WKp@mM=OOC2qbfFhRctFy39aX*P#t23*Ci$gDm7|&VT|qn0!hPu4LwO8g2imSY +zs)CY^y%@#;beA1f=`GZM75%~pR-x}|%3}aKFo;16VK3VD(hk(GVSZZa7v`W73owM0 +zXkN#9z%U*_!%2DBzW%7PWcvonw^8m!<`vC~qsoOrY(VWM)&<&bKB~fK-EvfAJV3i| +zJE{uNhfXwZXC0vP4#pi#4514Tp&N%Wf+-JD586<_lkrCb4Rm6Kq}Q;XB>f)hLGxb9 +zqYG0WqCT{t4|6bp6&Sqls5*$ci~dPEX8B0RTnu3$hS7-;tVRp#Q2QABMH>dtf!(NM +zADTFbu1`|$!?gGFNBQ0k`)OdlFpM4O@G#D(H_;BXd0D@Yu%BkyiMCeOE9wt0UKsf* +z>q+vz#&|qRJO7LM!|=CRuW0)Y#|IkUW&GP|$M=|L3_n5pQR}4r=z5ZMg2q!EKNx(P +z@%bv_^$h0^^x-}X|A76XBgptlIvzsphqMFTnBiypN3eN+vh^EcG>d!MzX#V!7a$^8HBp(k-dLQk_AX=#X +zp8bEF{a_VFupKSzM6;jc0iAzfJ^mNv{>V6^{vzXqKCHw5){0^Fhqjk!Cpuqd{dQ0f +z=Ai3Oj1#&K(H{){nRa3173NVKAnqIZD(%70YxDyHgB;hg{kNm4U-DmP{!sfn^Y=LQ +zVIGraW8e+;gZdEX#cwj6n1@a@(EKOm(1l)f|BLmAJ`AJwZ^j+X +z|Ip3=^}We>V;D`0;6Aj_i`od|fhP7~00$%=`VPM%f-^ZbTZCv%CZ~3^2OFCwLm;SC8S2{XYj;jicU>)k|<9r{7 +zau~oMc1u3?p>5T;8blo}bgv#)>EEMW>&I0g2Cy2v$=kE;V{Vh`HRpnh~> +z9DOriAoR|rR +z{08F|A`Tts#(eZ)83wQlgXqE#HeeX{V+6aNgTSr&-v*$^b_qEK^-kDMeRw}2ZqoqKE*tsvy1ZRewzI}PrILCoH6_Z +zjz4q-=`RK_fZ7k~uWaKWhJVC7{g(7@`h`xcLJJ#E{|V*Ljoso;ncqIjp$#2BV}8+v +z1(J^C=sw82Vi3LP`vvP3^6n8)G%$n}X#AdjV(>-g5yLnr+hNM1<0a|cDH{iB67s71Knk@SCX{GsCw>JbmqAJm5!2l1br7tr_@ +z?L+O~wBwKT2kqi8$2iVkq#YK= +zIa-*H;iJqm2FDo(^i6P_qbtUIqjQqu9JMLd7X~mSPIEk<5obKY^k;_o#vqns_$`hv +zv{EKi5RGLMe6Nf4E}u}2m)Osm3002aj0wKSMcmp6bpV~~CsY(e8z)rh%k1Zb3BI?5 +zSre)gwXGAXA8i;xBYT4HZ_&T)6Usp6jtNzZE<5$1b;^VqMBix>D(evC&zw+YXq+{n +z>d-uULIp6COTDP)P4N9K%Ig!V5ZxC}C>KVs9YYsQs9vnzGAG*FxyZ=TzFdwz=Fpg+qHTtklJV5)!?@p+&Kb}w)MldVFe09@awEcwr +zVhHPH`={&|P3%VPS=K%3sQrWae2#HM=P%eFx_-$z#R&GI9%4Sxjp=XDe#}Arf9NN= +zv0Box0gYc#9(~x05gbC>Z&+uC*&jO5e4cfKLG+>aTaHU~Vp!5KCh2|jZ-{iv#|S#n +z@q5an3w;>EplrXuyki7o80hDC{3qrA!103ttV9d9zF57>hy|RsmWP5=5lx@r! +zX8W%bN=F}-qx)5kUkqW7Jf&0qjP{ +z>$C%15ylODnDHk4JIr|uBg3pC42>{97#JmggnD8erx>20U1+_PMrQah_qETVg5?-L1r<`5^JK{SfU&O@n32kM5A~oEE7A4ej4Nt?h^byl$02m1mPY&^8DBJCjHzmLVI2msP4dHx +zgXCi`I$vTQW&7orilX}v>uVYNe}(es{0rq#e>JAM(KpCC#4x67X&i^l3u=ES9!>Ph +zc7%Ro5QAv@2jh-94r2&2m(#vCm@m}+&Ag%mYtV`H7#e1N(fuFFqxL52O&npptzdtc +zkKrigWP3EG+R-=0af_A}Q*jKJ5F{uusYttm(lcGKLNma0lxKk&U8$%BAQ9FH7S*V{esd877fA*xRLG!#xzW2m< +zU>~~jCzZB_?Mo+>fyQN%%8T0NlYGC4@`aNsf@Trz${@X%ICNn(TIfZibW-)8?}|w^ +zh|aP}mARJopaTO}(GRq)o>UEzzL)yZbq(!6+x4_#9r-s*sx0)~NW0NhK{<51e^Rxh +z?PlW9S;>A-yM=yA`mMBYJ?*${Qk7#6YcY&&bXHMb@^7b|Xx_niOZuI(Gn4Y>B;Q}6 +zzgUW)yJ#l{KRBs6(ZU`Kd}vZdCBJ4; +z4+GeVzQ@@=x&o6bZ!_`Vnp95l+l&W>o@5*`@D%+KyC#)=3+0|>elhqA{Xq-cG4ccE +zOY(n4yyQR2yq-Y*ZzfeG2L3=C`u@l`i7&E$bcShX7UTL7>jf>`FaC-BWB3sBhmpT9 +z-&+~4$RytvVqX769EPz+(*MJHN7tLgok;sf*e{w<#uIHv7$-@`Fh)ivRr)rLk1^uW +zhlLm#pX7T$>>m$E{shO1q)*ch494kKHskpgrG5dT!{`RKz644yNk+E6=pitq7|uG0>5UO1)fr_%n5 +zrj!$H7f-2bbmr3zbi8kh@9$9VGU6Px@A4^ChrYrobwJ!br3TSeO8ZVD?usd;W2k&e +z)u8iQ>XG#8rc^Ilm~}ea*VAuwVJ(Kyi-8-NC$v>iuWa8$f6l=7(;xKRLOFEYKE?NI +zD0c__LED{Ee7}bMVGK=kO6BCxjt@+!Dh%H>rP^itZsq}9HB&0%OvVLs&_V;XdzlCH +z-N(FPsFr!g@W-e4ehulLVE-8TEaQoe&k=_v_M*FlY@i_ZOHx6J3V;KG>25Q2PPv=zQwK9CSQO +z{b*tx2CyANKj%0_>p70o3rPQOjth)n1v-AgJfi+f#v9EL^`rG``l%ED8~TY6tU<@~ +z^cVHtPN{D6^-ZZL27X67E~K3=&<=F;PpNv0yvVqq9;RM2Fp5spE@FR}g@Kn?R~W2qSOOFL9jn)TPY#1noyF#=N0> +zlKo={`_MHtr7Se3IZob7ew=lR!DZ8YuZ1|QK|`BX4QQ^MRv~oZA#~#~`Y@${@kpOm +z4s>HFI#*4reQ4o+46L43Js4a&tzziPoK|`7BW?rxL*K?}_*)-tp+fH +z+GWITo>sYNZkbl5c*3;up(~5}(b`J=sBN28_RFa+oA#h{`!wHQp+6^0t4@sAr&R=9 +zr%bD?LgG)QUNjuki|*5CH~LPWR()tYW18=!P%dX$W$$D^XHF{veea?D7}TfvJ__j= +zK>b46gDxD9e2k&vBFYyrKUj+9#k30@`O|z4g*fb!^h=0G3mwJmw}AbitC0Pm^NMNJ +zkJ?q!D#M^W+R?-UbYZ!qU(Gy7`Ze?io!3vRFj_ZED_aTkd?W2Z+xw?gJw|R}+|j~5 +z)Nh?uL+CM(Ed`|hj!HNWn9sDAL~!HKT5kX?4muAzK?cXfuE!uXrdDXSS#C~Vm)B!)9eTJ +z&rB-|ZJ(P~IeVz@3)89!-EQhd-&e>-vw?MRCF9@3c%aS8IzSiJ%XZ5&-z#Ao`_PAj +z7{)k8Ftd#G)@hZG;Rl&73_ZepN&2I-2c2If9?h>!EBz|kfu$Hi6T`R#A6uak{_Z!*DwxfqV_A=gU;S*)r&41 +zzyL-i|9QsyTH1>R==?4HKwBU4hhglI{NHh&LDvf$H`meMe)^5tA30y3h27|Tk@`^& +zb3SrX9v$dYg}ZNrQMx<}X#`o>t#;so(GQ63A>oTNW!Ofm21n`ZsXcAW9U@C^Mz +zQ_-LIQ(tPF@0F0B7U%mUjN`Jn>cHxae##I>2b#WC(V||?OnXrxd7~T+9^{8!( +zE1$S2uKL8yag}l_@tBRiEpb(fL99eAE3O*Qf%`Fly|TTPeo6j`l)H`gp@E@oaaDtX +zZ1#geJRs?K5N+ET7c?+}0gR!xBd#*4XfN6^ggP20F;23Lb!cH5nkUCq2%V?U4s>Dq +z?X(}WF@Sj(L<2)ufwoiQY9CtIDcg>?>OuXqxEewO;}}8v9gOSglt<$X`h{8!{gQ3$ +zLLc^F7>7_llYZPuI_6;r4b;zyD-*-##8ta&=f%|kS~_ti@fR}Q=(>pUM&okE2g8{0 +z0s2wMJfc}f|53Y&@sxBNLj7vmje)(ale^gO_3RJBH^o&q>US|tvW@l+lK(;agYFN< +zRRCSJaWyD@g!NXtH<5`7Qc)FZ;nl +z^nHhV(fBUoh1U0IH|kH&4s>D0eYCfe`NS|f(R`Be!yq0&?J15Qbat`sCH)!ZtCn&> +z#t}n5m^3Vg>rph3?<6KeS$9e;9c^&i7QP??0Rm#5d!r8r@ij0c=BSgms8|l=Bw4(83^Q +zx@g}K`iJIdT$RiA80!+EFdODi0m`Gs=nj +zB{Ql{wlAGg0kplB_Dg!fjEZ9zbLwdS`-sOd?!#c=jOxO`&KWg;w$d4u^%?eG#{SWV +zH5kBp45AN1cmTtA5F^-+=2eU*x-k8-)PvcmT|J`;(T6qY+B>86V-UO0R?awJ{q7%JntEBzt!b2ED3nRC%{}$@Im2zm@ +zMmgC=9|o&fC$f!U$-jg3)yltTcjt`KF^J`|ZL%)W@d4I9hVdY}?_zzS@j=S9Q4i)| +zu$py`=7-pyY@-*oyO}R^VhBSRLH)y&e}I2y4;^S>AqHz^l!@9sjF)UoF!LemadBK>5X)uzW0Xe& +z8_@M}#tYq_m{CI*M$O0eKKhNuC+W9rV>O09#dx9hY35h*>u9fRWBSAF=QFHtKl6k& +zX!|VvL<4)jK|L79AnH$24hx@S{65FJ`xWDbIlrbnmhQ;jLH_;LX4)g$EgYBV!XXT_a=h{HxP~9#e1e*fdBe!V><2@SvJQ_j|LrrX03%;z +zJ)mtrf4v-_GZivW^W+_T{)gdDlaJodP;WouTu=HRD31}0eTmN#|H$|?kdJl` +zpC`V^xHht197Gpd7{K%<;xHR+VUA}sunb+;FTO;*sJ+ZQK1AG~>HovTVgA?g6~-MS +zn9@Q1UpSxqm~C`pV1V`VEdBc{6`rnvOj9>`EuQP9G{+;@tqkj>$ +zF^I0;(vE*HU*a3|yN`M?{1W}foR_Hw>-fChILx}?bNK*v$mjG}%jfXM5bePLYVtWd +zR-o}u#tnVg&FAQ0H2A#S@h|E}7n*!N9ztC{|Nb}i@j17FA@pIke2$I1Z&7ZT` +zU1*-nbprQc5WN^e`wPUQ`y;HkH))TH^^Q5{8=*W}IJl4X9Hrc+Sohe8wj;#Vv7Sfe +zx<&ahx$baWTJ-me91lmCH#f)KIP3UJ90xJl+rc(=KSe&;e$4hH^D@kSFntI8iL?IB +zW4u$|Qtoo*C-p7WZIYh$ma6y|tf3$wWH +zE`Li^Z{xbQ@+}oRmFsRg^*FfRVeB-nYj|i6>8mKueZ3od<^CRB+_yVczoqtbf9}F^ +z?!!Zv#eIi+4fSJYO7bW5Q`hp$_KB(6*6v88Wsz*|eM4!p`8k-&e}z}Qp?W3FSZ6Qt +zEGuqIYf3HlYqzcb?eo8RWnIe7HDuZNuR=oh@VEFdrFdQDPJdd8)LF}a+0+|Lrbkn+ +z@bBLpLwB|p+<*?)LJn&f4qrlbs#X7KxL9f`j&>L5Mq +zdj2jSlHQeCn_t2h +z`nA2QX9rI5+sHpizE8@RtSj8*Pj@cN?;^k8#y6BZnV)C)S6sU=zn}b0@)P@CQor;& +zN`6Mg8~od}$sZX*Esg$>rjbXR%Z;X$hG&(3bx~vboeTS?lbuIwoLDDHY*8Y%G2Lj< +zT9=jhS9@19FaPN37k>Y{zGDl*PAD(!QXDrg7#Dw9S+d<%$k3$Z^PiWPT4Ef_*(hGu +zmTI(a@MP{>yS}Jtop)_X%Nqa2#`Vn^X@#qk)xYpc#tvC=(ym_0npN~6*{<4>#M+TX +zv&)~+w5nxA>+-ZKm$b`4xs+v$=N)hGZ}9R{ye_ZEv%FC&X8q-Qx +z1c}2Zxi)>oTqR2kE3EhWWX%ip<7u8XRj9F6`A&zfR6 +z8ja?aGN`vM8B;0eq+G@Q{5?+gO}pw-cebuFJnI|R8BJ@w8AkJ(mes}n%=;IWlyY9m +z^|;lL8V*F{R{r)0Vtq +zS%Sq)%ZmLg?oJ+!tRb>2;@Us|hU%97mM}k8d)E6i8`sI~$mF!HO8fkhVNUcXcLnR= +z%ly4iY1^)KZE06}PWGSDXm2{nyQ6t~OLptFn->+6@u{Lryz%YlWx1BrNqtTHebnUm +zJyx{VS?h&mB2C*T}i6llT-b@gP6ammaB~I?R=96tC+^-6QAbrcH)- +zWAg^1CDXs9sC9kX@S=7}xftd2hxi++$#PN3ZEHNSX{*tELdzDTb+bRa$eWe++S|(I +z5kKsopP!!8-Ho>5rcEuG#jWf8TMW-;*>76++sai_F8p7t?RVYZV~fhkdgvg&>^uDJ +z*yP&mPuV_C!B(yf+@);sKP +z*;%QJ3d)#PQ!WsrT=KZCPuneHTHLg)^@Lsi9o`e0x3*-ZeRff?6g%ZQD3`%&(!}+` +zNZi-VUN;lBH;J(e5z{@x-!)DiM^)T1?QUE>cgy6@;6Cb8i)&75i~abvo7MX`VNt*aN@LL|=9 +zoy13pm-83#9jQgFYm1xL7kRnM+GI3tY}#P>Z7u8WTH04R4-HW^$lok3kbNjuv-#W`a-G_f$S)+#OMc;M{+_RlVF~wEjp?OS#{H~;rQgS +zUrUeun(RwIb?ndJZ{W&4b{)G9mNhsm?IW)+IY))Xo|TO&jHcyYjf-qcn&D4xO}%%? +z;K|%NxOX_Tj(JL6&ufbtGYtPa&sw8tjdyi%^QxBgw7)K#T)B^}piE#Re}k9bW!#cu +zado1v(w2SXN60^vY)h5Vw2EbFG_Llh@0L3Y*5UHB>lZgh%5_oByP3bWn>=o#X+<#AD+98$~r0_u5CMi2bi@*To3C}?pHI`w-LX-X`SI+ +z+niy@ZEMICf5zeDy*z7@dxx9n?j736v&fr0p62Ju&rzw#Y^7bdaL5zK +zN1wFkEapCWt%#-?O(z2Dfwt3@bdH6YIDd2D^lv5`wm`MLaEW4VTLFPUbvp51t6;@;$Rf3D}OrX24XEvMBku3XCTpPVn< +zjHzpO{C75|7B%sLVTH_tH!ba&xl28msd;G+Dm# +zLl;s)q?MA!DK7CNX@^KNNR#76ek5&}wDKisDI0m6LYmCG{79UQwCW{sIi$Ik#1)WM +zza*`kH1Co$leG3FY5PbEkhZXWUedaj#C4E%a7kK_wB99Yy`+UnllIGxI6zwelC&sk +zeWb~`Kz<}n+r)g3wy-T(q-j?#PRk`Nb4gkuY1yPzCTdIGS2;)RPs136Zbljmto`jL7rUOX3Oo89ZPHuc|r1cOHz*Kyq%uq +zMZ8hsUm+*58;;$DeEit2iEC*UlJAYH{nDUH*-p4UL&4P3yhu +ziksKAWGuORw-ee;xkxRa`SH7qtGpL0@BLIJhKu`1k_U)M`N(0_Esf_j)v}`23rZe8 +z|C{Hv=*8ZP0(pk#lE!?a>0n_M8{Iw_Nudt{k?FxUo +z+&Id8WAn1K^4XDQp~#!RvMVQLN*j-j6Zg!CbtH38OI{6mS#knn{xqZYO3$9h4MxAr +zU)Fdk}%^RAYXw7}{mGmu<|U6e0-kg-gz!@}am75?D7kY%soH{96x}P~cwy)V+9d2~4ICg+6e1#*|0x#vFU*jGu*|+i{c@wro +zZZhP=k+ySTBkjZ=B)+ZVuQ(;n)J7|{`ABNhSZZ-gG?mwS3r|Xk`Da4wzR&BQWM9g6HZSMBVczfcuHX&g +zrj=upE@ZMd-B-5nAB5En)4}+Tj`s;wwbSlcbnzrY4OX$#Cdr?WjdZdocz3j +zVs`%PBCYb7!|EWvOP`CS&o>?Gvy6XO_D@V5>yi7DDDT&AZ`#HO4UO5!7uvjgvGjdJ +zxejD(<+%Cz?7C%J((I(wkS1d(Ka!@C)=pY>A|-jxR7zTaw0)Aci`NW(?V7pw!&oHr6d#CCM=>n;SbxbCXt0 +z+QNI9cG67JLdl|u`Z`Io|C)O<=_5Z?GT0#G(Hs +zCZ8Cy_ucEMBqsX5#MBd0_ZyxioNLc6&xULK8_O5ACqPWr^E^j47gLgG^WM1_Szo=x +z1c;I2pZ?3e)BJr+guGtzjM+Sn&H49!QuypKew=c4VzbG!|MuPcSV&AKG3`?K?08pr6kT?7ec?0BS^88(yv~5rFep1%C>@P;1LEiE9 +zXWPO0dxyL{^1R2X(@vdbs+zehZJCnN-Zx1Ef +z*G`;|xTWorb6t?UZt`-I$4|$yo!-2?o(me!H=52f{Cds8lcU5(B>n}SS4_tDq!oD` +zhUbjN(@UC8+wIS(UKlT9V>^lSZ~xoJ%}!n(d41${@cZ0+FFk&o#8mv@oyS4;v5y#w +znB(=&M_$$+c|J7R-umS`y=8kndmFDVX}Zerm)93xUt +zJ>-;`=-Lw2k|BAUc@tHGX(of~MfA!sCa*636W_GMPQcFD>u3EAd +z%ZVv?jc2E+lkw<~>nkzy*H;-27ct$$R7wo@f~A}R=g!M*zr%l)pKiD>h33|lbFPLCHWpg;yqF+KTKXfdGlk;8#&h^4=A{C)O`9tl#t14di3z?-jI?{0m_lAtEIl?PFa3<<>y4#(Qn!P=2FkVbdt!aDf6kHf$DPEK5~K0j +zq%9fKk;?V1biuhn_EAGjJu&qX!{^w67{8@Dfi!p`8R?1;q}u_J|CXjpY$Pz{0RB- +zyZnd+qz%rMVLOli%1O)p9k0z~zw^&X`n95_)bjZk;+6BiCCa!dll6N(>!S#L<#R-y +zdq_Ov(X`p{+Wc8ni{E3h6V^?cAY~3D%XBdAr|$AQ=Eq%P28bzq;hkd`qLh@gxSu5^ +zF2D2sQ0h*eZ1imAv6-e#3!0f&54ps4^exV53`>mN__^;;>aU8 +z#r`c-$GV;T{GZrOKKe&Ke@nKts)*;&JZt|olg~a9l<=x}##8nd)Ca#X(6USMJ +zXLE^v%ltJ&`s^hpZ-DoGW{(G+-Mhl@T-mtC@Rs_^(ux-@(!@MchUd1gOVRjCo;e`QxgiN|OxZYuKbY%XlMy!EoS_dQVX;Cmms)OX3l`Hx)u +z=tb=pepUBh@YwnL&-+^5*U#<9{l?jkpY_c%13BM1@*>54Hxget5! +z{Fn3B+0Qa}uj^jHw#-q@dl)a$b$*v~?848U8pt!rORO__|7!L#11T3EuYtV$*>dE~ +zzqivvUgvT0?8FX`H@J;wuF}}xJ^ZwyrZb8>XBK-;_n%eVn3Fj7rktBBACkJ|d1iUL +zoj12zm+g{|>Exa1+mF2`&ap|DPMOkIIUZLg>g`xn)c9a((*vnSGZ#o7SN?}my=|#2 +zEvc8| +zd2M-Ozg>J*wAo|hf^0NyYT8)boY}ITCFR|~N?G*bl^n-Il#RT3?7dhyF5;v`NvoCh +z#*vKCdrRe?p*xYj+Dvcf4R}abI)1x48%&Kb(JSwTH#;aw8FbQ%}A`% +z+2_S%&P>XrkFp+;?XKsU*7Y8Fz_zGyt(Q-`GMh4*SGTN6yKix`6VFz6P&Ph3|Gur9 +z2Y9AcUcEgpZx$7=*^@AFJ?SI1euDekERJdZqIGMdRw^)6|^v$np`_{nqU9!+j#3pC$U&NqRr&rE~q8eZH5+ +zd*@qu>+E~{axET^{VCqJmiXCw5&4YpuDR>w4au>Su}D9k^^r29s*-gV@}P3#3La7B +zVP${%-N(*6x6eK*l}VWb%4DVu&A%@$YrCAZY|`4~m`ff{E!u85l#-uf@r=xpr?Zmh +zh6c*HcpaZO{*%wGC5~|!j{tcU+EDUZJUbqeevtHf%E-A>?x$s(T-`O=m&`BC*l#(uP+K +z&Ao0;uD`i^{kg08{JZB|zbO-;OmF&7@?M+I?s+bp5ANqLJ&AhLnLNj;q2zN$bL)EU +zec8EpFP79>K$$3IT$-NXjg49!1Rl{hc(WtgUA=KQfBbq*3&moeY3`8sc(tMl4pb!J@1{H-0D +zyBE&e$rFMy&r9zwb>ec?4Jo&*A%56JN-1f9^{kQP@gwJ{#Am*;Myie-K6f4aH95!i +zl*`?~nwhOj)`w5(-#9xCY|ENHK$=CG>`T@(uTK*13rT#4ysS+_i(b1OBF#nGK8fet +z#`jEkt$l3H?Ig#E=_kguC}wW5lWWI*5$&_Rdp!m*4aB@#J=MfS{+D{Z#1w9R=Xzuu +zx`^3NOun=^d45fdLpGazs^%cJdtL +z<&$?HS?~NBx-GeM67y3^Oo*65iQ)L6eB!)sXVWBah`hx3BtP>=yzZV|dWrH4#26w92ewYenKT2D6*AI)0ZQ +zo&T~(b8H<_c3GDO_XgY^6)y0i@hP%GGZl +zntO)0YuV05eb>@*x4pfbMY$aNkQz?zuZM3jUR2U@zCVAL=i;Udy?XNnt>-Oy6e2N4 +zxtDN0Ic0W^7Ce8NMO#YA(@q^qzP?N5&40#dl9x|jA#n?zTa|M4#`dc_bxf_Vany4x%j#~M4C=o$Ny(t_DgBUdyds5ZPrOU +zKw2TcFYQk`d41#=$MWXKp@zJabB|xHfjkF!OUuc*K0satdF@hX@j7|they}BFS%jv +zBu-hf`iSc%ZvSkYahy0=?-p^TdB=_w8SC`-a=s)@zEhVNYk8=5Zmi`sLF=+xmX5WQ +zE2Lcff+7Cx=0v%w0X~ake?7A14bO$%^Nr^7 +zTJm=JFKW7gMSu08g3|Ub%H`g0Y(69{L|Q&+bH~2ae~2`bw1Ic-&(g2%C61{~D#>{N +z|6hM(zoq;yR5_&jlKtuDHPIt{_VH+{*T?Ikhf-S}Ox@*gPi=ZQwe^A24+Y6}krcGlnW`3E27h`+?zerC1zP&B= +zw$A)$`mLFf>|1hgo_JGqDpWPIHfw@zWghwDlm&Mtqc7px#1hmlL}agxlkE_=haOq8 +z_EqLb^p`f-S6RTx1a8*V8E_WCX)H74ICV{H`lHdzpG3RzEVBMInwpAc|2UdE9G&<` +zlzAlB($4r7{nya#A*Ze9%UY5jh$QkKjQDDgnHM*~JHQ^k_(G4yP}xh63(!iw=@G0N +zSjk_8=gN9u{lErD(xbIU0@x8?J*grE?Bm+Bl_uS?#LsMnWagE_n=^H_-XrVoSz&vE< +z$;n9j#1>?Fn+`~{>o|E^zC5=znhg;`r+)2*cIHQG_WUjDA#>J)B75r>a4PxJW8*Ct +zv)%S)eydINH}GThJdML>flZMu&9VDQW`Kwv=g5EYr(qen2<#-Vk_ZSq!qa2(zbO>Y +zVRm)R+KYGHWbiI4KVUA6{;z07UIA-%@)IA_09*Unn(L2dZ7}WfU2M&7?e-hpb8T(g +zY4Y!fZsh0Tyheac|Kiur>j-qm&!CU0UwBm31z@MnuX%Q3mGu;`@(Zk^)rQzuTFjxc +z^!9`k3cv&c=nMCr=*rrVzrUocR`x71cU_;|M*xC+ReS0>*@<&|O9#X5zA8gAblv~O +zIC9#n9#}81p^`I&UPsqzNp8pg->4Ie8;zQ<*R=R<9Gb&h&J+%ahI6IZ_H68fw$z@S +zJi-+MAzR*8WFj+sejM7qoo5QeQE1VRS~$>Wbak2X(3G;J?+t0)s_!LzZ`YZ^ri`;X +zqu=Ts(8nNWPk|R5Q83@CPayv)&sdwPT^E=$`Z8HGgtPeaF>|*Wg5DTYT86?tMQbKb)Zje#d6rY;UO{>iMezwgha@@}ACL +zI?mS&EuFu7eVEUccQ-T@{b#)WF7eC&uxemOln?dgWa!@Pp8bS!*r&4uI!X}j4Oi3H +z`lp~fd_UiR3UugXrEQt|&WGyc<(Pf$#B)0H4e96QZY}+jXwhl<8qk-ZJ<;Ny4QWY7 +zu>EMW|31e$Z0mR#yqR~MDO8J}8OyAzvZdy9hwQ#OOYzE3$yCSsF6rNA>|Qm$1xobi+* +zTFrKy2?&s{iheg#Fi=&Flh6*N&UkyGabPRJ4g#Cu9e%m0zjJIq@;`mXweL=HKH>@= +zR +z;g8VxT_SDmand$OE6-g?7blzY+vs1?rj@7DR`|Ji20`J}gEI%tF&C$(t)vh4g3~p@ +z7_(#NfAr5iB>YK-e^?8bwQ!6yVGoqHakTVx0okSc9tHmr_*2f<#P0ccBK`hY +zd-4OZ{0C#HL$RQHgpt49;K%=%xzR0GdP|2{3gpY~4^+YEiU+_Q{1cC#DvXZodaSlv +zJ-C+7&VY9syd~ak8TfLCEyHVF2}@F(zmwoje)Np%-#3Gg!#>U_xw`_!hP44s^_18D +zp*`4g1b#DV{AXeZu(xFvXKM3WfTN@-&XVRP#${EaC}2wR$>D{D=mwxG|Ja$rB};cI +z(lxQKD|tg#{z-Daa6&^A1sxE7PeHfz@iU&CH)xMNO4=pT#=)a3I_rXbyUSTXA-e%D +zgEROEANbVXu7zebKQ~F6BJGe(vu*!M+vbuZm3JTy{>-7}w_vrv5&@XxY!k3C +zU`KhU99q-fVSR?~vHt-U-XM5YGhV;Qew;|5JI7w(cc8wJ0dEGpQQq~atTVvM{~X;; +z0QR`}hUXg`2ee3fKk1J*9@Q4B;9LTSYKP|YxPHGBz2>1OmNhlt90N!F8I(13{A?!e +zG-)!!^>*tP11%)o8w)N`l#$q?6-5yc(i&=8r_TC(mrqKs{QK0I|yFW +zTlm2^*nQi?*+}xy$V01tqv=PYnJ-3jUx*Sf=!!m8UW4S- +z^_fQtF*SI{?hUL7MB3=2fM3P^Qq`wr&ele1pk4$_aQe;>NuE5$%e6V@)D*w)- +zcJCswd#tS`Ggp>KexWS=xw4M@d|B%AW!cY`z8cAITq$v}fic*)K#UJ{O68FjSc6 +zp9X$nA~E{z82PQ=e74Z2_0ay^D~FHAV_>QuRlHVrx8(fIr-L*2Xv@)?Ql%Bfzed +zVotTC@qkJs%d=&;h!{=G5mXvBN1$7J(OIjDA#30{STwcuo&FSRbf8nR +zC-@ucI$P)?|JVg^Lvs+eE8nzlc=!_dQ@5Qh^b7x#m$x5ZDcbJWCJ@I;JT>-m__&*I +z@vcYTKMbtwjACx* +z|C#`kdMj`b78%@-me!=uVvgPa?F+1Wycc;%M_xVF5NBKjCH +zLEh!DmiV9t+<{k6KjHqw!*zW0LR(BmhdbE^KfUs-)rFOBDvE6?S?bxQ$W!gDSgKX` +zo-G_#zO&?e^|E_zlxAPXpj6eZHlJs_#SGvnmvtsi@zzO-jnMYc4%-kq2<(VD$ +ztY){j$$}dV@1tnk^g*{Ybk>Vo$oTWtEz0)*={0XWYwg|G@uDpgPe~-7o_bnmz9#+D +zOgwv2?#6I53M>2Op&Nel*+Px2hx*v)>B-VJc)Szz*%W_IZGpeva<)*SKKqX^tG}DI +zA1Xa3y#)?u?f=SvP|+Byx{qn`ZD$K7^&R0m^UW(=839;%D;DAU+un{oLLe^{z4 +zW8haDU@jI<3>bXPF9A91?a&yW6piAW)V+)LRNHihzrh@?^8a42{DzmHseRAc!lvqc +zD>T;kkMGF;?ts@1-QJts_Zsd;UwJR}=DW~nEo<8F5b#UDyKGyZine5KNu+ACH@Bys +zk*m2q`ON&Y-WHtF)HcVUsT@0N&)Kjpj3zR-bR?hInyO8tpOMHvE4ark{59}ne{k0I +zn|#7`r{vU0^qE!g&3yR)9{I#|wr#08zSpana1-}ap7%R)C*YsuxudYo`B9h +zu#t-0ALiA%?X+8(J{PaPp6}Rsp2)vC;K5OkY~+1GzEdC0k^ex}=|k{gH*vS2$wtC~ +zXvC+d!Eeslx=;PyxOfjwetOKu>M +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 +zC-$7$^(1)l2hbs{?C|{~sCYK=s?c~=J6#694 +zgJ;G}VElEvjN@^TZKrwgrw9FUExtMq>;y1#SEe~Tp4r`=E5FTNBbMG{oKnWZj3v6u +z&{Yf}yJGxsd|9|RAyqN4laq_qoh2H+(%a}}4Sz^`4Lf>@U2k}H*B;X9NUN3{)!pLe +zy7%sUh212|lykXwCR`NL*5lAszQy4$#-VF8xXWz^vQt~ngO>rXnRh*c9S3#{nBMj1 +z|7BoD19)odbzm#NP6{dT4bSg)zyGl~DAn($e?}a8j%&N&LbEuNq4jdQ@Q3yPBjy@XFqP +zbsK}qb%^vn(uJ!>uqj}Jzy=M(%7Zyzi@?gG0Igj#y@h=|#cecK;=Uo=){+M+&`iH$ +z-JS!~yoL49-Dkc`+9}dT^bK!(`x_SZfa4#44<1}EY*-xW{I1@eiUszW?+nPGUTBt~ +zX%vmsL5&Pj{YFT;Oj@s#mN08DyG~NQCrNL5r{5MDr?bGifSru-gEJE-6HfdDG(81R +zKr<;CrbaJ14c*K`mkR@sF&0DXK{NhIUm<-#yc=5QnYcCB%O)akDH^Lypf-Gv`FIvv +zjO_>YyP3beY1=#c?@2Mw1zX=8g}(2T_{DGGht84`$F{?)kF+%E$X92ovey@R(ba-F +z2i*uZonyR17hVGe0@118mcfn9T`r8MjCKuV&hKYADhk6~v35}Y<$uI@{yerW-X$Nr +zb%DpvJ>ODK3AYj4C2&`S8(bfF4#E~!^&JFv9GlUml@Z2HtCNKx +zT@Uu7O?|`FO(>K%hj`6v=c|+8#~*R-6?q)}TxH(`uMfP#Zg~Rh7JsI;dB(@lE53Bu +z&SQZxc&<6*r?Pf|cjzeXVR^~w?TCUmxOMcLVQsz#z;F1rDUsAy47fZq~;EwpX +zj<2K5PxY$>r{-Or{X%CQa1t|d_{`;uZ2|2{eclKD@q_GJSpFN~u5_FM?0O=<+X?dA +z5guGU&`m-er=-AN6$E*{4*Emz2QE(dH +z@7YnDeEdrsB`2rASpuiqehVj)2%@{w2+A5@$4HMIa@H-(yPUybBO|$eD8N6;X9c{| +z;HhmXa|QAiwa?F|B+a=0z`7ep*30LOfqZHqtp#rryh}D8@i(_Cnp51Ny_PuXz2Khs +zptt_O|3PJcnb(-YIRH+>AHh$&J8g-)_1i$aKMl?bIN~Qgs?R*I@^LS3&1c@d7@|2v +zdWQ5$5%37M3Tz6P==BJ83D_(!z3b8cJOcTS!pZJ4wHrJ++;yNkb87yVIi*7$~@ +zXN*8^9N1N+Q>2wA!+Osuu(ANG4!ldiV!*~C<~!CGFvULDx5Q#CJAKbV+cvdX`Zb09 +z26R29{=f!`U_HQwfyE7$ZIeM@2Y~enc9k|!zl?)(6r2;nab@@K8Fn}AdW7`Bw6jjI +zx|Z4M`#n=$Tb`5P#53VCt^lhmf^7n81m^OU>Qa^?e_+k}K9Aa{8rUSTGTTP=oGakw +zdPOwO;_$llZ2^&I@Vmhu$$D*S=K#9So8AI@div%;@E3FbTBaV@B(Qa02lY+aA&nJM +z`m|?7#Oz@OJSl$=${ZT;<8kQv{?yx()_AzX9ZxHyWk@>)p7_eHVf|oyqK{1? +z-||-Qu#<92G__n +zrFZPGgCCIkqxwVWgP%aYx%}_=KpBtnSNQgafXAZgk6!2+|IBGm#yk9I*2fj(IYL@L +zX+imX2-pxXrR&lEQ@{p+x$Q349Iz2!uDlg&5m=^(b_v*cfL86X2JA4fe%>89?!+pw +z-z)nt^DXJZ)uX(tfvp7cR)5t4I}L0}Na|N}8$)u7=h!Yf{`$Z>Jmc64)dt2#-Wscv +z_W{y3NpIp^kKun{@ju6&?zA^HCf~ov^960$83?at%6S~Rs)xd5Uj|kK%*|ilTnE+z +ztlWIj*0JOx@Ha4hUypdL64(J?YXVS5ZfI@~95s3%DEE|a0{q5@!~N0+tTzBtn+yXR +z0oJd4H4ljA?)2qUhV*&T=ag>OH|WI4E#8u1zm-$^<}q*^X8m#tb`sbCuzJz+2(|+3 +zAg~}GZ2}ty78eqa@X8L;U%*sOJ>s!yU^9ZLKd@mL=im-^ui%}oN137T68&E|;|X-N +zXFsqFVEv{1us$349i8q?5V;t4L43Seo~bN{p{x3|Z)*_j2(U_Ede@`>7l2g&3-;$J +zVCBHvdWdINo%|eGlgO|6}wAXiKclPV6z~tbc3zT6~UN{|#fCYy|h{XFa*4 +z^Q3G~nN2pwrW@XTQTq==(=)ejV_a*F=lql8bOUMQq#Yt{#;%FSuI5Yrp`ymBhi(zN +z^)JHbcFZ(Wh~j;g*5G`pcH4yJ(j&fYMc*&`6ZrK@=-W^5{gI;YtBsqX8$K4AFTLPL +z&7=>IUj9{VXtqsz@H@)I2q5chEt<7c@E}mz&TvR`ePfn9`u@^uYuR)?omc6{NiSRQ +z=YQsGFJ1k*O8PkIX0IOIiM=$tv`07bZ%4QNQ1Ma5%hwspF$mig?;&}8`r591RqDD- +zWp-a~@5D9HWKlb){kotV{Tp~)bc$OCU8XXT-RHy)HH04y6N+vOy6JEH4|I=&>C}hE +zpgaD}@EAD>Y!O&+tgiq&39J$tJ*NMGEdvXVo3bh7KQOhI9^q93+X%qwfz<;m{}$uR +z_UBBbC4G&Jzn!VbSGH#N5UAf33_A3p@iz#~rEen}#9KPQ&^qzd{L}EaYfr{gH>GdP +zJSAJLw#b0j{9V@ddko%KX-o3C`}6gwThq_U)McNYd)CA=-xh8OtB)Lq?!b!2A0sU& +z2Kn7@@Fw#(*{y+7^KSuLuBX?TEdW#B@;^oY1g8vqJyrb0fn{7eS7rlOJ2jD3@)L*m +zS?hAghS6O-oAn)5UaJj;z&!*m#gHs?=0kS_?G7^uD9=goE`zsb@jPACiy`b>`k?k& +z0C(}H_``_jbk|;+bJt#1u7Z1@_GYh{*b^-pw5I=|t6dB8L|GpG2d1*>QU2AydVrm_ +zvSp+-L)2%P9(AArgGP2chQ~X?J)%1FLU-wm^3~*(+^GjVt71`0ILJ0JoO0g5U^$JsX^Ejum3%4y{7e}&6f3v3ja`bUrO +znt+W3VB(z~U>RVuLXz%e&J?j)^pqG&djP!3%l>*(`DK7L0}Hmp46uG+s)ru^e-zjO +zV25peoO8@3V7?-l;%ezjAhp{n_-p@-YLpM`qS2Pg|(t~^K6~sh`?*4$qwnCEnu`S{I`p0Q6m^g3*F(@vm7goj)Bd#C7~|OC-As9w<3l_0T)nzI +zd;yC3VF9{|s&j>A-i=IgV%#WgnY0Gdnw&J|#QoAW)V7eoHY!>Bp +z8Cc0J=R$L1#h)?10SoeZ4X`R;)ykhoyxIt?23Wa)&_4X%4J;09Nif;2&@;?21@w%d +zKal7TfV%{)_(qRl8DJ&PIA`@k2Q~w&30N1u^$71MumiwM-|}1KIst4J*a+|9g`keq +z2x$5?`mgq!jTiH#QTZ58GIw)f;NIjlt;U@{*uH9AbszyIjG>}w|lhBnk_+b}Gl$`d&}T +zSASOjIr8l{;VV0yZ5>z%%0=Q;{_@|9;Vy8OUUaUoZuMvB;W;j@V5`ZVGQ_oGqNvD* +zXU3q*G}CqwK1jbYPDiZolHz~>ucBUBH6P>+LFE% +zazpjuY%uf%g%kwsj5Ws +zhV=Dqx{tXvdu`F#NA>v}G$k(!^WP${%e`UVSORtlnChWNv}?dBp{+3x3%d-g9+=Yg +zi03N)g8Bd(6Tpr~?;ddRMLp@$q&F!&pqnbKo3usJjI6f%{$_EZv?0=JK6d5V27UVw +zY0J>XdDkQSDPXI>5(3!xb!Lx4{Bo4Es+XU$G3CX}=;iYJw0gOYd`xWn{UTwb@2o>N +z`3m}9dGeSs_DSZuzH{E*1h!+ZzM_ef-c5R$p|I`N0IUm`+iv>53s|BE)(@;1Sa*PS +zMET{NICQ`b{{tHW&)j{%IwsbZZRt!U(rt-cbH1Y^*`8^gcu7&D9`)k_bo2KkbCtiH +z^ImCXr)RP^bzB9nif8)oQOekWe39YUF}(Z1pWPW=L(Cw +zJ9^Z8YR|Tvjtezl;WdD_2Hu+R6vLTwlAM>!*B0&X^n*A5`f!;?fGq%P7OmxLQ)abE +zhO`yZ#%-AgT8NI9+L6b3)7SH(ow(V?_s%v!46>#RJoO4L% +zA-L-+wiLICYZiY+NREjYDn5;TCeLBs^$1o2Y&if^+cyGhcq2N5kl+vIhdcFA@pCU} +z2S_tSD_AUO6xld +z;GcRkvP$j6I@<^aQCsx@%K$4g5Wd6zgTTgtbqi)?=51;#;g6BF5XeLL +zhk+dfR`1|5_RRi?cyFGxlcbscvE$P5)o8av9~|Ye3|{41ub#&yX|<${IQi3eSLC5@ +zReu(HJ$O&_E#W1=JN7H!4TD$mwkOWd)E~Sq@QUkS3;8^0{iK<5b@*U#X9wNxTul-< +zc%*Wj26y1?Py9XM#pbZD{|b0@;BEX0c)j2?jy~~sRnLRqje*z5yCVy{ex4$2mb8OP +zvpnO(UG@7}WnTpE^8fHH@$edWiFY`{ugGr=?q}&cwcxFS +zH!Qp-;JY61>K?qZ?^NGm(weW5ru@fA>m}`p@~;DL9=vJrVpc|;igJ;CBKb^W9_m*6 +zu%4xSSHM5`&L@`D%D3$Ew9kQag=y)>)?Ycrz1?Q56JD-ax!MT+(Rcl7_;Iov0>9=x +z-k9^wO}lsCs;n7sM!;F-oxYGg)z}9-`3G1s<0yEw@AcPo8W$&kt^V+Gp~vd?x}&>O +zC#bdT)(dP3*dXtE1RDaj39MNF9>ER*i+{l3e}1bCCV_PWJIXud +z(Aw1ad3d%uz$))C@K(WF+{zDPnwPd_f2$+aH1V6A`4=aDC;i)*7v&l`Ru>Zf>gNsU +z4rb0-e?FakNAGS=-e63and<^K^MEV-_&on->1WGt#52HFki3SYzw!?c9Hs!bp1&UO +zr*r2DSQu0;#V%$k%+-^28JuHv8wygVad8NmwFzIRMjjiTpn|j+(#j|O`J^7$QD9}j +zoc)|d>Tn&)40Aycw*_VQg(8;Pc3p#J6Pgm0E6}ck?%WDk?OO3g=9dp)6Y|TCd^M3! +z(^~>-=)e&|qYHLHcl5)|-7%9t?drr7=(OPk6j>m*FFNPc-V4BE>JM%0N3X1ZBU#Om +z)=k>H&38VMn7B5*m%WqD%r*Jzl9j1_iEKq~4|`JK%OxtHJq_*3=YiaRl18I$pkhwOK_x!THP$JV8{1lv?YC0Tk@%$ +z`KP7gnH#fD$yJAMmNxa*_h)?jp5cFBO~ATsKE!@^_DtICj!Az&BUIVqUt+#}2>S}} +z)B&4W@)~Sro=2nBPzi7vA9mW$t{FXrS#3E;`T^3#U+|uEMKjMSZH%<(tE8#?)1)oB +z`SM%z^S~|xGwX76J_eV)m)nFan~1Q-l8fFQ9{2UotwFar>(R-kX2J-XD~?SFh`U1r +zQ{S(qLpJ^beVlha`hGpI;ZLIT*)`8hB$2*`YlgVhtWz6+**&@4Z4Q7q5To}I|*f6lG;dhfZS%g2J{I7zqHaV#L +zKgU?KGU*ie%{*yhpD}`DuWi?yldBZoEO@n_ch>F9i`;jV=Y~fDU%%Y?B!Hvxp49ij +zQ(Nc}?Fz7IV2*up16f&}$lsWJ%J2IPFWR!NAius4p2w`_qYvf2#p&A=SLbI#*$)#;6GnJw8^uJl36e=H1Ic6J5ckwefPfp+$b +z&NoCAmCmS2pezaG0Yvk=SvWi0vEvD9C2z3^9KrT1SMYp@IY!M{Z=s2}Va +z@ioD^43XaZzgZJoxjSGk)a`P^-YW+F%R*(6te%FZ`5Vk1R@TTjy92S6*@|^Dy)F8^ +zpixonbrSr=6WHG@FX(&-G3<0;$G@u0J>Q@`rZ_YuUuB;BrepuI{p8qrtPMdtQUgxa +zx174MM!@Hd&UCl*sQj5mUlz|L8XYRi|JL +z@Xink=NLGLA3Nur<#TYn +ztwfFK)8I7!@|-;f%k?1N#=`!zRtdql^?tw||0V%{|IUq?+qScdESmq4 +z{Ql3mg6`0uy;V2%U$pAT5W~&ea=F)iZQI%DzXojXlGPdVs{apcz7GG&R<$J^%aodP +zW>%(&ACH39_n-8E@H)&MJ7>~V3+|8!+{Y~0vjXnP|6*MeUIbv}t@P|YMTA!GP&80vGH43jAv_u~C<;=)srz?{Vl>p*yhqy!F>sf29=c0%NUZDLelEig|X= +zdH2k``XV2-=Z@NTS{2I7ll9;o1W)XwM{Sn?b^w?}l^((RfQ=TxhJlR~!N!0M7v*;t +z*iaGd2(ZBbOgg~=umNDB`lz)LnLX7d;3t4@3a&A!;oWZHsik58|09j1lD}r2sW|WI +z_ZHU#3P3Uh;;M)r>cAbj=6vC#JJwCaAA$=gYZ(~=jHou~2fw27d}yC=1XvTWQ~I{` +z5x~r0j!(YPRpvxH1>P!n;wwFI{^o#{TzlTyi0m92+LI9ODR8>MF=LAS(VrQf?tw5H +z{8x3k1l|&OOT3$Mm^dTph(eURj;=3t3MBm6MaJ`W=RM!-7A}9s^;<2Ad$inpTnkIf +z&U*0sgn#{c8^hD;tj3O!j`-TU|0S!7XP}v^g1@0h2jN_3^2zyXt2-VcZI!eU$vkTt +zH!?2;AG_s!v-j5NHl>jVtI$?G>AYR9+BK6CFEwEg4i{aR)xamJ{)Tn&lh1oG`HcSp +z)_CtYzIS-U51uN1>VdAj`g~!AcW)jw6JEkJliNz_CcEHVv#KPWwdopGRe!2iE;m`bB`E_1a0&Mo5EY%%i%m06Pe*GRhD1 +zp=e9;=0vI{e+z~vV_!hH>icE?8+rBg^Y*L +z+a%4jz3fTSQSP&K6m1{rgEwDU&N|XYNgF3^&B@o;_!1g>zP@phgp6&3c11meucYvKRShkMUzy|8h+x=|W +zEi@-Mb3qe$O{7nfzM}qd?+oJIok*iWemI(*h-PxpTqaujq_9$(faEmv%`ZgO +z#ti)iQGcE@@ryZ^|KlHohSB +z{A?!eGHJ_7v+|ahC+bUI&iTRVY<{EA9Qo}lc|-j=N!m%$`knp~FV6z2dhz+fl&wcS +zlHguq$8MM?U&i#ozINhf_AU +z&%1oSt|z^TboGzg0t1WZ7t>AJ0BO@o<57JEfUN^l(e(&63TzG70RyqHabUfj&UYQW +zX<%c(RswkQz`DD9nW_Aa1DgUC%x@W3Z2$R?FWow@W?%zOe)anQ@6o$~t?1pAx9t*Z +z#%I-QJU70BzSjUv-)+pzPNf9v0yg?m+QpGog7pKNxibtK0d}(Iyp1;mj_?ivTfU3@ +z99qfSDPWs-pZD&#c4Lcqp$IyR^fL6v!R@;T-OZs_-z)=L>V@~W@PoU7uW8NY*em)l +zd-WfQrau(TAC9(XCZpMj=tMRe{r3Rdx9n_&qzXYWdM{-Xy==EF`154Y{Oxzs(ScvRhfnP>GsBDREGCvM8K6%$8SRb&X +zzz#TlQV(nxSp3a=k9XP>H<2yG;IPXy%|<5{+c6EI>}UsBCF4 +zlC`z>odUoAEzVd7$s;G|F4?FomsCFRjJ-zdc*kjgof>;BUXgLB5t_Ph(cUBHgK;d) +z`8=9gy3L&d74V8R{SdUXZ*}H;%4H5pF!4FZ8O&Z&2Aq<&`MR+`FZ%Jrx}ABk2Gj-c +zXTTrhJuG{DyQp|>6}(H}IeSt))}K@hVB$B};D+Hq1|-JoXthwar9?E%;;i~z@GWd!2!K=J8Zmd71qr0f= +zmq;HaeQGa1h$oD%?k&liQ#I+QXP%aQYA!x;Q|UmgsO%co_5Xlg@gZMNk{n6^oBA;N +z!Ef+GI%fOC&G}m%x{+PFj$}>h>FK9so|=v4ZX!@}@fGk^{)_(a9bJ+vYWbT2R(Znf +z8!xt`ceW@f|G^ysw;wt^D(5n=qre6Y#KP8rReUo%$CiADegxJVz^eo{4s0L*s|B_M +zOl_w}-)I6>@-3&09axX@0~Y-5Ah4+-yaUP)SRZtHn)%BBi+>wCh2^LC{X4W5&}RPa +zF#mR$e{VDYcAJ0iH2?POcJnwz9@8h$L2MrN518~;^KZNPx6}N)-~4;K`S%X<@10&A +zmH!BT`~y0jlgFz}dcyqsxYQ=~E|Z7arjI-h|6`H-2UhZ3^fVRLl@G>X*cw_zJ>X~^ +z^`Ol_vjEMkElUpIDm$1NS}^4&d~-I7cfsoT +zJO2Iih1Gzbn<3wsWry$FHC2zlZk!{1h4eVIdXuytU{Pmjj_60ou#I6Ua);qa&*4gp*KVbPl3*bLD0U1k7JWuFJP|Fl29qZb2hW}n_m;Or=T_b +zOji0v53so(F()W*9>E5I4gJ`cnQGeuz-m?;d7^bjfWHot)^(LMmKy%4{2t}|iL-W4*|hF; +zeE8L04Wu6--Q1<1J(fgj?`_F_`O5S)nTo*WQ^FkpcVQKs&yL?2_FpTybmm68I00PM +zEd%br&#_hTu1D=O18f*rw*Z>QoHOI~{9GVyhP1fGklE|WRCFZwrLVa?Uzysgt@yh_ +zvOzQ(&`ht^|jw=?R((nn^oNTA9`7 +z7fWwX{zm!*+2^(8>hmw`Of_VlKk?k+Goqq90Nv4Z*g#YcY~ZDdOnvsbow-{lo|A7# +zzMwtz{PgpR^%&93LpQv^`1v*H;?S)@*YL}LY!RPh1$U0<8a^%mKI0RdCh+yB{o}x< +zfi(*dus12KiL^!15`LQT(N|g@X`7EjH%eO7=GEyYN$V!9+0WDXLMhKV(nhXAC%JHf +zv{}-oL}zs>^e9#o0mm`nZGcz(@6H+>JR%lcfv0a({WJ0(yk_2u>)k-wG17|bt^VmD +zZJo4oyKXdb3^JS;<_u%Iy(Mm9d-xU#D+J)dT7 +zywAm0Pbg5)1Xs?7a)MVt9fodf%Y{Pqjr<_C!1lJ}M*7<;&y;tZW+@x9y%`ZGo@f +zzSLfPd~$4i;oUQ_tH@%edL^Kns=H7)5$8we?wL2YCjV_$`p3Jv@;}*?TG^HP(XQ;j +z?#i9sHSxn;rJpFOmw56J^tE?faQB|H9 +zc>F%R;@pPXyZ#5*lkd4uxbzf$v?I6LB=5TNFO;auJ}*~4@!ZmTit4Do8-gzJR=@95 +z?}Na4fYmvACO)f9oEd+&S#!uNcztiX;QH{GyX)O$dSE-t=m)339e(=-&p*7?9E;YH +z-nU0qk>@4wMn^APb$nO;3;lVOG}WV?v<1?R@~%g)1hAoZTqvv>i0!LBV2KAW6fTzw +zfiogq`P$?&Qn#dU&eUX|o_pHFQ$t=4X08!0O+r`x{tJaePvZxBuF)>Vig@Tr58t3z +z5xS$v#*4^3IeKu%Ps7V8wdpD7`~TuXVU~C3WoIz{W69F{J>8|Aq)Xtfg12Gu>N~WD +zXZG#WSXDf;U#IhC^t8Gk!hfH<;KseG=Tb2@7Ho3MfQ#wWAKZpdU2y%h6))S_DT68# +z9SY2{UG9XdaXkrL`H>5*ZYtda)#zTM1gn1Yq#q>xm@T*DH(?m_WxhwH)$5kQtNiqZ +z!l>nM&J=Q4r>=wCwa45B*^$|vEz50-jyoEH>yWB%RGx<4<}TPZl=Nq3u1rVXWtU${^hwB=ePqTFxXrqPprfjfSp +zZw`w-qvIWcuJ;kI-jk7{JG;fxC&AeO$LLD8nLQa}n~syVMq166E)-^X7hgqi%IV4P +zy<>-37VZ;$`M=V>;HaF8ZSCopHBTKsYe`!ot=W#%C%pe!_&2_MZi<9!jj;bX`n@}OSwe{;^Z^}AaHrfzHC +zCBEv&K&x+idPVFBL&l+7{VUo__27|QnFh82EG_^~oWFTs<$rx47z>|e*8Ofbnz}B5 +za|E0&5m8sxuEsG%yuCr%Y0@T@rn6b89SOOIc*O!7=dbF=@Y|vzN8B|eQG;IPEGksa +zCU923Y2w{Ezhd}JX?>){{>G87fpcz38zrrlw5!oglGc3{Id`A-YS@jUK;HShD*AE76yxZb8x_qa~p` +zC8DFJi^ieKUcbWl{niCHo~qWwCf1E%7cq +z&In)x&zB8&9AW!l8oaS@UvT%<6hn}u-F;qPt4$WcX*!8cz`GvhzqG=50_OPbj73{g +zHztxd<>S#-?+c>64Bo~+Afsda;Hl@Y;@`ARzEBvluCia!5u7Yawj;Mml;tF)nQ;sveA-)c+$X6A+M`4^=cv%e8OOrtT>1YOU6 +zI(4?^JTZJ*SF?mO2S(o?9z-hRD0EYoFBDd`n(vKpKTLXOmk#E-*TaPU=PN)v0!^ZH +zBXs6^0a$YY76z}KT{m#tDRUECf^Yj!zh()m22_jEfQY&W1)&Ux^L!AtP&tV_Mvzb8qXABsZpd@O?56CKb5DwXCDci3@2a06|6jV{t+n*+I$#69nt3l? +z6L*nz=qhO{!ysu#NLzhAKg|9>`l)THr?q8o%H7zJuSq^V6Q6j>gP|gn#6g|b_x@nR +z?rR(W9@YmjH)a@Z4bCDs3*c1#7C+EyO7~AZH+kzrwGTfd^_+BFOZlF$(ze_)^Yv|+ +zXJ?;9WTYaM*?cGVbNKOVkN=%GS=WNI2~IEX;t%Xljz9ZtG6k7@y1}Xc%g4vjm>&UW +z7@UL3rzLP_gcmia-3U$f!8Evw;PwcYN3eNdmw^o#h=m;o*0-=x7;|9y&N8s$z?KD* +zog;WhcEFFSp5)jsuorxN!^VTLek_^TZL$bxV@f--FAsH&&zGEYVJMa?ba{uwV~<4jHmiF#`(9PiI9Qy +zCpMcA#O6tr*}c?YI7hRt(>yZ--O+Dvxb`V$UGspqt{Er2;pB$9ZeyILZfw__9f&DV +zLq7B1Er939A|EdxjMP8N;Pw6k?Wb}Y{{<7vlaP$kiXQYEkmNXjWoNL5e8-VL0pCiz +zygmM|182p>k&JTAjk`E1Uk^BS|A>sR-?jaWb9y@RyWZMK-#Y+a;*>KE$jkW11@2R- +z1!o$Z8E`gurw$&^cyYDv^7V@o;0}Iw!|p4%xW*63wmX~VrA*YXM4 +zm8S;>;tbY2N_&FaZTox!ACl+X9`vG`c*baGfRMk&YCm)v-(y_yu1D=N0<39i!}SYY +z#EbNnMDiK=+IM-XnW3EmulM^Ko=>s(bq-h$Fn2Gk)!f10nBJJ%liS}HVpt>pp*i`_ +z8-*I_0}1X<$?Py!;da=wii(86a0(miB6{lJ+A +ztWDlqOZAXeca=1?`7micO0&E%&t5=fB6)3kUt9jVw|Lxvz6I_SxTF8#$T@fY;oSA5 +zc05M5Ff_L~&=!YL}6y~XaELj_&E}Y>_@5z;$U5HdgX1BQ> +z>JN+BK;^Aohu{Cz8MCwj9#PJo3CeJvFL%_=UEucq2wb&uCw@Jxsok0K{kr!ly(_yj +zw}X41!qFGu15n4HTUgmBj7!cDH`Ulg+p&gX7j45LiY>Gq^Qbk9Mjr~5QuSMezI>JM +zie7b-KM`*C>0NCZg6Fm8E6k@q7$O9n_0b_8fO~8jVxxChiu+*T)%|y$apXxnGY?^{qY+zh2lV +z^f_}7euYj9C^1_!6puyt-QbTs=8bLYLM$?~$L4!xyPi4X;e+5${t_L_w!eHj9Q&t# +zo3q+z7QFFI#-hc8f3*Y7{aUHA%+|me8ja0U;Li0rcS~3q?d?^qlQ#43$d4F^9r%~G +z624PTGx*LVZ_sH=&iFqP<`j*^nhT6a^6cgvIc(P+He{=5-vsHG{^Qrr_aJnWkCU%> +zdz$o~|K2EEvhA<_Zp)P6Wdqk`w*=Zn;=kvb?B$o?S$s(gKDML#gtd +zE~P4(6~x0M(3O{6d_p<#`l1R+_8)<6bjL;4*2p+d?X(8X@;x$c=6AEWXMS@R72=!I +z(45+N(e?et?>%PCu=%Y~|I`4wEx2VDk*B*Z{z~Jp0o-G|oqT_daX1X!OvSH9r*Sn4 +z-T2;%?wt8Qj;kf`r}ka^AIH^Y@FpuS{z~Jj_A%zYyRSa35~Llu_F`d0e1so2^UF1D +zIt|XovfYPf+vt7aPSvljqz#gmaMD+fe@boW}~?Z#suS?cYz+-8NT>3?uH!BwB? +z(f|Fx2=?sSLv8;9QaullHadOTyQ|gAm1aXJ6AkP?-Q#Lms>d8O&E&Uc=fNKIU#wfY +zM}d83d#%D-!=udV+^f)Cdd@{xZ}#Q_&Wf4}XpyEemH!|3@wpcZCvE=CIHPixfEI;z +z6+96M+rU)sW@xIP=kvYt=>=8=%sJ=35lLj8)RBBjs=6)x#X6E6^VN +zjf;ht9qW%r`{80*m8tswGCww6y-bayjgt23=Bs`jg|_RrFS#7Zb-{N&%ckC*@u*CB3Q*G+6!1Y>3W1$1MEN%tP$8~5v&`S@(a=q02?lXjRG4gf{g=H`Sd+K +zasH-(4FFpbK>GU?l-qoS!SeF7vHbed}@BF!rCwPv{;Gry0^(a1JLfT3xhb +z_o-(S2x3eAYg=f;&g8KzssFVl{go}5FK@{n-IDv#mgslF9BBDym^^yAE?Pf)@>F|{ +z0bAIA(b{Po*kNE*w_gnTNFD(e>qb9w$1$5+?e-{2@EEDda|ztCJDv6=PxZkXum)hY +zTlrypiBh{el6&w=_t*QTFVG%s) +zfv%O@m&jM%v%}fP)|z?=oHcMxAlKo&#jWiVZ%Dr02#MFF2NRjs=3br14`p9ddL~lb +zO(o5cR9rq;G!4Xwk?Oh^DeH=bQTv}?7_4Z +z+{LnVC!kyXpd(YUhnSPe98$Hn)xA2f>Eqv9r0@Wn#Uwa|C$ +z9=oSK`{^CY&+SNmmLU9}*^&P|_SCr@xg$F!KD7gdAhg13g5((VOP_+@?DsXVU7M`L +z-Y=`tzVzNi=9+9pBDW`hU39ki`_dUNL7({I#lrFH_(8mveI3a!MN^MNADW9k{Ml&s +z3(?%?qqpUcM$=!6X6B<4pNkUn`KLb#6~ok{`M=TE{+_X__R~4D7S3ZP{BxR|(M)hi +zlM|Yp*bE*RL+LQ%ANtHU8UK*$5$rIqHDIF#Vqr&s^?nOoO5fp8-z@+;^=v8O- +zHQ+abU-^$03p2b^Z%?NR-isS2X#l(ocpJjA=hpLEU*(QgTaQEF^qpe8CfU|u?)6BO +zcV@Tia_7trvyv{l#l@*Vbj{y$ +z4P+WGYrqCqk;QhL$J=ztAd3snmhL$zc(;OiC;aQ7uZ=`X4*l$+>r>$DU%bQVNY`-h +zUck%T0Zl(ND?h*J#(L16CR6>e+4B(p9wdG87sxu>Cer84*^bWq4tvW1u~}M*8dLMq +zQRvDZWgWn~+Qi0Uzyi!70voNjajr6~fO`_$OTv{s%#`6lQwHT#5{;D1oxNB%?Y6IC +zCb7wHEPS(mX9%|r+=25K{g?=fbz?5+GtNK>S3qif^np8i!PCnWv#isu<6h^CB0DdS +zfmgS|T%)-vuuqpE2zV)>O>$A9nFPeW+U+Pbwg1If-NFxKPH9W_xoyc8v*QV=;WE`)}h-dd8{xg-ZgxmDQ`0&TGG2Z@)eGi`pUh&n$k!~-;T#@Ke{}~UWvCg +z6<9|#lXWlnm%u-5c@2AwZ_~ZUZ&Gg)iU2D<6nd3)iaZXNKUP@S#t&k=6JAmG6{O0E +z^)AW4q=)coje!AA9G53>ec)Z13 +z9(LPFTe71b+{@rPv3SNX(i5LMbk7pD_vjxKv90;eFtp7#JXUD5I-F;B!6^O?e*`=A +z2e-ExTst;KS_m&G4+(Ccl2D`#sD5ksE2jR?_22lIjT0h$SErs?znVxN*glfm-W{sH +z+B&u+QZjYZWA^Sg_J~@|7bdplcbkZoW{;>Z{3+8%P0%eq{joxi>LdB9$Yk7a7`UtU +zQ$=KkZWOxZTcET2G0?&mLULz%JF1}!yGAiA9``Ee9CRhM^pl+@CL>+BazzEhT$|t9 +zk=|oAa>83AMux6JxAv^Z3NbBE+INo_R}*PeuDeO})1hLwbw89ckKNJ&zAorbRBw;!|TyIJ=kR~1`-qSVB`#2tuxWWu*9S>CJM +z20y&`G1uNO8EMb#ZcSd3kZHWbMsSKJ<<( +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 +z2p|GVfYw!CMFT73^!YUgTv7oRGh$KdPz +z=fbj^1v?zTPJtZ?U@KrfK1}7b0oK&(=#U`(v9g-|4ET#|o-_}$8J^q4-gtho +z51+~^25*1!hTSjSkImIwFz0MSwrB&AZM{zwYLSvVg4`j()8ZkEiJm;cld^YU!umq%4akFoOf&h(wXG1X3p2 +ztBJpZb8@;ObHh7)b4?8XUigpv7y5+872;0o3~<{pZkjp=Y;S+s7B8$9Vszy#JE&&n +zyJkpdIlPv?V_ps<=3@C49Z5AlB%?k#6`sm@6}jWv*EUb8JX{+CM#oer{2G5bYi_H; +z0M}izwpnKFv%2dI+X+rt+IIYCeoiJ5gr|XEhVq_$abHaTJ4||!>(}fa1?j6z41l$R +zne*9NWBL37KbTL-x4r1Q#-h#LX|y(vInt`zy=Lu`Tg>|p`|3hvv7!9zS#x6q^s>+} +zXBTBd_Ycx)vo-h9UvF6R;tXs2Y6Keq>v86H%@Hwkg@C4rmRzl7iC-zK1kFi($j#hH +z9q_DmP~PU7KMv*I84}&u>R5kmy-y+AzW3_ixq{qa<<-Aa-(Gzm`sB^DHRYF|zP$mg +z0<7M)qj=$cvcucBqA`tyIp1(;fRgV;uIiSxf;GY*SSQ$FCC*Pe-Wb?4*dYOSz0~fm +zmz2&7^x|9BHU~uKCu|O^7p%`9c5Yn)TLf#c{eO!6XPvp{#C`tuBlY)^=P=(_t+{6= +zr#N3KzT95#M!}+@2z+($oxaU^FSeqXi4E*cJ*I3r;OV@5ZL{CD3$68>TW#K9Kf(E* +zb4jp?O{V;(k(-FD*)=VH3!4C|x-*Yy%$Wuo17j(xKHTKp0W6P64sH3{c^xdv@DJTZ +z9}DuQi?=)vsP|UZ(q8V)*HZ+n7Hk%5m1pXNGq{P}L=o^7@ZyQXGhV&s-f3WTLfvcR +zuCK+@2T$j-*4$W5I?t^;mA$}T;u(Xd{+>1WOp43nE!36ACf!IsVG*$7U~z+3tR8F~?1+P@Pq%^f)Q}gIG4?srr=#+L +z>hXrveD7}e`g8>LL1g>yrH&-e+$e)*#P`ut_fz8P8R +z#gJKe?%J02l5S`lThJoN9f20P-zi6H3wy|Rkb}yOZU68bfyXU>)BeF`z)V?V!y$eg +zTPO5_7TrCS;krzB*J_{Hdt8Qp;dzXiq^Y0Ea~-Vsr5kQrcH(HV`4Z5%BhSM=S(lfM +zAX^W164^1HsV~_D4`@5hZR2V;o$$nv)3bhh=V7oWux?w2W{f$gncrs+*Ss_e-_Y~d +zY+QBP1DD;l>dsEuMS8pM0It%Ug}40$l#fkwmhp}IKy=4CE8Dtc|VS +zy7`!LE~%q^LGL0>{gm%2u)6yEH>m9Ez-qxZ#KgDb{%uqvB7$V_Zr|SHEBgp6-SBU~ +z-)s5t-$GZ*havH0H=Z|bbp|sAPs7VE&7*dD +z2%a@~%56K<7{^r>xzhYBZ2QOve5YUW%zSE_Gw>}p<;QB}bq;J5%#6#nUl!QwRZpw% +zwC`JUc*|Sz?-jNRR_4Q0CdFi;1kC9h{xScOcAN%emILXugDqWUIs?cYZ!OH@ +zDA){G4|&tCk$*?QD)z5!b~w8Bj+WGKgdRwIE|eP&C3B%PA%Z>|%6=v^{OM3Qpmv(E +zcLn+S18eRX;5ytOoLDpY*fc7i@?WBT9Ay5}i}?ww20H|%XZ`g52C$w0)(+O~!>Zux +z2I~Url%T6GI(wv=I|rbTL)SNo?(Q{6b{yI)w75evy5>QR>F8(tI}UyI60!@>Djsmk +z(AsuA{aIR|nq__~zkT;#qSk@lQ>B8guucZ=QF9kV|F?nRNWh +zWmMP8$h1AY=K9V$u{9qs8By64vpDL9u5rm}3*LTZ1lqVuqkYm&j4f5)*$8bG+EGW2 +zxgD|_pVD5qqx$ZFukDdF8w*`>{ObpcJ-W6zZhc(mOQN}CDE(w8^9kyPGiu49Q0l2r +zEISw){&*<-je-eHO}AL=AaVd +z03;Q6A(rCk&PUV)95*qQOVvxLpVzQ<df_LYLy>WZu>hN6Nd7ahHvV1YnvrDfBGhKz`;4agmU^GPlZsq9*2LV +zE8k}#VDn&Uu;VW>32y7!GmEqFEqtl(5jZ(TwpgW&Y`*9V#K!v1!9C<~yT1 +zJ53)EUk!ZqZ*|5xkFVV+535Mm!54>b4n8wxDIdnCD;qXfHkzy2!_8hL!msZdL}uk} +z&K#k!*yQ1r=H2?XN$53iCr$Mg?Bw`u-Wbi?)S9c(W>V^Aww15~j}-Kg2&{|9HN7K0 +z#@lZ@=+&WkiW<@H;OWz|#x}eUb!fr$VN^e;hGzkuU_a2`Ys6XIfL2G|ieIvzH0J5H +z6)g&==4{|)ZX~W+;c+Rm);vPGMem}mI_*7{Dvk|bn^a5*+FD|JdfSJLLgRXFMtI*8 +zGU<1F>s$57N9??1Ty{*lr{GzEXUIvnO(TNF2h~M3JRB-KHfh!%$A8MQ;5}=bE7&@V +zhyPLEfiGI-?r8R|Sh{-n&Q|yOitxW*RL-%N(ZBoG>{)QxMX+Z)oZI8Aaw^F8A$SIV +zb!}7MK-%Taj3as;03QdRw78LdBp^EpPt6CN@wv^)s_c7LXm7&#&f>7ibDi;(G(Mgz +z#(evxzH_IhzZ^rh<3qL&73;zr>Yhn4S8NpG{Aw$|<7dacx|g%Ram3S~?fZDuYuv@= +zqu(^`R{gXK-pGgZ{a#~SFIXd3lO4Bb8R@lNP2Ct(yn5fH2e0Y>@OOPQZ__jVAM7NU +zp7qoJPlBEBVS3jh*eqCu+QAlUKEItzX_UQ!@pqsw-3ZvR09FrnG=Q~%O$M+ou!#WH +z3pO6W2EoRBSRHv80~-Zf@6lyB`!Qk;Y +zGsm?ddt#7wp|WN^#J2|zzGV0#Zo2^1Sk?>QktdxsukH-xvQV7}(t#j*lryn2aLt9u +z`%&cjo^tfrR(#0RRvkTBW9Uh}ANpaQ^Y71(p)1fUh8V-_{NS8H! +z{KZV{RJA=Pc52}Crq%r;QO2wB{5$jh-TCdZ{f;$P?IjNXaroENUUa`TzS7C-n9=s9 +ziOrSRl`6}WW_NtV(M{c%&5mJdWCxxO=s#fNV1C_c8f*qk?Os29-$}3&VCw=jUN}DG +z_T0NBJqC?J7jaW}MJU7RFF1OQ-Amv$4o#KjUNnSWQ=mty9_o>)oLsYaJjw=W&LA-9 +z5PZV9>e8g$1>Y=um9~v)JmD?|jA4q~`gq<}@t~svtIdxfbL@-WT12*KZ!K~R+WZ!@ +z2y!Q(twEdSneV6VCT{4+Rd|MP@tlTd)nD@ +zfm|E3X=pt>^Zt<#mkSB+1}{5Wh^q|y!F#|*EdK-%06vc2#9+wX#|BrOPr$bbU#Bg@ +zI$XHfB4w5*Mv*@VmFBxSc*}nm8?Ia4#`0(kZ6-#$6XMKh`4RXx;BWe0YpxyJ=pGOG +zbPu(wNGt6bo=V$qdWpvr^G9L8BZNQ<4;PGnO1l%e$=~zVz!SuY;p+H3UVUi3Jpxbp +z|IW|tdfy1x5wLaV8!!@PIpIRQUlZ7-RXdA?5jvdqk6diZ+so}{E8K<&F!xbwJDk0e +zz%AdVPwnS@f8eZ_*pFx9M*cd3#m%`Vi(i$Wyc)?{ExhG_Nc0?A7E7EvAHuH!`(Y{( +z$~+ayrLn#zL)j-o!=DH-82gQ|`nJQ!Fa43X&ofJ`p21K{^2t!@6CCOIcqlhSt9>f; +zQJ)FjjNg;UHGIii^BX@%ZsSYb@OVCdYEyIY75(w$`PSe&315*dW34xG?AuFG*thfb +zR$owhRV=Wk?%weCbL#W{z*OM9#44>b&YrY@8_@7YU_Pu-u_Y0ah +zO`2Nv>x+_mxPa7OZfYl!$c@c7x-)+Zn*o~y)3bj1{~Xvv09yhZ4`6FfdVblG1L#`; +zzACVh09FT<4q!2`p#atiHW7EpX7gNN?}~t}K|e$~M=ag0dzjc?{Y{&{3h>GYm`~v`V+65#TUoCO +zuLEBMSN~8?BwR +zm|u1gtT({73N{YbU{bT`6+g&$7~rb}Tl4X$4r{?8C)p>__;2rt@#{()K6_Vzt`vc- +z8<~y&3U3zYNb9JoR(=ePf%ByJ)d{g~#EUxP8O5KNA;*XvI5nrT+6^>c7kI)!ad>Wjk*V +zgj-U#wJ6*Rcg%!)^9vL8>GFrm+qC3s%k?C=U0&oJ@Cg5o!M6mTnFG-A$rz?B +zPo*+r47!_&6JbR-$wES&`$f(5;h99;=}5| +zj)E4OW50eOQF_>cG-qQ#{k}&6??8Zja~uqjz?|Q}YjnZTApZPXIdt +zHUSn_TKrTtBVdbQ<+fkqW0$(#xNgUCd(yjn3YWt_3;*0dUOE3N{Kprrj9=dp>0mwn +zPmaxyzpMCH54P@N8sojPxAYF^4d3j>VT9Q`h02^wpKd^D>M~6JRwqjr@F}7^3m~ +z0?)UtWa=}9+}OVq)@LW!XaGA5HUbv+ecu4soR6;#+9=pbFr%CJ=W6ZW5il|svq5=3 +ziOlr(9ecQqg^apotVY<6j6Ztjnt)@F%B|=%l<$(~`*cyc`R7RGtq%V2A6$9f^o|~6 +zhJJWu@6fl5!hh&TS2wS!FU=v>yIfelOJK*qMAuLMUjsWDz)D_Ad+=e(cNN$K*o*{q +zhhmIvI($ph70JCgnEIkNTm7^h{<Kx{S{7>cJXr-thXd=Hxc8o}X>4 +z-}gWpf);nui17b@uoGab!W=yc6~}Wh5zjb05#F=z@}LNDPT;lf!dQ8kh3CkB* +z3T!5Tt$?isunn-f|75>Q>GP9p`Rhp!Y|0=Os|FkMeXsZ$z=~J%dSw$>J6Hs4!S4O6 +zmbVON!ijWPyFa;XIGGBklHqhBoEZvdp9+V67Tg4qjyggb$Ip7c1kU=|JwIVDovVXy +z2EO`pv|YQVZDOBCuDQwWnQaHNVfn#-puiTPb?|BBZ{1r{tNmI(HZRioL1O`vj#v2x +z>J#1(o~a)vAJ#amzS98x6!by$H|SBCl|J+>rOuufH(PwS>~>?nPot)6TWb3c?yoS7mNB7c@6>Idjn5Z|Z3V*})CR$Ah%g2Is(v{@>R2j1_3r +zThNrZ;y0onLUY#$>O+-aJzz)d_i<+o7w_$02P>N1o-O9?LB$b%Z{d1T-xNpg*ru~z +zth=US!_P`oQ!ugQ-I+*R?w-_L={vJ`Y`Z%UPfYnpBfC_5*0af0fK7m%23z78d*hU{ +zqkJA7Mi0K`tljV4x2t>qMA`q?`E=LxpOm)Pvj +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 +z{w}Jw;3kLU29Y~dac*J{-jwbl^!dtj +z?mpvIdoKR_zRa3bbyD#$+TSf#RwqsHF5Y_Obw3Mxy_?0+x_^@G^^FN*;~uhDQLJ`m2Kt6(Z5J@t9GlhZGhf)_qnUy`|U-p>sjZn +zdjIk$avhh*kLv8C@>6qVb+!iYp?hf;R=;Jh)9pv^_Dl-?epEe({&nBw>#QBVf#;la +z?cAmxr3lJu&inh!vFbZDmmF+0BqqSFGwsXjh+<*0DTl@*WkGx!} +zuB)LReLiJt`*pXuce~9F;~K=-nF`#1WXFRpLvMKT)#v9la&<4c`utQs$$I4y`BB@8K|k4eWo@q)-s3O3^0qet +z|KiIp-}X+zcj^^a*7nxm9a_7%?de;}pJIG!y8O4Ooi@U|y6@`SX&-V6(W{d)^B;1v +zEmvN4i|{YCUcT&#hse+VD=WJ?c++PtE<2S+JG7z$SKt2zk?SYTOZC4==#}kPpY9@Z +zy_ZN=W6%clx`)nrXB$!8One>bmz4>|TWH#n)UT0$wO~{6bDQJB&@XqiBtA*}hLKQ; +z=ql-KDEI53{h3TCn+^@9LLV&b*Q&q6$d^CDoThO^F^seitxd`B2fcB(!_i-qzj65E +z9T(?MW5f)!K4`r>JNh%H;f?xi^11;11ay`<|E;`MCfUz;?A&IN-SgsnsB^DHOmVv2 +znOBNPUUlCF|8ghutoA2ccTI#J%H5T?GZ{(U5l!EoxhX9l6OK`i53&_~~A|FZG^i;(fWk*5rHBy_t7s-!=TiwwD#=*XVyK+W&idR)7d&i@jh=lz~xOg!`ORK5S4yS5fjd#=Pgo>(NFHF%D~GsZJ{lJC+3{(B9T +z@5(gm_Ya)gT(f(TQ^f~!u|zbrFPd)3ydsu;`Gd*k;g^L|1&v(a9Y^l;hc7OlI%tQX +zm4D>i=B(-pdp9wPFnJ%a&L;9w3BSF-e%S=u1Ty0T=Qd|-J_br#hJP!R_)XpG8%usZ +zl>H5k3QmMl{ZAyYSU&ON(c&UzFxxOc6B +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 +zz<1Aw +zF|_1=pf7?AsGr4ltv2n;4q;ylfxQc)(DQ +zENRm@6ot9rhKAn4?3s4Fg52oqXvdnnxT8JXp1VJD@9?t|&rQ~*o|C>WTeI!DP(V&~ +z9C@1d|0c#Xp6UPct2OIx<)sl?9kio1FZkOe%VXIx-?%)yGw5I-xjy8M_MErtTF&Gf +zC0gnN-<#RyAJN*}{%GcxW5^A>m9nyV@obmgTHRR)sazM}EqZpYb7)0<&TfJ +zXa1C@k}ps`@EhMD*B9G_2xztL*uxj!E2lozgxuVr^LC$vbtksYT*-d_Wiy2y9}#5w +zkQsZYGd3}%63|`8aviIv9e2jysW?nO+>HQxP23^LQD08{rXEVa(w_L;wiKu^eaAd< +zT^~O0?(NIwX>Php7N@bUd#)_L)r#$}B{aakj})}us0<>n%MU509o50t_|fy5tBxKX +zj-?|HB<@b$mAW%?M>Ko;@NM+A@UIrMB=z${$Q6I={N@tRd=EOJ8g1&@Tdy;c^@EH_N~d+#646^yA%e3j +zRJ)?K6Rw>&?J)wi6SW-+K|aZSJ0)NFMatt7%%fJG`^gAQ7$q_xQ3+#QNk)7^Ct@M7 +z3j@0c8e=+`yI<|K +z+Z`S4m{jrG*eBp|>HxdH?Dvj7pDTHrZ%8uwV+{V2Bj+~{YaPluq_pknQC-Ry<9bGJ +zY2$hz4@!o +zOq(wL9pwvbJr#VWn?ce>- +zt3S_JW@B$JZEwrIZTPM6+~LGKlkZ49o<5X$d*G%itHVqoH$HjZ+V`D3wB&Ybh=~Ks +ztY-CswX^cJjLgt)Gw+n~2WOXy_orjgZ1eEGc&;t6KiQgU$wb3Tg{?(%RMk=ZY5tHo +z!{$*s-EA$3&lENBnX)YK+lFu6c5h%9GCE2pvc+G?m%C|0#O`~GZ#>bOVF124_||!* +z41HzKWboGffF<5z@J{@xH@9mpN`&0gIPU-9(|EH0Z~gJDbl%r`%M0-p{ZIM>`xoPS +zwtI0*-Du%HJw@YE4SXj^Zzj)Y_UxKdq5RE}uk?~Ob9)yu@vri2w!cm=`0Q>;m*=<~ +zjdPuu>)+$+NXknZ{>ayz_D^2iy}95RJPqFhd`|5A_&x$trMbV5OQKWP+ViM^$W*q? +zokniz8?3k0Pq~{Wyf0l9P27>XO&0pwGq+}Mp*Fu)Set4;)xXR7=$q%Qf2?;dwM~}; +zdG`YSOJVadV@(%w-Sg+&`y;dunhU=^Kh~&?4Zu_OZPpidK5^DnGQ{OirM%fI*8Sd- +z=J?~tM!w^$O=M%^bgg2(U}H;d%YnH3GSPX2?Ahtao0h<+HF(A7Cw${`OV~Jl%*0<(flzu_x`PsVR=M`!ac7B>h +z?&SA9T?IeqWMxb4mc-4m)J^HV1m|EDEhHF=S_utv-!yLwV$E`MwON +zw-rX)Y5wo`HU7tZ&j)m#`&J{5C +zd3LN0XeIx7elu;;?A}Kp4`bp@md4}(kBK*PZD5h2yrhxqUL{S91xEMV8P)w<2xqRf +zm&4&P|3JY=Be@gE_5b|*=7jS;0*4s;xp`Sju1w+_WGv7)B)5Uw>KVo-+x})zSZ<=L +zWp0RN_v9*x>yfU&@&9uLf|9HMecIDHbAgpZm(>QY3tA^BF@-gNRfD;6iLiFC2$e{`G+kZC|%>>ts`qUf|w81zmk?44(RH*Ef5tUZ9v8xNHzGKpIX= +zrj96<4uXvO_KDOM=aDe#{b{>ne% +z{iW;f9ISXm+$Y9hq5&zEE@4O;z9wLdS09TbSG99Jzy4O&LLo_9)8*+d?{qqk(SP7? +zEL-0kv}bDuu4x&5DET0BKwB=Jcx9?R{Xphm_CUBlFa?-$JdW(h?seDJr8ys)Q~nN; +zI`XpwPwk#{H;#sle`u_LSY3?IU2}mEP<2)@&3Jmly0^csbZWpR!5UPLtUFi^X0|yO +z>nfbqaH#MOILUM&GgYy^Iah3Cx?kzu@ziP$KQ#|uv+d?kz6Mo)BgnMhyzbg)%gw&r +z8yua{9uG5m%M5&dKl(*pAGde9OXcZt$0pU|5`2rKH*519H(}>Y`)ScFgo@%CR5481 +zR(=V6iuAikgYT7(o?REb(vGJZdmG_ty47pPb!P6|?~ADrx4g>7A$XVJUAKEXBjI@F +zHrGQoeY^3FeM6zE~P#cY}@)NeE!?k=c4vp0SUna;b{t)GC~ +zzw8y&rf;o5KM8%>uIr|Xn^VzP0wePNTx+^HvoG5;{EF8W^en4))&4Q#_j5?sX#@M% +z|2B81C{LMf`FJ**BvScw!9P{I?)suy8yx!c0XsKEcRrk-n}*=6f9|?#-<8f~Hp^4n +zUgz~2*Ed@IcLx5^A3A4#=)cb0)@H6#+gpHsiu8(YUhTV0Y?Az~iLGABc3dj^6Y_ii +zy1Ngg{VQk99%E!+OyFM~JR9(I@QjY4x%fd5)%V+>H9c>A^Mrk;^9?4J0@|52{#`A3 +z-_8j9N8n$oV~pe3nb(~&?Dj5er8xml?eo`NUCO3O_#kJEbI6yZ=@;|xr(ZxjvuWzP +zo%P7uysuRsUx%;fh3hsJ5`SwfDw`qyFQR^}J+~KsSG+y(`XoRS*FFy89fa#__zQui +zVcJw1vZF7duI;z?#?qzkJ&^=h%9ae{s=VvNg_0`I0p!YFy6*XJG7cLXifH4|>Y%Cr +zIAv}2?^P}{&^n+M+4se{q}bTOjZaHdcSPpPTJkIK*Eg=)xF#*T>^RV-Sk8(qM$D+p +zH6JR>ot=jwU&fyLvUR)H;>M3Pm#Vfnm#QYNeS1JqW!Z^b{ma)kmuy+e4>L+gyTr~| +zvJ~}n_!_+Z&=UVRAZp5T6xo%1S6`NM$aP1zF3S~YgV44r%i^z~&p^AI5~|H1Xmm@_Vx +zJ(l`2R#kt_dhr`072BrQkehjo +zcX{h96srTe>|4eo^r~Db@xt=+vJQr-Kh_>+{m{AY#!#s{;Jf3h4caMaP4F?6)iHLO +zK}`AVfwm6K#7~orp+$$1ISJR6(JJ@GY&n-Chd*2JM)jd_z`pz^G~Ka0a=_o^^ZQg?#!_ +z*B-D6jYhQn>Po?_a?_VqksE*O)sHPTUt>S&?OT^g3|a%UV40{7c0=oecBNy>2>gwQ +zobS?jtG$Ody9I|SK36gv3V6cV@;HfH{p0J_pTw1GksLbGFtG*LS$rZ;*(SeVXMTOh +z)t5&Da+B}ex;#3dorJbkdGta%4ed(HV*>uU!&hG(3&@>#;_Azze3t#Ucdc*sX>8c< +zjO_>2ob2epqO0(*5^Va;Hsp%mbM@sofZUPyZe5P!&?ca5RgN>zPCzTNeeLq|Km3#L +zTX$_Qb{*u#fj8|VaqU*^Bl2hHQ+>|5$LbA^%?6Fb*^hkR7VWANxzYDueR+%^SN1Dg +zm&Y+^bXQ=Fae`x_|B)LQ`R}bq +z7LYylsjDxO^1ncT`}EdjQVXpY+E!)K25l7Dm6l0A{C%If`t`^Za^s)9y7h?iyQ24v +zd3uJmBWUs7qD!I792vNI-TH$?{!;tx>vk^$JAaGzTt8rz*~X`#3Ho?$ee<~1Im8|$ +z@~%0!cYtGiISyuiUWfNM(x>x#Cj)I){c8aEs^7$3#YskX +zroh_4{C39^U~N83wuc3<7+8a&i=l%ZNN76&6W)8hm9R~-_^+^+{8s)w%2y>=2bjs1 +zY$#5A3fZXYp$$Ph&9l}O7>3OG4acrw;;1OEUGT*x^63ie1#1srgJ5l7{%;xsi~0C8 +zULFH$0z1sJ^WI#sbLLxhJO_OQ`nsLF2kk;bd8ESBGy4&Dh6|z+d!xtfOricDEQ` +zJ~E#y3Fkd??Ox1Lczb@|nRhSI=2VyS@STP)?zH=T*sU>GYfB2_1MNS%{UiRYt89wD +z$@l&NwhEpp%eodUZ%&Bv{3bjkjs11-F2cKD({I8Ii6Pls8K8mW5nr(zn^HIY=|5r) +zxBN??*7RP^_qQZ&X45uxQ!I01wj!FlCFs6w{EEhrE&9^>=Bn1?v0YOgZBKu#^b21t +z&HZI*;xE{6`}5NDH#m>{XQkQM()Q$u(&4X{hJU~GM+L4$DwAc>nK{nf&$GY3zS7+z +z^9~9=Y7CMplghtly!`6AJ^Q#-dA~Pr2adse=xfwtApJHs{Rb_t#+6=p=ipTzGVMPX +z_RgfFp{+tY7D&fGu4w$3hOhtY&i8P3(fBrESM}ZpkH(rs_?l)N9fZFny9(C+XRHfs +zncA_-*hPX*1d_m=#9~<7; +zoGfq7To=vKX}G|cqlJa~i{3Se?ATxD-z97eY&3u!0~-M=hOS?Pf3sj|FlRjR#^Oh8 +zksF?6cvj%?jhkk?cFgmpU6=d~`tTfmUJ3i^I~B@%pR_s~3wmz@{HNd_cln)j^lq$t +z@pQox{~NE*+Of{Nz0i)M1Mn=uQ>6JbwriqgU+UZ3hdf`B`Bq6w?o>(QJ0;1#D+zzv +z->=kmW{{hnUw6+1bhF29_q_9a<*6MXDJ*PL|Hw6d$N5g{Gecij6i8EGUJS6xzh%6H +z&zV1)np4z+QT;9KSIDiAhQ>z|ivb%v!RHd!WI{duy3yFt0sqMb&kkhyW4g!y +z{&e^Qu4P(z8i4oMKhdY`_!!@3<^ZNJZE<3jHV)l^=u-OT8RXW!OJA^ZdWWgUH@Tkz +zkNB40Tl{DGR)Eio#Q=};Tr$skdeN)z2(Hp98%iiw{B~c3E6?@tE_{!1S!rHkO}v%A +z#bM+|zQ4XXn*UaudRz6Si5;(JWg;z +z>Do8@r!>JDEMbexl1^|$%nAF(E| +za=q+`B+FV9+b^n(jaY71W=HU163vxe$So~FxQ=7K#7nR;my)}t=4{8hco%z?AvMT;N)^jV= +zOEH_+YRrLvsadG8r~&% +zr<`=%Z+fj;Uyd)2(w%{~=iKGft%G+N-jnd2wt8lqPRGdNm{QoSVN!O7Bs2b-`aeZ^ +zTp)eBe>Fl}ChX_CIpC4rmD>|bU7xvbcxS-xy^(jtkz3qY-&`!=4}6VxM3bMvuj;d* +zEWxpcKN-r6g;JjmrAI@VPldQ8rl7N{&5R&_?`*r~QIWir+Wq +zcy$0A;a>xMlknBqd@6<#v6S;c15}1x@XVH7*jyG5zJZ*9x-*)Lq;GG{-Icl{bDMVk +z!$XB-pfVgquD|?(J5I75OJ5($RSe5DusN|OxjULFCni?*I?vVH3#DPsxt&6OVfO{A +z%eeEEjnSXD#^=D;<{Sr6UQ7Og`FaoKWZMXL!6f&@5;t(Uo^GDuhCOrnOreETa!tsk +zD=uuFwB>*==I{-z^2L;P-;&;&xv@E05iUF;r@HD#uDbGqx8_w{rNJU#Y6nhTd1Jv* +zXfbF_d77!m2!Ee|b_m+EXw(@~mYKTV>P+Glz$@@Heqh<2`I0_D9AwpZ(Lb_YLUvT+ +zDL!eQJDhJ-sPC+Sujdx8PUcw?au>R@h)M6wRy4DSi4{ykrk!*nH+Sm=t1~Myw2k@p +zDp$YIcMrl-Q+2`G8mup6yYy=H-3e%2(B^oS?tzCV?aYY)^H_dG`H-(JPa(683??vr +z6ERP-<+;846?9U;Pjw_c9Q5x{nU}Gs8@ZkKDmks`qnuqQgmCHxLi}=|U81q<#hp*G +zZOFzV7u>U8_)=zRKXRueZk(dn;z^7%Wnjdx{dN%9nY%A|@lf>LV_+x1oONUOJ`*R0 +z%i!F|$$f=oZTdelP0z~r=LqR6fi;4S@@)FEtMhf)8c-W3{wLlKPrLo@CJe3S2E5cY +zd53<@=e6)H-9w&iTjyvsW&uwMT!oQcV4Ds@>3;yo=E_l92=yr^@Sh4YCll|8_ +zjRmjTSQ`GK+6$WlHvQFbG+Wb}yWbwsi>2?&+#4N!HfOl~gQm*<1afW9yI}7&igMN| +zsuNE6^G=*~igDP9gHDeZ6q?Gc=)3GU)aA=e?Xd!^1guGPJ12X6tqxi(v}w^aKDy=E +zW6M+D-2u-@csgu(s+^*jLDHqoNmhZoe34*nISs;GTn`eW&->unWnGmfYUd4Vm5U0d>03zMU%D6=as{FKn*Z@okB1!PeGX +zd*XrQ!E{?Rv%fWUV7Mh*=mMg$jr=qA%@<#A@2y-VuF-R|&o=&f_a|zT&q>{vzBg0D +zfww{zZL=osLU!pTjB&O;M~IPeYs>JRi3sA+dn%NC5|^i;5Lc2E +zyr&obuI7v1qqdlaHUTZdvwnK_1lTdKCINx@`#7|DXvL!OQ(vA3n**B^aEbX_>(h1k +zI-<_}&A88?8n9ITG8KU0hUe$r^xhU()>=|Gg$s8lRnBY3)x-EOoK=1eU>#unYTLH_ygO1<51r7bAARO}&^HXg*Vu7kv)t~>jTE;e_GKHJhhN&3 +zY)ZW%*PMQN=4FB7nP#k^G>bm3^Q6)i*h10FAlYoORas)IjTiR&VP_^RQWO_qn>cc=#8G +z@9>+wF??2WQ_Up;xk_x4URN+}DJ4$6(k@7B{Q}B$zGs`pIXzqrI<@R_duk=0Z@Wc*zdPSTC0oMuPH{v^N +zCcelL{rd{|+Ta^~9No=+OE;gD!JAEAR}$Gfmp6cN|ve|YBMX;j+sk4l!wS<@IM +zbWMcu*bEpZ^bKpsExgwmqm;H{5Mz2vY|Dp2j61eY)kXCWS&zK$f*S{ry3k#W&ie83 +zyc(lC#o;~Nhc4@`Bcf@%w8}9BD@qF?-4eTpcZLh&plD1QLT>N_yn|=`gpGrZfT`W+ +zr~glZ9RusO<*B^0OvYG6+>{5MJV)SLfN%L%F4*-v^BMb0xazvW-E3dofG6JXwF!sk +zpwpM!Jtxas^CQxOcZRfSKMt=OFshKZ1K$2$y)xbbc*{O`d0y4qF?c87MWr=uf_AQ& +z%`x}@y|qO +zP3$PFIlD%QA=m$r3x)fkW>2Bp8}ahD7~4MEk4*hXFSzG!@y|p4bOpGxwps`&n!H(1JBH}4A0Ta@Ra@NI6JO?8X6{GSZ+4N{bU6*oz(#sNn_~~7u-9zo0_#l$Nhq`mRGe{R8{1H$qN0Lk +z8_p66dGGUF_i2+z#gEPR|9{_;-><#S$9>MZ&vowe`FzzDT+loApPqI8Fo)92ZRBx8 +zzR!?eU`RK<%Wt_;kYSrBtcAkd2`+thFq;S?A!z8asaa$;Ey^PDUgDbGz +zwa3j$lBv04SEd?z+t(-LSZP1n$sdT$e*vGIE0V|W7kPS~ccljd)FZFxROp@}DKbe0Og{_V5!hHwimz>Y1u+%-2Ke_Gx +z+UmGOE?#6EmQdXCdv~d4i30R+1hufdAY)gap7T9DyQ%Fo?UW{Y-=|L_>zJf8lkcZ` +z^Vzrk;qGvuee%8z^img(Z-#=XzlFbzLc!lKDSGXD6Q^C)a#s+i5)h*)H7EKz)MFANYHw{D_jh +zGs3)4NwOUzyLmr(E+)C)&wKVz+1He_FJ0ODs1}l4-oAfX$;WzI}z+XAzh2@9ZM-n%2t!?R+3GU +z+m_}1Bc;i?o-WI8CfT;wC-W)gI!P|@i%-^5^0SrX%6{3q->;;wE(#k>Vf=h;AnTd= +zuzRX}JgK25_aY0uuda8EL0_y#zqj6}`DATx-m=flp|ENS+evP_u08J*urGpV-y-M{Rofia$U~XcO>UqD9-#fjq5zV +zp?&NF^c>D5NA3@3Kitu4Lo)qP3iDIgr%7K$ve*A6H~oAH3sG2z@{;ok^&!=HaMZ+o +zNS0MYvYS4ItZetSBs=!E`?upQB$p()ge)J|fo%KC9}`?D>OYU}KfiL4^LKu7ev->M +zBh#pfJB3g0KjMO{Oq!R@h1kn@eGHvcftjY-L{9MhZ*i +zg(YQvkM*WCDUY2LRzqR-dNk|)sX08SOPR8NP=6(v5V?uF-f^6-+(`W=lZ^HFuAckM +zrOti|n@?ejU~?8dBWr*Df*wGrFF2=nPW=wgu5wMboYJ(!d&UNf-r^)LLD-Mh%C|br +z%{l;=<*p_9xli=knhe`OVTqs0niVG3+GP|b^YhDu +z@;o@}-h3|wO``Z_isvyO*Wc|uU+=SZy{8E%doiW4e%GtFwB-m~)McN@u7KG|CrlfpV>eiXKX+_H^u?$h%rc_C$zB-8l`GExWEzvz0x`kuL7 +z-v3Bj6#2ZaZ4mY~aVb|$atV^_B)9BON^U`xoE($pkX-dsGfC$a!n-T!W0*$xJevG>Fm9VN&Ys9+e&c(8At6wXa4-Y0=!h$q~MJtV?N!t +zjNSeuGoNJSm?M9(tzA25KT2Ui8G!3OwZn^$m+0R#d2VIA3r0dG`{g3+FjWFFJ*kHd~+Sk-z?DHA7 +z6_kg6Bejc*@}TQl#uF`%^tkr!!cSDR9OxX#k< +zR#M#Dzwud?Vr{cm^)u*l%DUQkFJuqEjzEbE$seJvg=89DU~6Aa@_2sFz>dW>xO=Mw?h>^+A7bi +z&dM4!v8LZn^1*j@WyY2ATSI;gQm(GL~0MB +zH-6{vC+oV1(rtF8@vQ*)d{|}Epj!EkEMMKgdb)Z(prL`8tAW^7?QieLdo1Wp1W)bNZ*%n3baMi{M*0zWPJMhg3EWu|J5@ +zQ055bmMO=((p|Kl8JJej@>o+E=v``jYDSO#HhQOc6qfsSwX(k|1?qBN01((1g~PY)!^xAnC4r%gBB +zw2*surL@lwrD;Djt-igSphx>2qIXjL%&2QK>K`;{lIy)@Cda}U$#)-?R`+sy?DzYq +z?XeGYmgH2A88 +zVt5+Q(a3w)rqYdTm2@B5RNT5ox3bY~Z1Scyc@tai(W~sAb11!gM7rnO<{!J4a2ghx +za$F0M?0k}yb(24756u*|gu*Ii0PktkwP`80mg3teK8AR2g?+A1vqH~_0`}!wNX{CW +zR%ci8nnf$!_#;WG7{Kq+k@~u5!?lg%wsC&;du-@}c+aIkUh_&>FUhu#N@tRN$>I?T +z`&!L>k`0XBfBDNv&OIiru2*_1?04R39zNsFskJ9o)_uiSf5Md3Nm-Sb +zcF|6<)=_Dk=VM*N-&eqy+D3{ON2fDoIO~${d$-@vq@JGdxn0mU0L+PEFJ0d)PpkLK +z$ZsRc+jSc0X;XP;ll<5peUc$}c_#b%BuZB~KCRxb5RlIqsYi_HUgXwddbNVu+sn#I +zo)%M@FHDyP>APw51L;xWh50>po#e0JAjIkVlM27kw#naJ{y=IaROUbE` +zUQs2FKyn^^llAtJ{Lqtn+8WR3(zOryQYQO#T6q_9Wf_YoP0PvDUu7BUy?0aVopjPF +zuft`(2G(8+Hj{kW=t`-n41bR)$DC@xBF8aL#Ah;CuX-4CTm +zW;@BW<;Z-E2L;$ssc?uTr=-={EUg)cldN0bTT61^MIw2wqBNUMP50~w*L-7-3JlX+$(7sSf9kIc*xbZ +zkGbkPUE$xlXerWjgl(_qw^N$X6rO8vP2Ijvlr9U~9lT<|OdI9cQD!*AdLOMHpiio> +zqW0>_)@$k((*VlC_84c8+~ldf^N~HqVm|Vz?+8hKt4VG-$u%Rtq|?`MVrA>(+OPWR +zPOd-67oOxeJG+YZ`gR4SNlp87oJd>QNb;U4l9y``;>7edeVXvBM$EnZzl#0qt+6$=AnI3tW;l4BIw3iDc)@N`LHod}Wl+ +z9Ez(}ab&+a`(KJ%s^a9iLe@KE!W0)#ae3+5C~jpRaqB6rqmQ^G#ck{(uAAbLDlSi# +zGN(iAq&SP}!+p>`t&?pzk>bkENN2X>}C3ZKkpDam@5GRNTG-lxmB7K)qGN8DP9Thd2dg5p+CTovUZ*G^<#_WRjP +z@@}WN1jPkl-=1l5J#KlSfde2S*BsV#f&X}0Dvf8kBa(CR`+lG@U?`BFf_SQ7M%SH3N{mlLKtf!w* +z4eLvL^)IEg2})aB!|Tb463;X`TatOMpvh-6h0E_-xaQMGI_3V2p3$z94{V<<@A0oa +zNZ#b1zmJu6IJ(dw=GLXvGa2&QJei`sNDDiB^!DfFIYXDt*<4DqsUh9-OrUJj#S~^W +z?t5OVp}0j9H;d%hZfskST(6|K7K)3@IJzcAH>%OyYOVcyKI=)r(uOz6{F}I)==