Index: do_sdk.bat
===================================================================
--- /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/do_sdk.bat	(revision 1812)
+++ /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/do_sdk.bat	(working copy)
@@ -25,7 +25,7 @@
 set/p mode=Please press mode SA or SB:
 
 setlocal enabledelayedexpansion
-copy program\patch_sdk.prog + program\patch.prog  output\bt_program23.meta
+copy program\patch_sdk.prog output\bt_program23.meta
 copy format\rom.format + format\labels.format + format\command.format  output\bt_format.meta > nul
 
 ::perl util/memalloc.pl output/bt_format.meta
@@ -78,7 +78,7 @@
 goto contin
 
 :SBmode
-%util_path%/geneep  -n -s -i
+%util_path%/geneep  -n -s
 goto contin
 
 :contin
Index: output/eeprom.dat
===================================================================
--- /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/output/eeprom.dat	(revision 1812)
+++ /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/output/eeprom.dat	(working copy)
@@ -1,4473 +1,4473 @@
 00
 02
-8f
-ab
-f1
-00
-3c
-ae
-c6
-03
-78
-5c
-8d
-07
-e0
-71
-35
-1e
+8a
+5e
+d4
+0f
+9a
+d4
+7c
+b7
+6f
+41
+52
+79
+3b
+ad
+6c
+da
 aa
 55
 60
 11
-24
-e6
-00
-26
+47
+22
+f4
+c3
+1a
+b7
+1e
+40
+8c
+5e
 6d
-0c
-51
-3b
+5b
+ee
+9a
+4b
+2a
+cc
+3e
+d4
+cb
+70
 49
-7e
-20
+09
+72
+b3
+68
 7c
-3d
-fc
-1c
-3c
-a9
+ce
+95
+99
+33
+05
+69
+5a
+82
+c2
+27
+2c
 8b
-3f
-7e
-68
-bd
-31
-b0
-fc
-2e
-10
-d5
+78
+2b
+93
+5a
+b8
+25
+9b
+d4
+5d
 17
-75
-69
-c5
+ec
+88
+da
+df
+04
+54
+a2
+3b
+2e
+ea
+26
+0f
+4a
+c6
 d4
-cd
-57
-7c
-4e
-f0
-8f
-8e
-bc
-7c
-19
+4d
+be
+0a
+5b
+d5
+cf
+74
+a6
+3b
+21
+93
+64
+91
+6c
+a5
 34
-7f
+6f
+28
 73
-aa
-41
-ab
-a3
-48
-df
-d6
-ce
-11
-62
+fe
+24
+f6
+c6
+03
+50
+85
+bb
+03
+3d
+cf
+e0
+4b
+03
+85
 8b
-20
-73
-99
-f0
-fb
-ba
-38
-7c
-67
-f8
-4f
-41
-7c
-25
-5d
-f1
-0e
-61
-42
-27
-37
-90
-7a
+83
+cf
+fc
 5d
-09
-f3
-d3
-7c
-5b
-9b
-97
-b8
-0b
-bc
-39
-eb
-66
-9a
+f7
+f0
+47
+7f
+57
+4d
+53
+84
 03
+2b
 52
-8a
+2a
 5a
-c5
-e3
-13
-09
-a9
-5d
-20
-dc
-6d
-ba
-0f
-9d
-45
-e5
-9f
-b6
-d6
-15
 bb
-e6
-c6
-1c
-80
-c0
-15
+9d
+f2
 9c
-59
-58
-55
-f1
-b8
-17
-84
-46
-78
-8d
-ce
-4b
-d5
-99
-fd
-91
-9e
-d6
-0b
-50
-55
-a4
-a5
-6e
-32
-1a
-09
-17
-d3
-01
-46
-04
-a7
-1d
-87
-4b
-27
-cc
-5a
-e3
-d2
-09
-88
-1e
-cc
-6c
-0f
-ab
-5d
-cd
-00
-f0
-f5
-ca
-e0
-94
-d0
-52
-50
-44
-11
-67
-4f
-25
-e1
-85
-c4
-19
-30
-a8
-7d
-b9
-b5
-cb
-34
-26
-62
-32
-43
-a3
-cb
-13
-d4
-68
-30
-ec
-10
-f0
-78
-eb
-fe
-b5
-ba
-93
-a4
-db
-7c
-52
-ba
-b3
-4d
-8f
-d9
-8b
-9d
-48
-6a
-88
-36
-6b
-07
-8b
-5f
-0d
-d6
-bf
-80
-e5
-a5
-ac
-cf
-2e
-c5
-50
-61
-db
-22
-9b
-07
-0d
-ac
-47
-14
-0b
-01
-44
-b1
-7e
-ed
-6f
-7c
-4f
-61
-24
-e7
-a8
-f9
-e7
-54
-35
-2e
-a4
-37
-71
-8b
-db
-0d
-f5
-a5
-6e
-28
-97
-41
-c4
-b4
-e7
-ff
-05
-2d
-7e
-c4
-d7
-da
-5e
-5f
-cf
-b0
-78
-ce
-34
-25
-7a
-f8
-35
-94
-66
-e2
-22
-9e
-13
-a5
-dd
-71
-63
-fd
-ff
-31
-09
-d6
-49
-97
-f7
-a0
-01
-96
-5d
-6d
-b8
-af
-33
-29
-b8
-f9
-78
-bb
-85
-4d
-09
-ae
-01
-4f
-f8
-63
-d9
-ca
-e9
-01
-56
-69
-ae
-72
-fa
-f1
-5c
-82
-d3
-f2
-41
-b0
-5a
-30
-cc
-39
-f1
-5c
-90
-08
-04
-9e
-4e
-9c
-22
-83
-49
-1f
-13
-bd
-f9
-53
-71
-7e
-eb
-23
-4b
-ee
-44
-f2
-a5
-16
-38
-08
-37
-c7
-0d
-ae
-51
-e3
-88
-af
-34
-fd
-b0
-93
-6f
-85
-e9
-c6
-9c
-3a
-42
-2a
-77
-0e
-82
-38
-f4
-9c
-c7
-10
-f1
-b2
-70
-81
-52
-fc
-aa
-3f
-cb
-42
-e6
-ac
-a7
-55
-e2
-7c
-0c
-3a
-72
-17
-b5
-be
-f7
-fa
-6a
-46
-10
-03
-d6
-c8
-fa
-82
-e4
-ac
-87
-58
-cb
-74
-42
-09
-c6
-24
-c3
-35
-90
-a7
-5a
-d3
-36
-68
-4f
-11
-08
-53
-0f
-44
-ea
-2f
-90
-cb
-df
-bb
-1a
-1f
-b3
-ae
-b7
-e4
-b9
-9f
-f9
-97
-bc
-50
-6b
-b6
-38
-ee
-ed
-5e
-da
-e1
-4d
-09
-38
-c0
-35
-9e
-b8
-63
-02
-63
-c2
-5a
-77
-45
-b2
-2b
-84
-93
-7b
-fe
-b8
-33
-27
-21
-ef
-a4
-f2
-f3
-cf
-ff
-d1
-b9
-59
-8c
-83
-f7
-69
-74
-77
-a4
-69
-58
-43
-65
-ab
-41
-27
-a3
-35
-e9
-37
-b5
-c5
-94
-87
-0e
-5a
-dc
-fb
-b6
-40
-8a
-dc
-27
-ca
-f1
-6b
-84
-f6
-c6
-90
-7a
-1f
-7f
-0c
-87
-de
-5e
-40
-40
-bc
-50
-7d
-f8
-fc
-9a
-e3
-e6
-3c
-4c
-8a
-e0
-af
-13
-a6
-93
-d4
-35
-78
-ac
-62
-d3
-09
-80
-a4
-89
-c6
-4a
-ad
-b7
-80
-3f
-e7
-bc
-f3
-83
-bd
-3c
-8b
-46
-9d
-f1
-1e
-7f
-29
-24
-4f
-e5
-40
-a3
-13
-e1
-29
-a5
-26
-af
-c4
-d1
-9b
-13
-63
-a4
-f7
-15
-b0
-b1
-89
-4f
-8f
-6f
-b3
-97
-6a
-f8
-05
-ec
-9f
-0d
-94
-4e
-ba
-7e
-1b
-4e
-3a
-9c
-bc
-64
-0e
-98
-2c
-fe
-87
-75
-9f
-ec
-80
-59
-11
-94
-0a
-96
-1c
-52
-9c
-69
-6e
-50
-79
-bd
-22
-6e
-ce
-94
-62
-8e
-9f
-3a
-7d
-61
-20
-75
-87
-96
-fb
-9e
-09
-b2
-8a
-49
-3f
-86
-db
-33
-80
-8a
-c0
-f9
-19
-73
-23
-8f
-f6
-bd
-d5
-d8
-f7
-fc
-01
-fd
-d2
-fb
-11
-e1
-d8
-c4
-04
-98
-44
-97
-64
-b4
-b1
-ca
-9a
-a0
-a8
-10
-ce
-3f
-e5
-b2
-ad
-51
-99
-fc
-97
-c1
-02
-55
-f1
-4d
-48
-00
-13
-d8
-87
-47
-36
-86
-4d
-37
-4f
-c7
-a8
-b4
-a2
-af
-80
-d9
-b6
-a5
+69
 f0
-68
-04
-d2
-f7
-4f
-ea
-3b
-45
-b5
-57
-e7
-c3
-f4
-e8
-6a
-1a
-53
-a3
-94
-45
-83
-bc
-08
-15
-ab
-ad
-f7
-f2
-d3
-5f
-35
-36
-48
-1f
-49
-1e
-b8
-85
-1b
-b3
-c9
-2d
-b1
-98
-68
-1b
-e3
-fb
-04
-00
-b4
-b7
-b2
-34
-40
-59
-04
-a9
-b0
-5e
-1f
-5c
-89
-67
-76
-7f
-e7
-e9
-6c
-52
-e4
-ab
-8c
-7a
-4e
-e9
-fb
-21
-3b
-46
-c6
-96
-c2
-fb
-ce
-cd
-11
-b7
-b6
-51
-20
-54
-e0
-e9
-2b
-35
-6a
-4b
-1d
-60
-e5
-37
-b7
-50
-ca
-59
-60
-d8
-b6
-8e
-ba
-19
-06
-6e
-5b
-9d
-14
-04
-62
-65
-35
-99
-f6
-a7
-5a
-30
-fe
-8c
-fa
-64
-91
-1a
-50
-ce
-2e
-16
-93
-f8
-43
-61
-81
-bc
-a2
-08
-21
-fd
-97
-ca
-61
-59
-17
-b8
-a4
-b6
-d2
-17
-94
-97
-45
-89
+71
+12
 f7
-bc
-d8
-3b
-93
-72
-7a
-84
-b6
-d4
-fa
-23
-46
-0e
-95
-bb
-7b
-5f
-a0
-ab
-c2
-90
-9c
-40
-07
-56
-98
-9b
-e9
-38
-f3
-ac
-2b
-83
-da
-df
-cb
-47
-36
-9e
-77
-f8
-18
-8a
-72
-95
-fe
-4c
-5f
-7f
-05
-03
-4b
-7b
-27
-8d
-17
 b5
-08
-02
-d5
-da
+73
+2c
 76
-9a
-e3
-41
-e2
-15
-14
-a7
-9e
-8f
-d4
-22
-ce
-20
-bc
-a7
-9c
-08
 4e
-89
+42
+da
 f6
-84
-10
-e7
-b2
-a0
+06
+cd
+a9
+bd
+49
 71
-07
-dc
-d7
-7b
-a6
-e4
-08
-23
+1e
+c3
+e7
+cc
+77
+c1
 33
-bd
-20
-1a
-92
-bb
-ab
+f3
+0f
+0f
 73
-bc
-66
-c9
-8c
-83
+18
+24
+c4
+03
+d8
+36
+af
+59
+7b
+16
+c2
+59
+45
+20
 e4
-07
-dc
-da
-8c
-0f
-e5
+92
+db
+98
+40
+01
+42
+0e
+d1
+c6
+f6
+78
+96
+bf
+d3
+0d
+82
+58
+0d
+9e
+75
+0a
+60
+fe
+03
+af
 e8
-9a
+d3
+c9
+3e
+96
+25
+16
+b3
+74
+47
+74
+16
+6a
+92
+8b
+75
+3a
+98
+26
+38
+33
+69
+f0
+c7
+49
+52
+69
 d0
-6d
-a5
-e6
-94
+ed
+97
+19
+18
+d6
+98
+f8
+d9
+77
+58
+74
+63
+78
+72
+d6
+6e
+c8
+77
+75
+c9
+77
+41
+15
+f0
+92
+96
+43
+b8
+7f
+83
+36
+52
+02
+74
+01
+03
+03
+91
+f4
 0a
-bf
-5b
-8a
+55
+eb
+a6
+ab
+8f
+b0
+cf
+9e
+f4
+c3
+90
+f9
+c2
+2c
 42
-c6
+3b
+e2
+8d
+1d
+32
+e5
+4e
+25
+b7
+91
+0e
+43
+e2
+bd
+dd
+af
+98
+d7
+1d
+cd
+ee
+c0
+4b
+56
+2f
 1c
-3c
-54
-bf
-5c
-64
-f3
-5f
+47
+0f
+78
 ec
-63
+e1
+c0
+e7
+05
+92
+be
+c6
+1d
+51
+f5
+a3
+35
+0d
+d8
+2b
+5d
+a8
+dc
+56
+8e
+46
+4f
+8b
+10
+88
+f6
+fd
+41
+82
+ad
+39
+e5
+f6
+2e
+af
+3e
+dc
+79
+48
+c3
+13
+77
+9e
+91
+59
+dc
+1b
+33
+58
+a5
+6e
+95
+af
+3e
+fd
+e6
 61
-e0
-8c
-92
-03
-6d
-e3
-cb
-8e
+50
+48
 c0
-9f
+cb
+be
+99
+8c
+b3
+94
+af
+27
+c2
+76
+ca
+aa
+00
+3d
+b6
+7c
+6b
+87
+08
+a5
+20
+e7
+dd
+0b
+c8
+5b
+48
+b7
+93
+9c
+be
+82
+59
+08
 6e
-25
-30
-18
-8d
-68
+3f
+67
+4a
+2c
+a8
+04
 89
-66
-5d
-6b
-19
 8a
-90
-24
-be
-c9
-be
-bc
-ad
-a2
-8e
-7a
-8f
-28
+f0
+2a
+b2
+df
+06
+ee
+7c
+86
+7e
+80
 ab
-e7
-c1
-a1
-4a
-bd
-39
-54
-f9
-40
-61
-cd
-26
-aa
-17
+27
+b4
 aa
-08
-72
-0c
-bd
-56
-f5
+d3
+3e
+ab
+0f
+6f
+c6
+5d
+fe
+fa
+b3
+41
+51
+1a
 43
-c9
-31
-2c
-96
-5f
-b6
-85
-a8
-66
+c6
+38
+3f
+5b
+e8
+84
 d8
+b8
+d5
+46
+d4
+3a
+18
+f0
+a4
+7b
+e9
+88
+a8
 30
-8e
-54
-f7
-d9
-09
-93
-2b
-1b
-e4
+f4
+05
+98
+12
+31
+47
+39
+ce
+75
+a9
+38
+f2
+b1
+aa
+70
+7f
+fc
+80
+90
+02
+3a
+cf
+75
+05
+79
+06
+4f
 52
-19
-cb
+e3
+c1
+00
+de
 3c
-11
-03
+c1
+64
+53
+09
+37
+43
+0e
+9d
+b0
+17
+e5
+78
+0c
+2d
+34
 73
-4f
-4a
-61
-d4
-b3
+b2
+2d
+69
+e6
+1f
+24
+df
+ef
+19
 e4
-e8
-29
-29
-8a
-0d
-af
-be
-ac
-17
-7e
-43
-47
+1e
+a9
+22
+e9
+ec
+63
+12
+f3
+62
+88
+ff
+3f
+4c
+49
+f0
+90
+b3
 10
-42
-5a
-64
-70
-12
-b5
-1e
-ce
-2f
-a2
-5b
-eb
+e9
 ac
-f3
-0d
-0a
+63
+81
+52
+52
+a4
+33
+b9
+53
+b3
+6d
+f8
+ff
+f6
+ec
+9d
+3e
+27
+58
+d7
+45
+e9
+9c
+0e
+1e
 06
-56
-82
+9a
+b9
 31
-f3
-f7
-af
-7e
-6e
-9b
-bd
-46
-50
 2c
-03
-d5
-13
-8e
 86
-f1
-8e
+a9
+b9
+09
+9f
+ad
+46
+71
+1e
+83
+f8
+bc
+1f
+2f
+0d
+b5
+bb
 17
-1a
-49
-0a
-49
+bd
+fa
+45
+19
+9b
+24
+24
+56
+b0
+18
+1e
+fd
+f1
+c8
 94
-52
-d2
-78
-31
+70
+ab
+b7
+a8
+a1
+20
 60
-34
-27
-d0
-ae
-8b
-80
-76
-47
-dc
-eb
-50
-cf
-15
-c4
-fe
-7a
-8a
-68
+6e
+59
+23
+b7
+41
+a2
+f8
+30
+94
+00
 16
-31
-f0
-c8
-6f
-d9
-61
-4d
-07
-70
+00
 f1
+6d
+a5
+af
+6f
+79
+8d
+8c
+12
+33
+dc
+33
+90
+18
+18
+53
+c7
+7b
+f8
+a8
 01
-07
-b1
-80
-cb
-b3
-0e
-76
-20
+03
+1a
+ff
+a1
+fd
+16
+33
+c1
 90
-df
-aa
-b1
-8b
-d2
-ab
-95
-de
-c9
-20
-7a
-67
-aa
-71
+bf
+21
+f6
+1c
+ad
+94
+fd
+d8
+49
+dc
 d3
-c1
-bc
+78
+49
+82
+a5
 96
-fb
-01
-8e
-de
-e5
-89
-07
+92
+0b
+61
+af
+2f
+b7
+9c
+fa
+7a
+b8
+88
+c9
+f7
 06
-4b
-1f
-f6
+69
 61
-3e
+fd
+b1
+71
+e8
+7d
+d7
+3d
 57
-b9
-01
-d0
-0b
-d2
-a7
-75
-2c
-3b
-af
-bd
-83
-96
+a6
+cd
+1d
+94
+42
+0f
+92
+b7
+9c
+db
+b2
 7d
-c5
+cb
+d7
+e9
 2e
-cd
+97
+29
+38
+41
+75
+bc
+38
+fc
+44
+f4
+5b
+4d
+52
+c8
 bb
-bf
-53
-43
-20
-9e
-b1
-7f
-ba
-c4
+11
+18
+99
+5f
 89
-69
-6e
-82
-3a
-84
-c7
-9c
-6d
-59
-8e
-3a
-46
+d2
+b8
+de
+2b
+fc
+9f
+e7
 67
-a7
-6a
-f4
-5a
-54
-54
-78
-04
-97
-d8
-d0
-d0
-21
-2d
-7a
-11
-7f
-33
-d7
-22
-39
-d7
-b0
-78
+6e
+8c
 43
-38
-42
-9d
-05
-f2
-8d
+e8
+10
+17
+76
+86
 21
-96
-e5
-ae
-32
-8a
-a6
-8d
-0a
-ed
+75
 fd
+76
+16
 c7
-92
+ea
+1d
+ea
+e5
+17
+58
+9b
+6c
+15
+36
+7b
+30
+f4
+82
+db
+d5
 23
-e7
-74
-03
-be
-54
-38
-c6
+58
+b6
+f0
+b1
+ae
+fd
 bb
-74
-fb
-df
-b5
-5e
-f3
+4b
+1c
+5d
+9d
+14
+2b
+42
+95
+f2
+ca
+14
+b4
+e5
+9c
+47
+b6
+64
+14
+85
+2f
+22
+19
+8f
+28
+4f
+5d
+cf
+a5
+22
+98
+c9
+2d
+9f
+eb
+d8
+85
+14
+a1
+eb
+a1
+17
+5a
+cf
+81
+25
+30
+37
+89
+2e
+e4
+55
+70
+da
+60
+72
+43
+11
+7b
+cf
+da
+be
+3d
+4a
+8c
+0b
+a7
+10
+31
+93
+4c
+2c
+13
+ae
+b6
+c9
+cd
+4a
+84
+cb
+47
+7d
+55
+2c
+f7
 4f
+82
+41
+76
+bd
+4d
+29
+57
+ad
+db
+ca
+aa
+da
+f6
+17
+3f
+1e
+f2
+ed
+22
+51
+a5
+46
+19
+85
+30
+4d
+cc
+e4
+01
+b8
+00
 c9
-76
-d4
-2c
-0b
+22
+11
+25
+65
+9f
+2d
+e3
+b6
+b2
+8e
+1e
+d5
+6e
+7f
+00
 89
-a2
+3d
+5f
+f3
 bd
-55
-c9
-59
-cb
+00
+62
+53
+ce
+6b
+80
+09
+4d
+96
+13
+9a
+cd
+54
+a3
+82
+15
+49
+92
+f3
+dd
 46
+bb
+70
+0e
+46
+d3
+00
+cc
+01
+9e
+12
+81
+19
+f9
+fc
+f0
+66
+81
+2d
+60
+e1
+22
+37
+66
 18
+16
+da
+9b
+4a
+cf
 15
-06
-d8
-15
-0f
-2a
-eb
-2e
-7a
-a0
-38
-79
-b5
-a3
-ba
+30
 51
-5a
-be
-67
-3a
-17
-e1
-54
-4b
-2d
-92
-ac
-18
-f7
-f2
+a7
 3b
-a6
-59
-64
-ab
-8c
-0c
-9d
-4f
-8b
+e0
+1e
+93
 a1
-68
-8d
-30
-70
-84
-83
+2f
+e4
+64
+92
+b7
+0b
+f4
+4a
+f4
+85
+2f
+b1
+11
+93
+d1
+ad
+6a
+21
+7b
+55
+4e
+f7
+f4
+87
+0b
+27
 f6
-ac
-b4
-35
-f3
-71
+4e
+55
+0f
+f1
+3e
+1e
+55
+15
+47
 93
-96
-ca
-cc
-50
-77
+0b
+ec
+ac
+13
+23
+df
 52
-63
+8a
+21
+25
+d5
+61
+38
+b7
 d2
-ee
-91
-84
-c2
-29
-35
-bd
-ad
-c4
-2b
-92
+8e
+1d
+83
+20
+7e
+d8
+48
+6b
+6e
+4e
+ab
+a5
+b9
 ec
-e8
-52
-40
-e0
-5e
-b3
-58
+27
+5c
+26
+71
+00
+86
 60
-b5
-b6
-57
-cc
-91
+77
+9c
+9d
+23
+1f
+1a
+98
 91
-60
 fb
-91
-41
-ae
-bc
-74
-8b
-7a
-86
+a1
+17
+a8
+04
+9d
 c3
-9c
-02
-8d
-f5
-49
-e7
-11
+8f
+c6
+47
+21
+4b
+66
+b3
+6c
+6e
+b1
+20
+9b
+22
+af
+57
+d0
+9e
+44
+8c
+2e
+b8
+54
+42
+e5
 27
-56
+71
+02
+9d
+0b
+12
+af
+2f
+fc
+6c
+85
+91
+98
+8f
+96
+7e
+95
+ac
+77
+e2
 f7
-a9
-e4
-09
-2c
-35
+55
+14
+6d
+d8
+18
+96
+e8
+01
+27
+bc
+3a
+38
 5b
-42
-4d
-92
-90
+f0
 89
-2b
-1e
+a3
+c1
+29
+c8
+27
+d9
+8a
+ad
+85
+ff
 d0
-b0
-f8
+ab
+97
+c6
+fa
+e6
+23
+26
 43
-09
-a7
+ef
+8d
+26
 db
-03
-72
-4a
-be
-d2
-43
-a8
-86
-c1
-81
-4c
-7c
-96
-10
-cf
+a1
+3b
+f0
+ed
 8e
-15
-9b
-a0
-1e
-e9
-83
-2c
-63
-37
-b4
-49
-d7
-a8
-92
-cd
-2f
 56
-95
-8d
-4e
-61
 08
-ce
-8a
-47
-fd
-c4
-33
-be
-bb
-16
-05
-1e
-98
-4d
-3a
-23
-d4
 cd
-87
-81
-f5
-16
-85
+7f
+8c
+15
+bc
+b8
+89
+d9
+46
+dd
+b7
+ed
+a9
+f8
+cc
+97
+1b
+3f
+07
+1b
+e1
 4d
-f5
-ce
-03
-82
-b5
-27
-50
-70
-1d
-7b
-d7
+05
+e1
+bf
+57
+c4
+40
+53
+9a
+18
+b2
+f0
+ba
 55
-c1
-67
-84
-dc
-34
-c7
+ef
+1f
+ab
+d1
+f8
+77
+e7
+d1
+da
+d7
+58
+19
+f9
+74
+fe
+65
 b6
-3e
-51
-c1
-1a
-de
-cf
-5d
-be
-a0
+e6
+ec
 d9
-e1
-b6
-66
-2f
-1b
-9d
-7e
+a2
 2c
-7d
-6f
-78
-c2
-59
-5c
-6e
-73
-ab
-3e
-72
-a8
-cd
-8c
+01
+76
+de
+e7
+1d
+27
+e4
+14
+c8
 13
+42
+47
+d5
+09
+72
 78
-fd
+66
 ae
-e0
-b7
-29
-ff
-51
-48
-b5
-60
-43
-b6
-b6
-aa
-cc
-b4
-37
-f9
+35
+1f
+fb
+f3
+cb
 4f
-c6
-1a
-17
-e9
+a4
 08
-7f
+d9
+b7
+db
+f8
+8a
+9a
+a4
+52
+35
 11
-ef
+7a
+a3
+4d
+a1
+b0
+d8
+2a
+c5
+a6
+54
+a6
+57
+24
+fd
+d5
+2f
+8d
+8e
+3c
+11
+13
+5a
+34
+e8
+eb
+46
+ce
+fe
+b0
 14
-25
-07
-cc
+0b
+0a
+10
+3e
+83
+4d
+ba
+7e
 44
-1e
-6f
-af
-f0
-aa
-5f
-43
+80
+24
+32
+7f
+ef
+49
+54
+71
+40
+45
+3e
+70
+96
+0b
 30
-62
-d5
-d0
-06
-23
-21
-6d
+b4
+39
+1e
+c6
+cf
+a7
+3d
+72
+74
+54
+e9
+45
+b8
+e2
 fa
-ea
+90
+33
+9f
+95
+8f
+c8
+4e
+81
+7d
+7d
+11
+75
 68
-37
-1e
-bd
-ea
-bb
-d9
-93
-89
+88
+03
 dc
-00
-c2
+02
+52
+54
+e1
+11
+19
+e0
+30
+49
+9a
+57
+bb
+8a
+4c
+b2
+5f
+99
+d4
+99
+96
+d7
+49
+b5
+1b
+94
+a5
+45
+6b
+d3
+72
+5f
+9b
+b3
+06
+e2
+55
 2d
+38
+5d
+b3
+1c
+df
+e0
+c7
+3b
+c7
+bc
+44
+50
+c9
+80
 7e
-8f
-36
-13
-9a
-6e
-db
+c9
+22
+e6
+83
+ff
+ef
+e4
+88
+74
 98
-d0
-b7
-43
-59
-a3
-2b
-8c
-bc
-7d
+de
+2e
+bd
+70
+97
+39
+fc
+89
+e1
+c6
+f8
+a1
+19
+f6
+e6
+4e
+8b
+5a
+9d
+b3
+fb
+3c
+97
+1c
+d2
+29
+1a
+4a
+c3
+23
+6d
+32
+13
+61
+36
+a1
+ac
+4c
+3f
+66
+44
 73
-04
+2c
+69
+52
+f6
+ee
+ca
+fe
+e2
+7e
 c5
-9d
-d2
+c9
+0a
+2a
+eb
+2d
+9c
+5f
+28
+25
+8a
+2f
+63
 84
-57
-74
+9d
+cf
+0a
+ff
+f7
+4b
+3b
+eb
+c0
+a7
+42
+2f
+2f
+6e
 35
-27
-dc
-29
-45
-76
-dd
-de
-2b
-45
-fd
-b9
-f3
-87
-6d
-01
-d2
+a1
+9e
+57
+71
+26
+42
+ab
+a9
+ee
 46
-e7
-cd
-d2
-7c
-7e
-6d
-07
-21
-41
-a0
-77
-74
-45
-40
+c0
+6f
+fc
+70
 4f
-c3
-07
-78
-68
-f8
-c7
 76
-c7
-e4
-7b
-5d
-84
-20
-04
+da
+22
+f5
+ec
+cc
+51
+ee
+17
+22
+30
+15
+b6
+37
 6c
-2c
+45
+dd
+18
+10
+c4
+7b
+e3
 5c
-92
-3e
-a3
 cb
-0c
-fb
-b4
-ee
-b4
-af
-50
-fa
-95
-06
-e1
 f9
-ed
-8c
+4a
 2a
-da
-b7
-60
-35
-fb
-82
-7e
-95
-3b
-91
-51
-13
-52
-a9
+98
+5b
+86
+eb
+48
 c7
-c4
-53
-84
-43
-5d
-4c
-2f
-58
-cd
-a9
-9a
-a2
-8e
-63
-a7
-1d
-fd
-e8
-0d
-c6
+7c
 b9
-ea
-a1
-1a
-bb
-65
-9a
-e7
-bb
-3d
-51
-c4
-8b
-ef
 8f
-56
-86
-97
-11
-a8
 7d
-fe
-3c
-e1
-f9
-e6
+77
+04
+2b
+de
+ea
+05
+0b
+0a
+20
+23
+5d
+23
+7c
 ee
-aa
-db
-44
-33
-8b
-b5
-57
-ad
-31
-df
-4c
+14
+c3
+d9
+58
+cf
+d2
 5c
-20
-91
-f7
-74
-7a
+b9
+dd
+cb
+c5
+11
+71
+3d
 fb
-cf
-e9
-db
-ba
-ed
+da
+44
+62
 80
-09
-49
-4b
-b0
-2d
-b3
-9c
-14
-7a
-74
+10
+65
+1e
 29
-03
-ff
-64
-cd
-a2
-fb
-a9
-13
-5d
-39
-69
-e0
-74
-8d
-2d
-bf
-7e
-69
-ec
-ca
 ab
-1b
-5d
-6d
-3c
-ce
-06
-3b
-af
-b4
-f9
-78
-be
-55
-d6
-35
-fa
+bd
+21
+b8
+c8
+4d
+f5
+b7
+1d
+56
+63
+fc
+62
+30
+7a
+8a
+b3
+de
 76
-91
-e2
+cd
+c6
+b4
 0d
-41
+4c
+1f
+cf
+f6
+94
+02
+5e
+13
+fe
+1e
+3c
+0b
 16
+2a
+80
+6e
+08
+05
+68
+2f
+f4
+c8
+8f
+ca
+c6
+37
+74
 27
-77
-d2
-4a
-c2
-e9
-2e
-09
-c7
-5b
-d8
-b6
+fa
+24
 54
-43
-cf
-56
+93
+f7
+36
+53
 80
-27
-10
-2b
-65
-86
-c8
+4a
+7a
+d4
+60
+91
 15
-57
-7f
-d3
-88
-14
-2f
-75
+38
+d7
+98
+08
+3f
+8a
 44
-a7
-dc
-69
-b6
+ce
+ac
 7f
-0e
-d2
-a5
-d2
-81
-1c
-82
-7c
-2c
-3d
-01
-9f
-b8
-fb
-7c
-4c
-95
-4b
-da
+9b
+d4
+8b
 cd
-6f
-d0
-50
-db
-a2
-74
-c4
-2a
-93
-2a
+8a
+ef
+c6
+aa
+ae
+bc
+5b
+e4
+f8
+a3
+30
+6a
+3d
+f4
+49
+88
+23
+83
+62
+6c
+ac
 d5
-79
-dd
-48
-44
-4b
+05
 a8
-40
 ca
-f1
-ba
-9d
-b4
-19
-07
-d5
-f9
-72
-3a
-7f
-d7
-9e
-47
-5d
-6c
-49
+a3
+79
+22
+33
+38
+c1
+25
+b0
+ce
 37
-17
-1b
-b6
-0a
-dc
+e3
+4f
+22
+61
+bf
+77
+9a
+a1
+84
+2b
+aa
+30
+9e
+73
+f4
+6d
 f3
-73
+ba
+bf
+fc
+ab
+93
+3a
+ca
 f6
-e5
-84
-ce
+7a
+47
+58
 97
-ed
-c8
-b7
-d8
-89
+95
+8f
+e4
+34
+81
+e8
+24
+d1
+94
+a6
+17
+c9
+61
+21
+2a
+28
+03
+20
 98
+46
+66
 32
-fb
-f8
-56
-03
-8d
-ef
-e5
+ce
+c5
+06
+eb
+dd
+6d
+65
+c5
+0c
+7b
+01
+65
+fd
+b1
 d1
-cd
+42
+1e
+63
+c9
+88
+90
 0f
-12
-9a
-99
-68
-52
-c0
-89
-67
-f8
-12
+22
 33
-62
-47
-dc
-b6
-4a
-67
-60
-3a
-39
-41
-43
-61
-bb
-d4
-3b
-98
-4d
-41
-35
-d4
-68
-b0
-77
-f0
-01
+58
+d0
+ed
+3c
+2b
+25
+c3
+2e
+bd
+a1
 9f
-88
-2f
-7d
-d6
-59
+ae
 aa
-49
-2e
-4d
-e9
-68
+7d
 71
-e3
-df
-1a
-0d
-e9
-39
-e5
-db
-4a
+dd
+ba
+23
+c8
+fb
 e2
-90
-43
-51
-d9
-b7
-d0
-05
-de
-d8
-65
+ab
+d5
+8e
+71
+8a
+fb
+7f
+b6
+18
+e1
+0e
+ad
+67
+cb
+50
+58
+7d
+40
+a8
+86
+52
 e5
-5f
-13
-4c
-02
-ee
-84
-b2
-b1
-d3
-28
-46
-4c
-c9
+53
+ba
+48
+c4
+b6
+3f
+95
+97
+ac
+f8
+70
 74
-c8
-1a
-37
-37
-2e
-d4
-a9
-5c
-93
-d9
-2f
-b5
-b2
-0a
-4f
-50
-9f
-78
-27
-9e
-3b
-0a
-35
-08
-34
-35
-a5
-e1
-a7
-25
-3b
-54
-c7
-b4
-a2
-15
-15
-26
-bc
-c2
-93
-76
-6a
-64
-2f
-93
-f6
-c7
-d6
-02
-1e
-59
-96
-3c
-8f
-02
-cc
-59
-06
-54
+3a
+ba
+7d
+9d
 b0
+8f
+22
+ec
+6a
+87
+ab
+53
+8c
+0b
+18
+6d
+95
+ef
+61
+6a
+e1
+d1
+66
+5b
 23
-7c
-75
-21
-fe
-6f
-07
-bc
-24
-8a
-ba
-30
+13
+da
+5b
+4b
+6b
+af
+15
+d4
+02
+d4
+36
+9c
 a7
 4d
-72
-20
-ea
-75
-2a
-9f
-57
-ae
-69
-f8
-ae
-1d
-6d
-ce
+88
+c1
+45
+64
+92
+bf
+0f
+6e
+da
+38
 ec
-1a
-73
-84
+8a
+ce
+05
+e5
+fc
+77
+87
+ed
+ad
+46
+4a
+e9
+f6
+80
+bf
+15
 84
-70
-76
-ab
-73
-6a
-9a
-92
-de
-2a
-0a
+62
+95
 97
-b6
-65
-a1
-cc
-85
-c7
-e3
-18
-f9
-c5
-c6
+98
+09
+7c
+ec
+e0
+7e
+25
+25
+c8
+df
+3a
 5c
-13
-62
-ff
-62
-e4
-ee
-ff
-fd
-d0
-71
-0d
-a9
-9f
-c0
-0d
-f2
-54
-21
-16
-af
-1c
-ca
-03
-c6
-a3
-9d
-32
-69
+2a
+5d
+b8
+8e
+d9
+89
+45
+b3
+36
+b4
+2a
+5f
+d9
+fc
+97
+fe
+51
+6e
 d6
-50
-14
-57
-9f
-18
-dd
-1e
-cd
-6c
-cd
-46
+a0
+97
+2c
+4e
+30
 10
-5a
+85
 7d
-8f
-e6
-90
-62
-2d
-6c
-3f
-88
-68
-ab
-3a
-9d
-21
-6f
-a4
-1c
-b0
-e4
-c7
-61
-ef
-a3
-19
-b1
-f8
-e8
+8e
 2f
-ea
-9a
-2a
-34
-46
-44
-06
-63
-d1
-17
+b5
+45
+98
+db
+f7
+2f
+54
+8c
+14
+f1
+69
+8d
+c1
+96
 05
+df
+ba
+ee
+9d
+f7
+a8
+a8
+64
+15
+d5
+e2
+00
+82
+65
+6a
+17
+19
+7f
+fb
+f1
+db
+ea
+cd
+5a
+77
 42
-ca
-d1
-da
-2a
+cf
+04
+c8
+fe
+5b
+40
+06
+c2
+7b
+3a
+bd
+52
+5c
+d8
+12
+4c
+bf
+94
+78
+0b
+e5
+9c
+a8
+15
+0e
 ad
-f6
-a3
-47
-75
-6e
-0d
-1b
-ce
-a4
-87
-51
-24
-1b
-db
-fd
-e8
-dd
 88
-47
-17
-2f
-c0
-32
-51
-d2
-a9
 ef
-9b
-99
-4d
-a2
-ac
+bf
+2b
+c4
 0b
-d4
-db
-c0
-03
-8f
-76
-3a
-8c
-d6
-f6
 74
-26
-91
-a4
-37
-bf
-01
-7b
-cc
+58
+3a
+fa
 b1
-e2
-97
-85
+ff
+f7
+29
+74
+9e
+ac
 18
-ea
-80
+87
+c2
+6d
+22
+3d
+79
+ef
+7d
 f5
-df
-40
-f6
-1d
-11
-2f
-5e
-94
-e1
-6e
-38
-9b
-1e
-81
-0d
-30
-e0
-49
-f9
-bc
-6b
-93
+9e
+7c
+c3
 14
-51
-ce
+a6
+7a
+63
+87
+96
+a9
+1e
+75
 a8
-98
-0e
-cf
-76
-51
-5e
-bd
-9e
-c4
-1b
-4a
-7e
-1d
-fa
-72
-f8
-e3
+70
 ff
-89
-40
-8b
-4a
-31
-07
-bf
-de
+44
+f3
+8a
+fe
+9a
+2d
+d3
+41
+64
+f9
+37
+06
+f7
 d9
-d5
+c9
+e5
+64
+63
+33
+f4
 6a
-1e
-93
 11
-8c
-27
-24
-38
-e6
-c8
-48
-4e
-76
-e5
-02
-c1
-ee
-a1
-24
-91
-c1
-d9
-52
-d9
-65
-8f
-e2
-7c
-e7
-39
-bd
-46
-25
-24
-ed
-9c
-24
-f0
-79
-3e
+2b
+1d
+44
 a6
-69
-f2
-c9
-0d
-2c
-63
-8f
-ce
-f6
-d6
-3c
-09
-fb
-aa
-c7
-ec
-ed
-62
+ee
+5e
+df
+00
 81
-4c
-a5
-bd
-c0
-27
+04
+be
+74
 8c
-e3
-3e
-32
+18
+c3
+e8
+09
+d1
+47
+5d
+94
+ef
+d8
+90
+72
+40
+42
+ba
+1d
+59
+44
+37
+52
+45
 4c
-25
+92
+a5
 df
-76
-33
-0d
-ae
+66
+08
+40
 63
-50
-94
-94
-51
-e4
-1d
-27
-47
-21
-ef
+e7
+0a
+c5
+59
+0b
+30
+c8
+31
+19
+f9
+f7
+09
+c7
+6d
+f1
+8d
+f1
+70
+2d
+5e
+34
+14
 ad
-06
-51
-9b
-da
-69
-33
-65
+6c
+94
+f9
+93
+85
+66
 f2
-2b
-4e
-f3
-1e
-1f
-11
-24
-fb
-6a
-41
-cd
-4a
-da
-57
-d4
-d4
-63
-ec
-51
-c9
-b6
-b7
-7b
-7b
-89
-9e
-65
-17
-6d
+9f
 a1
-a9
+15
+22
+09
+35
+f1
 73
-9c
-d9
-61
-23
-d6
-0a
-c5
-14
-42
-64
-e1
-78
-61
-f5
+86
+d0
+da
+c1
+57
+6f
+96
+bf
+66
+41
+af
+8c
+ea
+dd
+20
+54
+f8
+cd
+c7
+80
+37
+2c
+c3
+6e
+a4
 a1
+1a
+c4
 ab
-60
-f0
-8a
-b7
-82
-7f
-0d
-34
-ae
-d1
-0b
-b9
-e2
-76
-47
-d6
-03
-67
-5a
-ee
-e2
-48
-a9
-de
-f9
-29
+19
+78
+ef
+5b
+0c
+fc
+a0
+f2
+f3
+6a
+39
+bb
+c6
+41
 9a
-83
-80
-72
-18
-21
-7a
-2f
-a1
-46
-55
-c9
-bd
-33
-0a
+4b
+44
 60
-0f
-9d
-ec
-a1
 cd
-26
-c9
-58
-5e
-ab
-f3
-b9
-72
-01
-53
-5c
-9b
-bd
-cc
-1b
-91
-4a
-74
-df
+d1
+79
 4f
-99
-b5
+2f
+44
 fa
-78
-18
-0c
-5f
-45
-f9
-aa
-e7
-1f
-20
-f2
+68
+a7
+cf
+9a
 da
-66
+79
+d8
+31
+97
+9f
+15
+db
+c6
+27
+d1
+4d
+f6
+1f
+10
 6f
-89
-de
-fd
-20
-92
-bd
-d0
-4b
-ea
-d4
+f7
+e1
+7e
+8f
+8d
+a1
+2d
+35
+dc
+aa
+04
+e1
+fe
+18
+5a
+32
+37
 70
-42
-cc
-ad
-7a
-14
-1d
-d9
-d3
+fc
+e1
+cf
+61
 30
-1c
+1b
 87
+5d
 90
-29
-38
-6a
+9b
+5d
+4b
+f8
+cd
+cd
+bb
+4a
+6e
+a7
+53
+5e
+ae
+11
+69
+94
 c7
-67
-f0
-e7
-64
-c8
-d7
+c0
+5f
+d0
+3f
+5c
+4b
+c5
+4e
+ea
+1d
+fe
+66
+44
+b6
+19
+24
+0f
+db
+13
 3b
+69
+03
+3f
+9e
+f4
+38
+11
+9e
+81
+6c
+8a
+ae
+3c
 04
-32
-90
-ec
-84
-94
-88
-14
-f7
-e2
-24
-e7
-b5
+21
+45
+ff
+ca
+2a
+ac
+64
+34
+16
+8b
+8f
 74
-0b
-55
-06
-78
-e5
-f8
-53
-66
+1a
+43
+9d
+cd
+48
+79
+fc
+0e
+46
+ab
+44
+0e
+07
+8a
+9d
+87
+b5
+c5
+cc
+4c
+7f
 3e
-22
-6c
+17
 6f
-fe
-08
-54
-dd
-ba
-07
+cb
+a6
+ff
+ec
+c7
+45
+fa
 4a
-ac
-31
-bb
+d8
+50
 72
-ba
-32
-05
-21
-b1
-2e
-62
-5a
-7c
-2e
-2f
-a9
-dc
-29
-31
-c0
-f2
-7c
-1e
-af
-7f
-56
-78
+42
+9b
+a8
+4e
+d6
+ef
+36
+5f
+bb
+cf
+03
 62
+0c
+47
+c8
+03
+8b
 6e
-b7
-b6
-9e
-b6
-1b
-06
-bc
-a3
-21
-66
-6b
-18
-ef
+81
+a1
+05
+4a
+53
+c1
+d4
+22
+bb
+c9
+ae
+e2
+82
+5b
+d0
+94
+ad
 d3
-fc
-ba
+f8
+ab
+b8
+19
+4e
+70
+5b
+bc
+20
+6f
+69
+28
+38
+e9
+08
+6a
+96
+41
+95
+4f
+e8
+c2
+a1
+a2
 83
-6b
-98
-88
-22
-4b
-e1
-98
+39
+1c
+55
+b7
+7d
+8a
+34
+db
 11
+89
+6b
+5b
+26
+50
+50
+49
+ec
+df
+7f
+15
+c2
+cf
+c3
+87
+99
+06
+2f
+b1
+36
+1b
+42
+d1
+29
+bf
 9a
-43
-32
-bc
-4b
+e5
+86
+2c
+37
+92
+d5
+8f
+ea
+01
+ad
+75
+89
+ce
+36
 4a
-e3
-02
-a3
-76
-76
-d7
-c5
-c6
-d4
 67
-d3
-69
-25
-7b
-73
-40
-ac
-6a
-6f
+a0
+83
+dd
 4b
-30
-29
-97
-24
-ca
-76
-5b
-55
-07
-4e
-10
-a8
-43
-9e
-1c
-e7
-71
-6e
-02
-3a
+a2
+ce
 62
-18
-22
-72
-03
-0f
-d1
-be
-53
-00
-eb
-8b
-15
-24
-95
-3e
-6e
-6c
-e0
-ed
-8a
-ba
-30
-bc
-e8
-94
+91
+75
+7a
+91
+f7
+98
+73
+45
 c5
-2a
-15
-18
-8e
-63
-15
-5e
-4f
-20
+7c
+19
 b6
-8f
-79
-02
-61
-3e
-31
-78
-1e
-f1
-3a
-52
+96
+63
+5c
+9c
+67
+fd
+e0
+2b
 54
-a6
-1c
-76
-76
-bd
+ad
+72
+8c
+df
+65
+8a
+2d
 2b
-b1
-87
-64
-9a
-5b
-fa
-81
-e6
-9b
-e8
-9b
-af
-a0
-05
-ed
-80
-a8
-17
-5d
-b5
-d8
-3d
-77
+7c
+c7
+1d
+44
+e3
+b6
+32
+8f
+e3
+39
+29
+14
+4b
+98
+13
+83
 e1
-bc
-3e
-17
-22
-90
+91
+86
+ee
+42
+63
+e2
+14
+d2
+6f
+07
+8c
 a3
-6e
+64
+14
+cb
+02
+a7
+67
+01
+82
+ad
+70
+8d
+13
+12
 ec
-94
-4e
-98
-65
+fd
+f1
+ad
+0d
+34
+0b
+c9
+5f
+57
+c8
+61
+e0
+c3
+e7
 78
-3f
-a0
+13
+9b
+32
+c7
+b8
+ec
+30
+4e
+56
+ee
+1a
+56
 69
-f6
-8a
-7b
-35
+b7
+8b
+cb
+08
+db
+a8
+cf
+14
+e7
+4a
+e1
+f4
+14
+6a
+76
+60
 10
-1a
-99
-5a
-b6
-ed
+3f
+fb
+f5
 93
-cf
-1e
-bf
-7a
-62
-5a
-89
-3e
-9b
-4c
-67
-a4
-05
-ab
-44
-a4
+78
+92
+36
+58
+0f
+be
+e8
+7f
+77
+6e
+58
+22
+54
+d7
+82
+73
+3a
+0b
+9f
+9d
+c4
+30
+02
 19
-47
-3e
-aa
-3b
-8d
-4c
-fc
-a8
-56
-87
-4f
-4e
-e2
-ee
-41
-48
 79
-5c
-30
-e2
+68
+fb
+7d
+1a
+b1
+4a
 a2
-d5
-f5
-d5
-0f
-b2
-92
-cf
-8b
+0a
+fa
+94
+c2
+14
+18
+9a
+6b
+50
+84
 85
-4a
-ac
-63
-e9
-38
-a1
-de
-d9
-74
-1f
-bd
-71
-4a
-ec
-00
-ac
-17
-2d
-7c
-c9
-52
+75
 1e
-53
-46
-d7
-05
-15
-f2
-bc
-89
-dc
-00
-54
+fc
+b1
+ee
+c9
+84
 8f
-03
-ed
-31
-dd
-0d
-d5
-5a
-95
-92
-4c
-e0
-40
-ea
-d9
+b0
+26
+0b
+68
+c6
+75
+c2
+62
+d8
+5b
+fd
+97
+29
+28
+72
+c2
+1f
+6b
+0c
+7b
+4d
 49
-66
-41
-37
-9d
-9b
-25
-19
+e6
+20
+db
+c1
+71
+87
+05
+06
+fe
+be
+8a
+01
+d6
+9a
+a9
+c0
+38
+6d
+f5
+d3
+b9
+d6
+c5
+90
+16
+a8
+93
+68
+04
+8e
+d1
+de
+3b
+16
+35
+f1
+be
+81
+26
+8a
 e8
-77
-f9
-46
+b0
 7d
-3f
-a8
-b2
-d8
-e9
-fb
-e9
+f1
+78
 0f
-64
-a7
-b6
-4d
-8f
-53
-1d
+cf
+35
+f6
+7e
+cf
+fd
+65
+ff
+e3
 6d
-c6
-74
-da
-56
-66
-67
-9a
-36
-6e
-1d
-29
+35
+24
+a0
+5c
 1c
-49
-5f
-0f
-b4
-ec
+ad
+56
+14
+dc
+f6
+58
+c7
+40
+e5
+d5
+b9
+df
+1b
+1a
+5b
+03
+03
+e3
+9c
+c5
+98
+a1
 c1
-d3
-69
+97
+df
+8a
+98
 19
-16
-ef
+26
+c6
 84
-67
-b9
-7c
-00
-a1
-f4
-1d
-0d
-41
-c7
-5b
-7c
-36
-79
-bb
-5f
-71
-60
-4c
-09
-79
-5f
-66
-6a
-5c
 ff
-b7
-19
-e0
-83
+c1
+03
+55
+96
+8f
+bd
+bb
 6e
-eb
+21
+f9
+ad
+d6
+87
 3c
+2c
+81
+56
+43
 9c
-b9
-ec
-ff
-23
-90
+b8
+d3
+91
+cc
+20
+e0
+aa
+95
+ca
+d4
+9c
+6c
+91
+67
+9e
+b6
+91
+f1
+d1
+bc
+ad
+59
+f9
+fa
+cc
+16
+67
+e8
+c3
+82
+2a
+5a
+1a
+92
+56
+0d
+8e
+43
+aa
+6d
+e9
+5e
 f7
-79
-b2
+3b
+43
+a8
+06
 96
-23
-ab
+28
+3f
+04
+02
+99
+fe
+d9
+2d
+e3
+26
+a6
+67
+87
+3e
+08
+fa
+42
+6f
+27
+eb
+a5
+58
+a9
+ec
+10
+4e
+40
+22
+11
+3c
+a5
+3f
+3a
+08
+1f
+d0
+ca
+76
+63
+36
+2c
+1f
+8e
+e0
 77
-df
+95
+20
+f9
+bb
+4a
+7e
+3c
+b2
+52
+39
+cf
+ff
+cb
+2f
+01
 03
-f0
-c4
-d8
+2a
 28
-13
-8c
-a8
-eb
-4f
-90
-cd
-5f
+35
+fa
+f7
+c7
+c7
+09
+76
+be
+24
+24
+24
+88
 ed
-b6
-8a
-0c
-01
-20
+43
 b7
-11
-db
+ce
+04
+52
 f1
+21
+08
+10
 a2
+82
+43
+59
+14
+e1
 a7
-5b
-0b
-d5
-94
-4a
-7a
-9b
+42
+a5
+77
+0e
+46
 18
-d5
-94
-df
-f7
+10
+c8
+54
 7a
-c6
-f8
-5e
-f5
-08
-ed
-5f
+f0
+09
+04
+7c
+8f
+b7
+dd
+90
+9b
 80
 b5
-f7
+15
+4c
+ae
+02
+aa
+f1
+45
+02
+53
+8c
+dc
+af
+c3
+2b
+28
+58
+bf
+29
+b1
+3a
+2c
+78
+e2
+f2
+e5
+4a
 46
-c6
-00
-cb
+c1
+9e
+90
+35
+f5
+77
+8a
+69
 fc
-f7
-94
-ef
-fa
-b9
-d9
-00
-bd
-85
-b2
-33
-df
-b8
-7a
-d2
-5a
-32
+95
+2c
+cd
+ce
 bc
-bf
-5b
-54
+ca
+cf
+dc
+47
+8f
+82
+e8
+8e
+d3
+d4
+0c
 19
-29
-2b
-30
-a9
 4b
+77
+b8
+de
+0f
+20
+6f
+92
+36
+06
+90
 b4
-2c
-28
-00
-2e
-86
-eb
-75
-65
-bc
-d3
-df
-7d
-f6
-25
-f7
-ed
+55
+58
+dd
+60
+b0
+73
+82
+22
+49
+68
+60
 12
-33
-85
-c0
-e1
-41
-1b
-2e
-a2
-03
-cb
-96
-6e
-2d
+a9
+46
 34
-b8
-fd
-54
+46
+73
+2f
+c5
+14
+34
+c4
+84
 d5
-a6
-fd
-fb
-6c
 1f
-44
-df
-d4
-2b
-7d
-27
-f7
-ad
-c4
-47
-cb
-d8
-37
-07
-3a
-aa
-d4
-62
-07
-e8
-50
-54
-cd
-c1
+17
+da
+ac
+86
+b3
+86
+23
+02
 83
-be
-09
-e4
-b7
-f8
+47
+ea
+86
+b3
 fb
+9a
+d3
+5e
 c3
-da
-7c
-63
-19
-d8
-d8
+c4
+20
 e1
-66
-30
-d2
+cf
+0c
+c8
+53
 d1
-9a
-fa
-f3
-3d
-94
-98
-77
-32
-91
-ee
-19
-d5
-d9
-15
-71
-a6
-bc
-88
-15
-21
-94
+d3
+29
+1b
+fd
+4c
+9d
+30
+b2
 49
-ef
 9e
-39
 30
-1a
-5c
-59
-4c
-73
-b6
-45
-c6
-27
+99
+80
+37
+53
+9d
+c5
 64
-51
-2e
-42
-ab
-10
-58
-bd
-23
-7b
-92
-be
-0d
-d6
-7c
-35
-57
-84
+8a
+ff
+38
+e4
+53
+88
+da
+11
+bc
+27
+60
 0f
+b3
+c7
+6b
+e1
 6b
+f0
+ab
+9c
+9f
+6f
+99
+00
+68
+98
+d0
 27
-d1
-59
+b1
+de
+0f
+a4
+96
+80
+fa
+60
+14
+e3
 55
-99
+24
+ad
+3c
+b9
+37
+5e
+61
+c3
+05
+66
+31
+30
+e6
+88
+21
+98
+f8
+de
+be
+e7
+83
+7e
+36
+08
+2b
+72
+3f
+62
+cd
+a9
+33
+ca
 1f
-75
-e1
+21
+f9
+1d
+c0
+07
+0c
+3d
+18
+06
+3e
+27
+71
+e9
+2a
+1c
+6a
+00
+4f
+a0
 89
-96
-7d
-ed
-43
-b4
-ec
-74
-04
-b1
-67
-23
-d1
-11
-78
-15
-30
-65
+1e
+77
 35
-4c
-99
-5f
-6f
-66
+e4
+55
+3d
+22
+72
+4f
+c3
+04
 dc
-42
-9c
-c5
-88
-1f
-f8
-19
-69
-4d
-39
+1c
 29
-58
-d9
-bc
-f1
-c5
-75
-d8
-a1
-4f
-e3
-1d
-ae
+6e
+d7
+d3
+28
+6d
+59
+3e
+aa
+98
+6e
+ce
+d3
+e3
+68
 b5
-6d
-33
-fa
-bf
+96
+15
+3e
+b5
+32
+5a
+e5
+e5
+ed
+42
+dd
 19
-d3
+c3
+68
 fc
-54
-70
-69
-58
-ee
-bf
-f2
-f9
-c5
-27
-20
-de
-10
-b4
-3c
-3a
-c9
-87
-9a
-d5
-81
-db
+ea
 1a
-6d
-f9
-8b
-de
-86
-5b
-68
-95
-db
-7e
-79
-c6
-6a
-91
-45
-3a
-a5
-6a
+55
+d1
+31
+e8
+16
+c4
+84
 99
-27
-5f
-27
-cc
-ce
-34
-a1
-ab
-db
-30
+41
 82
-93
-54
-09
-d8
-4f
-f2
-8e
-64
-00
-02
-78
-fe
-24
+85
+69
+e7
+b3
+8b
+46
+f5
+b3
+ee
+25
+48
+f7
+ed
+f1
+06
 42
+c4
+ee
+d2
+ad
+67
 1c
-38
-39
-53
-82
-d4
-ce
-77
-2d
-c1
-6a
-ec
-14
+21
+8c
+37
+d0
+99
 50
-64
-b7
-09
-08
-cf
-62
-a9
-8e
-c8
-f8
+9a
+24
 b0
-20
-a7
-32
-cb
+2f
+57
+13
+35
+b2
 a8
-68
+a0
+e4
+6e
+16
+51
+37
+1d
+e5
 03
-1b
+1a
+dc
+4a
+1c
+ac
+ba
+e2
+e9
+ea
+93
 44
-66
-18
-ae
-66
+33
+7c
+2a
+c0
+36
+ef
+ba
+ea
+f7
+48
+30
+0b
+df
+94
+ea
+4d
+45
+4c
+61
+d8
+16
+89
+9e
+0e
+ca
+81
+ac
+48
 40
-b9
-dc
-85
-50
+34
+a2
+03
+4e
+e2
+6a
+56
+0a
+e4
 51
-50
-89
-e7
-59
-4d
-1a
-22
-cb
-fe
-77
-11
-11
-b4
-04
-77
-a4
-b7
-1f
-30
-b0
+45
 5e
-d7
-99
-e8
-fa
-a0
-e7
-67
-c6
+57
+a6
+a8
+be
+4d
+fd
+e5
+49
+2b
+91
+aa
+af
+d5
+b9
+ff
+46
 35
-e8
-39
-c7
-db
-f6
-4a
-6f
-18
-94
+0b
+9b
+d5
+4d
+83
+ed
+c6
+2e
 25
-8e
-e1
-7f
-31
-67
-7d
-11
-1a
-02
-03
-d6
-59
-08
-2f
-76
-9c
-04
+99
+0d
+9b
+49
+49
+88
+27
+29
 df
-3d
-de
-5a
-4e
+9e
+28
+d1
+25
+83
 6c
-6e
+1a
+a3
+b6
+a8
+f5
+2d
+0b
+15
+79
+40
+07
+55
 77
+13
+b5
+57
+aa
+22
+a1
+ef
+ce
+27
+15
+dd
+35
+41
+31
+8c
+a8
+c6
+67
+64
+a8
+84
+9e
+89
+8c
+33
+40
+0d
+a1
+ce
+47
+75
 6b
-c5
-df
-a7
-b3
+12
 3e
-98
-72
-8f
-55
-be
+45
+97
+5f
+c6
+49
+e3
+e3
+11
+fc
 ac
+86
+a6
+aa
+28
+8b
+6b
+19
+45
+8d
+d4
+d4
+68
+65
+80
+9d
 10
-4e
-6f
-e9
-4c
-fc
-5e
-7d
+21
+c5
+dc
+c1
+78
+e8
 b0
-05
-e3
-b4
-64
-e4
-b3
-e4
-95
-f8
-07
-93
-fa
-b3
-97
-a0
-2c
-e0
-5e
-d9
-b2
-b6
-f7
-d1
-d2
-0a
+9f
+5a
+55
+43
+2b
+39
+3c
 2c
-a4
-05
-4a
-71
+7c
+f3
+f8
+ee
+cb
 60
-0b
-a6
-9e
-97
-cf
-e7
-25
+9f
+4a
 5d
+e4
+d2
+d7
+a8
+92
+e3
+12
+ea
+da
+13
+2a
+58
+52
 0e
-94
+dc
+ca
+da
+9c
+d9
+0e
+12
+a4
+da
+1a
+d1
 b1
-c4
-de
-04
-0c
-f8
-06
-5a
-9a
-e2
-9b
-bd
-c8
-f0
-f3
-fc
-95
-60
-87
-c3
-71
+03
+29
+2e
+39
+84
+2e
+3d
 2c
-7b
-96
-fa
+44
+1d
+69
+42
+ff
+58
+f3
+5f
+60
+fd
+9a
+0e
+ed
+a9
+8f
+97
+fb
+93
 38
-1b
-e3
-c4
-6b
-85
-3a
-c7
-a6
-cf
+a1
 46
-52
-0e
-24
+9b
+3c
+72
+8f
+9c
 2a
-a2
-d8
-01
-4a
-e4
-dc
+15
 60
-77
-83
-71
-3e
-f8
-fd
-fb
+24
+84
+9b
+4a
 b0
-d1
-ff
-23
-ca
-c7
-d2
-ed
-94
+c8
+51
 17
-e1
-3c
-a8
-ba
-c0
-58
-ba
 9c
-02
-42
-8e
-87
+25
+97
+6d
+84
+7a
+58
+d9
+05
+54
+1a
+11
+eb
+be
+4b
+f5
+18
+9d
+5a
+f0
+8a
+7a
+ef
+b7
 b2
-62
+48
+3b
+57
+3a
+c7
+64
+ef
+e8
+80
+3b
+3b
+54
+ca
+7c
+9d
+9b
+8a
+4b
+3c
+01
+61
+0a
+e1
+06
+fc
+ac
 e1
 5b
-0b
-af
-92
-93
-8d
-0c
-00
-70
+27
+d6
+72
+3f
+7e
+1d
+5a
+be
+9d
+ea
+ae
+aa
+e4
+6f
+77
+89
+17
+63
+46
+10
+bf
 d5
-ee
-fb
-03
+08
+ea
+ec
+8e
+37
+71
+c1
+3a
 c7
-20
+ce
+bd
+a2
+71
 15
-96
-32
-02
+00
+a1
+c7
+21
+a0
+a3
+bd
+f5
+78
+2d
+46
+03
+2e
+16
+1c
+c6
+9d
+f6
+b8
+90
+18
+df
+29
+ee
+81
+95
+1c
+78
+b7
+40
+39
+25
+d8
+3b
 60
-75
+79
+49
+a9
+26
+ad
+2b
+36
+3c
+37
+d7
+bc
+0c
+e9
+49
+6b
+b6
+93
+3a
+a6
+18
+7b
+6b
+87
+51
+94
+a5
+e6
+39
+ca
 d9
 a7
+39
+81
+06
+fa
+7c
+e8
+70
+89
+88
+20
+6a
+88
+67
+9b
+d0
+44
+44
+a7
+cb
+54
+f6
+7d
+e8
+4b
+a3
+3d
+3b
+af
+b4
+d4
+27
+10
+10
+28
+44
+0d
+e8
+e2
+89
 a2
-cd
-e0
-ba
-36
-e3
-01
-5e
-76
-fe
-61
-f5
-66
-ef
-08
+38
+5f
+a3
+5f
+b8
+33
+64
+b8
 d1
-09
-fa
-d9
-3a
-f0
+23
+46
+ca
+cf
+77
+e8
+4f
+6f
+14
+92
+8f
 11
-95
-ec
-bf
-98
+be
 d6
-12
+7f
+0c
+e6
+78
+fc
+d2
+31
+13
+d7
 84
-5b
-75
-c4
-02
-7c
+c2
+09
+f0
+91
+6b
+20
+6e
+8b
+3b
+ef
+3d
+d4
+9d
+cf
+ee
+c2
+a2
+9b
+12
+d7
+aa
+12
+8d
+9a
+10
+28
 f7
-d3
-8c
-0c
+e1
+07
+c6
+8b
+e2
+a7
+4e
+a0
+34
+35
+f8
+af
+ac
+cf
+4c
 83
-e3
-ba
-8e
-04
+2c
+a6
+80
+ca
+42
+b8
+ec
+1b
+88
 5d
-9d
-71
-66
-d8
-6b
-46
-3f
-d1
-e3
-2b
-4f
-74
-54
-6a
-77
-d3
-98
-d2
-f4
-84
 16
-fc
-c3
-f5
-35
-82
-a1
-03
+6b
+cd
+4a
+e5
+58
 bf
-0e
-9d
+06
+ed
+88
+d8
+e2
+6a
 71
-29
-56
-36
-0a
-5c
-2d
-96
-f9
-b6
-3a
 51
-21
-16
-cc
-25
-82
-c9
-1b
-9c
-21
-ea
-c4
-2c
-0f
+ee
+37
 14
-44
-48
-23
-47
-ba
-6c
-fa
-32
-4e
-35
-96
-94
-68
-c5
-1b
-74
-e1
-b2
-d9
-9f
-13
-a4
-e2
-bc
-6d
+ea
+b6
+80
+64
+6b
+9a
+5f
+21
+e3
+77
+04
+15
+30
+bd
 b6
-05
-4f
-8e
-c6
-d6
-4b
-c6
-98
-94
-a3
 6c
-ca
-f8
+71
+fe
+41
+6d
+0a
+73
+ae
+c1
+b0
+13
+6d
+76
+a6
+14
+7e
 dd
-06
-59
+5d
+c0
+ff
+55
+cc
+fe
+4c
+6f
+ea
+23
+65
 9a
+6b
+d9
+cd
+ec
+b3
+af
+ee
+41
+e0
+0f
+23
+b5
 8c
-16
-68
-49
-fa
-68
-eb
-2c
 33
-b6
-86
-dd
-6b
-70
-ef
-36
-f4
-59
+2d
+66
+78
+e3
+3a
+a1
+4d
+98
+5e
+30
+04
+8e
+de
+9e
+3f
+46
 38
-e5
-34
-bd
-16
-83
-53
-d1
-1a
 45
-da
-39
-d2
-e2
-1a
-ad
-6e
-53
-0e
-a1
-12
-03
-db
-12
-cc
-f7
-e6
+d0
+86
+ca
+6d
+10
 92
-eb
-6c
-d7
-65
-a0
-d1
-26
-9d
-6a
-fc
-6a
-b4
-c2
-a3
-43
-6c
-03
+fe
+b0
+f5
+60
+15
 fc
-ad
-70
-6f
-dc
-7c
-f0
-76
-a0
-8f
-c0
+07
+02
+cd
 ce
-f7
-55
-5e
-b1
-08
-1d
-26
-76
-3a
+43
+21
+f6
+38
+44
+eb
+73
+78
+9b
+97
 f9
-89
+9a
+16
+3d
+e7
+f9
+56
+ee
+a2
+00
+37
+f0
+67
+b9
+5f
+78
+14
+42
 a4
-54
-b6
-51
-19
-9e
-4e
-3a
-e5
+5e
+3d
+e6
+84
+c7
+e7
+86
+0f
+b0
+1b
+30
+f5
+fe
+09
 ad
-88
-26
-6e
+77
+e6
+ef
 ea
-bc
-15
-a3
-1c
-40
-7f
-72
-79
-13
+8d
+85
+67
+d8
+af
+bd
+d8
+ad
+14
+32
+6d
+49
+03
+cf
+04
+4c
+c2
+e4
+62
+0c
+42
+55
+eb
+4d
+7b
+f1
+91
+ba
 1e
+aa
+ae
 bd
+87
+3f
+3e
+8e
+30
+b2
+69
+a1
+59
+b3
+93
+69
+f8
+d1
+ad
+44
+be
+e8
+78
+67
+6a
+12
+72
+17
+29
+6d
+fd
+e4
+3f
+8c
+ee
 7a
-4b
-6c
-5d
 96
-97
-29
-22
-34
-03
-bb
+a0
+59
+8b
+39
+4a
+ed
+32
+a7
+37
+74
+dc
 38
-c2
-5c
-7e
-e6
-a2
-75
-bb
-c1
-a3
-fe
-aa
-3b
-73
 72
-9a
-c5
-ed
-ea
-3e
-a3
-77
-00
-47
+18
+37
 f6
-9b
-76
-04
-20
-3d
-a3
-3d
-79
-b8
-19
-4c
-e3
-f3
-a9
-93
-32
+b0
+48
+7c
+22
+9a
+b1
+2c
 44
-a2
-a7
-5f
-36
-9b
-71
-3c
+7c
+6f
+22
+42
+b5
+85
+4b
+0c
+40
+ac
+28
+45
+92
+eb
+c0
+42
+bc
+1f
+e0
+8f
+da
 9d
-5a
+24
+99
+9f
+50
+86
+ad
+d4
+85
+99
+1a
+c6
+77
+11
+a5
+de
+96
+4f
+64
+aa
 dc
-15
-e2
+a0
+80
+d4
+a8
+e0
+48
+db
+92
+95
+4b
+17
+16
+d8
+9d
+1a
+f1
+df
 59
+e0
+15
+cb
+d3
+8f
+2c
+8e
+4c
+d0
+66
+7a
+04
+5a
+fd
+10
+6a
+f0
 47
-3a
-00
-cf
-12
-17
-79
-ba
-4b
-f9
-d2
-00
+9e
+30
+a8
+d6
+d6
+46
+a5
+aa
+a4
+80
+8a
+01
+b4
+d1
+bf
+7c
+a4
 73
-63
-b8
-67
-6f
-7a
-6e
-8f
-87
-8c
+6a
 f5
-57
-52
-1e
-bb
-38
-55
-a2
-c9
-e8
-64
-c3
-37
-1c
-f7
-cd
-2f
-f7
-77
-1a
+09
+23
+ac
 c9
-5c
+b0
+22
+10
+ec
+7f
 d1
-8c
-e8
-c9
-13
-f0
-df
-b3
-dd
-60
-58
+54
+8d
+ab
+e2
+22
+ca
+8f
+d4
+72
+08
+3c
+ec
 56
-9d
-2e
-ff
+bb
+97
+a3
+db
+40
+f8
+a2
+e0
+e9
+15
+55
+35
+3e
+90
+18
+83
+b5
+1f
+ba
+8f
+6c
 7e
-62
-70
-36
+eb
+b8
 01
-71
-29
 d4
-49
-23
-23
-93
-6b
-a6
-be
-a9
-b1
-e8
-68
-fb
-b5
-ba
-45
-59
-46
+74
+bb
+39
+63
+1c
+5f
+ec
+bc
+a1
+e6
+51
+7e
+70
+c9
+7e
+e1
 82
-ce
-2e
 cf
-18
-40
-90
-5c
-80
-f0
-ac
-99
-37
-e2
-29
-5d
-fa
-0c
-dd
-54
-4d
-7f
-92
-79
-c3
-69
-33
+af
+df
 f6
-fb
-cc
-e0
-5c
+ad
+a8
+ea
+28
+8a
+51
+15
+be
+e4
+03
+10
+36
+9d
 75
-86
-f0
-78
-f8
-bf
-a1
+3c
+7d
+16
+ce
+3b
+fe
+90
+fd
+8c
+d7
 eb
-9b
-3f
-fa
-99
-e5
-7a
-9f
-13
-c8
-5e
-98
-22
-83
-27
-ff
-3f
-33
-67
-66
-57
-cd
 bd
-89
+7a
+c0
+85
+b4
+24
 bf
-7b
-6b
-69
-79
-34
-41
-cf
-cb
-90
-07
-14
-a0
-6c
-94
-60
-59
-ec
-d0
-bd
-c9
-bd
-9b
-9a
-84
-33
-4f
-44
-6d
-4a
-39
-67
-89
-42
-b6
-a2
+f3
+b7
+0f
+c6
+a4
 2c
-93
-b2
-0b
+b4
+1b
+4e
+17
+43
+4a
+78
+ef
+7c
+0a
+72
+f9
+e0
+64
+58
+44
+8f
+01
+8a
+ce
+cc
+11
+5f
+4c
+24
+ae
+a7
+e1
+4c
+a9
+80
 bc
-b3
-28
-42
-1e
-6e
-90
-ee
-81
-f2
-6e
+cf
+2e
+84
+e2
+12
+71
+91
+83
 f6
-31
-5c
-31
-ac
-46
-88
-f4
-7c
-53
+f3
+09
+bd
+41
+02
+85
+17
+cb
+27
+97
+a4
+91
+6a
+40
+72
+05
 4a
-61
-a9
-00
-59
-b3
 90
-d6
-4f
-dc
-a1
-fd
-03
-72
+12
+f5
 72
-e5
+3d
+cb
+69
+1b
+26
+9f
+a5
+25
+af
+15
+4b
 63
+08
+8d
+bd
+61
+a0
+e8
+e8
+af
+ff
+9c
+59
+54
+5e
+8f
+a5
+c7
+36
+f5
+25
+ef
+e9
+4f
+c8
+84
+94
 c5
-4a
-c3
-d8
-6f
-39
-ce
-ed
-a6
-d9
-bc
-b0
-cd
-55
-43
-b7
-37
-7d
-aa
-7c
-cd
-1b
-58
+49
+64
 40
-92
-11
+6e
+84
+7c
 f7
-72
-d9
-73
-7d
-e6
-b8
-f5
-66
-95
-e2
-49
-22
-3b
-2e
-9c
-8c
-6f
-ad
-b8
-3a
+47
+14
+9f
+d5
+d5
+d3
+07
+ac
+d3
+ea
+e4
+1b
+b4
+ed
+dd
+fd
+d8
+ea
+c1
+1e
+8b
+0a
+6d
+6d
+0c
+21
+c3
+6e
+21
+09
+e1
+35
 bd
-c9
-3a
-f4
-b8
-94
-4a
-2a
-25
-78
-5d
-4b
+eb
+42
 8b
-76
-ff
-2e
+09
+ba
+ea
+06
+82
 e7
-5d
-45
-8a
-7d
-55
-1a
-e4
-07
+4b
+dd
+95
+76
+7c
+3e
+71
+f1
+9c
+52
+fa
+80
+82
+e5
+0c
+70
+57
+fa
+e9
+47
 7f
-54
-54
+85
+3c
+25
+fb
+86
+3d
+57
+1a
+1a
+2a
 f8
-6a
-88
-37
-fa
-1e
-79
-8c
-5c
-91
-37
-69
-45
+5e
+b1
+ed
+fc
+7a
+bc
+63
+f8
+74
+18
+5a
+b2
+aa
+f2
+fb
+c5
+2b
+62
 44
-19
-2c
-3d
+0f
+be
+b0
+18
+af
+33
+e3
+ff
+1d
+ac
+52
+39
+a5
+ea
+91
+f3
+5e
+ca
+f9
+cb
+81
+a8
+e1
+c3
+09
 aa
 55
 40
@@ -5735,8 +5735,8 @@
 55
 5f
 57
-40
-5b
+a0
+30
 ff
 ff
 ff
Index: output/otp.dat
===================================================================
--- /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/output/otp.dat	(revision 1812)
+++ /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/output/otp.dat	(working copy)
@@ -9,4474 +9,4474 @@
 00
 00
 00
-8f
-ab
-f1
-00
-3c
-ae
-c6
-03
-78
-5c
-8d
-07
-e0
-71
-35
-1e
+8a
+5e
+d4
+0f
+9a
+d4
+7c
+b7
+6f
+41
+52
+79
+3b
+ad
+6c
+da
 aa
 55
 60
 11
-24
-e6
-00
-26
+47
+22
+f4
+c3
+1a
+b7
+1e
+40
+8c
+5e
 6d
-0c
-51
-3b
+5b
+ee
+9a
+4b
+2a
+cc
+3e
+d4
+cb
+70
 49
-7e
-20
+09
+72
+b3
+68
 7c
-3d
-fc
-1c
-3c
-a9
+ce
+95
+99
+33
+05
+69
+5a
+82
+c2
+27
+2c
 8b
-3f
-7e
-68
-bd
-31
-b0
-fc
-2e
-10
-d5
+78
+2b
+93
+5a
+b8
+25
+9b
+d4
+5d
 17
-75
-69
-c5
+ec
+88
+da
+df
+04
+54
+a2
+3b
+2e
+ea
+26
+0f
+4a
+c6
 d4
-cd
-57
-7c
-4e
-f0
-8f
-8e
-bc
-7c
-19
+4d
+be
+0a
+5b
+d5
+cf
+74
+a6
+3b
+21
+93
+64
+91
+6c
+a5
 34
-7f
+6f
+28
 73
-aa
-41
-ab
-a3
-48
-df
-d6
-ce
-11
-62
+fe
+24
+f6
+c6
+03
+50
+85
+bb
+03
+3d
+cf
+e0
+4b
+03
+85
 8b
-20
-73
-99
-f0
-fb
-ba
-38
-7c
-67
-f8
-4f
-41
-7c
-25
-5d
-f1
-0e
-61
-42
-27
-37
-90
-7a
+83
+cf
+fc
 5d
-09
-f3
-d3
-7c
-5b
-9b
-97
-b8
-0b
-bc
-39
-eb
-66
-9a
+f7
+f0
+47
+7f
+57
+4d
+53
+84
 03
+2b
 52
-8a
+2a
 5a
-c5
-e3
-13
-09
-a9
-5d
-20
-dc
-6d
-ba
-0f
-9d
-45
-e5
-9f
-b6
-d6
-15
 bb
-e6
-c6
-1c
-80
-c0
-15
+9d
+f2
 9c
-59
-58
-55
-f1
-b8
-17
-84
-46
-78
-8d
-ce
-4b
-d5
-99
-fd
-91
-9e
-d6
-0b
-50
-55
-a4
-a5
-6e
-32
-1a
-09
-17
-d3
-01
-46
-04
-a7
-1d
-87
-4b
-27
-cc
-5a
-e3
-d2
-09
-88
-1e
-cc
-6c
-0f
-ab
-5d
-cd
-00
-f0
-f5
-ca
-e0
-94
-d0
-52
-50
-44
-11
-67
-4f
-25
-e1
-85
-c4
-19
-30
-a8
-7d
-b9
-b5
-cb
-34
-26
-62
-32
-43
-a3
-cb
-13
-d4
-68
-30
-ec
-10
-f0
-78
-eb
-fe
-b5
-ba
-93
-a4
-db
-7c
-52
-ba
-b3
-4d
-8f
-d9
-8b
-9d
-48
-6a
-88
-36
-6b
-07
-8b
-5f
-0d
-d6
-bf
-80
-e5
-a5
-ac
-cf
-2e
-c5
-50
-61
-db
-22
-9b
-07
-0d
-ac
-47
-14
-0b
-01
-44
-b1
-7e
-ed
-6f
-7c
-4f
-61
-24
-e7
-a8
-f9
-e7
-54
-35
-2e
-a4
-37
-71
-8b
-db
-0d
-f5
-a5
-6e
-28
-97
-41
-c4
-b4
-e7
-ff
-05
-2d
-7e
-c4
-d7
-da
-5e
-5f
-cf
-b0
-78
-ce
-34
-25
-7a
-f8
-35
-94
-66
-e2
-22
-9e
-13
-a5
-dd
-71
-63
-fd
-ff
-31
-09
-d6
-49
-97
-f7
-a0
-01
-96
-5d
-6d
-b8
-af
-33
-29
-b8
-f9
-78
-bb
-85
-4d
-09
-ae
-01
-4f
-f8
-63
-d9
-ca
-e9
-01
-56
-69
-ae
-72
-fa
-f1
-5c
-82
-d3
-f2
-41
-b0
-5a
-30
-cc
-39
-f1
-5c
-90
-08
-04
-9e
-4e
-9c
-22
-83
-49
-1f
-13
-bd
-f9
-53
-71
-7e
-eb
-23
-4b
-ee
-44
-f2
-a5
-16
-38
-08
-37
-c7
-0d
-ae
-51
-e3
-88
-af
-34
-fd
-b0
-93
-6f
-85
-e9
-c6
-9c
-3a
-42
-2a
-77
-0e
-82
-38
-f4
-9c
-c7
-10
-f1
-b2
-70
-81
-52
-fc
-aa
-3f
-cb
-42
-e6
-ac
-a7
-55
-e2
-7c
-0c
-3a
-72
-17
-b5
-be
-f7
-fa
-6a
-46
-10
-03
-d6
-c8
-fa
-82
-e4
-ac
-87
-58
-cb
-74
-42
-09
-c6
-24
-c3
-35
-90
-a7
-5a
-d3
-36
-68
-4f
-11
-08
-53
-0f
-44
-ea
-2f
-90
-cb
-df
-bb
-1a
-1f
-b3
-ae
-b7
-e4
-b9
-9f
-f9
-97
-bc
-50
-6b
-b6
-38
-ee
-ed
-5e
-da
-e1
-4d
-09
-38
-c0
-35
-9e
-b8
-63
-02
-63
-c2
-5a
-77
-45
-b2
-2b
-84
-93
-7b
-fe
-b8
-33
-27
-21
-ef
-a4
-f2
-f3
-cf
-ff
-d1
-b9
-59
-8c
-83
-f7
-69
-74
-77
-a4
-69
-58
-43
-65
-ab
-41
-27
-a3
-35
-e9
-37
-b5
-c5
-94
-87
-0e
-5a
-dc
-fb
-b6
-40
-8a
-dc
-27
-ca
-f1
-6b
-84
-f6
-c6
-90
-7a
-1f
-7f
-0c
-87
-de
-5e
-40
-40
-bc
-50
-7d
-f8
-fc
-9a
-e3
-e6
-3c
-4c
-8a
-e0
-af
-13
-a6
-93
-d4
-35
-78
-ac
-62
-d3
-09
-80
-a4
-89
-c6
-4a
-ad
-b7
-80
-3f
-e7
-bc
-f3
-83
-bd
-3c
-8b
-46
-9d
-f1
-1e
-7f
-29
-24
-4f
-e5
-40
-a3
-13
-e1
-29
-a5
-26
-af
-c4
-d1
-9b
-13
-63
-a4
-f7
-15
-b0
-b1
-89
-4f
-8f
-6f
-b3
-97
-6a
-f8
-05
-ec
-9f
-0d
-94
-4e
-ba
-7e
-1b
-4e
-3a
-9c
-bc
-64
-0e
-98
-2c
-fe
-87
-75
-9f
-ec
-80
-59
-11
-94
-0a
-96
-1c
-52
-9c
-69
-6e
-50
-79
-bd
-22
-6e
-ce
-94
-62
-8e
-9f
-3a
-7d
-61
-20
-75
-87
-96
-fb
-9e
-09
-b2
-8a
-49
-3f
-86
-db
-33
-80
-8a
-c0
-f9
-19
-73
-23
-8f
-f6
-bd
-d5
-d8
-f7
-fc
-01
-fd
-d2
-fb
-11
-e1
-d8
-c4
-04
-98
-44
-97
-64
-b4
-b1
-ca
-9a
-a0
-a8
-10
-ce
-3f
-e5
-b2
-ad
-51
-99
-fc
-97
-c1
-02
-55
-f1
-4d
-48
-00
-13
-d8
-87
-47
-36
-86
-4d
-37
-4f
-c7
-a8
-b4
-a2
-af
-80
-d9
-b6
-a5
+69
 f0
-68
-04
-d2
-f7
-4f
-ea
-3b
-45
-b5
-57
-e7
-c3
-f4
-e8
-6a
-1a
-53
-a3
-94
-45
-83
-bc
-08
-15
-ab
-ad
-f7
-f2
-d3
-5f
-35
-36
-48
-1f
-49
-1e
-b8
-85
-1b
-b3
-c9
-2d
-b1
-98
-68
-1b
-e3
-fb
-04
-00
-b4
-b7
-b2
-34
-40
-59
-04
-a9
-b0
-5e
-1f
-5c
-89
-67
-76
-7f
-e7
-e9
-6c
-52
-e4
-ab
-8c
-7a
-4e
-e9
-fb
-21
-3b
-46
-c6
-96
-c2
-fb
-ce
-cd
-11
-b7
-b6
-51
-20
-54
-e0
-e9
-2b
-35
-6a
-4b
-1d
-60
-e5
-37
-b7
-50
-ca
-59
-60
-d8
-b6
-8e
-ba
-19
-06
-6e
-5b
-9d
-14
-04
-62
-65
-35
-99
-f6
-a7
-5a
-30
-fe
-8c
-fa
-64
-91
-1a
-50
-ce
-2e
-16
-93
-f8
-43
-61
-81
-bc
-a2
-08
-21
-fd
-97
-ca
-61
-59
-17
-b8
-a4
-b6
-d2
-17
-94
-97
-45
-89
+71
+12
 f7
-bc
-d8
-3b
-93
-72
-7a
-84
-b6
-d4
-fa
-23
-46
-0e
-95
-bb
-7b
-5f
-a0
-ab
-c2
-90
-9c
-40
-07
-56
-98
-9b
-e9
-38
-f3
-ac
-2b
-83
-da
-df
-cb
-47
-36
-9e
-77
-f8
-18
-8a
-72
-95
-fe
-4c
-5f
-7f
-05
-03
-4b
-7b
-27
-8d
-17
 b5
-08
-02
-d5
-da
+73
+2c
 76
-9a
-e3
-41
-e2
-15
-14
-a7
-9e
-8f
-d4
-22
-ce
-20
-bc
-a7
-9c
-08
 4e
-89
+42
+da
 f6
-84
-10
-e7
-b2
-a0
+06
+cd
+a9
+bd
+49
 71
-07
-dc
-d7
-7b
-a6
-e4
-08
-23
+1e
+c3
+e7
+cc
+77
+c1
 33
-bd
-20
-1a
-92
-bb
-ab
+f3
+0f
+0f
 73
-bc
-66
-c9
-8c
-83
+18
+24
+c4
+03
+d8
+36
+af
+59
+7b
+16
+c2
+59
+45
+20
 e4
-07
-dc
-da
-8c
-0f
-e5
+92
+db
+98
+40
+01
+42
+0e
+d1
+c6
+f6
+78
+96
+bf
+d3
+0d
+82
+58
+0d
+9e
+75
+0a
+60
+fe
+03
+af
 e8
-9a
+d3
+c9
+3e
+96
+25
+16
+b3
+74
+47
+74
+16
+6a
+92
+8b
+75
+3a
+98
+26
+38
+33
+69
+f0
+c7
+49
+52
+69
 d0
-6d
-a5
-e6
-94
+ed
+97
+19
+18
+d6
+98
+f8
+d9
+77
+58
+74
+63
+78
+72
+d6
+6e
+c8
+77
+75
+c9
+77
+41
+15
+f0
+92
+96
+43
+b8
+7f
+83
+36
+52
+02
+74
+01
+03
+03
+91
+f4
 0a
-bf
-5b
-8a
+55
+eb
+a6
+ab
+8f
+b0
+cf
+9e
+f4
+c3
+90
+f9
+c2
+2c
 42
-c6
+3b
+e2
+8d
+1d
+32
+e5
+4e
+25
+b7
+91
+0e
+43
+e2
+bd
+dd
+af
+98
+d7
+1d
+cd
+ee
+c0
+4b
+56
+2f
 1c
-3c
-54
-bf
-5c
-64
-f3
-5f
+47
+0f
+78
 ec
-63
+e1
+c0
+e7
+05
+92
+be
+c6
+1d
+51
+f5
+a3
+35
+0d
+d8
+2b
+5d
+a8
+dc
+56
+8e
+46
+4f
+8b
+10
+88
+f6
+fd
+41
+82
+ad
+39
+e5
+f6
+2e
+af
+3e
+dc
+79
+48
+c3
+13
+77
+9e
+91
+59
+dc
+1b
+33
+58
+a5
+6e
+95
+af
+3e
+fd
+e6
 61
-e0
-8c
-92
-03
-6d
-e3
-cb
-8e
+50
+48
 c0
-9f
+cb
+be
+99
+8c
+b3
+94
+af
+27
+c2
+76
+ca
+aa
+00
+3d
+b6
+7c
+6b
+87
+08
+a5
+20
+e7
+dd
+0b
+c8
+5b
+48
+b7
+93
+9c
+be
+82
+59
+08
 6e
-25
-30
-18
-8d
-68
+3f
+67
+4a
+2c
+a8
+04
 89
-66
-5d
-6b
-19
 8a
-90
-24
-be
-c9
-be
-bc
-ad
-a2
-8e
-7a
-8f
-28
+f0
+2a
+b2
+df
+06
+ee
+7c
+86
+7e
+80
 ab
-e7
-c1
-a1
-4a
-bd
-39
-54
-f9
-40
-61
-cd
-26
-aa
-17
+27
+b4
 aa
-08
-72
-0c
-bd
-56
-f5
+d3
+3e
+ab
+0f
+6f
+c6
+5d
+fe
+fa
+b3
+41
+51
+1a
 43
-c9
-31
-2c
-96
-5f
-b6
-85
-a8
-66
+c6
+38
+3f
+5b
+e8
+84
 d8
+b8
+d5
+46
+d4
+3a
+18
+f0
+a4
+7b
+e9
+88
+a8
 30
-8e
-54
-f7
-d9
-09
-93
-2b
-1b
-e4
+f4
+05
+98
+12
+31
+47
+39
+ce
+75
+a9
+38
+f2
+b1
+aa
+70
+7f
+fc
+80
+90
+02
+3a
+cf
+75
+05
+79
+06
+4f
 52
-19
-cb
+e3
+c1
+00
+de
 3c
-11
-03
+c1
+64
+53
+09
+37
+43
+0e
+9d
+b0
+17
+e5
+78
+0c
+2d
+34
 73
-4f
-4a
-61
-d4
-b3
+b2
+2d
+69
+e6
+1f
+24
+df
+ef
+19
 e4
-e8
-29
-29
-8a
-0d
-af
-be
-ac
-17
-7e
-43
-47
+1e
+a9
+22
+e9
+ec
+63
+12
+f3
+62
+88
+ff
+3f
+4c
+49
+f0
+90
+b3
 10
-42
-5a
-64
-70
-12
-b5
-1e
-ce
-2f
-a2
-5b
-eb
+e9
 ac
-f3
-0d
-0a
+63
+81
+52
+52
+a4
+33
+b9
+53
+b3
+6d
+f8
+ff
+f6
+ec
+9d
+3e
+27
+58
+d7
+45
+e9
+9c
+0e
+1e
 06
-56
-82
+9a
+b9
 31
-f3
-f7
-af
-7e
-6e
-9b
-bd
-46
-50
 2c
-03
-d5
-13
-8e
 86
-f1
-8e
+a9
+b9
+09
+9f
+ad
+46
+71
+1e
+83
+f8
+bc
+1f
+2f
+0d
+b5
+bb
 17
-1a
-49
-0a
-49
+bd
+fa
+45
+19
+9b
+24
+24
+56
+b0
+18
+1e
+fd
+f1
+c8
 94
-52
-d2
-78
-31
+70
+ab
+b7
+a8
+a1
+20
 60
-34
-27
-d0
-ae
-8b
-80
-76
-47
-dc
-eb
-50
-cf
-15
-c4
-fe
-7a
-8a
-68
+6e
+59
+23
+b7
+41
+a2
+f8
+30
+94
+00
 16
-31
-f0
-c8
-6f
-d9
-61
-4d
-07
-70
+00
 f1
+6d
+a5
+af
+6f
+79
+8d
+8c
+12
+33
+dc
+33
+90
+18
+18
+53
+c7
+7b
+f8
+a8
 01
-07
-b1
-80
-cb
-b3
-0e
-76
-20
+03
+1a
+ff
+a1
+fd
+16
+33
+c1
 90
-df
-aa
-b1
-8b
-d2
-ab
-95
-de
-c9
-20
-7a
-67
-aa
-71
+bf
+21
+f6
+1c
+ad
+94
+fd
+d8
+49
+dc
 d3
-c1
-bc
+78
+49
+82
+a5
 96
-fb
-01
-8e
-de
-e5
-89
-07
+92
+0b
+61
+af
+2f
+b7
+9c
+fa
+7a
+b8
+88
+c9
+f7
 06
-4b
-1f
-f6
+69
 61
-3e
+fd
+b1
+71
+e8
+7d
+d7
+3d
 57
-b9
-01
-d0
-0b
-d2
-a7
-75
-2c
-3b
-af
-bd
-83
-96
+a6
+cd
+1d
+94
+42
+0f
+92
+b7
+9c
+db
+b2
 7d
-c5
+cb
+d7
+e9
 2e
-cd
+97
+29
+38
+41
+75
+bc
+38
+fc
+44
+f4
+5b
+4d
+52
+c8
 bb
-bf
-53
-43
-20
-9e
-b1
-7f
-ba
-c4
+11
+18
+99
+5f
 89
-69
-6e
-82
-3a
-84
-c7
-9c
-6d
-59
-8e
-3a
-46
+d2
+b8
+de
+2b
+fc
+9f
+e7
 67
-a7
-6a
-f4
-5a
-54
-54
-78
-04
-97
-d8
-d0
-d0
-21
-2d
-7a
-11
-7f
-33
-d7
-22
-39
-d7
-b0
-78
+6e
+8c
 43
-38
-42
-9d
-05
-f2
-8d
+e8
+10
+17
+76
+86
 21
-96
-e5
-ae
-32
-8a
-a6
-8d
-0a
-ed
+75
 fd
+76
+16
 c7
-92
+ea
+1d
+ea
+e5
+17
+58
+9b
+6c
+15
+36
+7b
+30
+f4
+82
+db
+d5
 23
-e7
-74
-03
-be
-54
-38
-c6
+58
+b6
+f0
+b1
+ae
+fd
 bb
-74
-fb
-df
-b5
-5e
-f3
+4b
+1c
+5d
+9d
+14
+2b
+42
+95
+f2
+ca
+14
+b4
+e5
+9c
+47
+b6
+64
+14
+85
+2f
+22
+19
+8f
+28
+4f
+5d
+cf
+a5
+22
+98
+c9
+2d
+9f
+eb
+d8
+85
+14
+a1
+eb
+a1
+17
+5a
+cf
+81
+25
+30
+37
+89
+2e
+e4
+55
+70
+da
+60
+72
+43
+11
+7b
+cf
+da
+be
+3d
+4a
+8c
+0b
+a7
+10
+31
+93
+4c
+2c
+13
+ae
+b6
+c9
+cd
+4a
+84
+cb
+47
+7d
+55
+2c
+f7
 4f
+82
+41
+76
+bd
+4d
+29
+57
+ad
+db
+ca
+aa
+da
+f6
+17
+3f
+1e
+f2
+ed
+22
+51
+a5
+46
+19
+85
+30
+4d
+cc
+e4
+01
+b8
+00
 c9
-76
-d4
-2c
-0b
+22
+11
+25
+65
+9f
+2d
+e3
+b6
+b2
+8e
+1e
+d5
+6e
+7f
+00
 89
-a2
+3d
+5f
+f3
 bd
-55
-c9
-59
-cb
+00
+62
+53
+ce
+6b
+80
+09
+4d
+96
+13
+9a
+cd
+54
+a3
+82
+15
+49
+92
+f3
+dd
 46
+bb
+70
+0e
+46
+d3
+00
+cc
+01
+9e
+12
+81
+19
+f9
+fc
+f0
+66
+81
+2d
+60
+e1
+22
+37
+66
 18
+16
+da
+9b
+4a
+cf
 15
-06
-d8
-15
-0f
-2a
-eb
-2e
-7a
-a0
-38
-79
-b5
-a3
-ba
+30
 51
-5a
-be
-67
-3a
-17
-e1
-54
-4b
-2d
-92
-ac
-18
-f7
-f2
+a7
 3b
-a6
-59
-64
-ab
-8c
-0c
-9d
-4f
-8b
+e0
+1e
+93
 a1
-68
-8d
-30
-70
-84
-83
+2f
+e4
+64
+92
+b7
+0b
+f4
+4a
+f4
+85
+2f
+b1
+11
+93
+d1
+ad
+6a
+21
+7b
+55
+4e
+f7
+f4
+87
+0b
+27
 f6
-ac
-b4
-35
-f3
-71
+4e
+55
+0f
+f1
+3e
+1e
+55
+15
+47
 93
-96
-ca
-cc
-50
-77
+0b
+ec
+ac
+13
+23
+df
 52
-63
+8a
+21
+25
+d5
+61
+38
+b7
 d2
-ee
-91
-84
-c2
-29
-35
-bd
-ad
-c4
-2b
-92
+8e
+1d
+83
+20
+7e
+d8
+48
+6b
+6e
+4e
+ab
+a5
+b9
 ec
-e8
-52
-40
-e0
-5e
-b3
-58
+27
+5c
+26
+71
+00
+86
 60
-b5
-b6
-57
-cc
-91
+77
+9c
+9d
+23
+1f
+1a
+98
 91
-60
 fb
-91
-41
-ae
-bc
-74
-8b
-7a
-86
+a1
+17
+a8
+04
+9d
 c3
-9c
-02
-8d
-f5
-49
-e7
-11
+8f
+c6
+47
+21
+4b
+66
+b3
+6c
+6e
+b1
+20
+9b
+22
+af
+57
+d0
+9e
+44
+8c
+2e
+b8
+54
+42
+e5
 27
-56
+71
+02
+9d
+0b
+12
+af
+2f
+fc
+6c
+85
+91
+98
+8f
+96
+7e
+95
+ac
+77
+e2
 f7
-a9
-e4
-09
-2c
-35
+55
+14
+6d
+d8
+18
+96
+e8
+01
+27
+bc
+3a
+38
 5b
-42
-4d
-92
-90
+f0
 89
-2b
-1e
+a3
+c1
+29
+c8
+27
+d9
+8a
+ad
+85
+ff
 d0
-b0
-f8
+ab
+97
+c6
+fa
+e6
+23
+26
 43
-09
-a7
+ef
+8d
+26
 db
-03
-72
-4a
-be
-d2
-43
-a8
-86
-c1
-81
-4c
-7c
-96
-10
-cf
+a1
+3b
+f0
+ed
 8e
-15
-9b
-a0
-1e
-e9
-83
-2c
-63
-37
-b4
-49
-d7
-a8
-92
-cd
-2f
 56
-95
-8d
-4e
-61
 08
-ce
-8a
-47
-fd
-c4
-33
-be
-bb
-16
-05
-1e
-98
-4d
-3a
-23
-d4
 cd
-87
-81
-f5
-16
-85
+7f
+8c
+15
+bc
+b8
+89
+d9
+46
+dd
+b7
+ed
+a9
+f8
+cc
+97
+1b
+3f
+07
+1b
+e1
 4d
-f5
-ce
-03
-82
-b5
-27
-50
-70
-1d
-7b
-d7
+05
+e1
+bf
+57
+c4
+40
+53
+9a
+18
+b2
+f0
+ba
 55
-c1
-67
-84
-dc
-34
-c7
+ef
+1f
+ab
+d1
+f8
+77
+e7
+d1
+da
+d7
+58
+19
+f9
+74
+fe
+65
 b6
-3e
-51
-c1
-1a
-de
-cf
-5d
-be
-a0
+e6
+ec
 d9
-e1
-b6
-66
-2f
-1b
-9d
-7e
+a2
 2c
-7d
-6f
-78
-c2
-59
-5c
-6e
-73
-ab
-3e
-72
-a8
-cd
-8c
+01
+76
+de
+e7
+1d
+27
+e4
+14
+c8
 13
+42
+47
+d5
+09
+72
 78
-fd
+66
 ae
-e0
-b7
-29
-ff
-51
-48
-b5
-60
-43
-b6
-b6
-aa
-cc
-b4
-37
-f9
+35
+1f
+fb
+f3
+cb
 4f
-c6
-1a
-17
-e9
+a4
 08
-7f
+d9
+b7
+db
+f8
+8a
+9a
+a4
+52
+35
 11
-ef
+7a
+a3
+4d
+a1
+b0
+d8
+2a
+c5
+a6
+54
+a6
+57
+24
+fd
+d5
+2f
+8d
+8e
+3c
+11
+13
+5a
+34
+e8
+eb
+46
+ce
+fe
+b0
 14
-25
-07
-cc
+0b
+0a
+10
+3e
+83
+4d
+ba
+7e
 44
-1e
-6f
-af
-f0
-aa
-5f
-43
+80
+24
+32
+7f
+ef
+49
+54
+71
+40
+45
+3e
+70
+96
+0b
 30
-62
-d5
-d0
-06
-23
-21
-6d
+b4
+39
+1e
+c6
+cf
+a7
+3d
+72
+74
+54
+e9
+45
+b8
+e2
 fa
-ea
+90
+33
+9f
+95
+8f
+c8
+4e
+81
+7d
+7d
+11
+75
 68
-37
-1e
-bd
-ea
-bb
-d9
-93
-89
+88
+03
 dc
-00
-c2
+02
+52
+54
+e1
+11
+19
+e0
+30
+49
+9a
+57
+bb
+8a
+4c
+b2
+5f
+99
+d4
+99
+96
+d7
+49
+b5
+1b
+94
+a5
+45
+6b
+d3
+72
+5f
+9b
+b3
+06
+e2
+55
 2d
+38
+5d
+b3
+1c
+df
+e0
+c7
+3b
+c7
+bc
+44
+50
+c9
+80
 7e
-8f
-36
-13
-9a
-6e
-db
+c9
+22
+e6
+83
+ff
+ef
+e4
+88
+74
 98
-d0
-b7
-43
-59
-a3
-2b
-8c
-bc
-7d
+de
+2e
+bd
+70
+97
+39
+fc
+89
+e1
+c6
+f8
+a1
+19
+f6
+e6
+4e
+8b
+5a
+9d
+b3
+fb
+3c
+97
+1c
+d2
+29
+1a
+4a
+c3
+23
+6d
+32
+13
+61
+36
+a1
+ac
+4c
+3f
+66
+44
 73
-04
+2c
+69
+52
+f6
+ee
+ca
+fe
+e2
+7e
 c5
-9d
-d2
+c9
+0a
+2a
+eb
+2d
+9c
+5f
+28
+25
+8a
+2f
+63
 84
-57
-74
+9d
+cf
+0a
+ff
+f7
+4b
+3b
+eb
+c0
+a7
+42
+2f
+2f
+6e
 35
-27
-dc
-29
-45
-76
-dd
-de
-2b
-45
-fd
-b9
-f3
-87
-6d
-01
-d2
+a1
+9e
+57
+71
+26
+42
+ab
+a9
+ee
 46
-e7
-cd
-d2
-7c
-7e
-6d
-07
-21
-41
-a0
-77
-74
-45
-40
+c0
+6f
+fc
+70
 4f
-c3
-07
-78
-68
-f8
-c7
 76
-c7
-e4
-7b
-5d
-84
-20
-04
+da
+22
+f5
+ec
+cc
+51
+ee
+17
+22
+30
+15
+b6
+37
 6c
-2c
+45
+dd
+18
+10
+c4
+7b
+e3
 5c
-92
-3e
-a3
 cb
-0c
-fb
-b4
-ee
-b4
-af
-50
-fa
-95
-06
-e1
 f9
-ed
-8c
+4a
 2a
-da
-b7
-60
-35
-fb
-82
-7e
-95
-3b
-91
-51
-13
-52
-a9
+98
+5b
+86
+eb
+48
 c7
-c4
-53
-84
-43
-5d
-4c
-2f
-58
-cd
-a9
-9a
-a2
-8e
-63
-a7
-1d
-fd
-e8
-0d
-c6
+7c
 b9
-ea
-a1
-1a
-bb
-65
-9a
-e7
-bb
-3d
-51
-c4
-8b
-ef
 8f
-56
-86
-97
-11
-a8
 7d
-fe
-3c
-e1
-f9
-e6
+77
+04
+2b
+de
+ea
+05
+0b
+0a
+20
+23
+5d
+23
+7c
 ee
-aa
-db
-44
-33
-8b
-b5
-57
-ad
-31
-df
-4c
+14
+c3
+d9
+58
+cf
+d2
 5c
-20
-91
-f7
-74
-7a
+b9
+dd
+cb
+c5
+11
+71
+3d
 fb
-cf
-e9
-db
-ba
-ed
+da
+44
+62
 80
-09
-49
-4b
-b0
-2d
-b3
-9c
-14
-7a
-74
+10
+65
+1e
 29
-03
-ff
-64
-cd
-a2
-fb
-a9
-13
-5d
-39
-69
-e0
-74
-8d
-2d
-bf
-7e
-69
-ec
-ca
 ab
-1b
-5d
-6d
-3c
-ce
-06
-3b
-af
-b4
-f9
-78
-be
-55
-d6
-35
-fa
+bd
+21
+b8
+c8
+4d
+f5
+b7
+1d
+56
+63
+fc
+62
+30
+7a
+8a
+b3
+de
 76
-91
-e2
+cd
+c6
+b4
 0d
-41
+4c
+1f
+cf
+f6
+94
+02
+5e
+13
+fe
+1e
+3c
+0b
 16
+2a
+80
+6e
+08
+05
+68
+2f
+f4
+c8
+8f
+ca
+c6
+37
+74
 27
-77
-d2
-4a
-c2
-e9
-2e
-09
-c7
-5b
-d8
-b6
+fa
+24
 54
-43
-cf
-56
+93
+f7
+36
+53
 80
-27
-10
-2b
-65
-86
-c8
+4a
+7a
+d4
+60
+91
 15
-57
-7f
-d3
-88
-14
-2f
-75
+38
+d7
+98
+08
+3f
+8a
 44
-a7
-dc
-69
-b6
+ce
+ac
 7f
-0e
-d2
-a5
-d2
-81
-1c
-82
-7c
-2c
-3d
-01
-9f
-b8
-fb
-7c
-4c
-95
-4b
-da
+9b
+d4
+8b
 cd
-6f
-d0
-50
-db
-a2
-74
-c4
-2a
-93
-2a
+8a
+ef
+c6
+aa
+ae
+bc
+5b
+e4
+f8
+a3
+30
+6a
+3d
+f4
+49
+88
+23
+83
+62
+6c
+ac
 d5
-79
-dd
-48
-44
-4b
+05
 a8
-40
 ca
-f1
-ba
-9d
-b4
-19
-07
-d5
-f9
-72
-3a
-7f
-d7
-9e
-47
-5d
-6c
-49
+a3
+79
+22
+33
+38
+c1
+25
+b0
+ce
 37
-17
-1b
-b6
-0a
-dc
+e3
+4f
+22
+61
+bf
+77
+9a
+a1
+84
+2b
+aa
+30
+9e
+73
+f4
+6d
 f3
-73
+ba
+bf
+fc
+ab
+93
+3a
+ca
 f6
-e5
-84
-ce
+7a
+47
+58
 97
-ed
-c8
-b7
-d8
-89
+95
+8f
+e4
+34
+81
+e8
+24
+d1
+94
+a6
+17
+c9
+61
+21
+2a
+28
+03
+20
 98
+46
+66
 32
-fb
-f8
-56
-03
-8d
-ef
-e5
+ce
+c5
+06
+eb
+dd
+6d
+65
+c5
+0c
+7b
+01
+65
+fd
+b1
 d1
-cd
+42
+1e
+63
+c9
+88
+90
 0f
-12
-9a
-99
-68
-52
-c0
-89
-67
-f8
-12
+22
 33
-62
-47
-dc
-b6
-4a
-67
-60
-3a
-39
-41
-43
-61
-bb
-d4
-3b
-98
-4d
-41
-35
-d4
-68
-b0
-77
-f0
-01
+58
+d0
+ed
+3c
+2b
+25
+c3
+2e
+bd
+a1
 9f
-88
-2f
-7d
-d6
-59
+ae
 aa
-49
-2e
-4d
-e9
-68
+7d
 71
-e3
-df
-1a
-0d
-e9
-39
-e5
-db
-4a
+dd
+ba
+23
+c8
+fb
 e2
-90
-43
-51
-d9
-b7
-d0
-05
-de
-d8
-65
+ab
+d5
+8e
+71
+8a
+fb
+7f
+b6
+18
+e1
+0e
+ad
+67
+cb
+50
+58
+7d
+40
+a8
+86
+52
 e5
-5f
-13
-4c
-02
-ee
-84
-b2
-b1
-d3
-28
-46
-4c
-c9
+53
+ba
+48
+c4
+b6
+3f
+95
+97
+ac
+f8
+70
 74
-c8
-1a
-37
-37
-2e
-d4
-a9
-5c
-93
-d9
-2f
-b5
-b2
-0a
-4f
-50
-9f
-78
-27
-9e
-3b
-0a
-35
-08
-34
-35
-a5
-e1
-a7
-25
-3b
-54
-c7
-b4
-a2
-15
-15
-26
-bc
-c2
-93
-76
-6a
-64
-2f
-93
-f6
-c7
-d6
-02
-1e
-59
-96
-3c
-8f
-02
-cc
-59
-06
-54
+3a
+ba
+7d
+9d
 b0
+8f
+22
+ec
+6a
+87
+ab
+53
+8c
+0b
+18
+6d
+95
+ef
+61
+6a
+e1
+d1
+66
+5b
 23
-7c
-75
-21
-fe
-6f
-07
-bc
-24
-8a
-ba
-30
+13
+da
+5b
+4b
+6b
+af
+15
+d4
+02
+d4
+36
+9c
 a7
 4d
-72
-20
-ea
-75
-2a
-9f
-57
-ae
-69
-f8
-ae
-1d
-6d
-ce
+88
+c1
+45
+64
+92
+bf
+0f
+6e
+da
+38
 ec
-1a
-73
-84
+8a
+ce
+05
+e5
+fc
+77
+87
+ed
+ad
+46
+4a
+e9
+f6
+80
+bf
+15
 84
-70
-76
-ab
-73
-6a
-9a
-92
-de
-2a
-0a
+62
+95
 97
-b6
-65
-a1
-cc
-85
-c7
-e3
-18
-f9
-c5
-c6
+98
+09
+7c
+ec
+e0
+7e
+25
+25
+c8
+df
+3a
 5c
-13
-62
-ff
-62
-e4
-ee
-ff
-fd
-d0
-71
-0d
-a9
-9f
-c0
-0d
-f2
-54
-21
-16
-af
-1c
-ca
-03
-c6
-a3
-9d
-32
-69
+2a
+5d
+b8
+8e
+d9
+89
+45
+b3
+36
+b4
+2a
+5f
+d9
+fc
+97
+fe
+51
+6e
 d6
-50
-14
-57
-9f
-18
-dd
-1e
-cd
-6c
-cd
-46
+a0
+97
+2c
+4e
+30
 10
-5a
+85
 7d
-8f
-e6
-90
-62
-2d
-6c
-3f
-88
-68
-ab
-3a
-9d
-21
-6f
-a4
-1c
-b0
-e4
-c7
-61
-ef
-a3
-19
-b1
-f8
-e8
+8e
 2f
-ea
-9a
-2a
-34
-46
-44
-06
-63
-d1
-17
+b5
+45
+98
+db
+f7
+2f
+54
+8c
+14
+f1
+69
+8d
+c1
+96
 05
+df
+ba
+ee
+9d
+f7
+a8
+a8
+64
+15
+d5
+e2
+00
+82
+65
+6a
+17
+19
+7f
+fb
+f1
+db
+ea
+cd
+5a
+77
 42
-ca
-d1
-da
-2a
+cf
+04
+c8
+fe
+5b
+40
+06
+c2
+7b
+3a
+bd
+52
+5c
+d8
+12
+4c
+bf
+94
+78
+0b
+e5
+9c
+a8
+15
+0e
 ad
-f6
-a3
-47
-75
-6e
-0d
-1b
-ce
-a4
-87
-51
-24
-1b
-db
-fd
-e8
-dd
 88
-47
-17
-2f
-c0
-32
-51
-d2
-a9
 ef
-9b
-99
-4d
-a2
-ac
+bf
+2b
+c4
 0b
-d4
-db
-c0
-03
-8f
-76
-3a
-8c
-d6
-f6
 74
-26
-91
-a4
-37
-bf
-01
-7b
-cc
+58
+3a
+fa
 b1
-e2
-97
-85
+ff
+f7
+29
+74
+9e
+ac
 18
-ea
-80
+87
+c2
+6d
+22
+3d
+79
+ef
+7d
 f5
-df
-40
-f6
-1d
-11
-2f
-5e
-94
-e1
-6e
-38
-9b
-1e
-81
-0d
-30
-e0
-49
-f9
-bc
-6b
-93
+9e
+7c
+c3
 14
-51
-ce
+a6
+7a
+63
+87
+96
+a9
+1e
+75
 a8
-98
-0e
-cf
-76
-51
-5e
-bd
-9e
-c4
-1b
-4a
-7e
-1d
-fa
-72
-f8
-e3
+70
 ff
-89
-40
-8b
-4a
-31
-07
-bf
-de
+44
+f3
+8a
+fe
+9a
+2d
+d3
+41
+64
+f9
+37
+06
+f7
 d9
-d5
+c9
+e5
+64
+63
+33
+f4
 6a
-1e
-93
 11
-8c
-27
-24
-38
-e6
-c8
-48
-4e
-76
-e5
-02
-c1
-ee
-a1
-24
-91
-c1
-d9
-52
-d9
-65
-8f
-e2
-7c
-e7
-39
-bd
-46
-25
-24
-ed
-9c
-24
-f0
-79
-3e
+2b
+1d
+44
 a6
-69
-f2
-c9
-0d
-2c
-63
-8f
-ce
-f6
-d6
-3c
-09
-fb
-aa
-c7
-ec
-ed
-62
+ee
+5e
+df
+00
 81
-4c
-a5
-bd
-c0
-27
+04
+be
+74
 8c
-e3
-3e
-32
+18
+c3
+e8
+09
+d1
+47
+5d
+94
+ef
+d8
+90
+72
+40
+42
+ba
+1d
+59
+44
+37
+52
+45
 4c
-25
+92
+a5
 df
-76
-33
-0d
-ae
+66
+08
+40
 63
-50
-94
-94
-51
-e4
-1d
-27
-47
-21
-ef
+e7
+0a
+c5
+59
+0b
+30
+c8
+31
+19
+f9
+f7
+09
+c7
+6d
+f1
+8d
+f1
+70
+2d
+5e
+34
+14
 ad
-06
-51
-9b
-da
-69
-33
-65
+6c
+94
+f9
+93
+85
+66
 f2
-2b
-4e
-f3
-1e
-1f
-11
-24
-fb
-6a
-41
-cd
-4a
-da
-57
-d4
-d4
-63
-ec
-51
-c9
-b6
-b7
-7b
-7b
-89
-9e
-65
-17
-6d
+9f
 a1
-a9
+15
+22
+09
+35
+f1
 73
-9c
-d9
-61
-23
-d6
-0a
-c5
-14
-42
-64
-e1
-78
-61
-f5
+86
+d0
+da
+c1
+57
+6f
+96
+bf
+66
+41
+af
+8c
+ea
+dd
+20
+54
+f8
+cd
+c7
+80
+37
+2c
+c3
+6e
+a4
 a1
+1a
+c4
 ab
-60
-f0
-8a
-b7
-82
-7f
-0d
-34
-ae
-d1
-0b
-b9
-e2
-76
-47
-d6
-03
-67
-5a
-ee
-e2
-48
-a9
-de
-f9
-29
+19
+78
+ef
+5b
+0c
+fc
+a0
+f2
+f3
+6a
+39
+bb
+c6
+41
 9a
-83
-80
-72
-18
-21
-7a
-2f
-a1
-46
-55
-c9
-bd
-33
-0a
+4b
+44
 60
-0f
-9d
-ec
-a1
 cd
-26
-c9
-58
-5e
-ab
-f3
-b9
-72
-01
-53
-5c
-9b
-bd
-cc
-1b
-91
-4a
-74
-df
+d1
+79
 4f
-99
-b5
+2f
+44
 fa
-78
-18
-0c
-5f
-45
-f9
-aa
-e7
-1f
-20
-f2
+68
+a7
+cf
+9a
 da
-66
+79
+d8
+31
+97
+9f
+15
+db
+c6
+27
+d1
+4d
+f6
+1f
+10
 6f
-89
-de
-fd
-20
-92
-bd
-d0
-4b
-ea
-d4
+f7
+e1
+7e
+8f
+8d
+a1
+2d
+35
+dc
+aa
+04
+e1
+fe
+18
+5a
+32
+37
 70
-42
-cc
-ad
-7a
-14
-1d
-d9
-d3
+fc
+e1
+cf
+61
 30
-1c
+1b
 87
+5d
 90
-29
-38
-6a
+9b
+5d
+4b
+f8
+cd
+cd
+bb
+4a
+6e
+a7
+53
+5e
+ae
+11
+69
+94
 c7
-67
-f0
-e7
-64
-c8
-d7
+c0
+5f
+d0
+3f
+5c
+4b
+c5
+4e
+ea
+1d
+fe
+66
+44
+b6
+19
+24
+0f
+db
+13
 3b
+69
+03
+3f
+9e
+f4
+38
+11
+9e
+81
+6c
+8a
+ae
+3c
 04
-32
-90
-ec
-84
-94
-88
-14
-f7
-e2
-24
-e7
-b5
+21
+45
+ff
+ca
+2a
+ac
+64
+34
+16
+8b
+8f
 74
-0b
-55
-06
-78
-e5
-f8
-53
-66
+1a
+43
+9d
+cd
+48
+79
+fc
+0e
+46
+ab
+44
+0e
+07
+8a
+9d
+87
+b5
+c5
+cc
+4c
+7f
 3e
-22
-6c
+17
 6f
-fe
-08
-54
-dd
-ba
-07
+cb
+a6
+ff
+ec
+c7
+45
+fa
 4a
-ac
-31
-bb
+d8
+50
 72
-ba
-32
-05
-21
-b1
-2e
-62
-5a
-7c
-2e
-2f
-a9
-dc
-29
-31
-c0
-f2
-7c
-1e
-af
-7f
-56
-78
+42
+9b
+a8
+4e
+d6
+ef
+36
+5f
+bb
+cf
+03
 62
+0c
+47
+c8
+03
+8b
 6e
-b7
-b6
-9e
-b6
-1b
-06
-bc
-a3
-21
-66
-6b
-18
-ef
+81
+a1
+05
+4a
+53
+c1
+d4
+22
+bb
+c9
+ae
+e2
+82
+5b
+d0
+94
+ad
 d3
-fc
-ba
+f8
+ab
+b8
+19
+4e
+70
+5b
+bc
+20
+6f
+69
+28
+38
+e9
+08
+6a
+96
+41
+95
+4f
+e8
+c2
+a1
+a2
 83
-6b
-98
-88
-22
-4b
-e1
-98
+39
+1c
+55
+b7
+7d
+8a
+34
+db
 11
+89
+6b
+5b
+26
+50
+50
+49
+ec
+df
+7f
+15
+c2
+cf
+c3
+87
+99
+06
+2f
+b1
+36
+1b
+42
+d1
+29
+bf
 9a
-43
-32
-bc
-4b
+e5
+86
+2c
+37
+92
+d5
+8f
+ea
+01
+ad
+75
+89
+ce
+36
 4a
-e3
-02
-a3
-76
-76
-d7
-c5
-c6
-d4
 67
-d3
-69
-25
-7b
-73
-40
-ac
-6a
-6f
+a0
+83
+dd
 4b
-30
-29
-97
-24
-ca
-76
-5b
-55
-07
-4e
-10
-a8
-43
-9e
-1c
-e7
-71
-6e
-02
-3a
+a2
+ce
 62
-18
-22
-72
-03
-0f
-d1
-be
-53
-00
-eb
-8b
-15
-24
-95
-3e
-6e
-6c
-e0
-ed
-8a
-ba
-30
-bc
-e8
-94
+91
+75
+7a
+91
+f7
+98
+73
+45
 c5
-2a
-15
-18
-8e
-63
-15
-5e
-4f
-20
+7c
+19
 b6
-8f
-79
-02
-61
-3e
-31
-78
-1e
-f1
-3a
-52
+96
+63
+5c
+9c
+67
+fd
+e0
+2b
 54
-a6
-1c
-76
-76
-bd
+ad
+72
+8c
+df
+65
+8a
+2d
 2b
-b1
-87
-64
-9a
-5b
-fa
-81
-e6
-9b
-e8
-9b
-af
-a0
-05
-ed
-80
-a8
-17
-5d
-b5
-d8
-3d
-77
+7c
+c7
+1d
+44
+e3
+b6
+32
+8f
+e3
+39
+29
+14
+4b
+98
+13
+83
 e1
-bc
-3e
-17
-22
-90
+91
+86
+ee
+42
+63
+e2
+14
+d2
+6f
+07
+8c
 a3
-6e
+64
+14
+cb
+02
+a7
+67
+01
+82
+ad
+70
+8d
+13
+12
 ec
-94
-4e
-98
-65
+fd
+f1
+ad
+0d
+34
+0b
+c9
+5f
+57
+c8
+61
+e0
+c3
+e7
 78
-3f
-a0
+13
+9b
+32
+c7
+b8
+ec
+30
+4e
+56
+ee
+1a
+56
 69
-f6
-8a
-7b
-35
+b7
+8b
+cb
+08
+db
+a8
+cf
+14
+e7
+4a
+e1
+f4
+14
+6a
+76
+60
 10
-1a
-99
-5a
-b6
-ed
+3f
+fb
+f5
 93
-cf
-1e
-bf
-7a
-62
-5a
-89
-3e
-9b
-4c
-67
-a4
-05
-ab
-44
-a4
+78
+92
+36
+58
+0f
+be
+e8
+7f
+77
+6e
+58
+22
+54
+d7
+82
+73
+3a
+0b
+9f
+9d
+c4
+30
+02
 19
-47
-3e
-aa
-3b
-8d
-4c
-fc
-a8
-56
-87
-4f
-4e
-e2
-ee
-41
-48
 79
-5c
-30
-e2
+68
+fb
+7d
+1a
+b1
+4a
 a2
-d5
-f5
-d5
-0f
-b2
-92
-cf
-8b
+0a
+fa
+94
+c2
+14
+18
+9a
+6b
+50
+84
 85
-4a
-ac
-63
-e9
-38
-a1
-de
-d9
-74
-1f
-bd
-71
-4a
-ec
-00
-ac
-17
-2d
-7c
-c9
-52
+75
 1e
-53
-46
-d7
-05
-15
-f2
-bc
-89
-dc
-00
-54
+fc
+b1
+ee
+c9
+84
 8f
-03
-ed
-31
-dd
-0d
-d5
-5a
-95
-92
-4c
-e0
-40
-ea
-d9
+b0
+26
+0b
+68
+c6
+75
+c2
+62
+d8
+5b
+fd
+97
+29
+28
+72
+c2
+1f
+6b
+0c
+7b
+4d
 49
-66
-41
-37
-9d
-9b
-25
-19
+e6
+20
+db
+c1
+71
+87
+05
+06
+fe
+be
+8a
+01
+d6
+9a
+a9
+c0
+38
+6d
+f5
+d3
+b9
+d6
+c5
+90
+16
+a8
+93
+68
+04
+8e
+d1
+de
+3b
+16
+35
+f1
+be
+81
+26
+8a
 e8
-77
-f9
-46
+b0
 7d
-3f
-a8
-b2
-d8
-e9
-fb
-e9
+f1
+78
 0f
-64
-a7
-b6
-4d
-8f
-53
-1d
+cf
+35
+f6
+7e
+cf
+fd
+65
+ff
+e3
 6d
-c6
-74
-da
-56
-66
-67
-9a
-36
-6e
-1d
-29
+35
+24
+a0
+5c
 1c
-49
-5f
-0f
-b4
-ec
+ad
+56
+14
+dc
+f6
+58
+c7
+40
+e5
+d5
+b9
+df
+1b
+1a
+5b
+03
+03
+e3
+9c
+c5
+98
+a1
 c1
-d3
-69
+97
+df
+8a
+98
 19
-16
-ef
+26
+c6
 84
-67
-b9
-7c
-00
-a1
-f4
-1d
-0d
-41
-c7
-5b
-7c
-36
-79
-bb
-5f
-71
-60
-4c
-09
-79
-5f
-66
-6a
-5c
 ff
-b7
-19
-e0
-83
+c1
+03
+55
+96
+8f
+bd
+bb
 6e
-eb
+21
+f9
+ad
+d6
+87
 3c
+2c
+81
+56
+43
 9c
-b9
-ec
-ff
-23
-90
+b8
+d3
+91
+cc
+20
+e0
+aa
+95
+ca
+d4
+9c
+6c
+91
+67
+9e
+b6
+91
+f1
+d1
+bc
+ad
+59
+f9
+fa
+cc
+16
+67
+e8
+c3
+82
+2a
+5a
+1a
+92
+56
+0d
+8e
+43
+aa
+6d
+e9
+5e
 f7
-79
-b2
+3b
+43
+a8
+06
 96
-23
-ab
+28
+3f
+04
+02
+99
+fe
+d9
+2d
+e3
+26
+a6
+67
+87
+3e
+08
+fa
+42
+6f
+27
+eb
+a5
+58
+a9
+ec
+10
+4e
+40
+22
+11
+3c
+a5
+3f
+3a
+08
+1f
+d0
+ca
+76
+63
+36
+2c
+1f
+8e
+e0
 77
-df
+95
+20
+f9
+bb
+4a
+7e
+3c
+b2
+52
+39
+cf
+ff
+cb
+2f
+01
 03
-f0
-c4
-d8
+2a
 28
-13
-8c
-a8
-eb
-4f
-90
-cd
-5f
+35
+fa
+f7
+c7
+c7
+09
+76
+be
+24
+24
+24
+88
 ed
-b6
-8a
-0c
-01
-20
+43
 b7
-11
-db
+ce
+04
+52
 f1
+21
+08
+10
 a2
+82
+43
+59
+14
+e1
 a7
-5b
-0b
-d5
-94
-4a
-7a
-9b
+42
+a5
+77
+0e
+46
 18
-d5
-94
-df
-f7
+10
+c8
+54
 7a
-c6
-f8
-5e
-f5
-08
-ed
-5f
+f0
+09
+04
+7c
+8f
+b7
+dd
+90
+9b
 80
 b5
-f7
+15
+4c
+ae
+02
+aa
+f1
+45
+02
+53
+8c
+dc
+af
+c3
+2b
+28
+58
+bf
+29
+b1
+3a
+2c
+78
+e2
+f2
+e5
+4a
 46
-c6
-00
-cb
+c1
+9e
+90
+35
+f5
+77
+8a
+69
 fc
-f7
-94
-ef
-fa
-b9
-d9
-00
-bd
-85
-b2
-33
-df
-b8
-7a
-d2
-5a
-32
+95
+2c
+cd
+ce
 bc
-bf
-5b
-54
+ca
+cf
+dc
+47
+8f
+82
+e8
+8e
+d3
+d4
+0c
 19
-29
-2b
-30
-a9
 4b
+77
+b8
+de
+0f
+20
+6f
+92
+36
+06
+90
 b4
-2c
-28
-00
-2e
-86
-eb
-75
-65
-bc
-d3
-df
-7d
-f6
-25
-f7
-ed
+55
+58
+dd
+60
+b0
+73
+82
+22
+49
+68
+60
 12
-33
-85
-c0
-e1
-41
-1b
-2e
-a2
-03
-cb
-96
-6e
-2d
+a9
+46
 34
-b8
-fd
-54
+46
+73
+2f
+c5
+14
+34
+c4
+84
 d5
-a6
-fd
-fb
-6c
 1f
-44
-df
-d4
-2b
-7d
-27
-f7
-ad
-c4
-47
-cb
-d8
-37
-07
-3a
-aa
-d4
-62
-07
-e8
-50
-54
-cd
-c1
+17
+da
+ac
+86
+b3
+86
+23
+02
 83
-be
-09
-e4
-b7
-f8
+47
+ea
+86
+b3
 fb
+9a
+d3
+5e
 c3
-da
-7c
-63
-19
-d8
-d8
+c4
+20
 e1
-66
-30
-d2
+cf
+0c
+c8
+53
 d1
-9a
-fa
-f3
-3d
-94
-98
-77
-32
-91
-ee
-19
-d5
-d9
-15
-71
-a6
-bc
-88
-15
-21
-94
+d3
+29
+1b
+fd
+4c
+9d
+30
+b2
 49
-ef
 9e
-39
 30
-1a
-5c
-59
-4c
-73
-b6
-45
-c6
-27
+99
+80
+37
+53
+9d
+c5
 64
-51
-2e
-42
-ab
-10
-58
-bd
-23
-7b
-92
-be
-0d
-d6
-7c
-35
-57
-84
+8a
+ff
+38
+e4
+53
+88
+da
+11
+bc
+27
+60
 0f
+b3
+c7
+6b
+e1
 6b
+f0
+ab
+9c
+9f
+6f
+99
+00
+68
+98
+d0
 27
-d1
-59
+b1
+de
+0f
+a4
+96
+80
+fa
+60
+14
+e3
 55
-99
+24
+ad
+3c
+b9
+37
+5e
+61
+c3
+05
+66
+31
+30
+e6
+88
+21
+98
+f8
+de
+be
+e7
+83
+7e
+36
+08
+2b
+72
+3f
+62
+cd
+a9
+33
+ca
 1f
-75
-e1
+21
+f9
+1d
+c0
+07
+0c
+3d
+18
+06
+3e
+27
+71
+e9
+2a
+1c
+6a
+00
+4f
+a0
 89
-96
-7d
-ed
-43
-b4
-ec
-74
-04
-b1
-67
-23
-d1
-11
-78
-15
-30
-65
+1e
+77
 35
-4c
-99
-5f
-6f
-66
+e4
+55
+3d
+22
+72
+4f
+c3
+04
 dc
-42
-9c
-c5
-88
-1f
-f8
-19
-69
-4d
-39
+1c
 29
-58
-d9
-bc
-f1
-c5
-75
-d8
-a1
-4f
-e3
-1d
-ae
+6e
+d7
+d3
+28
+6d
+59
+3e
+aa
+98
+6e
+ce
+d3
+e3
+68
 b5
-6d
-33
-fa
-bf
+96
+15
+3e
+b5
+32
+5a
+e5
+e5
+ed
+42
+dd
 19
-d3
+c3
+68
 fc
-54
-70
-69
-58
-ee
-bf
-f2
-f9
-c5
-27
-20
-de
-10
-b4
-3c
-3a
-c9
-87
-9a
-d5
-81
-db
+ea
 1a
-6d
-f9
-8b
-de
-86
-5b
-68
-95
-db
-7e
-79
-c6
-6a
-91
-45
-3a
-a5
-6a
+55
+d1
+31
+e8
+16
+c4
+84
 99
-27
-5f
-27
-cc
-ce
-34
-a1
-ab
-db
-30
+41
 82
-93
-54
-09
-d8
-4f
-f2
-8e
-64
-00
-02
-78
-fe
-24
+85
+69
+e7
+b3
+8b
+46
+f5
+b3
+ee
+25
+48
+f7
+ed
+f1
+06
 42
+c4
+ee
+d2
+ad
+67
 1c
-38
-39
-53
-82
-d4
-ce
-77
-2d
-c1
-6a
-ec
-14
+21
+8c
+37
+d0
+99
 50
-64
-b7
-09
-08
-cf
-62
-a9
-8e
-c8
-f8
+9a
+24
 b0
-20
-a7
-32
-cb
+2f
+57
+13
+35
+b2
 a8
-68
+a0
+e4
+6e
+16
+51
+37
+1d
+e5
 03
-1b
+1a
+dc
+4a
+1c
+ac
+ba
+e2
+e9
+ea
+93
 44
-66
-18
-ae
-66
+33
+7c
+2a
+c0
+36
+ef
+ba
+ea
+f7
+48
+30
+0b
+df
+94
+ea
+4d
+45
+4c
+61
+d8
+16
+89
+9e
+0e
+ca
+81
+ac
+48
 40
-b9
-dc
-85
-50
+34
+a2
+03
+4e
+e2
+6a
+56
+0a
+e4
 51
-50
-89
-e7
-59
-4d
-1a
-22
-cb
-fe
-77
-11
-11
-b4
-04
-77
-a4
-b7
-1f
-30
-b0
+45
 5e
-d7
-99
-e8
-fa
-a0
-e7
-67
-c6
+57
+a6
+a8
+be
+4d
+fd
+e5
+49
+2b
+91
+aa
+af
+d5
+b9
+ff
+46
 35
-e8
-39
-c7
-db
-f6
-4a
-6f
-18
-94
+0b
+9b
+d5
+4d
+83
+ed
+c6
+2e
 25
-8e
-e1
-7f
-31
-67
-7d
-11
-1a
-02
-03
-d6
-59
-08
-2f
-76
-9c
-04
+99
+0d
+9b
+49
+49
+88
+27
+29
 df
-3d
-de
-5a
-4e
+9e
+28
+d1
+25
+83
 6c
-6e
+1a
+a3
+b6
+a8
+f5
+2d
+0b
+15
+79
+40
+07
+55
 77
+13
+b5
+57
+aa
+22
+a1
+ef
+ce
+27
+15
+dd
+35
+41
+31
+8c
+a8
+c6
+67
+64
+a8
+84
+9e
+89
+8c
+33
+40
+0d
+a1
+ce
+47
+75
 6b
-c5
-df
-a7
-b3
+12
 3e
-98
-72
-8f
-55
-be
+45
+97
+5f
+c6
+49
+e3
+e3
+11
+fc
 ac
+86
+a6
+aa
+28
+8b
+6b
+19
+45
+8d
+d4
+d4
+68
+65
+80
+9d
 10
-4e
-6f
-e9
-4c
-fc
-5e
-7d
+21
+c5
+dc
+c1
+78
+e8
 b0
-05
-e3
-b4
-64
-e4
-b3
-e4
-95
-f8
-07
-93
-fa
-b3
-97
-a0
-2c
-e0
-5e
-d9
-b2
-b6
-f7
-d1
-d2
-0a
+9f
+5a
+55
+43
+2b
+39
+3c
 2c
-a4
-05
-4a
-71
+7c
+f3
+f8
+ee
+cb
 60
-0b
-a6
-9e
-97
-cf
-e7
-25
+9f
+4a
 5d
+e4
+d2
+d7
+a8
+92
+e3
+12
+ea
+da
+13
+2a
+58
+52
 0e
-94
+dc
+ca
+da
+9c
+d9
+0e
+12
+a4
+da
+1a
+d1
 b1
-c4
-de
-04
-0c
-f8
-06
-5a
-9a
-e2
-9b
-bd
-c8
-f0
-f3
-fc
-95
-60
-87
-c3
-71
+03
+29
+2e
+39
+84
+2e
+3d
 2c
-7b
-96
-fa
+44
+1d
+69
+42
+ff
+58
+f3
+5f
+60
+fd
+9a
+0e
+ed
+a9
+8f
+97
+fb
+93
 38
-1b
-e3
-c4
-6b
-85
-3a
-c7
-a6
-cf
+a1
 46
-52
-0e
-24
+9b
+3c
+72
+8f
+9c
 2a
-a2
-d8
-01
-4a
-e4
-dc
+15
 60
-77
-83
-71
-3e
-f8
-fd
-fb
+24
+84
+9b
+4a
 b0
-d1
-ff
-23
-ca
-c7
-d2
-ed
-94
+c8
+51
 17
-e1
-3c
-a8
-ba
-c0
-58
-ba
 9c
-02
-42
-8e
-87
+25
+97
+6d
+84
+7a
+58
+d9
+05
+54
+1a
+11
+eb
+be
+4b
+f5
+18
+9d
+5a
+f0
+8a
+7a
+ef
+b7
 b2
-62
+48
+3b
+57
+3a
+c7
+64
+ef
+e8
+80
+3b
+3b
+54
+ca
+7c
+9d
+9b
+8a
+4b
+3c
+01
+61
+0a
+e1
+06
+fc
+ac
 e1
 5b
-0b
-af
-92
-93
-8d
-0c
-00
-70
+27
+d6
+72
+3f
+7e
+1d
+5a
+be
+9d
+ea
+ae
+aa
+e4
+6f
+77
+89
+17
+63
+46
+10
+bf
 d5
-ee
-fb
-03
+08
+ea
+ec
+8e
+37
+71
+c1
+3a
 c7
-20
+ce
+bd
+a2
+71
 15
-96
-32
-02
+00
+a1
+c7
+21
+a0
+a3
+bd
+f5
+78
+2d
+46
+03
+2e
+16
+1c
+c6
+9d
+f6
+b8
+90
+18
+df
+29
+ee
+81
+95
+1c
+78
+b7
+40
+39
+25
+d8
+3b
 60
-75
+79
+49
+a9
+26
+ad
+2b
+36
+3c
+37
+d7
+bc
+0c
+e9
+49
+6b
+b6
+93
+3a
+a6
+18
+7b
+6b
+87
+51
+94
+a5
+e6
+39
+ca
 d9
 a7
+39
+81
+06
+fa
+7c
+e8
+70
+89
+88
+20
+6a
+88
+67
+9b
+d0
+44
+44
+a7
+cb
+54
+f6
+7d
+e8
+4b
+a3
+3d
+3b
+af
+b4
+d4
+27
+10
+10
+28
+44
+0d
+e8
+e2
+89
 a2
-cd
-e0
-ba
-36
-e3
-01
-5e
-76
-fe
-61
-f5
-66
-ef
-08
+38
+5f
+a3
+5f
+b8
+33
+64
+b8
 d1
-09
-fa
-d9
-3a
-f0
+23
+46
+ca
+cf
+77
+e8
+4f
+6f
+14
+92
+8f
 11
-95
-ec
-bf
-98
+be
 d6
-12
+7f
+0c
+e6
+78
+fc
+d2
+31
+13
+d7
 84
-5b
-75
-c4
-02
-7c
+c2
+09
+f0
+91
+6b
+20
+6e
+8b
+3b
+ef
+3d
+d4
+9d
+cf
+ee
+c2
+a2
+9b
+12
+d7
+aa
+12
+8d
+9a
+10
+28
 f7
-d3
-8c
-0c
+e1
+07
+c6
+8b
+e2
+a7
+4e
+a0
+34
+35
+f8
+af
+ac
+cf
+4c
 83
-e3
-ba
-8e
-04
+2c
+a6
+80
+ca
+42
+b8
+ec
+1b
+88
 5d
-9d
-71
-66
-d8
-6b
-46
-3f
-d1
-e3
-2b
-4f
-74
-54
-6a
-77
-d3
-98
-d2
-f4
-84
 16
-fc
-c3
-f5
-35
-82
-a1
-03
+6b
+cd
+4a
+e5
+58
 bf
-0e
-9d
+06
+ed
+88
+d8
+e2
+6a
 71
-29
-56
-36
-0a
-5c
-2d
-96
-f9
-b6
-3a
 51
-21
-16
-cc
-25
-82
-c9
-1b
-9c
-21
-ea
-c4
-2c
-0f
+ee
+37
 14
-44
-48
-23
-47
-ba
-6c
-fa
-32
-4e
-35
-96
-94
-68
-c5
-1b
-74
-e1
-b2
-d9
-9f
-13
-a4
-e2
-bc
-6d
+ea
+b6
+80
+64
+6b
+9a
+5f
+21
+e3
+77
+04
+15
+30
+bd
 b6
-05
-4f
-8e
-c6
-d6
-4b
-c6
-98
-94
-a3
 6c
-ca
-f8
+71
+fe
+41
+6d
+0a
+73
+ae
+c1
+b0
+13
+6d
+76
+a6
+14
+7e
 dd
-06
-59
+5d
+c0
+ff
+55
+cc
+fe
+4c
+6f
+ea
+23
+65
 9a
+6b
+d9
+cd
+ec
+b3
+af
+ee
+41
+e0
+0f
+23
+b5
 8c
-16
-68
-49
-fa
-68
-eb
-2c
 33
-b6
-86
-dd
-6b
-70
-ef
-36
-f4
-59
+2d
+66
+78
+e3
+3a
+a1
+4d
+98
+5e
+30
+04
+8e
+de
+9e
+3f
+46
 38
-e5
-34
-bd
-16
-83
-53
-d1
-1a
 45
-da
-39
-d2
-e2
-1a
-ad
-6e
-53
-0e
-a1
-12
-03
-db
-12
-cc
-f7
-e6
+d0
+86
+ca
+6d
+10
 92
-eb
-6c
-d7
-65
-a0
-d1
-26
-9d
-6a
-fc
-6a
-b4
-c2
-a3
-43
-6c
-03
+fe
+b0
+f5
+60
+15
 fc
-ad
-70
-6f
-dc
-7c
-f0
-76
-a0
-8f
-c0
+07
+02
+cd
 ce
-f7
-55
-5e
-b1
-08
-1d
-26
-76
-3a
+43
+21
+f6
+38
+44
+eb
+73
+78
+9b
+97
 f9
-89
+9a
+16
+3d
+e7
+f9
+56
+ee
+a2
+00
+37
+f0
+67
+b9
+5f
+78
+14
+42
 a4
-54
-b6
-51
-19
-9e
-4e
-3a
-e5
+5e
+3d
+e6
+84
+c7
+e7
+86
+0f
+b0
+1b
+30
+f5
+fe
+09
 ad
-88
-26
-6e
+77
+e6
+ef
 ea
-bc
-15
-a3
-1c
-40
-7f
-72
-79
-13
+8d
+85
+67
+d8
+af
+bd
+d8
+ad
+14
+32
+6d
+49
+03
+cf
+04
+4c
+c2
+e4
+62
+0c
+42
+55
+eb
+4d
+7b
+f1
+91
+ba
 1e
+aa
+ae
 bd
+87
+3f
+3e
+8e
+30
+b2
+69
+a1
+59
+b3
+93
+69
+f8
+d1
+ad
+44
+be
+e8
+78
+67
+6a
+12
+72
+17
+29
+6d
+fd
+e4
+3f
+8c
+ee
 7a
-4b
-6c
-5d
 96
-97
-29
-22
-34
-03
-bb
+a0
+59
+8b
+39
+4a
+ed
+32
+a7
+37
+74
+dc
 38
-c2
-5c
-7e
-e6
-a2
-75
-bb
-c1
-a3
-fe
-aa
-3b
-73
 72
-9a
-c5
-ed
-ea
-3e
-a3
-77
-00
-47
+18
+37
 f6
-9b
-76
-04
-20
-3d
-a3
-3d
-79
-b8
-19
-4c
-e3
-f3
-a9
-93
-32
+b0
+48
+7c
+22
+9a
+b1
+2c
 44
-a2
-a7
-5f
-36
-9b
-71
-3c
+7c
+6f
+22
+42
+b5
+85
+4b
+0c
+40
+ac
+28
+45
+92
+eb
+c0
+42
+bc
+1f
+e0
+8f
+da
 9d
-5a
+24
+99
+9f
+50
+86
+ad
+d4
+85
+99
+1a
+c6
+77
+11
+a5
+de
+96
+4f
+64
+aa
 dc
-15
-e2
+a0
+80
+d4
+a8
+e0
+48
+db
+92
+95
+4b
+17
+16
+d8
+9d
+1a
+f1
+df
 59
+e0
+15
+cb
+d3
+8f
+2c
+8e
+4c
+d0
+66
+7a
+04
+5a
+fd
+10
+6a
+f0
 47
-3a
-00
-cf
-12
-17
-79
-ba
-4b
-f9
-d2
-00
+9e
+30
+a8
+d6
+d6
+46
+a5
+aa
+a4
+80
+8a
+01
+b4
+d1
+bf
+7c
+a4
 73
-63
-b8
-67
-6f
-7a
-6e
-8f
-87
-8c
+6a
 f5
-57
-52
-1e
-bb
-38
-55
-a2
-c9
-e8
-64
-c3
-37
-1c
-f7
-cd
-2f
-f7
-77
-1a
+09
+23
+ac
 c9
-5c
+b0
+22
+10
+ec
+7f
 d1
-8c
-e8
-c9
-13
-f0
-df
-b3
-dd
-60
-58
+54
+8d
+ab
+e2
+22
+ca
+8f
+d4
+72
+08
+3c
+ec
 56
-9d
-2e
-ff
+bb
+97
+a3
+db
+40
+f8
+a2
+e0
+e9
+15
+55
+35
+3e
+90
+18
+83
+b5
+1f
+ba
+8f
+6c
 7e
-62
-70
-36
+eb
+b8
 01
-71
-29
 d4
-49
-23
-23
-93
-6b
-a6
-be
-a9
-b1
-e8
-68
-fb
-b5
-ba
-45
-59
-46
+74
+bb
+39
+63
+1c
+5f
+ec
+bc
+a1
+e6
+51
+7e
+70
+c9
+7e
+e1
 82
-ce
-2e
 cf
-18
-40
-90
-5c
-80
-f0
-ac
-99
-37
-e2
-29
-5d
-fa
-0c
-dd
-54
-4d
-7f
-92
-79
-c3
-69
-33
+af
+df
 f6
-fb
-cc
-e0
-5c
+ad
+a8
+ea
+28
+8a
+51
+15
+be
+e4
+03
+10
+36
+9d
 75
-86
-f0
-78
-f8
-bf
-a1
+3c
+7d
+16
+ce
+3b
+fe
+90
+fd
+8c
+d7
 eb
-9b
-3f
-fa
-99
-e5
-7a
-9f
-13
-c8
-5e
-98
-22
-83
-27
-ff
-3f
-33
-67
-66
-57
-cd
 bd
-89
+7a
+c0
+85
+b4
+24
 bf
-7b
-6b
-69
-79
-34
-41
-cf
-cb
-90
-07
-14
-a0
-6c
-94
-60
-59
-ec
-d0
-bd
-c9
-bd
-9b
-9a
-84
-33
-4f
-44
-6d
-4a
-39
-67
-89
-42
-b6
-a2
+f3
+b7
+0f
+c6
+a4
 2c
-93
-b2
-0b
+b4
+1b
+4e
+17
+43
+4a
+78
+ef
+7c
+0a
+72
+f9
+e0
+64
+58
+44
+8f
+01
+8a
+ce
+cc
+11
+5f
+4c
+24
+ae
+a7
+e1
+4c
+a9
+80
 bc
-b3
-28
-42
-1e
-6e
-90
-ee
-81
-f2
-6e
+cf
+2e
+84
+e2
+12
+71
+91
+83
 f6
-31
-5c
-31
-ac
-46
-88
-f4
-7c
-53
+f3
+09
+bd
+41
+02
+85
+17
+cb
+27
+97
+a4
+91
+6a
+40
+72
+05
 4a
-61
-a9
-00
-59
-b3
 90
-d6
-4f
-dc
-a1
-fd
-03
-72
+12
+f5
 72
-e5
+3d
+cb
+69
+1b
+26
+9f
+a5
+25
+af
+15
+4b
 63
+08
+8d
+bd
+61
+a0
+e8
+e8
+af
+ff
+9c
+59
+54
+5e
+8f
+a5
+c7
+36
+f5
+25
+ef
+e9
+4f
+c8
+84
+94
 c5
-4a
-c3
-d8
-6f
-39
-ce
-ed
-a6
-d9
-bc
-b0
-cd
-55
-43
-b7
-37
-7d
-aa
-7c
-cd
-1b
-58
+49
+64
 40
-92
-11
+6e
+84
+7c
 f7
-72
-d9
-73
-7d
-e6
-b8
-f5
-66
-95
-e2
-49
-22
-3b
-2e
-9c
-8c
-6f
-ad
-b8
-3a
+47
+14
+9f
+d5
+d5
+d3
+07
+ac
+d3
+ea
+e4
+1b
+b4
+ed
+dd
+fd
+d8
+ea
+c1
+1e
+8b
+0a
+6d
+6d
+0c
+21
+c3
+6e
+21
+09
+e1
+35
 bd
-c9
-3a
-f4
-b8
-94
-4a
-2a
-25
-78
-5d
-4b
+eb
+42
 8b
-76
-ff
-2e
+09
+ba
+ea
+06
+82
 e7
-5d
-45
-8a
-7d
-55
-1a
-e4
-07
+4b
+dd
+95
+76
+7c
+3e
+71
+f1
+9c
+52
+fa
+80
+82
+e5
+0c
+70
+57
+fa
+e9
+47
 7f
-54
-54
+85
+3c
+25
+fb
+86
+3d
+57
+1a
+1a
+2a
 f8
-6a
-88
-37
-fa
-1e
-79
-8c
-5c
-91
-37
-69
-45
+5e
+b1
+ed
+fc
+7a
+bc
+63
+f8
+74
+18
+5a
+b2
+aa
+f2
+fb
+c5
+2b
+62
 44
-19
-2c
-3d
+0f
+be
+b0
+18
+af
+33
+e3
+ff
+1d
+ac
+52
+39
+a5
+ea
+91
+f3
+5e
+ca
+f9
+cb
+81
+a8
+e1
+c3
+09
 aa
 55
 40
@@ -5744,6 +5744,6 @@
 55
 5f
 57
-40
-5b
+a0
+30
 20
Index: program/app_mouse.prog
===================================================================
--- /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/program/app_mouse.prog	(nonexistent)
+++ /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/program/app_mouse.prog	(working copy)
@@ -0,0 +1,5305 @@
+
+ifdef COMPILE_MOUSE
+mouse_init:
+	call enable_authrom
+	call mouse_setting_config
+	call mouse_init_sunt
+	rtn wake
+	call mouse_setting_sensor_type
+	call mouse_drawing_optima_init
+	call mouse_cb_fuction
+	call mouse_sensor_powerdown
+mouse_init_wireless:	
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BTN_DOWN,mouse_start_discovery
+	call mouse_check_select_device_by_switch
+	branch mouse_start_work
+
+
+mouse_cb_fuction:
+	bpatch patch0d_0,mem_patch0d
+	setarg mouse_24g_short_sleep
+	store 2,mem_cb_24g_transmit_short_sleep
+	setarg mouse_24g_long_sleep
+	store 2,mem_cb_24g_transmit_long_sleep
+	setarg mouse_24g_before_lpm_sleep
+	store 2,mem_cb_before_lpm_sleep
+	setarg mouse_24g_package_data
+	store 2,mem_cb_24g_transmit_data
+	setarg mouse_24g_search_dongle
+	store 2,mem_cb_24g_search_receiver
+	setarg mouse_lpm_before_common
+	store 2,mem_cb_24g_lpm_before
+	setarg mouse_le
+	store 2,mem_cb_le_process
+	setarg mouse_process_lpm_before
+	store 2,mem_cb_before_lpm
+	setarg mouse_priority_bb_event
+	store 2,mem_cb_bb_event_process
+	setarg mouse_idle
+	store 2,mem_cb_idle_process
+	setarg mouse_before_hibernate
+	store 2,mem_cb_before_hibernate
+	setarg mouse_le_bb_event_connect_complete
+	store 2,mem_cb_att_write	
+	setarg mouse_bb_event_timer
+	store 2,mem_cb_event_timer
+	setarg mouse_spi_write_flash_cb
+	store 2,mem_cb_spi_flash_write_complate
+	setarg mouse_lpm_check_wake_lock
+	store 2,mem_cb_check_wakelock
+	setarg mouse_le_transmit
+	store 2,mem_cb_ble_transmit
+	setarg mouse_set_lpm_mult
+	store 2,mem_cb_bt_set_mult
+	rtn
+
+
+mouse_setting_config:
+	rtn wake
+	call g24_transmit_init
+	call g24_chmap_param_init
+	call mouse_24g_send_time_long_wake
+	call mouse_gpio_init
+	call mouse_le_name_modify
+	call mouse_param_init
+	call mouse_device_multi_led_parm_init
+	call le_set_fixed_ltk_justwork
+mouse_load_device_info_check:
+	bpatch patch0d_1,mem_patch0d
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_load_eeprom_info_check
+	bbit1 MOUSE_ENABLE_FLASH,mouse_load_flash_info_check
+	bbit1 MOUSE_ENABLE_OTP,mouse_load_otp_info_check
+	rtn
+	
+mouse_xtal_init:
+	jam XTAL_16M,mem_fcomp_div		// 0x08--16M 
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_16M
+	jam XTAL_24M,mem_fcomp_div		// 0x18--24M
+	rtn
+
+mouse_24g_phy_select:
+	call g24_enable_1M
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_2M_PHY
+	branch g24_enable_2M
+
+mouse_default_init:
+	bpatch patch0d_2,mem_patch0d
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	isolate1 MOUSE_KEYBOARD_ENABLE,pdata
+	call mouse_customer_key_enable,true
+	
+mouse_default_parm_init:
+	fetch 2,mem_mouse_24g_pair_timeout_init
+	store 2,mem_24g_pair_timeout_init
+
+	fetch 1,mem_mouse_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout_init
+
+	fetch 5,mem_rssi_dis_min_24g_init
+	store 5,mem_rssi_dis_min_24g
+
+	fetch 1,mem_mouse_24g_pair_tx_power
+	store 1,mem_24g_pair_tx_power
+
+	fetch 1,mem_24g_ch_map_update
+	ncall g24_chamap_param_update,blank
+mouse_default_parm_init_next:
+	bpatch patch0d_3,mem_patch0d
+	call mouse_xtal_init
+	call mouse_24g_phy_select
+	call mouse_24g_long_sleep_set
+	branch g24_pair_param_init
+
+mouse_param_common_init:
+	setarg MOUSE_BLE_ATT_LIST_ADDR				//ble attlist start address
+	store 2,mem_ui_le_uuid_table
+	jam 3,mem_lpm_mult_timeout
+	jam 8,mem_lpm_overhead
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue
+	jam COMMBINATION_KEY_STATE_UP,mem_commbination_key_statue	
+	setarg 0x0200
+	store 2,mem_lpm_interval
+	jam 0x17,mem_le_local_mtu
+	jam 0x17,mem_le_remote_mtu
+
+	setarg mem_le_tx_buffer0_omemalloc
+	store 2,mem_ble_l2cap_tx_buff0_ptr
+	setarg MOUSE_BLE_L2CAP_TXBUFF_SIZE
+	store 2,mem_ble_l2cap_tx_buff_size_ptr
+	branch mouse_adc_gpio_mux_init
+	
+mouse_param_init:
+	bpatch patch0d_4,mem_patch0d
+	call mouse_param_common_init
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state	
+//===========init spi param==============================
+	setarg 0x0a77
+	store 2,mem_spi_init_clk
+	setsect 0,0x1224
+	setsect 1,0x4000
+	setsect 2,0x0
+	istore 5,contw
+//======================================================	
+	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_BT_125Hz,mouse_param_init_intervl_end
+	setarg LE_INTERVAL_7_5MS
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+mouse_param_init_intervl_end:
+	call mouse_g24_interval_param_8ms
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G_250Hz,mouse_24g_short_sleep_set_end
+	call mouse_g24_interval_param_4ms
+mouse_24g_short_sleep_set_end:
+	fetch 3,mem_24g_short_sleep_set
+	store 3,mem_mouse_24g_short_sleep_set_init
+	fetch 1,mem_device_flag
+	store 1,mem_device_flag_temp
+	fetch 3,mem_le_lap+3
+	store 3,mem_mouse_le_lap_temp
+	setarg 0
+	store 7,mem_mouse_key
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_bt_discovery_count
+	store 1,mem_select_device_count
+	call le_modified_name_adv
+mouse_sensor_set_angle:
+	bpatch patch0d_5,mem_patch0d
+	fetch 1,mem_sensor_angle_default
+	store 1,mem_config_sensor_angle
+	fetch 1,mem_select_sensor_angle_gpio
+	rtneq GPIO_DISABLE
+	fetcht 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_select_sensor_angle_gpio
+	call gpio_get_bit
+	call mouse_sensor_switch_angle,true
+	branch mouse_gpio_config_input_pd
+mouse_sensor_switch_angle:
+	fetch 1,mem_sensor_angle_switch
+	store 1,mem_config_sensor_angle
+	rtn
+
+mouse_g24_interval_param_4ms:
+	fetch 3,mem_mouse_24g_short_sleep_set_4ms
+	store 3,mem_24g_short_sleep_set
+	fetch 3,mem_mouse_24g_long_sleep_set_4ms
+	store 3,mem_24g_long_sleep_set
+	fetch 1,mem_mouse_24g_fast_hop_count_4ms
+	store 1,mem_24g_fast_hop_count
+	fetch 4,mem_mouse_24g_tsniff_4ms
+	store 4,mem_mouse_24g_tsniff	
+mouse_report_rate_set_250hz:
+	setarg 0x100c0c
+	store 3,mem_24g_interval
+	rtn
+
+mouse_g24_interval_param_8ms:
+	fetch 3,mem_mouse_24g_short_sleep_set_8ms
+	store 3,mem_24g_short_sleep_set
+	fetch 3,mem_mouse_24g_long_sleep_set_8ms
+	store 3,mem_24g_long_sleep_set
+	fetch 1,mem_mouse_24g_fast_hop_count_8ms
+	store 1,mem_24g_fast_hop_count
+	fetch 4,mem_mouse_24g_tsniff_8ms
+	store 4,mem_mouse_24g_tsniff
+mouse_report_rate_set_125hz:
+	setarg 0x1c1919
+	store 3,mem_24g_interval
+	rtn
+
+//mouse_report_rate_set_500hz:
+//	setarg 0x080606
+//	store 3,mem_24g_interval
+//	rtn
+//mouse_report_rate_set_1000hz:
+//	setarg 0x040303
+//	store 3,mem_24g_interval
+//	rtn
+
+
+mouse_start_work:
+	bpatch patch0d_6,mem_patch0d
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING, mouse_24g_first_start_auto_pair_mode
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_start_mode
+mouse_le_fast_conn_judge:
+	call mouse_bluetooth_fast_conn_disable
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,mouse_le_device1_judge
+	beq MODE_BT_DEVICE2,mouse_le_device2_judge
+	rtn
+mouse_le_device1_judge:
+	fetch 6,mem_device1_addr
+	fetcht 6,mem_mouse_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero
+	branch mouse_start_reconnect_device
+	
+mouse_le_device2_judge:
+	fetch 6,mem_device2_addr
+	fetcht 6,mem_mouse_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero
+	branch mouse_start_reconnect_device
+	
+mouse_start_reconnect_device:
+	bpatch patch0d_7,mem_patch0d
+	call mouse_device_le_reconn_led_config
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,29,pdata
+	iadd rega,rega
+	ifetch 1,rega
+	store 1,mem_xrecord_mode
+mouse_start_reconnect:	
+	fetch 1,mem_xrecord_mode
+	beq REC_4_MODE,mouse4_0_check_reconn_target
+	branch mouse_bluetooth_fast_conn_init
+
+mouse_wakeup_from_power_check:
+	bpatch patch0e_0,mem_patch0e
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_WAKEUP_FROM_POWER,mouse_wakeup_from_poweron
+	fetch 1,core_lpm_isogate
+	bbit1 cold_wake,mouse_wakeup_from_poweron
+	enable user	//wake from hibernate
+mouse_wakeup_from_poweron:
+	fetch 1,mem_reconn_times_init
+	store 1,mem_reconn_times
+	rtn
+
+mouse4_0_check_reconn_target:
+	jam 1,mem_mouse_le_reconnect_flag
+	fetcht 1,mem_mouse_fast_direct_timeout
+	fetch 1,mem_mouse_bluetooth_fast_conn_flag
+	beq 0xff,mouse4_0_check_reconn_target_next
+	fetcht 1,mem_mouse_direct_timeout
+mouse4_0_check_reconn_target_next:	
+	storet 1,mem_mouse_direct_timer
+	call app_lpm_mult_disable
+	fetch 3,mem_le_adv_direct_ind
+	store 3,mem_le_adv_data+4
+	call mouse_le_check_adv_flag
+	setarg ADV_FLAG_BREDR_NOT_SUPPORTED
+	istore 1,contr
+	arg mem_le_scan_data,contr
+	call mouse_le_adv_data_update
+	branch check_51cmd_adv
+
+
+/**********************system clk**********************************/
+mouse_lpm_check_wake_lock:
+	bmark1 mark_24g,app_get_lpm_wake_lock
+	fetch 1,mem_mouse_clear_sensor_data_flag
+	branch app_get_lpm_wake_lock,blank
+	fetch 1,mem_mouse_le_conn_param_reject
+	beq LE_LPM_DISABLE,app_get_lpm_wake_lock
+	fetch 1,mem_mouse_wheel_trigger
+	nbranch app_get_lpm_wake_lock,blank
+	branch app_put_lpm_wake_lock
+
+/**********************system clk end*****************************/
+
+//mouse_delay_enter_hibernata:
+//	fetch 1,mem_mouse_direct_timeout
+//	store 1,mem_mouse_bluetooth_reconnect_timeout
+//	rtn
+ 
+mouse_app_enter_hibernate:
+	bpatch patch0e_1,mem_patch0e
+	setarg PAN_REG_CONFIG
+	call twspi_read
+	bbit1 3,mouse_app_enter_hibernate_next
+	call mouse_sensor_reset
+	call mouse_sensor_powerdown
+mouse_app_enter_hibernate_next:
+	call mouse_setgpio_hibernate
+	branch app_enter_hibernate
+
+mouse_before_hibernate:
+	bpatch patch0e_2,mem_patch0e
+	call disable_authrom 
+	call mouse_before_hibernate_wheel_gpio_set
+	call mouse_setgpio_hibernate
+	call mouse_flash_power_down
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_clr_wake
+
+
+mouse_setgpio_hibernate:
+	bpatch patch0e_3,mem_patch0e
+	call mouse_set_sdio_high
+	call clear_wake
+	call mouse_logo_led_off
+	call mouse_lpm_before_common
+	call mouse_gpio_pd_idle
+	fetcht 1,mem_mouse_reuse_2ice_gpio
+	call mouse_gpio_config_input_pu
+	call mouse_gpio_set_high_impedance
+mouse_setgpio_hibernate_next:
+	call mouse_device_multi_led_all_off
+	call mouse_adc_gpio_set_before_hibernate
+	branch mouse_wheel_gpio_set_before_hibernate
+
+mouse_wheel_gpio_set_before_hibernate:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+mouse_wheel_gpio_clr_wakeup:	
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_clr_wake
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_clr_wake
+	fetcht 1,mem_whee_a_data_gpio
+	call mouse_gpio_config_input_pd
+	fetcht 1,mem_whee_b_data_gpio
+	branch mouse_gpio_config_input_pd
+	
+mouse_adc_gpio_set_before_hibernate:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetch 1,mem_adc_channel_gpio
+	arg gpcfg_no_ie,temp
+ 	branch gpio_config_function_int
+	
+
+//set all unused gpio to pull down mode to save power	
+mouse_gpio_pd_idle:
+	arg core_gpio_conf,contr
+	arg GPIO_NUMBER,loopcnt
+mouse_gpio_pd_idle_loop:
+	ifetch 1,contr
+	nbranch mouse_gpio_pd_idle_configured,blank
+	setarg gpcfg_pulldown
+	add contr,-1,contw
+	istore 1,contw
+mouse_gpio_pd_idle_configured:
+	loop mouse_gpio_pd_idle_loop
+	arg core_gpio_conf_hi+GPIO_NUMBER_EXT,pdata
+	isub contr,null
+	rtn zero
+mouse_gpio_pd_idle_ext:
+	arg GPIO_NUMBER_EXT,loopcnt
+	arg core_gpio_conf_hi,contr
+	branch mouse_gpio_pd_idle_loop
+	
+mouse_process_lpm_before:
+	rtnmark1 mark_24g
+	call mouse_lpm_before_common
+	fetch 1,mem_lpm_current_mult
+	nrtn blank					// 7.5ms, no gpio wakeup
+	branch gpio_clr_wake
+
+mouse_lpm_before_common:
+	bpatch patch0e_4,mem_patch0e
+	fetcht 1,mem_whee_a_data_gpio		//reinit gpio pu after disable wheel wakeup
+	call gpio_config_input
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_config_input
+	
+	call mouse_wheel_check
+	fetch 1,mem_mouse_sensor_sclk_gpio		//set sdio high
+ 	call mouse_gpio_config_output_high
+	call twspi_disable
+	
+	fetcht 1,mem_lbutton_gpio
+	call gpio_set_wake
+	fetcht 1,mem_rbutton_gpio
+	call gpio_set_wake
+	fetcht 1,mem_mbutton_gpio
+	call gpio_set_wake
+
+	fetcht 1,mem_bk_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_fw_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_dpi_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_config_select_device_button_gpio
+	call gpio_set_wake
+
+	fetcht 1,mem_customer_key_gpio
+	call gpio_set_wake
+	
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_tb_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_set_wake
+
+
+//short mult: no key 
+mouse_set_mult:
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+	copy rega,pdata
+	nbranch le_set_config_short_mult,blank
+	branch le_clr_config_short_mult
+	
+	
+/****************************adc**************************************/	
+mouse_adc_gpio_set:
+	bpatch patch0e_5,mem_patch0e
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetcht 1,mem_adc_channel_gpio
+	branch gpio_set_high_impedance
+
+mouse_adc_gpio_mux_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	jam MOUSE_ADC_CHECK_MULTIPLE,mem_adc_mux_status
+	rtn
+
+mouse_adc_read:
+	bpatch patch0e_6,mem_patch0e
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	call mouse_adc_gpio_set
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_GPIO,mouse_adc_read_gpio_mux_start	// gpio + dpi/switch
+	jam MOUSE_ADC_CHECK_HVIN_MULTIPLE,mem_adc_mux_status
+	branch mouse_adc_read_start
+
+mouse_adc_read_gpio_mux_start:
+	jam MOUSE_ADC_CHECK_GPIO_MULTIPLE,mem_adc_mux_status
+	branch mouse_adc_read_start
+	
+mouse_adc_read_start:
+	bpatch patch0e_7,mem_patch0e
+	call enable_adc
+	call vdd_calculate_by_mode
+	store 2,mem_mouse_vdd_now_vol
+	fetch 1,mem_adc_config_flag
+	bne ADC_CONFIG_GPIO, mouse_adc_data_process
+	fetcht 2,mem_mouse_vdd_now_vol	// BAT= 1.5V, R = 200k, a = a*1.8
+	mul32 temp,8,pdata
+	div pdata,10
+	call get_div_result
+	iadd temp,pdata
+	store 2,mem_mouse_vdd_now_vol
+mouse_adc_data_process:	
+	arg mem_mouse_vdd_calculate_set,rega
+	call mouse_adc_bat_percent_lowpower_out
+	fetch 1,mem_adc_power_flag
+	bbit1 1,mouse_app_enter_hibernate
+	bbit0 0,mouse_adc_no_low_voltage
+	jam 1,mem_mouse_adc_last_low_voltage_flag
+	branch mouse_adc_low_voltage
+	
+mouse_adc_low_voltage:
+	arg MOUSE_LOW_VOLTAGE_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_adc_no_low_voltage:
+	arg MOUSE_LOW_VOLTAGE_FLAG,queue
+	call mouse_disable_function_flag
+	jam 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_mouse_adc_last_low_voltage_flag
+	rtn blank
+	jam 0,mem_mouse_adc_last_low_voltage_flag
+	branch mouse_low_voltage_led_off_judge
+	
+
+mouse_adc_bat_percent_lowpower_out:
+	bpatch patch0f_0,mem_patch0f
+	ifetch 8,rega
+	store 8,mem_pdatatemp
+	fetch 1,mem_adc_mux_status
+	beq MOUSE_ADC_CHECK_BATTERY_ONLY,mouse_adc_bat_percent_lowpower_out_battery
+	beq MOUSE_ADC_CHECK_GPIO_MULTIPLE,mouse_adc_bat_percent_lowpower_out_battery
+	beq MOUSE_ADC_CHECK_HVIN_MULTIPLE,mouse_adc_bat_percent_lowpower_out_hvin_multiple
+mouse_adc_bat_percent_lowpower_out_battery:
+	call adc_clear_no_power_flag
+	call adc_clear_low_power_flag
+	fetch 2,mem_pdatatemp+6
+	fetcht 2,mem_pdatatemp+2	        //shutdown voltage
+	isub temp,null
+	ncall adc_set_no_power_flag,positive
+	fetcht 2,mem_pdatatemp+4		//low voltage
+	isub temp,null
+	ncall adc_set_low_power_flag,positive
+mouse_adc_bat_level_set:
+	fetch 2,mem_pdatatemp+6		//now voltage	
+	fetcht 2,mem_pdatatemp		//full voltage
+	isub temp,null
+	branch mouse_adc_bat_level_100_percent,positive		// now >= full
+	fetcht 2,mem_pdatatemp+2	        //shutdown voltage
+	isub temp,pdata
+	nbranch mouse_adc_bat_level_0_percent,positive		// now < shutdown
+	branch mouse_adc_bat_level_0_percent,blank			// now = shutdown
+	mul32 pdata,100,rega								// (now - shutdown)*100 /(full - shutdown)
+	fetch 2,mem_pdatatemp
+	fetcht 2,mem_pdatatemp+2
+	isub temp,temp
+	copy rega,pdata
+	idiv temp
+	call get_div_result
+	store 1,mem_le_battery_level_percentage
+	rtn
+
+mouse_adc_bat_level_100_percent:
+	jam 100,mem_le_battery_level_percentage
+	rtn
+mouse_adc_bat_level_0_percent:	
+	jam 0,mem_le_battery_level_percentage
+	rtn
+
+mouse_adc_bat_percent_lowpower_out_hvin_multiple:
+	branch mouse_adc_bat_percent_lowpower_out_battery
+	
+/****************************adc end********************************/	
+
+
+/****************************gpio******************************************/
+mouse_gpio_init:
+	fetcht 1,mem_eeprom_wp_gpio
+	call gpio_config_output
+//	call usb_offline_check_init
+	fetcht 1,mem_lbutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_rbutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_mbutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_bk_button_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_fw_button_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_matrix_public_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_config_select_device_button_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_customer_key_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_a_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_b_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_whee_ta_data_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_whee_tb_data_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_sensor_motion_gpio
+	call mouse_gpio_config_input_pu
+
+	fetcht 1,mem_device_switch_gpio
+	call mouse_gpio_config_input_pu
+	
+	fetcht 1,mem_select_sensor_angle_gpio
+	branch mouse_gpio_config_input_pu
+
+
+mouse_gpio_set_pupd_by_input:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	and temp,0x7f,queue
+	fetch 4,core_gpio_in
+	qisolate1 pdata
+	branch mouse_gpio_config_input_pu,true
+mouse_gpio_config_input_pd:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	set1 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+
+mouse_gpio_config_input_pu:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero 
+	set0 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+
+mouse_gpio_set_high_impedance:
+	fetch 3,mem_mouse_set_high_impedance_bit_set
+	store 3,mem_pdatatemp
+	arg 13,loopcnt
+	arg 0,temp
+mouse_gpio_set_high_impedance_bit_loop:	
+	fetch 3,mem_pdatatemp
+	isolate1 0,pdata
+	call gpio_set_high_impedance,true
+	fetch 3,mem_pdatatemp
+	lshift pdata,pdata		//-->rshift
+	store 3,mem_pdatatemp
+	increase 1,temp
+	loop mouse_gpio_set_high_impedance_bit_loop
+	rtn
+
+/****************************gpio end*******************************/
+
+
+/***********************le device info modify*****************************/
+mouse_le_name_modify:
+	bpatch patch0f_1,mem_patch0f
+	fetch 8,mem_le_name_patch
+	rtn blank
+	fetch 1,mem_le_name_patch_len
+	copy pdata,rega
+	sub pdata,11,null
+	nbranch mouse_le_name_patch_len_overflow,positive
+	
+	call mouse_le_name_clear
+	
+	arg mem_le_adv_swift_pair+9,contw
+	call mouse_le_name_modify_next
+	
+	arg mem_le_scan_data+2,contw
+	call mouse_le_name_modify_next
+	
+	arg mem_le_name,contw
+mouse_le_name_modify_next:
+	arg mem_le_name_patch,contr
+	copy rega,loopcnt
+	branch memcpy
+
+mouse_le_name_clear:
+	arg mem_le_adv_swift_pair+9,contw
+	call mouse_le_name_clear_next
+	
+	arg mem_le_scan_data+2,contw
+	call mouse_le_name_clear_next
+
+	arg mem_le_name,contw
+mouse_le_name_clear_next:
+	arg 11,loopcnt
+	branch clear_mem	
+
+mouse_le_name_patch_len_overflow:
+	call mouse_le_swift_pair_disable
+	
+	fetch 1,mem_le_name_patch_len
+	increase 1,pdata
+	store 1,mem_le_adv_swift_pair
+	jam 9,mem_le_adv_swift_pair+1
+	arg mem_le_name_patch,contr
+	arg mem_le_adv_swift_pair+2,contw
+	copy rega,loopcnt
+	call memcpy
+
+	fetch 1,mem_le_name_patch_len
+	increase 1,pdata
+	store 1,mem_le_scan_data
+	jam 9,mem_le_scan_data+1
+	arg mem_le_name_patch,contr
+	arg mem_le_scan_data+2,contw
+	copy rega,loopcnt
+	call memcpy
+
+	arg mem_le_name_patch_len,contr
+	arg mem_le_name_len,contw
+	copy rega,loopcnt
+	increase 1,loopcnt
+	branch memcpy
+
+mouse_le_swift_pair_disable:
+	arg mem_le_adv_swift_pair,contw
+	arg 20,loopcnt
+	branch clear_mem
+
+/***********************le device info modify end*************************/
+
+
+/*******************spi*****************************/
+mouse_sensor_spi_init:
+	call mouse_spid_init_pin
+	jam 0x73,mem_spi_init_clk
+//	jam 0x1e,mem_spi_init_delay_time
+	call mouse_spi_init
+	branch twspi_enable
+	
+mouse_spi_write_flash_cb:
+mouse_spi_init:
+	branch spid_init
+	
+mouse_spid_init_pin:
+	fetch 1,mem_mouse_sensor_sclk_gpio
+ 	arg gpcfg_spid_sck,temp
+ 	call gpio_config_function_int
+ 	fetch 1,mem_mouse_sensor_sdio_gpio
+ 	arg gpcfg_spid_sdio,temp
+ 	branch gpio_config_function_int
+
+
+/*******************spi end**************************/
+
+mouse_motion:
+	bpatch patch0f_2,mem_patch0f
+	disable user
+	setarg 0
+	store 6,mem_mouse_x
+	call mouse_check_sensor_data
+	setarg 0x0089
+	call twspi_write	
+	call mouse_setting_sensor_type
+	call mouse_zwheel
+	call mouse_t_zwheel
+	call mouse_key
+	fetch 1,mem_mouse_key
+	and_into 0x1f,pdata
+	store 1,mem_mouse_key
+	nbranch mouse_drawing_optima_init,user
+	call mouse_drawing_optima
+	branch mouse_no_data_timer_init
+
+
+/*******************wheel*************************/
+mouse_zwheel:
+	fetch 1,mem_mouse_z_data
+	rtn blank	
+	store 1,mem_mouse_z
+	jam 0,mem_mouse_z_data
+	branch enable_user
+	
+mouse_t_zwheel:
+	fetch 1,mem_mouse_tz_data
+	rtn blank	
+	store 1,mem_mouse_tz
+	jam 0,mem_mouse_tz_data
+	branch enable_user
+
+mouse_wheel_check:
+	call mouse_t_wheel_scan
+	call mouse_wheel_scan
+	fetch 1,mem_wheel_tb_new_pinlevel
+	fetcht 1,mem_wheel_tb_old_pinlevel
+	store 1,mem_wheel_tb_old_pinlevel
+	isub temp,null
+	nbranch app_lpm_wake_auto_lock,zero
+	fetch 1,mem_mwheel_b_new_pinlevel
+	fetcht 1,mem_mwheel_b_old_pinlevel
+	store 1,mem_mwheel_b_old_pinlevel
+	isub temp,null
+	nbranch app_lpm_wake_auto_lock,zero
+	rtn
+mouse_t_wheel_scan:
+	fetch 1,mem_whee_ta_data_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_get_bit
+	setflag true,0,rega
+	fetcht 1,mem_whee_tb_data_gpio
+	call gpio_get_bit
+	setflag true,1,rega
+	copy rega,pdata
+	store 1,mem_wheel_tb_new_pinlevel
+	beq 0x01,mouse_t_wheel_scan_judge1
+	beq 0x02,mouse_t_wheel_scan_judge2
+	fetch 1,mem_wheel_tog
+	bbit1 7,mouse_t_wheel_scan_judge3
+	rtn
+
+mouse_t_wheel_scan_judge1:
+	fetch 1,mem_wheel_tb_old_pinlevel
+	beq 0,mouse_t_wheel_scan_judge11
+	beq 3,mouse_t_wheel_scan_judge12
+	rtn
+mouse_t_wheel_scan_judge2:
+	fetch 1,mem_wheel_tb_old_pinlevel
+	beq 0,mouse_t_wheel_scan_judge21
+	beq 3,mouse_t_wheel_scan_judge22
+	rtn
+mouse_t_wheel_scan_judge11:
+	jam 0x82,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge12:
+	jam 0x81,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge21:
+	jam 0x80,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge22:
+	jam 0x83,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge3:
+	fetch 1,mem_wheel_tog
+	set0 7,pdata
+	store 1,mem_wheel_tog
+	beq 0,mouse_t_wheel_scan_judge30
+	beq 1,mouse_t_wheel_scan_judge31
+	beq 2,mouse_t_wheel_scan_judge32
+	beq 3,mouse_t_wheel_scan_judge33
+	rtn
+mouse_t_wheel_scan_judge30:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 3,mouse_wheel_t_forward
+	rtn
+mouse_t_wheel_scan_judge31:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 0,mouse_wheel_t_forward
+	rtn
+mouse_t_wheel_scan_judge32:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 3,mouse_wheel_t_back
+	rtn
+mouse_t_wheel_scan_judge33:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 0,mouse_wheel_t_back
+	rtn
+mouse_wheel_t_forward:
+	fetch 1,mem_mouse_tz_data
+	increase 1,pdata
+	store 1,mem_mouse_tz_data
+	rtn
+mouse_wheel_t_back:
+	fetch 1,mem_mouse_tz_data
+	increase -1,pdata
+	store 1,mem_mouse_tz_data
+	rtn
+
+
+mouse_wheel_scan:
+	fetch 1,mem_whee_a_data_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_get_bit
+	setflag true,0,rega
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_get_bit
+	setflag true,1,rega
+	copy rega,pdata
+	store 1,mem_mwheel_b_new_pinlevel
+	beq 0x01,mouse_wheel_scan_judge1
+	beq 0x02,mouse_wheel_scan_judge2
+	fetch 1,mem_mwheel_tog
+	bbit1 7,mouse_wheel_scan_judge3
+	rtn
+
+mouse_wheel_scan_judge1:
+	fetch 1,mem_mwheel_b_old_pinlevel
+	beq 0,mouse_wheel_scan_judge11
+	beq 3,mouse_wheel_scan_judge12
+	rtn
+mouse_wheel_scan_judge2:
+	fetch 1,mem_mwheel_b_old_pinlevel
+	beq 0,mouse_wheel_scan_judge21
+	beq 3,mouse_wheel_scan_judge22
+	rtn
+mouse_wheel_scan_judge11:
+	jam 0x82,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge12:
+	jam 0x81,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge21:
+	jam 0x80,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge22:
+	jam 0x83,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge3:
+	fetch 1,mem_mwheel_tog
+	set0 7,pdata
+	store 1,mem_mwheel_tog
+	beq 0,mouse_wheel_scan_judge30
+	beq 1,mouse_wheel_scan_judge31
+	beq 2,mouse_wheel_scan_judge32
+	beq 3,mouse_wheel_scan_judge33
+	rtn
+mouse_wheel_scan_judge30:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 3,mouse_wheel_forward
+	rtn
+mouse_wheel_scan_judge31:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 0,mouse_wheel_forward
+	rtn
+mouse_wheel_scan_judge32:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 3,mouse_wheel_back
+	rtn
+mouse_wheel_scan_judge33:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 0,mouse_wheel_back
+	rtn
+mouse_wheel_forward:
+	fetch 1,mem_mouse_z_data
+	increase 1,pdata
+	store 1,mem_mouse_z_data
+	rtn
+mouse_wheel_back:
+	fetch 1,mem_mouse_z_data
+	increase -1,pdata
+	store 1,mem_mouse_z_data
+	rtn
+
+
+mouse_wheel_gpio_set_wake:
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_tb_data_gpio
+	branch gpio_set_wake_by_current_state
+	
+mouse_before_hibernate_wheel_gpio_set:
+	fetcht 1,mem_whee_a_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_b_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_ta_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_tb_data_gpio
+	branch mouse_gpio_set_pupd_by_input
+
+mouse_wheel_trigger:
+	fetch 2,mem_mouse_z
+	rtn blank
+	jam 1,mem_mouse_wheel_trigger
+	jam 10,mem_mouse_wheel_trigger_timer
+	rtn
+
+mouse_wheel_trigger_timer:
+	arg mem_mouse_wheel_trigger_timer,regc
+	arg mouse_wheel_trigger_disable,regb
+	branch timer_single_step
+mouse_wheel_trigger_disable:
+	jam 0,mem_mouse_wheel_trigger
+	rtn
+
+
+/*
+mouse_set_qdecoder_x:
+	arg MOUSE_DEFAULT_XA_GPIO,temp
+	call mouse_gpio_config_input_pu
+	arg MOUSE_DEFAULT_XA_GPIO,temp
+	call gpio_get_bit
+	rtn true
+	fetch 1,core_qdec_cntx
+	set1 4,pdata
+	store 1,core_qdec_cntx
+	rtn
+*/	
+	
+/*******************wheel end**********************/
+
+
+/********************dpi******************************/
+mouse_dpi_check:
+	fetch 1,mem_dpi_button_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	jam MOUSE_DPI_KEY,mem_mouse_key_temp
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_dpi_key_check
+mouse_dpi_check_next:
+	store 1,mem_mouse_dpikey_press_status
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_dpi_check_end
+	call mouse_matrix_public_gpio_reset
+mouse_dpi_check_exit:	
+	copy rega,pdata
+	bbit1 MOUSE_DPI_KEY,mouse_dpi_down
+	branch mouse_dpi_up
+	
+mouse_dpi_key_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_KEY_CONNECT_GND,mouse_dpi_key_connect_gnd
+	fetch 1,mem_mouse_dpikey_press_status
+	copy pdata,regc
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_check
+mouse_dpi_key_check_next:
+	fetch 1,mem_mouse_ghost_flag
+	nbranch mouse_dpi_check_end,blank
+mouse_dpi_key_connect_matrix:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch mouse_dpi_key_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_dpi_button_gpio
+	fetch 1,mem_mouse_dpikey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_3io6key_dpi_check_end:
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_gpio_config_input_pu
+	branch mouse_dpi_check_exit
+
+mouse_dpi_check_end:
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state
+	jam 0,mem_mouse_dpikey_press_status
+	rtn
+
+mouse_dpi_key_connect_gnd:
+	fetch 1,mem_mouse_dpikey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_dpi_down:
+	fetch 1,mem_mouse_dpi_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_mouse_dpi_button_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+	rtnbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+	branch mouse_dpi_process
+
+mouse_dpi_up:
+	fetch 1,mem_mouse_dpi_button_state
+	rtneq DPI_BUTTON_STATE_UP
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON,mouse_dpi_up_next
+	bbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY,mouse_dpi_up_next
+	rtn
+mouse_dpi_up_next:	
+	fetch 1,mem_mouse_dpi_long_press_flag
+	nbranch mouse_dpi_up_after_long_press,blank
+	fetch 1,mem_select_device_count
+	ncall mouse_dpi_process,blank
+mouse_dpi_up_after_long_press:	
+	jam 0,mem_mouse_dpi_long_press_flag
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_select_device_count	
+	store 1,mem_bt_discovery_count	
+	rtn
+	
+mouse_dpi_process:	
+	bpatch patch0f_3,mem_patch0f
+	call mouse_dpi_ghost_check
+	rtn user
+	fetch 1,mem_mouse_dpi
+	
+	copy pdata,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DOUBLE_DPI_KEY,mouse_double_dpi_check
+	copy temp,pdata
+	
+	increase 1,pdata
+	and pdata,0x03,pdata
+mouse_dpi_level_store:	
+	store 1,mem_mouse_dpi
+	call mouse_setting_dpi
+	branch mouse_store_dpi_info_check
+
+
+/***************************another dpi key dpi**********************/
+
+mouse_double_dpi_check:
+	fetch 1,mem_dpi_another_button_down_enable
+	nbranch mouse_another_dpi_button_down,blank
+mouse_dpi_increase:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_LEVEL_4,mouse_dpi_increase_level_4
+	copy temp,pdata
+	rtneq MOUSE_DPI_LEVEL2
+mouse_dpi_increase_level:
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_3	//1600
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_2 	//1200
+	rtn
+
+mouse_dpi_level_1:		//800
+	setarg 2
+	branch mouse_dpi_level_store
+mouse_dpi_level_2:		//1200
+	setarg 0
+	branch mouse_dpi_level_store
+mouse_dpi_level_3:		//1600
+	setarg 1
+	branch mouse_dpi_level_store
+mouse_dpi_level_4:		//1000
+	setarg 3
+	branch mouse_dpi_level_store	
+
+mouse_dpi_increase_level_4:
+	copy temp,pdata			//0->1,2->3,3->0
+	rtneq MOUSE_DPI_LEVEL2
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_3
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_4
+	beq MOUSE_DPI_LEVEL4,mouse_dpi_level_2
+	rtn
+mouse_dpi_decrease_level_4:
+	copy temp,pdata			//0->3,1->0,3->2
+	rtneq MOUSE_DPI_LEVEL3
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_4
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_2
+	beq MOUSE_DPI_LEVEL4,mouse_dpi_level_1
+	rtn
+
+mouse_another_dpi_button_down:
+mouse_dpi_decrease:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_LEVEL_4,mouse_dpi_decrease_level_4
+	copy temp,pdata
+	rtneq MOUSE_DPI_LEVEL3
+mouse_dpi_decrease_level:
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_1
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_2
+	rtn
+	
+
+/*************************another dpi key dpi end********************/
+
+mouse_dpi_ghost_check:
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+	branch mouse_ghost_key_value_check
+	
+mouse_dpi_key_check_long_press:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON,mouse_select_device_by_dpi_button
+	bbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY,mouse_discovery_by_dpi_button
+	rtn
+
+mouse_select_device_by_dpi_button:
+	fetch 1,mem_mouse_dpi_button_state
+	rtnne DPI_BUTTON_STATE_DOWN	
+	arg mem_select_device_count,regc
+	arg mouse_ready_reconnection_by_dpi_button,regb
+	branch timer_single_step
+
+mouse_ready_reconnection_by_dpi_button:
+	jam 1,mem_mouse_dpi_long_press_flag
+	branch mouse_ready_reconnection_by_button
+
+mouse_discovery_by_dpi_button:
+	fetch 1,mem_mouse_dpi_button_state
+	rtnne DPI_BUTTON_STATE_DOWN	
+	arg mem_bt_discovery_count,regc
+	arg mouse_long_dpi_button_bt_discovery,regb
+	branch timer_single_step
+
+mouse_long_dpi_button_bt_discovery:
+	jam 1,mem_mouse_dpi_long_press_flag
+	branch mouse_long_button_bt_discovery
+
+mouse_setting_dpi_4_level:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_DPI_LEVEL_4
+	fetch 1,mem_mouse_dpi
+	rtnne MOUSE_DPI_LEVEL4
+	jam MOUSE_DPI_LEVEL1,mem_mouse_dpi
+	rtn
+	
+mouse_setting_dpi:
+	bpatch patch0f_4,mem_patch0f
+	call mouse_setting_dpi_4_level
+	call mouse_dpi_led_blink_delay
+mouse_setting_sensor_type:
+	bpatch patch0f_5,mem_patch0f
+	fetch 1,mem_config_sensor_type
+	beq S201X,mouse_seting_S201_dpi
+	beq P3212,mouse_seting_3212_dpi
+	beq KA8G2,mouse_seting_ka8g2_dpi
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_cpi0		//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_cpi1		//1600
+	beq MOUSE_DPI_LEVEL3,mouse_set_cpi2		//800
+	beq MOUSE_DPI_LEVEL4,mouse_set_cpi3		//1000
+mouse_set_cpi1:	//320x+8009
+	fetcht 1,mem_320x_dpi_1
+	branch mouse_dpi_store
+mouse_set_cpi0:
+	fetcht 1,mem_320x_dpi_0
+	branch mouse_dpi_store
+mouse_set_cpi2:
+	fetcht 1,mem_320x_dpi_2
+	branch mouse_dpi_store
+mouse_set_cpi3:
+	fetcht 1,mem_320x_dpi_3
+mouse_dpi_store:
+	fetch 1,mem_config_sensor_type
+	beq P3065_XY,mouse_3065xy_set_dpi
+	beq MX8650,mouse_3065xy_set_dpi
+	beq KA8,mouse_ka8_set_dpi
+	beq P6520,mouse_ka8_set_dpi
+	beq P8009,mouse_3065xy_set_dpi
+mouse_dpi_write:		// 3205  1  2  3  4
+	storet 1,mem_mouse_cpi_count
+	setarg MOUSE_DPI_ADDRESS
+	call twspi_read
+	and pdata,0xf8,temp
+	fetch 1,mem_mouse_cpi_count
+	iadd temp,pdata
+	lshift8 pdata,pdata
+	add pdata,MOUSE_DPI_ADDRESS,pdata
+	branch twspi_write
+
+mouse_3065xy_set_dpi:	// 0 1 2 3
+	increase -1,temp
+	branch mouse_dpi_write
+
+mouse_ka8_set_dpi:	// 3 4 5 6
+	increase 2,temp
+	branch mouse_dpi_write
+
+mouse_seting_S201_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_S201_dpi_0	//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_S201_dpi_2	//2400
+	beq MOUSE_DPI_LEVEL3,mouse_set_S201_dpi_3	//3200
+mouse_set_S201_dpi_0:	//1200
+	fetch 1,mem_sensor_s201_dpi_0
+	copy pdata,rega
+	branch mouse_dpi_S201_store
+
+mouse_set_S201_dpi_1:	//1600
+	fetch 1,mem_sensor_s201_dpi_1
+	copy pdata,rega
+	branch mouse_dpi_S201_store
+	
+mouse_set_S201_dpi_2:	//2400
+	fetch 1,mem_sensor_s201_dpi_2
+	copy pdata,rega
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_3:	//3200
+	fetch 1,mem_sensor_s201_dpi_3
+	copy pdata,rega
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_4:	//800
+	fetch 1,mem_sensor_s201_dpi_4
+	copy pdata,rega
+mouse_dpi_s201_store:
+	setarg 0xc309
+	call twspi_write
+	copy rega,pdata
+	lshift8 pdata,pdata
+	add pdata,0x23,pdata
+	call twspi_write
+	setarg 0x0009
+	branch twspi_write
+
+mouse_seting_3212_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_p3212_cpi0	//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_p3212_cpi1	//1600
+	beq MOUSE_DPI_LEVEL3,mouse_set_p3212_cpi2	//2400
+	beq MOUSE_DPI_LEVEL4,mouse_set_p3212_cpi3	//800
+mouse_set_p3212_cpi1:
+	fetch 1,mem_3212_dpi_1
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi0:
+	fetch 1,mem_3212_dpi_0
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi2:
+	fetch 1,mem_3212_dpi_2
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi3:
+	fetch 1,mem_3212_dpi_3
+mouse_p3212_dpi:
+	store 1,mem_mouse_cpi_count
+	lshift8 pdata,pdata
+	copy pdata,rega
+	add pdata,MOUSE_P3212_DPI_XADDRESS,pdata
+  	call twspi_write
+ 	copy rega,pdata
+  	add pdata,MOUSE_P3212_DPI_YADDRESS,pdata
+	branch twspi_write
+
+mouse_seting_ka8g2_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_pka8g2_cpi0		//1600
+	beq MOUSE_DPI_LEVEL2,mouse_set_pka8g2_cpi1		//2400
+	beq MOUSE_DPI_LEVEL3,mouse_set_pka8g2_cpi2		//3200
+	beq MOUSE_DPI_LEVEL4,mouse_set_pka8g2_cpi3		//800
+mouse_set_pka8g2_cpi1:
+	fetch 1,mem_ka8g2_dpi_1
+	branch mouse_p3212_dpi
+
+mouse_set_pka8g2_cpi0:
+	fetch 1,mem_ka8g2_dpi_0
+	branch mouse_p3212_dpi
+	
+mouse_set_pka8g2_cpi2:
+	fetch 1,mem_ka8g2_dpi_2
+	branch mouse_p3212_dpi
+
+mouse_set_pka8g2_cpi3:
+	fetch 1,mem_ka8g2_dpi_3
+	branch mouse_p3212_dpi
+
+		
+/********************dpi end***************************/		
+
+
+/***********************key******************************/
+
+mouse_key:
+	call mouse_check_firekey_gpio
+	fetch 1,mem_fire_key_flag
+	nbranch fire_key_press,blank
+	fetch 1,mem_fire_key_status
+	nbranch fire_key_process,blank
+	
+	call mouse_check_key_gpio
+	call mouse_ghost_key_check
+	call mouse_set_mult
+	call mouse_24g_key
+	copy rega,pdata
+	fetcht 1,mem_mouse_key_last
+	store 1,mem_mouse_key_last
+	store 1,mem_mouse_key
+	ixor temp,pdata
+	sub pdata,0,null
+	rtn zero
+	branch enable_user
+
+mouse_24g_key:
+	rtnmark0 mark_24g
+	copy rega,pdata
+	rtn blank
+	store 1,mem_mouse_key
+	branch enable_user
+
+	
+/************************************ghost key******************************/
+
+mouse_ghost_key_check:
+	jam 0,mem_mouse_matrix_key_cow_count
+	jam 0,mem_mouse_matrix_key_row_count
+	jam 0,mem_mouse_ghost_flag
+	copy pdata,regb
+	fetcht 1,mem_lbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_matrix_ghost_key_L_BK,zero
+	fetch 1,mem_fw_button_gpio
+	isub temp,null
+	branch mouse_matrix_ghost_key_L_FW,zero
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_MBK_RFW,zero
+	branch mouse_ghost_key_MFW_RBK
+
+mouse_matrix_ghost_key_L_BK:
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_fw_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_LBK_MFW,zero
+	branch mouse_ghost_key_LBK_RFW
+
+mouse_matrix_ghost_key_L_FW:
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_LFW_MBK,zero
+	branch mouse_ghost_key_LFW_RBK
+
+mouse_ghost_key_LBK_MFW:
+	call mouse_ghost_key_check_L_BK
+	call mouse_ghost_key_check_M_FW
+	branch mouse_ghost_key_check_next
+
+mouse_ghost_key_LBK_RFW:
+	call mouse_ghost_key_check_L_BK
+	branch mouse_ghost_key_RFW
+
+mouse_ghost_key_LFW_MBK:
+	call mouse_ghost_key_check_L_FW
+	call mouse_ghost_key_check_M_BK
+	branch mouse_ghost_key_check_next
+	
+mouse_ghost_key_LFW_RBK:
+	call mouse_ghost_key_check_L_FW
+	branch mouse_ghost_key_RBK
+	
+mouse_ghost_key_MBK_RFW:
+	call mouse_ghost_key_check_M_BK
+mouse_ghost_key_RFW:
+	call mouse_ghost_key_check_R_FW
+	branch mouse_ghost_key_check_next
+	
+mouse_ghost_key_MFW_RBK:
+	call mouse_ghost_key_check_M_FW
+mouse_ghost_key_RBK:
+	call mouse_ghost_key_check_R_BK
+mouse_ghost_key_check_next:
+	call mouse_ghost_key_check_BK_FW
+	call mouse_ghost_key_check_LMR
+	fetch 1,mem_mouse_matrix_key_row_count
+	rtn blank
+	fetch 1,mem_mouse_matrix_key_cow_count
+	rtn blank
+	jam 1,mem_mouse_ghost_flag
+	fetch 1,mem_mouse_key_last		// matrix have ghost key
+	copy pdata,rega
+	rtn
+
+mouse_ghost_key_check_L_BK:
+	and regb,MOUSE_L_BK_BUTTON,pdata
+	beq MOUSE_L_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_M_BK:
+	and regb,MOUSE_L_BK_BUTTON,pdata
+	beq MOUSE_M_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_R_BK:
+	and regb,MOUSE_L_BK_BUTTON,pdata
+	beq MOUSE_R_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_L_FW:
+	and regb,MOUSE_L_BK_BUTTON,pdata
+	beq MOUSE_L_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_M_FW:
+	and regb,MOUSE_M_FW_BUTTON,pdata
+	beq MOUSE_M_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_R_FW:
+	and regb,MOUSE_M_FW_BUTTON,pdata
+	beq MOUSE_R_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+
+mouse_ghost_key_check_BK_FW:
+	and regb,MOUSE_BK_FW_BUTTON,pdata
+	beq MOUSE_BK_FW_BUTTON,mouse_matrix_row_more_than_one_key
+	rtn	
+
+mouse_ghost_key_check_LMR:
+	and temp,MOUSE_LMR_BUTTON,pdata	// key LMR press
+	beq MOUSE_LR_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_LM_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_RM_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_LMR_BUTTON,mouse_matrix_row_more_than_one_key
+	rtn
+
+
+mouse_matrix_row_more_than_one_key:
+	jam 1,mem_mouse_matrix_key_row_count
+	rtn
+
+mouse_matrix_cow_more_than_one_key:
+	jam 1,mem_mouse_matrix_key_cow_count
+	rtn
+
+/************************************ghost key end******************************/
+
+
+
+/************************************double dpi key******************************/
+
+mouse_dpi_another_gpio_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_DOUBLE_DPI_KEY
+	bbit0 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND,mouse_dpi_another_gpio_connect_vin_check
+mouse_dpi_another_gpio_connect_gnd_check:	
+	fetch 1,mem_dpi_another_button_gpio
+	call mouse_gpio_config_output_high
+	call mouse_dpi_another_check
+	fetcht 1,mem_dpi_another_button_gpio
+	branch mouse_gpio_config_input_pu	
+
+mouse_dpi_another_gpio_connect_vin_check:
+	fetch 1,mem_dpi_another_button_gpio
+	call mouse_gpio_config_output_low
+	jam MOUSE_DPI_ANOTHER_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_dpi_another_button_gpio
+	fetch 1,mem_dpi_another_press_status
+	call mouse_check_key_connect_vin_new
+	call mouse_dpi_another_state_check
+	fetcht 1,mem_dpi_another_button_gpio
+	branch mouse_gpio_config_input_pu	
+
+mouse_dpi_another_down_new:
+	call mouse_gpio_config_input_pu	
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_dpi_another_button_state
+	branch mouse_dpi_process
+
+mouse_dpi_another_check:
+	jam MOUSE_DPI_ANOTHER_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_dpi_another_button_gpio
+	fetch 1,mem_dpi_another_press_status	
+	call mouse_check_key_connect_gnd_new
+mouse_dpi_another_state_check:
+	store 1,mem_dpi_another_press_status
+	fetch 1,mem_dpi_another_button_down_enable
+	branch mouse_dpi_another_up,blank	
+mouse_dpi_another_down:
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_dpi_another_button_state
+	branch mouse_dpi_process
+
+mouse_dpi_another_up:
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_UP
+	jam DPI_BUTTON_STATE_UP,mem_dpi_another_button_state
+	rtn
+
+mouse_check_key_connect_gnd_new:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call gpio_get_bit
+	setflag true,0,regb
+	and regb,0x07,pdata
+	fetcht 1,mem_mouse_key_temp_patch
+	copy temp,queue
+	beq 0x07,mouse_another_dpi_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_another_dpi_key_release
+	rtn
+
+mouse_check_key_connect_vin_new:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call mouse_gpio_config_input_pd
+	call gpio_get_bit
+	setflag true,0,regb
+	and regb,0x07,pdata
+	fetcht 1,mem_mouse_key_temp_patch
+	copy temp,queue
+	beq 0x07,mouse_another_dpi_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_another_dpi_key_release
+	rtn
+
+mouse_another_dpi_key_press:
+	jam 1,mem_dpi_another_button_down_enable
+	rtn
+mouse_another_dpi_key_release:
+	jam 0,mem_dpi_another_button_down_enable
+	rtn
+
+/************************************double dpi key end******************************/
+
+
+
+/************************************fire key************************************/
+
+mouse_check_firekey_gpio:
+	arg 0,regb
+	fetch 1,mem_firebutton_gpio
+	rtneq GPIO_DISABLE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND,mouse_check_firekey_connect_vin
+mouse_check_firekey_connect_gnd:
+	fetcht 1,mem_firebutton_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_firebutton_gpio
+	call gpio_get_bit
+	setflag true,0,regb
+mouse_firekey_state_store:	
+	copy regb,pdata
+	store 1,mem_fire_key_flag
+	rtn
+
+mouse_check_firekey_connect_vin:
+	fetcht 1,mem_firebutton_gpio
+	call mouse_gpio_config_input_pd
+	fetcht 1,mem_firebutton_gpio
+	call gpio_get_bit
+	nsetflag true,0,regb
+	branch mouse_firekey_state_store
+
+fire_key_process: 
+	beq 4,fire_key_process_end
+fire_key_press:
+	call firekey_clkn_bt_timer_check 
+	fetch 4,mem_fire_key_delay
+	arg 0xa0,temp      
+	iadd temp,temp
+	copy clkn_bt,pdata
+	isub temp,null
+	nrtn positive
+	store 4,mem_fire_key_delay 
+	fetch 1,mem_fire_key_status
+	beq 0,fire_key_process_start
+	beq 1,fire_key_process_release1
+	beq 2,fire_key_process_start2
+	beq 3,fire_key_process_release2
+	rtn
+
+fire_key_process_start:
+	jam 1,mem_fire_key_status
+fire_key_down:
+	jam 1,mem_mouse_key
+	branch enable_user
+
+fire_key_process_release1:
+	jam 2,mem_fire_key_status
+fire_key_release:
+	jam 0,mem_mouse_key
+	branch enable_user
+
+fire_key_process_start2:
+	jam 3,mem_fire_key_status
+	branch fire_key_down
+
+fire_key_process_release2:
+	jam 0,mem_fire_key_status
+	branch fire_key_release
+
+fire_key_process_end:
+	jam 0,mem_fire_key_status
+	jam 0,mem_mouse_key
+	rtn
+
+firekey_clkn_bt_timer_check:
+	fetcht 4,mem_fire_key_delay
+	copy clkn_bt,pdata
+	isub temp,null
+	ncall firekey_clkn_bt_timer_timeout,positive
+	rtn
+firekey_clkn_bt_timer_timeout:
+	setarg 0
+	store 4,mem_fire_key_delay
+	rtn
+
+/*********************************fire key end*****************************/
+
+
+
+/*********************************matrix key*****************************/
+
+mouse_key_check_once:
+	call mouse_check_key_gpio_once
+	call mouse_check_key_gpio
+	setarg 0x00
+	store 3,mem_mouse_lkey_press_status
+	rtn
+	
+mouse_check_key_gpio:
+	bpatch patch0f_6,mem_patch0f
+	fetch 1,mem_sensor_shutdown_flag
+	ncall mouse_check_key_gpio_once,blank
+	arg 0,rega
+	call mouse_check_lkey_gpio
+	call mouse_check_rkey_gpio
+	call mouse_check_mkey_gpio
+	call mouse_check_bkkey_gpio
+	call mouse_check_fwkey_gpio
+	call mouse_check_firekey_gpio
+	call mouse_check_customerkey_gpio
+	copy rega,pdata
+	rtn
+
+mouse_check_key_gpio_once:
+	setarg 0x030303
+	store 3,mem_mouse_lkey_press_status
+	rtn
+
+mouse_check_lkey_gpio:
+	fetch 1,mem_lbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_L_KEY,mem_mouse_key_temp
+	fetcht 1,mem_lbutton_gpio
+	fetch 1,mem_mouse_lkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_lkey_press_status
+	fetcht 1,mem_lbutton_gpio
+	branch mouse_gpio_config_input_pu
+
+mouse_check_rkey_gpio:
+	fetch 1,mem_rbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_R_KEY,mem_mouse_key_temp
+	fetcht 1,mem_rbutton_gpio
+	fetch 1,mem_mouse_rkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_rkey_press_status
+	fetcht 1,mem_rbutton_gpio
+	branch mouse_gpio_config_input_pu
+	
+mouse_check_mkey_gpio:
+	fetch 1,mem_mbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_M_KEY,mem_mouse_key_temp
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_mouse_mkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_mkey_press_status
+	fetcht 1,mem_mbutton_gpio
+	branch mouse_gpio_config_input_pu
+
+mouse_check_bkkey_gpio:
+	fetch 1,mem_bk_button_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_BK_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_bkkey_press_status
+	copy pdata,regc
+	fetcht 1,mem_bk_button_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_bk_check
+	call gpio_get_bit
+	branch mouse_check_bk_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_bk_button_gpio
+	fetch 1,mem_mouse_bkkey_press_status
+	call mouse_check_key_connect_gnd
+mouse_check_bkkey_gpio_end:	
+	store 1,mem_mouse_bkkey_press_status
+	branch mouse_matrix_public_gpio_reset
+
+mouse_check_bk_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_bkkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_bkkey_gpio_end
+
+mouse_3io6key_bk_check:
+	fetch 1,mem_bk_button_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_bk_button_gpio
+	call mouse_3io6key_check
+	store 1,mem_mouse_bkkey_press_status
+	fetcht 1,mem_bk_button_gpio
+	branch mouse_gpio_config_input_pu
+
+
+mouse_check_fwkey_gpio:
+	fetch 1,mem_fw_button_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_FW_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_fwkey_press_status
+	copy pdata,regc
+	fetcht 1,mem_fw_button_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_fw_check
+	call gpio_get_bit
+	branch mouse_check_fw_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_fw_button_gpio
+	fetch 1,mem_mouse_fwkey_press_status
+	call mouse_check_key_connect_gnd
+mouse_check_fwkey_gpio_end:	
+	store 1,mem_mouse_fwkey_press_status
+mouse_matrix_public_gpio_reset:	
+	fetcht 1,mem_matrix_public_gpio
+	branch mouse_gpio_config_input_pu
+
+mouse_check_fw_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_fwkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_fwkey_gpio_end	
+
+mouse_3io6key_fw_check:
+	fetch 1,mem_fw_button_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_fw_button_gpio
+	call mouse_3io6key_check
+	store 1,mem_mouse_fwkey_press_status
+	fetcht 1,mem_fw_button_gpio
+	branch mouse_gpio_config_input_pu
+
+mouse_check_customerkey_gpio:
+	jam 0,mem_customer_key
+	fetch 1,mem_customer_key_gpio
+	rtneq GPIO_DISABLE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_KEYBOARD
+	bbit1 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN_OR_MATRIX,mouse_customer_key_connect_vin
+mouse_customer_key_connect_gnd:
+	jam MOUSE_CUSTOMER_KEY,mem_mouse_key_temp
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_customerkey_press_status
+mouse_check_customerkey_gpio_next:
+	copy rega,pdata
+	bbit1 MOUSE_CUSTOMER_KEY,mouse_customerkey_press
+	call mouse_customerkey_release
+mouse_check_customerkey_gpio_exit:
+	fetch 1,mem_customer_data_trigger
+	store 1,mem_customer_data_trigger_last
+	rtn
+
+mouse_customer_key_connect_vin:
+	jam MOUSE_CUSTOMER_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_customerkey_press_status
+	copy pdata,regc
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_customer_key_check_vin
+	call gpio_get_bit
+	branch mouse_check_customer_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_customerkey_gpio_over
+
+mouse_check_customer_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_customerkey_gpio_over
+
+mouse_3io6key_customer_key_check_vin:
+	fetch 1,mem_customer_key_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_customer_key_gpio
+	call mouse_3io6key_check
+mouse_check_customerkey_gpio_over:	
+	store 1,mem_mouse_customerkey_press_status
+	call mouse_check_customerkey_gpio_next
+	fetcht 1,mem_customer_key_gpio
+	branch mouse_gpio_config_input_pu
+	
+
+mouse_customerkey_press:
+	jam 1,mem_customer_data_trigger
+	call mouse_customer_key_need_send
+	branch mouse_check_customerkey_gpio_exit
+
+mouse_customerkey_release:
+	jam 0,mem_customer_data_trigger
+	fetch 1,mem_customer_data_trigger_last
+	rtn blank
+mouse_customer_key_need_send:	
+	jam 1,mem_customer_key
+	rtn	
+
+/*******************************matrix key end***************************/
+
+mouse_check_matrix_button_connect_gnd:	
+	call gpio_get_bit
+	fetcht 1,mem_mouse_key_temp
+	copy temp,queue	
+	branch  mouse_key_press,true
+mouse_key_release:
+	qset0 rega
+	rtn	
+
+mouse_check_key_connect_gnd:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call gpio_get_bit
+	setflag true,0,regb
+mouse_check_key_connect_gnd_1:
+	and regb,0x07,pdata
+mouse_check_key_connect_gnd_next:
+	fetcht 1,mem_mouse_key_temp
+	copy temp,queue
+	beq 0x07,mouse_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_key_release
+	rtn
+
+mouse_key_press:
+	qset1 rega
+	rtn
+
+mouse_3io6key_check:
+	bpatch patch0f_7,mem_patch0f
+	copy regc,pdata
+	store 1,mem_mouse_key_status
+	lshift pdata,pdata
+	copy pdata,regb
+	copy temp,regc
+	call mouse_gpio_config_input_pd
+	copy regc,temp
+	call gpio_get_bit
+	nsetflag true,0,regb
+	call mouse_check_press
+	branch mouse_check_key_connect_gnd_next
+
+mouse_check_press:
+	fetcht 1,mem_mouse_key_status
+	and_into 0x01,temp
+	and regb,0x01,pdata
+	isub temp,null
+	nbranch mouse_current_mult_update,zero
+	rtn
+	
+	
+//input:pdata gpio number
+mouse_gpio_config_output_high:
+	rtneq GPIO_DISABLE
+	arg gpcfg_output_high,temp
+	branch gpio_config_function_int
+
+//input:pdata gpio number
+mouse_gpio_config_output_low:
+	rtneq GPIO_DISABLE
+	arg gpcfg_output_low,temp
+	branch gpio_config_function_int	
+	
+/*************************key***************************************/
+
+/**********************sensor******************************/	
+mouse_init_sunt:
+	bpatch patch10_0,mem_patch10
+	call mouse_sensor_spi_init
+	rtn wake
+mouse_init_sensor_wakeup:	
+	call mouse_sensor_poweron
+mouse_init_sensor:
+	bpatch patch10_1,mem_patch10
+	call mouse_read_sensor_id
+	beq P32XX_ID1,mouse_init_p32xx_id2_judge
+	beq P3065_ID1,mouse_init_p3065
+	beq PKA8G2_ID1,mouse_ka8g2_id2_judge
+	call mouse_twspi_reset
+	nop 6900
+	branch mouse_init_sensor
+mouse_twspi_reset:
+	fetcht 1,mem_mouse_sensor_sclk_gpio
+	call twspi_reset
+	branch mouse_spid_init_pin
+
+mouse_read_sensor_id:
+	setarg PAN_REG_PID_H
+	call twspi_read
+	store 1,mem_sensor_id2
+	setarg PAN_REG_PID_L
+	call twspi_read
+	store 1,mem_sensor_id1
+	rtn
+
+mouse_init_p32xx_id2_judge:
+	fetch 1,mem_sensor_id2
+	beq P_MX8650,mouse_mx8650_init_param
+	beq P8009_ID2,mouse_8009_init_param
+	beq P3205_TJ3T_ID2,mouse_S210X_3205_3t_judge
+	beq P3204_TJ3L_ID2,mouse_3204_3l_init_param
+	beq P3212_ID2,mouse_3212_init_param
+	beq PKA8_ID2,mouse_ka8_init_param_check
+	beq P6520A_ID2,mouse_p6520_init_param
+	branch mouse_init_sensor
+
+mouse_S210X_3205_3t_judge:
+	setarg 0x49		// id3
+	call twspi_read
+	beq 0xa1,mouse_S201X_init_param
+	branch mouse_3205_3t_init_param
+
+mouse_S201X_init_param:
+	jam S201X,mem_config_sensor_type
+	rtn
+	
+mouse_mx8650_init_param:
+	jam MX8650,mem_config_sensor_type
+	call mouse_sensor_reset
+	call delay_10ms
+	arg mem_sensor_8650_init,regc
+	call mouse_sensor_wr_seq
+	branch mouse_setting_sensor_type
+
+mouse_8009_init_param:
+	setarg 0x16
+	call twspi_read
+	sub pdata,0xbd,null 
+	nbranch mouse_init_sunt,zero
+	setarg 0x19
+	call twspi_read
+	sub pdata,0x55,null 
+	nbranch mouse_init_sunt,zero
+	setarg 0x1b
+	call twspi_read
+	sub pdata,0x1d,null 
+	nbranch mouse_init_sunt,zero
+	jam P8009,mem_config_sensor_type
+	arg mem_sensor_8009_init,regc
+	branch mouse_sensor_wr_seq
+
+mouse_3205_3t_init_param:
+	jam P3205,mem_config_sensor_type
+	arg mem_sensor_3205_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init,regc
+	call mouse_sensor_wr_seq
+	setarg 0x0943
+	call twspi_write
+	arg mem_sensor_32xx_init_1,regc
+	branch mouse_sensor_wr_seq	
+
+mouse_3204_3l_init_param:
+	jam P3204,mem_config_sensor_type
+	arg mem_sensor_3204_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init_1,regc
+	branch mouse_sensor_wr_seq	
+
+mouse_3212_init_param:
+	jam P3212,mem_config_sensor_type
+	arg mem_sensor_3212_init,regc
+mouse_sensor_wr_seq:
+	ifetch 2,regc
+	arg 0xffff,temp
+	isub temp,null
+	rtn zero
+	call twspi_write
+	increase 2,regc
+	branch mouse_sensor_wr_seq
+
+mouse_ka8_init_param_check:	
+	call mouse_sensor_disable_wp
+	setarg 0x9a5b
+	call twspi_write
+	setarg 0x0d
+	call twspi_read
+	sub pdata,0x12,null
+	branch mouse_ka8ul_init_param,zero
+	sub pdata,0x0a,null
+	nbranch mouse_ka8hd_sensor_judge,zero
+	setarg 0x0e
+	call twspi_read
+	sub pdata,0xe5,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x10
+	call twspi_read
+	sub pdata,0xa5,null
+	branch mouse_ka8ul_init_param,zero
+	call mouse_enable_ka8_sensor_wp
+mouse_ka8_init_param:
+	jam KA8,mem_config_sensor_type	
+	rtn
+mouse_ka8ul_init_param:
+	jam KA8_UL,mem_config_sensor_type	
+	arg mem_sensor_ka8ul_init,regc
+	branch mouse_sensor_wr_seq
+mouse_ka8hd_sensor_judge:
+	sub pdata,0x10,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x0e
+	call twspi_read
+	sub pdata,0xc5,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x10
+	call twspi_read
+	sub pdata,0x38,null
+	nbranch mouse_init_sensor,zero
+mouse_ka8hd_init_param:
+	call mouse_enable_ka8_sensor_wp
+	jam KA8_HD,mem_config_sensor_type
+	rtn
+mouse_enable_ka8_sensor_wp:
+	setarg 0x005b
+	call twspi_write
+	branch mouse_sensor_enable_wp
+	
+mouse_p6520_init_param:
+	jam P6520,mem_config_sensor_type
+	arg mem_sensor_p6520_init,regc
+	branch mouse_sensor_wr_seq
+	
+mouse_init_p3065:
+	call mouse_sensor_poweron
+	fetch 1,mem_sensor_id2
+	beq P3065_XY_ID2,mouse_p3065xy_init_param
+	beq P3065_ID2,mouse_p3065_init_param
+	branch mouse_init_sensor
+	
+mouse_p3065_init_param:	
+	jam P3065,mem_config_sensor_type
+	rtn
+
+mouse_p3065xy_init_param:
+	jam P3065_XY,mem_config_sensor_type
+	rtn
+	
+mouse_ka8g2_id2_judge:
+	call mouse_sensor_poweron
+	fetch 1,mem_sensor_id2
+	beq PKA8G2_ID2,mouse_ka8g2_init_param
+	branch mouse_init_p32xx_id2_judge
+mouse_ka8g2_init_param:
+	jam KA8G2,mem_config_sensor_type
+	arg mem_sensor_ka8g2_init,regc
+	branch mouse_sensor_wr_seq
+	
+mouse_sensor_enable_wp:
+	setarg 0x0009
+	branch twspi_write
+mouse_sensor_disable_wp:
+	setarg 0x5a09
+	branch twspi_write
+
+mouse_sensor_reset:	
+	arg 0x8006,temp
+	fetch 1,mem_config_sensor_type
+	bne KA8G2,mouse_sensor_reset_end
+	arg 0x9706,temp
+mouse_sensor_reset_end:
+	copy temp,pdata
+	call twspi_write
+	nop 12000
+	rtn
+
+mouse_sensor_poweron_init:
+	arg mem_sensor_poweron_init,regc
+	fetch 1,mem_config_sensor_type
+	rtnne KA8G2
+	arg mem_sensor_ka8g2_poweron_init,regc
+	rtn
+	
+mouse_sensor_poweron:
+	bpatch patch10_2,mem_patch10
+	call mouse_sensor_spi_init
+	call mouse_sensor_reset
+	call mouse_sensor_poweron_init
+	call mouse_sensor_wr_seq
+	branch mouse_setting_sensor_type
+
+mouse_sensor_powerdown:
+	bpatch patch10_3,mem_patch10
+	call mouse_init_sunt
+	call mouse_sensor_spi_init
+	arg 0x0806,temp
+	fetch 1,mem_config_sensor_type
+	bne KA8G2,mouse_sensor_powerdown_end
+	arg 0x1f06,temp
+mouse_sensor_powerdown_end:
+	copy temp,pdata
+	branch twspi_write
+/*********sensor init*************/	
+
+
+
+/*********sensor motion*************/
+mouse_check_sensor_data:
+	fetch 1,mem_spi_write_flash_sm
+	rtnne FLASH_SM_NO_BUYS
+	fetch 1,mem_config_sensor_type
+	beq P3205,mouse_p32xx_sensor_motion
+	beq P3065,mouse_p32xx_sensor_motion
+	beq KA8,mouse_p32xx_sensor_motion
+	beq P3204,mouse_p32xx_sensor_motion
+	beq P3212,mouse_p3212_sensor_motion
+	beq P3065_xy,mouse_p32xx_sensor_motion
+	beq P8009,mouse_p8009_sensor_motion	
+	beq KA8G2,mouse_pka8g2_sensor_motion
+	branch mouse_p32xx_sensor_motion
+
+
+mouse_p32xx_sensor_motion:
+	call mouse_clear_sensor_data
+	disable user
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_p32xx_sensor_motion_2
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_p32xx_sensor_motion_2:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_p3065_judge   
+mouse_p32xx_sensor_motion_1:
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	call mouse_read_sensor_common
+	fetch 1,mem_mouse_x
+	call mouse_data_extsign
+	store 2,mem_mouse_x
+	fetch 1,mem_mouse_y
+	call mouse_data_extsign
+	store 2,mem_mouse_y
+	fetch 1,mem_config_sensor_angle
+	beq MOUSE_6CLK_ANGLE,mouse_motion32xx_6clk_direction_selection
+	beq MOUSE_9CLK_ANGLE,mouse_motion32xx_9clk_direction_selection
+	beq MOUSE_12CLK_ANGLE,mouse_motion32xx_12clk_direction_selection
+	beq MOUSE_3CLK_ANGLE,mouse_motion32xx_3clk_direction_selection
+	rtn
+
+mouse_p3065_judge:
+	beq P3065_ID1,mouse_p32xx_sensor_motion_1
+	branch mouse_twspi_reset
+	
+mouse_motion32xx_6clk_direction_selection:
+	call mouse_motion_6clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_9clk_direction_selection:
+	call mouse_motion_9clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_12clk_direction_selection:
+	call mouse_motion_12clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_3clk_direction_selection:
+	call mouse_motion_3clk_direction_dispose
+	branch mouse_sensor_sdio_low
+
+
+	
+mouse_p3212_sensor_motion:
+	call mouse_clear_sensor_data
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_p3212_sensor_motion_1
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_p3212_sensor_motion_1:	
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_twspi_reset
+mouse_p3212_sensor_motion_2:
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	call mouse_read_sensor_common
+	call mouse_read_3212sensor_xy_high
+	store 1,mem_mouse_xy_h
+	rshift4 pdata,pdata
+	call mouse_data_extsign_bit3
+	store 1,mem_mouse_x+1
+	fetch 1,mem_mouse_xy_h
+	and pdata,0x0f,pdata
+	call mouse_data_extsign_bit3
+	store 1,mem_mouse_y+1
+	fetch 1,mem_config_sensor_angle
+	beq MOUSE_6CLK_ANGLE,mouse_motion_6clk_direction_dispose
+	beq MOUSE_9CLK_ANGLE,mouse_motion_9clk_direction_dispose
+	beq MOUSE_12CLK_ANGLE,mouse_motion_12clk_direction_dispose
+	beq MOUSE_3CLK_ANGLE,mouse_motion_3clk_direction_dispose
+	rtn
+
+mouse_read_3212sensor_xy_high:
+	setarg 0x12
+	branch twspi_read
+
+mouse_pka8g2_sensor_motion:
+	call mouse_clear_sensor_data
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_pka8g2_sensor_motion_1
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_pka8g2_sensor_motion_1:
+	branch mouse_p3212_sensor_motion_2
+
+
+mouse_p8009_sensor_motion:
+	call mouse_clear_sensor_data
+	disable user
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	setarg PAN_REG_OPRATION_STATE
+	call twspi_read
+	branch mouse_p32xx_sensor_motion_1+3,blank
+	setarg 0
+	store 6,mem_mouse_x
+	rtn
+
+mouse_motion_6clk_direction_dispose:
+	fetch 2,mem_mouse_x
+	sub pdata,0,pdata
+	store 2,mem_mouse_x
+	branch enable_user
+mouse_motion_12clk_direction_dispose:
+	fetch 2,mem_mouse_y
+	sub pdata,0,pdata
+	store 2,mem_mouse_y
+	branch enable_user
+mouse_motion_9clk_direction_dispose:
+	fetch 2,mem_mouse_y
+	sub pdata,0,pdata
+	store 2,mem_mouse_y
+	fetch 2,mem_mouse_x
+	sub pdata,0,pdata
+	store 2,mem_mouse_x
+	call mouse_sensor_data_swap_places
+	branch enable_user
+mouse_motion_3clk_direction_dispose:
+	call mouse_sensor_data_swap_places
+	branch enable_user
+
+mouse_sensor_data_swap_places:
+	fetch 2, mem_mouse_y
+	fetcht 2,mem_mouse_x
+	store 2,mem_mouse_x
+	storet 2,mem_mouse_y
+	rtn
+
+	
+mouse_clear_sensor_data:
+	fetch 1,mem_mouse_move_flag
+	call mouse_read_sensor_common,blank
+	jam 1,mem_mouse_move_flag
+	rtn
+
+mouse_clear_sensor_data_by_reset:
+	jam 1,mem_mouse_clear_sensor_data_flag
+	call le_set_config_more_data
+mouse_init_sensor_reset:
+	branch mouse_init_sunt
+
+mouse_data_xy_release:
+	fetch 1,mem_sensor_motion_gpio
+	rtnne GPIO_DISABLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtnne 1
+	setarg 0
+	store 1,mem_mouse_long_mult_flag
+	store 4,mem_mouse_x
+	branch mouse_init_sensor_reset
+
+mouse_data_extsign:
+	rtnbit0 7
+	arg 0xff00,temp
+	ior temp,pdata
+	rtn
+
+mouse_data_extsign_bit3:
+	rtnbit0 3
+	arg 0xf0,temp
+	ior temp,pdata
+	rtn
+
+mouse_read_sensor_common:
+	arg PAN_REG_DELTA_X,pdata
+	call twspi_read
+	store 2,mem_mouse_x
+	arg PAN_REG_DELTA_Y,pdata
+	call twspi_read
+	store 2,mem_mouse_y
+	rtn
+
+	/* sdio high will cost extra 9mA */
+mouse_sensor_sdio_low:
+	fetcht 1,mem_mouse_sensor_sdio_gpio
+	call gpio_get_bit
+	rtn true
+	setarg 0x0a
+	call twspi_read
+	nop 1000
+	branch mouse_sensor_sdio_low
+
+mouse_set_sdio_high:		// make sdio high to make 100uA less
+	setarg 0x8100
+	branch twspi_write
+	
+/****************************sensor*************************/
+
+/*******************mouse fast connect******************/
+mouse_bluetooth_fast_conn_init:
+	jam 0xff,mem_mouse_bluetooth_fast_conn_flag
+mouse_ble_fast_conn_init:	
+	jam 0x34,mem_xrecord_mode
+	setarg 0x0f0f0f
+	store 3,mem_le_lap
+	store 3,mem_le_lap+3
+	branch mouse_start_reconnect
+
+mouse_buletooth_fast_conn_end:
+	bpatch patch10_4,mem_patch10
+	call mouse_select_reconn_device
+	call mouse_bluetooth_fast_conn_disable
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,mouse_device1_check_auto_discover
+	beq MODE_BT_DEVICE2,mouse_device2_check_auto_discover
+	rtn
+mouse_device1_check_auto_discover:
+	fetch 6,mem_device1_addr
+	branch mouse_device_check_auto_discover
+mouse_device2_check_auto_discover:
+	fetch 6,mem_device2_addr
+mouse_device_check_auto_discover:	
+	fetcht 6,mem_mouse_compare_addr
+	isub temp,null
+	branch mouse_start_discovery ,zero
+	branch mouse_start_reconnect_device
+
+mouse_bluetooth_fast_conn_disable:
+	jam 0x5a,mem_mouse_bluetooth_fast_conn_flag
+	rtn	
+/*******************mouse fast connect******************/
+
+mouse_stop_bluetooth_mode:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	branch mouse_stop_discovery
+mouse_disconnect:
+	setarg 0
+	store 2,mem_mouse_no_data_timer
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	rtn
+	
+mouse_check_125Hz:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_125Hz
+mouse_bluetooth_125Hz:
+	nbranch mouse_bluetooth_125hz_clear,user
+	fetch 1,mem_bluetooth_125hz_cnt
+	increase 1,pdata
+	and_into 0x0f,pdata
+	store 1,mem_bluetooth_125hz_cnt
+	nrtn blank
+mouse_bluetooth_125hz_clear:
+	jam 0,mem_bluetooth_125hz_cnt
+	branch disable_user
+
+mouse_current_mult_update:
+	fetch 1,mem_sensor_motion_gpio
+	rtnne GPIO_DISABLE
+	jam 0,mem_lpm_mult
+	jam 30,mem_mouse_current_mult_timer
+	rtn
+
+
+mouse_priority_bb_event:	
+	bpatch patch10_5,mem_patch10
+	copy regc,pdata
+	beq BT_EVT_LE_CONNECTED,mouse_le_bb_event_connected
+	beq BT_EVT_LE_DISCONNECTED,mouse_le_bb_disconnected
+	beq BT_EVT_BUTTON_LONG_PRESSED,mouse_bb_event_discovery_btn
+	beq BT_EVT_LE_PAIRING_SUCCESS,mouse_le_pairing_success
+	beq BT_EVT_LE_ENC_INFO,mouse_le_enc_info
+	beq BT_EVT_LE_START_ENC,mouse_le_ll_start_encryt
+	beq BT_EVT_LE_PAIRING_COMPLETE,app_ble_store_reconn_info
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,mouse_le_conn_param_update_rsp_recieved
+	beq BT_EVT_24G_PAIRING_COMPLETE,mouse_24g_pairing_complete
+	beq BT_EVT_24G_ATTEMPT_FAIL,mouse_24g_attempt_fail
+	beq BT_EVT_24G_ATTEMPT_SUCCESS,mouse_24g_attempt_success
+	beq BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED,mouse_le_parse_conn_param_accepted
+	rtn
+
+/***************************le*************************/
+mouse_le_bb_event_connected:
+	call mouse_device_poweron_led_config
+	jam 0,mem_mouse_long_mult_flag
+	call mouse_init_sensor_reset
+	jam 1,mem_mouse_le_bb_connected_flag
+	call mouse_24g_first_store_reconn_info
+	fetch 1,mem_mouse_le_reconnect_flag
+	nbranch mouse_le_bb_event_connected_next,blank
+	jam 0x14,mem_mouse_send_secutiry_request_timer
+mouse_le_bb_event_connected_next:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	set0 APP_DISC_BY_BUTTON ,pdata
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	jam 0,mem_mouse_direct_timer
+	fetch 2,mem_le_battery_level_updata_timer_init
+	store 2,mem_le_battery_level_updata_timer
+	call mouse_no_data_timer_init
+	branch mouse_stop_discovery
+
+mouse_le_bb_disconnected:
+	setarg 0
+	store 2,mem_le_battery_level_updata_timer
+	jam 0,mem_mouse_le_bb_connected_flag
+	arg LE_INTERVAL_7_5MS,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_BT_125Hz,mouse_le_bb_disconnected_next
+	arg LE_INTERVAL_8_75MS,temp
+mouse_le_bb_disconnected_next:	
+	storet 2,mem_le_interval_min
+	storet 2,mem_le_interval_min+2
+	jam LE_LPM_ENABLE,mem_mouse_le_conn_param_reject
+	jam 0,mem_mouse_clear_sensor_data_flag
+	call le_clr_config_more_data
+	branch mouse_bb_disconnected
+
+mouse_le_pairing_success:
+	arg LL_PAIRING_SUCCESS_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_enc_info:
+mouse_updata_le_param:
+	jam BT_CMD_LE_UPDATE_CONN,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+mouse_le_ll_start_encryt:
+	fetch 1,mem_mouse_le_reconnect_flag
+	beq 1,mouse_le_ll_reconn_start_encryt
+	branch mouse_le_ll_enable_start_enc_flag
+mouse_le_ll_reconn_start_encryt:
+	call mouse_updata_le_param
+	jam 20,mem_le_start_encrypt_timer
+mouse_le_ll_enable_start_enc_flag:
+	arg LL_START_ENC_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_enable_connect_flag:
+	fetch 1,mem_le_connect_status_flag
+	qset1 pdata
+	store 1,mem_le_connect_status_flag
+	rtn
+
+mouse_le_conn_param_update_rsp_recieved:
+	fetch 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	rtneq BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+	fetch 1,mem_le_tsniff
+	rshift2 pdata,pdata
+	sub pdata,LE_INTERVAL_15MS,null
+	rtn positive
+	setarg LE_INTERVAL_11_25MS
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+	call mouse_updata_le_param
+mouse_le_conn_param_lpm_disable:
+	jam LE_LPM_DISABLE,mem_mouse_le_conn_param_reject
+	rtn
+
+mouse_le_bb_event_connect_complete:
+	fetch 1,mem_mouse_le_reconnect_flag
+	nrtn blank
+	fetch 1,mem_le_att_handle
+	sub pdata,34,pdata
+	nrtn zero
+	jam 0,mem_le_start_encrypt_timer
+mouse_le_write_enable:	
+	arg WRITE_REQ_ENABLE_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_parse_conn_param_accepted:
+	fetch 1,mem_le_new_conninterval
+	sub pdata,LE_INTERVAL_15MS,null
+	nbranch mouse_le_conn_param_lpm_disable,positive
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+	fetch 1,mem_le_new_connslavelatency
+	branch mouse_le_lpm_mult_reinit,blank
+	fetcht 1,mem_lpm_mult_init
+	isub temp,null
+	branch mouse_le_lpm_mult_reinit,positive
+	fetch 1,mem_le_new_connslavelatency
+	store 1,mem_lpm_mult
+	branch mouse_le_conn_param_lpm_enable
+mouse_le_lpm_mult_reinit:
+	fetch 1,mem_lpm_mult_init
+	store 1,mem_lpm_mult
+mouse_le_conn_param_lpm_enable:
+	jam LE_LPM_ENABLE,mem_mouse_le_conn_param_reject
+	rtn
+	
+/*
+mouse_le_disable_connect_flag:
+	fetch 1,mem_le_connect_status_flag
+	qset0 pdata
+	store 1,mem_le_connect_status_flag
+	rtn
+*/
+mouse_le_clean_connect_flag:
+	jam 0,mem_le_connect_status_flag
+	rtn
+
+/*
+mouse_le_reconn_write_enable_timer_reinit:
+	fetch 1,mem_mouse_le_reconnect_flag
+	rtn blank
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtneq 0x03
+	jam 2,mem_le_start_encrypt_timer
+	rtn
+*/
+mouse_le:
+	bpatch patch10_6,mem_patch10
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_mouse_bluetooth_fast_conn_flag
+	beq 0xff,mouse_le_next
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtnne 0x03
+mouse_le_next:	
+	fetch 1,mem_mouse_clear_sensor_data_flag
+	call mouse_clear_sensor_data_by_reset,blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_24G_PAIRING_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_SELECT_DEVICE_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,mouse_le_send_empty_packet
+	call mouse_motion
+	call mouse_check_125Hz
+	nrtn user
+	call mouse_current_mult_update
+	call mouse_data_xy_release
+	call mouse_wheel_trigger
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,mouse_le_send_mouse_data
+	fetch 1,mem_customer_key
+	beq 1,mouse_le_send_keyboard_package_data		
+mouse_le_send_mouse_data:
+	branch mouse_fill_mouse_data_le
+
+
+mouse_le_send_keyboard_package_data:
+	fetch 1,mem_customer_data_trigger
+	branch mouse_le_release_keyboard_data,blank
+	fetch 8,mem_customer_key_press+1
+mouse_fill_keyboard_package_data_le:
+	store 8,mem_pdatatemp
+	fetch 1,mem_customer_key_press
+	beq KB_MULTIKEY_REPORT_ID,mouse_fill_multimedia_key_data_le
+	beq KB_SYSTEM_CONCTRL_REPORT_ID,mouse_fill_systemctrl_key_data_le
+	jam 8,mem_le_data_len
+	fetcht 2,mem_le_keyboard_handle
+mouse_fill_data_le:
+	fetch 1,mem_le_data_len
+	copy pdata,rega
+	call le_att_malloc_tx_notify
+	fetcht 1,mem_le_data_len
+	copy temp,loopcnt
+	arg mem_pdatatemp,contr
+	branch memcpy
+	
+mouse_le_release_keyboard_data:
+	fetch 8,mem_customer_key_release+1
+	branch mouse_fill_keyboard_package_data_le
+
+mouse_fill_multimedia_key_data_le:
+	jam 3,mem_le_data_len
+	fetcht 2,mem_le_multimedia_handle
+	branch mouse_fill_data_le
+
+mouse_fill_systemctrl_key_data_le:
+	jam 2,mem_le_data_len
+	fetcht 2,mem_le_systemctrl_handle
+	branch mouse_fill_data_le
+
+mouse_fill_battery_level_le:
+	arg 1,rega
+	fetcht 2,mem_le_battery_level_handle
+	call le_att_malloc_tx_notify
+	fetch 1,mem_le_battery_level_percentage
+	istore 1,contw
+	rtn
+
+mouse_le_send_empty_packet:
+	setarg 0
+	store 7,mem_mouse_key
+mouse_fill_mouse_data_le:
+	jam 7,mem_le_data_len
+	fetch 7,mem_mouse_key
+	store 7,mem_pdatatemp
+	fetcht 2,mem_le_notify_handle
+	branch mouse_fill_data_le
+
+mouse_check_51cmd_adv:
+	jam 0,mem_mouse_le_reconnect_flag
+	fetch 3,mem_le_adv_ind
+	store 3,mem_le_adv_data+4
+	call mouse_le_check_adv_flag
+	setarg ADV_FLAG_BREDR_NOT_SUPPORTED |ADV_FLAG_LIMITED_DISCOVERABLE
+	istore 1,contr
+	arg mem_le_adv_swift_pair,contr
+	call mouse_le_adv_data_update
+	branch check_51cmd_adv
+
+mouse_le_check_adv_flag:
+	arg mem_le_adv_data,rega
+mouse_le_check_adv_flag_loop:
+	ifetch 1,rega	//length
+	rtn blank
+	iadd contr,rega
+	ifetch 1,contr	//type
+	rtneq 0x01
+	branch mouse_le_check_adv_flag_loop
+	
+mouse_le_adv_data_update:
+	arg mem_le_adv_data+11,contw
+	arg 19,loopcnt
+	call memcpy
+	branch le_modified_name_adv
+	
+/***************************le*************************/
+
+
+
+mouse_bb_disconnected:
+	call mouse_bb_discon_clear_stack
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BLE,mouse4_0_event_bb_disconn
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch mouse_start_discovery
+	
+mouse_bb_discon_clear_stack:
+	setarg 0
+	store 8,mem_wheel_tb_old_pinlevel
+	istore 4,contw             //clean wheel statue
+	jam 0,mem_mouse_move_flag
+	jam 0,mem_ltk_exists
+	rtn
+
+mouse4_0_event_bb_disconn:
+	call mouse_le_clean_connect_flag
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch mouse_app_enter_hibernate
+
+
+/********************mouse 100ms timer*****************/
+mouse_bb_event_timer:
+	bpatch patch10_7,mem_patch10
+	//adc
+	call mouse_low_voltage_led_timer
+	call mouse_adc_read
+	//led
+	call mouse_logo_led_on_timer
+	call mouse_led_multi_timer
+	call mouse_dpi_led_blink_delay_timer
+	//24g
+	call g24_pair_timeout_timer
+	call g24_reconn_timeout_timer
+	call mouse_24g_long_sleep_param_update_timer
+	//poll
+	call mouse_dpi_key_check_long_press
+	call mouse_bt_discovery_check
+	call mouse_commbination_key_process
+	call mouse_check_discovery_timeout_timer
+	//ble
+	call mouse_check_direct_timeout_timer
+	call mouse_le_enable_att_list_timer
+	call mouse_le_battery_updata_timer
+	call mouse_le_send_smp_security_request_timer
+	//bt
+	call mouse_check_reconnect_delay_long_sleep		//delete 3.0,reconnect fail
+	call mouse_current_mult_update_timer
+	call mouse_wheel_trigger_timer
+	call mouse_store_information_delay_timer
+	branch mouse_check_no_data_timeout_timer
+
+mouse_bt_discovery_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY,mouse_bt_discovery_by_pb_button
+	rtn
+
+mouse_bt_discovery_by_pb_button:
+	fetch 1,mem_select_device_button_statue
+	rtnne PB_BUTTON_STATE_DOWN
+	arg mem_bt_discovery_count,regc
+	arg mouse_long_button_bt_discovery,regb
+	branch timer_single_step
+		
+mouse_long_button_bt_discovery:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_enable_function_flag
+	call app_evt_button_long_pressed
+	branch mouse_bb_event_discovery_btn
+		
+mouse_commbination_key_process:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_commbination_key_process
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+	fetcht 1,mem_mouse_commbination_key_bt
+	branch mouse_commbination_key_start
+
+mouse_24g_commbination_key_process:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+	fetcht 1,mem_mouse_commbination_key_24g
+mouse_commbination_key_start:
+	storet 1,mem_mouse_commbination_key
+	call mouse_check_key_gpio
+	and pdata,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key
+	isub temp,null
+	branch mouse_commbination_key_down,zero
+mouse_commbination_key_up:
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_combination_ui_button_count	//combination key timer init 
+	fetch 1,mem_commbination_key_statue
+	rtneq COMMBINATION_KEY_STATE_UP
+	jam COMMBINATION_KEY_STATE_UP,mem_commbination_key_statue	
+	rtn
+		
+mouse_commbination_key_down:
+	call mouse_combination_ui_timer
+	fetch 1,mem_commbination_key_statue
+	rtneq COMMBINATION_KEY_STATE_DOWN
+	jam COMMBINATION_KEY_STATE_DOWN,mem_commbination_key_statue
+	rtn
+
+mouse_combination_ui_timer:
+	arg mouse_24g_start_pair_mode,regb
+	arg mem_combination_ui_button_count,regc
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,timer_single_step
+	arg mouse_long_button_bt_discovery,regb
+	call timer_single_step
+	fetch 1,mem_combination_ui_button_count
+	beq 1,mouse_bt_discovery_button_down_enable	// ble release key press
+	rtn
+
+mouse_check_discovery_timeout_timer:	
+	arg mem_mouse_discovery_timer,regc
+	arg mouse_check_discovery_timeout,regb
+	branch timer_single_step_2B
+
+mouse_check_discovery_timeout:
+	call mouse_stop_discovery
+	branch mouse_app_enter_hibernate
+
+mouse_check_direct_timeout_timer:	
+	arg mem_mouse_direct_timer,regc
+	arg mouse_check_direct_timeout,regb
+	call timer_single_step
+	fetch 1,mem_mouse_direct_timer
+	beq 1,app_ble_stop_direct_adv
+	rtn
+
+mouse_check_direct_timeout:
+	fetch 1,mem_mouse_bluetooth_fast_conn_flag
+	beq 0xff,mouse_buletooth_fast_conn_end
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY,mouse_start_discovery
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_first_bb_event_reconn_timeout
+	branch mouse_app_enter_hibernate
+	
+mouse_le_enable_att_list_timer:
+	arg mem_le_start_encrypt_timer,regc
+	arg mouse_le_write_enable,regb
+	branch timer_single_step
+
+mouse_le_send_smp_security_request_timer:
+	fetch 1,mem_mouse_le_bb_connected_flag
+	rtn blank
+	arg mem_mouse_send_secutiry_request_timer,regc
+	arg mouse_le_pairing_sm_start_check,regb
+	branch timer_single_step
+mouse_le_pairing_sm_start_check:
+	fetch 1,mem_mouse_le_reconnect_flag
+	nrtn blank
+	fetch 1,mem_le_pairing_state
+	rtnne FLAG_LE_PAIRING_NULL
+	branch le_pairing_sm_start
+
+mouse_le_battery_updata_timer:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+	arg mem_le_battery_level_updata_timer,regc
+	arg mouse_le_battery_level_updata,regb
+	branch timer_single_step
+
+mouse_le_battery_level_updata:
+	fetch 2,mem_le_battery_level_updata_timer_init
+	store 2,mem_le_battery_level_updata_timer
+	branch mouse_fill_battery_level_le
+	
+mouse_le_enable_att_list:	
+	fetch 1,mem_le_connect_status_flag
+	rtnbit1 LL_PAIRING_SUCCESS_FLAG
+	call mouse_updata_le_param
+	arg WRITE_REQ_ENABLE_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_check_reconnect_delay_long_sleep:
+	arg mem_mouse_bluetooth_reconnect_timeout,regc
+	arg mouse_app_enter_hibernate,regb
+	branch timer_single_step
+
+mouse_current_mult_update_timer:
+	arg mem_mouse_current_mult_timer,regc
+	arg mouse_current_mult_reinit,regb
+	branch timer_single_step
+mouse_current_mult_reinit:
+	fetch 1,mem_lpm_mult_init
+	store 1,mem_lpm_mult
+	jam 1,mem_mouse_long_mult_flag
+	rtn
+
+
+mouse_check_no_data_timeout_timer:	
+	arg mem_mouse_no_data_timer,regc
+	arg mouse_check_no_data_timeout,regb
+	branch timer_single_step_2B
+
+mouse_check_no_data_timeout:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_hibernate_set
+	branch mouse_disconnect
+	
+mouse_no_data_timer_init:
+	fetch 2,mem_mouse_no_data_timeout
+	store 2,mem_mouse_no_data_timer
+	rtn
+
+mouse_store_information_delay_timer:
+	arg mem_store_information_delay_timer,regc
+	arg mouse_store_device_info_check,regb
+	branch timer_single_step
+
+mouse_store_device_info_check:
+	call mouse_store_device_info
+	fetch 1,mem_mouse_need_soft_reset
+	nbranch mouse_soft_reset,blank
+	rtn
+
+mouse_bb_event_discovery_btn:
+	isolate1 mark_24g,mark
+	call mouse_24g_stop,true
+	call mouse_disconnect
+	call mouse_le_clean_connect_flag
+	branch mouse_start_discovery
+	
+mouse_start_discovery:
+	bpatch patch11_0,mem_patch11
+	call mouse_device_discovery_led_config
+	fetch 2,mem_ui_state_map
+	isolate1 UI_STATE_BLE_ADV,pdata
+	call mouse_stop_le_adv,true		//reconnect adv
+	call mouse_bluetooth_fast_conn_disable
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_ADV,mouse_start_discovery_norandom
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE,mouse_start_discovery_norandom
+	fetcht 2,mem_random_addr_increase_count
+	increase 1,temp
+	storet 2,mem_random_addr_increase_count
+	storet 2,mem_le_lap+1
+	random pdata					//random ble addr
+	store 1,mem_le_lap
+mouse_start_discovery_norandom:
+	fetch 3,mem_mouse_le_lap_temp
+	store 3,mem_le_lap+3
+	call app_lpm_mult_disable
+	fetch 2,mem_mouse_discovery_timeout
+	store 2,mem_mouse_discovery_timer
+	setarg 0
+	store 2,mem_mouse_no_data_timer
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_mouse_direct_timer
+	store 1,mem_mouse_bluetooth_reconnect_timeout
+	store 1,mem_mouse_clear_sensor_data_flag
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_enable_function_flag
+	call mouse_bt_discovery_button_down_disable
+	branch mouse_check_51cmd_adv
+
+mouse_stop_discovery:
+	bpatch patch11_1,mem_patch11
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_disable_function_flag
+	jam 0,mem_mouse_bluetooth_reconnect_timeout
+	branch mouse_stop_le_adv
+mouse_stop_le_adv:
+	setarg 0
+	store 1,mem_mouse_direct_timer
+	store 2,mem_mouse_discovery_timer
+	branch check_51cmd_stop_adv
+
+mouse_store_remote_bdaddr:
+	bpatch patch11_2,mem_patch11
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_STORE_EEPROM_FLAG
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_disable_function_flag
+	call mouse_check_device_addr
+mouse_unplug_clean_bdaddr:
+	call mouse_before_store_reconn_info
+	branch mouse_store_device_info_delay
+
+mouse_check_device_addr:
+	fetch 1,mem_record_bt_mode
+	beq REC_4_MODE,mouse_check_le_device_addr
+	rtn
+mouse_check_le_device_addr:
+	store 1,mem_device_addr_temp
+	fetch 6,mem_le_plap
+mouse_check_bt_device_addr_common:
+	store 6,mem_device_addr_temp+1
+	fetch 7,mem_device_addr_temp
+	arg mem_device1_type,contr
+	arg 3,loopcnt
+mouse_check_device_addr_end:
+	ifetcht 7,contr
+	isub temp,null
+	branch mouse_clean_addr,zero
+	increase 22,contr
+	loop mouse_check_device_addr_end
+	rtn
+mouse_before_store_reconn_info:
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,29,pdata
+	iadd rega,rega
+	fetch 1,mem_record_bt_mode
+	istore 1,rega
+	beq REC_4_MODE,mouse_store_le_device
+	rtn
+	
+mouse_store_le_device:
+	fetch 6,mem_le_plap
+	istore 6,contw
+	arg mem_le_ltk,contr
+	call memcpy16
+	fetch 6,mem_le_lap
+	istore 6,contw
+	rtn
+
+mouse_clean_addr:
+	increase -6,contr
+	copy contr,contw
+	fetcht 6,mem_device_addr_temp+1
+	increase 3,temp
+	istoret 6,contw
+	rtn
+	
+mouse_select_reconn_device:
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	increase -1,pdata
+	mul32 pdata,29,pdata
+	iadd rega,rega
+	ifetch 1,rega
+	store 1,mem_xrecord_mode
+	beq REC_4_MODE,mouse_load_le_device
+	rtn
+
+mouse_load_le_device:
+	ifetch 6,contr
+mouse_load_le_device_end:
+	store 6,mem_hci_plap
+	arg mem_le_ltk,contw
+	call memcpy16
+	ifetch 6,contr
+	store 6,mem_le_lap
+	rtn
+
+mouse_app_initflag_check:
+	bpatch patch11_3,mem_patch11
+	fetch 2,mem_store_flag
+	arg EEPROM_INIT_FLAG,temp
+	isub temp,null
+	branch mouse_load_device_info,zero
+mouse_app_initflag_check_next:
+	storet 2,mem_store_flag
+	call mouse_ble_init_address
+	fetch 1,mem_device_flag_temp
+	store 1,mem_device_flag
+	fetch 4,mem_24g_fast_conn_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+mouse_load_default_dpi:
+	fetch 1,mem_config_sensor_dpi
+	store 1,mem_mouse_dpi
+	rtn
+
+mouse_load_device_info:
+	call mouse_otp_load_dpi
+//	call mouse_select_reconn_device
+	fetch 4,mem_mouse_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	rtn	
+
+mouse_otp_load_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+	fetch 2,mem_otp_offset_dpi
+	copy pdata,regb
+	call mouse_read_otp_dpi_common			
+	fetch 1,mem_mouse_dpi_temp
+	call mouse_load_default_dpi,blank
+	rtn
+	
+mouse_ble_init_address:
+	fetch 6,mem_le_lap
+	store 6,mem_device1_locall_addr
+	add pdata,0x0100,pdata
+	store 6,mem_device2_locall_addr
+	add pdata,0x0100,pdata
+	store 6,mem_device3_locall_addr
+	rtn
+
+/******************************store info start**************************************/
+	
+mouse_store_device_info_delay:	
+	fetch 1,mem_store_information_delay_timer_init
+	store 1,mem_store_information_delay_timer
+	rtn
+
+mouse_store_device_info:
+	bpatch patch11_4,mem_patch11
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eeprom_device_info
+	bbit1 MOUSE_ENABLE_FLASH,mouse_store_flash_device_info
+	bbit1 MOUSE_ENABLE_OTP,mouse_store_otp_device_info
+	rtn
+
+mouse_store_dpi_info_check:
+	bpatch patch11_5,mem_patch11
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eerpom_dpi
+	bbit1 MOUSE_ENABLE_OTP,mouse_store_otp_dpi
+	rtn
+
+
+/******************eeprom data store****************/
+mouse_store_eeprom_device_info:
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg MOUSE_INFO_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+
+mouse_store_eerpom_dpi:
+	arg 1,temp
+	arg mem_mouse_dpi,rega
+	arg MOUSE_DPI_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+	
+
+/******************flash data store****************/
+mouse_store_flash_device_info:
+	call spid_init_flash
+	call mouse_spid_flash_release_form_powerdown
+	call mouse_flash_erase_sector
+
+	call mouse_information_flash_parameters
+	call mouse_spid_write_flash
+	call mouse_spid_flash_powerdown
+	branch mouse_sensor_spi_init
+
+
+
+/******************otp data store****************/
+mouse_store_otp_device_info:
+	call mouse_write_otp_device_flag
+	call mouse_write_otp_device_info
+	branch mouse_write_otp_le_addr_increase_count_info
+
+
+/**********otp device flag store********/
+mouse_write_otp_device_flag:
+	fetchr regb,2,mem_otp_offset_device_flag
+	copy regb,regc
+mouse_write_otp_device_flag_loop:
+	call mouse_read_otp_device_flag_common
+	fetch 1,mem_device_flag_temp
+	branch mouse_device_flag_store,blank
+	store 1,mem_device_flag_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_device_flag_end
+	isub regc,null
+	nrtn positive
+	copy regc,regb
+	branch mouse_write_otp_device_flag_loop
+
+mouse_device_flag_store:
+	fetch 1,mem_device_flag_last
+	and pdata,0xf0,pdata
+	branch mouse_device_flag_store_check,blank
+	fetch 1,mem_device_flag
+	store 1,mem_device_flag_value
+mouse_devoce_flag_store_end:	
+	arg 1,loopcnt
+	copy regc,regb
+	arg mem_device_flag_value,rega
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_device_flag_store_check:
+	fetch 1,mem_device_flag_last
+	fetcht 1,mem_device_flag
+	isub temp,null
+	rtn zero
+	lshift4 temp,temp
+	iadd temp,pdata
+	store 1,mem_device_flag_value
+	
+	copy regc,pdata
+	fetcht 2,mem_otp_offset_device_flag
+	isub temp,null
+	branch mouse_devoce_flag_store_end,zero
+	
+	increase -1,regc
+	branch mouse_devoce_flag_store_end
+
+
+/**********otp addr store********/
+mouse_write_otp_device_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_write_otp_24g_addr
+	beq MODE_BT_DEVICE1,mouse_write_otp_le_device1
+	beq MODE_BT_DEVICE2,mouse_write_otp_le_device2
+	rtn
+
+mouse_write_otp_24g_addr:
+	fetchr regb,2,mem_otp_offset_24g_addr
+	copy regb,regc
+mouse_otp_store_24g_addr_loop:
+	call mouse_read_otp_24g_addr_common
+	fetch 4,mem_mouse_24g_addr_temp
+	branch mouse_24g_addr_store,blank	
+	store 4,mem_mouse_24g_addr_last
+	increase 4,regc
+	fetch 2,mem_otp_offset_24g_addr_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_24g_addr_loop
+
+mouse_24g_addr_store:
+	fetch 4,mem_mouse_24g_addr_last
+	fetcht 4,mem_mouse_24g_addr
+	isub temp,null
+	rtn zero
+	arg 4,loopcnt
+	arg mem_mouse_24g_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_write_otp_le_device1:
+	fetchr regb,2,mem_otp_offset_le_addr1
+	copy regb,regc
+mouse_otp_store_le_addr1_loop:
+	call mouse_read_otp_le_addr1_common
+	fetch 6,mem_mouse_le_addr1_temp
+	branch mouse_le_addr1_store,blank	
+	store 6,mem_mouse_le_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr1_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr1_loop
+
+mouse_le_addr1_store:
+	fetch 6,mem_mouse_le_addr1_last
+	fetcht 6,mem_device1_addr
+	isub temp,null
+	rtn zero
+	arg 6,loopcnt
+	arg mem_device1_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+mouse_write_otp_le_device2:
+	fetchr regb,2,mem_otp_offset_le_addr2
+	copy regb,regc
+mouse_otp_store_le_addr2_loop:
+	call mouse_read_otp_le_addr2_common
+	fetch 6,mem_mouse_le_addr2_temp
+	branch mouse_le_addr2_store,blank	
+	store 6,mem_mouse_le_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr2_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr2_loop
+
+mouse_le_addr2_store:
+	fetch 6,mem_mouse_le_addr2_last
+	fetcht 6,mem_device2_addr
+	isub temp,null
+	rtn zero
+	arg 6,loopcnt
+	arg mem_device2_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+/**************store le addr increase count**********/
+mouse_write_otp_le_addr_increase_count_info:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetchr regb,2,mem_otp_offset_le_addr_increase_count
+	copy regb,regc
+mouse_otp_store_le_addr_increase_count_loop:
+	call mouse_read_otp_le_addr_increase_count_common
+	fetch 2,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_store,blank	
+	store 2,mem_random_addr_increase_count_last
+	increase 2,regc
+	fetch 2,mem_otp_offset_le_addr_increase_count_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr_increase_count_loop
+
+mouse_le_addr_increase_count_store:
+	fetch 2,mem_random_addr_increase_count_last
+	fetcht 2,mem_random_addr_increase_count
+	isub temp,null
+	rtn zero
+	arg 2,loopcnt
+	arg mem_random_addr_increase_count,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+/**********otp dpi store********/
+mouse_store_otp_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+	fetchr regb,2,mem_otp_offset_dpi
+	copy regb,regc
+mouse_otp_store_dpi_loop:
+	call mouse_read_otp_dpi_common
+	fetch 1,mem_mouse_dpi_temp
+	branch mouse_otp_dpi_store,blank
+	store 1,mem_mouse_dpi_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_dpi_end
+	isub regc,null
+	nrtn positive
+	copy regc,regb
+	branch mouse_otp_store_dpi_loop
+
+mouse_otp_dpi_store:
+	fetch 1,mem_mouse_dpi_last
+	and pdata,0xf0,pdata
+	branch mouse_dpi_store_last,blank
+	fetch 1,mem_mouse_dpi
+	store 1,mem_mouse_otp_dpi_value
+mouse_dpi_store_end:	
+	arg 1,loopcnt
+	copy regc,regb
+	arg mem_mouse_otp_dpi_value,rega
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_dpi_store_last:
+	fetch 1,mem_mouse_dpi_last
+	fetcht 1,mem_mouse_dpi
+	isub temp,null
+	rtn zero
+	lshift4 temp,temp
+	iadd temp,pdata
+	store 1,mem_mouse_otp_dpi_value
+	
+	copy regc,pdata
+	fetcht 2,mem_otp_offset_dpi
+	isub temp,null
+	branch mouse_dpi_store_end,zero
+	
+	increase -1,regc
+	branch mouse_dpi_store_end
+	
+/******************************store info end**************************************/
+	
+
+
+/******************************load info start**************************************/
+
+/******************eeprom data load****************/
+mouse_load_eeprom_info_check:
+	call iicd_read_init_pin
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	isolate1 MOUSE_ENABLE_2K_EEPROM,pdata
+	ncall clear_eeprom_size_2k,true
+	call mouse_eeprom_load_recon_info
+	branch mouse_app_initflag_check
+
+mouse_eeprom_load_recon_info:
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg MOUSE_INFO_EEPROM_OFFECT,regb
+	branch iicd_read_eep_data
+
+mouse_load_eeprom_dpi:
+	arg 1,temp
+	arg mem_mouse_dpi,rega
+	arg MOUSE_DPI_EEPROM_OFFECT,regb
+	branch iicd_read_eep_data
+
+
+/******************flash data load****************/
+mouse_load_flash_info_check:
+	call spid_init_flash
+	call mouse_spid_flash_release_form_powerdown
+	call mouse_information_flash_parameters
+	call spid_read_flash
+	call mouse_spid_flash_powerdown
+	call mouse_app_initflag_check
+	branch mouse_sensor_spi_init
+	
+mouse_information_flash_parameters:
+	setarg mem_mouse_information_end
+	arg mem_mouse_information_start,temp
+	isub temp,temp
+	fetch 3,mem_flash_base
+	arg mem_mouse_information_start,rega
+	rtn
+	
+mouse_spid_flash_release_form_powerdown:
+	jam FLASH_COMMAND_RELEASE_FROM_POWERDOWN,mem_temp
+mouse_spid_write_flash_cmd:
+	call delay_nop100
+	call spid_unlock_flash
+	arg mem_write_flash_head_temp,rega
+	fetcht 1,mem_temp
+	call mouse_spid_write_flash_cmd_common
+	branch delay_nop100
+
+mouse_spid_flash_powerdown:
+	jam FLASH_COMMAND_POWERDOWN,mem_temp
+	branch mouse_spid_write_flash_cmd
+
+mouse_spid_write_flash_cmd_common:
+	istoret 1,rega
+	rshift16 pdata,temp
+	istoret 1,contw
+	rshift8 pdata,temp
+	istoret 1,contw
+	istore 1,contw
+	deposit rega
+	store 2,core_spid_txaddr
+	setarg 0
+	store 2,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	branch wait_spid_done
+		
+mouse_flash_erase_sector:
+	fetch 3,mem_flash_base
+	store 3,mem_spi_write_addr
+	branch spid_flash_erase_sector+2
+
+mouse_spid_write_flash:
+	copy pdata,regc
+	copy rega,pdata
+	increase -4,pdata
+	copy pdata,regb
+	ifetch 4,regb
+	store 4,mem_write_flash_head_temp
+	copy regc,pdata
+	call spid_write_flash
+	fetch 4,mem_write_flash_head_temp
+	istore 4,regb
+	rtn
+
+mouse_flash_power_down:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_FLASH
+	call mouse_spid_flash_powerdown
+	call twspi_enable	// 2 wire mode
+	fetcht 1,mem_spi_cs_gpio		//disable flash
+	call gpio_out_inactive
+	fetcht 1,mem_spi_hold_gpio
+	branch mouse_gpio_config_input_pd
+
+
+/******************otp data load****************/
+mouse_load_otp_info_check:
+	call mouse_read_otp_dpi
+	call mouse_read_otp_device_flag
+	call mouse_read_otp_device_info
+	call mouse_read_otp_le_addr_increase_count_info
+mouse_otp_load_app_initflag:
+	arg 2,loopcnt
+	fetch 2,mem_otp_offset_app_initflag			//fetchr regb,2,mem_otp_offset_app_initflag
+	copy pdata,regb
+	arg mem_store_flag,rega
+	call otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	call mouse_app_initflag_check
+mouse_otp_store_app_initflag:
+	arg 2,loopcnt
+	arg mem_store_flag,rega
+	fetchr regb,2,mem_otp_offset_app_initflag
+	branch otp_write
+
+
+/**************load device flag**********/
+mouse_read_otp_device_flag:
+	fetchr regb,2,mem_otp_offset_device_flag
+	copy regb,regc
+mouse_read_otp_device_flag_loop:
+	call mouse_read_otp_device_flag_common
+	fetch 1,mem_device_flag_temp
+	branch mouse_device_flag_load,blank	
+	store 1,mem_device_flag_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_device_flag_end
+	isub regc,null
+	nbranch mouse_device_flag_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_device_flag_loop
+
+mouse_read_otp_device_flag_common:
+	arg 1,loopcnt
+	arg mem_device_flag_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+
+mouse_device_flag_load:
+	fetch 1,mem_device_flag_last
+	copy pdata,temp
+	and pdata,0xf0,pdata
+	branch mouse_device_flag_load_last,blank
+	rshift4 pdata,pdata
+	branch mouse_device_flag_load_end
+
+mouse_device_flag_load_last:
+	copy temp,pdata
+mouse_device_flag_load_end:
+	store 1,mem_device_flag
+	rtn
+
+/****************otp load addr*************/
+mouse_read_otp_device_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_read_otp_24g_addr
+	beq MODE_BT_DEVICE1,mouse_read_otp_le_device1
+	beq MODE_BT_DEVICE2,mouse_read_otp_le_device2
+	rtn
+	
+mouse_read_otp_le_device1:
+	call mouse_read_otp_le_device1_addr
+	branch mouse_read_otp_le_device1_locall_addr
+
+mouse_read_otp_le_device2:
+	call mouse_read_otp_le_device2_addr
+	branch mouse_read_otp_le_device2_locall_addr
+
+/*************************load le addr1**********************************/
+mouse_read_otp_le_device1_addr:
+	fetchr regb,2,mem_otp_offset_le_addr1
+	copy regb,regc
+mouse_read_otp_le_device1_addr_loop:
+	call mouse_read_otp_le_addr1_common	
+	fetch 6,mem_mouse_le_addr1_temp
+	branch mouse_le_addr1_load,blank	
+	store 6,mem_mouse_le_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr1_end
+	isub regc,null
+	nbranch mouse_le_addr1_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device1_addr_loop
+
+mouse_read_otp_le_addr1_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_addr1_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_addr1_load:
+	fetch 6,mem_mouse_le_addr1_last
+	store 6,mem_device1_addr
+	rtn
+
+
+mouse_read_otp_le_device1_locall_addr:
+	fetchr regb,2,mem_otp_offset_le_locall_addr1
+	copy regb,regc
+mouse_read_otp_le_device1_locall_addr_loop:
+	call mouse_read_otp_le_locall_addr1_common	
+	fetch 6,mem_mouse_le_locall_addr1_temp
+	branch mouse_le_locall_addr1_load,blank	
+	store 6,mem_mouse_le_locall_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_locall_addr1_end
+	isub regc,null
+	nbranch mouse_le_locall_addr1_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device1_locall_addr_loop
+
+mouse_read_otp_le_locall_addr1_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_locall_addr1_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_locall_addr1_load:
+	fetch 6,mem_mouse_le_locall_addr1_last
+	store 6,mem_device1_locall_addr
+	rtn
+
+
+/*************************load le addr2**********************************/
+mouse_read_otp_le_device2_addr:
+	fetchr regb,2,mem_otp_offset_le_addr2
+	copy regb,regc
+mouse_read_otp_le_device2_addr_loop:
+	call mouse_read_otp_le_addr2_common	
+	fetch 6,mem_mouse_le_addr2_temp
+	branch mouse_le_addr2_load,blank	
+	store 6,mem_mouse_le_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr2_end
+	isub regc,null
+	nbranch mouse_le_addr2_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device2_addr_loop
+
+mouse_read_otp_le_addr2_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_addr2_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_addr2_load:
+	fetch 6,mem_mouse_le_addr2_last
+	store 6,mem_device2_addr
+	rtn
+
+
+mouse_read_otp_le_device2_locall_addr:
+	fetchr regb,2,mem_otp_offset_le_locall_addr2
+	copy regb,regc
+mouse_read_otp_le_device2_locall_addr_loop:
+	call mouse_read_otp_le_locall_addr2_common	
+	fetch 6,mem_mouse_le_locall_addr2_temp
+	branch mouse_le_locall_addr2_load,blank	
+	store 6,mem_mouse_le_locall_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_locall_addr2_end
+	isub regc,null
+	nbranch mouse_le_locall_addr2_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device2_locall_addr_loop
+
+mouse_read_otp_le_locall_addr2_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_locall_addr2_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_locall_addr2_load:
+	fetch 6,mem_mouse_le_locall_addr2_last
+	store 6,mem_device2_locall_addr
+	rtn
+
+
+/**************load 24g addr**********/
+mouse_read_otp_24g_addr:
+	fetchr regb,2,mem_otp_offset_24g_addr
+	copy regb,regc
+mouse_read_otp_24g_addr_loop:
+	call mouse_read_otp_24g_addr_common
+	fetch 4,mem_mouse_24g_addr_temp
+	branch mouse_24g_addr_load,blank	
+	store 4,mem_mouse_24g_addr_last
+	increase 4,regc
+	fetch 2,mem_otp_offset_24g_addr_end
+	isub regc,null
+	nbranch mouse_24g_addr_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_24g_addr_loop
+
+mouse_read_otp_24g_addr_common:
+	arg 4,loopcnt
+	arg mem_mouse_24g_addr_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	
+mouse_24g_addr_load:
+	fetch 4,mem_mouse_24g_addr_last
+	store 4,mem_mouse_24g_addr
+	rtn
+
+/**************load le addr increase count**********/
+mouse_read_otp_le_addr_increase_count_info:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetchr regb,2,mem_otp_offset_le_addr_increase_count
+	copy regb,regc
+mouse_read_otp_le_addr_increase_count_loop:
+	call mouse_read_otp_le_addr_increase_count_common
+	fetch 2,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_load,blank	
+	store 2,mem_random_addr_increase_count_last
+	increase 2,regc
+	fetch 2,mem_otp_offset_le_addr_increase_count_end
+	isub regc,null
+	nbranch mouse_le_addr_increase_count_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_addr_increase_count_loop
+
+mouse_read_otp_le_addr_increase_count_common:
+	arg 2,loopcnt
+	arg mem_random_addr_increase_count_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	
+mouse_le_addr_increase_count_load:
+	fetch 2,mem_random_addr_increase_count_temp
+	store 2,mem_random_addr_increase_count
+	rtn
+
+/*************load dpi**********/
+mouse_read_otp_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI,mouse_load_default_dpi
+	fetchr regb,2,mem_otp_offset_dpi
+	copy regb,regc
+mouse_read_otp_dpi_loop:
+	call mouse_read_otp_dpi_common	
+	fetch 1,mem_mouse_dpi_temp
+	branch mouse_dpi_load,blank	
+	store 1,mem_mouse_dpi_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_dpi_end
+	isub regc,null
+	nbranch mouse_dpi_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_dpi_loop
+
+mouse_read_otp_dpi_common:
+	arg 1,loopcnt
+	arg mem_mouse_dpi_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+
+mouse_dpi_load:
+	fetch 1,mem_mouse_dpi_last
+	copy pdata,temp
+	and pdata,0xf0,pdata
+	branch mouse_dpi_load_last,blank
+	rshift4 pdata,pdata
+	branch mouse_dpi_load_end
+
+mouse_dpi_load_last:
+	copy temp,pdata
+mouse_dpi_load_end:
+	store 1,mem_mouse_dpi
+	rtn
+
+/******************************load info end**************************************/
+
+
+mouse_idle:
+	bpatch patch11_6,mem_patch11
+	call mouse_low_voltage_led_no_enter_lpm
+	call ui_check_paring_button
+	call mouse_dpi_check
+	call mouse_dpi_another_gpio_check
+	call mouse_select_device_check
+	call mouse_check_select_device_by_switch
+	call mouse_bt_button_check
+	branch mouse_wheel_check
+	
+mouse_select_device_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON,mouse_select_device_by_pb_button
+	bbit1 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY,mouse_select_device_by_pb_button
+	rtn
+
+mouse_select_device_by_pb_button_check_once:
+	jam 0x03,mem_mouse_pbkey_press_status
+mouse_select_device_by_pb_button:	
+	call mouse_select_device_by_pb_button_check
+	branch mouse_select_device_by_pb_button_exit
+	
+mouse_select_device_by_pb_button_check:
+	bpatch patch11_7,mem_patch11
+	fetch 1,mem_config_select_device_button_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	jam MOUSE_PB_KEY,mem_mouse_key_temp
+	fetcht 1,mem_config_select_device_button_gpio
+	call mouse_pb_button_check
+	store 1,mem_mouse_pbkey_press_status
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_pb_button_check_end	
+	branch mouse_matrix_public_gpio_reset
+
+mouse_retransmit_select_device_by_pb_button:
+	call mouse_select_device_by_pb_button_check
+	copy rega,pdata
+	bbit1 MOUSE_PB_KEY,mouse_select_device_button_down+2
+	branch mouse_select_device_button_up
+	
+mouse_3io6key_pb_button_check_end:
+	fetcht 1,mem_config_select_device_button_gpio
+	call mouse_gpio_config_input_pu
+mouse_select_device_by_pb_button_exit:	
+	copy rega,pdata
+	bbit1 MOUSE_PB_KEY,mouse_select_device_button_down
+	branch mouse_select_device_button_up
+
+mouse_pb_button_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND,mouse_pb_button_connect_gnd
+	fetch 1,mem_mouse_pbkey_press_status
+	copy pdata,regc
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_check
+	fetch 1,mem_mouse_ghost_flag
+	nbranch mouse_select_device_by_pb_button_end,blank
+	branch mouse_pb_button_connect_matrix
+
+mouse_select_device_by_pb_button_end:
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue
+	jam 0,mem_mouse_pbkey_press_status
+	rtn
+
+mouse_pb_button_connect_gnd:
+	fetch 1,mem_mouse_pbkey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_pb_button_connect_matrix:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch mouse_pb_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_config_select_device_button_gpio
+	fetch 1,mem_mouse_pbkey_press_status
+	branch mouse_check_key_connect_gnd
+	
+mouse_select_device_button_up:
+	fetch 1,mem_select_device_button_statue
+	rtneq PB_BUTTON_STATE_UP
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+	fetch 1,mem_bt_discovery_count
+	sub pdata,20,null
+	ncall mouse_ready_reconnection_by_button,positive		// press button less than 30-20=1000ms
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_bt_discovery_count
+	rtn
+
+mouse_select_device_button_down:
+	call mouse_select_device_ghost_check
+	rtn user
+	fetch 1,mem_select_device_button_statue
+	rtneq PB_BUTTON_STATE_DOWN
+	jam PB_BUTTON_STATE_DOWN,mem_select_device_button_statue
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY,mouse_long_button_bt_discovery
+	fetch 1,mem_mouse_direct_timer
+	rtn blank
+	fetch 1,mem_mouse_direct_timeout
+	store 1,mem_mouse_direct_timer
+	rtn
+
+mouse_select_device_ghost_check:
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+mouse_ghost_key_value_check:
+	fetch 1,mem_mouse_lkey_press_status
+	rtn blank
+	fetch 1,mem_mouse_rkey_press_status
+	rtn blank
+	branch enable_user
+	
+mouse_check_select_device_by_switch:
+	bpatch patch12_0,mem_patch12
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+mouse_switch_gpio_connect_gnd:
+	fetcht 1,mem_device_switch_gpio
+	call mouse_gpio_config_input_pu
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_check_select_24g_device,true
+mouse_select_btdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	branch mouse_stop_bluetooth_mode
+	
+mouse_check_select_24g_device:	
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+	branch mouse_24g_stop
+
+mouse_ready_reconnection_by_button:
+	bpatch patch12_1,mem_patch12
+	fetch 1,mem_device_number
+	rtneq 1		// 1channel
+	call mouse_select_device_number
+	storet 1,mem_device_flag
+mouse_store_device_number_before_reset:	
+//	jam 0,mem_link_key_exists
+	call mouse_select_device_enable
+	call mouse_stop_bluetooth_mode
+	call app_evt_button_long_pressed
+	call mouse_select_device_disable
+	jam 1,mem_mouse_need_soft_reset
+	branch mouse_store_device_info_delay
+
+mouse_soft_reset:
+	call mouse_select_device_enable
+	branch soft_reset_chip
+
+mouse_select_device_number:
+	fetcht 1,mem_device_flag
+	increase 1,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G,mouse_select_device_number_24g
+	sub temp,2,null
+	ncall mouse_select_device_count_clean_bt,positive
+	rtn
+	
+mouse_select_device_number_24g:	
+	fetch 1,mem_device_number
+	increase -1,pdata
+	isub temp,null
+	ncall mouse_select_device_count_clean_24g,positive
+	rtn
+
+mouse_select_device_count_clean_24g:
+	arg 0,temp
+	rtn
+mouse_select_device_count_clean_bt:
+	arg 1,temp
+	rtn
+
+mouse_store_device_number2eeprom:
+	arg 1,temp
+	arg mem_device_flag,rega
+	arg 0,regb
+	branch iicd_write_protect_eep_data
+		
+mouse_bt_button_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+	branch mouse_select_device_by_pb_button
+	
+mouse_select_device_enable:
+	arg MOUSE_SELECT_DEVICE_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_select_device_disable:
+	arg MOUSE_SELECT_DEVICE_FLAG,queue
+	branch mouse_disable_function_flag
+mouse_bt_cannel_reconn_enable:
+	arg MOUSE_BT_CANNEL_RECONN_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_bt_cannel_reconn_disable:
+	arg MOUSE_BT_CANNEL_RECONN_FLAG,queue
+	branch mouse_disable_function_flag
+mouse_bt_discovery_button_down_enable:
+	arg MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_bt_discovery_button_down_disable:
+	arg MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch mouse_disable_function_flag
+
+mouse_adc_read_enable:
+	arg MOUSE_ENABLE_ADC,queue
+	branch mouse_enable_function_flag
+
+mouse_24g_set_250Hz:
+	arg MOUSE_ENABLE_24G_250Hz,queue
+	branch mouse_enable_function_flag
+
+mouse_24g_search_dongle_enable:
+	arg MOUSE_ENABLE_24G_SEARCH_DONGLE,queue
+	branch mouse_enable_function_flag
+	
+mouse_16M_enable:
+	arg MOUSE_ENABLE_16M,queue
+	branch mouse_enable_function_flag
+	
+mouse_dpi_4level_enable:
+	arg MOUSE_ENABLE_DPI_LEVEL_4,queue
+	branch mouse_enable_function_flag
+
+mouse_enable_function_flag:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	qset1 pdata
+	store MOUSE_FLAG_LEN,mem_mouse_flag
+	rtn
+
+mouse_disable_function_flag:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	qset0 pdata
+	store MOUSE_FLAG_LEN,mem_mouse_flag
+	rtn
+
+mouse_customer_key_enable:
+	setarg 0
+	store 8,mem_customer_key_press
+	store 8,mem_customer_key_release
+	fetch 1,mem_mouse_customer_function	// 01--win+d     02--ctrl+alt+a    03--AC home    04--play
+	beq 2,mouse_customer_key_ctrl_alt_a
+	beq 3,mouse_customer_AC_home
+	beq 4,mouse_customer_key_play
+	setarg 0x070008
+mouse_customer_standrad_key_set:	
+	store 8,mem_customer_key_press+1		// win + d
+	rtn
+
+mouse_customer_key_ctrl_alt_a:
+	setarg 0x040005
+	branch mouse_customer_standrad_key_set
+
+mouse_customer_AC_home:
+	setarg 0x022303
+mouse_customer_media_key_set:	
+	store 8,mem_customer_key_press
+	setarg 0x03
+	store 8,mem_customer_key_release
+	rtn
+	
+mouse_customer_key_play:
+	setarg 0x00cd03
+	branch mouse_customer_media_key_set
+
+	
+mouse_polling_device:
+	bpatch patch12_2,mem_patch12
+	fetch 1,mem_reconn_times
+	increase -1,pdata
+	store 1,mem_reconn_times
+	fetcht 1,mem_device_flag
+	sub temp,1,null
+	ncall mouse_select_device_number,zero
+	storet 1,mem_device_flag
+	call mouse_store_device_number2eeprom
+	call mouse_before_store_reconn_info
+	branch mouse_start_reconnect_device
+
+	
+//notice: need to call p_mouse_drawing_optima_init when waked from mult
+mouse_drawing_optima:
+	bpatch patch12_3,mem_patch12
+	fetch 1,mem_config_sensor_type
+	rtneq P3212
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SMOOTHER
+	fetch 4,mem_mouse_x
+	rtn blank
+	call mouse_data_abs_check
+	setarg 0x03	//asm_flag enable condition
+	call mouse_pdata_greater_than_check
+	call mouse_disable_asm,blank
+	ncall mouse_enable_asm,blank
+	setarg 0x02	//asm_flag disable condition
+	call mouse_data_less_than_check
+	call mouse_disable_asm,blank
+	fetch 1,mem_mouse_asm_flag
+	beq 1,mouse_drawing_optima_modify
+mouse_drawing_optima_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SMOOTHER
+	arg 5,loopcnt
+	arg mem_mouse_asm_flag,contw
+	branch clear_mem
+
+mouse_drawing_optima_modify:
+	call mouse_drawing_optima_xy_offset_modify
+	fetch 2,mem_mouse_x_pre
+	store 2,mem_data_pre
+	fetch 2,mem_mouse_x
+	store 2,mem_data_current
+	call mouse_drawing_optima_data_x
+	fetch 2,mem_data_pre
+	store 2,mem_mouse_x_pre
+	fetch 2,mem_data_current
+	store 2,mem_mouse_x
+
+	fetch 2,mem_mouse_y_pre
+	store 2,mem_data_pre
+	fetch 2,mem_mouse_y
+	store 2,mem_data_current
+	call mouse_drawing_optima_data_y
+	fetch 2,mem_data_pre
+	store 2,mem_mouse_y_pre
+	fetch 2,mem_data_current
+	store 2,mem_mouse_y
+	rtn
+
+mouse_drawing_optima_xy_offset_modify:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_XY_OFFSET
+	bpatch patch12_4,mem_patch12
+	fetch 2,mem_mouse_x_pre
+	store 2,mem_data_value
+	call mouse_pre_xy_data_judge
+	store 2,mem_mouse_x_pre
+	fetch 2,mem_mouse_x
+	store 2,mem_data_value
+	call mouse_current_xy_data_judge
+	store 2,mem_mouse_x
+	fetch 2,mem_mouse_y_pre
+	store 2,mem_data_value
+	call mouse_pre_xy_data_judge
+	store 2,mem_mouse_y_pre
+	fetch 2,mem_mouse_y
+	store 2,mem_data_value
+	call mouse_current_xy_data_judge
+	store 2,mem_mouse_y
+	rtn
+
+mouse_pre_xy_data_judge:	
+	fetch 1,mem_data_value+1
+	branch mouse_pre_xy_pdata_offset,blank
+	branch mouse_pre_xy_ndata_offset
+
+mouse_pre_xy_pdata_offset:
+	fetch 1,mem_data_value
+	call mouse_pre_xy_get_0_4_times
+	store 1,mem_data_value
+mouse_xy_data_offset_new:
+	fetch 2,mem_data_value
+	rtn
+mouse_pre_xy_ndata_offset:
+	fetch 1,mem_data_value
+	call mouse_pdata_invert
+	call mouse_pre_xy_get_0_4_times
+	call disable_blank,blank
+	call mouse_pdata_get_new_value
+	branch mouse_xy_data_offset_new
+	
+mouse_current_xy_data_judge:
+	fetch 1,mem_data_value+1
+	branch mouse_current_xy_pdata_offset,blank
+	branch mouse_current_xy_ndata_offset
+mouse_current_xy_pdata_offset:
+	fetch 1,mem_data_value
+	call mouse_current_xy_get_0_6_times
+	store 1,mem_data_value
+	branch mouse_xy_data_offset_new
+mouse_current_xy_ndata_offset:	
+	fetch 1,mem_data_value
+	call mouse_pdata_invert
+	call mouse_current_xy_get_0_6_times
+	call disable_blank,blank
+	call mouse_pdata_get_new_value
+	branch mouse_xy_data_offset_new
+	
+mouse_pre_xy_get_0_4_times:
+	mul32 pdata,4,pdata
+	div pdata,5
+	call wait_div_end
+	quotient pdata
+	rtn
+mouse_current_xy_get_0_6_times:	//0.6 times
+	mul32 pdata,12,pdata
+	div pdata,10
+	call wait_div_end
+	quotient pdata
+	rtn	
+	
+mouse_drawing_optima_data_x:
+	fetch 2,mem_data_pre
+	fetcht 2,mem_data_current
+	iadd temp,pdata
+	fetcht 1,mem_mouse_data_xtemp
+	iadd temp,pdata
+	and pdata,0x01,temp
+	storet 1,mem_mouse_data_xtemp
+	branch mouse_drawing_optima_data
+
+mouse_drawing_optima_data_y:
+	fetch 2,mem_data_pre
+	fetcht 2,mem_data_current
+	iadd temp,pdata
+	fetcht 1,mem_mouse_data_ytemp
+	iadd temp,pdata
+	and pdata,0x01,temp
+	storet 1,mem_mouse_data_ytemp
+	branch mouse_drawing_optima_data
+
+/**********
+input:data_pre,data_current
+output:data_pre,data_current after optima
+***********/
+mouse_drawing_optima_data:
+	store 3,mem_data_sum
+	isolate1 16,pdata
+	branch mouse_data_sum_overflow,true
+	fetch 1,mem_data_sum+1
+	beq 0xff,mouse_data_sum_n
+	fetch 1,mem_data_sum
+mouse_data_store_pre:
+	rshift pdata,pdata
+	store 2,mem_data_pre
+	store 2,mem_data_current
+	rtn
+mouse_data_sum_overflow:
+	fetch 1,mem_data_sum+1	//sum positive
+	beq 0,mouse_data_sum_overflow_p
+	fetch 3,mem_data_sum	
+	branch mouse_data_store_pre
+mouse_data_sum_overflow_p:
+	jam 0,mem_data_sum+2
+	fetch 1,mem_data_sum
+	branch mouse_data_store_pre
+
+mouse_data_sum_n:
+	fetch 1,mem_data_sum	//sum negetive
+	call mouse_pdata_get_half
+	store 1,mem_data_pre
+	store 1,mem_data_current
+	branch mouse_data_zero,blank
+	setarg 0xff
+mouse_data_set_direction:	
+	store 1,mem_data_pre+1
+	store 1,mem_data_current+1
+	rtn
+mouse_data_zero:
+	setarg 0
+	branch mouse_data_set_direction
+
+mouse_pdata_get_half:
+	call mouse_pdata_invert
+	rshift pdata,pdata
+mouse_pdata_get_new_value:	
+	call mouse_rega_in_out
+	sub pdata,0,pdata
+	store 1,mem_data_value	
+	rtn
+
+mouse_pdata_invert:
+	sub pdata,0,pdata
+mouse_rega_in_out:	
+	store 1,mem_rega
+	fetch 1,mem_rega
+	rtn
+
+mouse_disable_asm:
+	jam 0,mem_mouse_asm_flag
+	rtn
+mouse_enable_asm:
+	jam 1,mem_mouse_asm_flag
+	rtn
+
+//rega mouse_x, regb mouse_y, pdata refer
+mouse_pdata_greater_than_check:
+	isub rega,null
+	nbranch disable_blank,positive
+	isub regb,null
+	nbranch disable_blank,positive
+	branch enable_blank
+mouse_data_less_than_check:
+	isub rega,null
+	nrtn positive
+	isub regb,null
+	nrtn positive
+	branch enable_blank
+
+mouse_data_abs_check:
+	fetch 2,mem_mouse_x
+	call mouse_data_abs
+	copy pdata,rega
+	fetch 2,mem_mouse_y
+	call mouse_data_abs
+	copy pdata,regb
+	rtn
+
+/***********
+input: data_current
+output:pdata,abs
+************/
+mouse_data_abs:
+	store 2,mem_data_current
+	fetch 1,mem_data_current+1
+	beq 0xff,mouse_data_reversal
+	fetch 1,mem_data_current
+mouse_data_abs_store:
+	and_into 0xff,pdata
+	//output:pdata
+	rtn
+mouse_data_reversal:
+	fetch 2,mem_data_current
+	sub pdata,0,pdata
+	branch mouse_data_abs_store
+
+mouse_24g_long_sleep_param_update_timer:
+	arg mem_24g_long_sleep_param_update_timer,regc
+	arg mouse_24g_long_sleep_normal_param,regb
+	branch timer_single_step
+mouse_24g_long_sleep_normal_param:
+	fetch 4,mem_24g_long_sleep_set1
+	store 4,mem_24g_enter_hibernate
+	jam 1,mem_mouse_long_mult_flag
+	rtn
+
+
+mouse_24g_long_sleep_set:
+	fetch 1,mem_24g_long_sleep_set_level
+	beq 0x00,mouse_24g_long_sleep_set_30ms
+	beq 0x01,mouse_24g_long_sleep_set_50ms
+	beq 0x02,mouse_24g_long_sleep_set_80ms
+	beq 0x03,mouse_24g_long_sleep_set_100ms
+mouse_24g_long_sleep_set_80ms:
+	setarg 0x0ea600
+mouse_24g_long_sleep_set_end:	
+	store 4,mem_24g_long_sleep_set1
+	rtn
+mouse_24g_long_sleep_set_30ms:
+	setarg 0x05e740
+	branch mouse_24g_long_sleep_set_end
+mouse_24g_long_sleep_set_50ms:
+	setarg 0x0927c0
+	branch mouse_24g_long_sleep_set_end
+mouse_24g_long_sleep_set_100ms:
+	setarg 0x124f80
+	branch mouse_24g_long_sleep_set_end
+
+mouse_24g_hibernate_set:
+	bpatch patch12_5,mem_patch12
+	jam 0,mem_24g_attempt_fail_flag
+	call g24_transmit_next_packet
+	setarg -1
+	store 4,mem_24g_enter_hibernate
+	setarg 0
+	store 7,mem_mouse_key
+	jam 1,mem_sensor_shutdown_flag
+	call mouse_sensor_powerdown
+	call mouse_setgpio_hibernate
+	branch mouse_24g_long_sleep
+
+mouse_wakeup_24g:
+	fetch 1,mem_sensor_shutdown_flag
+	ncall mouse_wakeup_24g_from_long_sleep,blank
+	jam 0,mem_sensor_shutdown_flag
+	rtn
+
+mouse_wakeup_24g_from_long_sleep:
+	call mouse_init_sensor_wakeup
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+mouse_wheel_gpio_init:
+	fetch 1,mem_whee_a_data_gpio
+	arg gpcfg_pullup,temp
+ 	call gpio_config_function_int
+	fetch 1,mem_whee_b_data_gpio
+	arg gpcfg_pullup,temp
+ 	branch gpio_config_function_int	
+
+mouse_24g_transmit_start:
+	call mouse_24g_fast_conn_mode_check
+	fetch 1,mem_sensor_shutdown_flag
+	nbranch mouse_24g_short_sleep,blank
+	branch g24_transmit_start_next
+
+mouse_24g_fast_conn_mode_check:
+	fetch 4,mem_24g_receiver_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	branch mouse_soft_agc_enable,zero
+	branch mouse_soft_agc_disable
+
+mouse_soft_agc_enable:
+	jam 0,mem_gain_fix
+	jam TX_POWER_FACTORY,mem_tx_power
+	rtn
+mouse_soft_agc_disable:
+	jam 0xff,mem_gain_fix
+	rtn
+
+mouse_24g_stop:
+	set0 mark_24g,mark
+	jam STATE_24G_STOP,mem_24g_conn_sm
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	branch mouse_disable_function_flag
+
+mouse_24g_start_mode:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G,mouse_24g_mode_setup_error
+	call mouse_device_24g_pair_led_config
+	call mouse_wakeup_from_power_check	// wake from hibernate :enble user
+	branch mouse_24g_reconn_dongle_start,user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,mouse_24g_reconn_general_dongle
+	bbit0 MOUSE_ENABLE_24G_POWER_ON_PAIRING,mouse_24g_reconn_general_dongle
+	call mouse_key_check_once
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key_24g
+	isub temp,null
+	branch mouse_24g_start_pair_mode,zero
+	branch mouse_24g_reconn_general_dongle
+
+mouse_24g_mode_setup_error:
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	rtn
+
+mouse_24g_first_start_auto_pair_mode:
+	call mouse_wakeup_from_power_check
+	branch mouse_24g_first_start_reconn,user  	// wake from hibernate :enble user
+mouse_24g_reconn_general_dongle:	
+	jam MODE_24G_DEVICE,mem_device_flag
+	fetch 2,mem_mouse_24g_power_on_fast_conn_timer
+	store 2,mem_24g_reconn_timeout
+	jam FAST_CONN_AND_3_0_ADDR,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_start_auto_pair:
+	fetch 2,mem_24g_pair_timeout_init
+	store 2,mem_24g_reconn_timeout
+	jam PAIR_AND_3_0_ADDR,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_first_start_reconn:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_reconn_dongle_start
+	call mouse_bluetooth_fast_conn_disable
+mouse_24g_first_bluetooth_reconnect:
+	call mouse_24g_stop
+	jam MODE_BT_DEVICE1,mem_device_flag
+	call mouse_select_reconn_device
+	branch mouse_start_reconnect_device
+
+mouse_24g_first_bb_event_reconn_timeout:
+	call mouse_wakeup_from_power_check
+	branch mouse_app_enter_hibernate,user
+	branch mouse_start_discovery
+
+mouse_24g_first_store_reconn_info:
+	call mouse_wakeup_from_power_check
+	rtn user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_store_device_info_delay
+	rtn
+
+mouse_24g_start_pair_mode:
+	call mouse_device_24g_pair_led_config
+	jam 0,mem_24g_reconn_type
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	call mouse_enable_function_flag
+	setarg 0
+	store 2,mem_24g_reconn_timeout	
+	call mouse_stop_discovery
+	jam TYPE_MS,mem_24g_data_type
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,g24_pair_start
+	jam TYPE_KB,mem_24g_data_type
+	branch g24_pair_start
+
+mouse_24g_attempt_fail:
+	fetch 1,mem_24g_attempt_fail_flag
+	nbranch mouse_24g_hibernate_set,blank
+	fetch 1,mem_24g_reconn_type
+	beq FAST_CONN_AND_3_0_ADDR,mouse_24g_fast_conn_attempt_fail
+	beq PAIR_AND_3_0_ADDR,mouse_24g_auto_pair_attempt_fail
+	beq RECEIVER_AND_3_0_ADDR,mouse_reconn_dongle_attempt_fail
+mouse_24g_attempt_fail_enter_hibernate:
+	call mouse_24g_stop
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_app_enter_hibernate
+	rtn
+
+mouse_24g_fast_conn_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_start_auto_pair
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,mouse_24g_start_auto_pair
+	bbit0 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED,mouse_24g_reconn_dongle_start
+	fetch 4,mem_mouse_24g_addr		// auto pair first time
+	fetcht 4,mem_mouse_compare_addr
+	isub temp,null
+	branch mouse_24g_start_pair_mode,zero
+mouse_24g_reconn_dongle_start:
+	fetch 2,mem_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout
+	jam RECEIVER_AND_3_0_ADDR,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_auto_pair_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
+	bbit0 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_attempt_fail_enter_hibernate
+	fetch 1,mem_device_number
+	beq 1,mouse_24g_attempt_fail_enter_hibernate		//24g first mode and only 2.4g device
+	branch mouse_24g_first_bluetooth_reconnect
+
+mouse_reconn_dongle_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_attempt_fail_enter_hibernate
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_24g_attempt_fail_enter_hibernate
+	bbit1 MOUSE_ENABLE_FLASH,mouse_24g_attempt_fail_enter_hibernate
+	branch mouse_24g_start_auto_pair+1
+	
+mouse_24g_attempt_success:
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_mouse_24g_addr		// if need store 24g address to eeprom/flash,need get mem_24g_addr
+	call g24_ch_syncword_crc8_init
+	call mouse_no_data_timer_init
+	call mouse_device_poweron_led_config
+	call mouse_init_sensor_reset
+	jam 0,mem_mouse_long_mult_flag
+	jam 0,mem_24g_conn_sm
+	jam 0,mem_24g_reconn_type
+	fetch 4,mem_24g_receiver_addr
+	fetch 4,mem_24g_fast_conn_addr
+	isub temp,null
+	rtn zero
+	branch mouse_24g_first_store_reconn_info
+	
+mouse_24g_pairing_complete:
+	call mouse_init_sensor_reset
+	call mouse_read_sensor_common
+mouse_24g_pairing_complete_common:
+	call mouse_device_poweron_led_config
+	call mouse_no_data_timer_init
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	call mouse_disable_function_flag
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_timeout
+	store 1,mem_24g_conn_sm
+	store 1,mem_mouse_move_flag
+	store 1,mem_24g_reconn_type
+
+
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_mouse_24g_addr
+	branch mouse_store_device_info_delay
+
+mouse_24g_short_sleep_clear_wake:
+	call clear_wake
+	branch lpm_write_gpio_wakeup
+
+mouse_24g_package_data:
+	bpatch patch12_6,mem_patch12
+	rtnmark0 mark_24g
+	call mouse_motion
+	nrtn user
+	fetch 1,mem_mouse_24g_long_sleep_flag
+	jam 0,mem_mouse_24g_long_sleep_flag
+	ncall mouse_24g_short_sleep_clear_wake,blank	
+	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,mouse_24g_mouse_package_data
+	fetch 1,mem_customer_key
+	nbranch mouse_24g_keyboard_package_data,blank
+mouse_24g_mouse_package_data:
+	call mouse_data_xy_release
+	fetch 1,mem_24g_data_type
+	bbit1 1,mouse_24g_mouse_package_data_now	// last package is keyboard data
+	fetcht 1,mem_24g_txbuf+1
+	fetch 1,mem_mouse_key
+	ior temp,pdata
+	store 1,mem_mouse_key
+	fetcht 1,mem_24g_txbuf+6
+	fetch 1,mem_mouse_z
+	iadd temp,pdata
+	store 1,mem_mouse_z
+	fetcht 1,mem_24g_txbuf+7
+	fetch 1,mem_mouse_tz
+	iadd temp,pdata
+	store 1,mem_mouse_tz	
+mouse_24g_mouse_package_data_now:	
+	jam TYPE_MS,mem_24g_data_type
+	arg 7,rega	//length
+	arg mem_mouse_key,regb //tx buff
+	fetch 2,mem_mouse_z
+	rtn blank
+	branch g24_transmit_by_interrupt_enable
+
+mouse_24g_keyboard_package_data:
+	jam TYPE_KB,mem_24g_data_type
+	arg 9,rega	//length
+	fetch 1,mem_customer_data_trigger
+	nbranch mouse_customer_key_press,blank
+	arg mem_customer_key_release,regb	//tx buff
+	rtn
+mouse_customer_key_press:
+	arg mem_customer_key_press,regb
+	rtn
+
+
+/**************************************g24 search receiver*****************************************/
+
+mouse_24g_search_dongle_init:
+	setarg 0
+	store 3,mem_mouse_search_dongle_action
+	rtn
+
+mouse_24g_search_dongle:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_SEARCH_DONGLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	fetch 1,mem_24g_abort_pac
+	rtn blank
+	fetch 1,mem_mouse_search_dongle_interval
+	increase 1,pdata
+	and_into 3,pdata
+	store 1,mem_mouse_search_dongle_interval
+	nrtn blank	//400ms
+	jam 0,mem_mouse_search_dongle_ch
+mouse_24g_search_dongle_loop:
+	bpatch patch12_7,mem_patch12
+	fetch 1,mem_mouse_search_dongle_ch
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_ch
+	sub pdata,G24_CH_NUMBER,null
+	nbranch mouse_24g_search_dongle_loop_end,positive
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch mouse_24g_search_dongle_loop_retry,sync
+	nbranch mouse_24g_search_dongle_loop_retry,user3
+	call mouse_g24_ackpayload_parse
+	call mouse_24g_search_dongle_success
+mouse_24g_search_dongle_loop_end:
+	call g24_txbuf_clear
+	fetch 1,mem_mouse_search_dongle_count
+	increase 1,pdata
+	store 1,mem_mouse_search_dongle_count
+	beq G24_CH_POLL_COUNT,mouse_24g_search_dongle_check
+	rtn
+
+mouse_24g_search_dongle_loop_retry:
+	call g24_ch
+	branch mouse_24g_search_dongle_loop
+
+mouse_24g_search_dongle_check:
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit1 G24_DISCONN_STATE
+	set1 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	fetch 2,mem_mouse_24g_search_dongle_time_init		//3min
+	store 2,mem_mouse_no_data_timer
+	branch mouse_sensor_powerdown
+	
+mouse_24g_search_dongle_success:
+	fetch 1,mem_24g_abort_pac
+	branch mouse_24g_search_dongle_init,blank
+	jam 0,mem_mouse_search_dongle_count
+	fetch 1,mem_mouse_search_dongle_action
+	rtnbit0 G24_DISCONN_STATE
+	set0 G24_DISCONN_STATE,pdata
+	store 1,mem_mouse_search_dongle_action
+	call mouse_no_data_timer_init
+	branch mouse_init_sensor_wakeup
+
+mouse_g24_ackpayload_parse:
+	call g24_ackpayload_parse
+	fetch 1,mem_24g_rxbuf+1
+	compare 0x08,pdata,0xf8
+	nrtn true
+	fetch 1,mem_24g_rxbuf+2		// pc sleep mouse ackpayload: 01 08 ff
+	beq 0xff,mouse_24g_hibernate_set
+	rtn
+
+/**************************************g24 search receiver*****************************************/
+
+
+mouse_g24_retransmit:
+	fetch 1,mem_mouse_need_soft_reset
+	nrtn blank
+	call mouse_retransmit_select_device_by_pb_button
+	call mouse_select_device_by_dpi_button_once
+	branch g24_retransmit0
+
+mouse_select_device_by_dpi_button_once:
+	arg 12,queue
+	call timer_check
+	nrtn blank
+	call mouse_dpi_check_once
+	call mouse_dpi_key_check_long_press
+mouse_g24_retransmit_100ms_timer_init:
+	arg 12,queue
+	setarg 160
+	branch timer_init
+	
+mouse_dpi_check_once:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+//	jam 0x03,mem_mouse_dpikey_press_status
+	branch mouse_dpi_check
+
+/**************************************g24 new process start********************************************/
+mouse_24g_before_lpm_sleep:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,lpm_sleep_skip_cb_function
+	fetch 1,mem_24g_disable_fec1
+	rtn blank
+mouse_peripheral_clock_off:
+	jam 2,core_clksel			//use rc clock
+	jam 0xf8,core_lpm_ctrl
+	rtn
+
+/**************************************g24 new process end********************************************/
+
+/*******************logo led*******************/
+mouse_logo_led_on_timer:
+	fetch 1,mem_mouse_logo_led_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_mouse_no_data_timer
+	rtn blank
+	fetch 2,mem_mouse_no_data_timeout
+	fetcht 2,mem_mouse_no_data_timer
+	isub temp,temp
+	fetch 2,mem_mouse_logo_led_on_time_init
+	isub temp,pdata
+	branch mouse_logo_led_on,positive
+mouse_logo_led_off:
+	fetcht 1,mem_mouse_logo_led_gpio
+	branch mouse_led_off
+mouse_logo_led_on:
+	fetcht 1,mem_mouse_logo_led_gpio
+	branch mouse_led_on
+	
+/*******************logo led end*******************/
+
+
+
+/*******************dpi led*******************/
+mouse_dpi_led_blink_delay_timer:
+	arg mem_mouse_dpi_led_delay_count,regc
+	arg mouse_dpi_led_blink_init,regb
+	branch timer_single_step
+	
+mouse_dpi_led_blink_init:
+	bpatch patch13_0,mem_patch13
+	fetch 1,mem_config_sensor_type
+	beq P3212,mouse_dpi_led_blink_init_another		//result:    level3: 1  2  3     level4: 2  3  4  1
+	beq KA8G2,mouse_dpi_led_blink_init_another	//result:    level3: 1  2  3     level4: 2  3  4  1
+	fetcht 1,mem_mouse_dpi
+	increase 2,temp	// 2 3 4 (5)
+mouse_dpi_led_blink_init_next:
+	sub temp,3,null
+	call mouse_dpi_led_blink_init_level_4,positive
+	ncall mouse_dpi_led_blink_count_clean,positive
+	copy temp,pdata
+	iadd pdata,pdata
+	store 1,mem_mouse_multi_led_blink_count
+mouse_multi_dpi_led_blink_enable:
+	jam 4,mem_mouse_multi_led_blink_type
+	call mouse_multi_dpi_led_blink_timer_init	
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	branch mouse_multi_led_enable
+
+mouse_dpi_led_blink_init_another:
+	fetcht 1,mem_mouse_dpi
+	increase 1,temp
+	branch mouse_dpi_led_blink_init_next
+
+mouse_dpi_led_blink_init_level_4:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_DPI_LEVEL_4
+	increase 1,temp  	// 2-->3   3-->4
+	rtn
+mouse_dpi_led_blink_count_clean:
+	increase -3,temp		// 4-->1  5-->2
+	rtn
+
+
+mouse_dpi_led_blink_delay:
+	fetch 1,mem_mouse_dpi_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_mouse_discovery_timer
+	nrtn blank
+	fetch 2,mem_24g_pair_timeout
+	nrtn blank
+	fetch 2,mem_24g_reconn_timeout
+	nrtn blank
+	fetch 1,mem_mouse_multi_led_powon_timer
+	nrtn blank
+	fetch 1,mem_mouse_dpi_led_delay_count_init
+	branch mouse_dpi_led_blink_init,blank
+	store 1,mem_mouse_dpi_led_delay_count  //delay 1s led blink
+	rtn
+
+/*******************dpi led end*******************/
+
+
+
+/*******************low voltage led*************************/
+
+mouse_check_dpi_blink:
+	disable user
+	fetch 1,mem_mouse_multi_led_blink_type		//04:dpi blink
+	sub pdata,4,null
+	nrtn zero
+	branch enable_user
+
+mouse_low_voltage_led_timer:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOW_LED
+	rtnbit0 MOUSE_LOW_VOLTAGE_FLAG
+	fetch 2,mem_mouse_discovery_timer
+	nrtn blank
+	fetch 2,mem_24g_pair_timeout
+	nrtn blank
+	fetch 2,mem_24g_reconn_timeout
+	nrtn blank
+	fetch 1,mem_mouse_multi_led_powon_timer
+	nrtn blank
+	call mouse_check_dpi_blink		//need judge blink led=dpi? if led=dpi led->rtn
+	rtn user
+
+	fetch 1,mem_mouse_multi_low_led_blink_count
+	branch mouse_low_led_blink_count_init_judge,blank
+mouse_low_led_blink_timer:
+	fetcht 1,mem_adc_low_volatage_led_timer_count
+	increase 1,temp
+	storet 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_mouse_low_led_blink_timer
+	isub temp,null
+	ncall mouse_low_led_timer_count_clean,positive
+	fetch 1,mem_mouse_low_led_blink_half_timer
+	isub temp,null
+	nbranch mouse_low_voltage_led_off_judge,positive
+mouse_low_voltage_led_on_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_FOR_LED,mouse_device_led_on
+	bbit1 MOUSE_ENABLE_DPI_LOW_FOR_LED,mouse_device_led_on
+mouse_low_voltage_led_on:
+	fetcht 1,mem_mouse_low_voltage_alarm_gpio 
+	branch mouse_led_on
+
+mouse_low_led_timer_count_clean:
+	jam 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_mouse_multi_low_led_blink_count	//blink count decrease
+	increase -1,pdata
+	store 1,mem_mouse_multi_low_led_blink_count
+mouse_low_voltage_led_off_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_FOR_LED,mouse_device_led_off
+	bbit1 MOUSE_ENABLE_DPI_LOW_FOR_LED,mouse_device_led_off
+mouse_low_voltage_led_off:
+	fetcht 1,mem_mouse_low_voltage_alarm_gpio
+	branch mouse_led_off
+
+mouse_low_led_blink_count_init_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT,mouse_low_voltage_led_off_judge
+	call mouse_multi_low_led_blink_count_init
+	branch mouse_low_led_blink_timer
+	
+/*******************low voltage led end*************************/
+
+
+/*******************multi led start*************************/
+/***parm init****/
+
+mouse_device_multi_led_parm_init:
+	jam 0,mem_mouse_multi_led_blink_enable
+	call mouse_device_multi_led_all_off		//can be remove?
+	jam 0,mem_mouse_multi_led_blink_type
+	fetch 1, mem_mouse_low_led_blink_timer
+	rshift pdata,pdata
+	store 1,mem_mouse_low_led_blink_half_timer
+	rtn
+mouse_multi_low_led_blink_count_init:
+	fetch 1,mem_mouse_multi_lowled_blink_count_init
+	store 1,mem_mouse_multi_low_led_blink_count
+	rtn
+
+mouse_multi_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_led_blink_type		//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+	beq 1,mouse_device_24g_led_blink_timer_init
+	beq 2,mouse_device_le_discovery_led_blink_timer_init
+	beq 3,mouse_device_le_reconn_led_blink_timer_init
+mouse_multi_dpi_led_blink_timer_init:
+	fetch 1,mem_mouse_dpi_led_blink_timer_init
+mouse_store_multi_led_blink_timer:
+	store 1,mem_mouse_multi_led_blink_timer
+	rtn
+mouse_device_24g_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_24gled_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+mouse_device_le_discovery_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_le_discovery_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+mouse_device_le_reconn_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_le_reconn_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+
+//===led poweron config===//
+mouse_device_poweron_led_config:	//power on
+	bpatch patch13_1,mem_patch13
+	fetch 1,mem_mouse_multi_led_powon_timer_init
+	store 1,mem_mouse_multi_led_powon_timer
+	jam MULTI_LED_ON,mem_mouse_multi_led_type
+mouse_multi_led_enable:
+	jam OFF,mem_mouse_multi_led_state
+	jam ON,mem_mouse_multi_led_blink_enable
+	rtn
+
+//===led blink config===//
+mouse_device_24g_pair_led_config:		//24g pair led config
+	bpatch patch13_2,mem_patch13
+	fetch 1,mem_device_flag
+	rtnne MODE_24G_DEVICE
+	call mouse_multi_led_blink_enable_init
+	jam 1,mem_mouse_multi_led_blink_type
+	call mouse_device_24g_led_blink_timer_init
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	rtn blank
+	fetch 1,mem_mouse_multi_24gled_blink_count_init
+	branch mouse_device_led_blink_count_init
+
+mouse_device_le_reconn_led_config:		//le recon led config
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	call mouse_multi_led_blink_enable_init
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+	jam 3,mem_mouse_multi_led_blink_type
+	call mouse_device_le_reconn_led_blink_timer_init
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	rtn blank
+	fetch 1,mem_mouse_multi_le_reconn_blink_count_init
+mouse_device_led_blink_count_init:
+	store 1,mem_mouse_multi_led_blink_count
+	rtn	
+
+mouse_device_discovery_led_config:		//ble discovery led config
+	jam 0,mem_mouse_le_reconn_blink_limit
+	jam 2,mem_mouse_multi_led_blink_type
+	call mouse_device_le_discovery_led_blink_timer_init
+mouse_multi_led_blink_enable_init:
+	jam 1,mem_mouse_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	branch mouse_device_multi_led_on
+
+
+//====multi timer====//
+mouse_led_multi_timer:
+	fetch 1,mem_mouse_multi_led_blink_enable
+	rtn blank
+	fetch 1,mem_mouse_multi_led_type
+	beq MULTI_LED_BLINK,mouse_multi_led_type_blink
+mouse_device_multi_led_type_on:
+	fetch 1,mem_mouse_multi_led_powon_timer
+	branch mouse_device_poweron_led_off,blank
+	increase -1
+	store 1,mem_mouse_multi_led_powon_timer
+	branch mouse_device_led_on
+
+mouse_device_poweron_led_off:
+ 	jam 0,mem_mouse_multi_led_blink_enable
+	call mouse_multi_low_led_blink_count_init
+	branch mouse_device_led_off
+
+mouse_multi_led_type_blink:
+	bpatch patch13_3,mem_patch13
+	fetch 1,mem_mouse_multi_led_blink_type	//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+	rtn blank
+	beq 4,mouse_device_led_blink_limit	//dpi blink
+	branch mouse_device_led_blink_judge
+
+mouse_device_led_blink_judge:
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	beq 1,mouse_device_led_blink_limit
+	branch mouse_multi_led_type_blink_next
+
+mouse_device_led_blink_limit:
+	fetch 1,mem_mouse_multi_led_blink_count
+	branch mouse_multi_led_off_judge, blank		//blink count =0
+mouse_multi_led_type_blink_next:	//blink no limit
+	arg mem_mouse_multi_led_blink_timer,regc
+	arg mouse_multi_led_type_blink_start,regb
+	branch timer_single_step
+	
+mouse_multi_led_type_blink_start:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_led_blink_count_decrease		//dpi blink
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	beq 1,mouse_multi_led_blink_count_decrease
+mouse_multi_led_blink:
+	call mouse_multi_led_blink_timer_init
+	fetch 1,mem_mouse_multi_led_state
+	beq ON,mouse_multi_led_off_judge_next
+	branch mouse_multi_led_on_judge
+
+mouse_multi_led_blink_count_decrease:
+	fetch 1,mem_mouse_multi_led_blink_count	
+	increase -1
+	store 1,mem_mouse_multi_led_blink_count
+	branch mouse_multi_led_blink
+
+//=====led on/off interface=====//
+mouse_multi_led_on_judge:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_dpi_led_on_judge
+mouse_device_multi_led_on:
+	jam ON,mem_mouse_multi_led_state
+mouse_device_led_on:
+	bpatch patch13_4,mem_patch13
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_device_24g_led_on
+	beq MODE_BT_DEVICE1,mouse_device_bt1_led_on
+	beq MODE_BT_DEVICE2,mouse_device_bt2_led_on
+	rtn
+mouse_device_24g_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_24gled
+	branch mouse_led_on	//by mouse.dat config
+mouse_device_bt1_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_bt1led
+	branch mouse_led_on	//by mouse.dat config
+mouse_device_bt2_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_bt2led
+mouse_led_on:
+	branch gpio_out_active	//by mouse.dat config
+
+mouse_led_off:
+	branch gpio_out_inactive	//by mouse.dat config
+
+mouse_multi_led_off_judge:
+	jam 0,mem_mouse_multi_led_blink_enable
+	jam 0,mem_mouse_multi_led_blink_type
+mouse_multi_led_off_judge_next:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_dpi_led_off_judge
+mouse_device_multi_led_off:
+	jam OFF,mem_mouse_multi_led_state
+mouse_device_led_off:
+	bpatch patch13_5,mem_patch13
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_device_24g_led_off
+	beq MODE_BT_DEVICE1,mouse_device_bt1_led_off
+	beq MODE_BT_DEVICE2,mouse_device_bt2_led_off
+	rtn
+mouse_device_24g_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_24gled
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_high_impedance
+mouse_device_bt1_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_bt1led
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_high_impedance
+mouse_device_bt2_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_bt2led
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_high_impedance
+
+mouse_device_multi_led_all_off:		//dpi+low no
+	call mouse_device_24g_led_off
+	call mouse_device_bt1_led_off
+	call mouse_device_bt2_led_off
+	call mouse_low_voltage_led_off_judge
+	branch mouse_multi_dpi_led_off_judge
+
+mouse_multi_dpi_led_off_judge:
+	jam OFF,mem_mouse_multi_led_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_FOR_LED,mouse_device_multi_led_off
+	bbit1 MOUSE_ENABLE_DPI_LOW_FOR_LED,mouse_device_multi_led_off
+mouse_multi_dpi_led_off:
+	fetcht 1,mem_mouse_dpi_gpio
+	branch mouse_led_off
+
+mouse_multi_dpi_led_on_judge:
+	jam ON,mem_mouse_multi_led_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_FOR_LED,mouse_device_multi_led_on
+	bbit1 MOUSE_ENABLE_DPI_LOW_FOR_LED,mouse_device_multi_led_on
+mouse_multi_dpi_led_on:
+	fetcht 1,mem_mouse_dpi_gpio
+	branch mouse_led_on	//by mouse.dat config
+
+/*******************multi led end*************************/
+
+mouse_low_voltage_led_no_enter_lpm:	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_LOW_VOLTAGE_FLAG
+	fetch 1,mem_adc_low_volatage_led_timer_count
+	fetcht 1,mem_mouse_low_led_blink_half_timer
+	sub pdata,temp,null
+	branch mouse_lpm_mode_clear,positive
+mouse_low_voltage_led_no_enter_lpm_next:	
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,g24_transmit_by_interrupt_exit_check
+	jam 1,mem_lpm_mode
+	rtn
+
+g24_transmit_by_interrupt_exit_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag	
+	rtnbit1 MOUSE_ENABLE_24G_250Hz	
+	branch g24_transmit_by_interrupt_exit
+
+mouse_lpm_mode_clear:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,g24_transmit_by_interrupt_enable
+	jam 0,mem_lpm_mode
+	rtn
+
+
+mouse_store_signal_rssi:
+//	call rssi_hex2dec
+	fetch 1,mem_rssi
+	branch rssi_signal
+
+mouse_le_transmit:
+	call mouse_store_signal_rssi
+	branch power_ctrl_start
+
+mouse_le_set_lpm_mult:
+	fetch 1,mem_le_connect_status_flag
+	compare 3,pdata,3
+	nbranch disable_blank,true
+	call app_lpm_mult_enable
+	branch enable_blank
+
+mouse_set_lpm_mult:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,mouse_le_set_lpm_mult
+	rtn
+
+mouse_24g_long_sleep:
+	call g24_lpm_wait
+	nrtn user
+	jam 1,mem_mouse_24g_long_sleep_flag
+	call g24_setgpio_lpm_before
+	jam 0,mem_mouse_24g_sleep_miss
+	call mouse_24g_send_time_long_wake
+	fetch 1,mem_sensor_shutdown_flag
+	ncall mouse_setgpio_hibernate,blank
+	fetch 4,mem_24g_enter_hibernate
+	branch g24_long_seep2	
+
+mouse_24g_short_sleep:
+	fetch 1,mem_mouse_sleep_deal_type
+	branch g24_short_sleep,blank
+	call g24_lpm_wait
+	nrtn user
+	fetch 1,mem_mouse_24g_sleep_miss
+	jam 0,mem_mouse_24g_sleep_miss
+	sub pdata,0,null
+	nbranch mouse_24g_short_sleep_last_miss,zero
+	fetcht 2,mem_24g_retransmit
+	sub temp,0,null
+	branch mouse_24g_short_sleep_default,zero
+
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	branch mouse_24g_short_sleep_default,blank
+mouse_24g_short_sleep_notify:
+	fetcht 4,mem_mouse_24g_tsniff
+	isub temp,temp
+	storet 4,mem_mouse_24g_sleep_miss_temp
+	nbranch mouse_24g_short_sleep_long,positive
+	fetch 3,mem_24g_short_sleep_set
+	isub temp,pdata
+	nbranch mouse_24g_short_sleep_2,positive
+	arg 0x600,temp
+	isub temp,null
+	nbranch mouse_24g_short_sleep_2,positive
+mouse_24g_short_sleep2:
+	store 4,mem_mouse_24g_sleep_time_temp
+	call mouse_24g_miss_temp_clear
+	fetch 4,mem_mouse_24g_sleep_time_temp
+mouse_24g_short_sleep3:	
+	call clk2lpo
+	storet 4,mem_sleep_counter
+	branch lpm_sleep
+
+mouse_24g_short_sleep_default:
+	call mouse_24g_miss_temp_clear
+	fetch 3,mem_24g_short_sleep_set
+	branch mouse_24g_short_sleep2
+
+mouse_24g_short_sleep_long:
+	sub temp,0,temp
+	fetch 3,mem_24g_short_sleep_set
+	iadd temp,pdata
+	branch mouse_24g_short_sleep2
+
+mouse_24g_miss_temp_clear:
+	setarg 0
+	store 4,mem_mouse_24g_sleep_miss_temp
+	rtn
+	
+mouse_24g_short_sleep_last_miss:
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	fetcht 4,mem_mouse_24g_sleep_miss_temp
+	iadd temp,pdata
+	branch mouse_24g_short_sleep_notify
+	
+mouse_24g_short_sleep_2:
+	jam 1,mem_mouse_24g_sleep_miss
+	rtn
+
+
+mouse_24g_transmit_callback:
+	call mouse_24g_send_time_check
+	branch mouse_wakeup_24g
+
+mouse_24g_send_time_check:
+	fetch 1,mem_mouse_sleep_deal_type
+	rtn blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,mouse_24g_send_timer_first
+	fetch 1,mem_mouse_24g_tx_count
+	branch mouse_24g_send_timer_first,blank
+	copy clkn,pdata
+	fetcht 6,mem_mouse_24g_tx_time_last
+	store 6,mem_mouse_24g_tx_time_last
+	call clk_diff_rt
+	store 4,mem_mouse_24g_tx_time_last_delt
+
+	fetch 1,mem_mouse_24g_sleep_miss
+	nrtn blank
+	fetch 2,mem_24g_retransmit
+	nrtn blank
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+mouse_24g_send_time_check_1:
+	fetcht 5,mem_mouse_24g_tx_time_sum
+	iadd temp,pdata
+	store 5,mem_mouse_24g_tx_time_sum	
+	fetcht 1,mem_mouse_24g_tx_count
+	fetch 1,mem_mouse_24g_tx_time_sum_count
+	isub temp,null
+	branch mouse_24g_send_time_check_average,zero
+	increase 1,temp
+	storet 1,mem_mouse_24g_tx_count
+	rtn
+
+mouse_24g_send_time_check_average:
+	jam 1,mem_mouse_24g_tx_count
+	arg 0,temp
+	fetch 5,mem_mouse_24g_tx_time_sum
+	storet 5,mem_mouse_24g_tx_time_sum
+	fetcht 1,mem_mouse_24g_tx_time_sum_count
+	idiv temp
+	call wait_div_end
+  	quotient rega
+
+	fetch 4,mem_mouse_24g_tsniff
+	fetcht 1,mem_mouse_24g_tx_time_offset
+	isub temp,temp
+	increase -40,temp
+
+	copy rega,pdata
+	isub temp,pdata
+	branch mouse_24g_send_time_check_average_late,positive
+	sub pdata,0,pdata
+	
+	rshift2 pdata,pdata
+	fetcht 3,mem_24g_short_sleep_set
+	iadd temp,temp
+	bpatch patch13_6,mem_patch13
+	fetch 3,mem_mouse_24g_short_sleep_set_init
+	arg 0x1800,rega
+	iadd rega,pdata
+	isub temp,null
+	nbranch mouse_24g_send_time_check_average_min,positive
+	storet 3,mem_24g_short_sleep_set
+	rtn
+
+mouse_24g_send_time_check_average_late:
+	rshift2 pdata,temp
+	fetch 3,mem_24g_short_sleep_set
+	isub temp,temp
+	bpatch patch13_7,mem_patch13
+	fetch 3,mem_mouse_24g_short_sleep_set_init
+	arg 0x1800,rega
+	isub rega,pdata
+	isub temp,null
+	branch mouse_24g_send_time_check_average_min,positive
+	storet 3,mem_24g_short_sleep_set
+	rtn
+
+mouse_24g_send_time_check_average_min:
+	store 3,mem_24g_short_sleep_set
+	rtn
+
+mouse_24g_send_timer_first:
+	jam 1,mem_mouse_24g_tx_count
+	copy clkn,pdata
+	store 6,mem_mouse_24g_tx_time_last
+	rtn
+
+mouse_24g_send_time_long_wake:
+	setarg 0
+	store 1,mem_mouse_24g_tx_count
+	store 5,mem_mouse_24g_tx_time_sum
+	rtn
+	
+
+/*****************close define  COMPILE_MOUSE**********/
+else
+
+endif
+
+
+
Index: program/patch_sdk.prog
===================================================================
--- /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/program/patch_sdk.prog	(revision 1812)
+++ /1121s/branch/mouse/RongLian_Project/RL_mouse_public_1M_sdk/program/patch_sdk.prog	(working copy)
@@ -12,7 +12,11 @@
 define COMPILE_REMOTE_CAR
 define COMPLIE_ADPCM
 define SDKCODE
+define COMPILE_MOUSE
 ifdef SDKCODE
 INCLUDE "bt_format"
 org 0x0000  // start from patch ram address start
+include patch.prog
+org 0x53e0
+include app_mouse.prog
 endif
