author | shihong.zheng <shihong.zheng@amlogic.com> | 2020-04-01 02:51:28 (GMT) |
---|---|---|
committer | Hui Zhang <hui.zhang@amlogic.com> | 2020-04-02 07:17:32 (GMT) |
commit | ddcf7d63306f7f146170efc1cc2988d401a9bba3 (patch) | |
tree | d9e10972583480cb8adcdef0d3e885c64bcf6f84 | |
parent | 91dfc6e75b8cdeb551487d5fa6341ee2739193a7 (diff) | |
download | media_modules-ddcf7d63306f7f146170efc1cc2988d401a9bba3.zip media_modules-ddcf7d63306f7f146170efc1cc2988d401a9bba3.tar.gz media_modules-ddcf7d63306f7f146170efc1cc2988d401a9bba3.tar.bz2 |
av1: fix some av1 issues [1/1]
PD#SWPL-18751
Problem:
1. av1 dv get meta data wrong;
2. play av1 pending;
3. hdr video_signal_type and metadata support.
Solution:
1. fix set metadata wrong and support hdr
metadata upload.
2. get video_signal_type from ucode.
3. waiting dma done and waiting more at end of frame.
ucode gerrit id: 103792
ucode commit id: e6fe92e9d
Verify:
ab311
Change-Id: I785b5c3cb0da3d708c4b42c3d995f5a6763a5575
Signed-off-by: shihong.zheng <shihong.zheng@amlogic.com>
-rw-r--r--[-rwxr-xr-x] | drivers/frame_provider/decoder/vav1/av1_global.h | 2 | ||||
-rw-r--r-- | drivers/frame_provider/decoder/vav1/vav1.c | 177 | ||||
-rw-r--r--[-rwxr-xr-x] | firmware/video_ucode.bin | 280 |
3 files changed, 273 insertions, 186 deletions
diff --git a/drivers/frame_provider/decoder/vav1/av1_global.h b/drivers/frame_provider/decoder/vav1/av1_global.h index e192091..031e5f4 100755..100644 --- a/drivers/frame_provider/decoder/vav1/av1_global.h +++ b/drivers/frame_provider/decoder/vav1/av1_global.h @@ -2204,6 +2204,8 @@ typedef union param_u { SEG_LVL_ALT_LF_V data: seg_lf_info_y[bit8~14] */ unsigned short seg_lf_info_c[8]; + unsigned short video_signal_type; + unsigned short color_description; /*ucode end*/ /*other*/ diff --git a/drivers/frame_provider/decoder/vav1/vav1.c b/drivers/frame_provider/decoder/vav1/vav1.c index d98c5ec..7334a01 100644 --- a/drivers/frame_provider/decoder/vav1/vav1.c +++ b/drivers/frame_provider/decoder/vav1/vav1.c @@ -334,6 +334,7 @@ static const char vav1_dec_id[] = "vav1-dev"; #define PROVIDER_NAME "decoder.av1" #define MULTI_INSTANCE_PROVIDER_NAME "vdec.av1" #endif +#define DV_PROVIDER_NAME "dvbldec" static const struct vframe_operations_s vav1_vf_provider = { .peek = vav1_vf_peek, @@ -350,7 +351,7 @@ static u32 bit_depth_chroma; static u32 frame_width; static u32 frame_height; static u32 video_signal_type; - +static u32 force_dv_enable; static u32 on_no_keyframe_skiped; #define PROB_SIZE (496 * 2 * 4) @@ -644,6 +645,8 @@ struct AV1HW_s { u32 suffix_aux_size; void *aux_addr; dma_addr_t aux_phy_addr; + char *dv_data_buf; + int dv_data_size; void *prob_buffer_addr; void *count_buffer_addr; @@ -1353,10 +1356,10 @@ int aom_bufmgr_init(struct AV1HW_s *hw, struct BuffInfo_s *buf_spec_i, return 0; } - +/* struct AV1HW_s av1_decoder; union param_u av1_param; - +*/ /************************************************** * *AV1 buffer management end @@ -1805,10 +1808,11 @@ static void config_aux_buf(struct AV1HW_s *hw) } /* -* dv_meta_flag: 1, dolby meta only; 2, not include dolby meta +* dv_meta_flag: 1, dolby meta (T35) only; 2, not include dolby meta (T35) */ static void set_aux_data(struct AV1HW_s *hw, - struct PIC_BUFFER_CONFIG_s *pic, unsigned char suffix_flag, + char **aux_data_buf, int *aux_data_size, + unsigned char suffix_flag, unsigned char dv_meta_flag) { int i; @@ -1817,7 +1821,7 @@ static void set_aux_data(struct AV1HW_s *hw, READ_VREG(HEVC_AUX_DATA_SIZE); unsigned int aux_count = 0; int aux_size = 0; - if (pic == NULL || 0 == aux_data_is_avaible(hw)) + if (0 == aux_data_is_avaible(hw)) return; if (hw->aux_data_dirty || @@ -1846,8 +1850,8 @@ static void set_aux_data(struct AV1HW_s *hw, } if (debug & VP9_DEBUG_BUFMGR_MORE) { av1_print(hw, 0, - "%s:pic 0x%p old size %d count %d,suf %d dv_flag %d\r\n", - __func__, pic, pic->aux_data_size, + "%s:old size %d count %d,suf %d dv_flag %d\r\n", + __func__, *aux_data_size, aux_count, suffix_flag, dv_meta_flag); } if (aux_size > 0 && aux_count > 0) { @@ -1860,26 +1864,27 @@ static void set_aux_data(struct AV1HW_s *hw, if (tag != 0 && tag != 0xff) { if (dv_meta_flag == 0) heads_size += 8; - else if (dv_meta_flag == 1 && tag == 0x1) + else if (dv_meta_flag == 1 && tag == 0x14) heads_size += 8; - else if (dv_meta_flag == 2 && tag != 0x1) + else if (dv_meta_flag == 2 && tag != 0x14) heads_size += 8; } } - new_size = pic->aux_data_size + aux_count + heads_size; + new_size = *aux_data_size + aux_count + heads_size; new_buf = vmalloc(new_size); if (new_buf) { unsigned char valid_tag = 0; unsigned char *h = new_buf + - pic->aux_data_size; + *aux_data_size; unsigned char *p = h + 8; int len = 0; int padding_len = 0; - memcpy(new_buf, pic->aux_data_buf, pic->aux_data_size); - if (pic->aux_data_buf) - vfree(pic->aux_data_buf); - pic->aux_data_buf = new_buf; + if (*aux_data_buf) { + memcpy(new_buf, *aux_data_buf, *aux_data_size); + vfree(*aux_data_buf); + } + *aux_data_buf = new_buf; for (i = 0; i < aux_count; i += 4) { int ii; unsigned char tag = aux_adr[i + 3] >> 8; @@ -1887,15 +1892,15 @@ static void set_aux_data(struct AV1HW_s *hw, if (dv_meta_flag == 0) valid_tag = 1; else if (dv_meta_flag == 1 - && tag == 0x1) + && tag == 0x14) valid_tag = 1; else if (dv_meta_flag == 2 - && tag != 0x1) + && tag != 0x14) valid_tag = 1; else valid_tag = 0; if (valid_tag && len > 0) { - pic->aux_data_size += + *aux_data_size += (len + 8); h[0] = (len >> 24) & 0xff; @@ -1936,7 +1941,7 @@ static void set_aux_data(struct AV1HW_s *hw, } } if (len > 0) { - pic->aux_data_size += (len + 8); + *aux_data_size += (len + 8); h[0] = (len >> 24) & 0xff; h[1] = (len >> 16) & 0xff; h[2] = (len >> 8) & 0xff; @@ -1947,10 +1952,10 @@ static void set_aux_data(struct AV1HW_s *hw, if (debug & VP9_DEBUG_BUFMGR_MORE) { av1_print(hw, 0, "aux: (size %d) suffix_flag %d\n", - pic->aux_data_size, suffix_flag); - for (i = 0; i < pic->aux_data_size; i++) { + *aux_data_size, suffix_flag); + for (i = 0; i < *aux_data_size; i++) { av1_print_cont(hw, 0, - "%02x ", pic->aux_data_buf[i]); + "%02x ", (*aux_data_buf)[i]); if (((i + 1) & 0xf) == 0) av1_print_cont(hw, 0, "\n"); } @@ -1959,11 +1964,56 @@ static void set_aux_data(struct AV1HW_s *hw, } else { av1_print(hw, 0, "new buf alloc failed\n"); - if (pic->aux_data_buf) - vfree(pic->aux_data_buf); - pic->aux_data_buf = NULL; - pic->aux_data_size = 0; + if (*aux_data_buf) + vfree(*aux_data_buf); + *aux_data_buf = NULL; + *aux_data_size = 0; + } + } + +} + +static void set_dv_data(struct AV1HW_s *hw) +{ + set_aux_data(hw, &hw->dv_data_buf, + &hw->dv_data_size, 0, 1); + +} + +static void set_pic_aux_data(struct AV1HW_s *hw, + struct PIC_BUFFER_CONFIG_s *pic, unsigned char suffix_flag, + unsigned char dv_meta_flag) +{ + if (pic == NULL) + return; + set_aux_data(hw, &pic->aux_data_buf, + &pic->aux_data_size, suffix_flag, dv_meta_flag); +} + +static void copy_dv_data(struct AV1HW_s *hw, + struct PIC_BUFFER_CONFIG_s *pic) +{ + char *new_buf; + int new_size; + new_size = pic->aux_data_size + hw->dv_data_size; + new_buf = vmalloc(new_size); + if (new_buf) { + if (debug & VP9_DEBUG_BUFMGR_MORE) { + av1_print(hw, 0, + "%s: (size %d) pic index %d\n", + __func__, + hw->dv_data_size, pic->index); + } + if (pic->aux_data_buf) { + memcpy(new_buf, pic->aux_data_buf, pic->aux_data_size); + vfree(pic->aux_data_buf); } + memcpy(new_buf + pic->aux_data_size, hw->dv_data_buf, hw->dv_data_size); + pic->aux_data_size += hw->dv_data_size; + pic->aux_data_buf = new_buf; + vfree(hw->dv_data_buf); + hw->dv_data_buf = NULL; + hw->dv_data_size = 0; } } @@ -5153,11 +5203,15 @@ static struct vframe_s *vav1_vf_get(void *op_arg) if (index < hw->used_buf_num) { hw->vf_get_count++; if (debug & AOM_DEBUG_VFRAME) { + struct BufferPool_s *pool = hw->pbi->common.buffer_pool; + struct PIC_BUFFER_CONFIG_s *pic = + &pool->frame_bufs[index].buf; unsigned long flags; lock_buffer_pool(hw->pbi->common.buffer_pool, flags); - av1_print(hw, AOM_DEBUG_VFRAME, "%s index 0x%x type 0x%x w/h %d/%d, pts %d, %lld\n", + av1_print(hw, AOM_DEBUG_VFRAME, "%s index 0x%x type 0x%x w/h %d/%d, aux size %d, pts %d, %lld\n", __func__, vf->index, vf->type, vf->width, vf->height, + pic->aux_data_size, vf->pts, vf->pts_us64); unlock_buffer_pool(hw->pbi->common.buffer_pool, flags); @@ -6384,9 +6438,19 @@ int av1_continue_decoding(struct AV1HW_s *hw, int obu_type) /* the case when cm->show_existing_frame is 1 */ /*case 3016*/ av1_print(hw, AOM_DEBUG_HW_MORE, - "Decoding done (show_existing_frame = %d)\n", - cm->show_existing_frame); + "Decoding done (index=%d, show_existing_frame = %d)\n", + cm->cur_frame? cm->cur_frame->buf.index:-1, + cm->show_existing_frame + ); + if (cm->cur_frame) { + PIC_BUFFER_CONFIG* cur_pic_config = &cm->cur_frame->buf; + if (debug & + VP9_DEBUG_BUFMGR_MORE) + dump_aux_buf(hw); + set_pic_aux_data(hw, + cur_pic_config, 0, 0); + } config_next_ref_info_hw(hw); av1_print(hw, AOM_DEBUG_HW_MORE, @@ -6408,7 +6472,16 @@ int av1_continue_decoding(struct AV1HW_s *hw, int obu_type) PIC_BUFFER_CONFIG* cur_pic_config = &cm->cur_frame->buf; PIC_BUFFER_CONFIG* prev_pic_config = &cm->prev_frame->buf; //struct segmentation_lf *seg_4lf = &hw->seg_4lf_store; - + if (debug & + VP9_DEBUG_BUFMGR_MORE) + dump_aux_buf(hw); + set_dv_data(hw); + if (cm->show_frame && + hw->dv_data_buf != NULL) + copy_dv_data(hw, cur_pic_config); + /* to do:.. + set_pic_aux_data(hw, + cur_pic_config, 0, 2);*/ hw->frame_decoded = 0; pbi->bufmgr_proc_count++; if (hw->new_compressed_data == 0) { @@ -7241,7 +7314,8 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data) or cm->show_existing_frame is 1 */ av1_print(hw, AOM_DEBUG_HW_MORE, - "Decoding done, fgs_valid %d data_size 0x%x shiftbyte 0x%x\n", + "Decoding done (index %d), fgs_valid %d data_size 0x%x shiftbyte 0x%x\n", + cm->cur_frame? cm->cur_frame->buf.index:-1, hw->fgs_valid, hw->data_size, READ_VREG(HEVC_SHIFT_BYTE_COUNT)); @@ -7255,12 +7329,13 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data) reset_process_time(hw); + /* if (debug & VP9_DEBUG_BUFMGR_MORE) dump_aux_buf(hw); set_aux_data(hw, &cm->cur_frame->buf, 0, 0); - + */ if (/*hw->vf_pre_count == 0 ||*/ hw->low_latency_flag) av1_postproc(hw); @@ -7297,16 +7372,18 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data) we assume each packet must and only include one picture of data (LCUs) or cm->show_existing_frame is 1 */ - av1_print(hw, AOM_DEBUG_HW_MORE, "Decoding done\n"); - config_next_ref_info_hw(hw); + av1_print(hw, AOM_DEBUG_HW_MORE, "Decoding done (index %d)\n", + cm->cur_frame? cm->cur_frame->buf.index:-1); + config_next_ref_info_hw(hw); } #endif + /* if (debug & VP9_DEBUG_BUFMGR_MORE) dump_aux_buf(hw); set_aux_data(hw, &cm->cur_frame->buf, 0, 0); - + */ if (hw->low_latency_flag) { av1_postproc(hw); vdec_profile(hw_to_vdec(hw), VDEC_PROFILE_EVENT_CB); @@ -7357,9 +7434,11 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data) int next_lcu_size; av1_bufmgr_process(hw->pbi, &hw->aom_param, 0, obu_type); - bit_depth_luma = av1_param.p.bit_depth; - bit_depth_chroma = av1_param.p.bit_depth; + bit_depth_luma = hw->aom_param.p.bit_depth; + bit_depth_chroma = hw->aom_param.p.bit_depth; next_lcu_size = ((hw->aom_param.p.seq_flags >> 6) & 0x1) ? 128 : 64; + hw->video_signal_type = (hw->aom_param.p.video_signal_type << 16 + | hw->aom_param.p.color_description); if (next_lcu_size != hw->current_lcu_size) { av1_print(hw, AOM_DEBUG_HW_MORE, @@ -7405,7 +7484,8 @@ static irqreturn_t vav1_isr_thread_fn(int irq, void *data) we assume each packet must and only include one picture of data (LCUs) or cm->show_existing_frame is 1 */ - av1_print(hw, AOM_DEBUG_HW_MORE, "Decoding done\n"); + av1_print(hw, AOM_DEBUG_HW_MORE, "Decoding done (index %d)\n", + cm->cur_frame? cm->cur_frame->buf.index:-1); } } #endif @@ -8074,7 +8154,7 @@ static s32 vav1_init(struct AV1HW_s *hw) INIT_WORK(&hw->work, av1_work); hw->fw = fw; - return 0; + return 0; /*multi instance return */ } #endif amhevc_enable(); @@ -8107,12 +8187,15 @@ static s32 vav1_init(struct AV1HW_s *hw) hw->stat |= STAT_ISR_REG; - hw->provider_name = PROVIDER_NAME; + if (force_dv_enable) + hw->provider_name = DV_PROVIDER_NAME; + else + hw->provider_name = PROVIDER_NAME; #ifdef MULTI_INSTANCE_SUPPORT - vf_provider_init(&vav1_vf_prov, PROVIDER_NAME, + vf_provider_init(&vav1_vf_prov, hw->provider_name, &vav1_vf_provider, hw); vf_reg_provider(&vav1_vf_prov); - vf_notify_receiver(PROVIDER_NAME, VFRAME_EVENT_PROVIDER_START, NULL); + vf_notify_receiver(hw->provider_name, VFRAME_EVENT_PROVIDER_START, NULL); if (hw->frame_dur != 0) { if (!is_reset) vf_notify_receiver(hw->provider_name, @@ -8121,12 +8204,12 @@ static s32 vav1_init(struct AV1HW_s *hw) ((unsigned long)hw->frame_dur)); } #else - vf_provider_init(&vav1_vf_prov, PROVIDER_NAME, &vav1_vf_provider, + vf_provider_init(&vav1_vf_prov, hw->provider_name, &vav1_vf_provider, hw); vf_reg_provider(&vav1_vf_prov); - vf_notify_receiver(PROVIDER_NAME, VFRAME_EVENT_PROVIDER_START, NULL); + vf_notify_receiver(hw->provider_name, VFRAME_EVENT_PROVIDER_START, NULL); if (!is_reset) - vf_notify_receiver(PROVIDER_NAME, VFRAME_EVENT_PROVIDER_FR_HINT, + vf_notify_receiver(hw->provider_name, VFRAME_EVENT_PROVIDER_FR_HINT, (void *)((unsigned long)hw->frame_dur)); #endif hw->stat |= STAT_VF_HOOK; @@ -9576,6 +9659,8 @@ static void __exit amvdec_av1_driver_remove_module(void) } /****************************************/ +module_param(force_dv_enable, uint, 0664); +MODULE_PARM_DESC(force_dv_enable, "\n amvdec_av1 force_dv_enable\n"); module_param(bit_depth_luma, uint, 0664); MODULE_PARM_DESC(bit_depth_luma, "\n amvdec_av1 bit_depth_luma\n"); diff --git a/firmware/video_ucode.bin b/firmware/video_ucode.bin index b59fb97..4e12a96 100755..100644 --- a/firmware/video_ucode.bin +++ b/firmware/video_ucode.bin @@ -1,6 +1,5 @@ -ss\>+g4LS<T0]ct_ͳ}=n<7jolNLaZ#2#GJQ;kD] -[Ͽbjc$7 +kAQ:U!DV)!J.G=@K0*+,ixgHcXY*/4 -d'%go#:G5RBXFjK?a W5c-lۭ_v!r:yK;KCAP +8V?KNecJ&9Rh-w*Y0hI-x*VxEOQ~>6S,V̿7_GEDw99I&Y . +3|M.:8R_\RLm)s;B=Pbڤ
I풝<͢,nɴ @ @@ -440,7 +439,7 @@ An+,wA 2 ?2 x3 - + @ I` @@ -936,7 +935,7 @@ An+,wA 2 ?2 x3 - + @ @@ -1374,7 +1373,7 @@ An+,wA 2 ?2 x3 - + @ @@ -1812,7 +1811,7 @@ An+,wA 2 ?2 x3 - + @ @@ -2245,7 +2244,7 @@ An+,wA 2 ?2 x3 - + @ @@ -2685,7 +2684,7 @@ An+,wA 2 ?2 x3 - + @x Ȁ @@ -2699,7 +2698,7 @@ H H @p 6
-@ +@ % x @@ -2710,7 +2709,7 @@ H H x -@ +@ @ I` x` @@ -3199,7 +3198,7 @@ HCP
HCX
"@Ir C C @ Ir C C 3 -C C B LCH +C C B LCH @ I` x` @@ -3687,7 +3686,7 @@ HCP
HCX
"@Ir C C @ Ir C C 3 -C C B LCH +C C B LCH @ I` x` @@ -4175,7 +4174,7 @@ HCP
HCX
"@Ir C C @ Ir C C 3 -C C B LCH +C C B LCH @ I` x` @@ -4663,7 +4662,7 @@ HCP
HCX
"@Ir C C @ Ir C C 3 -C C B LCH +C C B LCH @ I` x` @@ -5151,7 +5150,7 @@ HCP
HCX
"@Ir C C @ Ir C C 3 -C C B LCH +C C B LCH I v G @@ -5244,7 +5243,7 @@ U T%H @ID T%H @ID T%H @ID -U +U I@ v G @@ -5346,7 +5345,7 @@ U T%H @ID T%H @ID T%H @ID -U +U I v @@ -5441,7 +5440,7 @@ U T%H @ID T%H @ID T%H @ID -U +U I@ v @@ -5545,7 +5544,7 @@ U T%H @ID T%H @ID T%H @ID -U +U x B< @@ -6099,14 +6098,14 @@ I G -G"@ <# +G"@ <# - + x B< @@ -6665,7 +6664,7 @@ I G @?#@A -G"@ +G"@ x B< @@ -7212,7 +7211,7 @@ I G -G"@ <# +G"@ <# x B< @@ -7771,7 +7770,7 @@ I G @?#@A -G"@ +G"@ x B< @@ -8320,10 +8319,10 @@ I G -G"@ <# +G"@ <# - + x B< @@ -8872,7 +8871,7 @@ I G -G"@ <# +G"@ <# I ! `xI@ C @ @@ -9270,7 +9269,7 @@ EG EŅ " EG ņ -EŇ " +EŇ " I ! `xI@ C @ @@ -9668,7 +9667,7 @@ EG EŅ " EG ņ -EŇ " +EŇ " I ! `xI@ C @ @@ -10040,7 +10039,7 @@ EŇ@x EG ł EŃ@ -` +` I ! `xI@ C @ @@ -10412,7 +10411,7 @@ EŇ@x EG ł EŃ@ -` +` I ! `xI@ C @ @@ -10810,7 +10809,7 @@ EG EŅ " EG ņ -EŇ " +EŇ " I ! `iI@ C @ @@ -11182,7 +11181,7 @@ EŇ@x EG ł EŃ@ -` +` I ! `xI@ C @ @@ -11554,7 +11553,7 @@ EŇ@x EG ł EŃ@ -` +` I ! `iI@ C @ @@ -11952,7 +11951,7 @@ EG EŅ " EG ņ -EŇ " +EŇ " I ! `xI@ C @ @@ -12324,7 +12323,7 @@ EŇ@x EG ł EŃ@ -` +` I ! `xI@ C @ @@ -12722,7 +12721,7 @@ EG EŅ " EG ņ -EŇ " +EŇ " @4x @@ -12903,7 +12902,7 @@ n J` -J` +J` @@ -13101,12 +13100,12 @@ n J` -J` - - +J` + + +@+ - - + + `! @@ -13122,16 +13121,17 @@ _ @ _ ^AI o g ^ -@ - +@ + o - - - -HHȃH
ȄHH"ȅ + + + +@ +HHȃH
ȄHH"ȅ a ) a * @@ -13148,9 +13148,9 @@ a -! +!n -A-;: -+6 ,! -@i +g C k @@ -13159,16 +13159,16 @@ l, lۂm@% ,-lۂm@$ ` -x + +` - + @ - - -m + + +m o - + o @ @@ -13184,9 +13184,9 @@ m J` 6 J @ -@ + xAAAH> -/I + AHR6 I AAHR6 I AHR6 I @@ -13194,8 +13194,8 @@ m ( NAHR6 "" AH> NH I" I@ - -c +g + AH> AH> AHB8 M @@ -13214,15 +13214,16 @@ I@ A2: A -(AH> @a - - +(AH> H P H @a + +@ HP JJ@# + Ka @a I K -Aˑ ɒ@HH +Aˑ ɒ@HH I @@ -13230,7 +13231,7 @@ K @ ` -! @x +" @x I @ @@ -13256,7 +13257,7 @@ J
`H ȲK! ȲK - +K
M @0xH@a ?AH0 ` @@ -13314,29 +13315,29 @@ KJA @H AH> I xJJr@A> - + @@KJ2@J@ H - +aP P@@ -xLN +xLN @@K @ -_P +@[P P@ H - + xH @ - + -H@H_IHP ]HrP Hr` ɗ [HHrP Hr` Hrp ɗ \AH> @ +H xa @@ -13369,7 +13370,7 @@ xHAHb4 b( JbP @ IA> JB -I@LK@KJK@J +I H@f AH"< I2 @@ -13392,10 +13393,10 @@ $@$@"L ! - + lA - + AH> R a @! @@ -13407,15 +13408,15 @@ $@$@"L ! @xH` @ AI> - ~ > + ~ ? I -AH2: +AH2: K8L a L D H" Ia ˲ I 2P @b -˳ ˳ +˳ ˳ - @0 + #2 @@ -13435,7 +13436,7 @@ J@@Q # 4 J2 - ,2 .A2@ I + ,2 .A2@ I H @@ -13463,11 +13464,11 @@ a ^ ` - + A` -ʣ "D ȁ +ʣ "D A - @ _I ` `AI _A + `AI @@ -13504,7 +13505,7 @@ I @d LF LH -!^HX _Bx !i"j- ȇ $o +!^HX _Bx !i"j- ȇ $o ` @@ -13572,8 +13573,7 @@ N@ A` -a -8M@ +a <@Ha @@ -13585,7 +13585,7 @@ C@ B B -@ +@ @@ -13881,7 +13881,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( @@ -14178,7 +14178,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( @@ -14475,7 +14475,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( @@ -14771,7 +14771,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( @@ -14959,7 +14959,7 @@ D@ @ @xHR& b@I"@J@Hb - + @@ -15149,7 +15149,7 @@ D@ @ @xHR& b@I"@J@Hb - + @@ -15337,7 +15337,7 @@ D@ @ @xHR& b@I"@J@Hb - + @@ -15527,7 +15527,7 @@ D@ @ @xHR& b@I"@J@Hb - + y G@, % @@ -15845,7 +15845,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( G+ % @@ -16137,7 +16137,7 @@ G @ ! G - + G+ % @@ -16429,7 +16429,7 @@ G @ ! G - + G+ % @@ -16721,7 +16721,7 @@ G @ ! G - + y G@, % @@ -17039,7 +17039,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( y G@, % @@ -17357,7 +17357,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( y G@, % @@ -17675,7 +17675,7 @@ G *C(I( ,J@($,*F ( ) ("L(h! ( 튂( ( ,J@ ($("Lh! ( 튂( , -("Lh! ( 튂( +("Lh! ( 튂( G+ % @@ -17967,7 +17967,7 @@ G @ ! G - + x ` x @@ -18182,7 +18182,7 @@ E - + x ` x @@ -18397,7 +18397,7 @@ E - + x ` x @@ -18619,7 +18619,7 @@ E - + @ I` @x` @@ -19009,7 +19009,7 @@ H *AL+CLh j@ j - + @ I` @@ -19399,7 +19399,7 @@ H *AL+CLh j@ j - + @ I` @x` @@ -19789,7 +19789,7 @@ H *AL+CLh j@ j - + @ I` /y` @@ -20238,7 +20238,7 @@ H *AL+CLh j@ j - + @ I` @x` @@ -20622,7 +20622,7 @@ H *AL+CLh j@ j - + @ I` @@ -21012,7 +21012,7 @@ H *AL+CLh j@ j - + 3 @@ -21842,7 +21842,7 @@ q @ i - + 3 @@ -22673,7 +22673,7 @@ q @ i - + @` @@ -23322,7 +23322,7 @@ J2x 0 ` - + @` @@ -23971,7 +23971,7 @@ J2x 0 ` - + @` @@ -24620,7 +24620,7 @@ J2x 0 ` - + @` @@ -25269,7 +25269,7 @@ J2x 0 ` - + @x @` @x @@ -25916,7 +25916,7 @@ J2x 0 ` - + x @x @@ -26449,7 +26449,7 @@ H$` JI JI'@BH -= += x x @@ -26988,7 +26988,7 @@ H$` ' -@ +@ @ x @@ -27515,7 +27515,7 @@ H$` ' -@ +@ x x @@ -28045,7 +28045,7 @@ H$` JI JI'@BH -= += x @x @@ -28578,7 +28578,7 @@ H$` JI JI'@BH -= += x @x @@ -29111,7 +29111,7 @@ H$` JI JI'@BH -= += x @x @@ -29644,7 +29644,7 @@ H$` JI JI'@BH -= += y @@ -30259,7 +30259,7 @@ H - + +@+@ @@ -30583,7 +30583,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -30905,7 +30905,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -31224,7 +31224,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -31543,7 +31543,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -31865,7 +31865,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -32190,7 +32190,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` +@+@ @@ -32509,7 +32509,7 @@ a .
AB+@+@ -J` JJ` +J` JJ` FL CL R@ I` x` @@ -32737,7 +32737,7 @@ E=== E DL>L D@ @ -xHR& b@I"@J@Hb +xHR& b@I"@J@Hb FL CL R@ I` x` @@ -32963,7 +32963,7 @@ E=== E DL>L D@ @ -xHR& b@I"@J@Hb +xHR& b@I"@J@Hb FL CL R@ I` x` @@ -33191,7 +33191,7 @@ E=== E DL>L D@ @ -xHR& b@I"@J@Hb +xHR& b@I"@J@Hb FL CL R@ I` x` |