Main Program

Dependencies:   mbed AQM1602 HMC6352 PID

Committer:
lilac0112_1
Date:
Mon Feb 01 02:05:44 2016 +0000
Revision:
28:8ac6c3c1e643
Parent:
27:769cb5a7ea37
Child:
29:b413b0bb07a1
Modified; ticker for flag.; communication is conducted sequentially.; Added; ir+line; ir_pow;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 19:342da3a5a474 1 #include "mbed.h"
lilac0112_1 19:342da3a5a474 2 #include "extern.h"
lilac0112_1 19:342da3a5a474 3
lilac0112_1 21:d69a8f3c76e1 4 //Atk
lilac0112_1 21:d69a8f3c76e1 5 void modeAttack0(void){
lilac0112_1 28:8ac6c3c1e643 6 double ir_x, ir_y;
lilac0112_1 27:769cb5a7ea37 7 int vx,vy,vs;
lilac0112_1 28:8ac6c3c1e643 8 uint8_t LineDir[4];
lilac0112_1 27:769cb5a7ea37 9 uint8_t LineStop[2];
lilac0112_1 28:8ac6c3c1e643 10 uint8_t IrRange[4];
lilac0112_1 28:8ac6c3c1e643 11 uint8_t LineBind[4];
lilac0112_1 28:8ac6c3c1e643 12 if(data.IrFlag==1){
lilac0112_1 28:8ac6c3c1e643 13 ReadIr();
lilac0112_1 28:8ac6c3c1e643 14 data.IrFlag=0;
lilac0112_1 28:8ac6c3c1e643 15 }
lilac0112_1 28:8ac6c3c1e643 16 if(data.PidFlag==1){
lilac0112_1 28:8ac6c3c1e643 17 Line_ticker.detach();
lilac0112_1 28:8ac6c3c1e643 18 PidUpdate();
lilac0112_1 28:8ac6c3c1e643 19 Line_ticker.attach(&ReadLine, 0.005);
lilac0112_1 28:8ac6c3c1e643 20 data.PidFlag=0;
lilac0112_1 28:8ac6c3c1e643 21 }
lilac0112_1 28:8ac6c3c1e643 22 ir_x = ir_move_val[data.irNotice][data.irPosition][IR_X];
lilac0112_1 28:8ac6c3c1e643 23 ir_y = ir_move_val[data.irNotice][data.irPosition][IR_Y];
lilac0112_1 28:8ac6c3c1e643 24 if(data.irPosition<8){
lilac0112_1 28:8ac6c3c1e643 25 ir_x *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 26 ir_y *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 27 }
lilac0112_1 28:8ac6c3c1e643 28 else{
lilac0112_1 28:8ac6c3c1e643 29 ir_x *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 30 ir_y *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 31 }
lilac0112_1 28:8ac6c3c1e643 32
lilac0112_1 28:8ac6c3c1e643 33 LineDir[A_SPOT] = (!((vx>0)&&((data.lnFlag[A_SPOT]==1)&&(data.lnFlag[B_SPOT]==0))));
lilac0112_1 28:8ac6c3c1e643 34 LineDir[B_SPOT] = (!((vx<0)&&((data.lnFlag[A_SPOT]==0)&&(data.lnFlag[B_SPOT]==1))));
lilac0112_1 28:8ac6c3c1e643 35 LineDir[C_SPOT] = (!((vy<0)&&((data.lnFlag[C_SPOT]==1)&&(1))));
lilac0112_1 28:8ac6c3c1e643 36 LineDir[AB_SPOT] = (!((vy>0)&&((data.lnFlag[A_SPOT]==1)&&(data.lnFlag[B_SPOT]==1))));
lilac0112_1 28:8ac6c3c1e643 37
lilac0112_1 28:8ac6c3c1e643 38 LineStop[X_AXIS] = LineDir[A_SPOT]*LineDir[B_SPOT];
lilac0112_1 28:8ac6c3c1e643 39 LineStop[Y_AXIS] = LineDir[C_SPOT]*LineDir[AB_SPOT];
lilac0112_1 28:8ac6c3c1e643 40
lilac0112_1 28:8ac6c3c1e643 41
lilac0112_1 28:8ac6c3c1e643 42
lilac0112_1 28:8ac6c3c1e643 43 IrRange[A_SPOT] = (data.irPosition==19)||(data.irPosition==8)||(data.irPosition==9);
lilac0112_1 28:8ac6c3c1e643 44 IrRange[B_SPOT] = (data.irPosition==10)||(data.irPosition==11)||(data.irPosition==12);
lilac0112_1 28:8ac6c3c1e643 45 IrRange[C_SPOT] = (data.irPosition==13)||(data.irPosition==14)||(data.irPosition==15);
lilac0112_1 28:8ac6c3c1e643 46 IrRange[AB_SPOT] = (data.irPosition==16)||(data.irPosition==17)||(data.irPosition==18);
lilac0112_1 28:8ac6c3c1e643 47
lilac0112_1 28:8ac6c3c1e643 48 LineBind[A_SPOT] = ((IrRange[A_SPOT]==1)&&((LineDir[A_SPOT]==0)||(LineBind[A_SPOT]==1)));
lilac0112_1 28:8ac6c3c1e643 49 LineBind[B_SPOT] = ((IrRange[B_SPOT]==1)&&((LineDir[B_SPOT]==0)||(LineBind[B_SPOT]==1)));
lilac0112_1 28:8ac6c3c1e643 50 LineBind[C_SPOT] = ((IrRange[C_SPOT]==1)&&((LineDir[C_SPOT]==0)||(LineBind[C_SPOT]==1)));
lilac0112_1 28:8ac6c3c1e643 51 LineBind[AB_SPOT] = ((IrRange[AB_SPOT]==1)&&((LineDir[AB_SPOT]==0)||(LineBind[AB_SPOT]==1)));
lilac0112_1 28:8ac6c3c1e643 52
lilac0112_1 28:8ac6c3c1e643 53 vx = ir_x*(!(LineBind[A_SPOT]==1))*(!(LineBind[B_SPOT]==1))*(!(LineBind[C_SPOT]==1))*(!(LineBind[AB_SPOT]==1));
lilac0112_1 28:8ac6c3c1e643 54 vy = ir_y*(!(LineBind[A_SPOT]==1))*(!(LineBind[B_SPOT]==1))*(!(LineBind[C_SPOT]==1))*(!(LineBind[AB_SPOT]==1));;
lilac0112_1 28:8ac6c3c1e643 55 vs = data.OutputPID;
lilac0112_1 28:8ac6c3c1e643 56
lilac0112_1 28:8ac6c3c1e643 57 move(
lilac0112_1 28:8ac6c3c1e643 58 vx*LineStop[X_AXIS] + (LINE_RF)*(vx!=0)*(LineDir[C_SPOT]==0) + (-LINE_RF)*(vx!=0)*(LineDir[AB_SPOT]==0),
lilac0112_1 28:8ac6c3c1e643 59 vy*LineStop[Y_AXIS] + (-LINE_RF)*(vy!=0)*(LineDir[A_SPOT]==0) + (LINE_RF)*(vy!=0)*(LineDir[B_SPOT]==0),
lilac0112_1 28:8ac6c3c1e643 60 vs
lilac0112_1 28:8ac6c3c1e643 61 );
lilac0112_1 28:8ac6c3c1e643 62
lilac0112_1 28:8ac6c3c1e643 63 if(data.MotorFlag==1){
lilac0112_1 28:8ac6c3c1e643 64 tx_motor();
lilac0112_1 28:8ac6c3c1e643 65 data.MotorFlag=0;
lilac0112_1 28:8ac6c3c1e643 66 }
lilac0112_1 28:8ac6c3c1e643 67 return;
lilac0112_1 28:8ac6c3c1e643 68 }
lilac0112_1 28:8ac6c3c1e643 69 void modeAttack1(void){
lilac0112_1 28:8ac6c3c1e643 70 return;
lilac0112_1 28:8ac6c3c1e643 71 }
lilac0112_1 28:8ac6c3c1e643 72 void modeAttack2(void){
lilac0112_1 28:8ac6c3c1e643 73 return;
lilac0112_1 28:8ac6c3c1e643 74 }
lilac0112_1 28:8ac6c3c1e643 75 void modeAttack3(void){
lilac0112_1 28:8ac6c3c1e643 76 return;
lilac0112_1 28:8ac6c3c1e643 77 }
lilac0112_1 28:8ac6c3c1e643 78 void modeAttack4(void){
lilac0112_1 28:8ac6c3c1e643 79 return;
lilac0112_1 28:8ac6c3c1e643 80 }
lilac0112_1 28:8ac6c3c1e643 81 void modeAttack5(void){
lilac0112_1 28:8ac6c3c1e643 82 return;
lilac0112_1 28:8ac6c3c1e643 83 }
lilac0112_1 28:8ac6c3c1e643 84 //Debug
lilac0112_1 28:8ac6c3c1e643 85 void modeDebug0(void){
lilac0112_1 28:8ac6c3c1e643 86 return;
lilac0112_1 28:8ac6c3c1e643 87 }
lilac0112_1 28:8ac6c3c1e643 88 void modeDebug1(void){//ChaseOnly NonLine
lilac0112_1 28:8ac6c3c1e643 89 int vx,vy,vs;
lilac0112_1 24:9fb74ea3c25d 90 if(data.IrFlag==1){
lilac0112_1 24:9fb74ea3c25d 91 ReadIr();
lilac0112_1 24:9fb74ea3c25d 92 data.IrFlag=0;
lilac0112_1 24:9fb74ea3c25d 93 }
lilac0112_1 27:769cb5a7ea37 94 if(data.PidFlag==1){
lilac0112_1 27:769cb5a7ea37 95 PidUpdate();
lilac0112_1 27:769cb5a7ea37 96 data.PidFlag=0;
lilac0112_1 27:769cb5a7ea37 97 }
lilac0112_1 28:8ac6c3c1e643 98
lilac0112_1 28:8ac6c3c1e643 99 vx = ir_move_val[data.irNotice][data.irPosition][IR_X];
lilac0112_1 28:8ac6c3c1e643 100 vy = ir_move_val[data.irNotice][data.irPosition][IR_Y];
lilac0112_1 28:8ac6c3c1e643 101 vs = data.OutputPID;
lilac0112_1 28:8ac6c3c1e643 102 if(data.irPosition<8){
lilac0112_1 28:8ac6c3c1e643 103 vx *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 104 vy *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 105 }
lilac0112_1 28:8ac6c3c1e643 106 else{
lilac0112_1 28:8ac6c3c1e643 107 vx *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 108 vy *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 109 }
lilac0112_1 28:8ac6c3c1e643 110
lilac0112_1 28:8ac6c3c1e643 111
lilac0112_1 28:8ac6c3c1e643 112 move(vx, vy, vs);
lilac0112_1 28:8ac6c3c1e643 113
lilac0112_1 28:8ac6c3c1e643 114 if(data.MotorFlag==1){
lilac0112_1 28:8ac6c3c1e643 115 tx_motor();
lilac0112_1 28:8ac6c3c1e643 116 data.MotorFlag=0;
lilac0112_1 28:8ac6c3c1e643 117 }
lilac0112_1 28:8ac6c3c1e643 118 return;
lilac0112_1 28:8ac6c3c1e643 119 }
lilac0112_1 28:8ac6c3c1e643 120 void modeDebug2(void){//LineRestoringForce
lilac0112_1 28:8ac6c3c1e643 121 int vx,vy,vs;
lilac0112_1 28:8ac6c3c1e643 122 uint8_t LineStop[2];
lilac0112_1 28:8ac6c3c1e643 123 int LineForce[2];
lilac0112_1 28:8ac6c3c1e643 124 if(data.IrFlag==1){
lilac0112_1 28:8ac6c3c1e643 125 ReadIr();
lilac0112_1 28:8ac6c3c1e643 126 data.IrFlag=0;
lilac0112_1 28:8ac6c3c1e643 127 }
lilac0112_1 28:8ac6c3c1e643 128 if(data.PidFlag==1){
lilac0112_1 28:8ac6c3c1e643 129 PidUpdate();
lilac0112_1 28:8ac6c3c1e643 130 data.PidFlag=0;
lilac0112_1 28:8ac6c3c1e643 131 }
lilac0112_1 27:769cb5a7ea37 132 vx = ir_move_val[data.irNotice][data.irPosition][IR_X];
lilac0112_1 27:769cb5a7ea37 133 vy = ir_move_val[data.irNotice][data.irPosition][IR_Y];
lilac0112_1 27:769cb5a7ea37 134 vs = data.OutputPID;
lilac0112_1 28:8ac6c3c1e643 135 if(data.irPosition<8){
lilac0112_1 28:8ac6c3c1e643 136 vx *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 137 vy *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 138 }
lilac0112_1 28:8ac6c3c1e643 139 else{
lilac0112_1 28:8ac6c3c1e643 140 vx *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 141 vy *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 142 }
lilac0112_1 28:8ac6c3c1e643 143
lilac0112_1 28:8ac6c3c1e643 144
lilac0112_1 28:8ac6c3c1e643 145 LineStop[X_AXIS] = (!((vx>0)&&((data.lnFlag[A_SPOT]==1)&&(1))))*(!((vx<0)&&((data.lnFlag[B_SPOT]==1)&&(1))));
lilac0112_1 28:8ac6c3c1e643 146 LineStop[Y_AXIS] = (!((vy>0)&&((data.lnFlag[A_SPOT]==1)&&(data.lnFlag[B_SPOT]==1))))*(!((vy<0)&&((data.lnFlag[C_SPOT]==1)&&(1))));
lilac0112_1 28:8ac6c3c1e643 147
lilac0112_1 28:8ac6c3c1e643 148 LineForce[X_AXIS] = LineForce[Y_AXIS] = 0;
lilac0112_1 28:8ac6c3c1e643 149 if(((vx>0)&&((data.lnFlag[A_SPOT]==1)&&(1)))){
lilac0112_1 28:8ac6c3c1e643 150 LineForce[X_AXIS] = -LINE_RF;
lilac0112_1 28:8ac6c3c1e643 151 }
lilac0112_1 28:8ac6c3c1e643 152 if(((vx<0)&&((data.lnFlag[B_SPOT]==1)&&(1)))){
lilac0112_1 28:8ac6c3c1e643 153 LineForce[X_AXIS] = LINE_RF;
lilac0112_1 28:8ac6c3c1e643 154 }
lilac0112_1 28:8ac6c3c1e643 155 if(((vy>0)&&((data.lnFlag[A_SPOT]==1)&&(data.lnFlag[B_SPOT]==1)))){
lilac0112_1 28:8ac6c3c1e643 156 LineForce[Y_AXIS] = -LINE_RF;
lilac0112_1 28:8ac6c3c1e643 157 }
lilac0112_1 28:8ac6c3c1e643 158 if(((vy<0)&&((data.lnFlag[C_SPOT]==1)&&(1)))){
lilac0112_1 28:8ac6c3c1e643 159 LineForce[Y_AXIS] = LINE_RF;
lilac0112_1 28:8ac6c3c1e643 160 }
lilac0112_1 28:8ac6c3c1e643 161
lilac0112_1 28:8ac6c3c1e643 162 move(
lilac0112_1 28:8ac6c3c1e643 163 vx*LineStop[X_AXIS] + LineForce[X_AXIS],
lilac0112_1 28:8ac6c3c1e643 164 vy*LineStop[Y_AXIS] + LineForce[Y_AXIS],
lilac0112_1 28:8ac6c3c1e643 165 vs
lilac0112_1 28:8ac6c3c1e643 166 );
lilac0112_1 28:8ac6c3c1e643 167 if(data.MotorFlag==1){
lilac0112_1 28:8ac6c3c1e643 168 tx_motor();
lilac0112_1 28:8ac6c3c1e643 169 data.MotorFlag=0;
lilac0112_1 28:8ac6c3c1e643 170 }
lilac0112_1 28:8ac6c3c1e643 171 return;
lilac0112_1 28:8ac6c3c1e643 172 }
lilac0112_1 28:8ac6c3c1e643 173 void modeDebug3(void){//movesum
lilac0112_1 28:8ac6c3c1e643 174 int vx,vy,vs;
lilac0112_1 28:8ac6c3c1e643 175 uint8_t LineStop[2];
lilac0112_1 28:8ac6c3c1e643 176 static uint8_t moveLnFlag[4]={1, 1, 1, 1};
lilac0112_1 28:8ac6c3c1e643 177 static int moveLnlog[4];
lilac0112_1 28:8ac6c3c1e643 178 if(data.IrFlag==1){
lilac0112_1 28:8ac6c3c1e643 179 ReadIr();
lilac0112_1 28:8ac6c3c1e643 180 data.IrFlag=0;
lilac0112_1 28:8ac6c3c1e643 181 }
lilac0112_1 28:8ac6c3c1e643 182 if(data.PidFlag==1){
lilac0112_1 28:8ac6c3c1e643 183 PidUpdate();
lilac0112_1 28:8ac6c3c1e643 184 data.PidFlag=0;
lilac0112_1 28:8ac6c3c1e643 185 }
lilac0112_1 28:8ac6c3c1e643 186 vx = ir_move_val[data.irNotice][data.irPosition][IR_X];
lilac0112_1 28:8ac6c3c1e643 187 vy = ir_move_val[data.irNotice][data.irPosition][IR_Y];
lilac0112_1 28:8ac6c3c1e643 188 vs = data.OutputPID;
lilac0112_1 28:8ac6c3c1e643 189 if(data.irPosition<8){
lilac0112_1 28:8ac6c3c1e643 190 vx *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 191 vy *= data.l_pow;
lilac0112_1 28:8ac6c3c1e643 192 }
lilac0112_1 28:8ac6c3c1e643 193 else{
lilac0112_1 28:8ac6c3c1e643 194 vx *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 195 vy *= data.s_pow;
lilac0112_1 28:8ac6c3c1e643 196 }
lilac0112_1 27:769cb5a7ea37 197
lilac0112_1 27:769cb5a7ea37 198 data.motorlog[X_AXIS] += vx;
lilac0112_1 27:769cb5a7ea37 199 data.motorlog[Y_AXIS] += vy;
lilac0112_1 27:769cb5a7ea37 200
lilac0112_1 27:769cb5a7ea37 201 if((data.lnFlag[A_SPOT]==1)&&(1)){
lilac0112_1 27:769cb5a7ea37 202 moveLnFlag[A_SPOT]=0;
lilac0112_1 27:769cb5a7ea37 203 moveLnlog[A_SPOT] = data.motorlog[X_AXIS];
lilac0112_1 27:769cb5a7ea37 204 }
lilac0112_1 27:769cb5a7ea37 205 if((data.lnFlag[B_SPOT]==1)&&(1)){
lilac0112_1 27:769cb5a7ea37 206 moveLnFlag[B_SPOT]=0;
lilac0112_1 27:769cb5a7ea37 207 moveLnlog[B_SPOT] = data.motorlog[X_AXIS];
lilac0112_1 27:769cb5a7ea37 208 }
lilac0112_1 27:769cb5a7ea37 209 if((data.lnFlag[C_SPOT]==1)&&(1)){
lilac0112_1 27:769cb5a7ea37 210 moveLnFlag[C_SPOT]=0;
lilac0112_1 27:769cb5a7ea37 211 moveLnlog[C_SPOT] = data.motorlog[Y_AXIS];
lilac0112_1 27:769cb5a7ea37 212 }
lilac0112_1 27:769cb5a7ea37 213 if((data.lnFlag[A_SPOT]==1)&&(data.lnFlag[B_SPOT]==1)){
lilac0112_1 27:769cb5a7ea37 214 moveLnFlag[AB_SPOT]=0;
lilac0112_1 27:769cb5a7ea37 215 moveLnlog[AB_SPOT] = data.motorlog[Y_AXIS];
lilac0112_1 27:769cb5a7ea37 216 }
lilac0112_1 27:769cb5a7ea37 217
lilac0112_1 27:769cb5a7ea37 218 if(((data.motorlog[X_AXIS]-moveLnlog[A_SPOT])<(-RELEASE_VAL))&&(moveLnFlag[A_SPOT]==0)) moveLnFlag[A_SPOT]=1;
lilac0112_1 27:769cb5a7ea37 219 if(((data.motorlog[X_AXIS]-moveLnlog[B_SPOT])>(RELEASE_VAL))&&(moveLnFlag[B_SPOT]==0)) moveLnFlag[B_SPOT]=1;
lilac0112_1 27:769cb5a7ea37 220 if(((data.motorlog[Y_AXIS]-moveLnlog[C_SPOT])>(RELEASE_VAL))&&(moveLnFlag[C_SPOT]==0)) moveLnFlag[C_SPOT]=1;
lilac0112_1 27:769cb5a7ea37 221 if(((data.motorlog[Y_AXIS]-moveLnlog[AB_SPOT])<(-RELEASE_VAL))&&(moveLnFlag[AB_SPOT]==0)) moveLnFlag[AB_SPOT]=1;
lilac0112_1 27:769cb5a7ea37 222
lilac0112_1 27:769cb5a7ea37 223 LineStop[X_AXIS] = (!((vx>0)&&(moveLnFlag[A_SPOT]==0)))*(!((vx<0)&&(moveLnFlag[B_SPOT]==0)));
lilac0112_1 27:769cb5a7ea37 224 LineStop[Y_AXIS] = (!((vy>0)&&(moveLnFlag[C_SPOT]==0)))*(!((vy<0)&&(moveLnFlag[AB_SPOT]==0)));
lilac0112_1 26:fbb03281fc7d 225
lilac0112_1 27:769cb5a7ea37 226 move(
lilac0112_1 27:769cb5a7ea37 227 vx*LineStop[X_AXIS],
lilac0112_1 27:769cb5a7ea37 228 vy*LineStop[Y_AXIS],
lilac0112_1 27:769cb5a7ea37 229 vs
lilac0112_1 26:fbb03281fc7d 230 );
lilac0112_1 27:769cb5a7ea37 231 if(data.MotorFlag==1){
lilac0112_1 27:769cb5a7ea37 232 tx_motor();
lilac0112_1 27:769cb5a7ea37 233 data.MotorFlag=0;
lilac0112_1 27:769cb5a7ea37 234 }
lilac0112_1 21:d69a8f3c76e1 235 return;
lilac0112_1 21:d69a8f3c76e1 236 }
lilac0112_1 28:8ac6c3c1e643 237 void modeDebug4(void){//solenoid
lilac0112_1 28:8ac6c3c1e643 238 if(data.KickFlag==1){
lilac0112_1 28:8ac6c3c1e643 239 DriveSolenoid();
lilac0112_1 28:8ac6c3c1e643 240 }
lilac0112_1 21:d69a8f3c76e1 241 return;
lilac0112_1 21:d69a8f3c76e1 242 }
lilac0112_1 28:8ac6c3c1e643 243 void modeDebug5(void){//cmpsTest
lilac0112_1 28:8ac6c3c1e643 244 if(data.IrFlag==1){
lilac0112_1 28:8ac6c3c1e643 245 ReadIr();
lilac0112_1 28:8ac6c3c1e643 246 data.IrFlag=0;
lilac0112_1 28:8ac6c3c1e643 247 }
lilac0112_1 28:8ac6c3c1e643 248 if(data.PidFlag==1){
lilac0112_1 28:8ac6c3c1e643 249 PidUpdate();
lilac0112_1 28:8ac6c3c1e643 250 data.PidFlag=0;
lilac0112_1 28:8ac6c3c1e643 251 }
lilac0112_1 28:8ac6c3c1e643 252 move(0,0,data.OutputPID);
lilac0112_1 28:8ac6c3c1e643 253 if(data.MotorFlag==1){
lilac0112_1 28:8ac6c3c1e643 254 tx_motor();
lilac0112_1 28:8ac6c3c1e643 255 data.MotorFlag=0;
lilac0112_1 28:8ac6c3c1e643 256 }
lilac0112_1 28:8ac6c3c1e643 257
lilac0112_1 19:342da3a5a474 258 return;
lilac0112_1 19:342da3a5a474 259 }