[Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair

Aleksandar Markovic posted 76 patches 7 years, 3 months ago
There is a newer version of this series
[Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Aleksandar Markovic 7 years, 3 months ago
From: Aleksandar Rikalo <arikalo@wavecomp.com>

Implement nanoMIPS LLWP and SCWP instruction pair.

Signed-off-by: Dimitrije Nikolic <dnikolic@wavecomp.com>
Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
Signed-off-by: Stefan Markovic <smarkovic@wavecomp.com>
---
 linux-user/mips/cpu_loop.c | 25 +++++++++++---
 target/mips/cpu.h          |  2 ++
 target/mips/helper.h       |  2 ++
 target/mips/op_helper.c    | 35 ++++++++++++++++++++
 target/mips/translate.c    | 81 ++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 140 insertions(+), 5 deletions(-)

diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c
index 084ad6a..1d3dc9e 100644
--- a/linux-user/mips/cpu_loop.c
+++ b/linux-user/mips/cpu_loop.c
@@ -397,10 +397,13 @@ static int do_store_exclusive(CPUMIPSState *env)
     target_ulong addr;
     target_ulong page_addr;
     target_ulong val;
+    uint32_t val_wp = 0;
+    uint32_t llnewval_wp = 0;
     int flags;
     int segv = 0;
     int reg;
     int d;
+    int wp;
 
     addr = env->lladdr;
     page_addr = addr & TARGET_PAGE_MASK;
@@ -412,19 +415,31 @@ static int do_store_exclusive(CPUMIPSState *env)
     } else {
         reg = env->llreg & 0x1f;
         d = (env->llreg & 0x20) != 0;
-        if (d) {
-            segv = get_user_s64(val, addr);
+        wp = (env->llreg & 0x40) != 0;
+        if (!wp) {
+            if (d) {
+                segv = get_user_s64(val, addr);
+            } else {
+                segv = get_user_s32(val, addr);
+            }
         } else {
             segv = get_user_s32(val, addr);
+            segv |= get_user_s32(val_wp, addr);
+            llnewval_wp = env->llnewval_wp;
         }
         if (!segv) {
-            if (val != env->llval) {
+            if (val != env->llval && val_wp == llnewval_wp) {
                 env->active_tc.gpr[reg] = 0;
             } else {
-                if (d) {
-                    segv = put_user_u64(env->llnewval, addr);
+                if (!wp) {
+                    if (d) {
+                        segv = put_user_u64(env->llnewval, addr);
+                    } else {
+                        segv = put_user_u32(env->llnewval, addr);
+                    }
                 } else {
                     segv = put_user_u32(env->llnewval, addr);
+                    segv |= put_user_u32(env->llnewval_wp, addr + 4);
                 }
                 if (!segv) {
                     env->active_tc.gpr[reg] = 1;
diff --git a/target/mips/cpu.h b/target/mips/cpu.h
index 009202c..28af4d1 100644
--- a/target/mips/cpu.h
+++ b/target/mips/cpu.h
@@ -506,6 +506,8 @@ struct CPUMIPSState {
     uint64_t lladdr;
     target_ulong llval;
     target_ulong llnewval;
+    uint64_t llval_wp;
+    uint32_t llnewval_wp;
     target_ulong llreg;
     uint64_t CP0_LLAddr_rw_bitmask;
     int CP0_LLAddr_shift;
diff --git a/target/mips/helper.h b/target/mips/helper.h
index b2a780a..deca307 100644
--- a/target/mips/helper.h
+++ b/target/mips/helper.h
@@ -14,6 +14,8 @@ DEF_HELPER_4(swr, void, env, tl, tl, int)
 #ifndef CONFIG_USER_ONLY
 DEF_HELPER_3(ll, tl, env, tl, int)
 DEF_HELPER_4(sc, tl, env, tl, tl, int)
+DEF_HELPER_5(llwp, void, env, tl, i32, i32, i32)
+DEF_HELPER_4(scwp, tl, env, tl, i64, int)
 #ifdef TARGET_MIPS64
 DEF_HELPER_3(lld, tl, env, tl, int)
 DEF_HELPER_4(scd, tl, env, tl, tl, int)
diff --git a/target/mips/op_helper.c b/target/mips/op_helper.c
index b3eef9f..cb83b6d 100644
--- a/target/mips/op_helper.c
+++ b/target/mips/op_helper.c
@@ -380,6 +380,19 @@ HELPER_LD_ATOMIC(lld, ld, 0x7)
 #endif
 #undef HELPER_LD_ATOMIC
 
+void helper_llwp(CPUMIPSState *env, target_ulong addr, uint32_t reg1,
+                 uint32_t reg2, uint32_t mem_idx)
+{
+    if (addr & 0x7) {
+        env->CP0_BadVAddr = addr;
+        do_raise_exception(env, EXCP_AdEL, GETPC());
+    }
+    env->lladdr = do_translate_address(env, addr, 0, GETPC());
+    env->active_tc.gpr[reg1] = env->llval = do_lw(env, addr, mem_idx, GETPC());
+    env->active_tc.gpr[reg2] = env->llval_wp = do_lw(env, addr + 4, mem_idx,
+                                                     GETPC());
+}
+
 #define HELPER_ST_ATOMIC(name, ld_insn, st_insn, almask)                      \
 target_ulong helper_##name(CPUMIPSState *env, target_ulong arg1,              \
                            target_ulong arg2, int mem_idx)                    \
@@ -406,6 +419,28 @@ HELPER_ST_ATOMIC(sc, lw, sw, 0x3)
 HELPER_ST_ATOMIC(scd, ld, sd, 0x7)
 #endif
 #undef HELPER_ST_ATOMIC
+
+target_ulong helper_scwp(CPUMIPSState *env, target_ulong addr,
+                         uint64_t data, int mem_idx)
+{
+    uint32_t tmp;
+    uint32_t tmp2;
+
+    if (addr & 0x7) {
+        env->CP0_BadVAddr = addr;
+        do_raise_exception(env, EXCP_AdES, GETPC());
+    }
+    if (do_translate_address(env, addr, 1, GETPC()) == env->lladdr) {
+        tmp = do_lw(env, addr, mem_idx, GETPC());
+        tmp2 = do_lw(env, addr + 4, mem_idx, GETPC());
+        if (tmp == env->llval && tmp2 == env->llval_wp) {
+            do_sw(env, addr, (uint32_t) data, mem_idx, GETPC());
+            do_sw(env, addr + 4, (uint32_t) *(&data + 4), mem_idx, GETPC());
+            return 1;
+        }
+    }
+    return 0;
+}
 #endif
 
 #ifdef TARGET_WORDS_BIGENDIAN
diff --git a/target/mips/translate.c b/target/mips/translate.c
index ea6fdeb..c4b6a26 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1459,6 +1459,7 @@ typedef struct DisasContext {
     bool nan2008;
     bool abs2008;
     bool has_isa_mode;
+    bool xnp;
 } DisasContext;
 
 #define DISAS_STOP       DISAS_TARGET_0
@@ -2348,6 +2349,31 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
     tcg_temp_free(t0);
 }
 
+static void gen_llwp(DisasContext *ctx, uint32_t base, int16_t offset,
+                    uint32_t reg1, uint32_t reg2)
+{
+    TCGv taddr = tcg_temp_new();
+    TCGv_i64 tval = tcg_temp_new_i64();
+    TCGv tmp1 = tcg_temp_new();
+    TCGv tmp2 = tcg_temp_new();
+
+    gen_base_offset_addr(ctx, taddr, base, offset);
+    tcg_gen_qemu_ld64(tval, taddr, ctx->mem_idx);
+#ifdef TARGET_WORDS_BIGENDIAN
+    tcg_gen_extr_i64_tl(tmp2, tmp1, tval);
+#else
+    tcg_gen_extr_i64_tl(tmp1, tmp2, tval);
+#endif
+    gen_store_gpr(tmp1, reg1);
+    tcg_temp_free(tmp1);
+    gen_store_gpr(tmp2, reg2);
+    tcg_temp_free(tmp2);
+    tcg_gen_st_i64(tval, cpu_env, offsetof(CPUMIPSState, llval_wp));
+    tcg_temp_free_i64(tval);
+    tcg_gen_st_tl(taddr, cpu_env, offsetof(CPUMIPSState, lladdr));
+    tcg_temp_free(taddr);
+}
+
 /* Store */
 static void gen_st (DisasContext *ctx, uint32_t opc, int rt,
                     int base, int offset)
@@ -2444,6 +2470,48 @@ static void gen_st_cond (DisasContext *ctx, uint32_t opc, int rt,
     tcg_temp_free(t0);
 }
 
+static void gen_scwp(DisasContext *ctx, uint32_t base, int16_t offset,
+                    uint32_t reg1, uint32_t reg2)
+{
+    TCGv taddr = tcg_temp_new();
+    TCGv lladdr = tcg_temp_new();
+    TCGv_i64 tval = tcg_temp_new_i64();
+    TCGv_i64 llval = tcg_temp_new_i64();
+    TCGv_i64 val = tcg_temp_new_i64();
+    TCGv tmp1 = tcg_temp_new();
+    TCGv tmp2 = tcg_temp_new();
+    TCGLabel *lab_fail = gen_new_label();
+    TCGLabel *lab_done = gen_new_label();
+
+    gen_base_offset_addr(ctx, taddr, base, offset);
+
+    tcg_gen_ld_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
+    tcg_gen_brcond_tl(TCG_COND_NE, taddr, lladdr, lab_fail);
+
+    gen_load_gpr(tmp1, reg1);
+    gen_load_gpr(tmp2, reg2);
+
+#ifdef TARGET_WORDS_BIGENDIAN
+    tcg_gen_concat_tl_i64(tval, tmp2, tmp1);
+#else
+    tcg_gen_concat_tl_i64(tval, tmp1, tmp2);
+#endif
+
+    tcg_gen_ld_i64(llval, cpu_env, offsetof(CPUMIPSState, llval_wp));
+    tcg_gen_atomic_cmpxchg_i64(val, taddr, llval, tval,
+                               ctx->mem_idx, MO_64);
+    tcg_gen_movi_tl(cpu_gpr[reg1], 1);
+    tcg_gen_brcond_i64(TCG_COND_EQ, val, llval, lab_done);
+
+    gen_set_label(lab_fail);
+
+    tcg_gen_movi_tl(cpu_gpr[reg1], 0);
+
+    gen_set_label(lab_done);
+    tcg_gen_movi_tl(lladdr, -1);
+    tcg_gen_st_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
+}
+
 /* Load and store */
 static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft,
                           TCGv t0)
@@ -19365,6 +19433,12 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
                         gen_ld(ctx, OPC_LL, rt, rs, s);
                         break;
                     case NM_LLWP:
+                        if (ctx->xnp) {
+                            generate_exception_end(ctx, EXCP_RI);
+                        } else {
+                            gen_llwp(ctx, rs, 0, rt,
+                                     extract32(ctx->opcode, 3, 5));
+                        }
                         break;
                     }
                     break;
@@ -19374,6 +19448,12 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
                         gen_st_cond(ctx, OPC_SC, rt, rs, s);
                         break;
                     case NM_SCWP:
+                        if (ctx->xnp) {
+                            generate_exception_end(ctx, EXCP_RI);
+                        } else {
+                            gen_scwp(ctx, rs, 0, rt,
+                                     extract32(ctx->opcode, 3, 5));
+                        }
                         break;
                     }
                     break;
@@ -24683,6 +24763,7 @@ static void mips_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
     ctx->nan2008 = (env->active_fpu.fcr31 >> FCR31_NAN2008) & 1;
     ctx->abs2008 = (env->active_fpu.fcr31 >> FCR31_ABS2008) & 1;
     ctx->has_isa_mode = ((env->CP0_Config3 >> CP0C3_MMAR) & 0x7) < 3;
+    ctx->xnp = (env->CP0_Config5 >> CP0C5_XNP) & 1;
     restore_cpu_state(env, ctx);
 #ifdef CONFIG_USER_ONLY
         ctx->mem_idx = MIPS_HFLAG_UM;
-- 
2.7.4


Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Richard Henderson 7 years, 3 months ago
On 07/30/2018 12:12 PM, Aleksandar Markovic wrote:
> diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c
> index 084ad6a..1d3dc9e 100644
> --- a/linux-user/mips/cpu_loop.c
> +++ b/linux-user/mips/cpu_loop.c
> @@ -397,10 +397,13 @@ static int do_store_exclusive(CPUMIPSState *env)
>      target_ulong addr;
>      target_ulong page_addr;
>      target_ulong val;
> +    uint32_t val_wp = 0;
> +    uint32_t llnewval_wp = 0;
>      int flags;
>      int segv = 0;
>      int reg;
>      int d;
> +    int wp;
>  
>      addr = env->lladdr;
>      page_addr = addr & TARGET_PAGE_MASK;
> @@ -412,19 +415,31 @@ static int do_store_exclusive(CPUMIPSState *env)
>      } else {
>          reg = env->llreg & 0x1f;
>          d = (env->llreg & 0x20) != 0;
> -        if (d) {
> -            segv = get_user_s64(val, addr);
> +        wp = (env->llreg & 0x40) != 0;
> +        if (!wp) {
> +            if (d) {
> +                segv = get_user_s64(val, addr);
> +            } else {
> +                segv = get_user_s32(val, addr);
> +            }
>          } else {
>              segv = get_user_s32(val, addr);
> +            segv |= get_user_s32(val_wp, addr);
> +            llnewval_wp = env->llnewval_wp;
>          }
>          if (!segv) {
> -            if (val != env->llval) {
> +            if (val != env->llval && val_wp == llnewval_wp) {
>                  env->active_tc.gpr[reg] = 0;
>              } else {
> -                if (d) {
> -                    segv = put_user_u64(env->llnewval, addr);
> +                if (!wp) {
> +                    if (d) {
> +                        segv = put_user_u64(env->llnewval, addr);
> +                    } else {
> +                        segv = put_user_u32(env->llnewval, addr);
> +                    }
>                  } else {
>                      segv = put_user_u32(env->llnewval, addr);
> +                    segv |= put_user_u32(env->llnewval_wp, addr + 4);
>                  }
>                  if (!segv) {
>                      env->active_tc.gpr[reg] = 1;
...
> diff --git a/target/mips/helper.h b/target/mips/helper.h
> index b2a780a..deca307 100644
> --- a/target/mips/helper.h
> +++ b/target/mips/helper.h
> @@ -14,6 +14,8 @@ DEF_HELPER_4(swr, void, env, tl, tl, int)
>  #ifndef CONFIG_USER_ONLY
>  DEF_HELPER_3(ll, tl, env, tl, int)
>  DEF_HELPER_4(sc, tl, env, tl, tl, int)
> +DEF_HELPER_5(llwp, void, env, tl, i32, i32, i32)
> +DEF_HELPER_4(scwp, tl, env, tl, i64, int)
>  #ifdef TARGET_MIPS64
>  DEF_HELPER_3(lld, tl, env, tl, int)
>  DEF_HELPER_4(scd, tl, env, tl, tl, int)
> diff --git a/target/mips/op_helper.c b/target/mips/op_helper.c
> index b3eef9f..cb83b6d 100644
> --- a/target/mips/op_helper.c
> +++ b/target/mips/op_helper.c
> @@ -380,6 +380,19 @@ HELPER_LD_ATOMIC(lld, ld, 0x7)
>  #endif
>  #undef HELPER_LD_ATOMIC
>  
> +void helper_llwp(CPUMIPSState *env, target_ulong addr, uint32_t reg1,
> +                 uint32_t reg2, uint32_t mem_idx)
> +{
> +    if (addr & 0x7) {
> +        env->CP0_BadVAddr = addr;
> +        do_raise_exception(env, EXCP_AdEL, GETPC());
> +    }
> +    env->lladdr = do_translate_address(env, addr, 0, GETPC());
> +    env->active_tc.gpr[reg1] = env->llval = do_lw(env, addr, mem_idx, GETPC());
> +    env->active_tc.gpr[reg2] = env->llval_wp = do_lw(env, addr + 4, mem_idx,
> +                                                     GETPC());
> +}
> +
>  #define HELPER_ST_ATOMIC(name, ld_insn, st_insn, almask)                      \
>  target_ulong helper_##name(CPUMIPSState *env, target_ulong arg1,              \
>                             target_ulong arg2, int mem_idx)                    \
> @@ -406,6 +419,28 @@ HELPER_ST_ATOMIC(sc, lw, sw, 0x3)
>  HELPER_ST_ATOMIC(scd, ld, sd, 0x7)
>  #endif
>  #undef HELPER_ST_ATOMIC
> +
> +target_ulong helper_scwp(CPUMIPSState *env, target_ulong addr,
> +                         uint64_t data, int mem_idx)
> +{
> +    uint32_t tmp;
> +    uint32_t tmp2;
> +
> +    if (addr & 0x7) {
> +        env->CP0_BadVAddr = addr;
> +        do_raise_exception(env, EXCP_AdES, GETPC());
> +    }
> +    if (do_translate_address(env, addr, 1, GETPC()) == env->lladdr) {
> +        tmp = do_lw(env, addr, mem_idx, GETPC());
> +        tmp2 = do_lw(env, addr + 4, mem_idx, GETPC());
> +        if (tmp == env->llval && tmp2 == env->llval_wp) {
> +            do_sw(env, addr, (uint32_t) data, mem_idx, GETPC());
> +            do_sw(env, addr + 4, (uint32_t) *(&data + 4), mem_idx, GETPC());
> +            return 1;
> +        }
> +    }
> +    return 0;
> +}
>  #endif
>  
>  #ifdef TARGET_WORDS_BIGENDIAN

All of this should be unused code.


> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index ea6fdeb..c4b6a26 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1459,6 +1459,7 @@ typedef struct DisasContext {
>      bool nan2008;
>      bool abs2008;
>      bool has_isa_mode;
> +    bool xnp;
>  } DisasContext;
>  
>  #define DISAS_STOP       DISAS_TARGET_0
> @@ -2348,6 +2349,31 @@ static void gen_ld(DisasContext *ctx, uint32_t opc,
>      tcg_temp_free(t0);
>  }
>  
> +static void gen_llwp(DisasContext *ctx, uint32_t base, int16_t offset,
> +                    uint32_t reg1, uint32_t reg2)
> +{
> +    TCGv taddr = tcg_temp_new();
> +    TCGv_i64 tval = tcg_temp_new_i64();
> +    TCGv tmp1 = tcg_temp_new();
> +    TCGv tmp2 = tcg_temp_new();
> +
> +    gen_base_offset_addr(ctx, taddr, base, offset);
> +    tcg_gen_qemu_ld64(tval, taddr, ctx->mem_idx);
> +#ifdef TARGET_WORDS_BIGENDIAN
> +    tcg_gen_extr_i64_tl(tmp2, tmp1, tval);
> +#else
> +    tcg_gen_extr_i64_tl(tmp1, tmp2, tval);
> +#endif
> +    gen_store_gpr(tmp1, reg1);
> +    tcg_temp_free(tmp1);
> +    gen_store_gpr(tmp2, reg2);
> +    tcg_temp_free(tmp2);
> +    tcg_gen_st_i64(tval, cpu_env, offsetof(CPUMIPSState, llval_wp));
> +    tcg_temp_free_i64(tval);
> +    tcg_gen_st_tl(taddr, cpu_env, offsetof(CPUMIPSState, lladdr));
> +    tcg_temp_free(taddr);
> +}
> +
>  /* Store */
>  static void gen_st (DisasContext *ctx, uint32_t opc, int rt,
>                      int base, int offset)
> @@ -2444,6 +2470,48 @@ static void gen_st_cond (DisasContext *ctx, uint32_t opc, int rt,
>      tcg_temp_free(t0);
>  }
>  
> +static void gen_scwp(DisasContext *ctx, uint32_t base, int16_t offset,
> +                    uint32_t reg1, uint32_t reg2)
> +{
> +    TCGv taddr = tcg_temp_new();
> +    TCGv lladdr = tcg_temp_new();
> +    TCGv_i64 tval = tcg_temp_new_i64();
> +    TCGv_i64 llval = tcg_temp_new_i64();
> +    TCGv_i64 val = tcg_temp_new_i64();
> +    TCGv tmp1 = tcg_temp_new();
> +    TCGv tmp2 = tcg_temp_new();
> +    TCGLabel *lab_fail = gen_new_label();
> +    TCGLabel *lab_done = gen_new_label();
> +
> +    gen_base_offset_addr(ctx, taddr, base, offset);
> +
> +    tcg_gen_ld_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
> +    tcg_gen_brcond_tl(TCG_COND_NE, taddr, lladdr, lab_fail);
> +
> +    gen_load_gpr(tmp1, reg1);
> +    gen_load_gpr(tmp2, reg2);
> +
> +#ifdef TARGET_WORDS_BIGENDIAN
> +    tcg_gen_concat_tl_i64(tval, tmp2, tmp1);
> +#else
> +    tcg_gen_concat_tl_i64(tval, tmp1, tmp2);
> +#endif
> +
> +    tcg_gen_ld_i64(llval, cpu_env, offsetof(CPUMIPSState, llval_wp));
> +    tcg_gen_atomic_cmpxchg_i64(val, taddr, llval, tval,
> +                               ctx->mem_idx, MO_64);
> +    tcg_gen_movi_tl(cpu_gpr[reg1], 1);
> +    tcg_gen_brcond_i64(TCG_COND_EQ, val, llval, lab_done);
> +
> +    gen_set_label(lab_fail);
> +
> +    tcg_gen_movi_tl(cpu_gpr[reg1], 0);
> +
> +    gen_set_label(lab_done);
> +    tcg_gen_movi_tl(lladdr, -1);
> +    tcg_gen_st_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
> +}

Because you have the implementation inline here.

And, two unprotected uses of cpu_gpr[reg1].


r~

Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Aleksandar Markovic 7 years, 3 months ago
Hi, Richard,

We are going to remove obsoleted helpers, that was just an honest mistake made in a rush.

For unprotected access to gpr, we are going to insert if(reg1 != 0) in two places.

However, it looks there is a bigger problem now in SCWP. QEMU crashes with this message:

/qemu/tcg/tcg.c:2862: tcg fatal error

This happens in user mode only, system mode case runs fine.

the problem seems to appear as a consequence of using tcg_gen_brcond_*(().

Do you have any idea what are we doing wrong here?

> +static void gen_scwp(DisasContext *ctx, uint32_t base, int16_t offset,
> +                    uint32_t reg1, uint32_t reg2)
> +{
> +    TCGv taddr = tcg_temp_new();
> +    TCGv lladdr = tcg_temp_new();
> +    TCGv_i64 tval = tcg_temp_new_i64();
> +    TCGv_i64 llval = tcg_temp_new_i64();
> +    TCGv_i64 val = tcg_temp_new_i64();
> +    TCGv tmp1 = tcg_temp_new();
> +    TCGv tmp2 = tcg_temp_new();
> +    TCGLabel *lab_fail = gen_new_label();
> +    TCGLabel *lab_done = gen_new_label();
> +
> +    gen_base_offset_addr(ctx, taddr, base, offset);
> +
> +    tcg_gen_ld_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
> +    tcg_gen_brcond_tl(TCG_COND_NE, taddr, lladdr, lab_fail);
> +
> +    gen_load_gpr(tmp1, reg1);
> +    gen_load_gpr(tmp2, reg2);
> +
> +#ifdef TARGET_WORDS_BIGENDIAN
> +    tcg_gen_concat_tl_i64(tval, tmp2, tmp1);
> +#else
> +    tcg_gen_concat_tl_i64(tval, tmp1, tmp2);
> +#endif
> +
> +    tcg_gen_ld_i64(llval, cpu_env, offsetof(CPUMIPSState, llval_wp));
> +    tcg_gen_atomic_cmpxchg_i64(val, taddr, llval, tval,
> +                               ctx->mem_idx, MO_64);
> +    tcg_gen_movi_tl(cpu_gpr[reg1], 1);
> +    tcg_gen_brcond_i64(TCG_COND_EQ, val, llval, lab_done);
> +
> +    gen_set_label(lab_fail);
> +
> +    tcg_gen_movi_tl(cpu_gpr[reg1], 0);
> +
> +    gen_set_label(lab_done);
> +    tcg_gen_movi_tl(lladdr, -1);
> +    tcg_gen_st_tl(lladdr, cpu_env, offsetof(CPUMIPSState, lladdr));
> +}
> +

Regards,
Aleksandar
Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Richard Henderson 7 years, 3 months ago
On 08/02/2018 08:29 AM, Aleksandar Markovic wrote:
> Hi, Richard,
> 
> We are going to remove obsoleted helpers, that was just an honest mistake made in a rush.
> 
> For unprotected access to gpr, we are going to insert if(reg1 != 0) in two places.

Be careful that you do not eliminate side effects in the process.  This
includes things like check_dspr2, and any helper that sets overflow_flag or
carry_flag.

I cannot see how you will avoid that when adding only two if statements.


> However, it looks there is a bigger problem now in SCWP. QEMU crashes with this message:
> 
> /qemu/tcg/tcg.c:2862: tcg fatal error
> 
> This happens in user mode only, system mode case runs fine.
> 
> the problem seems to appear as a consequence of using tcg_gen_brcond_*(().
> 
> Do you have any idea what are we doing wrong here?

If you send me a binary that triggers this error, I'll look at it.


r~

Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Aleksandar Markovic 7 years, 3 months ago
> From: Richard Henderson <richard.henderson@linaro.org>
> Sent: Thursday, August 2, 2018 7:28 PM
> 
> On 08/02/2018 08:29 AM, Aleksandar Markovic wrote:
> > Hi, Richard,
> >
> > We are going to remove obsoleted helpers, that was just an honest mistake made in a rush.
> >
> > For unprotected access to gpr, we are going to insert if(reg1 != 0) in two places.
> 
> Be careful that you do not eliminate side effects in the process.  This
> includes things like check_dspr2, and any helper that sets overflow_flag or
> carry_flag.
> 
> I cannot see how you will avoid that when adding only two if statements.
> 

I was referring just to SCWP handler function. For DSP patches, for v6, we worked assiduously to eliminate all unprotected accesses to gpr.

> 
> > However, it looks there is a bigger problem now in SCWP. QEMU crashes with this message:
> >
> > /qemu/tcg/tcg.c:2862: tcg fatal error
> >
> > This happens in user mode only, system mode case runs fine.
> >
> > the problem seems to appear as a consequence of using tcg_gen_brcond_*(().
> >
> > Do you have any idea what are we doing wrong here?
> 
> If you send me a binary that triggers this error, I'll look at it.

Will do it tomorrow morning.

Aleksandar
Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Aleksandar Rikalo 7 years, 3 months ago
Hi, Richard,


The nanoMIPS binary that triggers this error is in the attachment.

You can find source code also.


Best Regards,

Aleksandar Rikalo


________________________________
From: Aleksandar Markovic
Sent: Thursday, August 2, 2018 7:54:31 PM
To: Richard Henderson; Aleksandar Markovic; qemu-devel@nongnu.org; Aleksandar Rikalo
Cc: laurent@vivier.eu; riku.voipio@iki.fi; philippe.mathieu.daude@gmail.com; aurelien@aurel32.net; Stefan Markovic; Petar Jovanovic; Paul Burton
Subject: Re: [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair

> From: Richard Henderson <richard.henderson@linaro.org>
> Sent: Thursday, August 2, 2018 7:28 PM
>
> On 08/02/2018 08:29 AM, Aleksandar Markovic wrote:
> > Hi, Richard,
> >
> > We are going to remove obsoleted helpers, that was just an honest mistake made in a rush.
> >
> > For unprotected access to gpr, we are going to insert if(reg1 != 0) in two places.
>
> Be careful that you do not eliminate side effects in the process.  This
> includes things like check_dspr2, and any helper that sets overflow_flag or
> carry_flag.
>
> I cannot see how you will avoid that when adding only two if statements.
>

I was referring just to SCWP handler function. For DSP patches, for v6, we worked assiduously to eliminate all unprotected accesses to gpr.

>
> > However, it looks there is a bigger problem now in SCWP. QEMU crashes with this message:
> >
> > /qemu/tcg/tcg.c:2862: tcg fatal error
> >
> > This happens in user mode only, system mode case runs fine.
> >
> > the problem seems to appear as a consequence of using tcg_gen_brcond_*(().
> >
> > Do you have any idea what are we doing wrong here?
>
> If you send me a binary that triggers this error, I'll look at it.

Will do it tomorrow morning.

Aleksandar
ELF�0@4T�4 (@@�E�E����A��A��P�td�E�E@�E@Q�tdp�E�E@�E@R�td����A��A�� ���緆7�7� ��!��*�*�* !�4*Z� ����b�� ��= P�0�����A� a�8�`������*�,��(�����
8�`z��������ہ���
��瀂�� )���`X�����������DŽ� ��+���`:�������C�؁�����`"����������C�؁�����`��������0�)��"݃�����������������iQ����iY��ބ��������ބ�ބ菾�쏀�7*��������������Jr*l/bv��P����$"$"��B�������7ps� <AǤh���4�`������`��4��r�Jr*������+��ݤT$v�ݤ\$s��������� 洂����rI�=!P9�����	�*��s~����:(���7��d�8�*��$�� b��b�����	������s�ʷǁӒ��b���+�������`�����%S��� �&
���+����p��+w���bR������`@�����0(6D����	*���������� �!��,,�sഽ�$,��ⴜӤ���`V6��=�4,o���
*�"0� ��P�&�
�P�*�!?��0^
�P��*�P�a�
�?�� �9�0�_�� ��k�����	��tȄ ƀ0���"P�`��������
��<�`���Ũӿ���<��������p��(�(,�۬��襀	�������5�S���������� ���
�a������������������ ����a����瀟�������������� ����a����A��������������� ����a��_������������� ����a��_��������&����ী�� �����!�9Ǥ$@���������������������� ����a��-������������ ����a��3�������B����ী�� ���,��!�9Ǥ$@�������ী�� ����a�������������1$�� � PB�:Lj6���ЀQ�� >P�*@ɐ���?
������,�?
���1ʃ�2��ô��괳��4�`����Ǫ���6�"P9��� ���^�4���T�4�S���
�4�S�|	���W(ɒӶ�6�� �����/�ɒ��4x_��(y_���/�4�b����"б� �9�Ǫ���տ
W���w?�4�]s�0�l�Qz_��� ���� �4x^�� ����`�(� P0�����8Qy_��0����P�^��� �4�`���?�҆ �,y_됪4�`���� 6���`���4��� �P�4� �9��4��x_��@py_��(Qz_��0����P�^��� �4�`���?�҆ �,z_�4�`���� 6`@"���ރ_���4x_ƀA���J����3Ӵx_���<��~����������@������� ���g����Ӧ (~��P���4��*�������(��"��4���� �ŀ�� DŽ��������4��
�4�4�q�P��Sr�+�����	�*N�ӫ�4��@ ��4�����ŀ�� DŽ�����p�4��4�4�q�P���Sr��+K��D�����4� �,�4� �Ӥ$ݤX,���4ʃ�2�4Vr�+e��4g�����
����`�E�$�h ���A����(��*1S����AE��1� G<���4݄`q-�4݄ t_#�4�4p��4�4p�ƀ��q�
��ҀP� ��P���4�  �6����� �"*��"�2�:0��$�s����g"P�����; ����@�1D!!���3� �"������S�2����4�4�� �"���/$ʻ�"бwV"P���"�ւP�g򿒄0k3�����LS�2�ݤX$��� �1� �9� �+���ݤX,��/4�$X��/� g�"���"��ns��X$�+k��A��b]/��9�ݤX$|S�s�@�
ƀP�"�9~��q� P3� ��"Й�`���r"P��"�9�#��G�ǽ�4�"P�@6�"P;� ��4G���<����
;�׿
u����!C���
#��{���
�u�
S� !C�Қ�
��)c��4 ����.��q�����q*�@*����@�`���� :��*�� P����_�%=D ���l.7�6�p.�"���4�����s���6`S���t��Tr��*��������4��߼�4��;��
g��6t�"� �4�!C��
O��4g"P��">P6���tۚTr��*��>������r
e��������4�6ǀ_��Ĵ��`���-ƴ4�Z�� �3Ĵ�`�-�� "��ǀ���`���Ũ��Us��*��*�k�����*�!��L� ��Ȋ
�  초��4�	��4����0�L�N`��0�G���T"Сg����������4�_��j����#���]�,��*%]�$���@�� ��4�x������Sy������+��Ī
�ӝw��w�4-ӫ�s�@�� 2��d���Ĥ��䴕���*�*�0.�4� 9~�S��*�+m5�����$�4DŽȍ�̍*!�"�9������ �k�m��� m5�@��$���~��k���v ��X�4�4� й�`����"�9�G�ٺ�"Й@�<���4�2�"P��4�4�҇"P�=�
E��4�4
}��4��!C��
+�v�
e��"�1k�����
��4�
O� �4�!C��
���4�"P��">��)Q��Ĵ�`�+�����+s�  ��+��f"�����*����+��+g"��4�4��g���
���4�4
��Ӑ��+�� �4�!C��
��4g"P��">��ӷ�)���4������4�DŽȍ�̍@�b��������]�,*
]�$��*�"����3w"P��Ҁ@��� �k���
� ���0�DŽЍ��ԍ��*V�4������U4�s�������7��M���*0)���̓*�)l5����|"��0DŽ؍�܍*���k��	�M4C��6�@�耂�U�����4� �����T���H������׋��4�t�"Щ�ӵ����"�戜��4��4�f� 2/����8@"�3��4� �1ƀ��ߐ� 6Lj����4�$� ��b��?
� �� X1���NIT��!�9���ވ�!�1���`ʚ;Ȩ2��.�Ԥ����&��0Ҧ���Ȁ��Ǩ �t��ވ���0Ƅčb�@��b >���g������������׋����pL�b �����t��m�N�*��>�� �#�`ʚ;� PA��*�5�`ʚ;����*����m4N4�����	�	���� �!�``ʚ;� 0� �ߐ��ǫ4��t��쒠����̓�4�4�f� 6�� �1ƀ��Ԉ�G P�Z���Yt� P`�"P���� P�u ���ҩ��<Y
��<���0��������0Ƅ��$5 �&5i� q�h`�e +f 3� �f���T������N��*0l4�5����*B,�N45H P9���`�ɚ;�t�l��4�t�"Щ�ӵ����"��j����#�;� �׋����p\��4�Ș8��G"�U�P������H�����4�z׋�ޤ����<��	<��0Ƅ��7��t���������t�s�ҩ��<���~�_����ɒ�<� �)���4Ӏ � �9瀂���� >�ȼ0�"б��@� �V"P;� ���р��`���{�E�˵���>�� �"�9�ʄ0��������>�4�`����Ǫ���"P��4;���
%��4�4
]���4!C���
���0�4� ���">���4�����$�
Ӡ�&
#�Ջ�@���������
���)k��<AՀ��x�"#	�I�������t9	5�4� �1��(��@-ӫ�d����"2�Ā�� �A����˴���>9��0�D_����tÿ.9���Ī���r��������_�s����� �1
�C�t����8��s���Ҁ
@��� >���
W�R�	�/�����_�׫���Ջ����Ӭ���
���4^s����+��){����t���8������r������$��
���$�Ӡ�%
��ߒ�����sǪ���"СT"P3�� :����
��"Бy�g�)���4�4� &	��+���P�)�����)3��q�%�"Йr"P��#���)���)���1���Fr���*�(Ӡ� P!*���rBr*��sBs�s���+O������L����
Z��ЄJG�  �����Eဗ�`���s��������ӌ��s���sBs�s���+�$����c������� �������ӧ�  |Q� ����
.��1�����������D���������ߐ
�����0
� ���Ȣ����l�`���cm PH��`uHt(uG��g��O�/���g��?�������d���ڳ� Pi��a�t�Ғ
��-���
�Pђ
������X\�_��
������_��0����.%� �Ɋ�H��
�0��1��E9-#P�-�b��g�H�B��"������ʁ����k�H�J�H�)�H�����!��!�Z�!�R�!�Jh��h��BH�(�(��?���ƀ�������� �0
1��9��
�8#P�E-�b��g�P�B��"�
�����ʁ����k�P�J�P�)�P�����!��!�Z�!�R�!�Jh��h��BH�(�(��?���ƀ����0�!P)���!Pi� F� ��a����!%� Y_-�%� �_-�%� %� -�%� � � Ņ	 ��
 e� E� e�
 ̈́T�-�%� �� ��-�
��ͅ	��
m�M�m�
-����Dƅ &�� �� f� F� f� �� Ƅ Dž����g�G�g���DŽ@��i� �I� �Ʉ � h�H�Ȅ���X_�_��̈́�����=�_����� 8�D��\�
����
��!PyE-�-�b��g�X�B��"�	�+���
�ʁ����k�X�J�X�)�X����#"��!�Z�!�R�!�Jh��h��BH�(�詩?�ƀ�����9���&#�1�!P)�!Pi1�_���	���'��d���a������� PA����_�Ȩ����_����_�Ș8����_�ȎH� �I��)� �2&!�1ڳ��@�$!P9ŀ�\�!PQ� �4ʤ���\Hq�r�ʤ��ʤ���L���s�֒t�� �Au�v���ʤ��ʤ��ʤ��ʤ���&�� ���� ��p�q�r�s�t�u�v�w�� ���?����*��ɰ���p�*����(�
�����DŽ0���`��+���l���x��d��d����&�*�xGv�"Ђ� �����?�m�@��P�°�52����􌒱�+���鹨�������&Luc�$����*a������ �)��?��< �t��7�� �)��!2��d����t�<����g��,�ŗH��q���� �1(��&!P2��� �t�������@�Ĥ,���$�Lj�@ ���Ӡ���+���+���+����� } ���`x��������(� 1���!���(JĈ�?��H_��{����} �a`�����ȏ�)���^��+E�]�����)��} �a`����ȏ��)��(<��(���} �a`����L�#�l�����ӰP*Z�L��ĤQ���Y���[�����L����P���L����b�����&�wځ�b���0�)s���O�+���9��+_��0(f!-����>��+=�*H�����ݤ,��$!$0���F�����0��s�`ht@��+�������KQ�
`$%�S�����G����S��"0����e��%��K2�� "'����g"1���W��3���$��%����S��+�����~���%'8�S��L��"�@"���?
i��4�
q�d��?
��t�S"���'��������_�ڜ����_划��ߐ�������_刀%��%<��'<��T �� ;� �B�`����� P:a����!P:���t� ;�� �:�`�����S�`�����S��ܐ����' �� ����L�
� ��
�Ǩ�?���������)w�%`�&� ����
 &�@������q�m����Q��Y����i��������Q���Y����%y�r�b��+
���&����?y�r�b��+�������������+?�"�9��������F���k�*L$���0DŽ�����*���;���@���� ������?�����������lP�����������^�} �a`���Äȏ`���`� ������+��������������倆���@��S��? �_�����R���^���ק������` ���$�倌��� ��S�����_�F�? �S�R�_�^��s��`���`��樃�倒�����SŀL��_����|SE_ŀF�? |S�RF_���^56�Ef�=���A�$���ô4���|�Ф,�6��� ������8�����~����y���Bҙ��+5��+A����?�ǿ�%�����ɳ�����`��Jǀ��S�J����LŗǗ~�A�B�ė���� �����(J8��L����+�������c���Ф$������怟��0��**@
��y��`���+���`���0�)�����*������(8���������
������Q���ФYs���������@�������Ӥ��b��+����&�wځ�b���0�)��� �9� (� P8�  � :ƀ @�R� *� "��������D��h���(���� ?[��� �Y� @d!PX� H!�Z� P	���I�P�K �h  �P�K �1ƀ�|S�����<��&�
�������<m�F �Y<F �!J����F!�R�
��A<��*��
��������S��� ���� �I� ?[n�(!�A��i���I�P�H �k  �P�H �1ƀ�|S�����<��&�
�������<m�F �k @F �!J����F!�R�
���A<��*���
�����y� H�������� P� P� @i�P�c!�E 0� P8!�Bc!�9��P����S�Lj��<��'�
�Lj�����<}�f!�9f!�E 0�����!�B�Ȉ�<��(�
�Ȉ���<���� �A�R	����g ?[`����� �3�����g 8e �)� P� Ph� �h @� P("���!�Z�P�� �a�!(�P�� �QJ��f 0
!�R���J PQ�J�������J PQ� �Q� �a�!H� �)k����e!�*�%��E P)��E��%����E P)��%!�I� �:� @� �0ɨ��ɨ>d 0����9��	���i�@�`�P*���f!?[`�`!�Qe!(D!PPf!H� �Rd!@����P�� �1�<� �9H�P���G!�:Lj��<'��Lj��<�� �Q�<� �1�����!�B���<(�����<� �A�h!P �� ���� �Ii!?[`�>%!�)����I�P�E!�1�<E!�9��P����SLj��<'��Lj��<�G!�)G!�1�<�@ i!Hb!�d!@E Pe!(D P��P�� ����� �1�<� �9B�P���G!�:Lj��<'��Lj��<}�� �QM<� �9�������RE���<%��E���<E!�)Me�1��!?[��K��(��� �A۳!�SE!�Q@�  �!8�!�I&!PX$!PP� �B%!PX�!(�P�� �*H���� �� �i�!XE�P�c���!0C ��! Mc��!P_���c��M��!Pc!�� �Y� �i�!8��k��� �R���@<��
�
������@<b��� �Q� �Z� � �X��j��j�D��� �9!�Y� �K �)ϳ� �Q� �#� �Q�!P *!@�!P(� �"!E���'���J���]�����H!�Bg�_�G���_���&�]����� �Jc3M!�Y@�e��k`�J�@��� �:�KK�"�!�:����I��������Ȁ��C��S���C�ʨ!�2��z��� �B�Ȁ��ʀ��ŀ��(��������� P1<�!�;@<�ɪ�I���ꈇ?�L�A����匁 ���!�b�!�b�A��K�.�!�:���KWM��!�:ਸ�MC��� �J���X���4@ � PX� �Q� P8I! F!0d!�"� �3LS�!P1�<�!�CM<�e� P @��� �9� P� �2� �3LS��� �2� �3�`����h�!�:��J�
� �b���>	��`!�Z`�� Pa<� �3<J��?i�d�i�>��l!Pg!�9h!PX�  � `D �"�!�c�!�b� Pa+!PA�J��?��`!�Y� �B�h!P �a�`!�Yh!8�!�b�!�c�!�b`��!�b�!�c�M��'�Ȗ�!�:��D���� �:@��� P1<�!�;�<�����@� ���=� ���%��!�;�<���V� �2BW�H�C�)�C�I!�J4�$�������SeJ���]�H!�B����@��@a�����J�{=� P1<�!�;i3� P��� �b�A�w�`���@�v� �:��==����� �1(!�A� �;@� �A��E�����l�K��=��l���H@ � PX� �Q� P8I! F!0d!�"� �3LS� �1� �9� �CM!�A��M��=��� �J��� P @��� �9� P� �2� �3LS��� �2� �3�`����j�!�:��J�� �b�� 	��`!�Z`��!�a	!�A�!�3�� �A9J��?i�b�i�<��l!P g!�9h!PX� (� `�R�!�c�!�b�!�ai!�A�J��?��`!�Y� �B�h!P(�a�`!�Yh!8�!�b�!�c�!�b`��!�b�!�c����'�Ȫ�!�R� �:��P@��K?�@��)����� �!(!�9� �SG!�9����!�a	!�A�!�3@� �A��� �b����@�@�
��"	��B���=�C�)�C�� �J4� �������� �"��3�]�� �B������`����� �Y(!�!l!�;ɳ��n��!�Y	!�Af!�3�� �!� ?[�� ?[� G��I�R@!�AD! !P@K!`� �B��l��!�Q���:��� PH��  � 8$!�"� �;� �b� P@/� �b���?��(��!@�J���H!PP��� �1� 8� �B!�C
!�b�M!�Q���	��	����)e��a�����B�)S��)��d�%�������g���G���_���_���h!��@�2*��ۊ�� �2� ��I�h����� �h!�"� �#�ۀ��E���e�����_�@�|��ʈ��Ā]�!�2k��f!�Z��J����ǀ����ǁ_�������,�]���� �JC2� �"ƀ��,��`�<M��j �R�!_��L��x��� G<�؋ �B�Z+!?[`�D!?[* ɀ���&�@	��� �Q!XD!PP!@j!�Z@��*!�Qci�(�d!X�� �B��I`@�?`�7�!�J �XD ?[�L ?[B €���&�`"��� �$! l P,!H� �"���F �1%��(� �  ��!�J �,`��`�`�� (!�P(!hd!x� �@i!(i!�HC!PQd!�8j ��!PyE<�!Pɪ �+)#P�#Pq!�Cy �8!�Kh �"� �+ȳ� �*
�	�Ȳ�!�B�W���	�!�C��W�� �Z� �B�	�� �Bdɾ��A�� !�B��� �Bk�A�������� ��� �� �!�C`<d��`����������C�!�B�C��(ǀ��ŀ��€�����ۋ �"��xR�`��� .� ^��E� F��� �:���E�ɪ�����ik�dNd	���W����������N��� P ۳� P8� 0� @LS!�C!�BȀ �Ȁ �� �!�C�<��L�ǀ��C�!�B�3�C������� P0��� �9� (!�B�!�C!�B�`a����@Ck�Gk���E���'���J���]�H!�B��_�G�����&�]������ �J����_�d��c3�� �:����M!�Y@����`�J�@��� �:�KK�"h �:�`��I�������`Ȁ��C��S���C�ʨ!�2��v��� �B�Ȁ��ʀ��ŀ��(��������� P1<f �;@<fɪ�I���ꈇ?�c�A�����c� ��k �h ��A��K�.h �:��`KWM�h �:ਸ਼`MC��� �J���X���4@ � PX� �Q� P8I! F!0d!�"� �3LSf P1�<f �CM<fe� P @��� �9� P� �2� �3LS��� �2� �3�`����hh �:��J�
� �`��>	f�`!�Z`�� P<� �3<J��?i�d�i�>��c!Pg!�9h!PX�  � D �"` �d �� P+!PA�J��?��`!�Y� �B�h!P �a�`!�Yh!8g �` �d �`�h �` ��M��'�Ȕh �:��D���� �:@��� P1<f �;f<�����@� ���=� ���%�f �;f<���R� �2BW���C�)�C�� �J4�"�������Sl�2�]�� �Bg���@���`�����J�}=� P1<f �;i3� PY��� ��A�y`���@�v� �:��A=����� �1(!�A� �;@� �Af�I�����c�K��=��l���H@ � PX� �Q� P8I! F!0d!�"� �3LS� �1� �9� �CM!�Af�M��=��� �J��� P @��� �9� P� �2� �3LS��� �2� �3�`����jh �:��J�� �`� 	f�`!�Z`�f �	!�Af �3�� �A9J��?i�b�i�<��c!P g!�9h!PX� (� �R` �e �f �i!�A�J��?��`!�Y� �B�h!P(�a�`!�Yh!8g �` �e �`�h �` �����'�Ȫh �R� �:��P@��K?`@��)����� �!(!�9� �SG!�9���f �	!�Af �3@� �A��� �`��d@�@���"	f��B���=�C�)�C�� �J4�����h��� �"e�3�]�� �Bd����`����� �Y(!�!c!�;ɳ��n�f �Y	!�Af!�3�� �!� ?[�� ?[� G��I�R@!�AD! !P@K!� �B��l��!�Q���:��� PH��  � 8$!�"� �;� �� P@/� �`��?��(�`!@�J���H!PP��� �1� 8� �B!�C
!��M!�Q���	f�	f���)i��a��`��B�)W��)��ŀ����$�����_�Lj<��Lj
��`��������� �:3� �A	����	!P@�  !�"��� �!�ۀI�� P �ŀ����%�����_�LjF����Ǩ"��3��[�� �:������ P(�  \R�ۅ���ۀI�� P ���Ǩ���R�䀟��_�tR�ɳ�3$!?[&!�1[���"��'!�9� P8�  ����䦀�稀�笼������ 8������F�!?[�!�1�3[���"��!�9� P8�  ����䦀���倀������� 8�������� ���緆7�7� ��r1 = %u, r2 = %u, v[0] = %u, v[1] = %u
/dev/null-+   0X0x(null)-0X+0X 0X-0x+0x 0xinfINFnanNAN.B�@�@�@�@�@�@@.@V@z@�@�@�@�@�@�@@F@P@"@�@"@P@P@P@"@"@"@"@"@"@"@"@"@"@"@�@"@"@"@"@�	@"@"@"@"@"@"@"@"@P@"@t@~
@P@P@P@"@~
@"@"@"@�@�	@8
@�	@"@"@�@"@�
@"@"@�	@�	@�	@�	@�	@�	@�@�	@�	@0123456789ABCDEF
	

		


								 @@C@C�?�?�?0@�Ae��A�CIllegal byte sequenceDomain errorResult not representableNot a ttyPermission deniedOperation not permittedNo such file or directoryNo such processFile existsValue too large for data typeNo space left on deviceOut of memoryResource busyInterrupted system callResource temporarily unavailableInvalid seekCross-device linkRead-only file systemDirectory not emptyConnection reset by peerOperation timed outConnection refusedHost is downHost is unreachableAddress in useBroken pipeI/O errorNo such device or addressBlock device requiredNo such deviceNot a directoryIs a directoryText file busyExec format errorInvalid argumentArgument list too longSymbolic link loopFilename too longToo many open files in systemNo file descriptors availableBad file descriptorNo child processBad addressFile too largeToo many linksNo locks availableResource deadlock would occurState not recoverablePrevious owner diedOperation canceledFunction not implementedNo message of desired typeIdentifier removedDevice not a streamNo data availableDevice timeoutOut of streams resourcesLink has been severedProtocol errorBad messageFile descriptor in bad stateNot a socketDestination address requiredMessage too largeProtocol wrong type for socketProtocol not availableProtocol not supportedSocket type not supportedNot supportedProtocol family not supportedAddress family not supported by protocolAddress not availableNetwork is downNetwork unreachableConnection reset by networkConnection abortedNo buffer space availableSocket is connectedSocket not connectedCannot send after socket shutdownOperation already in progressOperation in progressStale file handleRemote I/O errorQuota exceededNo medium foundWrong medium typeNo error informationT!"
K'hnopqb ($	
%#��}&*+<=>?CGJMXYZ[\]^_`acdefgijklrstyz{|�1@�1@~1@n1@n1@2@~1@n1@2@n1@~1@l1@l1@l1@>1@ zR|
t����,���l;����P����������������@�@Bb@�@�@�B
����GCC: (Codescape GNU Tools 2018.01-01-trial-2 for nanoMIPS Linux) 6.3.0� ��@P��intuWTz����7Hy�8�9	:@P��
r13�l
r23�h
v��`3Y"�C#@$#@�6��y�r	6p��int���uWbz��n��7�V��8��9�x��n`B����{�V|3H|3�|3���u"	�=
gr-y3�z��{38*,n/�i�
���6��3�
�
��t���	(��]������	u��O	z3�	{,�	~:&	%l�r	�ulow	��	�	��s	�Mll	�"�	�u�	�
g���	���	���-0#@���n-d-x�2#@0#.9D�OZ�e#p�{����"�P�^#@d���������-�}��/j�v������&�v��0x��(�4@%L�X� �$@����P���8\z�)�5(	 �%@GZ	!��-v"n�-"d�-"rp�v#nn��#dd��#rr��#d0�#d1�#n0�#n1�#n2�#q0�#q1�#b�#bm�#ww��$%�6%�6%36%.6%�6%�6#__m6$e%�[%�[%3[%.[%�[%�[#__m[$�%�`%�`%3`%.`%�`%�`#__m`$�#__x�&#m1�#m0�$B%��%��%3�%.�%��%��#__m�$T#__x�-$f#__x�&#__x�-�fr	6�Q�int���uWbz��n��7�V��8��9�x��n`B����{�V|3H|3�|3���u"	�=
gr-y3�z��{38*%n/�i�
���6��3�
�
��t���	(��]������	u��O	z3�	{%�	~:&	,l�r	�ulow	��	�	��s	�Mll	�"�	�u�	�
g���	���	����-�%@l�:u�-r	v�-
w�-:�%@��_�
U�
K"�ju������.�m���
�=
�]
��
��%@:���
	�
!-�
9E	�1��/�S�q�������zW�c�o{c�����<'@�O N'@�b$���4�@�L�Xd p>|y�'@��(@#�� (@��!��-�"n�-"d�-"rp��nn��dd��rr��d0�d1�n0�n1�n2�q0�q1�b�bm�ww��#R$�6$�6$36$.6$�6$�6__m6#�$�[$�[$3[$.[$�[$�[__m[#$�`$�`$3`$.`$�`$�`__m`#__x�%m1�m0�#�$��$��$3�$.�$��$��__m�#�__x�-#�__x�%__x�-5186��int��JRA���M~��n��<~	H%
O��WY �XYexpYY
ZY
LfltN�=\��#�@(@�a#�	b#��%,�A_c&,A_s&,�A_e&,��&Y�&Y	B_c',B_s',�B_e', �'Y��'Y�R_c(,�R_s(,�R_e(,jB(Y�G(Y"r)�=,�0R-�H1..l)@3.*@8.)@.�*@�.,�#��__x.Y%��__x.Y%�)@�__x.Y2%��__x.YE%�*@__x.YX%�__x.Yk%�f.�+@�.>,@.r+@~.�-@%.�*@�.,�%0�__x.Y�&h�__x.Y�&&,@�__x.Y�&��__x.Y'�__x.Y'�__x.Y2'd-@7__x.YE'�P__x.Ys'H�.,�'�"�/,�/,�/,#/,�/Y�/Y�__x/Y�__x/Y__x/Y�*@__x/Y�'__x/Y__x/Y�(@�/�?�1s6P��TU7int��J]L���X���y�	�<�H%
O��Wd �XdexpYd
Zd
LfltN�=\�L#,`.@d�a#�(b#�3(%7A_c&7A_s&7A_e&7Y�&d{(&dXB_c'7B_s'7B_e'7Z�'d�(�'dSr(,T�+�8,�b-7#b-74b-7b-7r�16�>�int��JRA��Ke&Lx��M������<�	H%
O��We �XeexpYe
Ze
L fltN�=\�O	#��.@V�ia#��(b#�)%,})A_c&,�)A_s&,�)A_e&,2*�&ec*&e�*B_c',w+B_s',�+B_e',,�'eN,�'e�,R_c(,�-R_s(,�-R_e(,6.B(e(/G(eA0r)�`a,��z`,,�0��-���`-,�0D0@�%�	.i���	.e1�	.e.1X	.eA1�.eT1H0@"__x.lg1�;__x.l1X0@X__x.l�1q__x.l�1 �{.e�1t	.e�1X{.e&2t	.e92�.,�2�%	.,�2�.,�2�.,�2�.,3�.eG3�0@B__x/e�3S__x/ed__x/e�S�/,�	/,8	/,�/,�/e�/e�__x/e�__x/e__x/e�1@__x/e�3__x/e#__x/e4__x/eE__x/e__x/e(1@�/�e�5M1�	6C�int��JRA���M~��n��<~	H%
O��WY �XYexpYY
ZY
LfltN�=\��	#�02@$�a#��3b#�>6%,f6A_c&,A_s&,�6A_e&,W7�&Y�7&Y�:B_c',B_s',�<B_e',�<�'YY=�'YS>R_c(,??R_s(,_?R_e(,�?B(YUAG(Y�Cr)��=,�(R-�@1..l3@3.4@8.3@.�4@�.,lE��__x.Y�F��__x.Y�F�3@�__x.Y�F��__x.Y�F�4@__x.Y�F�__x.Y�F�f.�5@�.:6@.n5@~.�7@%.�4@�.,G(�__x.YH`�__x.Y*H"6@�__x.Y=Hx�__x.YPH�__x.YcH�__x.Y�H`7@7__x.Y�H�P__x.Y�H@�.,�H�"�/,�/,�/,#/,�/Y�/Y�__x/Y�__x/Y__x/Y�4@__x/YGI__x/Y__x/Y�2@�/���	1C
6HO�int�OH,�J^M��Kq��Y������<�	H%
O��Wq �XqexpYq
Zq
L fltN�=\�&
#:`8@b�a#�ZI%,A_c&,A_s&,A_e&,V�&q�I&q�Ir'e�I�*��0
+,00
+,#J�1�
6���int��JRA��Ke��M���z��<�	H%
O��We �XeexpYe
Ze
LfltN�=\��
#Y�8@`�a#�IJ%,A_c&,A_s&,A_e&,V�&eqJ&e�Jr'YKX�*��0
+,x0
+,.K��1�
6��int�OH%�JWF��Kj��R�����<�	H��
O��Wj �XjexpYj
Zj
L fltN�=\�W$�09@^�i$3TKA_c&%A_s&%�KA_e&%�K�&j�K&j�Ka'��y�
)��
)^L��G)%eL�)%G)%�)%#)%�)j�)j(__x)j9__x)j__x)jX__x)ji__x)j__x)jb9@�*���
1c6(int��JK:��K^��F���s��<�	H��
O��W^ �X^expY^
Z^
LfltN�=\��$��9@P�i$R�LA_c&%A_s&%�LA_e&%�L�&^M&^'Ma'��q�
)�
)R]M�9@�G)%�M�)%?)%�)%#)%�)^�)^ __x)^1__x)^__x)^P__x)^a__x)^__x)^�9@�*�%$>$>:;I<4:;I?<I&I	.?:;I@�B
4:;II!I/%%U$>$>:;I<&I4:;I?<I	I
!I/:;I'I
I&!:;
:;I8
:;I8:;
:;I4:;I?<.?:;'I@�B:;I1RUXY11U4141U !.:;'I ":;I#4:;I$%4:;I&%U$>$>:;I<&I4:;I?<I	I
!I/:;I'I
I&!:;
:;I8
:;I8:;
:;I4:;I?<.?:;'I@�B:;I4:;I1RUXY1U4141U !.:;'I ":;I#$4:;I%%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;IU4:;I
:;U%U$>:;I$>:;I&II!I/	4:;I?<
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;I4:;I4:;IU4:;I%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;IU4:;IUI%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;IU4:;I
:;U%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;I4:;I4:;IU4:;IU%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;I4:;I4:;IU4:;IU%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;IU
:;U4:;I%U$>$>:;I&II!I/4:;I?<	:;I
:;
:;I
8
:;I
8
:;
:;I
:;I.?:;'I@�B:;I4:;I4:;I4:;IU
:;U4:;I@P�#@$
0#@���%@lN@(@�`.@d��.@V@02@$y"`8@bR$�8@`&09@^�(�9@P?�
/home/aca/toolchain/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/home/aca/toolchain/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/bitsllscwp.cstdio.halltypes.h@							�h�
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/config/mipslib1funcs-nano.S#@3KKKKKK/KK��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/scratch/mpf/overtest/64085/240284/shared/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/scratch/mpf/overtest/64085/240284/shared/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/bits/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../include../.././gcclibgcc2.cstdio.herrno.hunistd.htime.halltypes.hhashtab.hinsn-constants.hlibgcc2.h0#@�
	�}			%									*	d�	�~								v	h~		|				}			d		
	'	o		~			~			}		{			d		z	{			D		"	z		{�
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/scratch/mpf/overtest/64085/240284/shared/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/scratch/mpf/overtest/64085/240284/shared/nanomips-linux-musl/2018.01-01-trial-2/sysroot/nanomips-r6-soft-musl/usr/include/bits/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../include../.././gcclibgcc2.cstdio.herrno.hunistd.htime.halltypes.hhashtab.hinsn-constants.hlibgcc2.h�%@�	�~		%									*	:		 ~	�	�~							t	:	~		~			}			V		
					~			}				}		{		~			Z					�		���
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includeadddf3.csoft-fp.hdouble.hlonglong.h@(@#													�	�		+		3	4	<	>	>	{		p	�		
	 �		�	"	*	
+	-	;	";~	
;	.	5	
8	,	

	=	?	A	W		
B	J	o	K	^	_	a	o	"@	
V	b	i	
l	`	>	q	s	v	{	|			!	�	�	�		�		r	
		�	�	�	�	�	�	�	
�	�	�	�	"�~	�	�	�	�	�	
�	�	
�	�	�	�	�		�	�	�	�	�	�	�	�	 �	
�	�	�	
�	�	�	�	�	�		�	�	�	�		�	�		�	�		�		�	
�	�	�	�	�	�	�	�	�	"�	�	�	�	�		
		���
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp./scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includeeqdf2.csfp-machine.hsoft-fp.hdouble.hlonglong.h`.@#			~							
	|		I	K	M	O	P	S		
	��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includemuldf3.csoft-fp.hdouble.hlonglong.h�.@#	x		#	,	#	2	~	"				#		
							#		
				�				
				b	b	{		 		~				1	2	4	A	B	H	D	N		5	=	@				��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includesubdf3.csoft-fp.hdouble.hlonglong.h02@#							~									�	�		+		3	4	<	>	>	{		u	�		
	 �		�	'	/	
0	2	@	"@~	
@	3	:	
=	1	
	B	D	F	\		
G	O	t	P	c	d	f	t	"E	
[	g	n	
q	e	C	v	x	{	�	�			!	�	�	�		�		w	
	
	�	�	�	�	�	�	�	
�	�	�	�	"�~	�	�	�	�	�	
�	�	
�	�	�	�	�		�	�	�	�	�	�	�	�	 �	
�	�	�	
�	�	�	�	�	�		�	�	�	�		�	�			�	�		�		�	
�	�	�	�	�	�	�	�	�	"�	�	�	�	�		
		R��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includefixdfsi.csoft-fp.hdouble.hlonglong.h`8@#		y					
	
		
$	+	,		)|		M��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includefixunsdfsi.csoft-fp.hdouble.hlonglong.h�8@#		y					
			(		-				��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includefloatsidf.csoft-fp.hdouble.hlonglong.h09@$			"		|			
��
/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/../includefloatunsidf.csoft-fp.hdouble.hlonglong.h�9@$					|			long long intunsigned intmainGNU C11 6.3.0 -mel -march=32r6 -msoft-float -mno-shared -mmusl -m32 -g -fuse-ld=goldFILE_IO_FILEcharstdindoublestderrshort unsigned intsigned char/home/aca/posaostdoutllscwp.csizetype/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/config/mips/lib1funcs-nano.S/scratch/mpf/overtest/64085/240284/work/obj-nanomips-linux-musl/gcc/nanomips-linux-musl/libgccGNU AS 2.28.51DWunionoptarg__udivdi3environcomplex floathtab_eq_pointershort int__d0__d1timezonedaylight/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/libgcc2.copterrSItypeoptindunspec_stringsfloatGNU C11 6.3.0 -mel -mno-gpopt -march=32r6 -msoft-float -mno-shared -mmusl -m32 -g -g -g -O2 -Os -O2 -O2 -Os -ffunction-sections -fdata-sections -fbuilding-libgcc -fno-stack-protector -fexceptions -fnon-call-exceptions -fvisibility=hidden -fuse-ld=goldhtab_hashlong intgetdate_errhigh__clz_tabhtab_eq__popcount_tablong doubleprogram_invocation_nameunsigned charlong long unsigned intUQItypehtab_hash_pointerDWstructtznameUDItype__q0__q1hashval_tprogram_invocation_short_namelong unsigned intcomplex double__udivmoddi4processor_stringsDItypeUSItypeoptopt__r0__r1__umoddi3sub2_FP_PACK_SEMIRAW_T_s__adddf3frac0frac1_FP_PACK_RAW_2_floDFtypeadd_done_FP_UNPACK_RAW_2_floGNU C11 6.3.0 -mel -mno-gpopt -march=32r6 -msoft-float -mno-shared -mmusl -m32 -g -g -g -O2 -Os -O2 -O2 -Os -ffunction-sections -fdata-sections -fbuilding-libgcc -fno-stack-protector -fvisibility=hidden -fuse-ld=goldsignA_f1sub1_fexsub3_FP_PACK_SEMIRAW_T_e/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/adddf3.cnormA_f0B_f0B_f1_FP_ADD_INTERNAL_diff_FP_PACK_SEMIRAW_is_tiny_FP_PACK_SEMIRAW_T_f1_FP_PACK_SEMIRAW_T_f0_FP_ADD_INTERNAL_ediff_FP_UNION_D_FP_PACK_SEMIRAW_T_csub_doneadd1add2add3bitsR_f0R_f1__eqdf2__gcc_CMPtype_FP_ISSIGNAN_ret/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/eqdf2.c_FP_PACK_CANONICAL_T_f0_FP_PACK_CANONICAL_T_f1_FP_MUL_MEAT_DW_2_wide_c_f1_FP_FRAC_SRS_4_sticky/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/muldf3.c_FP_UNPACK_CANONICAL_shift__FP_FRAC_ADD_3_c1_FP_FRAC_SRST_4_down_FP_PACK_CANONICAL_T_e_FP_FRAC_SRST_4_i_FP_FRAC_SRST_4_skip_FP_PACK_CANONICAL_is_tiny_FP_FRAC_SRST_4_s_FP_PACK_CANONICAL_T_c_FP_FRAC_SRST_4_up_FP_PACK_CANONICAL_T_s__muldf3_FP_MUL_MEAT_DW_2_wide_c_f0__FP_FRAC_ADD_3_c2_FP_MUL_MEAT_2_wide_z_f_FP_MUL_MEAT_DW_2_wide_b_f0_FP_MUL_MEAT_DW_2_wide_b_f1__subdf3/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/subdf3.c__fixdfsi_FP_TO_INT_inexact/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/fixdfsi.c/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/fixunsdfsi.c__fixunsdfsipack_semiraw_FP_FROM_INT_ur/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/floatsidf.c_FP_FROM_INT_lz__floatsidf/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/floatunsidf.c__floatunsidf����|
 @PB ��D� H����|
4@(@����|
T`.@d����|
t�.@V����|
�02@$����|
�`8@b����|
��8@`����|
�09@^����|
�9@P0#@n#@T�U�n#@�#@��%��#@�#@T�U��#@J$@��%�J$@~$@T�U�~$@�$@��%��$@�%@T�U�0#@v#@V�W�v#@�#@��%��#@�#@V�W��#@�$@��%��$@�$@V�W��$@�$@��%��$@8%@V�W�8%@�%@��%��%@�%@V�W�2#@�#@0��#@�%@0�2#@D#@V�W�D#@v#@V�U��#@�#@V�U��$@�$@V�U��$@�$@Y�U��$@�$@V�U��$@�$@V�W��%@�%@V�U��%@�%@V�W��%@�%@V�U��%@�%@V�W�V#@�#@Y�#@�#@YJ$@N$@Y8%@�%@V6#@D#@WD#@�#@U�#@�#@UJ$@V$@U�$@�$@U�$@�$@U�$@�$@W%@�%@R�%@�%@U�%@�%@W�%@�%@U�%@�%@W6#@^#@T^#@�#@Z�#@�#@T�#@*$@ZJ$@v$@Tv$@�$@Z�$@�$@T�$@8%@T8%@�%@ts$��%@�%@T8#@N#@XZ#@�#@[�#@"$@XJ$@b$@Xb$@f$@[v$@�$@X�$@�$@X�$@%@X%@%@[8%@l%@[�%@�%@Y�%@�%@XZ$@�$@S8%@�%@]�$@�$@W�%@�%@W�%@�%@w��#@�#@1��#@J$@U�$@�$@UR$@r$@W%@%@U%@�%@ s�D#@r#@Wr#@v#@!v( /0@K$(	1$#/����#@�#@VJ$@n$@V�$@�%@S�%@�%@Sf#@�#@Rf#@�#@X�#@�#@y
���v#@�#@S�#@�#@W�#@�#@[�#@�#@Tv#@z#@Vz#@|#@{r�|#@�#@V�#@�#@
z@%{r@$!��#@�#@V�#@�#@T�#@�#@Zv#@�#@T�#@�#@X�#@J$@R�#@J$@[�#@
$@S
$@J$@W�#@�#@T&$@<$@S<$@J$@T�#@�#@V�#@$@xr�$@$@V$@
$@
z@%xr@$!�
$@.$@V&$@2$@T2$@:$@Z�#@&$@T&$@J$@Xv$@�$@[v$@�$@U�$@�$@y
���z$@�$@R�$@�$@T�$@�$@R�$@�$@Wz$@�$@W�$@�$@s{��$@�$@W�$@�$@
x@%s{@$!��$@�$@W�$@�$@V�$@�$@W�$@�$@X�$@�$@Xz$@�$@V�$@�$@ur��$@�$@s�,{�,�u��$@�$@V�%@�%@V�%@�%@X8%@v%@Wv%@�%@r@%�8%@d%@Yd%@�%@r
���8%@H%@\H%@�%@Xh%@�%@\�%@�%@W<%@F%@ZF%@H%@
}w@${@%!�H%@�%@Zh%@p%@Up%@t%@zw�t%@~%@U~%@�%@
zr@%@${!��%@�%@U�%@�%@Y8%@h%@Uh%@�%@Y�%@�%@
r
��|��%@�%@X�V��%@&@T�U�&@^&@��,�^&@t&@T�U�t&@�&@��,��&@�&@T�U��&@('@��,�('@L'@T�U�L'@N'@��,�N'@�'@T�U��'@<(@��,��%@&@V�W�&@^&@��,�^&@t&@V�W�t&@�&@��,��&@�&@V�W��&@('@��,�('@�'@V�W��'@<(@��,��%@\&@�^&@6(@��%@&@V�W�^&@d&@V�W�d&@l&@V�[�('@V'@V�W�V'@^'@V�[��%@�%@T�U�^&@t&@T�U��&@�&@T�U��&@�&@T�Z�('@B'@T�U�B'@F'@T�Z�N'@n'@T�U��%@�%@V�%@\&@Y^&@h&@Vh&@�&@Y�&@('@Y('@6(@V�%@&@W^&@d&@Wd&@l&@[('@V'@WV'@^'@[f'@2(@X�%@6&@XV&@\&@XJ'@N'@X�'@&(@T*(@6(@W�%@�%@U�%@�%@Z^&@�&@U�&@�&@U�&@�&@Z�&@&'@R&'@B'@UB'@F'@ZN'@n'@U�'@�'@U�'@"(@Z*(@6(@Z�&@('@S<'@J'@1��'@�'@r@$u!��'@�'@[J'@N'@0�(@6(@0��&@�&@R�&@('@ {�Z'@6(@Y�%@\&@[l&@('@[0'@6(@\&@6&@U&@2&@T2&@6&@y
���&@&@W&@6&@W&@6&@V|&@�&@Z|&@�&@T�&@�&@y
����&@�&@u�%z�%���&@�&@U�&@�&@W�&@�&@WB&@\&@X�&@�&@V6&@\&@T�&@�&@V�&@('@T�&@'@U'@('@y
����&@�&@s�%t�%���&@�&@s�%t�%�1��&@�&@s�%t�%�2�'@'@v�%t�%��'@ '@v�%t�%�1� '@"'@v�%t�%�2��&@�&@W�&@�&@st��&@�&@W�&@('@V'@'@W'@'@vt�'@('@U�&@�&@V�&@'@s�%t�%�u�'@('@Z@'@J'@X(@(@[(@6(@U(@(@R(@(@W�'@�'@W�'@2(@x@%��'@�'@Z�'@2(@x
����'@�'@]�'@�'@R�'@�'@]�'@(@U�'@�'@S�'@6(@S�'@�'@[�'@�'@sx@%��'@�'@Z�'@"(@Z�'@�'@[�'@�'@z}��'@�'@W�'@2(@
x
��}��'@(@R�[�(@(@R�U�(@(@W(@6(@W@(@�(@T�U��(@�(@��%��(@)@T�U�)@:)@��%�:)@�)@T�U��)@�)@��%��)@�)@T�U��)@�)@��%��)@*@T�U�*@
*@��%�
*@(*@T�U�(*@B*@��%�B*@X*@T�U�X*@v*@��%�v*@�*@T�U��*@�*@��%��*@�*@T�U��*@+@��%�+@r+@T�U�r+@�+@��%��+@�+@T�U��+@�+@��%��+@�+@T�U��+@�+@��%��+@.,@T�U�.,@:,@��%�:,@L,@T�U�L,@p,@��%�p,@�,@T�U��,@�,@��%��,@�,@T�U��,@-@��%�-@>-@T�U�>-@Z-@��%�Z-@b-@T�U�b-@d-@��%�d-@l-@T�U�l-@,.@��%�,.@R.@T�U�R.@X.@��%�@(@v(@V�W�v(@X.@��%�@(@�(@0��(@�*@0�"+@-@0�d-@2.@0�8.@@.@0�d(@�(@U�(@�*@U�*@+@U+@r+@U�+@.,@U:,@X,@Up,@�,@U�,@�,@U�,@-@U-@-@U-@X-@UZ-@�-@U�-@�-@U,.@<.@U@.@B.@UT(@�(@]�(@�*@]�*@~+@]�+@-@]-@�-@]�-@�-@],.@R.@]@(@p(@Tp(@�(@\�(@)@\:)@J)@\J)@N)@t3$�N)@^)@\^)@b)@t3$�b)@�)@\�)@�)@\�)@�)@t3$��)@*@\*@*@t3$�
*@,*@\8*@<*@\B*@j*@\v*@z*@\z*@�*@t3$��*@�*@\�*@�*@t3$��*@�*@\�*@�*@t���xM$!��*@�*@xM$t!��*@�*@tw!��*@+@xM$t!�+@"+@t���xM$!�"+@>+@\>+@D+@t3$�D+@r+@\�+@�+@\�+@,@\,@,@t3$�,@*,@\*,@.,@t3$�:,@\,@\f,@j,@\p,@�,@\�,@�,@t3$��,@�,@\�,@�,@t3$��,@�,@\�,@�,@\-@
-@\-@"-@\"-@$-@t3$�$-@*-@\*-@>-@t���xM$!�>-@B-@xM$t!�B-@F-@t|!�Z-@b-@t���xM$!�d-@�-@\�-@�-@\,.@0.@\0.@2.@t3$�2.@6.@\6.@@.@t3$�@.@L.@\L.@R.@t3$�D(@L(@ZL(@d(@	u	�$	�%�d(@�(@X�(@)@X:)@H)@XN)@\)@Xb)@�)@X�)@�)@X�)@*@X
*@8*@X8*@B*@[B*@r*@Xv*@�*@X�*@�*@X�*@+@Z+@+@x3%�+@+@Z+@"+@x3%�"+@,+@XD+@d+@X�+@�+@X�+@,@X,@.,@X:,@f,@Xf,@p,@[p,@�,@X�,@�,@X�,@�,@X-@-@X-@ -@X$-@.-@X.-@H-@WH-@N-@x3%�Z-@`-@W`-@d-@x3%�d-@~-@X�-@�-@X,.@..@X2.@4.@X8.@:.@X@.@H.@Xp(@�(@SD+@-@S-@,.@S8.@R.@Sp(@�(@Z�(@)@Z:)@L)@ZN)@`)@Zb)@x)@Z�)@�)@Z�)@�*@ZD+@l+@Z�+@�+@Z�+@�+@Z�+@,@Z,@�,@Zd-@�-@Z�-@�-@Z8.@@.@Zp(@�(@V�(@�(@V:)@�)@V�)@�)@V�)@�)@V�)@�)@V�)@*@V
*@�*@V�*@�*@V"+@*+@VD+@`+@V�+@�+@V�+@�+@V�+@�+@V�+@�+@V�+@2,@V:,@�,@V-@-@V-@.-@Vd-@�-@V�-@�-@V,.@R.@Vt(@�(@Y�(@)@Y:)@�)@Y�)@�)@W�)@�)@Y�)@�*@Y�*@�*@Y�*@�*@y3%��*@�*@Y"+@r+@Y�+@�+@Y�+@�+@W�+@�+@Y�+@-@Y-@.-@Y.-@2-@y3%�2-@6-@Yd-@�-@Y�-@�-@Y,.@R.@Y+@+@3�H-@Z-@3��(@�(@U�(@+@U+@+@S+@D+@UJ+@�+@U,@,@S,@�,@S�,@-@U-@-@UH-@Z-@^r-@�-@U�-@8.@U8.@@.@S�(@�(@]�(@�(@Z�(@�(@
���(@)@])@:)@Z:)@�)@]�)@�*@Z�*@�*@0��*@�*@1��*@�*@Z�*@+@
��+@"+@
��"+@D+@ZJ+@r+@]r+@�+@Z�+@�+@],@,@Z,@�,@Z�,@�,@0��,@-@0�-@-@0�-@d-@
��d-@�-@]�-@&.@]&.@,.@Z,.@2.@0�2.@8.@
��8.@@.@Z@.@X.@
���(@�(@\�(@�(@W
)@)@V)@)@\)@ )@|1|1%!x���{O$!� )@$)@|1x���{O$!r!�$)@()@
|1vO$!r!�()@0)@vO$r!|!��)@�)@V*@
*@\�*@�*@V�*@�*@\�*@�*@v|��*@�*@V+@+@W+@+@\"+@*+@$|@K$"|v"@K$"+�x"y"O$|v"1%!�*+@,+@|@K$"v@K$"+�x"y"O$v1%!�,+@2+@|@K$"v@K$"+�x"O$v1%!�p+@r+@Vr+@�+@\�+@�+@V8,@:,@\�,@�,@V�,@-@T-@-@TH-@V-@TV-@Z-@\r-@z-@[z-@�-@|v��-@�-@[�-@�-@\�-@�-@[�-@�-@[�-@�-@0��-@,.@\R.@X.@W�(@�(@X�(@�(@	x���{��(@�(@X�(@�(@X
)@)@X)@)@	x���{�)@$)@x���{1%�$)@:)@v1%��)@�)@X*@
*@X�*@�*@X+@+@Z+@+@X"+@*+@|@K$"|v"@K$"+�x"y"1%�*+@,+@|@K$"v@K$"+�x"y"1%�,+@2+@|@K$"v@K$"+�x"1%�p+@z+@Xz+@�+@T�+@�+@X8,@:,@X�,@�,@Y�,@-@W-@-@WH-@J-@WR-@Z-@Xr-@�-@T�-@�-@X�-@�-@T�-@�-@T�-@.@X.@".@0�".@,.@XR.@T.@X�(@�(@S�(@�(@S�(@)@W)@)@s�:)@>)@WN)@R)@Sb)@l)@Sl)@�)@W�)@�)@W�)@�)@w��)@�)@W�)@�)@S�)@�)@s��)@�)@s��)@*@[
*@$*@[B*@T*@s�T*@b*@[b*@f*@{�v*@�*@[�*@�*@S�*@+@S+@+@[+@D+@S,.@8.@S�(@)@V�)@�)@V*@*@\<*@B*@\�*@�*@V"+@*+@|v"�*+@2+@VF+@J+@^J+@Z+@[Z+@h+@Wh+@r+@{��+@�+@W�+@�+@[�+@�+@W�+@�+@w��+@�+@W�+@,@[,@,@{�,@",@{�",@.,@[:,@T,@[p,@|,@{�|,@�,@~��,@�,@[�,@�,@{��,@�,@[�,@�,@^�,@-@[-@-@[-@h-@[h-@�-@^�-@�-@^@.@R.@[`+@r+@V�+@�+@V*,@.,@\j,@p,@\�,@-@T-@-@T�,@-@\h-@z-@[z-@�-@|v��-@�-@[z-@�-@[�-@�-@W�-@�-@Z�-@�-@wx��-@�-@V�-@�-@Z�-@.@V.@.@v�".@&.@Z&.@,.@wx��*@�*@V`.@l.@T�U�l.@�.@��%�`.@�.@V�W��.@�.@��%��.@�.@V�W��.@�.@��%�d.@l.@Tl.@�.@[~.@�.@V�.@�.@]�.@�.@V�.@�.@]�.@/@T�U�/@^/@��%�^/@�/@T�U��/@&2@��%��.@�.@V�W��.@^/@��%�^/@z/@V�W�z/@�/@��%��/@�/@V�W��/@&2@��%��.@/@0�^/@�/@0�/@/@0�/@^/@]�/@P0@]>1@^1@]l1@n1@]~1@�1@]2@2@]�.@\0@U>1@R1@Ul1@z1@U~1@�1@U2@2@U�.@�.@	u	�$	�%�/@B/@Z�/@D0@Z�.@/@T/@^/@X^/@�/@T�/@�/@X�/@�/@T�/@�/@0��/@�/@T�/@X0@X>1@^1@Xl1@n1@X~1@�1@X2@2@X�.@�.@[�.@�.@{@@$!��.@�/@[�/@�/@[�/@�/@[�/@�/@[�/@�0@[>1@V1@[l1@n1@[~1@�1@[2@2@[:/@</@0�</@^/@SD0@H0@S>1@f1@Sl1@z1@S~1@�1@S2@2@S/@/@wO%��/@"0@wO%�20@<0@wO%�/@/@	w	�$	�%�:/@>/@V�/@"0@	w	�$	�%�20@<0@	w	�$	�%�/@:/@\:/@^/@Y�/@0@\0@0@Y0@ 0@\ 0@"0@0�"0@D0@\D0@`0@Y>1@f1@Yl1@z1@Y~1@�1@Y2@2@Y/@ /@T /@./@t@@$!�2/@^/@T�/@0@T0@0@	w	�$	�%�0@0@T0@ 0@	w	�$	�%� 0@40@T40@<0@	w	�$	�%�<0@>0@TD0@�0@T>1@B1@Tl1@z1@T~1@�1@T2@2@TD0@�0@0�n1@z1@]�1@�1@0�J/@^/@RD0@Z1@R^1@l1@Rl1@n1@Un1@�1@R�1@2@R2@2@u~'�2@&2@RP/@^/@\D0@�0@\�0@<1@U>1@^1@\^1@f1@
��l1@z1@\~1@�1@\�1@�1@v��1@�1@U�1@�1@W�1@�1@�|��1@�1@0��1@�1@W�1@�1@w��1@2@�|�2@2@\ 2@$2@�|�$2@&2@
u|
���0@�0@X�0@�0@~9$z9$}!0.!u!��0@1@X1@1@w|�1@1@W1@1@X1@1@
x3%{M$!�1@ 1@x3%w!� 1@$1@xw!�(1@>1@X^1@f1@Xn1@|1@X�1@�1@X�1@�1@X�1@�1@v|��1@�1@V�1@�1@X�1@�1@X�1@2@X2@2@X 2@"2@X�0@1@[1@(1@{3%�(1@:1@W^1@f1@[n1@~1@[�1@�1@[�1@�1@W�1@2@[2@2@0� 2@"2@Wr/@v/@Zv/@z/@Yz/@�/@V�/@�/@R�/@0@V0@0@ru�0@"0@VX0@l0@SX0@�0@X`0@z0@U`0@�0@YP0@d0@]�Z�X0@l0@S�X�`0@z0@U�Y�h0@p0@_�W�l0@�0@Sp0@v0@x@K$"@K$"+��v0@�0@x@K$"@K$"+s@K$"�@K$"+!��z0@�0@U~0@�0@y@K$"�@K$"+���0@�0@y@K$"�@K$"+u@K$"~@K$"+!���0@�0@
z9$}!0.���1@�1@
z9$}!0.���0@�0@9��1@�1@9��0@�0@G��1@�1@G��0@�0@1��1@�1@1��0@�0@1��0@�0@4��1@�1@4��0@�0@z9$}!��0@�0@X�0@�0@z9$}!��1@�1@z9$}!��0@1@W�1@�1@V02@�2@T�U��2@�2@��%��2@3@T�U�3@:3@��%�:3@�3@T�U��3@�3@��%��3@�3@T�U��3@�3@��%��3@4@T�U�4@
4@��%�
4@(4@T�U�(4@B4@��%�B4@X4@T�U�X4@v4@��%�v4@�4@T�U��4@�4@��%��4@�4@T�U��4@5@��%�5@n5@T�U�n5@|5@��%�|5@�5@T�U��5@�5@��%��5@�5@T�U��5@�5@��%��5@*6@T�U�*6@66@��%�66@H6@T�U�H6@l6@��%�l6@�6@T�U��6@�6@��%��6@�6@T�U��6@7@��%�7@<7@T�U�<7@V7@��%�V7@^7@T�U�^7@`7@��%�`7@h7@T�U�h7@(8@��%�(8@N8@T�U�N8@T8@��%�02@j2@V�W�j2@T8@��%�02@�2@0��2@�4@0� 5@7@0�`7@.8@0�48@<8@0�d2@�2@U�2@�4@U�4@�4@U 5@n5@U|5@*6@U66@T6@Ul6@�6@U�6@�6@U�6@7@U7@7@U7@ 7@U"7@�7@U�7@�7@U(8@88@U<8@>8@UX2@�2@]�2@�4@]�4@z5@]|5@7@]7@�7@]�7@�7@](8@N8@]02@h2@Th2@�2@S�2@3@S:3@J3@SJ3@N3@t3$�N3@^3@S^3@b3@t3$�b3@�3@S�3@�3@S�3@�3@t3$��3@4@S4@4@t3$�
4@,4@S84@<4@SB4@j4@Sv4@z4@Sz4@�4@t3$��4@�4@S�4@�4@t3$��4@�4@S�4@�4@t���xM$!��4@�4@xM$t!��4@�4@tw!��4@5@xM$t!�5@ 5@t���xM$!� 5@<5@S<5@B5@t3$�B5@n5@S|5@�5@S�5@6@S6@6@t3$�6@&6@S&6@*6@t3$�66@X6@Sb6@f6@Sl6@�6@S�6@�6@t3$��6@�6@S�6@�6@t3$��6@�6@S�6@�6@S7@7@S7@7@S7@"7@t3$�"7@(7@S(7@<7@t���xM$!�<7@@7@xM$t!�@7@D7@ts!�V7@^7@t���xM$!�`7@�7@S�7@�7@S(8@,8@S,8@.8@t3$�.8@28@S28@<8@t3$�<8@H8@SH8@N8@t3$�42@<2@Z<2@d2@	u	�$	�%�d2@�2@X�2@3@X:3@H3@XN3@\3@Xb3@�3@X�3@�3@X�3@4@X
4@84@X84@B4@[B4@r4@Xv4@�4@X�4@�4@X�4@5@U5@5@x3%�5@5@U5@ 5@x3%� 5@*5@XB5@`5@X|5@�5@X�5@6@X6@*6@X66@b6@Xb6@l6@[l6@�6@X�6@�6@X�6@�6@X7@7@X7@7@X"7@,7@X,7@F7@WF7@L7@x3%�V7@\7@W\7@`7@x3%�`7@z7@X�7@�7@X(8@*8@X.8@08@X48@68@X<8@D8@Xx2@T8@\h2@�2@Z�2@3@Z:3@L3@ZN3@`3@Zb3@x3@Z�3@�3@Z�3@�4@ZB5@h5@Z|5@�5@Z�5@�5@Z�5@6@Z6@�6@Z`7@�7@Z�7@�7@Z48@<8@Zh2@�2@V�2@�2@V:3@�3@V�3@�3@V�3@�3@V�3@�3@V�3@4@V
4@�4@V�4@�4@V 5@(5@VB5@\5@V|5@�5@V�5@�5@V�5@�5@V�5@�5@V�5@.6@V66@�6@V7@7@V7@,7@V`7@~7@V�7@�7@V(8@N8@Vh2@�2@Y�2@3@Y:3@�3@Y�3@�3@W�3@�3@Y�3@�4@Y�4@�4@Y�4@�4@y3%��4@�4@Y 5@n5@Y|5@�5@Y�5@�5@W�5@�5@Y�5@7@Y7@,7@Y,7@07@y3%�07@47@Y`7@�7@Y�7@�7@Y(8@N8@Y5@5@3�F7@V7@3��2@�2@U�2@�4@U5@5@[ 5@B5@UF5@�5@U�5@6@\6@�6@\�6@�6@U7@7@UF7@V7@[n7@�7@U�7@48@U48@<8@\�2@�2@]�2@�2@Z�2@�2@
���2@3@]3@:3@Z:3@�3@]�3@�4@Z�4@�4@0��4@�4@1��4@�4@Z�4@5@
��5@ 5@
�� 5@B5@ZF5@n5@]n5@|5@Z|5@�5@]�5@6@Z6@�6@Z�6@�6@0��6@�6@0�7@7@0�7@`7@
��`7@�7@]�7@"8@]"8@(8@Z(8@.8@0�.8@48@
��48@<8@Z<8@T8@
���2@�2@S�2@�2@W
3@3@V3@3@S3@ 3@s1s1%!x���{O$!� 3@$3@s1x���{O$!{!�$3@(3@
s1vO$!{!�(3@03@vO${!s!��3@�3@V4@
4@S�4@�4@V�4@�4@S�4@�4@v|��4@�4@V5@5@W5@5@S 5@(5@$s@K$"sv"@K$"+�x"y"O$sv"1%!�(5@*5@s@K$"v@K$"+�x"y"O$v1%!�*5@05@s@K$"v@K$"+�x"O$v1%!�l5@n5@Vn5@|5@S�5@�5@V46@66@S�6@�6@V�6@�6@T7@7@TF7@T7@TT7@V7@Sn7@v7@[v7@~7@sv��7@�7@[�7@�7@S�7@�7@[�7@�7@[�7@�7@0��7@(8@SN8@T8@W�2@�2@X�2@�2@	x���{��2@�2@X�2@�2@X
3@3@X3@3@	x���{�3@$3@x���{1%�$3@:3@v1%��3@�3@X4@
4@X�4@�4@X5@5@U
5@5@X 5@(5@s@K$"sv"@K$"+�x"y"1%�(5@*5@s@K$"v@K$"+�x"y"1%�*5@05@s@K$"v@K$"+�x"1%�l5@v5@Xv5@|5@T�5@�5@X46@66@X�6@�6@Y�6@�6@W7@7@WF7@H7@WP7@V7@Xn7@�7@T�7@�7@X�7@�7@T�7@�7@T�7@8@X8@8@0�8@(8@XN8@P8@X�2@�2@[�2@�2@[�2@3@W3@3@{�:3@>3@WN3@R3@[b3@l3@[l3@�3@W�3@�3@W�3@�3@w��3@�3@W�3@�3@[�3@�3@{��3@�3@{��3@4@[
4@$4@[B4@N4@{�N4@b4@[b4@f4@{�v4@�4@[�4@5@[5@45@[(8@48@[�2@3@V�3@�3@V4@4@S<4@B4@S�4@�4@V 5@(5@sv"�(5@05@VB5@V5@}z�V5@d5@Wd5@n5@{�|5@�5@W�5@�5@}z��5@�5@W�5@�5@w��5@�5@W�5@�5@}z��5@6@{�6@6@{�6@*6@[66@P6@[l6@x6@{�x6@�6@[�6@�6@{��6@�6@[�6@�6@}z�`7@�7@}z��7@�7@}z�\5@n5@V�5@�5@V&6@*6@Sf6@l6@S�6@�6@T7@7@T�6@�6@Sd7@v7@[v7@~7@sv��7@�7@[v7@�7@[�7@�7@W�7@�7@Z�7@�7@wx��7@�7@V�7@�7@Z�7@
8@V
8@8@v�8@"8@Z"8@(8@wx��4@�4@V`8@p8@T�U�p8@�8@��%�j8@p8@Tp8@�8@Y�8@�8@T�8@�8@Y�8@�8@Tn8@�8@X�8@�8@W�8@�8@W�8@�8@0��8@�8@@K$��8@�8@T�8@�8@T�8@�8@0��8@�8@y0.���8@�8@T�U��8@09@��%��8@�8@T�8@9@X9@9@T9@$9@X$9@&9@T&9@09@X�8@9@Y9@9@W9@9@
w
3v%�9@9@Y9@$9@W$9@&9@0�&9@09@Y9@9@0��8@9@0�9@&9@x0.��09@<9@T<9@�9@�T��9@�9@T�9@�9@�T�:9@�9@XN9@r9@Vv9@�9@VN9@�9@T�9@�9@0�N9@^9@0�^9@r9@Wv9@�9@0��9@�9@W29@<9@T<9@B9@�T�B9@b9@Tv9@�9@T�9@�9@�TO&�T'�TO&�J9@b9@Yv9@�9@Y�9@�9@T�9@�9@�T��9@�9@T�9@�9@�T��9@�9@T�9@�9@�T��9@�9@0��9@�9@V�9@�9@V�9@�9@T�9@�9@0��9@�9@0��9@�9@W�9@�9@0��9@�9@W�9@�9@T�9@�9@T�9@�9@�T��9@�9@X�9@�9@X2#@�#@�#@�%@�#@�#@�#@J$@R$@V$@b$@n$@v$@�$@%@%@%@4%@8%@�%@0#@�%@�%@\&@^&@:(@6&@V&@t&@�&@�&@�&@�&@('@n'@r'@v'@�'@�'@�'@�'@�'@�%@<(@@(@D(@P(@T(@`(@d(@�)@�)@�+@�+@D(@H(@X(@`(@�(@�(@�(@>)@N)@R)@b)@�)@�)@�)@�)@�*@�*@D+@�(@)@)@)@�)@�)@�)@�)@*@*@8*@B*@&+@0+@2+@6+@�(@�(@>)@N)@R)@b)@D+@�+@�+@,@,@-@$-@,.@8.@R.@\+@h+@l+@r+@v+@�+@�-@�-@�-@,.@�+@�+@�+@�+@.,@2,@4,@8,@f,@p,@�,@�,@-@-@�,@�,@�,@-@v-@�-@�-@�-@�(@�(@�*@�*@R.@X.@@(@X.@b.@h.@l.@p.@x.@|.@p.@x.@|.@�.@`.@�.@�.@�.@�.@�.@�/@�/@/@/@f/@�/@/@/@*0@,0@~1@�1@�1@�1@:/@</@�/@"0@D0@�0@�0@�0@D0@H0@T0@X0@P0@T0@d0@h0@`0@d0@h0@p0@r0@v0@�0@�0@�0@�0@�0@�0@p0@r0@v0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@�0@z1@~1@�1@2@ 2@&2@�.@&2@02@42@T2@X2@`2@d2@�3@�3@�5@�5@42@82@D2@L2@�2@�2@�2@>3@N3@R3@b3@�3@�3@�3@�3@�4@�4@B5@�2@3@3@3@�3@�3@�3@�3@4@4@84@B4@$5@.5@05@45@�2@�2@>3@N3@R3@b3@B5@�5@�5@6@6@7@7@(8@48@N8@X5@d5@h5@n5@r5@|5@�7@�7@�7@(8@�5@�5@�5@�5@*6@.6@06@46@b6@l6@�6@�6@7@7@�6@�6@�6@�6@r7@~7@�7@�7@�2@�2@�4@�4@N8@T8@02@T8@`8@d8@j8@n8@p8@t8@�8@�8@�8@�8@`8@�8@�8@�8@�8@�8@�8@�8@�8@9@9@&9@�8@09@09@b9@v9@�9@29@b9@v9@�9@<9@@9@F9@N9@09@�9@�9@�9@�9@�9@�9@�9@�9@�9@�9@�9@	GNUgold 1.14������%�E@8��A
E�B��Rp@g��y�@�����@��B���A	�����@�B��A3�@7�@<�@A�@F�@K�@P����Y@_@c@_@l<@vV@_^@_`@�@��9@�`@�`@������`@g���b@�������X@ ���3�@<L@�6@�@�|@��@��@�0@��@�V@B@>@
�@f@l@������@g��#�@"�����@��@2��9����B��KB�M�BQ����\0@Dg��bt@>���i�@���m�@�u�@z�@�@��@�@�.@V@z@�@�F@����r@P�����@|��;@��P@�"@��@��@��	@�t@�~
@��@��	@�8
@��	@�@	�
@�	@�	@�	@!�	@'�@-�;@5:@;��MV@�8@�n@3Z@�@x@�~@Qz@<�@U�@Zp:@_�@d&@iN@nr@s�@x�@}�@�@�d@��@��@�@�F@�@�n@�H@��@��@��@�@�>@��@��@��@��@�@�@�>@�*@�p@��@x@
�@�@�@2@" 	@(�@.�@42	@:6	@@�@F	@LP	@Rv	@X~	@^�	@d�:@j�;@p

@v�
@|�
@��
@�
@��@��@��@�0@�4@�@�X@��@��@�P@�4
@�@�$@�Z
@��
@��
@��
@�J@��@�@@@@�@2@V@$�@*L@0�@6�@<�@B�@H�@N�@T�@ZN@`�@fx@l�@r�@x�@~�@�b@�@��@��@��@��@��@�2@�j@�@��@��@�8@��@�&@�,@� @�b@�r@�|@��@�@�@�@�@@ @&T	@,R	@2@8@>0@D\@Jb	@Pz@V|@\�@b@h�@n�@t�@z�@�	@�(@�	@�4@�j@�Z	@�
@��
@��	@�f
@�B
@��
@��
@��@��
@��@��@��@�@�t@��@�@�@
F@p@�@�@"�@(|
@.@4�@:�@@�@F�@L�@R�@X�@^<@d�@j�@pn@v�@|d@�@�j@��@��@��@��@�(@�H@��@��@�@��@��@��@�z@�D@��@�t@��@�@��@�@�@�@�@������@!�@&J@�@7X@*@u�@A�@�@/�@4�@�J@��@9�@�@�V@�@��@Q�@��@��@>�@F@M$@Z�@C�@H�@��@M������@��@V������@`��l����g�����yR@��B�B���@��@3B@&,@�@�t@��@�`@7�@<@�"@Q|@
�@������������D@X��=@g���X@&`@QL@MB@�P@�������@�������@g�����������������@�����g���@�@�@3�@Q^@	�����`@g��	����M�@$	������@5	����g���@�*@(@uF@M@3�@&J@Hz@F�@K�@>	����30@&@�L@M�@uH@��@�@�@Q(@�B@G	8@L	����`	�����|@��@3�@&r@��@�@��@�@7�@i	����Q�@w	����M> @&: @�6 @	�����v @�n @3� @&� @�!@Q� @�r @�� @�	����&�!@Qn!@��!@3�!@�j!@�^!@�	����g����!@�	�����	"@@g���	B�"@�""@�>"@�P"@QJ"@�	�����	 B�	(Bg���	����g��M�"@��"@��"@&�"@�	����*
0#@_0#@0
0#@6
0#@B
2#@H
2#@O
6#@U
8#@[
8#@g
<#@s
@#@
D#@�
N#@�
V#@�
Z#@�
^#@�
^#@�
^#@�
f#@�
n#@�
r#@�
v#@�
z#@�
|#@�
�#@�
�#@�
�#@�
�#@�
�#@�
�#@�#@
�#@�#@�#@�#@&�#@-�#@4�#@@�#@G�#@N�#@U�#@\�#@c�#@o�#@{�#@��#@��#@��#@��#@4�#@��#@��#@��#@�$@�$@�
$@�"$@�&$@�*$@�.$@�2$@�:$@�<$@�J$@J$@J$@N$@R$@!R$@(V$@/V$@6Z$@=b$@Db$@Kf$@Rn$@Yn$@`r$@gv$@nv$@uv$@�z$@�~$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@��$@
�$@
�$@
�$@%
�$@1
�$@=
�$@D
�$@K
�$@R
�$@^
�$@e
�$@l
�$@s
%@z
%@�
%@�
%@�
%@�
%@�
%@�
%@�
4%@�
8%@�
8%@�
8%@�
<%@�
F%@�
H%@�
d%@�
h%@�
l%@�
p%@t%@	v%@~%@�%@!�%@)�%@1�%@9�%@@�%@G�%@S�%@[�%@R
�%@[�%@g�%@s�%@[�%@{�%@��%@��%@��%@��%@��%@��%@��%@��%@��%@��%@��%@��%@��%@_�%@��%@_�%@��#@��#@
�#@��#@$@��$@�$@��%@7�$@��%@<X%@��%@A�%@&�#@M�$@�^#@QJ$@��#@z�$@�	����*
�%@_�%@0
�%@H
�%@�%@B
�%@O
�%@[
�%@g
�%@s
�%@U
�%@�%@�%@
�%@�
�%@�
�%@�
�%@�
�%@�
�%@�
&@�
&@�
&@�
&@�
&@�
&@'2&@.6&@&6&@-6&@46&@5B&@�
V&@GV&@<V&@\&@N\&@
^&@H^&@c^&@ob&@d&@h&@l&@Ol&@[p&@@t&@�t&@4t&@U|&@{�&@��&@��&@��&@��&@��&@��&@�&@g�&@s�&@z�&@��&@��&@��&@!�&@��&@/�&@��&@D�&@u�&@��&@��&@��&@��&@��&@�&@(�&@6�&@=�&@K'@R'@`'@g'@�'@� '@�"'@�&'@�('@Y('@
('@
,'@�0'@%
0'@1
4'@�<'@n<'@�<'@�@'@�B'@�F'@�J'@�L'@�N'@K
N'@�V'@�Z'@�^'@�f'@�n'@�
n'@�
r'@�
v'@�
�'@��'@�
�'@9�'@��'@@�'@�
�'@��'@��'@^
�'@e
�'@l
�'@s
�'@z
�'@�
�'@�
�'@�
�'@�
�'@�
�'@��'@��'@G�'@��'@��'@��'@�
(@[(@\(@�(@�
(@�
(@�
(@(@�(@	(@"(@&(@�*(@�2(@!6(@�:(@:(@:(@_<(@�<(@_<(@M('@�^&@��%@�*&@
R&@�h&@Q�&@�&@��&@"'@�\&@�N'@A<'@uJ'@Z�'@C�'@H(@F(@6&@�t&@����Y@(@_@(@0
@(@`@(@f@(@B
D(@pD(@vD(@|H(@O
L(@�P(@U
T(@�T(@�X(@�`(@�`(@
d(@�d(@�
p(@�
t(@�
v(@�~(@�
�(@��(@��(@�
�(@�
�(@��(@��(@�
�(@��(@��(@�
�(@��(@��(@�
�(@�
�(@��(@��(@��(@�
�(@��(@�
�(@'�(@��(@.�(@5�(@��(@�
�(@�
�(@��(@�
�(@��(@��(@
�(@�(@��(@��(@�(@H
�(@��(@�(@@)@U)@N)@{)@�)@�
)@�)@�)@�)@�)@�)@�)@�)@� )@�$)@�()@�0)@�:)@�:)@s>)@>)@>)@�>)@zH)@�J)@�L)@�N)@N)@N)@�N)@�R)@R)@#R)@�R)@�\)@�^)@�`)@�b)@*b)@1b)@�l)@�l)@�p)@�t)@x)@�)@(�)@6�)@=�)@!�)@K�)@R�)@`�)@/�)@8�)@?�)@F�)@M�)@D�)@g�)@��)@Y�)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@��)@T�)@[�)@��)@e�)@��)@��)@K
�)@��)@�*@�*@�*@�
*@�*@�*@�
*@�
*@�
*@�*@�*@�*@
$*@=
(*@D
,*@^
8*@�
8*@e
<*@l
B*@9B*@�B*@�F*@z
T*@�T*@�
X*@�^*@�
b*@�
f*@�
j*@�
r*@�
v*@�
z*@��*@��*@��*@��*@��*@��*@��*@��*@��*@�
�*@�
�*@�
�*@�
�*@��*@�*@3�*@	�*@l�*@s�*@��*@z�*@��*@�*@�*@��*@��*@��*@��*@��*@��*@��*@!�*@)�*@��*@1�*@S�*@s�*@��*@��*@��*@��*@�+@�+@�+@�+@�+@�+@�+@�+@�+@�"+@�"+@�&+@�&+@�*+@�,+@�0+@�2+@�2+@�6+@�>+@�D+@D+@	D+@�D+@F+@J+@�J+@�N+@�V+@ Z+@(\+@�\+@/`+@7d+@?h+@Gh+@Nl+@Vl+@]p+@er+@mr+@�r+@tv+@�v+@{z+@�~+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@��+@�+@�+@�+@�+@"�+@��+@��+@*�+@��+@2�+@:�+@��+@B�+@J�+@R�+@Z�+@b�+@j�+@r�+@��+@z,@�,@�,@�,@�,@�,@�,@�,@�,@[,@�,@�,@�,@�,@�",@�&,@�&,@�*,@�.,@�.,@�.,@�2,@�2,@�4,@�8,@8,@
:,@�:,@�>,@�B,@�F,@L,@T,@"X,@*\,@2f,@:f,@Aj,@Ip,@Qp,@�p,@�t,@X|,@`�,@��,@h�,@��,@p�,@x�,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@��,@�,@
�,@�,@�,@$�,@+-@3-@:-@B-@�-@J
-@�-@R-@Z-@a-@i-@p-@�-@�-@x-@[-@ -@�"-@�$-@�$-@�$-@�*-@�*-@�.-@�2-@�6-@�:-@�>-@�B-@�F-@�H-@�J-@�N-@�R-@�V-@�X-@Z-@�Z-@`-@b-@d-@&d-@�d-@-h-@5l-@=r-@Ev-@�v-@Lz-@T~-@\�-@d�-@k�-@s�-@z�-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@��-@�
.@.@.@�.@.@.@&".@�".@.&.@6,.@>,.@E,.@[,.@L..@T0.@\2.@d4.@l6.@t8.@|8.@�:.@�<.@�@.@�@.@�B.@�H.@�L.@�R.@�R.@�R.@�T.@�X.@_X.@Ql)@u*@�)@��+@�>,@G	r+@s�-@x�*@�X.@_X.@MD+@��)@�N)@}�(@��(@��(@�b)@��)@�)@
�)@7�*@<B*@��)@��(@A
*@R�)@Cv*@HT*@Kf*@�"+@��*@�+@�+@�+@�>)@�+@��+@�R)@_�+@��,@�p,@�,@�8.@�:,@j,@��,@�,@�,@
d-@d-@��,@i-@�-@�$-@�Z-@��-@�-@".@9�-@>.@��(@&R.@&:)@+@�)@@�)@��)@*@F8*@tr*@%,.@*2.@�+@!�(@4�+@��+@�+@/,@�-@(.,@4f,@"�,@9-@U@.@.+@nH-@>�-@F�,@C�-@H����Y`.@_`.@0
`.@f`.@`b.@B
d.@ph.@O
l.@vl.@|p.@�p.@�x.@�x.@�|.@�|.@�
~.@��.@[�.@[�.@[�.@�
�.@��.@�
�.@[�.@[�.@�
�.@[�.@[�.@[�.@[�.@[�.@[�.@_�.@��.@M�.@7�.@3�.@��.@�.@�����Y�.@_�.@0
�.@`�.@f�.@B
�.@p�.@v�.@��.@O
�.@|�.@U
�.@
�.@�
�.@�
�.@�
/@�
/@�/@�/@�
/@�/@�/@�
/@�
/@�/@�
/@�
 /@�
./@�
2/@�
:/@�:/@'</@</@�</@.>/@5B/@�
J/@�
P/@��1@C~1@Hn1@�2@Kl1@�>1@�
^/@�^/@�f/@�f/@�n/@�
r/@v/@�v/@
z/@�~/@�/@�/@�/@��/@@�/@U�/@{�/@��/@��/@�
�/@��/@&�/@��/@��/@��/@��/@��/@[�/@-�/@[�/@��/@[�/@��/@[�/@�0@s0@z0@�0@[0@�0@� 0@�"0@G"0@["0@�*0@[*0@,0@�20@�40@�<0@�>0@�D0@!D0@DD0@nD0@�D0@�H0@�H0@K
H0@P0@�
P0@�
T0@�
T0@X0@�
X0@�
X0@(\0@6`0@@`0@=d0@�d0@�d0@Kh0@
h0@\h0@Rl0@`p0@�p0@�p0@r0@r0@gv0@"v0@Hv0@�z0@�~0@��0@�0@��0@��0@��0@��0@)�0@��0@0�0@��0@��0@��0@7�0@��0@>�0@��0@��0@(�0@G�0@Y�0@t�0@E�0@L�0@��0@S�0@V�0@m�0@Z�0@a�0@h�0@��0@��0@��0@o�0@v�0@}�0@��0@��0@��0@��0@��0@��0@��0@��0@��0@��0@�0@��0@��0@�1@�1@�1@�1@�1@�1@�1@�1@�1@
 1@=
$1@D
(1@�(1@e
:1@l
<1@s
>1@z
B1@�
R1@�
V1@�
Z1@�
^1@�
f1@�
l1@�
n1@�n1@�z1@�z1@�|1@�~1@�~1@�~1@[~1@�
�1@��1@�
�1@�
�1@��1@[�1@�
�1@�1@�1@��1@	�1@�1@$�1@��1@�1@��1@��1@��1@��1@!�1@��1@��1@��1@)�1@1�1@S�1@s�1@��1@��1@��1@��1@��1@��1@��1@��1@��1@��1@��1@��1@�2@�2@�2@32@�2@�2@�2@�2@�2@� 2@Z 2@� 2@�"2@�$2@i&2@_&2@�&2@_&2@�^/@��/@AD0@ZLE@��/@&v/@��/@��/@_20@<0@�<0@/�1@�1@/1@41@�2@F^1@��0@�z1@G	�1@�1@4 2@z�1@��/@"0@}/@Q�/@�/@7�/@�:/@�0@</@(1@��1@��1@!f1@�����Y02@_02@0
02@`02@f02@B
42@p42@v42@|82@O
<2@�D2@�L2@�T2@U
X2@�X2@�`2@
d2@�d2@�
h2@�
j2@�j2@�n2@�
x2@��2@�
�2@��2@��2@�
�2@��2@��2@�
�2@��2@��2@�
�2@��2@��2@�
�2@�
�2@��2@��2@��2@�
�2@��2@�
�2@�
�2@��2@'�2@.�2@��2@5�2@�
�2@��2@�
�2@��2@��2@�2@
�2@��2@��2@�2@H
�2@��2@�2@3@@3@N3@U3@�3@{
3@�3@�3@�3@�3@�3@�3@�3@� 3@�$3@�(3@�03@�:3@�:3@�>3@>3@>3@�>3@sH3@zJ3@�L3@�N3@N3@N3@�N3@�R3@R3@#R3@�R3@�\3@�^3@�`3@�b3@*b3@1b3@�l3@�l3@�p3@�t3@�x3@�3@�3@(�3@6�3@!�3@=�3@K�3@R�3@/�3@8�3@?�3@F�3@M�3@D�3@`�3@g�3@Y�3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@��3@T�3@[�3@��3@e�3@��3@��3@K
�3@��3@�4@�4@�4@�
4@�4@�4@�
4@�
4@�
4@�4@�4@�4@�$4@
(4@=
,4@D
84@�
84@^
<4@e
B4@9B4@�B4@�F4@l
N4@�T4@z
X4@�^4@�
b4@�
f4@�
j4@�
r4@�
v4@�
z4@�
�4@��4@��4@��4@��4@��4@��4@��4@��4@��4@�
�4@�
�4@�
�4@��4@�
�4@��4@�4@l�4@s�4@��4@z�4@��4@	�4@�4@�4@��4@��4@��4@��4@��4@��4@��4@!�4@��4@)�4@1�4@S�4@��4@s�4@��4@��4@�5@�5@�5@�
5@�5@�5@�5@�5@�5@� 5@� 5@�$5@�$5@�(5@�*5@�.5@�05@�05@�45@�45@�<5@�B5@B5@	B5@�B5@F5@�F5@�J5@�R5@V5@(X5@�X5@ \5@/`5@7d5@Gd5@?h5@Vh5@Nl5@]n5@mn5@�n5@tr5@�r5@ev5@{z5@�|5@�|5@�|5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@��5@�5@�5@�5@�5@"�5@��5@��5@*�5@��5@2�5@:�5@��5@B�5@J�5@R�5@Z�5@b�5@j�5@r�5@��5@z�5@��5@�6@�6@�6@�6@�6@�6@�6@[6@�6@�6@�6@�6@�6@�"6@�"6@�&6@�*6@�*6@�*6@�.6@�.6@�06@�46@46@
66@�66@�:6@�>6@�B6@H6@P6@"T6@*X6@2b6@:b6@Af6@Il6@Ql6@�l6@�p6@Xx6@�~6@`�6@��6@h�6@p�6@x�6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@��6@�6@
�6@�6@$�6@�6@3�6@+7@:7@�7@B7@�
7@J7@Z7@R7@i7@a7@�7@�7@x7@p7@7@�7@�7@� 7@�"7@�"7@�(7@�(7@�,7@�07@�47@�87@�<7@�@7@�D7@�F7@�H7@�L7@�P7@�T7@�V7@�V7@\7@^7@`7@&`7@�`7@d7@-h7@5n7@Er7@�r7@=v7@Lz7@T~7@d~7@\�7@s�7@k�7@��7@��7@z�7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@��7@�8@�
8@8@�8@8@8@8@�8@&"8@�(8@>(8@E(8@[(8@6*8@L,8@T.8@\08@d28@l48@|48@t68@�88@�<8@�<8@�>8@�D8@�H8@�N8@�N8@�N8@�P8@�T8@_T8@�l3@C4@�3@�5@�:6@zn5@>�7@}�4@�T8@_T8@Mt2@�B5@��3@3N3@��2@��2@�2@b3@�3@
�3@<�3@��4@AB4@��3@��2@Z
4@�3@Fv4@KT4@�f4@� 5@�4@5@/�5@4�5@J>3@��5@_�5@XR3@��5@/�6@�l6@6@48@�66@6@4�6@~6@d�6@�`7@i7@��6@n7@��7@�"7@�V7@��7@�7@>8@x�7@�8@�x2@&�2@N8@Q:3@�5@7�3@(�3@u�3@.4@�84@r4@!(8@�.8@5@��2@�|5@��5@��5@�6@��6@�*6@
b6@F�6@U7@�<8@:5@sF7@C�7@L�6@9�7@&����Y`8@_`8@0
`8@``8@f`8@pd8@B
j8@vj8@O
n8@|n8@U
p8@�p8@�t8@mt8@mx8@�
�8@m�8@�
�8@�
�8@��8@m�8@�
�8@�
�8@m�8@�
�8@m�8@m�8@�
�8@��8@�
�8@��8@m�8@�
�8@��8@_�8@��8@_�8@��8@��8@��8@��8@w����Y�8@_�8@0
�8@`�8@f�8@p�8@B
�8@v�8@O
�8@|�8@U
�8@��8@��8@m�8@m�8@m�8@�
�8@��8@m�8@�
9@�
9@m9@�
9@�
9@�9@�
9@�9@�
$9@�
&9@�&9@m&9@�.9@_09@�09@�.9@39@�9@�&9@�����Y09@_09@0
09@`09@
09@09@B
29@v29@29@O
:9@U
<9@�<9@�@9@
B9@�F9@�
J9@�
N9@�N9@T9@�
^9@�
b9@|b9@pb9@�b9@�
r9@�
v9@v9@�v9@v9@�
�9@�
�9@�
�9@��9@�9@�
�9@%�9@_�9@��9@_�9@�v9@��9@Mb9@,����Y�9@_�9@0
�9@`�9@
�9@�9@B
�9@v�9@��9@�9@O
�9@U
�9@�9@
�9@�
�9@|�9@p�9@��9@�
�9@�
�9@�
�9@��9@��9@�9@�
�9@�
�9@�
�9@��9@�9@�
�9@��9@_�9@��9@_�9@��9@��9@M�9@��w�E@���A
��B
��@��@�#@$�0#@���%@l�@(@�`.@d�`.@d��.@V�02@$�`8@b	�8@`09@^"�9@P0�B<��AO��A`��A	s��A	��B
�0@�0@�P@� ��9@��@�@P�x@"� �   0 D�@@Kb@"Vd@�b�@�i�Bs0B@zpB�tB�R@�"��B��B�X@ "�@�@"@*��@"��@""��@��B!�B!3l:@:>@�CBQb@_�@2n�@*{�@l�0@�j@��@��@
��@�@���@F�&@:��@���B!��B!��B!��@@P@
@R@@*+�@5@@*"@�@"O�@] @Xc` @�k`@xr`@"~@!@|��!@2�\@:�\@:"��!@�@"@*"�p"@�B!�B! �"@0	 �"@ �"@: �B& �B2 xBcrt1.c__reloc_align__1crtstuff.c__EH_FRAME_BEGIN____JCR_LIST____TMC_LIST__deregister_tm_clones__reloc_align__2register_tm_clones__reloc_align__3__do_global_dtors_auxcompleted.4763__do_global_dtors_aux_fini_array_entry__reloc_align__4frame_dummyobject.4768__frame_dummy_init_array_entry.L6.L15.L16.L18.L23.L24llscwp.c.LFB0L0.Loc.3.1.Loc.15.1.Loc.16.1.Ltext0.LC0.Letext0.LFE0__libc_start_main.cdummydummy1libc_start_init__reloc_align__5.L25.L17.L4.L5.L26.L8.L10.L3.L12.L13.L14.L29.L28exit.clibc_exit_finilibc.cprintf.cstdout.cfbufvfprintf.cfmt_ugetintoutpop_arg.L19.L34.L35.L33.L27.L36.L37pad__reloc_align__6printf_corestates.L188.L309.L179.L180.L156.L173.L164.L174.L146.L161.L155.L176.L349.L153.L154.L151.L152.L106xdigits.L14__reloc_align__7.L2.L9.L99.L20.L38.L50.L52.L54.L56.L64.L66.L68.L72.L39.L74.L51.L53.L77.L55.L75.L57.L65.L67.L69.L73.L101.L104.L103.L307.L304.L112.L111.L114.L116.L119.L120.L121.L122.L129.L130.L131.L132.L134.L315.L139.L127.L136.L141.L144.L145.L423.L311.L148.L159.L168.L165.L320.L169.L178.L182.L325.L183.L185.L288.L189.L326.L350.L199.L201.L203.L204.L205.L207.L208.L209.L212.L218.L227.L237.L239.L241.L242.L257.L245.L247.L338.L341.L342.L344.L222.L224.L225.L230.L232.L234.L236.L250.L254.L256.L258.L260.L262.L346.L253.L267.L269.L270.L274.L280.L283.L286.L287.L272.L277.L279.L278.L285.L289.L297.L298.L291.L293.L295.L294.L424.L110.L105.L299.L302.L305.L113.L115.L143.L117.L118.L124.L421.L126.L123.L128.L422.L135.L417.L137.L138.L140.L142.L158.L170.L157.L163.L162.L167.L171.L322.L172.L175.L416.L181.L184.L190.L191.L352.L200.L331.L418.L195.L197.L202.L210.L213.L216.L219.L228.L238.L246.L343.L249.L226.L220.L221.L233.L229.L231.L240.L244.L248.L259.L265.L264.L419.L255.L263.L266.L268.L281.L420.L271.L275.L284.L296.L290.L301.L310.L425.L427.L428.L429.L430memcpy.c.L70.L7.L71.L30.L31.L62.L63.L21.L22memset.cstrnlen.c__environ.c__init_tls.cstatic_init_tlsmain_tlsbuiltin_tls.L1.L11__errno_location.cstrerror.cerriderrmsg_Exit.c__lctrans.cfrexpl.cwctomb.c__lockfile.c__stdio_close.c__stdio_seek.c__stdout_write.cfwrite.cmemchr.c.L32__set_thread_area.c__wait.csyscall_ret.cfrexp.cwcrtomb.c__stdio_write.c__towrite.c__stdio_exit.cclose_filedummy_fileofl.cofl_lockofl_head__lock.c/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/libgcc2.c.LFB4.LVL0.Loc.1287.1.LVL1.LBB13.LVL2.LVL3.Loc.1060.1.Loc.1062.1.Loc.1066.1.LVL4.LVL5.LVL6.LVL7.LVL8.LBB15.Loc.1078.1.LVL9.LVL10.LVL11.LVL12.LVL13.LVL14.LVL15.LVL16.LVL20.LVL21.LVL22.LVL23.LVL24.LVL25.LVL26.LVL27.LVL28.LBE15.LBB16.Loc.1120.1.LVL29.LBE16.LBE13.LVL30.LBB27.Loc.1087.1.Loc.1088.1.LVL31.LVL32.LVL33.LVL34.LBB17.LVL35.LVL36.LVL37.LVL38.LVL39.LVL40.LVL44.LVL45.LVL46.LVL47.LVL48.LVL49.LVL50.LVL52.LBE17.Loc.1110.1.LVL53.LVL54.LBB18.LVL55.LBE18.LVL56.LVL57.LBB19.LVL58.LVL59.LBE19.LVL60.LVL61.LBB20.Loc.1115.1.LVL62.LVL63.LVL64.LVL65.LVL66.LVL67.LVL70.LVL71.LVL72.LVL73.LVL74.LVL75.LVL76.LVL77.LVL78.LVL81.LVL83.LVL84.LBE20.Loc.1136.1.Loc.1155.1.LVL85.Loc.1156.1.Loc.1166.1.LVL86.LVL87.LBB21.Loc.1205.1.LVL88.LVL89.LVL90.LVL91.LVL92.LVL93.LVL94.LBB22.LBE22.LVL95.LBB23.LBE23.LVL96.LBB24.Loc.1196.1.LVL97.LVL98.LVL99.LVL103.LVL104.LVL105.LVL106.LVL107.LVL108.LVL109.LVL110.LVL113.LVL114.LVL115.LBE24.LBB25.Loc.1197.1.LVL116.Loc.1199.1.Loc.1194.1.LVL117.Loc.1201.1.LVL118.LVL119.LBE21.Loc.1141.1.LVL120.Loc.1140.1.LVL121.LVL122.Loc.1174.1.LVL123.Loc.1168.1.LVL124.LBE27.LFE4.Loc.1275.1.Loc.1068.1.Loc.1074.1.LVL17.LVL18.LVL19.Loc.1129.1.LBB30.Loc.1092.1.Loc.1101.1.Loc.1108.1.LVL41.LVL42.LVL43.LVL51.LVL68.LVL69.Loc.1169.1.LVL79.LVL80.LVL82.LBE25.LBB26.LVL100.LVL101.LVL102.Loc.1202.1.LBB28.LVL111.LVL112.LBE30.Loc.1280.1/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/adddf3.c.LBB2.Loc.36.1.LBE2.LBB3.LBE3.LBB5.LBE5.LBB7.LBE7.LBB8.LBE8.Loc.46.1.LBB12.LBE12.LBB35.LBE35.LBB67.Loc.47.1.LBE67.LBB71.LBB72.LBB14.LBE14.LBE72.LBB73.LBE73.LBB74.LBE74.LBB75.LBE75.LBB76.LBE76.LBB77.LBE77.LBB78.LBE78.Loc.45.1.LBB80.LBE80.LBB81.LBB70.LBE70.LBE81.LBB82.LVL125.LVL126.LVL127.LVL128.LVL129.LBB31.LVL130.LVL131.LBE31.LVL132.LBB33.LBE33.LVL133.LVL134.LBE82.LBB83.LVL135.LVL136.LVL137.LBB36.LVL138.LVL139.LVL140.LBE36.LVL141.LBB37.LVL142.LVL143.LBE37.LBB38.LVL144.LVL145.LVL146.LBE38.LVL147.LVL148.LVL149.LVL150.LVL151.LBB44.LVL152.LVL153.LVL154.LBE44.LBE83.LBB84.LBE84.LBB85.LBB45.LVL155.LVL156.LBE45.LVL157.LVL159.LVL160.LVL161.LVL162.LVL163.LVL164.LVL165.LVL166.LVL167.LVL168.LVL169.LVL170.LVL171.LVL172.LBE85.LVL173.LVL174.LBB87.LVL175.LBB47.LVL176.LVL177.LBE47.LBB48.LVL178.LBE48.LBB49.LVL179.LBE49.LVL180.LVL182.LVL183.LVL184.LVL185.LVL186.LBB51.LVL187.LVL188.LBE51.LVL189.LVL191.LVL192.LVL193.LVL194.LVL195.LVL196.LVL197.LVL198.LVL199.LVL200.LVL201.LVL202.LVL203.LVL204.LVL205.LVL206.LBB53.LVL207.LVL208.LBE53.LBB54.LVL209.LVL210.LVL211.LBE54.LBB55.LVL212.LBE55.LVL213.LVL214.LVL215.LVL216.LBB56.LVL217.LBE56.LVL218.LBE87.LVL219.LVL220.LVL221.LBB89.LVL222.LVL223.LVL224.LVL225.LVL226.LVL227.LVL228.LVL229.LVL230.LVL231.LVL232.LVL233.LVL234.LVL235.LVL236.LVL237.LVL238.LBB61.LVL239.LVL240.LVL241.LBB62.LVL242.LVL243.LVL244.LBE62.LVL245.LBB63.LVL246.LBE63.LBB64.LVL247.LVL249.LVL250.LVL251.LVL252.LVL253.LVL256.LBE64.LVL257.LVL258.LVL259.LVL260.LBB65.LVL261.LVL262.LVL263.LVL264.LVL265.LVL266.LVL267.LVL268.LVL270.LBE65.LBE89.LVL271.LVL272.LVL273.LVL274.LVL275.LVL276.LBB91.LVL277.LVL278.LVL279.LVL280.LVL281.LVL282.LVL283.LBE91.LBB92.LVL284.LBE92.L43.L87.L83.L40.L91.L94.L42.L45.L46.L48.L49.L102.L59.L61.L133.L78.L81.L41.L47.L97.L58.L60/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/eqdf2.c.LBB4.LBE4.LBB6.LBE6.Loc.49.1/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/muldf3.c.Loc.44.1.LBB11.LBE11.LBE26.LBE28.LBB29.LBE29.LBB32.LBE32.LBB34.LBE34.LBB39.LBE39.LBB42.LBE42.LBB43.LBB40.LBE40.LBB41.LBE41.LBE43.LBB50.L44/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/subdf3.c.LBB9.LBE9.LVL248.LVL255.LVL269.L89.L149.L85.L93.L96.L107.L80/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/fixdfsi.c.Loc.43.1/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/fixunsdfsi.c/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/floatsidf.c.Loc.37.1.Loc.41.1.LBB10.LBE10/scratch/mpf/overtest/64085/240198/shared/gcc/libgcc/soft-fp/floatunsidf.c__FRAME_END____JCR_END____dso_handle__syscall__syscall_ret__ashldi3__udivdi3__umoddi3__adddf3__eqdf2__nedf2__muldf3__subdf3__fixdfsi__fixunsdfsi__floatsidf__floatunsidf__TMC_END____init_array_start__init_array_end__fini_array_start__fini_array_end_gp__start_start_start_c_DYNAMIC_fini_initmain__libc_start_main_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__deregister_frame_info__register_frame_info_Jv_RegisterClassesprintf__init_ssp__init_libcmemset__environ__libc__hwcap__sysinfo__init_tls__progname_full__progname__libc_start_initexit__stdio_exit__funcs_on_exit__libc_exit_fini_Exitprogram_invocation_nameprogram_invocation_short_namestdoutvfprintf__stdout_used__stdio_close__stdout_write__stdio_seek__fwritex__errno_locationstrerrorstrnlenwctombfrexplmemcpy__lockfile__unlockfilememchrenviron_environ___environ__init_tp__set_thread_area__copy_tls__strerror_l__lctransstrerror_l__lctrans_impl__lctrans_curfrexpwcrtomb__wait__aio_close__stdio_write__towritefwritefwrite_unlocked__towrite_needs_stdio_exit__stdio_exit_needed__ofl_lock__stdin_used__stderr_used__lock__ofl_unlock__unlock_edata__bss_start_end.init_array.fini_array.debug_abbrev.text.comment.init.bss.nanoMIPS.abiflags.debug_aranges.debug_ranges.debug_str.eh_frame_hdr.jcr.debug_info.note.gnu.gold-version.fini.debug_line.eh_frame.debug_frame.tm_clone_table.debug_loc.shstrtab.strtab.symtab.sdata.rodata.data6�@�'@�8��9@�9�9@�9�Ap�E@�E��E@�E@|�E@�E��A��
��A�����A��B���B��B�<�B��-0�H��7+#,JTp;���<* q0]���h4�j�Mc��8����A
�h7 �/�%
Re: [Qemu-devel] [PATCH v5 45/76] target/mips: Implement emulation of nanoMIPS LLWP/SCWP pair
Posted by Richard Henderson 7 years, 3 months ago
On 08/03/2018 03:48 AM, Aleksandar Rikalo wrote:
>> > However, it looks there is a bigger problem now in SCWP. QEMU crashes with this message:
>> >
>> > /qemu/tcg/tcg.c:2862: tcg fatal error

I said remove all of the tcg_temp_local_new that were not necessary.
You removed one that was necessary.  This value is live across a branch.


r~


diff --git a/target/mips/translate.c b/target/mips/translate.c
index 8306986c86..b1525adff3 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -2473,7 +2473,7 @@ static void gen_st_cond
 static void gen_scwp(DisasContext *ctx, uint32_t base, int16_t offset,
                     uint32_t reg1, uint32_t reg2)
 {
-    TCGv taddr = tcg_temp_new();
+    TCGv taddr = tcg_temp_local_new();
     TCGv lladdr = tcg_temp_new();
     TCGv_i64 tval = tcg_temp_new_i64();
     TCGv_i64 llval = tcg_temp_new_i64();