This commit is contained in:
bmy
2024-03-02 16:13:54 +08:00
42 changed files with 575 additions and 2161 deletions

View File

@@ -42,7 +42,14 @@ void by_pwm_update_duty(uint32_t update_pwm_duty1, uint32_t update_pwm_duty2)
pwm_set_duty(Fan_pwm_up1, update_pwm_duty1);
pwm_set_duty(Fan_pwm_up2, update_pwm_duty2);
}
/**
* @brief
*
* @param power_pwm_duty_l1 左转向风扇
* @param power_pwm_duty_r1 右转向风扇
* @param power_pwm_duty_l2 左驱动风扇
* @param power_pwm_duty_r2 右驱动风扇
*/
void by_pwm_power_duty(uint32_t power_pwm_duty_l1, uint32_t power_pwm_duty_r1, uint32_t power_pwm_duty_l2, uint32_t power_pwm_duty_r2)
{

View File

@@ -1,163 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
enum circle_type_e circle_type = CIRCLE_NONE;
int32_t Left_Border_None_Circle = 0;
int32_t Right_Border_None_Circle = 0;
int32_t Left_Border_Have_Circle = 0;
int32_t Right_Border_Have_Circle = 0;
int32_t Left_Border_ToLeft_Circle = 0;
int32_t Right_Border_ToLeft_Circle = 0;
int32_t Left_Border_ToRight_Circle = 0;
int32_t Right_Border_ToRight_Circle = 0;
void CheckCircle() {
// 非圆环模式下单边L角点, 单边长直道
if (circle_type == CIRCLE_NONE && Lpt0_found && !Lpt1_found && is_straight1) {
circle_type = CIRCLE_LEFT_BEGIN;
}
if (circle_type == CIRCLE_NONE && !Lpt0_found && Lpt1_found && is_straight0) {
circle_type = CIRCLE_RIGHT_BEGIN;
}
}
void RunCircle() {
if (circle_type == CIRCLE_LEFT_BEGIN) // 左环开始,寻外直道右线
{
track_type = TRACK_RIGHT;
// 先丢左线后有线
if (pts_resample_left_count < 0.1 / RESAMPLEDIST) {
Left_Border_None_Circle++;
}
if (pts_resample_left_count > 0.5 / RESAMPLEDIST &&Left_Border_None_Circle > FRAMENONE) {
Left_Border_Have_Circle++;
if (Left_Border_Have_Circle > FRAMENONE) {
circle_type = CIRCLE_LEFT_IN;
Left_Border_None_Circle = 0;
Left_Border_Have_Circle = 0;
}
}
} else if (circle_type == CIRCLE_LEFT_IN) // 入环,寻内圆左线
{
track_type = TRACK_LEFT;
if (pts_resample_right[(int32_t)(0.2 / RESAMPLEDIST)][1] -
pts_resample_right[0][1] <
-2) {
Right_Border_ToLeft_Circle++;
}
if (Right_Border_ToLeft_Circle > FRAMETOLEFT) {
circle_type = CIRCLE_LEFT_RUNNING;
Right_Border_ToLeft_Circle = 0;
}
} else if (circle_type == CIRCLE_LEFT_RUNNING) // 正常巡线,寻外圆右线
{
// Track_Type = TRACK_RIGHT;
track_type = TRACK_LEFT; // 看看加一个如果丢线才切换
if (Lpt1_found) {
pts_resample_right_count = mid_right_count = Lpt1_rpts1s_id;
}
if (Lpt1_found && Lpt1_rpts1s_id < 0.4 / RESAMPLEDIST) {
circle_type = CIRCLE_LEFT_OUT;
}
} else if (circle_type == CIRCLE_LEFT_OUT) // 出环,寻内圆
{
track_type = TRACK_LEFT;
if (is_straight1) // 右线为长直道
{
circle_type = CIRCLE_LEFT_END;
}
} else if (circle_type == CIRCLE_LEFT_END) // 走过圆环,寻右线
{
track_type = TRACK_RIGHT;
if (pts_resample_left_count < 0.2 / RESAMPLEDIST) // 左线先丢后有
{
Left_Border_None_Circle++;
}
if (pts_resample_left_count > 0.6 / RESAMPLEDIST &&
Left_Border_None_Circle > FRAMENONE) {
circle_type = CIRCLE_NONE;
Left_Border_None_Circle = 0;
Left_Border_Have_Circle = 0;
Right_Border_ToLeft_Circle = 0;
Right_Border_ToRight_Circle = 0;
}
} else if (circle_type == CIRCLE_RIGHT_BEGIN) // 右环控制,前期寻左直道
{
track_type = TRACK_LEFT;
// 先丢右线后有线
if (pts_resample_right_count < 0.3 / RESAMPLEDIST) {
Right_Border_None_Circle++;
}
if (pts_resample_right_count > 0.5 / RESAMPLEDIST &&
Right_Border_None_Circle > FRAMENONE) {
Right_Border_Have_Circle++;
if (Right_Border_Have_Circle > FRAMENONE) {
circle_type = CIRCLE_RIGHT_IN;
Right_Border_None_Circle = 0;
Right_Border_Have_Circle = 0;
}
}
} else if (circle_type == CIRCLE_RIGHT_IN) // 入右环,寻右内圆环
{
track_type = TRACK_RIGHT;
if (pts_resample_left[(int32_t)(0.2 / RESAMPLEDIST)][1] -
pts_resample_left[0][1] >
2) {
Left_Border_ToRight_Circle++;
}
if (Left_Border_ToRight_Circle > FRAMETORIGHT) {
circle_type = CIRCLE_RIGHT_RUNNING;
Left_Border_ToRight_Circle = 0;
}
} else if (circle_type == CIRCLE_RIGHT_RUNNING) // 正常巡线,寻外圆左线
{
// track_type = TRACK_LEFT;
track_type = TRACK_RIGHT; // 看看加一个如果丢线才切换
if (Lpt0_found) // 外环存在拐点,可再加拐点距离判据 (左 L 点)
{
pts_resample_left_count = mid_left_count = Lpt0_rpts0s_id;
}
if (Lpt0_found && Lpt0_rpts0s_id < 0.4 / RESAMPLEDIST) {
circle_type = CIRCLE_RIGHT_OUT;
}
} else if (circle_type == CIRCLE_RIGHT_OUT) // 出环,寻内圆
{
track_type = TRACK_RIGHT;
if (is_straight0) // 加个有线长度判断
{
circle_type = CIRCLE_RIGHT_END;
}
} else if (circle_type == CIRCLE_RIGHT_END) // 走过圆环,寻左线
{
track_type = TRACK_LEFT;
if (pts_resample_right_count < 0.2 / RESAMPLEDIST) // 左线先丢后有
{
Right_Border_None_Circle++;
}
if (pts_resample_right_count > 0.7 / RESAMPLEDIST &&
Right_Border_None_Circle > FRAMENONE) {
circle_type = CIRCLE_NONE;
Right_Border_None_Circle = 0;
Right_Border_Have_Circle = 0;
Left_Border_ToLeft_Circle = 0;
Left_Border_ToRight_Circle = 0;
}
}
}

View File

@@ -1,24 +0,0 @@
#ifndef CIRCLE
#define CIRCLE
enum circle_type_e {
CIRCLE_NONE, // 非圆环模式
CIRCLE_LEFT_BEGIN,
CIRCLE_RIGHT_BEGIN, // 圆环开始识别到单侧L角点另一侧长直道。
CIRCLE_LEFT_IN,
CIRCLE_RIGHT_IN, // 圆环进入,即走到一侧直道,一侧圆环的位置。
CIRCLE_LEFT_RUNNING,
CIRCLE_RIGHT_RUNNING, // 圆环内部。
CIRCLE_LEFT_OUT,
CIRCLE_RIGHT_OUT, // 准备出圆环即识别到出环处的L角点。
CIRCLE_LEFT_END,
CIRCLE_RIGHT_END // 圆环结束,即再次走到单侧直道的位置。
};
extern enum circle_type_e circle_type;
void CheckCircle(void);
void RunCircle(void);
#endif /* COMMON_H_ */

View File

@@ -1,15 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
int32_t limit(int32_t x, int32_t low, int32_t up)
{
return x > up ? up : x < low ? low : x;
}
int clip(int x, int low, int up) {
return x > up ? up : x < low ? low : x;
}
float fclip(float x, float low, float up) {
return x > up ? up : x < low ? low : x;
}

View File

@@ -1,29 +0,0 @@
#ifndef COMMON_H_
#define COMMON_H_
#define IMAGE_H (MT9V03X_H)
#define IMAGE_W (MT9V03X_W)
#define BEGINH_L (50)
#define BEGINH_R (50)
#define BEGINW_L (-18)
#define BEGINW_R (-12)
#define PT_MAXLEN (75)
#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) // 获取像素点的值
#define FIX_BINTHRESHOLD (140) // 设置最开始的阈值
#define SELFADAPT_KERNELSIZE (7) // 巡线区域核大小
#define FILTER_KERNELSIZE (7) // 滤波核大小
#define SELFADAPT_OFFSET (8) // 适应性块大小
#define PIXPERMETER (56)
#define RESAMPLEDIST (0.02f)
#define ANGLEDIST (0.2f)
#define ROADWIDTH (0.45f)
#define FRAMENONE (1)
#define FRAMETOLEFT (5)
#define FRAMETORIGHT (5)
#define PIXEL_PER_METER (100)
int32_t limit(int32_t x, int32_t low, int32_t up);
int clip(int x, int low, int up);
float fclip(float x, float low, float up);
#endif /* COMMON_H_ */

View File

@@ -1,219 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
enum cross_type_e cross_type = CROSS_NONE;
bool far_Lpt0_found, far_Lpt1_found;
int32_t Both_Boder_None_Cross;
int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id;
void CheckCross() {
bool Xfound = Lpt0_found && Lpt1_found;
if (cross_type == CROSS_NONE && Xfound){
cross_type = CROSS_BEGIN;
}
}
void RunCross() {
bool Xfound = Lpt0_found && Lpt1_found;
aim_distance = 0.4;
//检测到十字,先按照近线走
if (cross_type == CROSS_BEGIN) {
if (Lpt0_found) {
mid_left_count = pts_resample_left_count = Lpt0_rpts0s_id;
track_type = TRACK_LEFT;
}
else if(Lpt1_found) {
mid_right_count = pts_resample_right_count = Lpt1_rpts1s_id;
track_type = TRACK_RIGHT;
}
//近角点过少,进入远线控制
if ((Xfound && (Lpt0_rpts0s_id < 0.2 / RESAMPLEDIST && Lpt1_rpts1s_id < 0.2 / RESAMPLEDIST)) || (pts_resample_left_count <20 && pts_resample_right_count<20)) {
cross_type = CROSS_IN;
}
}
//远线控制进十字,begin_y渐变靠近防丢线
if (cross_type == CROSS_IN) {
//寻远线,算法与近线相同
cross_farline();
if (pts_resample_left_count < 5 && pts_resample_right_count < 5) {
Both_Boder_None_Cross++;
}
if (Both_Boder_None_Cross > 2 && pts_resample_left_count > 20 && pts_resample_right_count > 20) {
cross_type = CROSS_NONE;
Both_Boder_None_Cross = 0;
}
if (far_Lpt1_found) { track_type = TRACK_RIGHT; }
else if (far_Lpt0_found) { track_type = TRACK_LEFT; }
else if (Both_Boder_None_Cross > 0 && pts_far_resample_right_count < 5) { track_type = TRACK_RIGHT; }
else if (Both_Boder_None_Cross > 0 && pts_far_resample_left_count < 5) { track_type = TRACK_LEFT; }
}
}
void cross_farline(){
int cross_width = 4;
int far_y1 = 0, far_y2 = 0;
int far_x1 = 0, far_x2 = 0;
bool white_found = false;
pts_far_left_count = sizeof(pts_far_left) / sizeof(pts_far_left[0]);
int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L;
for(;w1>cross_width*2; w1--)
{
if(GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD) {
far_x1 = w1 - cross_width;
break;
}
}
/*如果一行全为白色没写*/
if (far_x1 <= 20)
{
far_x1 = 20;
}
for (; h1 > 0; h1--) {
//先黑后白先找white
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, far_x1) >= FIX_BINTHRESHOLD) { white_found = true; }
if (GET_PIX_1C(mt9v03x_image_copy[0], h1 - 1, far_x1) < FIX_BINTHRESHOLD && white_found) {
far_y1 = h1;
break;
}
}
if (GET_PIX_1C(mt9v03x_image_copy[0], far_y1, far_x1) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y1, far_x1, pts_far_left, &pts_far_left_count);
}
else pts_far_left_count = 0;
int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R;
white_found = false;
pts_far_right_count = sizeof(pts_far_right) / sizeof(pts_far_right[0]);
for(;w2 < IMAGE_W - cross_width*2; w2++)
{
if(GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD) {
far_x2 = w2 + cross_width;
break;
}
}
/*如果一行全为白色没写*/
if (far_x2 >= 100)
{
far_x2 = 100;
}
for (; h2 > 0; h2--) {
//先黑后白先找white
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, far_x2) >= FIX_BINTHRESHOLD) { white_found = true; }
if (GET_PIX_1C(mt9v03x_image_copy[0], h2 - 1, far_x2) < FIX_BINTHRESHOLD && white_found) {
far_y2 = h2;
break;
}
}
if (GET_PIX_1C(mt9v03x_image_copy[0], far_y2, far_x2) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y2, far_x2, pts_far_right, &pts_far_right_count);
}
else pts_far_right_count = 0;
//透视变换
for (int i = 0; i < pts_far_left_count; i++) {
pts_far_inv_l[i][1] = fclip(InverseMapW[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_W);
pts_far_inv_l[i][0] = fclip(InverseMapH[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_H);
}
pts_far_inv_l_count = pts_far_left_count;
for (int i = 0; i < pts_far_right_count; i++) {
pts_far_inv_r[i][1] = fclip(InverseMapW[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_W);
pts_far_inv_r[i][0] = fclip(InverseMapH[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_H);
}
pts_far_inv_r_count = pts_far_right_count;
// 边线滤波
GetLinesFilter(pts_far_inv_l, pts_far_inv_l_count, pts_far_filter_l, (int) round(FILTER_KERNELSIZE));
pts_far_filter_l_count = pts_far_inv_l_count;
GetLinesFilter(pts_far_inv_r, pts_far_inv_r_count, pts_far_filter_r, (int) round(FILTER_KERNELSIZE));
pts_far_filter_r_count = pts_far_inv_r_count;
// 边线等距采样
pts_far_resample_left_count = sizeof(pts_far_resample_left) / sizeof(pts_far_resample_left[0]);
GetLinesResample(pts_far_filter_l, pts_far_filter_l_count, pts_far_resample_left, &pts_far_resample_left_count, RESAMPLEDIST * PIXPERMETER);
pts_far_resample_right_count = sizeof(pts_far_resample_right) / sizeof(pts_far_resample_right[0]);
GetLinesResample(pts_far_filter_r, pts_far_filter_r_count, pts_far_resample_right, &pts_far_resample_right_count, RESAMPLEDIST * PIXPERMETER);
int valid_far_points_count = 0;
for (int i = 0; i < pts_far_resample_left_count; i++) {
int x = pts_far_resample_left[i][1];
int y = pts_far_resample_left[i][0];
if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) {
pts_far_resample_left[valid_far_points_count][0] = pts_far_resample_left[i][0];
pts_far_resample_left[valid_far_points_count][1] = pts_far_resample_left[i][1];
valid_far_points_count++;
}
}
pts_far_resample_left_count = valid_far_points_count;
valid_far_points_count = 0;
for (int i = 0; i < pts_far_resample_right_count; i++) {
int x = pts_far_resample_right[i][1];
int y = pts_far_resample_right[i][0];
if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) {
pts_far_resample_right[valid_far_points_count][0] = pts_far_resample_right[i][0];
pts_far_resample_right[valid_far_points_count][1] = pts_far_resample_right[i][1];
valid_far_points_count++;
}
}
pts_far_resample_right_count = valid_far_points_count;
// 边线角度变化率
local_angle_points(pts_far_resample_left, pts_far_resample_left_count, far_angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
far_angle_left_num = pts_far_resample_left_count;
local_angle_points(pts_far_resample_right, pts_far_resample_right_count, far_angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
far_angle_right_num = pts_far_resample_right_count;
// 角度变化率非极大值抑制
nms_angle(far_angle_left, far_angle_left_num, far_angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
far_angle_new_left_num = far_angle_left_num;
nms_angle(far_angle_right, far_angle_right_num, far_angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
far_angle_new_right_num = far_angle_right_num;
// 找远线上的L角点
far_Lpt0_found = far_Lpt1_found = false;
// is_far_straight0 = pts_far_resample_left_count > 1.0 / RESAMPLEDIST;
// is_far_straight1 = pts_far_resample_right_count > 1.0 / RESAMPLEDIST;
for (int i = 0; i < pts_far_resample_left_count; i++) {
if (far_angle_new_left[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1);
float conf = fabs(far_angle_left[i]) - (fabs(far_angle_left[im1]) + fabs(far_angle_left[ip1])) / 2;
//L角点阈值
if (far_Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.7 / RESAMPLEDIST) {
far_Lpt0_rpts0s_id = i;
far_Lpt0_found = true;
}
}
for (int i = 0; i < pts_far_resample_right_count; i++) {
if (far_angle_new_right[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1);
float conf = fabs(far_angle_right[i]) - (fabs(far_angle_right[im1]) + fabs(far_angle_right[ip1])) / 2;
if (far_Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.7 / RESAMPLEDIST) {
far_Lpt1_rpts1s_id = i;
far_Lpt1_found = true;
}
}
}

View File

@@ -1,19 +0,0 @@
#ifndef CROSS
#define CROSS
enum cross_type_e {
CROSS_NONE, // 非十字模式
CROSS_BEGIN, // 找到左右两个L角点
CROSS_IN, // 两个L角点很近即进入十字内部(此时切换远线控制)
};
extern enum cross_type_e cross_type;
extern int32_t Both_Boder_None_Cross;
extern int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id;
void CheckCross(void);
void RunCross(void);
void cross_farline(void);
#endif /* COMMON_H_ */

View File

@@ -1,95 +0,0 @@
#include "gl_data.h"
uint8_t (*Img_Gray)[MT9V03X_W];
int32_t pts_left[PT_MAXLEN][2];
int32_t pts_right[PT_MAXLEN][2];
int32_t pts_left_count;
int32_t pts_right_count;
int32_t pts_far_left[PT_MAXLEN][2];
int32_t pts_far_right[PT_MAXLEN][2];
int32_t pts_far_left_count;
int32_t pts_far_right_count;
float pts_inv_l[PT_MAXLEN][2];
float pts_inv_r[PT_MAXLEN][2];
int32_t pts_inv_l_count;
int32_t pts_inv_r_count;
float pts_far_inv_l[PT_MAXLEN][2];
float pts_far_inv_r[PT_MAXLEN][2];
int32_t pts_far_inv_l_count;
int32_t pts_far_inv_r_count;
float pts_filter_l[PT_MAXLEN][2];
float pts_filter_r[PT_MAXLEN][2];
int32_t pts_filter_l_count;
int32_t pts_filter_r_count;
float pts_far_filter_l[PT_MAXLEN][2];
float pts_far_filter_r[PT_MAXLEN][2];
int32_t pts_far_filter_l_count;
int32_t pts_far_filter_r_count;
float pts_resample_left[PT_MAXLEN][2];
float pts_resample_right[PT_MAXLEN][2];
int32_t pts_resample_left_count;
int32_t pts_resample_right_count;
float pts_far_resample_left[PT_MAXLEN][2];
float pts_far_resample_right[PT_MAXLEN][2];
int32_t pts_far_resample_left_count;
int32_t pts_far_resample_right_count;
float mid_left[PT_MAXLEN][2];
float mid_right[PT_MAXLEN][2];
int32_t mid_left_count;
int32_t mid_right_count;
float angle_new_left[PT_MAXLEN];
float angle_new_right[PT_MAXLEN];
int angle_new_left_num;
int angle_new_right_num;
float far_angle_new_left[PT_MAXLEN];
float far_angle_new_right[PT_MAXLEN];
int far_angle_new_left_num;
int far_angle_new_right_num;
uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W];
float angle_left[PT_MAXLEN];
float angle_right[PT_MAXLEN];
int angle_left_num;
int angle_right_num;
float far_angle_left[PT_MAXLEN];
float far_angle_right[PT_MAXLEN];
int far_angle_left_num;
int far_angle_right_num;
int Lpt0_rpts0s_id;
int Lpt1_rpts1s_id;
bool Lpt0_found;
bool Lpt1_found;
int Lpt1[2];
int Lpt0[2];
int far_Lpt1[2];
int far_Lpt0[2];
int Lpt_in0_rpts0s_id;
int Lpt_in1_rpts1s_id;
bool Lpt_in0_found;
bool Lpt_in1_found;
int Lpt_in1[2];
int Lpt_in0[2];
bool is_straight0;
bool is_straight1;
bool is_far_straight0;
bool is_far_straight1;
bool is_turn0;
bool is_turn1;
float rptsn[PT_MAXLEN][2];
int32_t rptsn_num;
float aim_distance;
track_type_e track_type = TRACK_RIGHT;

View File

@@ -1,108 +0,0 @@
#pragma once
#ifndef _GL_DATA_H
#define _GL_DATA_H
#include "gl_headfile.h"
typedef enum track_type_e {
TRACK_LEFT = 0,
TRACK_RIGHT,
} track_type_e;
extern uint8_t (*Img_Gray)[MT9V03X_W];
//未逆透视前边线数组
extern int32_t pts_left[PT_MAXLEN][2];
extern int32_t pts_right[PT_MAXLEN][2];
extern int32_t pts_left_count;
extern int32_t pts_right_count;
extern int32_t pts_far_left[PT_MAXLEN][2];
extern int32_t pts_far_right[PT_MAXLEN][2];
extern int32_t pts_far_left_count;
extern int32_t pts_far_right_count;
//逆透视后边线数组
extern float pts_inv_l[PT_MAXLEN][2];
extern float pts_inv_r[PT_MAXLEN][2];
extern int32_t pts_inv_l_count;
extern int32_t pts_inv_r_count;
extern float pts_far_inv_l[PT_MAXLEN][2];
extern float pts_far_inv_r[PT_MAXLEN][2];
extern int32_t pts_far_inv_l_count;
extern int32_t pts_far_inv_r_count;
//滤波后边线数组
extern float pts_filter_l[PT_MAXLEN][2];
extern float pts_filter_r[PT_MAXLEN][2];
extern int32_t pts_filter_l_count;
extern int32_t pts_filter_r_count;
extern float pts_far_filter_l[PT_MAXLEN][2];
extern float pts_far_filter_r[PT_MAXLEN][2];
extern int32_t pts_far_filter_l_count;
extern int32_t pts_far_filter_r_count;
//重采样后边线数组
extern float pts_resample_left[PT_MAXLEN][2];
extern float pts_resample_right[PT_MAXLEN][2];
extern int32_t pts_resample_left_count;
extern int32_t pts_resample_right_count;
extern float pts_far_resample_left[PT_MAXLEN][2];
extern float pts_far_resample_right[PT_MAXLEN][2];
extern int32_t pts_far_resample_left_count;
extern int32_t pts_far_resample_right_count;
extern float mid_left[PT_MAXLEN][2];
extern float mid_right[PT_MAXLEN][2];
extern int32_t mid_left_count;
extern int32_t mid_right_count;
extern float angle_new_left[PT_MAXLEN];
extern float angle_new_right[PT_MAXLEN];
extern int angle_new_left_num;
extern int angle_new_right_num;
extern float far_angle_new_left[PT_MAXLEN];
extern float far_angle_new_right[PT_MAXLEN];
extern int far_angle_new_left_num;
extern int far_angle_new_right_num;
extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W];
extern float angle_left[PT_MAXLEN];
extern float angle_right[PT_MAXLEN];
extern int angle_left_num;
extern int angle_right_num;
extern float far_angle_left[PT_MAXLEN];
extern float far_angle_right[PT_MAXLEN];
extern int far_angle_left_num;
extern int far_angle_right_num;
extern int Lpt0_rpts0s_id;
extern int Lpt1_rpts1s_id;
extern bool Lpt0_found;
extern bool Lpt1_found;
extern int Lpt1[2];
extern int Lpt0[2];
extern int far_Lpt1[2];
extern int far_Lpt0[2];
extern int Lpt_in0_rpts0s_id;
extern int Lpt_in1_rpts1s_id;
extern bool Lpt_in0_found;
extern bool Lpt_in1_found;
extern int Lpt_in1[2];
extern int Lpt_in0[2];
extern bool is_straight0;
extern bool is_straight1;
extern bool is_far_straight0;
extern bool is_far_straight1;
extern bool is_turn0;
extern bool is_turn1;
extern float rptsn[PT_MAXLEN][2];
extern int32_t rptsn_num;
extern float aim_distance;
extern track_type_e track_type;
#endif

View File

@@ -1,52 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
enum garage_type_e garage_type = GARAGE_NONE;
float (*garage_rpts)[2];
int garage_rpts_num;
float calculate_vector_angle(float x1, float y1, float x2, float y2) {
float dx = x2 - x1;
float dy = y2 - y1;
float vector_length = sqrt(dx*dx + dy*dy);
float angle_radians = acos(dx / vector_length);
float angle_degrees = angle_radians * 180 / M_PI;
return angle_degrees;
}
void CheckGarage() {
int change_num = 0;
int check_garage_h = 60;
for (int check_garage_w = 30; check_garage_w < IMAGE_W - 30; check_garage_w++)
{
if ((GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) < FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) >= FIX_BINTHRESHOLD) ||
(GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) >= FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) < FIX_BINTHRESHOLD))
{
change_num++;
}
}
if (change_num > 7)
{
garage_type = GARAGE_FOUND;
//printf("跳变点的数量为:%d\r\n", change_num);
}
change_num = 0;
}
void RunGarage(){
if (garage_type == GARAGE_FOUND)
{
printf("识别到车库\r\n");
}
}

View File

@@ -1,24 +0,0 @@
#ifndef GARAGE
#define GARAGE
enum garage_type_e {
GARAGE_NONE, // 非车库模式
GARAGE_FOUND,
GARAGE_OUT_LEFT,
GARAGE_OUT_RIGHT, // 出库陀螺仪转过45°即出库完毕
GARAGE_FOUND_LEFT,
GARAGE_FOUND_RIGHT, // 发现车库,即斑马线+单侧L角点(未使用)
GARAGE_IN_LEFT,
GARAGE_IN_RIGHT, // 进库,发现车库后判断第几次,从而决定是否进库
GARAGE_PASS_LEFT,
GARAGE_PASS_RIGHT, // 不进库,发现车库后判断第几次,从而决定是否进库
GARAGE_STOP // 进库完毕,停车
};
extern enum garage_type_e garage_type;
float calculate_vector_angle(float x1, float y1, float x2, float y2);\
void CheckGarage(void);
void RunGarage(void);
#endif /* COMMON_H_ */

View File

@@ -1,86 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
void get_corners() {
Lpt0_found = Lpt1_found = false;
Lpt_in0_found = Lpt_in1_found = false;
is_straight0 = pts_resample_left_count > 1.0 / RESAMPLEDIST;
is_straight1 = pts_resample_right_count > 1.0 / RESAMPLEDIST;
for (int i = 0; i < pts_resample_left_count; i++) {
if (angle_new_left[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1);
float conf = fabs(angle_left[i]) - (fabs(angle_left[im1]) + fabs(angle_left[ip1])) / 2;
//L角点阈值
if (Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.5 / RESAMPLEDIST) {
Lpt0_rpts0s_id = i;
Lpt0_found = true;
transform(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],&Lpt0[1],&Lpt0[0]);
}
//长直道阈值
if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight0 = false;
if (Lpt0_found == true && is_straight0 == false) break;
}
// if(Lpt0_found){
// float angle1 = calculate_vector_angle(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],pts_resample_left[Lpt0_rpts0s_id+5][1],pts_resample_left[Lpt0_rpts0s_id+5][0]);
// if(angle1 < 85.) {
// Lpt_in0_found = true;
// Lpt0_found = false;
// Lpt_in0_rpts0s_id = Lpt0_rpts0s_id;
// }
// }
// else{
// is_turn0 = is_curve(angle_left ,clip(angle_left_num - 10, 0,angle_left_num),0.05);
// if(is_turn0){
// state_type = TURN_STATE;
// }
// }
if(is_straight0){
state_type = STRAIGHT_STATE;
}
for (int i = 0; i < pts_resample_right_count; i++) {
if (angle_new_right[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1);
float conf = fabs(angle_right[i]) - (fabs(angle_right[im1]) + fabs(angle_right[ip1])) / 2;
if (Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.5 / RESAMPLEDIST) {
Lpt1_rpts1s_id = i;
Lpt1_found = true;
transform(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],&Lpt1[1],&Lpt1[0]);
}
if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight1 = false;
if (Lpt1_found == true && is_straight1 == false) break;
}
// if(Lpt1_found){
// float angle2 = calculate_vector_angle(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],pts_resample_right[Lpt1_rpts1s_id+5][1],pts_resample_right[Lpt1_rpts1s_id+5][0]);
// if(angle2 > 100.) {
// Lpt_in1_found = true;
// Lpt1_found = false;
// Lpt_in1_rpts1s_id = Lpt1_rpts1s_id;
// }
// }
//else{
// is_turn1 = is_curve(angle_right, clip(angle_right_num - 10,0 ,angle_right_num), 0.05);
// if(is_turn1){
// state_type = TURN_STATE;
// }
//}
if(is_straight1){
state_type = STRAIGHT_STATE;
}
}

View File

@@ -1,8 +0,0 @@
#ifndef GET_CORNERS
#define GET_CORNERS
void get_corners(void);
#endif /* COMMON_H_ */

View File

@@ -1,239 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
const int32_t direction_front[4][2] = {{0, -1},{1, 0},{0, 1},{-1, 0}};
const int32_t direction_frontleft[4][2] = {{-1, -1},{1, -1},{1, 1},{-1, 1}};
const int32_t direction_frontright[4][2] ={{1, -1},{1, 1},{-1, 1},{-1, -1}};
void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num)
{
const int32_t half = block_size / 2;
int step = 0;
int dir = 0;
int turn = 0;
printf("shuzhi: %d\r\n", half);
while (step < *line_num && half < w && w < IMAGE_W - half -1 && half < h && h < IMAGE_H - half -1 && turn < 4) {
int local_thres = 0;
for (int dh = -1 * half; dh <= half; dh++) {
for (int dw = -1 * half; dw <= half; dw++) {
local_thres += GET_PIX_1C(img_gray, h + dh, w + dw);
}
}
local_thres /= block_size * block_size;
local_thres -= down_value;
int front_value = GET_PIX_1C(img_gray, h+direction_front[dir][1], w + direction_front[dir][0]);
int frontleft_value = GET_PIX_1C(img_gray, h + direction_frontleft[dir][1], w + direction_frontleft[dir][0]);
if (front_value < local_thres) {
dir = (dir + 1) % 4;
turn++;
} else if (frontleft_value < local_thres) {
w += direction_front[dir][0];
h += direction_front[dir][1];
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
} else {
w += direction_frontleft[dir][0];
h += direction_frontleft[dir][1];
dir = (dir + 3) % 4;
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
}
}
*line_num = step;
}
void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num)
{
int half = block_size / 2;
int step = 0, dir = 0, turn = 0;
while (step < *line_num && 0 < w && w < IMAGE_W - 1 && 0 < h && h < IMAGE_H -1 && turn < 4) {
int local_thres = 0;
for (int dh = -half; dh <= half; dh++) {
for (int dw = -half; dw <= half; dw++) {
local_thres += GET_PIX_1C(img_gray, h + dh, w + dw);
}
}
local_thres /= block_size * block_size;
local_thres -= down_value;
int front_value = GET_PIX_1C(img_gray, h + direction_front[dir][1], w + direction_front[dir][0]);
int frontright_value = GET_PIX_1C(img_gray, h + direction_frontright[dir][1], w + direction_frontright[dir][0]);
if (front_value < local_thres) {
dir = (dir + 3) % 4;
turn++;
} else if (frontright_value < local_thres) {
w += direction_front[dir][0];
h += direction_front[dir][1];
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
} else {
w += direction_frontright[dir][0];
h += direction_frontright[dir][1];
dir = (dir + 1) % 4;
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
}
}
*line_num = step;
}
void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize)
{
int half = kernelsize / 2;
for (int i = 0; i < pts_in_count; i++) {
pts_out[i][0] = 0;
pts_out[i][1] = 0;
for (int j = -half; j <= half; j++) {
pts_out[i][0] += pts_in[clip(i + j, 0, pts_in_count - 1)][0] * (half + 1 - abs(j));
pts_out[i][1] += pts_in[clip(i + j, 0, pts_in_count - 1)][1] * (half + 1 - abs(j));
}
pts_out[i][0] /= (2 * half + 2) * (half + 1) / 2;
pts_out[i][1] /= (2 * half + 2) * (half + 1) / 2;
}
}
void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist)
{
if (num1 < 0) {
*num2 = 0;
return;
}
pts_out[0][0] = pts_in[0][0];
pts_out[0][1] = pts_in[0][1];
int len = 1;
for (int i = 0; i < num1 - 1 && len < *num2; i++) {
float x0 = pts_in[i][1];
float y0 = pts_in[i][0];
float x1 = pts_in[i + 1][1];
float y1 = pts_in[i + 1][0];
do {
float x = pts_out[len - 1][1];
float y = pts_out[len - 1][0];
float dx0 = x0 - x;
float dy0 = y0 - y;
float dx1 = x1 - x;
float dy1 = y1 - y;
float dist0 = sqrt(dx0 * dx0 + dy0 * dy0);
float dist1 = sqrt(dx1 * dx1 + dy1 * dy1);
float r0 = (dist1 - dist) / (dist1 - dist0);
float r1 = 1 - r0;
if (r0 < 0 || r1 < 0) break;
x0 = x0 * r0 + x1 * r1;
y0 = y0 * r0 + y1 * r1;
pts_out[len][1] = x0;
pts_out[len][0] = y0;
len++;
} while (len < *num2);
}
*num2 = len;
}
void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist) {
for (int i = 0; i < num; i++) {
if (i <= 0 || i >= num - 1) {
angle_out[i] = 0;
continue;
}
float dx1 = pts_in[i][0] - pts_in[clip(i - dist, 0, num - 1)][0];
float dy1 = pts_in[i][1] - pts_in[clip(i - dist, 0, num - 1)][1];
float dn1 = sqrtf(dx1 * dx1 + dy1 * dy1);
float dx2 = pts_in[clip(i + dist, 0, num - 1)][0] - pts_in[i][0];
float dy2 = pts_in[clip(i + dist, 0, num - 1)][1] - pts_in[i][1];
float dn2 = sqrtf(dx2 * dx2 + dy2 * dy2);
float c1 = dx1 / dn1;
float s1 = dy1 / dn1;
float c2 = dx2 / dn2;
float s2 = dy2 / dn2;
angle_out[i] = atan2f(c1 * s2 - c2 * s1, c2 * c1 + s2 * s1); //得到弧度 类似angle_out = 0.3491
}
}
void nms_angle(float angle_in[], int num, float angle_out[], int kernel) {
int half = kernel / 2;
for (int i = 0; i < num; i++) {
angle_out[i] = angle_in[i];
for (int j = -half; j <= half; j++) {
if (fabs(angle_in[clip(i + j, 0, num - 1)]) > fabs(angle_out[i])) {
angle_out[i] = 0;
break;
}
}
}
}
void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist)
{
for (int i = 0; i < pts_left_count; i++) {
float dx = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][1] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][1];
float dy = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][0] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][0];
float dn = sqrt(dx * dx + dy * dy);
dx /= dn;
dy /= dn;
mid_left[i][0] = pts_left[i][0] + dx * dist;
mid_left[i][1] = pts_left[i][1] - dy * dist;
}
}
void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist)
{
for (int i = 0; i < pts_right_count; i++) {
float dx = pts_right[clip(i + approx_num, 0, pts_right_count -1)][1] - pts_right[clip(i - approx_num, 0, pts_right_count -1 )][1];
float dy = pts_right[clip(i + approx_num, 0, pts_right_count -1)][0] - pts_right[clip(i - approx_num, 0, pts_right_count -1)][0];
float dn = sqrt(dx * dx + dy * dy);
dx /= dn;//sin
dy /= dn;//cos
mid_right[i][0] = pts_right[i][0] - dx * dist;
mid_right[i][1] = pts_right[i][1] + dy * dist;
}
}
int is_curve(float angle[], int n, float threshold) {
for (int i = 1; i < n - 1; i++) {
float da = fabs(angle[i] - angle[i-1]);
float db = fabs(angle[i+1] - angle[i]);
if (da > threshold && db > threshold) {
return 1; // 是弯道
}
}
return 0; // 不是弯道
}

View File

@@ -1,15 +0,0 @@
#ifndef HANDLE_IMG
#define HANDLE_IMG
void SearchStartPoint_Left(uint8_t img_gray[], int32_t* h_start, int32_t* w_start, uint8_t threshold);
void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize);
void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist);
void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist);
void nms_angle(float angle_in[], int num, float angle_out[], int kernel);
void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist);
void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist);
int is_curve(float angle[], int n, float threshold) ;
#endif /* COMMON_H_ */

View File

@@ -1,18 +0,0 @@
#ifndef GL_HEADFILE
#define GL_HEADFILE
#include "gl_state.h"
#include "gl_img_process.h"
#include "gl_common.h"
#include "main.h"
#include "gl_handle_img.h"
#include "gl_transform_table.h"
#include "gl_get_corners.h"
#include "gl_garage.h"
#include "gl_tracking.h"
#include "gl_circle.h"
#include "gl_cross.h"
#include "gl_data.h"
#include "math.h"
#endif /* STATE_H_ */

View File

@@ -1,111 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
/*******************************边线处理****************************************/
/*
@author: glz
@brief:
*/
void img_processing() {
int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L;
pts_left_count = sizeof(pts_left) / sizeof(pts_left[0]);
for (; w1 > 0; w1--) {
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD)
break;
}
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h1, w1, pts_left, &pts_left_count);
}
else pts_left_count = 0;
int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R;
pts_right_count = sizeof(pts_right) / sizeof(pts_right[0]);
for (; w2 < IMAGE_W - 1; w2++) {
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD)
break;
}
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h2, w2, pts_right, &pts_right_count);
}
else pts_right_count = 0;
//透视变换
for (int i = 0; i < pts_left_count; i++) {
pts_inv_l[i][1] = fclip(InverseMapW[pts_left[i][0]][pts_left[i][1]],0,IMAGE_W);
pts_inv_l[i][0] = fclip(InverseMapH[pts_left[i][0]][pts_left[i][1]],0,IMAGE_H);
}
pts_inv_l_count = pts_left_count;
for (int i = 0; i < pts_right_count; i++) {
pts_inv_r[i][1] = fclip(InverseMapW[pts_right[i][0]][pts_right[i][1]],0,IMAGE_W);
pts_inv_r[i][0] = fclip(InverseMapH[pts_right[i][0]][pts_right[i][1]],0,IMAGE_H);
}
pts_inv_r_count = pts_right_count;
// 边线滤波
GetLinesFilter(pts_inv_l, pts_inv_l_count, pts_filter_l, (int) round(FILTER_KERNELSIZE));
pts_filter_l_count = pts_inv_l_count;
GetLinesFilter(pts_inv_r, pts_inv_r_count, pts_filter_r, (int) round(FILTER_KERNELSIZE));
pts_filter_r_count = pts_inv_r_count;
// 边线等距采样
pts_resample_left_count = sizeof(pts_resample_left) / sizeof(pts_resample_left[0]);
GetLinesResample(pts_filter_l, pts_filter_l_count, pts_resample_left, &pts_resample_left_count, RESAMPLEDIST * PIXPERMETER);
pts_resample_right_count = sizeof(pts_resample_right) / sizeof(pts_resample_right[0]);
GetLinesResample(pts_filter_r, pts_filter_r_count, pts_resample_right, &pts_resample_right_count, RESAMPLEDIST * PIXPERMETER);
int valid_points_count = 0;
for (int i = 0; i < pts_resample_left_count; i++) {
int x = pts_resample_left[i][1];
int y = pts_resample_left[i][0];
if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) {
pts_resample_left[valid_points_count][0] = pts_resample_left[i][0];
pts_resample_left[valid_points_count][1] = pts_resample_left[i][1];
valid_points_count++;
}
}
pts_resample_left_count = valid_points_count;
valid_points_count = 0;
for (int i = 0; i < pts_resample_right_count; i++) {
int x = pts_resample_right[i][1];
int y = pts_resample_right[i][0];
if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) {
pts_resample_right[valid_points_count][0] = pts_resample_right[i][0];
pts_resample_right[valid_points_count][1] = pts_resample_right[i][1];
valid_points_count++;
}
}
pts_resample_right_count = valid_points_count;
// 边线角度变化率
local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
angle_left_num = pts_resample_left_count;
local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
angle_right_num = pts_resample_right_count;
// 角度变化率非极大值抑制
nms_angle(angle_left, angle_left_num, angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
angle_new_left_num = angle_left_num;
nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
angle_new_right_num = angle_right_num;
// 左右中线跟踪
GetMidLine_Left(pts_resample_left, pts_resample_left_count, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_left_count = pts_resample_left_count;
GetMidLine_Right(pts_resample_right, pts_resample_right_count, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_right_count = pts_resample_right_count;
}

View File

@@ -1,10 +0,0 @@
#ifndef IMG_PROCESS
#define IMG_PROCESS
#include "zf_common_headfile.h"
void img_processing(void);
void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num);
void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num);
#endif /* STATE_H_ */

View File

@@ -1,4 +0,0 @@
#include "gl_state.h"
#include "gl_headfile.h"
enum state_type_e state_type =0;

View File

@@ -1,28 +0,0 @@
#ifndef STATE_H_
#define STATE_H_
enum state_type_e {
COMMON_STATE = 0,
CROSS_STATE,
HALF_STATE,
CIRCLE_IN_STATE,
CIRCLE_BEGIN_STATE,
CIRCLE_RUNNING_STATE,
CIRCLE_OUT_STATE,
TURN_STATE,
STRAIGHT_STATE,
BREAK_STATE,
BAR_STATE,
RAMP_STATE,
GARAGE_OUT_STATE,
GARAGE_IN_STATE,
GARAGE_STOP_STATE,
GARAGE_PASS_STATE,
};
extern enum state_type_e state_type;
#define CROSS_AIM (0.49f)
#define COMMON_AIM (0.31f)
#endif /* STATE_H_ */

View File

@@ -1,133 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
float (*mid_track)[2];
int32_t mid_track_count;
float near_angle;
float pure_angle;
float (*rpts)[2];
int rpts_num;
void tracking(){
if (pts_resample_left_count < pts_resample_right_count / 2 && pts_resample_left_count < 50) {
track_type = TRACK_RIGHT;
} else if (pts_resample_right_count < pts_resample_left_count / 2 && pts_resample_right_count < 58) {
track_type = TRACK_LEFT;
} else if (pts_resample_left_count < 20 && pts_resample_right_count > pts_resample_left_count) {
track_type = TRACK_RIGHT;
} else if (pts_resample_right_count < 20 && pts_resample_left_count > pts_resample_right_count) {
track_type = TRACK_LEFT;
}
}
void ElementJudge() {
CheckGarage();
if (garage_type == GARAGE_NONE) {
CheckCross();
if (cross_type == CROSS_NONE) {
CheckCircle();
}
}
if (garage_type != GARAGE_NONE)
{
cross_type = CROSS_NONE;
circle_type = CIRCLE_NONE;
}
}
void ElementRun() {
if (garage_type != GARAGE_NONE) {
RunGarage();
}
else if (cross_type != CROSS_NONE) {
RunCross();
}
else if (circle_type != CIRCLE_NONE) {
RunCircle();
}
}
void MidLineTrack() {
if (cross_type == CROSS_IN) {
if (track_type == TRACK_LEFT) {
mid_track = mid_left; // 这是为了预先分配内存
GetMidLine_Left(pts_far_resample_left + far_Lpt0_rpts0s_id, pts_far_resample_left_count - far_Lpt0_rpts0s_id, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_track_count = pts_far_resample_left_count - far_Lpt0_rpts0s_id;
} else {
mid_track = mid_right; // 这是为了预先分配内存
GetMidLine_Right(pts_far_resample_right + far_Lpt1_rpts1s_id, pts_far_resample_right_count - far_Lpt1_rpts1s_id, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_track_count =pts_far_resample_right_count - far_Lpt1_rpts1s_id;
}
} else {
if (track_type == TRACK_LEFT) {
mid_track = mid_left;
mid_track_count = mid_left_count;
} else {
mid_track = mid_right;
mid_track_count = mid_right_count;
}
}
// 车轮对应点 (纯跟踪起始点)
float cx = InverseMapW[(int) (IMAGE_H * 0.75f)][94];
float cy = InverseMapH[(int) (IMAGE_H * 0.75f)][94];
// 找最近点 (起始点中线归一化)
float min_dist = 1e10;
int begin_id = -1;
for (int i = 0; i < mid_track_count; i++) {
float dx = mid_track[i][1] - cx;
float dy = mid_track[i][0] - cy;
float dist = sqrt(dx * dx + dy * dy);
if (dist < min_dist) {
min_dist = dist;
begin_id = i;
}
}
if (begin_id >= 0 && mid_track_count - begin_id >= 3){
// 归一化中线
mid_track[begin_id][0] = cy;
mid_track[begin_id][1] = cx;
rptsn_num = sizeof(rptsn) / sizeof(rptsn[0]);
GetLinesResample(mid_track + begin_id, mid_track_count - begin_id, rptsn, &rptsn_num, RESAMPLEDIST * PIXPERMETER );
// 远预锚点位置
int aim_idx = clip(round(aim_distance / RESAMPLEDIST), 0, rptsn_num - 1);
//近锚点位置
int aim_idx_near = clip(round(0.25 / RESAMPLEDIST), 0, rptsn_num - 1);
// 计算远锚点偏差值
float dx = rptsn[aim_idx][1] - cx;
float dy = cy - rptsn[aim_idx][0] + 0.2 * PIXPERMETER;
float dn = sqrt(dx * dx + dy * dy);
//float error = -atan2f(dx, dy) * 180 / PI;
// 计算近锚点偏差值
float dx_near = rptsn[aim_idx_near][1] - cx;
float dy_near = cy - rptsn[aim_idx_near][0] + 0.2 * PIXPERMETER;
float dn_near = sqrt(dx_near * dx_near + dy_near * dy_near);
//float error_near = -atan2f(dx_near, dy_near) * 180 / PI;
//考虑近点
near_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx_near / dn_near / dn_near) / PI * 180 ;
//考虑远点
pure_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx/ dn / dn) / PI * 180 ;
}
}

View File

@@ -1,11 +0,0 @@
#ifndef TRACKING
#define TRACKING
void tracking(void);
void ElementJudge(void);
void ElementRun(void);
void MidLineTrack(void);
#endif /* STATE_H_ */

View File

@@ -1,190 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
float H_inv[3][3] = {{0.092, -0.116, 7.559},
{0.002, 0, 2.415},
{0, -0.001, 0.161}};
// 逆变换,俯视->原图
void transform(float X, float Y, int* x, int* y) {
// Apply inverse transformation
double p[3] = {X, Y, 1.0};
double q[3] = {0.0, 0.0, 0.0};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
q[i] += H_inv[i][j] * p[j];
}
}
*x =(int) (q[0] / q[2]);
*y = (int) (q[1] / q[2]);
}
const float InverseMapH[80][140] = {
{-17.59, -17.51, -17.44, -17.36, -17.29, -17.21, -17.14, -17.07, -16.99, -16.92, -16.84, -16.77, -16.70, -16.62, -16.55, -16.48, -16.41, -16.34, -16.26, -16.19, -16.12, -16.05, -15.98, -15.91, -15.84, -15.77, -15.70, -15.63, -15.56, -15.49, -15.42, -15.35, -15.28, -15.21, -15.14, -15.07, -15.01, -14.94, -14.87, -14.80, -14.73, -14.67, -14.60, -14.53, -14.47, -14.40, -14.33, -14.27, -14.20, -14.13, -14.07, -14.00, -13.94, -13.87, -13.81, -13.74, -13.68, -13.61, -13.55, -13.49, -13.42, -13.36, -13.29, -13.23, -13.17, -13.10, -13.04, -12.98, -12.92, -12.85, -12.79, -12.73, -12.67, -12.61, -12.54, -12.48, -12.42, -12.36, -12.30, -12.24, -12.18, -12.12, -12.06, -12.00, -11.94, -11.88, -11.82, -11.76, -11.70, -11.64, -11.58, -11.52, -11.46, -11.40, -11.35, -11.29, -11.23, -11.17, -11.11, -11.06, -11.00, -10.94, -10.88, -10.83, -10.77, -10.71, -10.66, -10.60, -10.54, -10.49, -10.43, -10.37, -10.32, -10.26, -10.21, -10.15, -10.10, -10.04, -9.99, -9.93, -9.88, -9.82, -9.77, -9.71, -9.66, -9.61, -9.55, -9.50, -9.44, -9.39, -9.34, -9.28, -9.23, -9.18, -9.13, -9.07, -9.02, -8.97, -8.92, -8.86},
{-12.23, -12.17, -12.10, -12.04, -11.98, -11.91, -11.85, -11.78, -11.72, -11.66, -11.59, -11.53, -11.47, -11.40, -11.34, -11.28, -11.22, -11.16, -11.09, -11.03, -10.97, -10.91, -10.85, -10.79, -10.73, -10.66, -10.60, -10.54, -10.48, -10.42, -10.36, -10.30, -10.24, -10.18, -10.12, -10.07, -10.01, -9.95, -9.89, -9.83, -9.77, -9.71, -9.66, -9.60, -9.54, -9.48, -9.43, -9.37, -9.31, -9.25, -9.20, -9.14, -9.08, -9.03, -8.97, -8.92, -8.86, -8.80, -8.75, -8.69, -8.64, -8.58, -8.53, -8.47, -8.42, -8.36, -8.31, -8.25, -8.20, -8.15, -8.09, -8.04, -7.98, -7.93, -7.88, -7.82, -7.77, -7.72, -7.66, -7.61, -7.56, -7.51, -7.45, -7.40, -7.35, -7.30, -7.25, -7.19, -7.14, -7.09, -7.04, -6.99, -6.94, -6.89, -6.84, -6.79, -6.74, -6.68, -6.63, -6.58, -6.53, -6.48, -6.43, -6.38, -6.34, -6.29, -6.24, -6.19, -6.14, -6.09, -6.04, -5.99, -5.94, -5.89, -5.85, -5.80, -5.75, -5.70, -5.65, -5.61, -5.56, -5.51, -5.46, -5.42, -5.37, -5.32, -5.28, -5.23, -5.18, -5.14, -5.09, -5.04, -5.00, -4.95, -4.90, -4.86, -4.81, -4.77, -4.72, -4.67},
{-7.29, -7.23, -7.18, -7.12, -7.07, -7.01, -6.96, -6.90, -6.85, -6.79, -6.74, -6.68, -6.63, -6.58, -6.52, -6.47, -6.42, -6.36, -6.31, -6.26, -6.20, -6.15, -6.10, -6.04, -5.99, -5.94, -5.89, -5.84, -5.78, -5.73, -5.68, -5.63, -5.58, -5.53, -5.47, -5.42, -5.37, -5.32, -5.27, -5.22, -5.17, -5.12, -5.07, -5.02, -4.97, -4.92, -4.87, -4.82, -4.77, -4.72, -4.67, -4.63, -4.58, -4.53, -4.48, -4.43, -4.38, -4.33, -4.29, -4.24, -4.19, -4.14, -4.10, -4.05, -4.00, -3.95, -3.91, -3.86, -3.81, -3.77, -3.72, -3.67, -3.63, -3.58, -3.53, -3.49, -3.44, -3.40, -3.35, -3.30, -3.26, -3.21, -3.17, -3.12, -3.08, -3.03, -2.99, -2.94, -2.90, -2.85, -2.81, -2.77, -2.72, -2.68, -2.63, -2.59, -2.55, -2.50, -2.46, -2.41, -2.37, -2.33, -2.28, -2.24, -2.20, -2.16, -2.11, -2.07, -2.03, -1.99, -1.94, -1.90, -1.86, -1.82, -1.77, -1.73, -1.69, -1.65, -1.61, -1.57, -1.52, -1.48, -1.44, -1.40, -1.36, -1.32, -1.28, -1.24, -1.20, -1.16, -1.12, -1.08, -1.04, -1.00, -0.96, -0.92, -0.88, -0.84, -0.80, -0.76},
{-2.71, -2.66, -2.61, -2.57, -2.52, -2.47, -2.43, -2.38, -2.33, -2.28, -2.24, -2.19, -2.14, -2.10, -2.05, -2.01, -1.96, -1.91, -1.87, -1.82, -1.78, -1.73, -1.69, -1.64, -1.60, -1.55, -1.51, -1.46, -1.42, -1.37, -1.33, -1.28, -1.24, -1.20, -1.15, -1.11, -1.07, -1.02, -0.98, -0.94, -0.89, -0.85, -0.81, -0.76, -0.72, -0.68, -0.63, -0.59, -0.55, -0.51, -0.47, -0.42, -0.38, -0.34, -0.30, -0.26, -0.21, -0.17, -0.13, -0.09, -0.05, -0.01, 0.03, 0.07, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48, 0.52, 0.56, 0.60, 0.64, 0.68, 0.72, 0.75, 0.79, 0.83, 0.87, 0.91, 0.95, 0.99, 1.03, 1.07, 1.10, 1.14, 1.18, 1.22, 1.26, 1.29, 1.33, 1.37, 1.41, 1.45, 1.48, 1.52, 1.56, 1.60, 1.63, 1.67, 1.71, 1.74, 1.78, 1.82, 1.85, 1.89, 1.93, 1.96, 2.00, 2.04, 2.07, 2.11, 2.15, 2.18, 2.22, 2.25, 2.29, 2.32, 2.36, 2.40, 2.43, 2.47, 2.50, 2.54, 2.57, 2.61, 2.64, 2.68, 2.71, 2.75, 2.78, 2.81, 2.85, 2.88, 2.92},
{1.54, 1.59, 1.63, 1.67, 1.71, 1.75, 1.79, 1.83, 1.87, 1.91, 1.95, 1.99, 2.03, 2.07, 2.11, 2.15, 2.18, 2.22, 2.26, 2.30, 2.34, 2.38, 2.42, 2.46, 2.49, 2.53, 2.57, 2.61, 2.65, 2.69, 2.72, 2.76, 2.80, 2.84, 2.87, 2.91, 2.95, 2.99, 3.02, 3.06, 3.10, 3.13, 3.17, 3.21, 3.25, 3.28, 3.32, 3.35, 3.39, 3.43, 3.46, 3.50, 3.54, 3.57, 3.61, 3.64, 3.68, 3.71, 3.75, 3.78, 3.82, 3.86, 3.89, 3.93, 3.96, 4.00, 4.03, 4.06, 4.10, 4.13, 4.17, 4.20, 4.24, 4.27, 4.31, 4.34, 4.37, 4.41, 4.44, 4.48, 4.51, 4.54, 4.58, 4.61, 4.64, 4.68, 4.71, 4.74, 4.78, 4.81, 4.84, 4.87, 4.91, 4.94, 4.97, 5.01, 5.04, 5.07, 5.10, 5.14, 5.17, 5.20, 5.23, 5.26, 5.30, 5.33, 5.36, 5.39, 5.42, 5.45, 5.49, 5.52, 5.55, 5.58, 5.61, 5.64, 5.67, 5.70, 5.74, 5.77, 5.80, 5.83, 5.86, 5.89, 5.92, 5.95, 5.98, 6.01, 6.04, 6.07, 6.10, 6.13, 6.16, 6.19, 6.22, 6.25, 6.28, 6.31, 6.34, 6.37},
{5.51, 5.54, 5.58, 5.61, 5.65, 5.68, 5.71, 5.75, 5.78, 5.82, 5.85, 5.88, 5.92, 5.95, 5.98, 6.02, 6.05, 6.08, 6.12, 6.15, 6.18, 6.22, 6.25, 6.28, 6.31, 6.35, 6.38, 6.41, 6.44, 6.48, 6.51, 6.54, 6.57, 6.60, 6.64, 6.67, 6.70, 6.73, 6.76, 6.79, 6.83, 6.86, 6.89, 6.92, 6.95, 6.98, 7.01, 7.04, 7.08, 7.11, 7.14, 7.17, 7.20, 7.23, 7.26, 7.29, 7.32, 7.35, 7.38, 7.41, 7.44, 7.47, 7.50, 7.53, 7.56, 7.59, 7.62, 7.65, 7.68, 7.71, 7.74, 7.77, 7.80, 7.83, 7.86, 7.88, 7.91, 7.94, 7.97, 8.00, 8.03, 8.06, 8.09, 8.11, 8.14, 8.17, 8.20, 8.23, 8.26, 8.28, 8.31, 8.34, 8.37, 8.40, 8.42, 8.45, 8.48, 8.51, 8.54, 8.56, 8.59, 8.62, 8.65, 8.67, 8.70, 8.73, 8.75, 8.78, 8.81, 8.84, 8.86, 8.89, 8.92, 8.94, 8.97, 9.00, 9.02, 9.05, 9.08, 9.10, 9.13, 9.16, 9.18, 9.21, 9.23, 9.26, 9.29, 9.31, 9.34, 9.36, 9.39, 9.42, 9.44, 9.47, 9.49, 9.52, 9.54, 9.57, 9.59, 9.62},
{9.21, 9.24, 9.27, 9.29, 9.32, 9.35, 9.38, 9.41, 9.44, 9.47, 9.49, 9.52, 9.55, 9.58, 9.61, 9.64, 9.66, 9.69, 9.72, 9.75, 9.78, 9.80, 9.83, 9.86, 9.89, 9.91, 9.94, 9.97, 10.00, 10.02, 10.05, 10.08, 10.10, 10.13, 10.16, 10.19, 10.21, 10.24, 10.27, 10.29, 10.32, 10.35, 10.37, 10.40, 10.42, 10.45, 10.48, 10.50, 10.53, 10.56, 10.58, 10.61, 10.63, 10.66, 10.68, 10.71, 10.74, 10.76, 10.79, 10.81, 10.84, 10.86, 10.89, 10.91, 10.94, 10.96, 10.99, 11.01, 11.04, 11.06, 11.09, 11.11, 11.14, 11.16, 11.19, 11.21, 11.24, 11.26, 11.29, 11.31, 11.33, 11.36, 11.38, 11.41, 11.43, 11.46, 11.48, 11.50, 11.53, 11.55, 11.57, 11.60, 11.62, 11.65, 11.67, 11.69, 11.72, 11.74, 11.76, 11.79, 11.81, 11.83, 11.86, 11.88, 11.90, 11.93, 11.95, 11.97, 12.00, 12.02, 12.04, 12.06, 12.09, 12.11, 12.13, 12.15, 12.18, 12.20, 12.22, 12.24, 12.27, 12.29, 12.31, 12.33, 12.36, 12.38, 12.40, 12.42, 12.44, 12.47, 12.49, 12.51, 12.53, 12.55, 12.58, 12.60, 12.62, 12.64, 12.66, 12.68},
{12.67, 12.69, 12.72, 12.74, 12.77, 12.79, 12.81, 12.84, 12.86, 12.89, 12.91, 12.93, 12.96, 12.98, 13.00, 13.03, 13.05, 13.07, 13.10, 13.12, 13.14, 13.17, 13.19, 13.21, 13.24, 13.26, 13.28, 13.30, 13.33, 13.35, 13.37, 13.40, 13.42, 13.44, 13.46, 13.49, 13.51, 13.53, 13.55, 13.57, 13.60, 13.62, 13.64, 13.66, 13.68, 13.71, 13.73, 13.75, 13.77, 13.79, 13.82, 13.84, 13.86, 13.88, 13.90, 13.92, 13.94, 13.97, 13.99, 14.01, 14.03, 14.05, 14.07, 14.09, 14.11, 14.14, 14.16, 14.18, 14.20, 14.22, 14.24, 14.26, 14.28, 14.30, 14.32, 14.34, 14.36, 14.38, 14.41, 14.43, 14.45, 14.47, 14.49, 14.51, 14.53, 14.55, 14.57, 14.59, 14.61, 14.63, 14.65, 14.67, 14.69, 14.71, 14.73, 14.75, 14.77, 14.79, 14.81, 14.83, 14.84, 14.86, 14.88, 14.90, 14.92, 14.94, 14.96, 14.98, 15.00, 15.02, 15.04, 15.06, 15.08, 15.10, 15.11, 15.13, 15.15, 15.17, 15.19, 15.21, 15.23, 15.25, 15.26, 15.28, 15.30, 15.32, 15.34, 15.36, 15.38, 15.39, 15.41, 15.43, 15.45, 15.47, 15.49, 15.50, 15.52, 15.54, 15.56, 15.58},
{15.92, 15.94, 15.96, 15.98, 16.00, 16.02, 16.04, 16.05, 16.07, 16.09, 16.11, 16.13, 16.15, 16.17, 16.19, 16.21, 16.23, 16.25, 16.27, 16.29, 16.31, 16.32, 16.34, 16.36, 16.38, 16.40, 16.42, 16.44, 16.46, 16.48, 16.49, 16.51, 16.53, 16.55, 16.57, 16.59, 16.61, 16.62, 16.64, 16.66, 16.68, 16.70, 16.72, 16.73, 16.75, 16.77, 16.79, 16.81, 16.82, 16.84, 16.86, 16.88, 16.90, 16.91, 16.93, 16.95, 16.97, 16.98, 17.00, 17.02, 17.04, 17.05, 17.07, 17.09, 17.11, 17.12, 17.14, 17.16, 17.18, 17.19, 17.21, 17.23, 17.24, 17.26, 17.28, 17.29, 17.31, 17.33, 17.35, 17.36, 17.38, 17.40, 17.41, 17.43, 17.45, 17.46, 17.48, 17.50, 17.51, 17.53, 17.55, 17.56, 17.58, 17.59, 17.61, 17.63, 17.64, 17.66, 17.68, 17.69, 17.71, 17.72, 17.74, 17.76, 17.77, 17.79, 17.81, 17.82, 17.84, 17.85, 17.87, 17.88, 17.90, 17.92, 17.93, 17.95, 17.96, 17.98, 17.99, 18.01, 18.03, 18.04, 18.06, 18.07, 18.09, 18.10, 18.12, 18.13, 18.15, 18.16, 18.18, 18.19, 18.21, 18.22, 18.24, 18.25, 18.27, 18.29, 18.30, 18.32},
{18.97, 18.98, 19.00, 19.02, 19.03, 19.05, 19.06, 19.08, 19.09, 19.11, 19.13, 19.14, 19.16, 19.17, 19.19, 19.20, 19.22, 19.24, 19.25, 19.27, 19.28, 19.30, 19.31, 19.33, 19.34, 19.36, 19.37, 19.39, 19.40, 19.42, 19.43, 19.45, 19.46, 19.48, 19.49, 19.51, 19.52, 19.54, 19.55, 19.57, 19.58, 19.60, 19.61, 19.63, 19.64, 19.66, 19.67, 19.69, 19.70, 19.71, 19.73, 19.74, 19.76, 19.77, 19.79, 19.80, 19.82, 19.83, 19.84, 19.86, 19.87, 19.89, 19.90, 19.91, 19.93, 19.94, 19.96, 19.97, 19.98, 20.00, 20.01, 20.03, 20.04, 20.05, 20.07, 20.08, 20.10, 20.11, 20.12, 20.14, 20.15, 20.16, 20.18, 20.19, 20.20, 20.22, 20.23, 20.24, 20.26, 20.27, 20.28, 20.30, 20.31, 20.32, 20.34, 20.35, 20.36, 20.38, 20.39, 20.40, 20.42, 20.43, 20.44, 20.46, 20.47, 20.48, 20.49, 20.51, 20.52, 20.53, 20.55, 20.56, 20.57, 20.58, 20.60, 20.61, 20.62, 20.64, 20.65, 20.66, 20.67, 20.69, 20.70, 20.71, 20.72, 20.74, 20.75, 20.76, 20.77, 20.79, 20.80, 20.81, 20.82, 20.84, 20.85, 20.86, 20.87, 20.88, 20.90, 20.91},
{21.84, 21.85, 21.87, 21.88, 21.89, 21.90, 21.91, 21.93, 21.94, 21.95, 21.96, 21.98, 21.99, 22.00, 22.01, 22.03, 22.04, 22.05, 22.06, 22.07, 22.09, 22.10, 22.11, 22.12, 22.13, 22.15, 22.16, 22.17, 22.18, 22.19, 22.21, 22.22, 22.23, 22.24, 22.25, 22.27, 22.28, 22.29, 22.30, 22.31, 22.32, 22.34, 22.35, 22.36, 22.37, 22.38, 22.39, 22.40, 22.42, 22.43, 22.44, 22.45, 22.46, 22.47, 22.48, 22.50, 22.51, 22.52, 22.53, 22.54, 22.55, 22.56, 22.57, 22.58, 22.60, 22.61, 22.62, 22.63, 22.64, 22.65, 22.66, 22.67, 22.68, 22.69, 22.71, 22.72, 22.73, 22.74, 22.75, 22.76, 22.77, 22.78, 22.79, 22.80, 22.81, 22.82, 22.83, 22.84, 22.86, 22.87, 22.88, 22.89, 22.90, 22.91, 22.92, 22.93, 22.94, 22.95, 22.96, 22.97, 22.98, 22.99, 23.00, 23.01, 23.02, 23.03, 23.04, 23.05, 23.06, 23.07, 23.08, 23.09, 23.10, 23.11, 23.12, 23.13, 23.14, 23.15, 23.16, 23.17, 23.18, 23.19, 23.20, 23.21, 23.22, 23.23, 23.24, 23.25, 23.26, 23.27, 23.28, 23.29, 23.30, 23.31, 23.32, 23.33, 23.34, 23.35, 23.36, 23.37},
{24.55, 24.56, 24.57, 24.58, 24.59, 24.60, 24.61, 24.61, 24.62, 24.63, 24.64, 24.65, 24.66, 24.67, 24.68, 24.69, 24.70, 24.71, 24.72, 24.73, 24.74, 24.74, 24.75, 24.76, 24.77, 24.78, 24.79, 24.80, 24.81, 24.82, 24.83, 24.83, 24.84, 24.85, 24.86, 24.87, 24.88, 24.89, 24.90, 24.91, 24.91, 24.92, 24.93, 24.94, 24.95, 24.96, 24.97, 24.98, 24.98, 24.99, 25.00, 25.01, 25.02, 25.03, 25.04, 25.04, 25.05, 25.06, 25.07, 25.08, 25.09, 25.10, 25.10, 25.11, 25.12, 25.13, 25.14, 25.15, 25.15, 25.16, 25.17, 25.18, 25.19, 25.20, 25.20, 25.21, 25.22, 25.23, 25.24, 25.24, 25.25, 25.26, 25.27, 25.28, 25.29, 25.29, 25.30, 25.31, 25.32, 25.33, 25.33, 25.34, 25.35, 25.36, 25.37, 25.37, 25.38, 25.39, 25.40, 25.40, 25.41, 25.42, 25.43, 25.44, 25.44, 25.45, 25.46, 25.47, 25.48, 25.48, 25.49, 25.50, 25.51, 25.51, 25.52, 25.53, 25.54, 25.54, 25.55, 25.56, 25.57, 25.57, 25.58, 25.59, 25.60, 25.60, 25.61, 25.62, 25.63, 25.63, 25.64, 25.65, 25.66, 25.66, 25.67, 25.68, 25.69, 25.69, 25.70, 25.71},
{27.11, 27.11, 27.12, 27.13, 27.13, 27.14, 27.15, 27.15, 27.16, 27.17, 27.17, 27.18, 27.19, 27.19, 27.20, 27.21, 27.21, 27.22, 27.23, 27.23, 27.24, 27.25, 27.25, 27.26, 27.27, 27.27, 27.28, 27.29, 27.29, 27.30, 27.30, 27.31, 27.32, 27.32, 27.33, 27.34, 27.34, 27.35, 27.35, 27.36, 27.37, 27.37, 27.38, 27.39, 27.39, 27.40, 27.40, 27.41, 27.42, 27.42, 27.43, 27.44, 27.44, 27.45, 27.45, 27.46, 27.47, 27.47, 27.48, 27.48, 27.49, 27.50, 27.50, 27.51, 27.51, 27.52, 27.53, 27.53, 27.54, 27.54, 27.55, 27.56, 27.56, 27.57, 27.57, 27.58, 27.58, 27.59, 27.60, 27.60, 27.61, 27.61, 27.62, 27.63, 27.63, 27.64, 27.64, 27.65, 27.65, 27.66, 27.67, 27.67, 27.68, 27.68, 27.69, 27.69, 27.70, 27.71, 27.71, 27.72, 27.72, 27.73, 27.73, 27.74, 27.74, 27.75, 27.76, 27.76, 27.77, 27.77, 27.78, 27.78, 27.79, 27.79, 27.80, 27.80, 27.81, 27.82, 27.82, 27.83, 27.83, 27.84, 27.84, 27.85, 27.85, 27.86, 27.86, 27.87, 27.87, 27.88, 27.89, 27.89, 27.90, 27.90, 27.91, 27.91, 27.92, 27.92, 27.93, 27.93},
{29.53, 29.53, 29.54, 29.54, 29.55, 29.55, 29.55, 29.56, 29.56, 29.57, 29.57, 29.58, 29.58, 29.58, 29.59, 29.59, 29.60, 29.60, 29.60, 29.61, 29.61, 29.62, 29.62, 29.62, 29.63, 29.63, 29.64, 29.64, 29.64, 29.65, 29.65, 29.66, 29.66, 29.66, 29.67, 29.67, 29.68, 29.68, 29.68, 29.69, 29.69, 29.70, 29.70, 29.70, 29.71, 29.71, 29.72, 29.72, 29.72, 29.73, 29.73, 29.74, 29.74, 29.74, 29.75, 29.75, 29.76, 29.76, 29.76, 29.77, 29.77, 29.77, 29.78, 29.78, 29.79, 29.79, 29.79, 29.80, 29.80, 29.80, 29.81, 29.81, 29.82, 29.82, 29.82, 29.83, 29.83, 29.83, 29.84, 29.84, 29.85, 29.85, 29.85, 29.86, 29.86, 29.86, 29.87, 29.87, 29.87, 29.88, 29.88, 29.89, 29.89, 29.89, 29.90, 29.90, 29.90, 29.91, 29.91, 29.91, 29.92, 29.92, 29.92, 29.93, 29.93, 29.94, 29.94, 29.94, 29.95, 29.95, 29.95, 29.96, 29.96, 29.96, 29.97, 29.97, 29.97, 29.98, 29.98, 29.98, 29.99, 29.99, 29.99, 30.00, 30.00, 30.00, 30.01, 30.01, 30.01, 30.02, 30.02, 30.02, 30.03, 30.03, 30.03, 30.04, 30.04, 30.04, 30.05, 30.05},
{31.82, 31.83, 31.83, 31.83, 31.83, 31.83, 31.84, 31.84, 31.84, 31.84, 31.84, 31.84, 31.85, 31.85, 31.85, 31.85, 31.85, 31.86, 31.86, 31.86, 31.86, 31.86, 31.87, 31.87, 31.87, 31.87, 31.87, 31.88, 31.88, 31.88, 31.88, 31.88, 31.89, 31.89, 31.89, 31.89, 31.89, 31.90, 31.90, 31.90, 31.90, 31.90, 31.90, 31.91, 31.91, 31.91, 31.91, 31.91, 31.92, 31.92, 31.92, 31.92, 31.92, 31.92, 31.93, 31.93, 31.93, 31.93, 31.93, 31.94, 31.94, 31.94, 31.94, 31.94, 31.94, 31.95, 31.95, 31.95, 31.95, 31.95, 31.96, 31.96, 31.96, 31.96, 31.96, 31.96, 31.97, 31.97, 31.97, 31.97, 31.97, 31.98, 31.98, 31.98, 31.98, 31.98, 31.98, 31.99, 31.99, 31.99, 31.99, 31.99, 31.99, 32.00, 32.00, 32.00, 32.00, 32.00, 32.00, 32.01, 32.01, 32.01, 32.01, 32.01, 32.01, 32.02, 32.02, 32.02, 32.02, 32.02, 32.02, 32.03, 32.03, 32.03, 32.03, 32.03, 32.03, 32.04, 32.04, 32.04, 32.04, 32.04, 32.04, 32.05, 32.05, 32.05, 32.05, 32.05, 32.05, 32.06, 32.06, 32.06, 32.06, 32.06, 32.06, 32.07, 32.07, 32.07, 32.07, 32.07},
{34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00},
{36.07, 36.07, 36.06, 36.06, 36.06, 36.06, 36.06, 36.06, 36.05, 36.05, 36.05, 36.05, 36.05, 36.05, 36.04, 36.04, 36.04, 36.04, 36.04, 36.03, 36.03, 36.03, 36.03, 36.03, 36.03, 36.02, 36.02, 36.02, 36.02, 36.02, 36.02, 36.01, 36.01, 36.01, 36.01, 36.01, 36.00, 36.00, 36.00, 36.00, 36.00, 36.00, 35.99, 35.99, 35.99, 35.99, 35.99, 35.99, 35.98, 35.98, 35.98, 35.98, 35.98, 35.98, 35.97, 35.97, 35.97, 35.97, 35.97, 35.97, 35.96, 35.96, 35.96, 35.96, 35.96, 35.96, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.94, 35.94, 35.94, 35.94, 35.94, 35.94, 35.93, 35.93, 35.93, 35.93, 35.93, 35.93, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.91, 35.91, 35.91, 35.91, 35.91, 35.91, 35.90, 35.90, 35.90, 35.90, 35.90, 35.90, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.87, 35.87, 35.87, 35.87, 35.87, 35.87, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.84, 35.84},
{38.04, 38.03, 38.03, 38.03, 38.02, 38.02, 38.02, 38.01, 38.01, 38.01, 38.00, 38.00, 38.00, 37.99, 37.99, 37.99, 37.98, 37.98, 37.98, 37.97, 37.97, 37.96, 37.96, 37.96, 37.95, 37.95, 37.95, 37.94, 37.94, 37.94, 37.94, 37.93, 37.93, 37.93, 37.92, 37.92, 37.92, 37.91, 37.91, 37.91, 37.90, 37.90, 37.90, 37.89, 37.89, 37.89, 37.88, 37.88, 37.88, 37.87, 37.87, 37.87, 37.86, 37.86, 37.86, 37.85, 37.85, 37.85, 37.84, 37.84, 37.84, 37.84, 37.83, 37.83, 37.83, 37.82, 37.82, 37.82, 37.81, 37.81, 37.81, 37.80, 37.80, 37.80, 37.80, 37.79, 37.79, 37.79, 37.78, 37.78, 37.78, 37.77, 37.77, 37.77, 37.76, 37.76, 37.76, 37.76, 37.75, 37.75, 37.75, 37.74, 37.74, 37.74, 37.73, 37.73, 37.73, 37.73, 37.72, 37.72, 37.72, 37.71, 37.71, 37.71, 37.71, 37.70, 37.70, 37.70, 37.69, 37.69, 37.69, 37.68, 37.68, 37.68, 37.68, 37.67, 37.67, 37.67, 37.66, 37.66, 37.66, 37.66, 37.65, 37.65, 37.65, 37.64, 37.64, 37.64, 37.64, 37.63, 37.63, 37.63, 37.63, 37.62, 37.62, 37.62, 37.61, 37.61, 37.61, 37.61},
{39.91, 39.91, 39.90, 39.90, 39.89, 39.89, 39.88, 39.88, 39.87, 39.87, 39.86, 39.86, 39.85, 39.85, 39.84, 39.84, 39.83, 39.83, 39.82, 39.82, 39.81, 39.81, 39.80, 39.80, 39.79, 39.79, 39.78, 39.78, 39.78, 39.77, 39.77, 39.76, 39.76, 39.75, 39.75, 39.74, 39.74, 39.73, 39.73, 39.72, 39.72, 39.71, 39.71, 39.71, 39.70, 39.70, 39.69, 39.69, 39.68, 39.68, 39.67, 39.67, 39.66, 39.66, 39.65, 39.65, 39.65, 39.64, 39.64, 39.63, 39.63, 39.62, 39.62, 39.61, 39.61, 39.61, 39.60, 39.60, 39.59, 39.59, 39.58, 39.58, 39.57, 39.57, 39.57, 39.56, 39.56, 39.55, 39.55, 39.54, 39.54, 39.53, 39.53, 39.53, 39.52, 39.52, 39.51, 39.51, 39.50, 39.50, 39.50, 39.49, 39.49, 39.48, 39.48, 39.47, 39.47, 39.47, 39.46, 39.46, 39.45, 39.45, 39.45, 39.44, 39.44, 39.43, 39.43, 39.42, 39.42, 39.42, 39.41, 39.41, 39.40, 39.40, 39.40, 39.39, 39.39, 39.38, 39.38, 39.37, 39.37, 39.37, 39.36, 39.36, 39.35, 39.35, 39.35, 39.34, 39.34, 39.33, 39.33, 39.33, 39.32, 39.32, 39.31, 39.31, 39.31, 39.30, 39.30, 39.29},
{41.70, 41.69, 41.69, 41.68, 41.67, 41.67, 41.66, 41.65, 41.65, 41.64, 41.64, 41.63, 41.62, 41.62, 41.61, 41.61, 41.60, 41.59, 41.59, 41.58, 41.57, 41.57, 41.56, 41.56, 41.55, 41.54, 41.54, 41.53, 41.53, 41.52, 41.51, 41.51, 41.50, 41.50, 41.49, 41.48, 41.48, 41.47, 41.47, 41.46, 41.45, 41.45, 41.44, 41.44, 41.43, 41.42, 41.42, 41.41, 41.41, 41.40, 41.40, 41.39, 41.38, 41.38, 41.37, 41.37, 41.36, 41.36, 41.35, 41.34, 41.34, 41.33, 41.33, 41.32, 41.32, 41.31, 41.30, 41.30, 41.29, 41.29, 41.28, 41.28, 41.27, 41.26, 41.26, 41.25, 41.25, 41.24, 41.24, 41.23, 41.23, 41.22, 41.21, 41.21, 41.20, 41.20, 41.19, 41.19, 41.18, 41.18, 41.17, 41.16, 41.16, 41.15, 41.15, 41.14, 41.14, 41.13, 41.13, 41.12, 41.12, 41.11, 41.10, 41.10, 41.09, 41.09, 41.08, 41.08, 41.07, 41.07, 41.06, 41.06, 41.05, 41.05, 41.04, 41.04, 41.03, 41.03, 41.02, 41.01, 41.01, 41.00, 41.00, 40.99, 40.99, 40.98, 40.98, 40.97, 40.97, 40.96, 40.96, 40.95, 40.95, 40.94, 40.94, 40.93, 40.93, 40.92, 40.92, 40.91},
{43.41, 43.40, 43.39, 43.38, 43.38, 43.37, 43.36, 43.35, 43.35, 43.34, 43.33, 43.32, 43.32, 43.31, 43.30, 43.29, 43.29, 43.28, 43.27, 43.26, 43.26, 43.25, 43.24, 43.24, 43.23, 43.22, 43.21, 43.21, 43.20, 43.19, 43.18, 43.18, 43.17, 43.16, 43.16, 43.15, 43.14, 43.13, 43.13, 43.12, 43.11, 43.11, 43.10, 43.09, 43.09, 43.08, 43.07, 43.06, 43.06, 43.05, 43.04, 43.04, 43.03, 43.02, 43.02, 43.01, 43.00, 42.99, 42.99, 42.98, 42.97, 42.97, 42.96, 42.95, 42.95, 42.94, 42.93, 42.93, 42.92, 42.91, 42.91, 42.90, 42.89, 42.89, 42.88, 42.87, 42.87, 42.86, 42.85, 42.85, 42.84, 42.83, 42.83, 42.82, 42.81, 42.81, 42.80, 42.79, 42.79, 42.78, 42.77, 42.77, 42.76, 42.75, 42.75, 42.74, 42.73, 42.73, 42.72, 42.71, 42.71, 42.70, 42.70, 42.69, 42.68, 42.68, 42.67, 42.66, 42.66, 42.65, 42.64, 42.64, 42.63, 42.62, 42.62, 42.61, 42.61, 42.60, 42.59, 42.59, 42.58, 42.57, 42.57, 42.56, 42.56, 42.55, 42.54, 42.54, 42.53, 42.52, 42.52, 42.51, 42.51, 42.50, 42.49, 42.49, 42.48, 42.48, 42.47, 42.46},
{45.04, 45.03, 45.02, 45.01, 45.00, 44.99, 44.99, 44.98, 44.97, 44.96, 44.95, 44.94, 44.93, 44.93, 44.92, 44.91, 44.90, 44.89, 44.88, 44.87, 44.87, 44.86, 44.85, 44.84, 44.83, 44.82, 44.82, 44.81, 44.80, 44.79, 44.78, 44.78, 44.77, 44.76, 44.75, 44.74, 44.73, 44.73, 44.72, 44.71, 44.70, 44.69, 44.69, 44.68, 44.67, 44.66, 44.65, 44.64, 44.64, 44.63, 44.62, 44.61, 44.60, 44.60, 44.59, 44.58, 44.57, 44.56, 44.56, 44.55, 44.54, 44.53, 44.53, 44.52, 44.51, 44.50, 44.49, 44.49, 44.48, 44.47, 44.46, 44.46, 44.45, 44.44, 44.43, 44.42, 44.42, 44.41, 44.40, 44.39, 44.39, 44.38, 44.37, 44.36, 44.36, 44.35, 44.34, 44.33, 44.32, 44.32, 44.31, 44.30, 44.29, 44.29, 44.28, 44.27, 44.26, 44.26, 44.25, 44.24, 44.23, 44.23, 44.22, 44.21, 44.21, 44.20, 44.19, 44.18, 44.18, 44.17, 44.16, 44.15, 44.15, 44.14, 44.13, 44.12, 44.12, 44.11, 44.10, 44.10, 44.09, 44.08, 44.07, 44.07, 44.06, 44.05, 44.05, 44.04, 44.03, 44.02, 44.02, 44.01, 44.00, 44.00, 43.99, 43.98, 43.97, 43.97, 43.96, 43.95},
{46.60, 46.59, 46.58, 46.57, 46.56, 46.55, 46.54, 46.53, 46.52, 46.51, 46.50, 46.49, 46.48, 46.47, 46.46, 46.45, 46.44, 46.44, 46.43, 46.42, 46.41, 46.40, 46.39, 46.38, 46.37, 46.36, 46.35, 46.34, 46.33, 46.32, 46.31, 46.30, 46.30, 46.29, 46.28, 46.27, 46.26, 46.25, 46.24, 46.23, 46.22, 46.21, 46.20, 46.20, 46.19, 46.18, 46.17, 46.16, 46.15, 46.14, 46.13, 46.12, 46.11, 46.11, 46.10, 46.09, 46.08, 46.07, 46.06, 46.05, 46.04, 46.03, 46.03, 46.02, 46.01, 46.00, 45.99, 45.98, 45.97, 45.96, 45.96, 45.95, 45.94, 45.93, 45.92, 45.91, 45.90, 45.90, 45.89, 45.88, 45.87, 45.86, 45.85, 45.84, 45.84, 45.83, 45.82, 45.81, 45.80, 45.79, 45.78, 45.78, 45.77, 45.76, 45.75, 45.74, 45.73, 45.73, 45.72, 45.71, 45.70, 45.69, 45.68, 45.68, 45.67, 45.66, 45.65, 45.64, 45.63, 45.63, 45.62, 45.61, 45.60, 45.59, 45.59, 45.58, 45.57, 45.56, 45.55, 45.54, 45.54, 45.53, 45.52, 45.51, 45.50, 45.50, 45.49, 45.48, 45.47, 45.46, 45.46, 45.45, 45.44, 45.43, 45.42, 45.42, 45.41, 45.40, 45.39, 45.38},
{48.09, 48.08, 48.07, 48.06, 48.05, 48.04, 48.03, 48.02, 48.01, 48.00, 47.99, 47.98, 47.97, 47.96, 47.94, 47.93, 47.92, 47.91, 47.90, 47.89, 47.88, 47.87, 47.86, 47.85, 47.84, 47.83, 47.82, 47.81, 47.80, 47.79, 47.78, 47.77, 47.76, 47.75, 47.74, 47.73, 47.72, 47.71, 47.70, 47.69, 47.68, 47.67, 47.66, 47.65, 47.64, 47.63, 47.62, 47.61, 47.60, 47.59, 47.58, 47.57, 47.56, 47.55, 47.54, 47.53, 47.52, 47.51, 47.50, 47.49, 47.48, 47.47, 47.47, 47.46, 47.45, 47.44, 47.43, 47.42, 47.41, 47.40, 47.39, 47.38, 47.37, 47.36, 47.35, 47.34, 47.33, 47.32, 47.31, 47.30, 47.29, 47.28, 47.27, 47.27, 47.26, 47.25, 47.24, 47.23, 47.22, 47.21, 47.20, 47.19, 47.18, 47.17, 47.16, 47.15, 47.14, 47.14, 47.13, 47.12, 47.11, 47.10, 47.09, 47.08, 47.07, 47.06, 47.05, 47.04, 47.04, 47.03, 47.02, 47.01, 47.00, 46.99, 46.98, 46.97, 46.96, 46.95, 46.95, 46.94, 46.93, 46.92, 46.91, 46.90, 46.89, 46.88, 46.87, 46.87, 46.86, 46.85, 46.84, 46.83, 46.82, 46.81, 46.80, 46.80, 46.79, 46.78, 46.77, 46.76},
{49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.35, 49.34, 49.33, 49.32, 49.31, 49.30, 49.29, 49.28, 49.27, 49.25, 49.24, 49.23, 49.22, 49.21, 49.20, 49.19, 49.18, 49.17, 49.16, 49.15, 49.13, 49.12, 49.11, 49.10, 49.09, 49.08, 49.07, 49.06, 49.05, 49.04, 49.03, 49.02, 49.01, 48.99, 48.98, 48.97, 48.96, 48.95, 48.94, 48.93, 48.92, 48.91, 48.90, 48.89, 48.88, 48.87, 48.86, 48.85, 48.84, 48.83, 48.82, 48.81, 48.80, 48.79, 48.77, 48.76, 48.75, 48.74, 48.73, 48.72, 48.71, 48.70, 48.69, 48.68, 48.67, 48.66, 48.65, 48.64, 48.63, 48.62, 48.61, 48.60, 48.59, 48.58, 48.57, 48.56, 48.55, 48.54, 48.53, 48.52, 48.51, 48.50, 48.49, 48.48, 48.47, 48.46, 48.45, 48.44, 48.43, 48.42, 48.41, 48.40, 48.39, 48.38, 48.37, 48.36, 48.35, 48.34, 48.33, 48.32, 48.31, 48.30, 48.30, 48.29, 48.28, 48.27, 48.26, 48.25, 48.24, 48.23, 48.22, 48.21, 48.20, 48.19, 48.18, 48.17, 48.16, 48.15, 48.14, 48.13, 48.12, 48.11, 48.10, 48.09, 48.09},
{50.90, 50.89, 50.87, 50.86, 50.85, 50.84, 50.82, 50.81, 50.80, 50.79, 50.78, 50.76, 50.75, 50.74, 50.73, 50.72, 50.70, 50.69, 50.68, 50.67, 50.66, 50.65, 50.63, 50.62, 50.61, 50.60, 50.59, 50.58, 50.56, 50.55, 50.54, 50.53, 50.52, 50.51, 50.49, 50.48, 50.47, 50.46, 50.45, 50.44, 50.42, 50.41, 50.40, 50.39, 50.38, 50.37, 50.36, 50.34, 50.33, 50.32, 50.31, 50.30, 50.29, 50.28, 50.27, 50.25, 50.24, 50.23, 50.22, 50.21, 50.20, 50.19, 50.18, 50.16, 50.15, 50.14, 50.13, 50.12, 50.11, 50.10, 50.09, 50.08, 50.07, 50.05, 50.04, 50.03, 50.02, 50.01, 50.00, 49.99, 49.98, 49.97, 49.96, 49.95, 49.93, 49.92, 49.91, 49.90, 49.89, 49.88, 49.87, 49.86, 49.85, 49.84, 49.83, 49.82, 49.81, 49.79, 49.78, 49.77, 49.76, 49.75, 49.74, 49.73, 49.72, 49.71, 49.70, 49.69, 49.68, 49.67, 49.66, 49.65, 49.64, 49.63, 49.62, 49.61, 49.60, 49.59, 49.57, 49.56, 49.55, 49.54, 49.53, 49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.45, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.36},
{52.22, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.11, 52.10, 52.09, 52.08, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.96, 51.95, 51.94, 51.93, 51.91, 51.90, 51.89, 51.88, 51.86, 51.85, 51.84, 51.83, 51.81, 51.80, 51.79, 51.78, 51.77, 51.75, 51.74, 51.73, 51.72, 51.70, 51.69, 51.68, 51.67, 51.66, 51.64, 51.63, 51.62, 51.61, 51.60, 51.58, 51.57, 51.56, 51.55, 51.54, 51.52, 51.51, 51.50, 51.49, 51.48, 51.47, 51.45, 51.44, 51.43, 51.42, 51.41, 51.39, 51.38, 51.37, 51.36, 51.35, 51.34, 51.32, 51.31, 51.30, 51.29, 51.28, 51.27, 51.26, 51.24, 51.23, 51.22, 51.21, 51.20, 51.19, 51.17, 51.16, 51.15, 51.14, 51.13, 51.12, 51.11, 51.10, 51.08, 51.07, 51.06, 51.05, 51.04, 51.03, 51.02, 51.01, 50.99, 50.98, 50.97, 50.96, 50.95, 50.94, 50.93, 50.92, 50.91, 50.89, 50.88, 50.87, 50.86, 50.85, 50.84, 50.83, 50.82, 50.81, 50.80, 50.78, 50.77, 50.76, 50.75, 50.74, 50.73, 50.72, 50.71, 50.70, 50.69, 50.68, 50.67, 50.65, 50.64, 50.63, 50.62, 50.61, 50.60, 50.59},
{53.48, 53.47, 53.46, 53.44, 53.43, 53.42, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.32, 53.31, 53.30, 53.28, 53.27, 53.26, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.15, 53.14, 53.13, 53.11, 53.10, 53.09, 53.08, 53.06, 53.05, 53.04, 53.02, 53.01, 53.00, 52.99, 52.97, 52.96, 52.95, 52.93, 52.92, 52.91, 52.90, 52.88, 52.87, 52.86, 52.85, 52.83, 52.82, 52.81, 52.80, 52.78, 52.77, 52.76, 52.75, 52.73, 52.72, 52.71, 52.70, 52.68, 52.67, 52.66, 52.65, 52.63, 52.62, 52.61, 52.60, 52.58, 52.57, 52.56, 52.55, 52.54, 52.52, 52.51, 52.50, 52.49, 52.47, 52.46, 52.45, 52.44, 52.43, 52.41, 52.40, 52.39, 52.38, 52.37, 52.35, 52.34, 52.33, 52.32, 52.31, 52.29, 52.28, 52.27, 52.26, 52.25, 52.24, 52.22, 52.21, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.12, 52.11, 52.10, 52.08, 52.07, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.97, 51.96, 51.95, 51.93, 51.92, 51.91, 51.90, 51.89, 51.88, 51.87, 51.85, 51.84, 51.83, 51.82, 51.81, 51.80, 51.79, 51.78},
{54.70, 54.69, 54.67, 54.66, 54.65, 54.63, 54.62, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.49, 54.48, 54.47, 54.45, 54.44, 54.43, 54.41, 54.40, 54.38, 54.37, 54.36, 54.34, 54.33, 54.32, 54.30, 54.29, 54.28, 54.26, 54.25, 54.24, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.14, 54.13, 54.12, 54.10, 54.09, 54.08, 54.06, 54.05, 54.04, 54.02, 54.01, 54.00, 53.98, 53.97, 53.96, 53.95, 53.93, 53.92, 53.91, 53.89, 53.88, 53.87, 53.85, 53.84, 53.83, 53.82, 53.80, 53.79, 53.78, 53.76, 53.75, 53.74, 53.73, 53.71, 53.70, 53.69, 53.68, 53.66, 53.65, 53.64, 53.62, 53.61, 53.60, 53.59, 53.57, 53.56, 53.55, 53.54, 53.52, 53.51, 53.50, 53.49, 53.47, 53.46, 53.45, 53.44, 53.42, 53.41, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.33, 53.31, 53.30, 53.29, 53.28, 53.27, 53.25, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.16, 53.14, 53.13, 53.12, 53.11, 53.10, 53.08, 53.07, 53.06, 53.05, 53.04, 53.03, 53.01, 53.00, 52.99, 52.98, 52.97, 52.95, 52.94, 52.93, 52.92},
{55.88, 55.86, 55.85, 55.83, 55.82, 55.80, 55.79, 55.77, 55.76, 55.75, 55.73, 55.72, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.60, 55.59, 55.57, 55.56, 55.55, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.43, 55.42, 55.41, 55.39, 55.38, 55.36, 55.35, 55.34, 55.32, 55.31, 55.29, 55.28, 55.27, 55.25, 55.24, 55.23, 55.21, 55.20, 55.19, 55.17, 55.16, 55.14, 55.13, 55.12, 55.10, 55.09, 55.08, 55.06, 55.05, 55.04, 55.02, 55.01, 55.00, 54.98, 54.97, 54.96, 54.94, 54.93, 54.92, 54.90, 54.89, 54.88, 54.86, 54.85, 54.84, 54.82, 54.81, 54.80, 54.78, 54.77, 54.76, 54.74, 54.73, 54.72, 54.70, 54.69, 54.68, 54.67, 54.65, 54.64, 54.63, 54.61, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.50, 54.49, 54.47, 54.46, 54.45, 54.43, 54.42, 54.41, 54.40, 54.38, 54.37, 54.36, 54.35, 54.33, 54.32, 54.31, 54.30, 54.28, 54.27, 54.26, 54.25, 54.23, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.15, 54.13, 54.12, 54.11, 54.10, 54.08, 54.07, 54.06, 54.05, 54.04, 54.02},
{57.01, 56.99, 56.98, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.87, 56.86, 56.84, 56.83, 56.81, 56.80, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.69, 56.68, 56.66, 56.65, 56.64, 56.62, 56.61, 56.59, 56.58, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.46, 56.45, 56.43, 56.42, 56.41, 56.39, 56.38, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.26, 56.25, 56.24, 56.22, 56.21, 56.19, 56.18, 56.17, 56.15, 56.14, 56.12, 56.11, 56.10, 56.08, 56.07, 56.05, 56.04, 56.03, 56.01, 56.00, 55.99, 55.97, 55.96, 55.94, 55.93, 55.92, 55.90, 55.89, 55.88, 55.86, 55.85, 55.84, 55.82, 55.81, 55.80, 55.78, 55.77, 55.76, 55.74, 55.73, 55.71, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.61, 55.60, 55.58, 55.57, 55.56, 55.54, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.44, 55.42, 55.41, 55.40, 55.39, 55.37, 55.36, 55.35, 55.33, 55.32, 55.31, 55.29, 55.28, 55.27, 55.26, 55.24, 55.23, 55.22, 55.21, 55.19, 55.18, 55.17, 55.15, 55.14, 55.13, 55.12, 55.10, 55.09},
{58.09, 58.08, 58.06, 58.05, 58.03, 58.02, 58.00, 57.99, 57.97, 57.96, 57.94, 57.93, 57.91, 57.89, 57.88, 57.86, 57.85, 57.83, 57.82, 57.80, 57.79, 57.77, 57.76, 57.74, 57.73, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.62, 57.61, 57.59, 57.58, 57.57, 57.55, 57.54, 57.52, 57.51, 57.49, 57.48, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.37, 57.36, 57.35, 57.33, 57.32, 57.30, 57.29, 57.27, 57.26, 57.24, 57.23, 57.22, 57.20, 57.19, 57.17, 57.16, 57.14, 57.13, 57.12, 57.10, 57.09, 57.07, 57.06, 57.04, 57.03, 57.02, 57.00, 56.99, 56.97, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.88, 56.86, 56.85, 56.83, 56.82, 56.81, 56.79, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.70, 56.68, 56.67, 56.66, 56.64, 56.63, 56.61, 56.60, 56.59, 56.57, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.47, 56.45, 56.44, 56.43, 56.41, 56.40, 56.39, 56.37, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.27, 56.25, 56.24, 56.23, 56.21, 56.20, 56.19, 56.17, 56.16, 56.15, 56.14, 56.12},
{59.14, 59.13, 59.11, 59.10, 59.08, 59.07, 59.05, 59.03, 59.02, 59.00, 58.99, 58.97, 58.96, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.83, 58.82, 58.80, 58.79, 58.77, 58.75, 58.74, 58.72, 58.71, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.57, 58.56, 58.54, 58.53, 58.51, 58.50, 58.48, 58.47, 58.45, 58.44, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.33, 58.32, 58.30, 58.29, 58.27, 58.26, 58.24, 58.23, 58.21, 58.20, 58.18, 58.17, 58.16, 58.14, 58.13, 58.11, 58.10, 58.08, 58.07, 58.05, 58.04, 58.02, 58.01, 58.00, 57.98, 57.97, 57.95, 57.94, 57.92, 57.91, 57.89, 57.88, 57.87, 57.85, 57.84, 57.82, 57.81, 57.80, 57.78, 57.77, 57.75, 57.74, 57.72, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.63, 57.61, 57.60, 57.58, 57.57, 57.56, 57.54, 57.53, 57.51, 57.50, 57.49, 57.47, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.38, 57.36, 57.35, 57.34, 57.32, 57.31, 57.30, 57.28, 57.27, 57.25, 57.24, 57.23, 57.21, 57.20, 57.19, 57.17, 57.16, 57.15, 57.13, 57.12},
{60.16, 60.14, 60.12, 60.11, 60.09, 60.08, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.96, 59.95, 59.93, 59.92, 59.90, 59.88, 59.87, 59.85, 59.84, 59.82, 59.81, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.66, 59.65, 59.63, 59.62, 59.60, 59.59, 59.57, 59.56, 59.54, 59.53, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.40, 59.39, 59.37, 59.36, 59.34, 59.33, 59.31, 59.30, 59.28, 59.27, 59.25, 59.24, 59.22, 59.21, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.07, 59.06, 59.04, 59.03, 59.01, 59.00, 58.98, 58.97, 58.95, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.84, 58.82, 58.81, 58.79, 58.78, 58.76, 58.75, 58.73, 58.72, 58.70, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.58, 58.56, 58.55, 58.53, 58.52, 58.50, 58.49, 58.48, 58.46, 58.45, 58.43, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.34, 58.32, 58.31, 58.29, 58.28, 58.27, 58.25, 58.24, 58.22, 58.21, 58.20, 58.18, 58.17, 58.15, 58.14, 58.13, 58.11, 58.10, 58.09},
{61.14, 61.12, 61.10, 61.09, 61.07, 61.05, 61.04, 61.02, 61.00, 60.99, 60.97, 60.96, 60.94, 60.92, 60.91, 60.89, 60.87, 60.86, 60.84, 60.83, 60.81, 60.79, 60.78, 60.76, 60.75, 60.73, 60.71, 60.70, 60.68, 60.67, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.55, 60.54, 60.52, 60.51, 60.49, 60.48, 60.46, 60.44, 60.43, 60.41, 60.40, 60.38, 60.37, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.21, 60.20, 60.18, 60.16, 60.15, 60.13, 60.12, 60.10, 60.09, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.92, 59.91, 59.89, 59.88, 59.86, 59.85, 59.83, 59.82, 59.80, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.67, 59.65, 59.64, 59.62, 59.61, 59.59, 59.58, 59.57, 59.55, 59.54, 59.52, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.41, 59.39, 59.38, 59.36, 59.35, 59.33, 59.32, 59.30, 59.29, 59.28, 59.26, 59.25, 59.23, 59.22, 59.20, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.08, 59.06, 59.05, 59.03, 59.02},
{62.08, 62.06, 62.05, 62.03, 62.01, 62.00, 61.98, 61.96, 61.95, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.81, 61.80, 61.78, 61.77, 61.75, 61.73, 61.72, 61.70, 61.68, 61.67, 61.65, 61.63, 61.62, 61.60, 61.59, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.47, 61.46, 61.44, 61.42, 61.41, 61.39, 61.38, 61.36, 61.35, 61.33, 61.31, 61.30, 61.28, 61.27, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.12, 61.11, 61.09, 61.08, 61.06, 61.05, 61.03, 61.01, 61.00, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.84, 60.83, 60.81, 60.80, 60.78, 60.77, 60.75, 60.74, 60.72, 60.71, 60.69, 60.68, 60.66, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.56, 60.54, 60.53, 60.51, 60.50, 60.48, 60.47, 60.45, 60.44, 60.42, 60.41, 60.39, 60.38, 60.36, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.22, 60.20, 60.19, 60.17, 60.16, 60.14, 60.13, 60.11, 60.10, 60.08, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.93},
{62.99, 62.98, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.79, 62.77, 62.76, 62.74, 62.72, 62.71, 62.69, 62.67, 62.66, 62.64, 62.62, 62.61, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.44, 62.43, 62.41, 62.39, 62.38, 62.36, 62.34, 62.33, 62.31, 62.30, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.13, 62.12, 62.10, 62.09, 62.07, 62.05, 62.04, 62.02, 62.01, 61.99, 61.97, 61.96, 61.94, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.75, 61.74, 61.72, 61.71, 61.69, 61.68, 61.66, 61.65, 61.63, 61.61, 61.60, 61.58, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.48, 61.46, 61.45, 61.43, 61.42, 61.40, 61.38, 61.37, 61.35, 61.34, 61.32, 61.31, 61.29, 61.28, 61.26, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.13, 61.11, 61.10, 61.08, 61.07, 61.05, 61.04, 61.02, 61.01, 60.99, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.85, 60.83, 60.82, 60.80},
{63.88, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.74, 63.72, 63.71, 63.69, 63.67, 63.66, 63.64, 63.62, 63.60, 63.59, 63.57, 63.55, 63.54, 63.52, 63.50, 63.49, 63.47, 63.45, 63.44, 63.42, 63.40, 63.39, 63.37, 63.35, 63.34, 63.32, 63.30, 63.29, 63.27, 63.25, 63.24, 63.22, 63.20, 63.19, 63.17, 63.15, 63.14, 63.12, 63.10, 63.09, 63.07, 63.06, 63.04, 63.02, 63.01, 62.99, 62.97, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.80, 62.78, 62.76, 62.75, 62.73, 62.72, 62.70, 62.68, 62.67, 62.65, 62.64, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.45, 62.43, 62.42, 62.40, 62.38, 62.37, 62.35, 62.34, 62.32, 62.31, 62.29, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.14, 62.12, 62.11, 62.09, 62.08, 62.06, 62.05, 62.03, 62.02, 62.00, 61.98, 61.97, 61.95, 61.94, 61.92, 61.91, 61.89, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.76, 61.74, 61.73, 61.71, 61.70, 61.69, 61.67, 61.66},
{64.73, 64.72, 64.70, 64.68, 64.66, 64.65, 64.63, 64.61, 64.59, 64.58, 64.56, 64.54, 64.53, 64.51, 64.49, 64.47, 64.46, 64.44, 64.42, 64.41, 64.39, 64.37, 64.35, 64.34, 64.32, 64.30, 64.29, 64.27, 64.25, 64.24, 64.22, 64.20, 64.18, 64.17, 64.15, 64.13, 64.12, 64.10, 64.08, 64.07, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.93, 63.92, 63.90, 63.88, 63.87, 63.85, 63.83, 63.82, 63.80, 63.78, 63.77, 63.75, 63.74, 63.72, 63.70, 63.69, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.52, 63.51, 63.49, 63.48, 63.46, 63.44, 63.43, 63.41, 63.40, 63.38, 63.36, 63.35, 63.33, 63.32, 63.30, 63.28, 63.27, 63.25, 63.24, 63.22, 63.21, 63.19, 63.17, 63.16, 63.14, 63.13, 63.11, 63.10, 63.08, 63.06, 63.05, 63.03, 63.02, 63.00, 62.99, 62.97, 62.95, 62.94, 62.92, 62.91, 62.89, 62.88, 62.86, 62.85, 62.83, 62.82, 62.80, 62.78, 62.77, 62.75, 62.74, 62.72, 62.71, 62.69, 62.68, 62.66, 62.65, 62.63, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.50, 62.48},
{65.56, 65.54, 65.53, 65.51, 65.49, 65.47, 65.46, 65.44, 65.42, 65.40, 65.39, 65.37, 65.35, 65.33, 65.32, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.14, 65.13, 65.11, 65.09, 65.08, 65.06, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.92, 64.90, 64.89, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.70, 64.69, 64.67, 64.65, 64.64, 64.62, 64.60, 64.59, 64.57, 64.55, 64.54, 64.52, 64.50, 64.49, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.32, 64.31, 64.29, 64.27, 64.26, 64.24, 64.23, 64.21, 64.19, 64.18, 64.16, 64.14, 64.13, 64.11, 64.10, 64.08, 64.06, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.94, 63.92, 63.90, 63.89, 63.87, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.75, 63.73, 63.72, 63.70, 63.68, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.53, 63.51, 63.50, 63.48, 63.47, 63.45, 63.44, 63.42, 63.41, 63.39, 63.37, 63.36, 63.34, 63.33, 63.31, 63.30, 63.28},
{66.36, 66.35, 66.33, 66.31, 66.29, 66.28, 66.26, 66.24, 66.22, 66.21, 66.19, 66.17, 66.15, 66.13, 66.12, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 65.99, 65.98, 65.96, 65.94, 65.92, 65.91, 65.89, 65.87, 65.86, 65.84, 65.82, 65.80, 65.79, 65.77, 65.75, 65.74, 65.72, 65.70, 65.68, 65.67, 65.65, 65.63, 65.62, 65.60, 65.58, 65.56, 65.55, 65.53, 65.51, 65.50, 65.48, 65.46, 65.45, 65.43, 65.41, 65.40, 65.38, 65.36, 65.35, 65.33, 65.31, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.11, 65.10, 65.08, 65.06, 65.05, 65.03, 65.01, 65.00, 64.98, 64.97, 64.95, 64.93, 64.92, 64.90, 64.88, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.71, 64.69, 64.67, 64.66, 64.64, 64.63, 64.61, 64.59, 64.58, 64.56, 64.55, 64.53, 64.51, 64.50, 64.48, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.33, 64.31, 64.29, 64.28, 64.26, 64.25, 64.23, 64.22, 64.20, 64.19, 64.17, 64.15, 64.14, 64.12, 64.11, 64.09, 64.08, 64.06},
{67.14, 67.12, 67.11, 67.09, 67.07, 67.05, 67.04, 67.02, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.82, 66.80, 66.79, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.66, 66.65, 66.63, 66.61, 66.59, 66.58, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.40, 66.39, 66.37, 66.35, 66.34, 66.32, 66.30, 66.28, 66.27, 66.25, 66.23, 66.22, 66.20, 66.18, 66.17, 66.15, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.96, 65.95, 65.93, 65.91, 65.90, 65.88, 65.86, 65.85, 65.83, 65.81, 65.80, 65.78, 65.76, 65.75, 65.73, 65.71, 65.70, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55, 65.53, 65.52, 65.50, 65.49, 65.47, 65.45, 65.44, 65.42, 65.40, 65.39, 65.37, 65.36, 65.34, 65.32, 65.31, 65.29, 65.28, 65.26, 65.24, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.12, 65.10, 65.08, 65.07, 65.05, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.93, 64.91, 64.90, 64.88, 64.86, 64.85, 64.83, 64.82},
{67.90, 67.88, 67.86, 67.84, 67.82, 67.81, 67.79, 67.77, 67.75, 67.73, 67.72, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.59, 67.57, 67.56, 67.54, 67.52, 67.50, 67.49, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.34, 67.33, 67.31, 67.29, 67.27, 67.26, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.10, 67.08, 67.07, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.83, 66.81, 66.79, 66.78, 66.76, 66.74, 66.73, 66.71, 66.69, 66.67, 66.66, 66.64, 66.62, 66.61, 66.59, 66.57, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.41, 66.39, 66.37, 66.36, 66.34, 66.32, 66.31, 66.29, 66.28, 66.26, 66.24, 66.23, 66.21, 66.19, 66.18, 66.16, 66.14, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.97, 65.95, 65.93, 65.92, 65.90, 65.89, 65.87, 65.85, 65.84, 65.82, 65.81, 65.79, 65.77, 65.76, 65.74, 65.73, 65.71, 65.69, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55},
{68.63, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.50, 68.48, 68.47, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.30, 68.29, 68.27, 68.25, 68.23, 68.21, 68.20, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.07, 68.06, 68.04, 68.02, 68.00, 67.98, 67.97, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.84, 67.83, 67.81, 67.79, 67.78, 67.76, 67.74, 67.72, 67.71, 67.69, 67.67, 67.65, 67.64, 67.62, 67.60, 67.59, 67.57, 67.55, 67.53, 67.52, 67.50, 67.48, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.35, 67.33, 67.31, 67.30, 67.28, 67.26, 67.25, 67.23, 67.21, 67.20, 67.18, 67.16, 67.15, 67.13, 67.11, 67.10, 67.08, 67.06, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.90, 66.88, 66.86, 66.85, 66.83, 66.81, 66.80, 66.78, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.67, 66.65, 66.64, 66.62, 66.60, 66.59, 66.57, 66.55, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.43, 66.41, 66.39, 66.38, 66.36, 66.35, 66.33, 66.31, 66.30, 66.28, 66.27},
{69.34, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.21, 69.19, 69.18, 69.16, 69.14, 69.12, 69.10, 69.08, 69.07, 69.05, 69.03, 69.01, 68.99, 68.98, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.83, 68.82, 68.80, 68.78, 68.76, 68.74, 68.73, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.60, 68.59, 68.57, 68.55, 68.53, 68.52, 68.50, 68.48, 68.46, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.31, 68.29, 68.27, 68.26, 68.24, 68.22, 68.20, 68.19, 68.17, 68.15, 68.14, 68.12, 68.10, 68.08, 68.07, 68.05, 68.03, 68.02, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.81, 67.80, 67.78, 67.76, 67.75, 67.73, 67.71, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.60, 67.58, 67.56, 67.55, 67.53, 67.51, 67.50, 67.48, 67.46, 67.45, 67.43, 67.41, 67.40, 67.38, 67.37, 67.35, 67.33, 67.32, 67.30, 67.28, 67.27, 67.25, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.11, 67.09, 67.07, 67.06, 67.04, 67.03, 67.01, 66.99, 66.98, 66.96},
{70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.88, 69.86, 69.85, 69.83, 69.81, 69.79, 69.77, 69.76, 69.74, 69.72, 69.70, 69.68, 69.66, 69.65, 69.63, 69.61, 69.59, 69.57, 69.56, 69.54, 69.52, 69.50, 69.49, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.34, 69.32, 69.31, 69.29, 69.27, 69.25, 69.24, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.11, 69.10, 69.08, 69.06, 69.04, 69.03, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.78, 68.77, 68.75, 68.73, 68.72, 68.70, 68.68, 68.66, 68.65, 68.63, 68.61, 68.60, 68.58, 68.56, 68.55, 68.53, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.33, 68.31, 68.29, 68.28, 68.26, 68.24, 68.23, 68.21, 68.19, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.08, 68.06, 68.04, 68.03, 68.01, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.82, 67.80, 67.78, 67.77, 67.75, 67.73, 67.72, 67.70, 67.69, 67.67, 67.65, 67.64},
{70.70, 70.68, 70.66, 70.64, 70.63, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.44, 70.42, 70.41, 70.39, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.26, 70.24, 70.22, 70.21, 70.19, 70.17, 70.15, 70.14, 70.12, 70.10, 70.08, 70.06, 70.05, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.89, 69.87, 69.85, 69.83, 69.82, 69.80, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.67, 69.66, 69.64, 69.62, 69.60, 69.59, 69.57, 69.55, 69.54, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.31, 69.29, 69.28, 69.26, 69.24, 69.23, 69.21, 69.19, 69.17, 69.16, 69.14, 69.12, 69.11, 69.09, 69.07, 69.06, 69.04, 69.02, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.79, 68.77, 68.75, 68.74, 68.72, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.35, 68.33, 68.31, 68.30},
{71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.24, 71.22, 71.20, 71.18, 71.17, 71.15, 71.13, 71.11, 71.09, 71.07, 71.06, 71.04, 71.02, 71.00, 70.98, 70.97, 70.95, 70.93, 70.91, 70.89, 70.87, 70.86, 70.84, 70.82, 70.80, 70.78, 70.77, 70.75, 70.73, 70.71, 70.69, 70.68, 70.66, 70.64, 70.62, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.45, 70.43, 70.41, 70.39, 70.37, 70.36, 70.34, 70.32, 70.30, 70.29, 70.27, 70.25, 70.23, 70.22, 70.20, 70.18, 70.16, 70.15, 70.13, 70.11, 70.10, 70.08, 70.06, 70.04, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.85, 69.84, 69.82, 69.80, 69.79, 69.77, 69.75, 69.73, 69.72, 69.70, 69.68, 69.67, 69.65, 69.63, 69.62, 69.60, 69.58, 69.57, 69.55, 69.53, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.12, 69.10, 69.08, 69.07, 69.05, 69.04, 69.02, 69.00, 68.99, 68.97, 68.95, 68.94},
{71.98, 71.97, 71.95, 71.93, 71.91, 71.89, 71.87, 71.85, 71.84, 71.82, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.63, 71.62, 71.60, 71.58, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.34, 71.33, 71.31, 71.29, 71.27, 71.25, 71.24, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.02, 71.01, 70.99, 70.97, 70.95, 70.93, 70.92, 70.90, 70.88, 70.86, 70.85, 70.83, 70.81, 70.79, 70.78, 70.76, 70.74, 70.72, 70.71, 70.69, 70.67, 70.65, 70.64, 70.62, 70.60, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.41, 70.40, 70.38, 70.36, 70.35, 70.33, 70.31, 70.29, 70.28, 70.26, 70.24, 70.23, 70.21, 70.19, 70.18, 70.16, 70.14, 70.13, 70.11, 70.09, 70.07, 70.06, 70.04, 70.02, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.86, 69.84, 69.82, 69.81, 69.79, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.68, 69.66, 69.64, 69.63, 69.61, 69.59, 69.58, 69.56},
{72.60, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.47, 72.45, 72.43, 72.41, 72.40, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.21, 72.19, 72.18, 72.16, 72.14, 72.12, 72.10, 72.08, 72.07, 72.05, 72.03, 72.01, 71.99, 71.98, 71.96, 71.94, 71.92, 71.90, 71.89, 71.87, 71.85, 71.83, 71.81, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.64, 71.62, 71.60, 71.58, 71.57, 71.55, 71.53, 71.51, 71.49, 71.48, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.35, 71.34, 71.32, 71.30, 71.28, 71.27, 71.25, 71.23, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.97, 70.96, 70.94, 70.92, 70.91, 70.89, 70.87, 70.85, 70.84, 70.82, 70.80, 70.79, 70.77, 70.75, 70.74, 70.72, 70.70, 70.69, 70.67, 70.65, 70.63, 70.62, 70.60, 70.58, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.42, 70.40, 70.38, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.27, 70.25, 70.24, 70.22, 70.20, 70.19, 70.17},
{73.20, 73.18, 73.16, 73.14, 73.13, 73.11, 73.09, 73.07, 73.05, 73.03, 73.01, 73.00, 72.98, 72.96, 72.94, 72.92, 72.90, 72.88, 72.87, 72.85, 72.83, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.68, 72.67, 72.65, 72.63, 72.61, 72.59, 72.57, 72.56, 72.54, 72.52, 72.50, 72.48, 72.47, 72.45, 72.43, 72.41, 72.39, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.22, 72.20, 72.18, 72.16, 72.14, 72.13, 72.11, 72.09, 72.07, 72.06, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.93, 71.92, 71.90, 71.88, 71.86, 71.85, 71.83, 71.81, 71.79, 71.78, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.60, 71.59, 71.57, 71.55, 71.54, 71.52, 71.50, 71.48, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.25, 71.23, 71.21, 71.20, 71.18, 71.16, 71.14, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.98, 70.96, 70.94, 70.93, 70.91, 70.89, 70.88, 70.86, 70.85, 70.83, 70.81, 70.80, 70.78, 70.76},
{73.78, 73.76, 73.75, 73.73, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.52, 73.50, 73.49, 73.47, 73.45, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.10, 73.08, 73.07, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.90, 72.89, 72.87, 72.85, 72.83, 72.82, 72.80, 72.78, 72.76, 72.74, 72.73, 72.71, 72.69, 72.67, 72.66, 72.64, 72.62, 72.60, 72.58, 72.57, 72.55, 72.53, 72.51, 72.50, 72.48, 72.46, 72.44, 72.43, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.25, 72.24, 72.22, 72.20, 72.18, 72.17, 72.15, 72.13, 72.12, 72.10, 72.08, 72.06, 72.05, 72.03, 72.01, 72.00, 71.98, 71.96, 71.94, 71.93, 71.91, 71.89, 71.88, 71.86, 71.84, 71.83, 71.81, 71.79, 71.77, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.61, 71.59, 71.57, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.36, 71.34},
{74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.18, 74.16, 74.15, 74.13, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.98, 73.96, 73.94, 73.92, 73.91, 73.89, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.76, 73.74, 73.72, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.53, 73.51, 73.49, 73.47, 73.45, 73.44, 73.42, 73.40, 73.38, 73.36, 73.35, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.22, 73.20, 73.19, 73.17, 73.15, 73.13, 73.12, 73.10, 73.08, 73.06, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.85, 72.84, 72.82, 72.80, 72.78, 72.77, 72.75, 72.73, 72.72, 72.70, 72.68, 72.66, 72.65, 72.63, 72.61, 72.59, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.48, 72.46, 72.44, 72.42, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.26, 72.24, 72.22, 72.20, 72.19, 72.17, 72.15, 72.14, 72.12, 72.10, 72.09, 72.07, 72.05, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.94, 71.92, 71.90},
{74.90, 74.89, 74.87, 74.85, 74.83, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.55, 74.53, 74.51, 74.50, 74.48, 74.46, 74.44, 74.42, 74.40, 74.39, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.19, 74.17, 74.15, 74.13, 74.11, 74.10, 74.08, 74.06, 74.04, 74.02, 74.01, 73.99, 73.97, 73.95, 73.93, 73.92, 73.90, 73.88, 73.86, 73.85, 73.83, 73.81, 73.79, 73.77, 73.76, 73.74, 73.72, 73.70, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.49, 73.48, 73.46, 73.44, 73.42, 73.41, 73.39, 73.37, 73.35, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.22, 73.20, 73.18, 73.16, 73.15, 73.13, 73.11, 73.09, 73.08, 73.06, 73.04, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.86, 72.84, 72.82, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.69, 72.67, 72.65, 72.64, 72.62, 72.60, 72.59, 72.57, 72.55, 72.54, 72.52, 72.50, 72.49, 72.47, 72.45},
{75.44, 75.43, 75.41, 75.39, 75.37, 75.35, 75.33, 75.31, 75.29, 75.28, 75.26, 75.24, 75.22, 75.20, 75.18, 75.16, 75.15, 75.13, 75.11, 75.09, 75.07, 75.05, 75.04, 75.02, 75.00, 74.98, 74.96, 74.94, 74.93, 74.91, 74.89, 74.87, 74.85, 74.83, 74.82, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.67, 74.65, 74.63, 74.62, 74.60, 74.58, 74.56, 74.55, 74.53, 74.51, 74.49, 74.47, 74.46, 74.44, 74.42, 74.40, 74.38, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.21, 74.19, 74.17, 74.15, 74.14, 74.12, 74.10, 74.08, 74.07, 74.05, 74.03, 74.01, 74.00, 73.98, 73.96, 73.94, 73.93, 73.91, 73.89, 73.87, 73.86, 73.84, 73.82, 73.80, 73.79, 73.77, 73.75, 73.74, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.50, 73.48, 73.46, 73.44, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.11, 73.09, 73.07, 73.06, 73.04, 73.02, 73.01, 72.99},
{75.97, 75.95, 75.93, 75.91, 75.89, 75.88, 75.86, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.65, 75.63, 75.62, 75.60, 75.58, 75.56, 75.54, 75.52, 75.51, 75.49, 75.47, 75.45, 75.43, 75.41, 75.40, 75.38, 75.36, 75.34, 75.32, 75.31, 75.29, 75.27, 75.25, 75.23, 75.21, 75.20, 75.18, 75.16, 75.14, 75.12, 75.11, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.87, 74.86, 74.84, 74.82, 74.80, 74.79, 74.77, 74.75, 74.73, 74.71, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.56, 74.54, 74.52, 74.50, 74.49, 74.47, 74.45, 74.43, 74.42, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.17, 74.16, 74.14, 74.12, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.99, 73.97, 73.95, 73.94, 73.92, 73.90, 73.88, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.77, 73.75, 73.73, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.57, 73.55, 73.53, 73.52},
{76.48, 76.46, 76.44, 76.43, 76.41, 76.39, 76.37, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.22, 76.20, 76.18, 76.17, 76.15, 76.13, 76.11, 76.09, 76.07, 76.06, 76.04, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.89, 75.87, 75.85, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.58, 75.57, 75.55, 75.53, 75.51, 75.49, 75.48, 75.46, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.26, 75.24, 75.23, 75.21, 75.19, 75.17, 75.16, 75.14, 75.12, 75.10, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.88, 74.86, 74.84, 74.82, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.69, 74.67, 74.65, 74.64, 74.62, 74.60, 74.58, 74.57, 74.55, 74.53, 74.52, 74.50, 74.48, 74.46, 74.45, 74.43, 74.41, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.18, 74.16, 74.14, 74.13, 74.11, 74.09, 74.08, 74.06, 74.04, 74.03},
{76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.87, 76.85, 76.83, 76.81, 76.80, 76.78, 76.76, 76.74, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.61, 76.59, 76.57, 76.56, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.37, 76.35, 76.34, 76.32, 76.30, 76.28, 76.26, 76.25, 76.23, 76.21, 76.19, 76.17, 76.16, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.01, 75.99, 75.98, 75.96, 75.94, 75.92, 75.90, 75.89, 75.87, 75.85, 75.83, 75.82, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.59, 75.57, 75.55, 75.53, 75.52, 75.50, 75.48, 75.46, 75.45, 75.43, 75.41, 75.39, 75.38, 75.36, 75.34, 75.33, 75.31, 75.29, 75.27, 75.26, 75.24, 75.22, 75.20, 75.19, 75.17, 75.15, 75.14, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.90, 74.88, 74.86, 74.85, 74.83, 74.81, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.58, 74.56, 74.54, 74.53},
{77.47, 77.45, 77.43, 77.41, 77.39, 77.38, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.15, 77.14, 77.12, 77.10, 77.08, 77.06, 77.04, 77.03, 77.01, 76.99, 76.97, 76.95, 76.93, 76.92, 76.90, 76.88, 76.86, 76.84, 76.82, 76.81, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.66, 76.64, 76.63, 76.61, 76.59, 76.57, 76.55, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.32, 76.30, 76.29, 76.27, 76.25, 76.23, 76.22, 76.20, 76.18, 76.16, 76.15, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.02, 76.01, 75.99, 75.97, 75.95, 75.94, 75.92, 75.90, 75.88, 75.87, 75.85, 75.83, 75.81, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.62, 75.61, 75.59, 75.57, 75.56, 75.54, 75.52, 75.50, 75.49, 75.47, 75.45, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.27, 75.25, 75.23, 75.22, 75.20, 75.18, 75.17, 75.15, 75.13, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02},
{77.95, 77.93, 77.91, 77.89, 77.87, 77.85, 77.83, 77.82, 77.80, 77.78, 77.76, 77.74, 77.72, 77.70, 77.69, 77.67, 77.65, 77.63, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.39, 77.37, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.16, 77.14, 77.12, 77.10, 77.08, 77.07, 77.05, 77.03, 77.01, 76.99, 76.98, 76.96, 76.94, 76.92, 76.91, 76.89, 76.87, 76.85, 76.83, 76.82, 76.80, 76.78, 76.76, 76.75, 76.73, 76.71, 76.69, 76.68, 76.66, 76.64, 76.62, 76.60, 76.59, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.33, 76.31, 76.29, 76.27, 76.26, 76.24, 76.22, 76.20, 76.19, 76.17, 76.15, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.90, 75.88, 75.86, 75.85, 75.83, 75.81, 75.79, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.63, 75.61, 75.59, 75.58, 75.56, 75.54, 75.53, 75.51, 75.49},
{78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.26, 78.24, 78.22, 78.21, 78.19, 78.17, 78.15, 78.13, 78.11, 78.10, 78.08, 78.06, 78.04, 78.02, 78.00, 77.99, 77.97, 77.95, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.82, 77.80, 77.78, 77.77, 77.75, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.60, 77.59, 77.57, 77.55, 77.53, 77.51, 77.50, 77.48, 77.46, 77.44, 77.42, 77.41, 77.39, 77.37, 77.35, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.18, 77.16, 77.14, 77.12, 77.11, 77.09, 77.07, 77.05, 77.04, 77.02, 77.00, 76.98, 76.97, 76.95, 76.93, 76.91, 76.90, 76.88, 76.86, 76.84, 76.83, 76.81, 76.79, 76.77, 76.76, 76.74, 76.72, 76.71, 76.69, 76.67, 76.65, 76.64, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.41, 76.40, 76.38, 76.36, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.23, 76.21, 76.19, 76.18, 76.16, 76.14, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.03, 76.01, 75.99, 75.98, 75.96},
{78.86, 78.85, 78.83, 78.81, 78.79, 78.77, 78.75, 78.73, 78.72, 78.70, 78.68, 78.66, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.22, 78.20, 78.19, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.93, 77.92, 77.90, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.77, 77.76, 77.74, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.61, 77.60, 77.58, 77.56, 77.54, 77.53, 77.51, 77.49, 77.47, 77.46, 77.44, 77.42, 77.40, 77.39, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.14, 77.13, 77.11, 77.09, 77.08, 77.06, 77.04, 77.02, 77.01, 76.99, 76.97, 76.96, 76.94, 76.92, 76.90, 76.89, 76.87, 76.85, 76.84, 76.82, 76.80, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.42},
{79.31, 79.29, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.77, 78.76, 78.74, 78.72, 78.70, 78.68, 78.67, 78.65, 78.63, 78.61, 78.59, 78.58, 78.56, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.41, 78.40, 78.38, 78.36, 78.34, 78.32, 78.31, 78.29, 78.27, 78.25, 78.24, 78.22, 78.20, 78.18, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.94, 77.92, 77.90, 77.88, 77.87, 77.85, 77.83, 77.81, 77.80, 77.78, 77.76, 77.74, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.49, 77.47, 77.45, 77.44, 77.42, 77.40, 77.38, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.15, 77.13, 77.11, 77.10, 77.08, 77.06, 77.05, 77.03, 77.01, 77.00, 76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.88, 76.86},
{79.74, 79.72, 79.70, 79.68, 79.67, 79.65, 79.63, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.50, 79.48, 79.46, 79.45, 79.43, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.08, 79.06, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.78, 78.76, 78.74, 78.72, 78.71, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.27, 78.25, 78.23, 78.22, 78.20, 78.18, 78.16, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.97, 77.96, 77.94, 77.92, 77.91, 77.89, 77.87, 77.85, 77.84, 77.82, 77.80, 77.79, 77.77, 77.75, 77.73, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.62, 77.60, 77.58, 77.57, 77.55, 77.53, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.40, 77.38, 77.36, 77.35, 77.33, 77.31, 77.30},
{80.16, 80.14, 80.13, 80.11, 80.09, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.96, 79.94, 79.92, 79.91, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.70, 79.69, 79.67, 79.65, 79.63, 79.61, 79.60, 79.58, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.45, 79.43, 79.42, 79.40, 79.38, 79.36, 79.34, 79.33, 79.31, 79.29, 79.27, 79.26, 79.24, 79.22, 79.20, 79.18, 79.17, 79.15, 79.13, 79.11, 79.10, 79.08, 79.06, 79.04, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.80, 78.78, 78.76, 78.75, 78.73, 78.71, 78.69, 78.68, 78.66, 78.64, 78.62, 78.61, 78.59, 78.57, 78.55, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.30, 78.28, 78.26, 78.25, 78.23, 78.21, 78.20, 78.18, 78.16, 78.14, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.98, 77.96, 77.94, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.78, 77.76, 77.74, 77.73},
{80.58, 80.56, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.41, 80.39, 80.37, 80.36, 80.34, 80.32, 80.30, 80.28, 80.27, 80.25, 80.23, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.01, 79.99, 79.98, 79.96, 79.94, 79.92, 79.90, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.71, 79.69, 79.67, 79.65, 79.64, 79.62, 79.60, 79.58, 79.56, 79.55, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.42, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.13, 79.11, 79.09, 79.08, 79.06, 79.04, 79.02, 79.01, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.83, 78.82, 78.80, 78.78, 78.77, 78.75, 78.73, 78.71, 78.70, 78.68, 78.66, 78.65, 78.63, 78.61, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.43, 78.41, 78.39, 78.38, 78.36, 78.34, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.23, 78.21, 78.19, 78.18, 78.16, 78.14},
{80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.87, 80.85, 80.83, 80.82, 80.80, 80.78, 80.76, 80.74, 80.73, 80.71, 80.69, 80.67, 80.65, 80.63, 80.62, 80.60, 80.58, 80.56, 80.54, 80.53, 80.51, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.38, 80.36, 80.35, 80.33, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.18, 80.17, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.04, 80.02, 80.01, 79.99, 79.97, 79.95, 79.94, 79.92, 79.90, 79.88, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.67, 79.66, 79.64, 79.62, 79.60, 79.59, 79.57, 79.55, 79.53, 79.52, 79.50, 79.48, 79.47, 79.45, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35, 79.33, 79.31, 79.29, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.16, 79.14, 79.12, 79.11, 79.09, 79.07, 79.06, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.84, 78.82, 78.80, 78.79, 78.77, 78.75, 78.74, 78.72, 78.70, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55},
{81.38, 81.36, 81.34, 81.32, 81.30, 81.29, 81.27, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.10, 81.08, 81.07, 81.05, 81.03, 81.01, 80.99, 80.98, 80.96, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.83, 80.81, 80.80, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.56, 80.55, 80.53, 80.51, 80.49, 80.48, 80.46, 80.44, 80.42, 80.41, 80.39, 80.37, 80.35, 80.33, 80.32, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.19, 80.18, 80.16, 80.14, 80.12, 80.11, 80.09, 80.07, 80.06, 80.04, 80.02, 80.00, 79.99, 79.97, 79.95, 79.93, 79.92, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.68, 79.66, 79.64, 79.62, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.46, 79.44, 79.42, 79.40, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.29, 79.27, 79.25, 79.24, 79.22, 79.20, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95},
{81.76, 81.75, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.56, 81.55, 81.53, 81.51, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.11, 81.10, 81.08, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.88, 80.87, 80.85, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.57, 80.55, 80.53, 80.51, 80.50, 80.48, 80.46, 80.45, 80.43, 80.41, 80.39, 80.38, 80.36, 80.34, 80.32, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.19, 80.17, 80.15, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.97, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73, 79.71, 79.70, 79.68, 79.66, 79.64, 79.63, 79.61, 79.59, 79.58, 79.56, 79.54, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35},
{82.14, 82.12, 82.11, 82.09, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.85, 81.83, 81.82, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.49, 81.48, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.26, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.11, 81.09, 81.07, 81.05, 81.04, 81.02, 81.00, 80.98, 80.97, 80.95, 80.93, 80.91, 80.90, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.60, 80.59, 80.57, 80.55, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.42, 80.40, 80.38, 80.37, 80.35, 80.33, 80.31, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.20, 80.18, 80.16, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.05, 80.03, 80.01, 80.00, 79.98, 79.96, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73},
{82.51, 82.50, 82.48, 82.46, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.24, 82.22, 82.21, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.06, 82.04, 82.03, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.90, 81.88, 81.87, 81.85, 81.83, 81.81, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.50, 81.48, 81.46, 81.44, 81.43, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.25, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.06, 81.05, 81.03, 81.01, 81.00, 80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.52, 80.50, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.39, 80.37, 80.35, 80.34, 80.32, 80.30, 80.29, 80.27, 80.26, 80.24, 80.22, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.11},
{82.88, 82.86, 82.84, 82.82, 82.80, 82.79, 82.77, 82.75, 82.73, 82.71, 82.70, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.53, 82.52, 82.50, 82.48, 82.46, 82.44, 82.43, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.30, 82.28, 82.27, 82.25, 82.23, 82.21, 82.20, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.07, 82.06, 82.04, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.88, 81.86, 81.85, 81.83, 81.81, 81.79, 81.78, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.53, 81.52, 81.50, 81.48, 81.47, 81.45, 81.43, 81.41, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.28, 81.26, 81.24, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.13, 81.11, 81.09, 81.07, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.96, 80.94, 80.92, 80.91, 80.89, 80.87, 80.86, 80.84, 80.82, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.53, 80.51, 80.49, 80.48},
{83.23, 83.21, 83.20, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.03, 83.02, 83.00, 82.98, 82.96, 82.94, 82.93, 82.91, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.78, 82.77, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.48, 82.47, 82.45, 82.43, 82.41, 82.40, 82.38, 82.36, 82.34, 82.33, 82.31, 82.29, 82.27, 82.26, 82.24, 82.22, 82.20, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.01, 82.00, 81.98, 81.96, 81.94, 81.93, 81.91, 81.89, 81.88, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.27, 81.25, 81.23, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.07, 81.05, 81.04, 81.02, 81.00, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.84},
{83.58, 83.56, 83.54, 83.53, 83.51, 83.49, 83.47, 83.45, 83.44, 83.42, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.22, 83.20, 83.19, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.06, 83.04, 83.03, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.83, 82.82, 82.80, 82.78, 82.76, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.49, 82.47, 82.45, 82.43, 82.42, 82.40, 82.38, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.02, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.21, 81.19},
{83.92, 83.90, 83.89, 83.87, 83.85, 83.83, 83.81, 83.80, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.63, 83.62, 83.60, 83.58, 83.56, 83.55, 83.53, 83.51, 83.49, 83.48, 83.46, 83.44, 83.42, 83.40, 83.39, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.26, 83.25, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.04, 83.02, 83.00, 82.99, 82.97, 82.95, 82.93, 82.92, 82.90, 82.88, 82.86, 82.85, 82.83, 82.81, 82.80, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.45, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.34, 82.32, 82.30, 82.29, 82.27, 82.25, 82.24, 82.22, 82.20, 82.18, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.89, 81.87, 81.85, 81.84, 81.82, 81.80, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.61, 81.59, 81.57, 81.56, 81.54},
{84.26, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.09, 84.08, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.86, 83.85, 83.83, 83.81, 83.79, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.51, 83.50, 83.48, 83.46, 83.44, 83.43, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.25, 83.24, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.91, 82.89, 82.88, 82.86, 82.84, 82.83, 82.81, 82.79, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.46, 82.44, 82.42, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.31, 82.29, 82.28, 82.26, 82.24, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.03, 82.01, 82.00, 81.98, 81.96, 81.95, 81.93, 81.91, 81.90, 81.88},
{84.58, 84.56, 84.55, 84.53, 84.51, 84.49, 84.48, 84.46, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.33, 84.32, 84.30, 84.28, 84.26, 84.25, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.10, 84.09, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.96, 83.95, 83.93, 83.91, 83.90, 83.88, 83.86, 83.84, 83.83, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.52, 83.50, 83.48, 83.46, 83.45, 83.43, 83.41, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.07, 83.06, 83.04, 83.02, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.91, 82.89, 82.87, 82.86, 82.84, 82.82, 82.81, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54, 82.53, 82.51, 82.49, 82.48, 82.46, 82.44, 82.43, 82.41, 82.40, 82.38, 82.36, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.22},
{84.90, 84.89, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.53, 84.51, 84.50, 84.48, 84.46, 84.44, 84.43, 84.41, 84.39, 84.38, 84.36, 84.34, 84.32, 84.31, 84.29, 84.27, 84.25, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.10, 84.08, 84.06, 84.05, 84.03, 84.01, 83.99, 83.98, 83.96, 83.94, 83.93, 83.91, 83.89, 83.87, 83.86, 83.84, 83.82, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.48, 83.47, 83.45, 83.43, 83.42, 83.40, 83.38, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.27, 83.25, 83.23, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.02, 83.00, 82.99, 82.97, 82.95, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54},
{85.22, 85.20, 85.18, 85.16, 85.15, 85.13, 85.11, 85.09, 85.08, 85.06, 85.04, 85.02, 85.01, 84.99, 84.97, 84.95, 84.94, 84.92, 84.90, 84.88, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.54, 84.52, 84.50, 84.48, 84.47, 84.45, 84.43, 84.42, 84.40, 84.38, 84.36, 84.35, 84.33, 84.31, 84.30, 84.28, 84.26, 84.24, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.11, 84.09, 84.07, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.96, 83.94, 83.92, 83.91, 83.89, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.49, 83.47, 83.45, 83.44, 83.42, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.26, 83.24, 83.22, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.08, 83.06, 83.04, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.92, 82.90, 82.88, 82.87},
{85.53, 85.51, 85.49, 85.47, 85.46, 85.44, 85.42, 85.40, 85.39, 85.37, 85.35, 85.33, 85.32, 85.30, 85.28, 85.26, 85.25, 85.23, 85.21, 85.19, 85.18, 85.16, 85.14, 85.12, 85.11, 85.09, 85.07, 85.05, 85.04, 85.02, 85.00, 84.98, 84.97, 84.95, 84.93, 84.92, 84.90, 84.88, 84.86, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.68, 84.66, 84.64, 84.62, 84.61, 84.59, 84.57, 84.56, 84.54, 84.52, 84.51, 84.49, 84.47, 84.45, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.34, 84.32, 84.30, 84.29, 84.27, 84.25, 84.23, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.12, 84.10, 84.08, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.56, 83.54, 83.52, 83.51, 83.49, 83.47, 83.46, 83.44, 83.43, 83.41, 83.39, 83.38, 83.36, 83.34, 83.33, 83.31, 83.30, 83.28, 83.26, 83.25, 83.23, 83.22, 83.20, 83.18}
};
const float InverseMapW[80][140] = {
{-43.41, -41.64, -39.87, -38.10, -36.34, -34.58, -32.83, -31.09, -29.34, -27.61, -25.88, -24.15, -22.43, -20.72, -19.00, -17.30, -15.60, -13.90, -12.21, -10.52, -8.84, -7.16, -5.49, -3.82, -2.16, -0.50, 1.15, 2.80, 4.44, 6.08, 7.72, 9.35, 10.97, 12.60, 14.21, 15.82, 17.43, 19.04, 20.63, 22.23, 23.82, 25.40, 26.99, 28.56, 30.13, 31.70, 33.27, 34.83, 36.38, 37.93, 39.48, 41.02, 42.56, 44.10, 45.63, 47.15, 48.67, 50.19, 51.70, 53.21, 54.72, 56.22, 57.72, 59.21, 60.70, 62.19, 63.67, 65.15, 66.62, 68.09, 69.55, 71.02, 72.47, 73.93, 75.38, 76.82, 78.27, 79.71, 81.14, 82.57, 84.00, 85.42, 86.84, 88.26, 89.67, 91.08, 92.49, 93.89, 95.29, 96.68, 98.07, 99.46, 100.84, 102.22, 103.60, 104.97, 106.34, 107.71, 109.07, 110.43, 111.78, 113.14, 114.48, 115.83, 117.17, 118.51, 119.84, 121.18, 122.50, 123.83, 125.15, 126.47, 127.78, 129.10, 130.40, 131.71, 133.01, 134.31, 135.60, 136.90, 138.18, 139.47, 140.75, 142.03, 143.31, 144.58, 145.85, 147.12, 148.38, 149.64, 150.90, 152.15, 153.40, 154.65, 155.90, 157.14, 158.38, 159.61, 160.84, 162.07},
{-38.86, -37.16, -35.46, -33.77, -32.09, -30.41, -28.73, -27.06, -25.39, -23.73, -22.07, -20.42, -18.77, -17.13, -15.49, -13.85, -12.22, -10.60, -8.97, -7.36, -5.75, -4.14, -2.53, -0.93, 0.66, 2.25, 3.84, 5.42, 7.00, 8.57, 10.14, 11.70, 13.27, 14.82, 16.37, 17.92, 19.47, 21.01, 22.54, 24.07, 25.60, 27.13, 28.65, 30.16, 31.67, 33.18, 34.68, 36.18, 37.68, 39.17, 40.66, 42.14, 43.62, 45.10, 46.57, 48.04, 49.50, 50.96, 52.42, 53.87, 55.32, 56.77, 58.21, 59.65, 61.08, 62.51, 63.94, 65.36, 66.78, 68.20, 69.61, 71.02, 72.43, 73.83, 75.23, 76.62, 78.01, 79.40, 80.78, 82.16, 83.54, 84.92, 86.29, 87.65, 89.02, 90.37, 91.73, 93.08, 94.43, 95.78, 97.12, 98.46, 99.80, 101.13, 102.46, 103.79, 105.11, 106.43, 107.75, 109.06, 110.37, 111.68, 112.98, 114.28, 115.58, 116.87, 118.16, 119.45, 120.73, 122.01, 123.29, 124.57, 125.84, 127.11, 128.37, 129.64, 130.90, 132.15, 133.41, 134.66, 135.90, 137.15, 138.39, 139.63, 140.86, 142.10, 143.33, 144.55, 145.78, 147.00, 148.22, 149.43, 150.64, 151.85, 153.06, 154.26, 155.46, 156.66, 157.86, 159.05},
{-34.65, -33.02, -31.39, -29.77, -28.16, -26.55, -24.94, -23.34, -21.74, -20.14, -18.55, -16.97, -15.38, -13.81, -12.23, -10.66, -9.10, -7.54, -5.98, -4.43, -2.88, -1.34, 0.20, 1.74, 3.27, 4.80, 6.33, 7.85, 9.36, 10.87, 12.38, 13.89, 15.39, 16.89, 18.38, 19.87, 21.35, 22.83, 24.31, 25.79, 27.26, 28.72, 30.18, 31.64, 33.10, 34.55, 36.00, 37.44, 38.88, 40.32, 41.75, 43.18, 44.61, 46.03, 47.45, 48.86, 50.27, 51.68, 53.09, 54.49, 55.88, 57.28, 58.67, 60.06, 61.44, 62.82, 64.20, 65.57, 66.94, 68.30, 69.67, 71.03, 72.38, 73.74, 75.09, 76.43, 77.78, 79.12, 80.45, 81.79, 83.12, 84.44, 85.77, 87.09, 88.40, 89.72, 91.03, 92.33, 93.64, 94.94, 96.24, 97.53, 98.82, 100.11, 101.40, 102.68, 103.96, 105.24, 106.51, 107.78, 109.05, 110.31, 111.57, 112.83, 114.09, 115.34, 116.59, 117.84, 119.08, 120.32, 121.56, 122.79, 124.02, 125.25, 126.48, 127.70, 128.92, 130.14, 131.35, 132.57, 133.77, 134.98, 136.18, 137.38, 138.58, 139.78, 140.97, 142.16, 143.35, 144.53, 145.71, 146.89, 148.07, 149.24, 150.41, 151.58, 152.74, 153.90, 155.06, 156.22},
{-30.75, -29.19, -27.63, -26.07, -24.52, -22.97, -21.43, -19.89, -18.35, -16.82, -15.29, -13.77, -12.24, -10.73, -9.22, -7.71, -6.20, -4.70, -3.20, -1.71, -0.22, 1.26, 2.75, 4.22, 5.70, 7.17, 8.64, 10.10, 11.56, 13.02, 14.47, 15.92, 17.36, 18.80, 20.24, 21.68, 23.11, 24.53, 25.96, 27.38, 28.79, 30.21, 31.62, 33.02, 34.43, 35.82, 37.22, 38.61, 40.00, 41.39, 42.77, 44.15, 45.52, 46.90, 48.26, 49.63, 50.99, 52.35, 53.71, 55.06, 56.41, 57.75, 59.09, 60.43, 61.77, 63.10, 64.43, 65.76, 67.08, 68.40, 69.72, 71.03, 72.34, 73.65, 74.96, 76.26, 77.55, 78.85, 80.14, 81.43, 82.72, 84.00, 85.28, 86.56, 87.83, 89.10, 90.37, 91.63, 92.90, 94.16, 95.41, 96.67, 97.92, 99.16, 100.41, 101.65, 102.89, 104.12, 105.36, 106.59, 107.81, 109.04, 110.26, 111.48, 112.70, 113.91, 115.12, 116.33, 117.53, 118.73, 119.93, 121.13, 122.32, 123.52, 124.70, 125.89, 127.07, 128.25, 129.43, 130.61, 131.78, 132.95, 134.12, 135.28, 136.44, 137.60, 138.76, 139.92, 141.07, 142.22, 143.36, 144.51, 145.65, 146.79, 147.92, 149.06, 150.19, 151.32, 152.45, 153.57},
{-27.13, -25.62, -24.12, -22.63, -21.13, -19.64, -18.16, -16.68, -15.20, -13.73, -12.26, -10.79, -9.32, -7.87, -6.41, -4.96, -3.51, -2.06, -0.62, 0.82, 2.25, 3.68, 5.11, 6.54, 7.96, 9.37, 10.79, 12.20, 13.61, 15.01, 16.41, 17.81, 19.20, 20.59, 21.98, 23.36, 24.74, 26.12, 27.49, 28.86, 30.23, 31.59, 32.95, 34.31, 35.66, 37.01, 38.36, 39.71, 41.05, 42.38, 43.72, 45.05, 46.38, 47.70, 49.03, 50.35, 51.66, 52.97, 54.28, 55.59, 56.90, 58.20, 59.49, 60.79, 62.08, 63.37, 64.65, 65.94, 67.22, 68.49, 69.77, 71.04, 72.31, 73.57, 74.83, 76.09, 77.35, 78.60, 79.85, 81.10, 82.34, 83.59, 84.83, 86.06, 87.30, 88.53, 89.75, 90.98, 92.20, 93.42, 94.64, 95.85, 97.06, 98.27, 99.48, 100.68, 101.88, 103.08, 104.28, 105.47, 106.66, 107.85, 109.03, 110.21, 111.39, 112.57, 113.74, 114.91, 116.08, 117.25, 118.41, 119.57, 120.73, 121.89, 123.04, 124.19, 125.34, 126.49, 127.63, 128.77, 129.91, 131.05, 132.18, 133.31, 134.44, 135.56, 136.69, 137.81, 138.93, 140.04, 141.16, 142.27, 143.38, 144.49, 145.59, 146.69, 147.79, 148.89, 149.98, 151.08},
{-23.75, -22.31, -20.86, -19.42, -17.98, -16.55, -15.12, -13.69, -12.26, -10.84, -9.43, -8.01, -6.60, -5.20, -3.79, -2.39, -0.99, 0.40, 1.79, 3.18, 4.56, 5.94, 7.32, 8.69, 10.06, 11.43, 12.80, 14.16, 15.52, 16.87, 18.22, 19.57, 20.92, 22.26, 23.60, 24.93, 26.27, 27.60, 28.92, 30.25, 31.57, 32.89, 34.20, 35.51, 36.82, 38.13, 39.43, 40.73, 42.02, 43.32, 44.61, 45.89, 47.18, 48.46, 49.74, 51.02, 52.29, 53.56, 54.83, 56.09, 57.35, 58.61, 59.87, 61.12, 62.37, 63.62, 64.86, 66.10, 67.34, 68.58, 69.81, 71.04, 72.27, 73.50, 74.72, 75.94, 77.15, 78.37, 79.58, 80.79, 82.00, 83.20, 84.40, 85.60, 86.79, 87.99, 89.18, 90.37, 91.55, 92.73, 93.91, 95.09, 96.27, 97.44, 98.61, 99.77, 100.94, 102.10, 103.26, 104.42, 105.57, 106.72, 107.87, 109.02, 110.17, 111.31, 112.45, 113.59, 114.72, 115.85, 116.98, 118.11, 119.24, 120.36, 121.48, 122.60, 123.71, 124.83, 125.94, 127.04, 128.15, 129.25, 130.36, 131.46, 132.55, 133.65, 134.74, 135.83, 136.92, 138.00, 139.08, 140.17, 141.24, 142.32, 143.39, 144.47, 145.54, 146.60, 147.67, 148.73},
{-20.61, -19.21, -17.82, -16.43, -15.04, -13.65, -12.27, -10.90, -9.52, -8.15, -6.78, -5.42, -4.06, -2.70, -1.34, 0.01, 1.36, 2.70, 4.04, 5.38, 6.72, 8.05, 9.39, 10.71, 12.04, 13.36, 14.68, 15.99, 17.30, 18.61, 19.92, 21.22, 22.52, 23.82, 25.12, 26.41, 27.70, 28.98, 30.27, 31.55, 32.82, 34.10, 35.37, 36.64, 37.90, 39.17, 40.43, 41.68, 42.94, 44.19, 45.44, 46.69, 47.93, 49.17, 50.41, 51.64, 52.88, 54.11, 55.33, 56.56, 57.78, 59.00, 60.22, 61.43, 62.64, 63.85, 65.06, 66.26, 67.46, 68.66, 69.85, 71.05, 72.24, 73.42, 74.61, 75.79, 76.97, 78.15, 79.33, 80.50, 81.67, 82.84, 84.00, 85.16, 86.32, 87.48, 88.64, 89.79, 90.94, 92.09, 93.23, 94.37, 95.51, 96.65, 97.79, 98.92, 100.05, 101.18, 102.31, 103.43, 104.55, 105.67, 106.79, 107.90, 109.01, 110.12, 111.23, 112.34, 113.44, 114.54, 115.64, 116.73, 117.83, 118.92, 120.01, 121.09, 122.18, 123.26, 124.34, 125.42, 126.49, 127.57, 128.64, 129.71, 130.77, 131.84, 132.90, 133.96, 135.02, 136.08, 137.13, 138.18, 139.23, 140.28, 141.32, 142.37, 143.41, 144.45, 145.48, 146.52},
{-17.66, -16.31, -14.96, -13.62, -12.28, -10.95, -9.61, -8.28, -6.95, -5.63, -4.31, -2.99, -1.67, -0.36, 0.95, 2.25, 3.56, 4.86, 6.16, 7.45, 8.74, 10.03, 11.32, 12.60, 13.89, 15.16, 16.44, 17.71, 18.98, 20.25, 21.51, 22.77, 24.03, 25.29, 26.54, 27.79, 29.04, 30.28, 31.52, 32.76, 34.00, 35.24, 36.47, 37.70, 38.92, 40.14, 41.37, 42.58, 43.80, 45.01, 46.22, 47.43, 48.63, 49.84, 51.04, 52.23, 53.43, 54.62, 55.81, 57.00, 58.18, 59.37, 60.55, 61.72, 62.90, 64.07, 65.24, 66.41, 67.57, 68.73, 69.89, 71.05, 72.21, 73.36, 74.51, 75.66, 76.80, 77.94, 79.08, 80.22, 81.36, 82.49, 83.62, 84.75, 85.88, 87.00, 88.12, 89.24, 90.36, 91.48, 92.59, 93.70, 94.81, 95.91, 97.02, 98.12, 99.22, 100.31, 101.41, 102.50, 103.59, 104.68, 105.76, 106.85, 107.93, 109.01, 110.08, 111.16, 112.23, 113.30, 114.37, 115.43, 116.50, 117.56, 118.62, 119.68, 120.73, 121.78, 122.84, 123.88, 124.93, 125.98, 127.02, 128.06, 129.10, 130.13, 131.17, 132.20, 133.23, 134.26, 135.29, 136.31, 137.33, 138.35, 139.37, 140.39, 141.40, 142.41, 143.42, 144.43},
{-14.89, -13.59, -12.29, -10.99, -9.70, -8.40, -7.12, -5.83, -4.55, -3.26, -1.99, -0.71, 0.56, 1.83, 3.10, 4.36, 5.63, 6.88, 8.14, 9.39, 10.65, 11.89, 13.14, 14.38, 15.62, 16.86, 18.09, 19.33, 20.56, 21.78, 23.01, 24.23, 25.45, 26.66, 27.88, 29.09, 30.30, 31.51, 32.71, 33.91, 35.11, 36.30, 37.50, 38.69, 39.88, 41.06, 42.25, 43.43, 44.61, 45.78, 46.96, 48.13, 49.30, 50.46, 51.63, 52.79, 53.95, 55.11, 56.26, 57.41, 58.56, 59.71, 60.85, 62.00, 63.14, 64.28, 65.41, 66.54, 67.68, 68.80, 69.93, 71.05, 72.18, 73.30, 74.41, 75.53, 76.64, 77.75, 78.86, 79.96, 81.07, 82.17, 83.27, 84.37, 85.46, 86.55, 87.64, 88.73, 89.82, 90.90, 91.98, 93.06, 94.14, 95.21, 96.29, 97.36, 98.43, 99.49, 100.56, 101.62, 102.68, 103.74, 104.80, 105.85, 106.90, 107.95, 109.00, 110.04, 111.09, 112.13, 113.17, 114.21, 115.24, 116.28, 117.31, 118.34, 119.36, 120.39, 121.41, 122.43, 123.45, 124.47, 125.49, 126.50, 127.51, 128.52, 129.53, 130.54, 131.54, 132.54, 133.54, 134.54, 135.53, 136.53, 137.52, 138.51, 139.50, 140.49, 141.47, 142.45},
{-12.30, -11.04, -9.78, -8.52, -7.27, -6.02, -4.77, -3.52, -2.28, -1.04, 0.20, 1.43, 2.67, 3.90, 5.12, 6.35, 7.57, 8.79, 10.01, 11.22, 12.43, 13.64, 14.85, 16.05, 17.26, 18.46, 19.65, 20.85, 22.04, 23.23, 24.42, 25.60, 26.78, 27.96, 29.14, 30.31, 31.49, 32.66, 33.82, 34.99, 36.15, 37.31, 38.47, 39.63, 40.78, 41.93, 43.08, 44.23, 45.37, 46.51, 47.65, 48.79, 49.92, 51.06, 52.19, 53.31, 54.44, 55.56, 56.68, 57.80, 58.92, 60.03, 61.15, 62.26, 63.36, 64.47, 65.57, 66.67, 67.77, 68.87, 69.97, 71.06, 72.15, 73.24, 74.32, 75.41, 76.49, 77.57, 78.64, 79.72, 80.79, 81.86, 82.93, 84.00, 85.06, 86.13, 87.19, 88.25, 89.30, 90.36, 91.41, 92.46, 93.51, 94.55, 95.60, 96.64, 97.68, 98.72, 99.76, 100.79, 101.82, 102.85, 103.88, 104.91, 105.93, 106.95, 107.97, 108.99, 110.01, 111.02, 112.04, 113.05, 114.06, 115.06, 116.07, 117.07, 118.07, 119.07, 120.07, 121.06, 122.06, 123.05, 124.04, 125.03, 126.01, 127.00, 127.98, 128.96, 129.94, 130.91, 131.89, 132.86, 133.83, 134.80, 135.77, 136.74, 137.70, 138.66, 139.62, 140.58},
{-9.85, -8.63, -7.41, -6.19, -4.98, -3.77, -2.56, -1.35, -0.15, 1.06, 2.26, 3.45, 4.65, 5.84, 7.03, 8.22, 9.40, 10.59, 11.77, 12.94, 14.12, 15.29, 16.46, 17.63, 18.80, 19.96, 21.12, 22.28, 23.44, 24.59, 25.74, 26.89, 28.04, 29.19, 30.33, 31.47, 32.61, 33.74, 34.88, 36.01, 37.14, 38.26, 39.39, 40.51, 41.63, 42.75, 43.87, 44.98, 46.09, 47.20, 48.31, 49.41, 50.51, 51.62, 52.71, 53.81, 54.90, 56.00, 57.09, 58.17, 59.26, 60.34, 61.42, 62.50, 63.58, 64.65, 65.73, 66.80, 67.87, 68.93, 70.00, 71.06, 72.12, 73.18, 74.24, 75.29, 76.34, 77.39, 78.44, 79.49, 80.53, 81.58, 82.62, 83.65, 84.69, 85.73, 86.76, 87.79, 88.82, 89.84, 90.87, 91.89, 92.91, 93.93, 94.95, 95.96, 96.98, 97.99, 99.00, 100.00, 101.01, 102.01, 103.01, 104.01, 105.01, 106.01, 107.00, 108.00, 108.99, 109.97, 110.96, 111.95, 112.93, 113.91, 114.89, 115.87, 116.84, 117.82, 118.79, 119.76, 120.73, 121.70, 122.66, 123.63, 124.59, 125.55, 126.51, 127.46, 128.42, 129.37, 130.32, 131.27, 132.22, 133.16, 134.11, 135.05, 135.99, 136.93, 137.87, 138.80},
{-7.55, -6.36, -5.18, -4.00, -2.82, -1.65, -0.47, 0.70, 1.87, 3.03, 4.20, 5.36, 6.52, 7.68, 8.83, 9.98, 11.13, 12.28, 13.43, 14.57, 15.71, 16.85, 17.99, 19.12, 20.25, 21.38, 22.51, 23.64, 24.76, 25.88, 27.00, 28.12, 29.23, 30.34, 31.45, 32.56, 33.67, 34.77, 35.87, 36.97, 38.07, 39.16, 40.26, 41.35, 42.44, 43.52, 44.61, 45.69, 46.77, 47.85, 48.93, 50.00, 51.07, 52.14, 53.21, 54.28, 55.34, 56.40, 57.46, 58.52, 59.58, 60.63, 61.68, 62.73, 63.78, 64.83, 65.87, 66.92, 67.96, 68.99, 70.03, 71.06, 72.10, 73.13, 74.16, 75.18, 76.21, 77.23, 78.25, 79.27, 80.29, 81.30, 82.32, 83.33, 84.34, 85.34, 86.35, 87.35, 88.36, 89.36, 90.35, 91.35, 92.35, 93.34, 94.33, 95.32, 96.31, 97.29, 98.28, 99.26, 100.24, 101.22, 102.19, 103.17, 104.14, 105.11, 106.08, 107.05, 108.02, 108.98, 109.94, 110.90, 111.86, 112.82, 113.78, 114.73, 115.68, 116.63, 117.58, 118.53, 119.47, 120.42, 121.36, 122.30, 123.24, 124.17, 125.11, 126.04, 126.97, 127.90, 128.83, 129.76, 130.69, 131.61, 132.53, 133.45, 134.37, 135.29, 136.20, 137.12},
{-5.37, -4.22, -3.07, -1.93, -0.78, 0.36, 1.50, 2.64, 3.77, 4.90, 6.03, 7.16, 8.29, 9.41, 10.53, 11.65, 12.77, 13.88, 15.00, 16.11, 17.22, 18.32, 19.43, 20.53, 21.63, 22.73, 23.82, 24.92, 26.01, 27.10, 28.19, 29.27, 30.36, 31.44, 32.52, 33.59, 34.67, 35.74, 36.81, 37.88, 38.95, 40.02, 41.08, 42.14, 43.20, 44.26, 45.31, 46.37, 47.42, 48.47, 49.51, 50.56, 51.60, 52.64, 53.68, 54.72, 55.76, 56.79, 57.82, 58.85, 59.88, 60.91, 61.93, 62.95, 63.98, 64.99, 66.01, 67.03, 68.04, 69.05, 70.06, 71.07, 72.07, 73.08, 74.08, 75.08, 76.08, 77.07, 78.07, 79.06, 80.05, 81.04, 82.03, 83.02, 84.00, 84.98, 85.96, 86.94, 87.92, 88.89, 89.87, 90.84, 91.81, 92.78, 93.74, 94.71, 95.67, 96.63, 97.59, 98.55, 99.51, 100.46, 101.41, 102.36, 103.31, 104.26, 105.21, 106.15, 107.09, 108.03, 108.97, 109.91, 110.85, 111.78, 112.72, 113.65, 114.58, 115.50, 116.43, 117.35, 118.28, 119.20, 120.12, 121.04, 121.95, 122.87, 123.78, 124.69, 125.60, 126.51, 127.42, 128.32, 129.23, 130.13, 131.03, 131.93, 132.83, 133.72, 134.62, 135.51},
{-3.31, -2.19, -1.08, 0.04, 1.15, 2.26, 3.36, 4.47, 5.57, 6.67, 7.77, 8.87, 9.96, 11.05, 12.14, 13.23, 14.32, 15.40, 16.48, 17.56, 18.64, 19.72, 20.79, 21.86, 22.93, 24.00, 25.07, 26.13, 27.19, 28.25, 29.31, 30.37, 31.42, 32.47, 33.52, 34.57, 35.62, 36.66, 37.71, 38.75, 39.79, 40.82, 41.86, 42.89, 43.92, 44.95, 45.98, 47.00, 48.03, 49.05, 50.07, 51.09, 52.10, 53.12, 54.13, 55.14, 56.15, 57.16, 58.16, 59.17, 60.17, 61.17, 62.17, 63.16, 64.16, 65.15, 66.14, 67.13, 68.12, 69.10, 70.09, 71.07, 72.05, 73.03, 74.01, 74.98, 75.95, 76.93, 77.90, 78.86, 79.83, 80.80, 81.76, 82.72, 83.68, 84.64, 85.59, 86.55, 87.50, 88.45, 89.40, 90.35, 91.30, 92.24, 93.19, 94.13, 95.07, 96.00, 96.94, 97.88, 98.81, 99.74, 100.67, 101.60, 102.53, 103.45, 104.37, 105.30, 106.22, 107.14, 108.05, 108.97, 109.88, 110.80, 111.71, 112.62, 113.52, 114.43, 115.33, 116.24, 117.14, 118.04, 118.94, 119.83, 120.73, 121.62, 122.52, 123.41, 124.30, 125.18, 126.07, 126.96, 127.84, 128.72, 129.60, 130.48, 131.36, 132.23, 133.11, 133.98},
{-1.36, -0.27, 0.81, 1.90, 2.98, 4.06, 5.13, 6.21, 7.28, 8.35, 9.42, 10.48, 11.55, 12.61, 13.67, 14.73, 15.79, 16.84, 17.89, 18.94, 19.99, 21.04, 22.09, 23.13, 24.17, 25.21, 26.25, 27.28, 28.32, 29.35, 30.38, 31.41, 32.43, 33.46, 34.48, 35.50, 36.52, 37.54, 38.55, 39.57, 40.58, 41.59, 42.60, 43.60, 44.61, 45.61, 46.61, 47.61, 48.61, 49.61, 50.60, 51.59, 52.58, 53.57, 54.56, 55.54, 56.53, 57.51, 58.49, 59.47, 60.44, 61.42, 62.39, 63.36, 64.33, 65.30, 66.27, 67.23, 68.19, 69.16, 70.11, 71.07, 72.03, 72.98, 73.94, 74.89, 75.84, 76.79, 77.73, 78.68, 79.62, 80.56, 81.50, 82.44, 83.38, 84.31, 85.24, 86.18, 87.11, 88.04, 88.96, 89.89, 90.81, 91.73, 92.66, 93.57, 94.49, 95.41, 96.32, 97.24, 98.15, 99.06, 99.96, 100.87, 101.78, 102.68, 103.58, 104.48, 105.38, 106.28, 107.18, 108.07, 108.96, 109.86, 110.75, 111.63, 112.52, 113.41, 114.29, 115.17, 116.05, 116.93, 117.81, 118.69, 119.57, 120.44, 121.31, 122.18, 123.05, 123.92, 124.79, 125.65, 126.52, 127.38, 128.24, 129.10, 129.96, 130.81, 131.67, 132.52},
{0.50, 1.55, 2.61, 3.66, 4.71, 5.76, 6.81, 7.86, 8.90, 9.94, 10.98, 12.02, 13.05, 14.09, 15.12, 16.15, 17.18, 18.21, 19.23, 20.26, 21.28, 22.30, 23.32, 24.33, 25.35, 26.36, 27.37, 28.38, 29.39, 30.39, 31.39, 32.40, 33.40, 34.39, 35.39, 36.39, 37.38, 38.37, 39.36, 40.35, 41.33, 42.32, 43.30, 44.28, 45.26, 46.24, 47.22, 48.19, 49.16, 50.13, 51.10, 52.07, 53.04, 54.00, 54.96, 55.92, 56.88, 57.84, 58.80, 59.75, 60.70, 61.65, 62.60, 63.55, 64.50, 65.44, 66.38, 67.33, 68.27, 69.20, 70.14, 71.08, 72.01, 72.94, 73.87, 74.80, 75.73, 76.65, 77.58, 78.50, 79.42, 80.34, 81.26, 82.17, 83.09, 84.00, 84.91, 85.82, 86.73, 87.64, 88.54, 89.45, 90.35, 91.25, 92.15, 93.05, 93.94, 94.84, 95.73, 96.62, 97.51, 98.40, 99.29, 100.18, 101.06, 101.95, 102.83, 103.71, 104.59, 105.46, 106.34, 107.21, 108.09, 108.96, 109.83, 110.70, 111.57, 112.43, 113.30, 114.16, 115.02, 115.88, 116.74, 117.60, 118.45, 119.31, 120.16, 121.01, 121.86, 122.71, 123.56, 124.41, 125.25, 126.10, 126.94, 127.78, 128.62, 129.46, 130.30, 131.13},
{2.26, 3.29, 4.31, 5.34, 6.36, 7.38, 8.40, 9.42, 10.44, 11.45, 12.47, 13.48, 14.49, 15.50, 16.50, 17.51, 18.51, 19.51, 20.51, 21.50, 22.50, 23.49, 24.49, 25.48, 26.46, 27.45, 28.44, 29.42, 30.40, 31.38, 32.36, 33.34, 34.31, 35.29, 36.26, 37.23, 38.20, 39.16, 40.13, 41.09, 42.05, 43.01, 43.97, 44.93, 45.88, 46.84, 47.79, 48.74, 49.69, 50.64, 51.58, 52.53, 53.47, 54.41, 55.35, 56.29, 57.22, 58.16, 59.09, 60.02, 60.95, 61.88, 62.81, 63.73, 64.66, 65.58, 66.50, 67.42, 68.33, 69.25, 70.17, 71.08, 71.99, 72.90, 73.81, 74.71, 75.62, 76.52, 77.43, 78.33, 79.23, 80.13, 81.02, 81.92, 82.81, 83.70, 84.59, 85.48, 86.37, 87.26, 88.14, 89.03, 89.91, 90.79, 91.67, 92.54, 93.42, 94.30, 95.17, 96.04, 96.91, 97.78, 98.65, 99.52, 100.38, 101.24, 102.11, 102.97, 103.83, 104.68, 105.54, 106.40, 107.25, 108.10, 108.95, 109.80, 110.65, 111.50, 112.35, 113.19, 114.03, 114.87, 115.72, 116.55, 117.39, 118.23, 119.06, 119.90, 120.73, 121.56, 122.39, 123.22, 124.05, 124.87, 125.70, 126.52, 127.34, 128.16, 128.98, 129.80},
{3.93, 4.94, 5.94, 6.94, 7.93, 8.93, 9.92, 10.92, 11.91, 12.89, 13.88, 14.87, 15.85, 16.83, 17.81, 18.79, 19.77, 20.75, 21.72, 22.69, 23.66, 24.63, 25.60, 26.56, 27.53, 28.49, 29.45, 30.41, 31.37, 32.33, 33.28, 34.23, 35.18, 36.13, 37.08, 38.03, 38.97, 39.92, 40.86, 41.80, 42.74, 43.67, 44.61, 45.54, 46.48, 47.41, 48.34, 49.26, 50.19, 51.11, 52.04, 52.96, 53.88, 54.80, 55.72, 56.63, 57.55, 58.46, 59.37, 60.28, 61.19, 62.09, 63.00, 63.90, 64.81, 65.71, 66.61, 67.50, 68.40, 69.29, 70.19, 71.08, 71.97, 72.86, 73.75, 74.63, 75.52, 76.40, 77.28, 78.17, 79.04, 79.92, 80.80, 81.67, 82.55, 83.42, 84.29, 85.16, 86.03, 86.89, 87.76, 88.62, 89.49, 90.35, 91.21, 92.06, 92.92, 93.78, 94.63, 95.48, 96.34, 97.19, 98.04, 98.88, 99.73, 100.57, 101.42, 102.26, 103.10, 103.94, 104.78, 105.62, 106.45, 107.29, 108.12, 108.95, 109.78, 110.61, 111.44, 112.26, 113.09, 113.91, 114.74, 115.56, 116.38, 117.20, 118.01, 118.83, 119.64, 120.46, 121.27, 122.08, 122.89, 123.70, 124.51, 125.32, 126.12, 126.92, 127.73, 128.53},
{5.53, 6.51, 7.48, 8.46, 9.43, 10.40, 11.37, 12.34, 13.30, 14.27, 15.23, 16.19, 17.15, 18.11, 19.07, 20.02, 20.97, 21.93, 22.88, 23.82, 24.77, 25.72, 26.66, 27.60, 28.54, 29.48, 30.42, 31.36, 32.29, 33.23, 34.16, 35.09, 36.02, 36.94, 37.87, 38.79, 39.71, 40.64, 41.56, 42.47, 43.39, 44.30, 45.22, 46.13, 47.04, 47.95, 48.86, 49.76, 50.67, 51.57, 52.47, 53.37, 54.27, 55.17, 56.07, 56.96, 57.85, 58.75, 59.64, 60.53, 61.41, 62.30, 63.18, 64.07, 64.95, 65.83, 66.71, 67.59, 68.46, 69.34, 70.21, 71.08, 71.95, 72.82, 73.69, 74.56, 75.42, 76.29, 77.15, 78.01, 78.87, 79.73, 80.59, 81.44, 82.30, 83.15, 84.00, 84.85, 85.70, 86.55, 87.39, 88.24, 89.08, 89.92, 90.77, 91.61, 92.44, 93.28, 94.12, 94.95, 95.79, 96.62, 97.45, 98.28, 99.11, 99.93, 100.76, 101.58, 102.41, 103.23, 104.05, 104.87, 105.69, 106.50, 107.32, 108.13, 108.95, 109.76, 110.57, 111.38, 112.19, 112.99, 113.80, 114.60, 115.41, 116.21, 117.01, 117.81, 118.61, 119.40, 120.20, 120.99, 121.79, 122.58, 123.37, 124.16, 124.95, 125.74, 126.52, 127.31},
{7.05, 8.00, 8.96, 9.91, 10.86, 11.80, 12.75, 13.69, 14.64, 15.58, 16.52, 17.45, 18.39, 19.33, 20.26, 21.19, 22.12, 23.05, 23.98, 24.91, 25.83, 26.75, 27.67, 28.59, 29.51, 30.43, 31.35, 32.26, 33.17, 34.08, 34.99, 35.90, 36.81, 37.72, 38.62, 39.52, 40.42, 41.32, 42.22, 43.12, 44.01, 44.91, 45.80, 46.69, 47.58, 48.47, 49.36, 50.24, 51.13, 52.01, 52.89, 53.77, 54.65, 55.53, 56.40, 57.28, 58.15, 59.02, 59.89, 60.76, 61.63, 62.50, 63.36, 64.22, 65.09, 65.95, 66.81, 67.67, 68.52, 69.38, 70.23, 71.08, 71.94, 72.79, 73.64, 74.48, 75.33, 76.17, 77.02, 77.86, 78.70, 79.54, 80.38, 81.22, 82.05, 82.89, 83.72, 84.55, 85.39, 86.22, 87.04, 87.87, 88.70, 89.52, 90.34, 91.17, 91.99, 92.81, 93.63, 94.44, 95.26, 96.07, 96.89, 97.70, 98.51, 99.32, 100.13, 100.94, 101.74, 102.55, 103.35, 104.15, 104.95, 105.75, 106.55, 107.35, 108.15, 108.94, 109.74, 110.53, 111.32, 112.11, 112.90, 113.69, 114.48, 115.26, 116.05, 116.83, 117.61, 118.39, 119.17, 119.95, 120.73, 121.51, 122.28, 123.06, 123.83, 124.60, 125.37, 126.14},
{8.50, 9.43, 10.36, 11.29, 12.22, 13.14, 14.07, 14.99, 15.91, 16.83, 17.74, 18.66, 19.58, 20.49, 21.40, 22.31, 23.22, 24.13, 25.03, 25.94, 26.84, 27.74, 28.64, 29.54, 30.44, 31.34, 32.23, 33.12, 34.02, 34.91, 35.80, 36.68, 37.57, 38.45, 39.34, 40.22, 41.10, 41.98, 42.86, 43.73, 44.61, 45.48, 46.36, 47.23, 48.10, 48.97, 49.83, 50.70, 51.56, 52.43, 53.29, 54.15, 55.01, 55.87, 56.72, 57.58, 58.43, 59.29, 60.14, 60.99, 61.84, 62.68, 63.53, 64.37, 65.22, 66.06, 66.90, 67.74, 68.58, 69.42, 70.25, 71.09, 71.92, 72.75, 73.58, 74.41, 75.24, 76.07, 76.89, 77.72, 78.54, 79.36, 80.19, 81.01, 81.82, 82.64, 83.46, 84.27, 85.09, 85.90, 86.71, 87.52, 88.33, 89.13, 89.94, 90.75, 91.55, 92.35, 93.15, 93.95, 94.75, 95.55, 96.35, 97.14, 97.94, 98.73, 99.52, 100.31, 101.10, 101.89, 102.68, 103.47, 104.25, 105.04, 105.82, 106.60, 107.38, 108.16, 108.94, 109.71, 110.49, 111.27, 112.04, 112.81, 113.58, 114.35, 115.12, 115.89, 116.66, 117.42, 118.19, 118.95, 119.71, 120.48, 121.24, 122.00, 122.75, 123.51, 124.27, 125.02},
{9.89, 10.80, 11.71, 12.61, 13.52, 14.42, 15.33, 16.23, 17.13, 18.02, 18.92, 19.81, 20.71, 21.60, 22.49, 23.38, 24.27, 25.16, 26.04, 26.93, 27.81, 28.69, 29.57, 30.45, 31.33, 32.20, 33.08, 33.95, 34.82, 35.69, 36.56, 37.43, 38.30, 39.16, 40.02, 40.89, 41.75, 42.61, 43.47, 44.32, 45.18, 46.04, 46.89, 47.74, 48.59, 49.44, 50.29, 51.14, 51.98, 52.83, 53.67, 54.51, 55.35, 56.19, 57.03, 57.87, 58.70, 59.54, 60.37, 61.20, 62.03, 62.86, 63.69, 64.52, 65.34, 66.17, 66.99, 67.81, 68.63, 69.45, 70.27, 71.09, 71.90, 72.72, 73.53, 74.35, 75.16, 75.97, 76.78, 77.58, 78.39, 79.19, 80.00, 80.80, 81.60, 82.40, 83.20, 84.00, 84.80, 85.59, 86.39, 87.18, 87.97, 88.76, 89.55, 90.34, 91.13, 91.92, 92.70, 93.49, 94.27, 95.05, 95.83, 96.61, 97.39, 98.17, 98.94, 99.72, 100.49, 101.27, 102.04, 102.81, 103.58, 104.35, 105.11, 105.88, 106.65, 107.41, 108.17, 108.93, 109.69, 110.45, 111.21, 111.97, 112.73, 113.48, 114.24, 114.99, 115.74, 116.49, 117.24, 117.99, 118.74, 119.49, 120.23, 120.98, 121.72, 122.46, 123.21, 123.95},
{11.22, 12.11, 13.00, 13.88, 14.77, 15.65, 16.53, 17.41, 18.29, 19.17, 20.04, 20.92, 21.79, 22.66, 23.54, 24.41, 25.27, 26.14, 27.01, 27.87, 28.73, 29.60, 30.46, 31.32, 32.17, 33.03, 33.89, 34.74, 35.59, 36.44, 37.29, 38.14, 38.99, 39.84, 40.68, 41.53, 42.37, 43.21, 44.05, 44.89, 45.73, 46.56, 47.40, 48.23, 49.07, 49.90, 50.73, 51.56, 52.38, 53.21, 54.04, 54.86, 55.68, 56.50, 57.33, 58.14, 58.96, 59.78, 60.59, 61.41, 62.22, 63.03, 63.85, 64.66, 65.46, 66.27, 67.08, 67.88, 68.69, 69.49, 70.29, 71.09, 71.89, 72.69, 73.48, 74.28, 75.08, 75.87, 76.66, 77.45, 78.24, 79.03, 79.82, 80.60, 81.39, 82.17, 82.96, 83.74, 84.52, 85.30, 86.08, 86.86, 87.63, 88.41, 89.18, 89.96, 90.73, 91.50, 92.27, 93.04, 93.80, 94.57, 95.34, 96.10, 96.86, 97.63, 98.39, 99.15, 99.91, 100.66, 101.42, 102.18, 102.93, 103.69, 104.44, 105.19, 105.94, 106.69, 107.44, 108.18, 108.93, 109.68, 110.42, 111.16, 111.91, 112.65, 113.39, 114.12, 114.86, 115.60, 116.34, 117.07, 117.80, 118.54, 119.27, 120.00, 120.73, 121.46, 122.19, 122.91},
{12.49, 13.36, 14.23, 15.09, 15.96, 16.82, 17.68, 18.54, 19.40, 20.26, 21.12, 21.98, 22.83, 23.68, 24.54, 25.39, 26.24, 27.08, 27.93, 28.78, 29.62, 30.46, 31.31, 32.15, 32.99, 33.82, 34.66, 35.50, 36.33, 37.17, 38.00, 38.83, 39.66, 40.49, 41.31, 42.14, 42.96, 43.79, 44.61, 45.43, 46.25, 47.07, 47.89, 48.70, 49.52, 50.33, 51.15, 51.96, 52.77, 53.58, 54.39, 55.19, 56.00, 56.80, 57.61, 58.41, 59.21, 60.01, 60.81, 61.61, 62.40, 63.20, 63.99, 64.79, 65.58, 66.37, 67.16, 67.95, 68.74, 69.52, 70.31, 71.09, 71.88, 72.66, 73.44, 74.22, 75.00, 75.77, 76.55, 77.33, 78.10, 78.87, 79.65, 80.42, 81.19, 81.96, 82.72, 83.49, 84.26, 85.02, 85.78, 86.55, 87.31, 88.07, 88.83, 89.58, 90.34, 91.10, 91.85, 92.61, 93.36, 94.11, 94.86, 95.61, 96.36, 97.11, 97.85, 98.60, 99.34, 100.09, 100.83, 101.57, 102.31, 103.05, 103.79, 104.53, 105.26, 106.00, 106.73, 107.46, 108.20, 108.93, 109.66, 110.39, 111.11, 111.84, 112.57, 113.29, 114.02, 114.74, 115.46, 116.18, 116.90, 117.62, 118.34, 119.06, 119.78, 120.49, 121.21, 121.92},
{13.71, 14.56, 15.41, 16.26, 17.10, 17.95, 18.79, 19.63, 20.47, 21.31, 22.15, 22.99, 23.83, 24.66, 25.49, 26.33, 27.16, 27.99, 28.82, 29.65, 30.47, 31.30, 32.12, 32.94, 33.77, 34.59, 35.41, 36.22, 37.04, 37.86, 38.67, 39.49, 40.30, 41.11, 41.92, 42.73, 43.54, 44.34, 45.15, 45.95, 46.75, 47.56, 48.36, 49.16, 49.96, 50.75, 51.55, 52.34, 53.14, 53.93, 54.72, 55.51, 56.30, 57.09, 57.88, 58.66, 59.45, 60.23, 61.02, 61.80, 62.58, 63.36, 64.14, 64.91, 65.69, 66.47, 67.24, 68.01, 68.79, 69.56, 70.33, 71.09, 71.86, 72.63, 73.39, 74.16, 74.92, 75.68, 76.45, 77.21, 77.96, 78.72, 79.48, 80.24, 80.99, 81.74, 82.50, 83.25, 84.00, 84.75, 85.50, 86.25, 86.99, 87.74, 88.48, 89.23, 89.97, 90.71, 91.45, 92.19, 92.93, 93.67, 94.40, 95.14, 95.87, 96.61, 97.34, 98.07, 98.80, 99.53, 100.26, 100.99, 101.71, 102.44, 103.16, 103.89, 104.61, 105.33, 106.05, 106.77, 107.49, 108.21, 108.92, 109.64, 110.35, 111.07, 111.78, 112.49, 113.20, 113.91, 114.62, 115.33, 116.04, 116.74, 117.45, 118.15, 118.86, 119.56, 120.26, 120.96},
{14.88, 15.71, 16.54, 17.37, 18.20, 19.03, 19.85, 20.68, 21.50, 22.32, 23.14, 23.96, 24.78, 25.60, 26.41, 27.23, 28.04, 28.86, 29.67, 30.48, 31.29, 32.10, 32.90, 33.71, 34.51, 35.32, 36.12, 36.92, 37.72, 38.52, 39.32, 40.12, 40.91, 41.71, 42.50, 43.29, 44.08, 44.87, 45.66, 46.45, 47.24, 48.02, 48.81, 49.59, 50.37, 51.16, 51.94, 52.71, 53.49, 54.27, 55.05, 55.82, 56.59, 57.37, 58.14, 58.91, 59.68, 60.45, 61.22, 61.98, 62.75, 63.51, 64.27, 65.04, 65.80, 66.56, 67.32, 68.07, 68.83, 69.59, 70.34, 71.10, 71.85, 72.60, 73.35, 74.10, 74.85, 75.60, 76.34, 77.09, 77.83, 78.58, 79.32, 80.06, 80.80, 81.54, 82.28, 83.02, 83.75, 84.49, 85.22, 85.96, 86.69, 87.42, 88.15, 88.88, 89.61, 90.34, 91.07, 91.79, 92.52, 93.24, 93.96, 94.68, 95.41, 96.13, 96.84, 97.56, 98.28, 99.00, 99.71, 100.42, 101.14, 101.85, 102.56, 103.27, 103.98, 104.69, 105.40, 106.10, 106.81, 107.51, 108.22, 108.92, 109.62, 110.32, 111.02, 111.72, 112.42, 113.12, 113.81, 114.51, 115.21, 115.90, 116.59, 117.28, 117.97, 118.66, 119.35, 120.04},
{16.00, 16.82, 17.63, 18.44, 19.25, 20.06, 20.87, 21.68, 22.48, 23.29, 24.09, 24.90, 25.70, 26.50, 27.30, 28.10, 28.89, 29.69, 30.49, 31.28, 32.07, 32.86, 33.66, 34.44, 35.23, 36.02, 36.81, 37.59, 38.38, 39.16, 39.94, 40.72, 41.50, 42.28, 43.06, 43.84, 44.61, 45.38, 46.16, 46.93, 47.70, 48.47, 49.24, 50.01, 50.78, 51.54, 52.31, 53.07, 53.83, 54.60, 55.36, 56.12, 56.88, 57.63, 58.39, 59.15, 59.90, 60.65, 61.41, 62.16, 62.91, 63.66, 64.41, 65.15, 65.90, 66.65, 67.39, 68.13, 68.88, 69.62, 70.36, 71.10, 71.84, 72.57, 73.31, 74.05, 74.78, 75.51, 76.25, 76.98, 77.71, 78.44, 79.17, 79.89, 80.62, 81.35, 82.07, 82.80, 83.52, 84.24, 84.96, 85.68, 86.40, 87.12, 87.84, 88.55, 89.27, 89.98, 90.69, 91.41, 92.12, 92.83, 93.54, 94.25, 94.96, 95.66, 96.37, 97.07, 97.78, 98.48, 99.18, 99.88, 100.58, 101.28, 101.98, 102.68, 103.38, 104.07, 104.77, 105.46, 106.15, 106.85, 107.54, 108.23, 108.92, 109.61, 110.29, 110.98, 111.67, 112.35, 113.04, 113.72, 114.40, 115.08, 115.76, 116.44, 117.12, 117.80, 118.48, 119.15},
{17.08, 17.88, 18.68, 19.47, 20.27, 21.06, 21.85, 22.64, 23.43, 24.22, 25.01, 25.79, 26.58, 27.37, 28.15, 28.93, 29.71, 30.49, 31.27, 32.05, 32.83, 33.60, 34.38, 35.15, 35.92, 36.70, 37.47, 38.24, 39.01, 39.77, 40.54, 41.31, 42.07, 42.83, 43.60, 44.36, 45.12, 45.88, 46.64, 47.39, 48.15, 48.90, 49.66, 50.41, 51.16, 51.91, 52.67, 53.41, 54.16, 54.91, 55.66, 56.40, 57.15, 57.89, 58.63, 59.37, 60.11, 60.85, 61.59, 62.33, 63.06, 63.80, 64.53, 65.27, 66.00, 66.73, 67.46, 68.19, 68.92, 69.65, 70.37, 71.10, 71.82, 72.55, 73.27, 73.99, 74.71, 75.43, 76.15, 76.87, 77.59, 78.30, 79.02, 79.73, 80.45, 81.16, 81.87, 82.58, 83.29, 84.00, 84.71, 85.41, 86.12, 86.83, 87.53, 88.23, 88.94, 89.64, 90.34, 91.04, 91.74, 92.43, 93.13, 93.83, 94.52, 95.22, 95.91, 96.60, 97.29, 97.98, 98.67, 99.36, 100.05, 100.74, 101.42, 102.11, 102.79, 103.48, 104.16, 104.84, 105.52, 106.20, 106.88, 107.56, 108.24, 108.91, 109.59, 110.27, 110.94, 111.61, 112.29, 112.96, 113.63, 114.30, 114.97, 115.63, 116.30, 116.97, 117.63, 118.30},
{18.12, 18.90, 19.68, 20.46, 21.24, 22.02, 22.79, 23.57, 24.34, 25.12, 25.89, 26.66, 27.43, 28.20, 28.97, 29.73, 30.50, 31.26, 32.03, 32.79, 33.55, 34.31, 35.07, 35.83, 36.59, 37.35, 38.10, 38.86, 39.61, 40.36, 41.12, 41.87, 42.62, 43.36, 44.11, 44.86, 45.61, 46.35, 47.09, 47.84, 48.58, 49.32, 50.06, 50.80, 51.54, 52.27, 53.01, 53.74, 54.48, 55.21, 55.94, 56.68, 57.41, 58.13, 58.86, 59.59, 60.32, 61.04, 61.77, 62.49, 63.21, 63.93, 64.66, 65.38, 66.09, 66.81, 67.53, 68.25, 68.96, 69.67, 70.39, 71.10, 71.81, 72.52, 73.23, 73.94, 74.65, 75.36, 76.06, 76.77, 77.47, 78.17, 78.88, 79.58, 80.28, 80.98, 81.68, 82.38, 83.07, 83.77, 84.46, 85.16, 85.85, 86.54, 87.24, 87.93, 88.62, 89.31, 89.99, 90.68, 91.37, 92.05, 92.74, 93.42, 94.10, 94.79, 95.47, 96.15, 96.83, 97.51, 98.18, 98.86, 99.54, 100.21, 100.89, 101.56, 102.23, 102.90, 103.57, 104.24, 104.91, 105.58, 106.25, 106.92, 107.58, 108.25, 108.91, 109.58, 110.24, 110.90, 111.56, 112.22, 112.88, 113.54, 114.20, 114.85, 115.51, 116.16, 116.82, 117.47},
{19.12, 19.88, 20.65, 21.41, 22.18, 22.94, 23.70, 24.46, 25.22, 25.98, 26.73, 27.49, 28.25, 29.00, 29.75, 30.51, 31.26, 32.01, 32.76, 33.50, 34.25, 35.00, 35.74, 36.49, 37.23, 37.97, 38.71, 39.45, 40.19, 40.93, 41.67, 42.41, 43.14, 43.88, 44.61, 45.34, 46.08, 46.81, 47.54, 48.27, 48.99, 49.72, 50.45, 51.17, 51.90, 52.62, 53.34, 54.06, 54.78, 55.50, 56.22, 56.94, 57.66, 58.37, 59.09, 59.80, 60.51, 61.23, 61.94, 62.65, 63.36, 64.07, 64.77, 65.48, 66.19, 66.89, 67.60, 68.30, 69.00, 69.70, 70.40, 71.10, 71.80, 72.50, 73.20, 73.89, 74.59, 75.28, 75.97, 76.67, 77.36, 78.05, 78.74, 79.43, 80.12, 80.80, 81.49, 82.18, 82.86, 83.54, 84.23, 84.91, 85.59, 86.27, 86.95, 87.63, 88.31, 88.98, 89.66, 90.34, 91.01, 91.68, 92.36, 93.03, 93.70, 94.37, 95.04, 95.71, 96.38, 97.04, 97.71, 98.38, 99.04, 99.70, 100.37, 101.03, 101.69, 102.35, 103.01, 103.67, 104.33, 104.98, 105.64, 106.30, 106.95, 107.60, 108.26, 108.91, 109.56, 110.21, 110.86, 111.51, 112.16, 112.81, 113.45, 114.10, 114.74, 115.39, 116.03, 116.68},
{20.08, 20.83, 21.58, 22.33, 23.08, 23.83, 24.57, 25.32, 26.06, 26.81, 27.55, 28.29, 29.03, 29.77, 30.51, 31.25, 31.99, 32.72, 33.46, 34.19, 34.92, 35.66, 36.39, 37.12, 37.85, 38.58, 39.30, 40.03, 40.76, 41.48, 42.20, 42.93, 43.65, 44.37, 45.09, 45.81, 46.53, 47.25, 47.96, 48.68, 49.39, 50.11, 50.82, 51.53, 52.24, 52.95, 53.66, 54.37, 55.08, 55.78, 56.49, 57.19, 57.90, 58.60, 59.30, 60.00, 60.70, 61.40, 62.10, 62.80, 63.50, 64.19, 64.89, 65.58, 66.27, 66.97, 67.66, 68.35, 69.04, 69.73, 70.42, 71.10, 71.79, 72.48, 73.16, 73.84, 74.53, 75.21, 75.89, 76.57, 77.25, 77.93, 78.61, 79.28, 79.96, 80.64, 81.31, 81.98, 82.66, 83.33, 84.00, 84.67, 85.34, 86.01, 86.68, 87.34, 88.01, 88.68, 89.34, 90.00, 90.67, 91.33, 91.99, 92.65, 93.31, 93.97, 94.63, 95.29, 95.94, 96.60, 97.25, 97.91, 98.56, 99.21, 99.86, 100.52, 101.17, 101.82, 102.46, 103.11, 103.76, 104.40, 105.05, 105.69, 106.34, 106.98, 107.62, 108.27, 108.91, 109.55, 110.19, 110.82, 111.46, 112.10, 112.74, 113.37, 114.01, 114.64, 115.27, 115.91},
{21.01, 21.74, 22.48, 23.21, 23.95, 24.68, 25.42, 26.15, 26.88, 27.61, 28.34, 29.06, 29.79, 30.52, 31.24, 31.97, 32.69, 33.41, 34.13, 34.85, 35.57, 36.29, 37.01, 37.73, 38.44, 39.16, 39.87, 40.59, 41.30, 42.01, 42.72, 43.43, 44.14, 44.85, 45.55, 46.26, 46.97, 47.67, 48.37, 49.08, 49.78, 50.48, 51.18, 51.88, 52.58, 53.27, 53.97, 54.67, 55.36, 56.05, 56.75, 57.44, 58.13, 58.82, 59.51, 60.20, 60.89, 61.57, 62.26, 62.95, 63.63, 64.31, 65.00, 65.68, 66.36, 67.04, 67.72, 68.40, 69.08, 69.75, 70.43, 71.10, 71.78, 72.45, 73.13, 73.80, 74.47, 75.14, 75.81, 76.48, 77.15, 77.81, 78.48, 79.14, 79.81, 80.47, 81.14, 81.80, 82.46, 83.12, 83.78, 84.44, 85.10, 85.75, 86.41, 87.07, 87.72, 88.38, 89.03, 89.68, 90.33, 90.99, 91.64, 92.29, 92.93, 93.58, 94.23, 94.88, 95.52, 96.17, 96.81, 97.45, 98.10, 98.74, 99.38, 100.02, 100.66, 101.30, 101.94, 102.57, 103.21, 103.85, 104.48, 105.11, 105.75, 106.38, 107.01, 107.64, 108.27, 108.90, 109.53, 110.16, 110.79, 111.42, 112.04, 112.67, 113.29, 113.92, 114.54, 115.16},
{21.90, 22.62, 23.35, 24.07, 24.79, 25.51, 26.23, 26.95, 27.66, 28.38, 29.09, 29.81, 30.52, 31.24, 31.95, 32.66, 33.37, 34.08, 34.79, 35.49, 36.20, 36.91, 37.61, 38.31, 39.02, 39.72, 40.42, 41.12, 41.82, 42.52, 43.22, 43.91, 44.61, 45.31, 46.00, 46.69, 47.39, 48.08, 48.77, 49.46, 50.15, 50.84, 51.53, 52.21, 52.90, 53.58, 54.27, 54.95, 55.63, 56.32, 57.00, 57.68, 58.36, 59.03, 59.71, 60.39, 61.06, 61.74, 62.41, 63.09, 63.76, 64.43, 65.10, 65.77, 66.44, 67.11, 67.78, 68.45, 69.11, 69.78, 70.44, 71.11, 71.77, 72.43, 73.09, 73.75, 74.41, 75.07, 75.73, 76.39, 77.04, 77.70, 78.36, 79.01, 79.66, 80.32, 80.97, 81.62, 82.27, 82.92, 83.57, 84.22, 84.86, 85.51, 86.16, 86.80, 87.44, 88.09, 88.73, 89.37, 90.01, 90.65, 91.29, 91.93, 92.57, 93.21, 93.85, 94.48, 95.12, 95.75, 96.38, 97.02, 97.65, 98.28, 98.91, 99.54, 100.17, 100.80, 101.43, 102.05, 102.68, 103.31, 103.93, 104.55, 105.18, 105.80, 106.42, 107.04, 107.66, 108.28, 108.90, 109.52, 110.14, 110.75, 111.37, 111.99, 112.60, 113.21, 113.83, 114.44},
{22.76, 23.47, 24.18, 24.89, 25.60, 26.30, 27.01, 27.72, 28.42, 29.12, 29.83, 30.53, 31.23, 31.93, 32.63, 33.33, 34.02, 34.72, 35.42, 36.11, 36.80, 37.50, 38.19, 38.88, 39.57, 40.26, 40.95, 41.64, 42.33, 43.01, 43.70, 44.38, 45.07, 45.75, 46.43, 47.11, 47.79, 48.47, 49.15, 49.83, 50.51, 51.19, 51.86, 52.54, 53.21, 53.88, 54.56, 55.23, 55.90, 56.57, 57.24, 57.91, 58.57, 59.24, 59.91, 60.57, 61.24, 61.90, 62.56, 63.22, 63.89, 64.55, 65.21, 65.86, 66.52, 67.18, 67.84, 68.49, 69.15, 69.80, 70.45, 71.11, 71.76, 72.41, 73.06, 73.71, 74.36, 75.01, 75.65, 76.30, 76.95, 77.59, 78.24, 78.88, 79.52, 80.16, 80.81, 81.45, 82.09, 82.72, 83.36, 84.00, 84.64, 85.27, 85.91, 86.54, 87.18, 87.81, 88.44, 89.07, 89.70, 90.33, 90.96, 91.59, 92.22, 92.85, 93.47, 94.10, 94.72, 95.35, 95.97, 96.59, 97.22, 97.84, 98.46, 99.08, 99.70, 100.32, 100.93, 101.55, 102.17, 102.78, 103.40, 104.01, 104.62, 105.24, 105.85, 106.46, 107.07, 107.68, 108.29, 108.90, 109.51, 110.11, 110.72, 111.33, 111.93, 112.54, 113.14, 113.74},
{23.59, 24.29, 24.99, 25.68, 26.38, 27.07, 27.77, 28.46, 29.15, 29.84, 30.53, 31.22, 31.91, 32.60, 33.29, 33.97, 34.66, 35.34, 36.02, 36.71, 37.39, 38.07, 38.75, 39.43, 40.11, 40.79, 41.46, 42.14, 42.81, 43.49, 44.16, 44.84, 45.51, 46.18, 46.85, 47.52, 48.19, 48.86, 49.52, 50.19, 50.86, 51.52, 52.18, 52.85, 53.51, 54.17, 54.83, 55.49, 56.15, 56.81, 57.47, 58.13, 58.78, 59.44, 60.09, 60.75, 61.40, 62.05, 62.71, 63.36, 64.01, 64.66, 65.30, 65.95, 66.60, 67.25, 67.89, 68.54, 69.18, 69.82, 70.47, 71.11, 71.75, 72.39, 73.03, 73.67, 74.31, 74.94, 75.58, 76.22, 76.85, 77.49, 78.12, 78.75, 79.39, 80.02, 80.65, 81.28, 81.91, 82.54, 83.16, 83.79, 84.42, 85.04, 85.67, 86.29, 86.92, 87.54, 88.16, 88.78, 89.40, 90.02, 90.64, 91.26, 91.88, 92.50, 93.11, 93.73, 94.34, 94.96, 95.57, 96.18, 96.80, 97.41, 98.02, 98.63, 99.24, 99.85, 100.46, 101.06, 101.67, 102.28, 102.88, 103.49, 104.09, 104.69, 105.30, 105.90, 106.50, 107.10, 107.70, 108.30, 108.90, 109.50, 110.09, 110.69, 111.28, 111.88, 112.47, 113.07},
{24.40, 25.08, 25.77, 26.45, 27.14, 27.82, 28.50, 29.18, 29.86, 30.54, 31.22, 31.89, 32.57, 33.25, 33.92, 34.59, 35.27, 35.94, 36.61, 37.28, 37.95, 38.62, 39.29, 39.96, 40.63, 41.29, 41.96, 42.62, 43.29, 43.95, 44.61, 45.27, 45.93, 46.59, 47.25, 47.91, 48.57, 49.23, 49.88, 50.54, 51.19, 51.85, 52.50, 53.15, 53.80, 54.45, 55.10, 55.75, 56.40, 57.05, 57.69, 58.34, 58.99, 59.63, 60.28, 60.92, 61.56, 62.20, 62.84, 63.48, 64.12, 64.76, 65.40, 66.04, 66.67, 67.31, 67.95, 68.58, 69.21, 69.85, 70.48, 71.11, 71.74, 72.37, 73.00, 73.63, 74.26, 74.88, 75.51, 76.14, 76.76, 77.38, 78.01, 78.63, 79.25, 79.88, 80.50, 81.12, 81.74, 82.35, 82.97, 83.59, 84.21, 84.82, 85.44, 86.05, 86.66, 87.28, 87.89, 88.50, 89.11, 89.72, 90.33, 90.94, 91.55, 92.16, 92.76, 93.37, 93.98, 94.58, 95.18, 95.79, 96.39, 96.99, 97.59, 98.20, 98.80, 99.39, 99.99, 100.59, 101.19, 101.79, 102.38, 102.98, 103.57, 104.17, 104.76, 105.35, 105.94, 106.54, 107.13, 107.72, 108.31, 108.90, 109.48, 110.07, 110.66, 111.24, 111.83, 112.41},
{25.18, 25.85, 26.52, 27.20, 27.87, 28.54, 29.21, 29.88, 30.54, 31.21, 31.88, 32.54, 33.21, 33.87, 34.54, 35.20, 35.86, 36.52, 37.18, 37.84, 38.50, 39.16, 39.81, 40.47, 41.13, 41.78, 42.44, 43.09, 43.74, 44.39, 45.05, 45.70, 46.35, 46.99, 47.64, 48.29, 48.94, 49.58, 50.23, 50.87, 51.52, 52.16, 52.80, 53.44, 54.08, 54.72, 55.36, 56.00, 56.64, 57.28, 57.91, 58.55, 59.18, 59.82, 60.45, 61.08, 61.72, 62.35, 62.98, 63.61, 64.24, 64.87, 65.49, 66.12, 66.75, 67.37, 68.00, 68.62, 69.24, 69.87, 70.49, 71.11, 71.73, 72.35, 72.97, 73.59, 74.21, 74.82, 75.44, 76.06, 76.67, 77.29, 77.90, 78.51, 79.13, 79.74, 80.35, 80.96, 81.57, 82.18, 82.79, 83.39, 84.00, 84.61, 85.21, 85.82, 86.42, 87.02, 87.63, 88.23, 88.83, 89.43, 90.03, 90.63, 91.23, 91.83, 92.43, 93.02, 93.62, 94.21, 94.81, 95.40, 96.00, 96.59, 97.18, 97.77, 98.37, 98.96, 99.55, 100.13, 100.72, 101.31, 101.90, 102.48, 103.07, 103.66, 104.24, 104.82, 105.41, 105.99, 106.57, 107.15, 107.73, 108.31, 108.89, 109.47, 110.05, 110.63, 111.20, 111.78},
{25.93, 26.59, 27.25, 27.91, 28.57, 29.23, 29.89, 30.55, 31.20, 31.86, 32.52, 33.17, 33.82, 34.48, 35.13, 35.78, 36.43, 37.08, 37.73, 38.38, 39.03, 39.67, 40.32, 40.97, 41.61, 42.26, 42.90, 43.54, 44.18, 44.83, 45.47, 46.11, 46.74, 47.38, 48.02, 48.66, 49.29, 49.93, 50.56, 51.20, 51.83, 52.46, 53.09, 53.73, 54.36, 54.99, 55.61, 56.24, 56.87, 57.50, 58.12, 58.75, 59.37, 60.00, 60.62, 61.24, 61.87, 62.49, 63.11, 63.73, 64.35, 64.97, 65.58, 66.20, 66.82, 67.43, 68.05, 68.66, 69.28, 69.89, 70.50, 71.11, 71.72, 72.33, 72.94, 73.55, 74.16, 74.77, 75.37, 75.98, 76.59, 77.19, 77.80, 78.40, 79.00, 79.60, 80.21, 80.81, 81.41, 82.01, 82.61, 83.20, 83.80, 84.40, 84.99, 85.59, 86.18, 86.78, 87.37, 87.97, 88.56, 89.15, 89.74, 90.33, 90.92, 91.51, 92.10, 92.69, 93.27, 93.86, 94.45, 95.03, 95.62, 96.20, 96.78, 97.37, 97.95, 98.53, 99.11, 99.69, 100.27, 100.85, 101.43, 102.01, 102.58, 103.16, 103.74, 104.31, 104.89, 105.46, 106.03, 106.61, 107.18, 107.75, 108.32, 108.89, 109.46, 110.03, 110.60, 111.17},
{26.66, 27.31, 27.96, 28.61, 29.26, 29.91, 30.55, 31.20, 31.85, 32.49, 33.13, 33.78, 34.42, 35.06, 35.71, 36.35, 36.99, 37.63, 38.26, 38.90, 39.54, 40.18, 40.81, 41.45, 42.08, 42.71, 43.35, 43.98, 44.61, 45.24, 45.87, 46.50, 47.13, 47.76, 48.39, 49.01, 49.64, 50.26, 50.89, 51.51, 52.13, 52.76, 53.38, 54.00, 54.62, 55.24, 55.86, 56.48, 57.09, 57.71, 58.33, 58.94, 59.56, 60.17, 60.79, 61.40, 62.01, 62.62, 63.23, 63.84, 64.45, 65.06, 65.67, 66.28, 66.88, 67.49, 68.10, 68.70, 69.30, 69.91, 70.51, 71.11, 71.71, 72.32, 72.92, 73.52, 74.11, 74.71, 75.31, 75.91, 76.50, 77.10, 77.69, 78.29, 78.88, 79.47, 80.07, 80.66, 81.25, 81.84, 82.43, 83.02, 83.61, 84.20, 84.78, 85.37, 85.96, 86.54, 87.13, 87.71, 88.29, 88.88, 89.46, 90.04, 90.62, 91.20, 91.78, 92.36, 92.94, 93.52, 94.09, 94.67, 95.25, 95.82, 96.40, 96.97, 97.54, 98.12, 98.69, 99.26, 99.83, 100.40, 100.97, 101.54, 102.11, 102.68, 103.25, 103.81, 104.38, 104.95, 105.51, 106.08, 106.64, 107.20, 107.77, 108.33, 108.89, 109.45, 110.01, 110.57},
{27.36, 28.00, 28.64, 29.28, 29.92, 30.56, 31.19, 31.83, 32.47, 33.10, 33.73, 34.37, 35.00, 35.63, 36.26, 36.89, 37.52, 38.15, 38.78, 39.41, 40.03, 40.66, 41.29, 41.91, 42.54, 43.16, 43.78, 44.40, 45.03, 45.65, 46.27, 46.89, 47.50, 48.12, 48.74, 49.36, 49.97, 50.59, 51.20, 51.82, 52.43, 53.04, 53.65, 54.27, 54.88, 55.49, 56.10, 56.70, 57.31, 57.92, 58.53, 59.13, 59.74, 60.34, 60.95, 61.55, 62.15, 62.75, 63.36, 63.96, 64.56, 65.16, 65.75, 66.35, 66.95, 67.55, 68.14, 68.74, 69.33, 69.93, 70.52, 71.11, 71.71, 72.30, 72.89, 73.48, 74.07, 74.66, 75.25, 75.84, 76.42, 77.01, 77.60, 78.18, 78.77, 79.35, 79.93, 80.52, 81.10, 81.68, 82.26, 82.84, 83.42, 84.00, 84.58, 85.16, 85.73, 86.31, 86.89, 87.46, 88.04, 88.61, 89.18, 89.76, 90.33, 90.90, 91.47, 92.04, 92.61, 93.18, 93.75, 94.32, 94.89, 95.46, 96.02, 96.59, 97.15, 97.72, 98.28, 98.84, 99.41, 99.97, 100.53, 101.09, 101.65, 102.21, 102.77, 103.33, 103.89, 104.45, 105.00, 105.56, 106.12, 106.67, 107.23, 107.78, 108.33, 108.89, 109.44, 109.99},
{28.05, 28.68, 29.30, 29.93, 30.56, 31.19, 31.82, 32.44, 33.07, 33.69, 34.31, 34.94, 35.56, 36.18, 36.80, 37.42, 38.04, 38.66, 39.28, 39.90, 40.52, 41.13, 41.75, 42.36, 42.98, 43.59, 44.20, 44.82, 45.43, 46.04, 46.65, 47.26, 47.87, 48.48, 49.08, 49.69, 50.30, 50.90, 51.51, 52.11, 52.72, 53.32, 53.92, 54.52, 55.12, 55.73, 56.32, 56.92, 57.52, 58.12, 58.72, 59.31, 59.91, 60.51, 61.10, 61.69, 62.29, 62.88, 63.47, 64.07, 64.66, 65.25, 65.84, 66.43, 67.01, 67.60, 68.19, 68.78, 69.36, 69.95, 70.53, 71.12, 71.70, 72.28, 72.86, 73.45, 74.03, 74.61, 75.19, 75.77, 76.34, 76.92, 77.50, 78.08, 78.65, 79.23, 79.80, 80.38, 80.95, 81.52, 82.10, 82.67, 83.24, 83.81, 84.38, 84.95, 85.52, 86.09, 86.65, 87.22, 87.79, 88.35, 88.92, 89.48, 90.05, 90.61, 91.17, 91.74, 92.30, 92.86, 93.42, 93.98, 94.54, 95.10, 95.66, 96.22, 96.77, 97.33, 97.88, 98.44, 99.00, 99.55, 100.10, 100.66, 101.21, 101.76, 102.31, 102.86, 103.41, 103.96, 104.51, 105.06, 105.61, 106.16, 106.70, 107.25, 107.80, 108.34, 108.89, 109.43},
{28.71, 29.33, 29.95, 30.57, 31.18, 31.80, 32.42, 33.03, 33.65, 34.26, 34.88, 35.49, 36.10, 36.72, 37.33, 37.94, 38.55, 39.16, 39.77, 40.37, 40.98, 41.59, 42.19, 42.80, 43.40, 44.01, 44.61, 45.21, 45.82, 46.42, 47.02, 47.62, 48.22, 48.82, 49.42, 50.01, 50.61, 51.21, 51.80, 52.40, 52.99, 53.59, 54.18, 54.77, 55.37, 55.96, 56.55, 57.14, 57.73, 58.32, 58.90, 59.49, 60.08, 60.67, 61.25, 61.84, 62.42, 63.00, 63.59, 64.17, 64.75, 65.33, 65.92, 66.50, 67.08, 67.65, 68.23, 68.81, 69.39, 69.96, 70.54, 71.12, 71.69, 72.27, 72.84, 73.41, 73.98, 74.56, 75.13, 75.70, 76.27, 76.84, 77.41, 77.97, 78.54, 79.11, 79.68, 80.24, 80.81, 81.37, 81.94, 82.50, 83.06, 83.63, 84.19, 84.75, 85.31, 85.87, 86.43, 86.99, 87.55, 88.10, 88.66, 89.22, 89.77, 90.33, 90.88, 91.44, 91.99, 92.55, 93.10, 93.65, 94.20, 94.75, 95.30, 95.85, 96.40, 96.95, 97.50, 98.05, 98.59, 99.14, 99.69, 100.23, 100.78, 101.32, 101.86, 102.41, 102.95, 103.49, 104.03, 104.58, 105.12, 105.66, 106.19, 106.73, 107.27, 107.81, 108.35, 108.88},
{29.35, 29.96, 30.57, 31.18, 31.79, 32.39, 33.00, 33.61, 34.21, 34.82, 35.42, 36.03, 36.63, 37.23, 37.83, 38.44, 39.04, 39.64, 40.24, 40.83, 41.43, 42.03, 42.63, 43.22, 43.82, 44.41, 45.01, 45.60, 46.19, 46.79, 47.38, 47.97, 48.56, 49.15, 49.74, 50.33, 50.92, 51.50, 52.09, 52.68, 53.26, 53.85, 54.43, 55.02, 55.60, 56.18, 56.76, 57.34, 57.93, 58.51, 59.09, 59.66, 60.24, 60.82, 61.40, 61.97, 62.55, 63.12, 63.70, 64.27, 64.85, 65.42, 65.99, 66.56, 67.14, 67.71, 68.28, 68.85, 69.41, 69.98, 70.55, 71.12, 71.68, 72.25, 72.81, 73.38, 73.94, 74.51, 75.07, 75.63, 76.19, 76.76, 77.32, 77.88, 78.44, 78.99, 79.55, 80.11, 80.67, 81.23, 81.78, 82.34, 82.89, 83.45, 84.00, 84.55, 85.11, 85.66, 86.21, 86.76, 87.31, 87.86, 88.41, 88.96, 89.51, 90.06, 90.60, 91.15, 91.70, 92.24, 92.79, 93.33, 93.87, 94.42, 94.96, 95.50, 96.04, 96.58, 97.13, 97.67, 98.20, 98.74, 99.28, 99.82, 100.36, 100.89, 101.43, 101.97, 102.50, 103.04, 103.57, 104.10, 104.64, 105.17, 105.70, 106.23, 106.76, 107.29, 107.82, 108.35},
{29.97, 30.57, 31.17, 31.77, 32.37, 32.97, 33.57, 34.17, 34.76, 35.36, 35.95, 36.55, 37.14, 37.73, 38.33, 38.92, 39.51, 40.10, 40.69, 41.28, 41.87, 42.46, 43.05, 43.63, 44.22, 44.81, 45.39, 45.98, 46.56, 47.14, 47.73, 48.31, 48.89, 49.47, 50.05, 50.63, 51.21, 51.79, 52.37, 52.95, 53.52, 54.10, 54.68, 55.25, 55.83, 56.40, 56.97, 57.55, 58.12, 58.69, 59.26, 59.83, 60.40, 60.97, 61.54, 62.11, 62.67, 63.24, 63.81, 64.37, 64.94, 65.50, 66.07, 66.63, 67.19, 67.76, 68.32, 68.88, 69.44, 70.00, 70.56, 71.12, 71.68, 72.23, 72.79, 73.35, 73.90, 74.46, 75.01, 75.57, 76.12, 76.68, 77.23, 77.78, 78.33, 78.88, 79.43, 79.98, 80.53, 81.08, 81.63, 82.18, 82.73, 83.27, 83.82, 84.36, 84.91, 85.45, 86.00, 86.54, 87.08, 87.63, 88.17, 88.71, 89.25, 89.79, 90.33, 90.87, 91.41, 91.94, 92.48, 93.02, 93.55, 94.09, 94.63, 95.16, 95.69, 96.23, 96.76, 97.29, 97.83, 98.36, 98.89, 99.42, 99.95, 100.48, 101.01, 101.54, 102.06, 102.59, 103.12, 103.64, 104.17, 104.70, 105.22, 105.74, 106.27, 106.79, 107.31, 107.84},
{30.58, 31.17, 31.76, 32.35, 32.94, 33.53, 34.12, 34.71, 35.29, 35.88, 36.47, 37.05, 37.64, 38.22, 38.81, 39.39, 39.97, 40.55, 41.14, 41.72, 42.30, 42.88, 43.46, 44.03, 44.61, 45.19, 45.77, 46.34, 46.92, 47.49, 48.07, 48.64, 49.21, 49.79, 50.36, 50.93, 51.50, 52.07, 52.64, 53.21, 53.78, 54.35, 54.91, 55.48, 56.05, 56.61, 57.18, 57.74, 58.30, 58.87, 59.43, 59.99, 60.55, 61.12, 61.68, 62.24, 62.80, 63.35, 63.91, 64.47, 65.03, 65.58, 66.14, 66.70, 67.25, 67.80, 68.36, 68.91, 69.46, 70.02, 70.57, 71.12, 71.67, 72.22, 72.77, 73.32, 73.87, 74.41, 74.96, 75.51, 76.05, 76.60, 77.14, 77.69, 78.23, 78.78, 79.32, 79.86, 80.40, 80.94, 81.48, 82.02, 82.56, 83.10, 83.64, 84.18, 84.72, 85.25, 85.79, 86.33, 86.86, 87.40, 87.93, 88.46, 89.00, 89.53, 90.06, 90.59, 91.12, 91.66, 92.19, 92.72, 93.24, 93.77, 94.30, 94.83, 95.36, 95.88, 96.41, 96.93, 97.46, 97.98, 98.51, 99.03, 99.55, 100.08, 100.60, 101.12, 101.64, 102.16, 102.68, 103.20, 103.72, 104.24, 104.75, 105.27, 105.79, 106.30, 106.82, 107.34},
{31.16, 31.75, 32.33, 32.91, 33.49, 34.07, 34.65, 35.23, 35.81, 36.39, 36.97, 37.54, 38.12, 38.70, 39.27, 39.85, 40.42, 40.99, 41.57, 42.14, 42.71, 43.28, 43.85, 44.42, 44.99, 45.56, 46.13, 46.70, 47.26, 47.83, 48.40, 48.96, 49.53, 50.09, 50.65, 51.22, 51.78, 52.34, 52.90, 53.46, 54.02, 54.58, 55.14, 55.70, 56.26, 56.82, 57.37, 57.93, 58.49, 59.04, 59.60, 60.15, 60.70, 61.26, 61.81, 62.36, 62.91, 63.46, 64.01, 64.56, 65.11, 65.66, 66.21, 66.76, 67.31, 67.85, 68.40, 68.94, 69.49, 70.03, 70.58, 71.12, 71.66, 72.20, 72.75, 73.29, 73.83, 74.37, 74.91, 75.45, 75.99, 76.52, 77.06, 77.60, 78.13, 78.67, 79.21, 79.74, 80.27, 80.81, 81.34, 81.87, 82.41, 82.94, 83.47, 84.00, 84.53, 85.06, 85.59, 86.12, 86.65, 87.17, 87.70, 88.23, 88.75, 89.28, 89.80, 90.33, 90.85, 91.38, 91.90, 92.42, 92.94, 93.46, 93.98, 94.51, 95.03, 95.54, 96.06, 96.58, 97.10, 97.62, 98.13, 98.65, 99.17, 99.68, 100.20, 100.71, 101.23, 101.74, 102.25, 102.76, 103.28, 103.79, 104.30, 104.81, 105.32, 105.83, 106.34, 106.85},
{31.74, 32.31, 32.88, 33.46, 34.03, 34.60, 35.17, 35.74, 36.31, 36.88, 37.45, 38.02, 38.59, 39.16, 39.72, 40.29, 40.85, 41.42, 41.98, 42.55, 43.11, 43.67, 44.24, 44.80, 45.36, 45.92, 46.48, 47.04, 47.60, 48.16, 48.72, 49.27, 49.83, 50.39, 50.94, 51.50, 52.05, 52.61, 53.16, 53.71, 54.26, 54.82, 55.37, 55.92, 56.47, 57.02, 57.57, 58.12, 58.66, 59.21, 59.76, 60.30, 60.85, 61.40, 61.94, 62.48, 63.03, 63.57, 64.11, 64.66, 65.20, 65.74, 66.28, 66.82, 67.36, 67.90, 68.44, 68.97, 69.51, 70.05, 70.58, 71.12, 71.66, 72.19, 72.72, 73.26, 73.79, 74.32, 74.86, 75.39, 75.92, 76.45, 76.98, 77.51, 78.04, 78.57, 79.10, 79.62, 80.15, 80.68, 81.20, 81.73, 82.25, 82.78, 83.30, 83.83, 84.35, 84.87, 85.39, 85.91, 86.44, 86.96, 87.48, 88.00, 88.51, 89.03, 89.55, 90.07, 90.59, 91.10, 91.62, 92.13, 92.65, 93.16, 93.68, 94.19, 94.70, 95.22, 95.73, 96.24, 96.75, 97.26, 97.77, 98.28, 98.79, 99.30, 99.81, 100.32, 100.82, 101.33, 101.84, 102.34, 102.85, 103.35, 103.86, 104.36, 104.86, 105.37, 105.87, 106.37},
{32.29, 32.86, 33.42, 33.99, 34.55, 35.11, 35.68, 36.24, 36.80, 37.36, 37.92, 38.48, 39.04, 39.60, 40.16, 40.72, 41.28, 41.83, 42.39, 42.95, 43.50, 44.06, 44.61, 45.17, 45.72, 46.27, 46.82, 47.38, 47.93, 48.48, 49.03, 49.58, 50.13, 50.67, 51.22, 51.77, 52.32, 52.86, 53.41, 53.95, 54.50, 55.04, 55.58, 56.13, 56.67, 57.21, 57.75, 58.29, 58.84, 59.38, 59.91, 60.45, 60.99, 61.53, 62.07, 62.60, 63.14, 63.68, 64.21, 64.75, 65.28, 65.81, 66.35, 66.88, 67.41, 67.94, 68.47, 69.00, 69.53, 70.06, 70.59, 71.12, 71.65, 72.18, 72.70, 73.23, 73.76, 74.28, 74.81, 75.33, 75.86, 76.38, 76.90, 77.42, 77.95, 78.47, 78.99, 79.51, 80.03, 80.55, 81.07, 81.59, 82.10, 82.62, 83.14, 83.66, 84.17, 84.69, 85.20, 85.72, 86.23, 86.75, 87.26, 87.77, 88.28, 88.79, 89.31, 89.82, 90.33, 90.84, 91.35, 91.85, 92.36, 92.87, 93.38, 93.89, 94.39, 94.90, 95.40, 95.91, 96.41, 96.92, 97.42, 97.92, 98.43, 98.93, 99.43, 99.93, 100.43, 100.93, 101.43, 101.93, 102.43, 102.93, 103.43, 103.92, 104.42, 104.92, 105.41, 105.91},
{32.83, 33.39, 33.94, 34.50, 35.06, 35.61, 36.17, 36.72, 37.28, 37.83, 38.38, 38.94, 39.49, 40.04, 40.59, 41.14, 41.69, 42.24, 42.79, 43.34, 43.88, 44.43, 44.98, 45.52, 46.07, 46.61, 47.16, 47.70, 48.24, 48.79, 49.33, 49.87, 50.41, 50.95, 51.49, 52.03, 52.57, 53.11, 53.65, 54.19, 54.72, 55.26, 55.80, 56.33, 56.87, 57.40, 57.94, 58.47, 59.00, 59.53, 60.07, 60.60, 61.13, 61.66, 62.19, 62.72, 63.25, 63.78, 64.30, 64.83, 65.36, 65.89, 66.41, 66.94, 67.46, 67.99, 68.51, 69.03, 69.56, 70.08, 70.60, 71.12, 71.64, 72.16, 72.68, 73.20, 73.72, 74.24, 74.76, 75.28, 75.79, 76.31, 76.83, 77.34, 77.86, 78.37, 78.89, 79.40, 79.91, 80.42, 80.94, 81.45, 81.96, 82.47, 82.98, 83.49, 84.00, 84.51, 85.02, 85.53, 86.03, 86.54, 87.05, 87.55, 88.06, 88.56, 89.07, 89.57, 90.07, 90.58, 91.08, 91.58, 92.08, 92.59, 93.09, 93.59, 94.09, 94.59, 95.09, 95.58, 96.08, 96.58, 97.08, 97.57, 98.07, 98.57, 99.06, 99.56, 100.05, 100.54, 101.04, 101.53, 102.02, 102.52, 103.01, 103.50, 103.99, 104.48, 104.97, 105.46},
{33.35, 33.90, 34.45, 35.00, 35.55, 36.10, 36.64, 37.19, 37.74, 38.28, 38.83, 39.37, 39.92, 40.46, 41.00, 41.55, 42.09, 42.63, 43.17, 43.71, 44.25, 44.79, 45.33, 45.87, 46.41, 46.94, 47.48, 48.02, 48.55, 49.09, 49.62, 50.16, 50.69, 51.23, 51.76, 52.29, 52.82, 53.35, 53.88, 54.41, 54.94, 55.47, 56.00, 56.53, 57.06, 57.59, 58.11, 58.64, 59.17, 59.69, 60.22, 60.74, 61.26, 61.79, 62.31, 62.83, 63.35, 63.88, 64.40, 64.92, 65.44, 65.96, 66.47, 66.99, 67.51, 68.03, 68.55, 69.06, 69.58, 70.09, 70.61, 71.12, 71.64, 72.15, 72.66, 73.18, 73.69, 74.20, 74.71, 75.22, 75.73, 76.24, 76.75, 77.26, 77.77, 78.28, 78.78, 79.29, 79.80, 80.30, 80.81, 81.31, 81.82, 82.32, 82.83, 83.33, 83.83, 84.33, 84.84, 85.34, 85.84, 86.34, 86.84, 87.34, 87.84, 88.34, 88.83, 89.33, 89.83, 90.33, 90.82, 91.32, 91.81, 92.31, 92.80, 93.30, 93.79, 94.28, 94.78, 95.27, 95.76, 96.25, 96.74, 97.23, 97.72, 98.21, 98.70, 99.19, 99.68, 100.17, 100.65, 101.14, 101.63, 102.11, 102.60, 103.08, 103.57, 104.05, 104.54, 105.02},
{33.86, 34.41, 34.95, 35.49, 36.03, 36.57, 37.11, 37.65, 38.19, 38.73, 39.26, 39.80, 40.34, 40.87, 41.41, 41.94, 42.48, 43.01, 43.55, 44.08, 44.61, 45.14, 45.68, 46.21, 46.74, 47.27, 47.80, 48.33, 48.85, 49.38, 49.91, 50.44, 50.96, 51.49, 52.02, 52.54, 53.07, 53.59, 54.11, 54.64, 55.16, 55.68, 56.20, 56.72, 57.25, 57.77, 58.29, 58.80, 59.32, 59.84, 60.36, 60.88, 61.39, 61.91, 62.43, 62.94, 63.46, 63.97, 64.49, 65.00, 65.51, 66.02, 66.54, 67.05, 67.56, 68.07, 68.58, 69.09, 69.60, 70.11, 70.62, 71.12, 71.63, 72.14, 72.64, 73.15, 73.66, 74.16, 74.67, 75.17, 75.67, 76.18, 76.68, 77.18, 77.68, 78.18, 78.69, 79.19, 79.69, 80.19, 80.68, 81.18, 81.68, 82.18, 82.68, 83.17, 83.67, 84.17, 84.66, 85.16, 85.65, 86.14, 86.64, 87.13, 87.62, 88.12, 88.61, 89.10, 89.59, 90.08, 90.57, 91.06, 91.55, 92.04, 92.53, 93.01, 93.50, 93.99, 94.48, 94.96, 95.45, 95.93, 96.42, 96.90, 97.39, 97.87, 98.35, 98.83, 99.32, 99.80, 100.28, 100.76, 101.24, 101.72, 102.20, 102.68, 103.16, 103.64, 104.11, 104.59},
{34.36, 34.89, 35.43, 35.96, 36.50, 37.03, 37.56, 38.09, 38.62, 39.16, 39.69, 40.22, 40.75, 41.27, 41.80, 42.33, 42.86, 43.38, 43.91, 44.44, 44.96, 45.49, 46.01, 46.54, 47.06, 47.58, 48.10, 48.63, 49.15, 49.67, 50.19, 50.71, 51.23, 51.75, 52.27, 52.79, 53.30, 53.82, 54.34, 54.85, 55.37, 55.88, 56.40, 56.91, 57.43, 57.94, 58.45, 58.97, 59.48, 59.99, 60.50, 61.01, 61.52, 62.03, 62.54, 63.05, 63.56, 64.06, 64.57, 65.08, 65.59, 66.09, 66.60, 67.10, 67.61, 68.11, 68.61, 69.12, 69.62, 70.12, 70.62, 71.12, 71.63, 72.13, 72.63, 73.13, 73.62, 74.12, 74.62, 75.12, 75.62, 76.11, 76.61, 77.10, 77.60, 78.10, 78.59, 79.08, 79.58, 80.07, 80.56, 81.06, 81.55, 82.04, 82.53, 83.02, 83.51, 84.00, 84.49, 84.98, 85.47, 85.95, 86.44, 86.93, 87.42, 87.90, 88.39, 88.87, 89.36, 89.84, 90.33, 90.81, 91.29, 91.77, 92.26, 92.74, 93.22, 93.70, 94.18, 94.66, 95.14, 95.62, 96.10, 96.58, 97.06, 97.53, 98.01, 98.49, 98.96, 99.44, 99.91, 100.39, 100.86, 101.34, 101.81, 102.29, 102.76, 103.23, 103.70, 104.17},
{34.84, 35.37, 35.90, 36.42, 36.95, 37.48, 38.00, 38.53, 39.05, 39.57, 40.10, 40.62, 41.14, 41.66, 42.19, 42.71, 43.23, 43.75, 44.27, 44.79, 45.30, 45.82, 46.34, 46.86, 47.37, 47.89, 48.40, 48.92, 49.43, 49.95, 50.46, 50.97, 51.49, 52.00, 52.51, 53.02, 53.53, 54.04, 54.55, 55.06, 55.57, 56.08, 56.59, 57.10, 57.60, 58.11, 58.62, 59.12, 59.63, 60.13, 60.64, 61.14, 61.64, 62.15, 62.65, 63.15, 63.65, 64.16, 64.66, 65.16, 65.66, 66.16, 66.65, 67.15, 67.65, 68.15, 68.65, 69.14, 69.64, 70.14, 70.63, 71.13, 71.62, 72.11, 72.61, 73.10, 73.59, 74.09, 74.58, 75.07, 75.56, 76.05, 76.54, 77.03, 77.52, 78.01, 78.50, 78.98, 79.47, 79.96, 80.45, 80.93, 81.42, 81.90, 82.39, 82.87, 83.36, 83.84, 84.32, 84.80, 85.29, 85.77, 86.25, 86.73, 87.21, 87.69, 88.17, 88.65, 89.13, 89.61, 90.09, 90.56, 91.04, 91.52, 91.99, 92.47, 92.95, 93.42, 93.90, 94.37, 94.84, 95.32, 95.79, 96.26, 96.73, 97.21, 97.68, 98.15, 98.62, 99.09, 99.56, 100.03, 100.50, 100.97, 101.43, 101.90, 102.37, 102.83, 103.30, 103.77},
{35.31, 35.83, 36.36, 36.87, 37.39, 37.91, 38.43, 38.95, 39.47, 39.98, 40.50, 41.01, 41.53, 42.04, 42.56, 43.07, 43.59, 44.10, 44.61, 45.12, 45.64, 46.15, 46.66, 47.17, 47.68, 48.19, 48.70, 49.20, 49.71, 50.22, 50.73, 51.23, 51.74, 52.24, 52.75, 53.25, 53.76, 54.26, 54.77, 55.27, 55.77, 56.27, 56.78, 57.28, 57.78, 58.28, 58.78, 59.28, 59.77, 60.27, 60.77, 61.27, 61.77, 62.26, 62.76, 63.25, 63.75, 64.24, 64.74, 65.23, 65.73, 66.22, 66.71, 67.20, 67.70, 68.19, 68.68, 69.17, 69.66, 70.15, 70.64, 71.13, 71.61, 72.10, 72.59, 73.08, 73.56, 74.05, 74.53, 75.02, 75.50, 75.99, 76.47, 76.96, 77.44, 77.92, 78.40, 78.89, 79.37, 79.85, 80.33, 80.81, 81.29, 81.77, 82.25, 82.73, 83.20, 83.68, 84.16, 84.64, 85.11, 85.59, 86.06, 86.54, 87.01, 87.49, 87.96, 88.44, 88.91, 89.38, 89.85, 90.32, 90.80, 91.27, 91.74, 92.21, 92.68, 93.15, 93.62, 94.08, 94.55, 95.02, 95.49, 95.95, 96.42, 96.89, 97.35, 97.82, 98.28, 98.75, 99.21, 99.67, 100.14, 100.60, 101.06, 101.53, 101.99, 102.45, 102.91, 103.37},
{35.77, 36.29, 36.80, 37.31, 37.83, 38.34, 38.85, 39.36, 39.87, 40.38, 40.89, 41.40, 41.91, 42.42, 42.92, 43.43, 43.94, 44.44, 44.95, 45.45, 45.96, 46.46, 46.97, 47.47, 47.98, 48.48, 48.98, 49.48, 49.98, 50.48, 50.98, 51.48, 51.98, 52.48, 52.98, 53.48, 53.98, 54.48, 54.97, 55.47, 55.97, 56.46, 56.96, 57.45, 57.94, 58.44, 58.93, 59.43, 59.92, 60.41, 60.90, 61.39, 61.88, 62.37, 62.86, 63.35, 63.84, 64.33, 64.82, 65.31, 65.79, 66.28, 66.77, 67.25, 67.74, 68.22, 68.71, 69.19, 69.68, 70.16, 70.64, 71.13, 71.61, 72.09, 72.57, 73.05, 73.53, 74.01, 74.49, 74.97, 75.45, 75.93, 76.41, 76.89, 77.36, 77.84, 78.32, 78.79, 79.27, 79.74, 80.22, 80.69, 81.17, 81.64, 82.11, 82.58, 83.06, 83.53, 84.00, 84.47, 84.94, 85.41, 85.88, 86.35, 86.82, 87.29, 87.76, 88.22, 88.69, 89.16, 89.63, 90.09, 90.56, 91.02, 91.49, 91.95, 92.42, 92.88, 93.34, 93.81, 94.27, 94.73, 95.19, 95.65, 96.12, 96.58, 97.04, 97.50, 97.95, 98.41, 98.87, 99.33, 99.79, 100.25, 100.70, 101.16, 101.62, 102.07, 102.53, 102.98},
{36.22, 36.73, 37.23, 37.74, 38.25, 38.75, 39.26, 39.76, 40.26, 40.77, 41.27, 41.77, 42.28, 42.78, 43.28, 43.78, 44.28, 44.78, 45.28, 45.78, 46.28, 46.77, 47.27, 47.77, 48.27, 48.76, 49.26, 49.75, 50.25, 50.74, 51.24, 51.73, 52.22, 52.72, 53.21, 53.70, 54.19, 54.68, 55.17, 55.66, 56.15, 56.64, 57.13, 57.62, 58.11, 58.60, 59.08, 59.57, 60.06, 60.54, 61.03, 61.51, 62.00, 62.48, 62.97, 63.45, 63.93, 64.42, 64.90, 65.38, 65.86, 66.34, 66.82, 67.30, 67.78, 68.26, 68.74, 69.22, 69.70, 70.17, 70.65, 71.13, 71.60, 72.08, 72.56, 73.03, 73.50, 73.98, 74.45, 74.93, 75.40, 75.87, 76.34, 76.82, 77.29, 77.76, 78.23, 78.70, 79.17, 79.64, 80.11, 80.58, 81.04, 81.51, 81.98, 82.45, 82.91, 83.38, 83.84, 84.31, 84.78, 85.24, 85.70, 86.17, 86.63, 87.09, 87.56, 88.02, 88.48, 88.94, 89.40, 89.86, 90.32, 90.78, 91.24, 91.70, 92.16, 92.62, 93.08, 93.53, 93.99, 94.45, 94.90, 95.36, 95.82, 96.27, 96.73, 97.18, 97.63, 98.09, 98.54, 98.99, 99.45, 99.90, 100.35, 100.80, 101.25, 101.70, 102.15, 102.60},
{36.66, 37.16, 37.66, 38.16, 38.66, 39.16, 39.65, 40.15, 40.65, 41.15, 41.64, 42.14, 42.63, 43.13, 43.62, 44.12, 44.61, 45.11, 45.60, 46.09, 46.58, 47.08, 47.57, 48.06, 48.55, 49.04, 49.53, 50.02, 50.51, 50.99, 51.48, 51.97, 52.46, 52.94, 53.43, 53.92, 54.40, 54.89, 55.37, 55.85, 56.34, 56.82, 57.30, 57.79, 58.27, 58.75, 59.23, 59.71, 60.19, 60.67, 61.15, 61.63, 62.11, 62.59, 63.07, 63.54, 64.02, 64.50, 64.97, 65.45, 65.93, 66.40, 66.87, 67.35, 67.82, 68.30, 68.77, 69.24, 69.71, 70.19, 70.66, 71.13, 71.60, 72.07, 72.54, 73.01, 73.48, 73.95, 74.41, 74.88, 75.35, 75.82, 76.28, 76.75, 77.21, 77.68, 78.14, 78.61, 79.07, 79.54, 80.00, 80.46, 80.93, 81.39, 81.85, 82.31, 82.77, 83.23, 83.69, 84.15, 84.61, 85.07, 85.53, 85.99, 86.45, 86.90, 87.36, 87.82, 88.27, 88.73, 89.19, 89.64, 90.10, 90.55, 91.01, 91.46, 91.91, 92.37, 92.82, 93.27, 93.72, 94.17, 94.62, 95.07, 95.53, 95.98, 96.42, 96.87, 97.32, 97.77, 98.22, 98.67, 99.11, 99.56, 100.01, 100.45, 100.90, 101.34, 101.79, 102.23},
{37.08, 37.58, 38.07, 38.56, 39.06, 39.55, 40.04, 40.53, 41.02, 41.51, 42.00, 42.49, 42.98, 43.47, 43.96, 44.45, 44.94, 45.42, 45.91, 46.40, 46.88, 47.37, 47.86, 48.34, 48.82, 49.31, 49.79, 50.27, 50.76, 51.24, 51.72, 52.20, 52.68, 53.17, 53.65, 54.13, 54.60, 55.08, 55.56, 56.04, 56.52, 57.00, 57.47, 57.95, 58.43, 58.90, 59.38, 59.85, 60.33, 60.80, 61.27, 61.75, 62.22, 62.69, 63.16, 63.64, 64.11, 64.58, 65.05, 65.52, 65.99, 66.46, 66.93, 67.39, 67.86, 68.33, 68.80, 69.26, 69.73, 70.20, 70.66, 71.13, 71.59, 72.06, 72.52, 72.99, 73.45, 73.91, 74.37, 74.84, 75.30, 75.76, 76.22, 76.68, 77.14, 77.60, 78.06, 78.52, 78.98, 79.44, 79.90, 80.35, 80.81, 81.27, 81.72, 82.18, 82.64, 83.09, 83.55, 84.00, 84.45, 84.91, 85.36, 85.81, 86.27, 86.72, 87.17, 87.62, 88.07, 88.52, 88.97, 89.42, 89.87, 90.32, 90.77, 91.22, 91.67, 92.12, 92.56, 93.01, 93.46, 93.90, 94.35, 94.80, 95.24, 95.69, 96.13, 96.57, 97.02, 97.46, 97.90, 98.35, 98.79, 99.23, 99.67, 100.11, 100.55, 100.99, 101.43, 101.87},
{37.50, 37.99, 38.47, 38.96, 39.45, 39.93, 40.42, 40.90, 41.39, 41.87, 42.36, 42.84, 43.33, 43.81, 44.29, 44.77, 45.25, 45.74, 46.22, 46.70, 47.18, 47.66, 48.14, 48.62, 49.09, 49.57, 50.05, 50.53, 51.00, 51.48, 51.96, 52.43, 52.91, 53.38, 53.86, 54.33, 54.80, 55.28, 55.75, 56.22, 56.69, 57.17, 57.64, 58.11, 58.58, 59.05, 59.52, 59.99, 60.46, 60.92, 61.39, 61.86, 62.33, 62.79, 63.26, 63.73, 64.19, 64.66, 65.12, 65.59, 66.05, 66.51, 66.98, 67.44, 67.90, 68.36, 68.83, 69.29, 69.75, 70.21, 70.67, 71.13, 71.59, 72.05, 72.51, 72.96, 73.42, 73.88, 74.34, 74.79, 75.25, 75.71, 76.16, 76.62, 77.07, 77.53, 77.98, 78.43, 78.89, 79.34, 79.79, 80.25, 80.70, 81.15, 81.60, 82.05, 82.50, 82.95, 83.40, 83.85, 84.30, 84.75, 85.20, 85.64, 86.09, 86.54, 86.98, 87.43, 87.88, 88.32, 88.77, 89.21, 89.66, 90.10, 90.54, 90.99, 91.43, 91.87, 92.32, 92.76, 93.20, 93.64, 94.08, 94.52, 94.96, 95.40, 95.84, 96.28, 96.72, 97.16, 97.60, 98.03, 98.47, 98.91, 99.34, 99.78, 100.22, 100.65, 101.09, 101.52},
{37.90, 38.38, 38.87, 39.35, 39.83, 40.31, 40.79, 41.27, 41.75, 42.23, 42.70, 43.18, 43.66, 44.14, 44.61, 45.09, 45.56, 46.04, 46.51, 46.99, 47.46, 47.94, 48.41, 48.88, 49.36, 49.83, 50.30, 50.77, 51.24, 51.71, 52.18, 52.65, 53.12, 53.59, 54.06, 54.53, 55.00, 55.46, 55.93, 56.40, 56.86, 57.33, 57.80, 58.26, 58.73, 59.19, 59.65, 60.12, 60.58, 61.04, 61.51, 61.97, 62.43, 62.89, 63.35, 63.81, 64.27, 64.73, 65.19, 65.65, 66.11, 66.57, 67.03, 67.48, 67.94, 68.40, 68.85, 69.31, 69.77, 70.22, 70.68, 71.13, 71.58, 72.04, 72.49, 72.94, 73.40, 73.85, 74.30, 74.75, 75.20, 75.65, 76.10, 76.55, 77.00, 77.45, 77.90, 78.35, 78.80, 79.25, 79.69, 80.14, 80.59, 81.03, 81.48, 81.93, 82.37, 82.82, 83.26, 83.70, 84.15, 84.59, 85.03, 85.48, 85.92, 86.36, 86.80, 87.24, 87.69, 88.13, 88.57, 89.01, 89.44, 89.88, 90.32, 90.76, 91.20, 91.64, 92.07, 92.51, 92.95, 93.38, 93.82, 94.26, 94.69, 95.13, 95.56, 95.99, 96.43, 96.86, 97.29, 97.73, 98.16, 98.59, 99.02, 99.45, 99.89, 100.32, 100.75, 101.18},
{38.30, 38.77, 39.25, 39.73, 40.20, 40.67, 41.15, 41.62, 42.10, 42.57, 43.04, 43.51, 43.98, 44.46, 44.93, 45.40, 45.87, 46.34, 46.81, 47.27, 47.74, 48.21, 48.68, 49.15, 49.61, 50.08, 50.55, 51.01, 51.48, 51.94, 52.41, 52.87, 53.34, 53.80, 54.26, 54.72, 55.19, 55.65, 56.11, 56.57, 57.03, 57.49, 57.95, 58.41, 58.87, 59.33, 59.79, 60.25, 60.70, 61.16, 61.62, 62.08, 62.53, 62.99, 63.44, 63.90, 64.35, 64.81, 65.26, 65.72, 66.17, 66.62, 67.07, 67.53, 67.98, 68.43, 68.88, 69.33, 69.78, 70.23, 70.68, 71.13, 71.58, 72.03, 72.48, 72.92, 73.37, 73.82, 74.26, 74.71, 75.16, 75.60, 76.05, 76.49, 76.94, 77.38, 77.82, 78.27, 78.71, 79.15, 79.60, 80.04, 80.48, 80.92, 81.36, 81.80, 82.24, 82.68, 83.12, 83.56, 84.00, 84.44, 84.88, 85.31, 85.75, 86.19, 86.63, 87.06, 87.50, 87.93, 88.37, 88.80, 89.24, 89.67, 90.11, 90.54, 90.97, 91.41, 91.84, 92.27, 92.70, 93.13, 93.56, 93.99, 94.43, 94.86, 95.28, 95.71, 96.14, 96.57, 97.00, 97.43, 97.86, 98.28, 98.71, 99.14, 99.56, 99.99, 100.41, 100.84},
{38.68, 39.15, 39.62, 40.09, 40.56, 41.03, 41.50, 41.97, 42.44, 42.90, 43.37, 43.84, 44.30, 44.77, 45.23, 45.70, 46.16, 46.63, 47.09, 47.55, 48.02, 48.48, 48.94, 49.40, 49.86, 50.33, 50.79, 51.25, 51.71, 52.17, 52.62, 53.08, 53.54, 54.00, 54.46, 54.91, 55.37, 55.83, 56.28, 56.74, 57.20, 57.65, 58.11, 58.56, 59.01, 59.47, 59.92, 60.37, 60.83, 61.28, 61.73, 62.18, 62.63, 63.08, 63.53, 63.98, 64.43, 64.88, 65.33, 65.78, 66.23, 66.67, 67.12, 67.57, 68.01, 68.46, 68.91, 69.35, 69.80, 70.24, 70.69, 71.13, 71.57, 72.02, 72.46, 72.90, 73.35, 73.79, 74.23, 74.67, 75.11, 75.55, 75.99, 76.43, 76.87, 77.31, 77.75, 78.19, 78.63, 79.06, 79.50, 79.94, 80.37, 80.81, 81.25, 81.68, 82.12, 82.55, 82.99, 83.42, 83.86, 84.29, 84.72, 85.15, 85.59, 86.02, 86.45, 86.88, 87.31, 87.74, 88.18, 88.61, 89.04, 89.46, 89.89, 90.32, 90.75, 91.18, 91.61, 92.03, 92.46, 92.89, 93.31, 93.74, 94.17, 94.59, 95.02, 95.44, 95.86, 96.29, 96.71, 97.14, 97.56, 97.98, 98.40, 98.83, 99.25, 99.67, 100.09, 100.51},
{39.06, 39.53, 39.99, 40.45, 40.92, 41.38, 41.84, 42.31, 42.77, 43.23, 43.69, 44.15, 44.61, 45.07, 45.53, 45.99, 46.45, 46.91, 47.37, 47.83, 48.28, 48.74, 49.20, 49.65, 50.11, 50.56, 51.02, 51.48, 51.93, 52.38, 52.84, 53.29, 53.74, 54.20, 54.65, 55.10, 55.55, 56.00, 56.45, 56.91, 57.36, 57.81, 58.25, 58.70, 59.15, 59.60, 60.05, 60.50, 60.94, 61.39, 61.84, 62.28, 62.73, 63.17, 63.62, 64.06, 64.51, 64.95, 65.40, 65.84, 66.28, 66.73, 67.17, 67.61, 68.05, 68.49, 68.93, 69.37, 69.81, 70.25, 70.69, 71.13, 71.57, 72.01, 72.45, 72.88, 73.32, 73.76, 74.20, 74.63, 75.07, 75.50, 75.94, 76.37, 76.81, 77.24, 77.68, 78.11, 78.54, 78.98, 79.41, 79.84, 80.27, 80.70, 81.13, 81.57, 82.00, 82.43, 82.86, 83.29, 83.71, 84.14, 84.57, 85.00, 85.43, 85.85, 86.28, 86.71, 87.13, 87.56, 87.99, 88.41, 88.84, 89.26, 89.69, 90.11, 90.53, 90.96, 91.38, 91.80, 92.23, 92.65, 93.07, 93.49, 93.91, 94.33, 94.75, 95.17, 95.59, 96.01, 96.43, 96.85, 97.27, 97.69, 98.10, 98.52, 98.94, 99.36, 99.77, 100.19},
{39.43, 39.89, 40.35, 40.81, 41.26, 41.72, 42.18, 42.64, 43.09, 43.55, 44.01, 44.46, 44.92, 45.37, 45.83, 46.28, 46.73, 47.19, 47.64, 48.09, 48.54, 49.00, 49.45, 49.90, 50.35, 50.80, 51.25, 51.70, 52.15, 52.60, 53.05, 53.49, 53.94, 54.39, 54.84, 55.28, 55.73, 56.18, 56.62, 57.07, 57.51, 57.96, 58.40, 58.84, 59.29, 59.73, 60.17, 60.62, 61.06, 61.50, 61.94, 62.38, 62.82, 63.26, 63.70, 64.14, 64.58, 65.02, 65.46, 65.90, 66.34, 66.77, 67.21, 67.65, 68.09, 68.52, 68.96, 69.39, 69.83, 70.26, 70.70, 71.13, 71.57, 72.00, 72.43, 72.87, 73.30, 73.73, 74.16, 74.59, 75.02, 75.46, 75.89, 76.32, 76.75, 77.17, 77.60, 78.03, 78.46, 78.89, 79.32, 79.74, 80.17, 80.60, 81.02, 81.45, 81.88, 82.30, 82.73, 83.15, 83.58, 84.00, 84.42, 84.85, 85.27, 85.69, 86.12, 86.54, 86.96, 87.38, 87.80, 88.22, 88.64, 89.06, 89.48, 89.90, 90.32, 90.74, 91.16, 91.58, 92.00, 92.41, 92.83, 93.25, 93.66, 94.08, 94.50, 94.91, 95.33, 95.74, 96.16, 96.57, 96.98, 97.40, 97.81, 98.22, 98.64, 99.05, 99.46, 99.87},
{39.79, 40.24, 40.70, 41.15, 41.60, 42.06, 42.51, 42.96, 43.41, 43.86, 44.31, 44.76, 45.21, 45.66, 46.11, 46.56, 47.01, 47.46, 47.90, 48.35, 48.80, 49.25, 49.69, 50.14, 50.58, 51.03, 51.47, 51.92, 52.36, 52.81, 53.25, 53.69, 54.13, 54.58, 55.02, 55.46, 55.90, 56.34, 56.78, 57.22, 57.66, 58.10, 58.54, 58.98, 59.42, 59.86, 60.30, 60.73, 61.17, 61.61, 62.04, 62.48, 62.92, 63.35, 63.79, 64.22, 64.66, 65.09, 65.52, 65.96, 66.39, 66.82, 67.26, 67.69, 68.12, 68.55, 68.98, 69.41, 69.84, 70.27, 70.70, 71.13, 71.56, 71.99, 72.42, 72.85, 73.27, 73.70, 74.13, 74.56, 74.98, 75.41, 75.83, 76.26, 76.68, 77.11, 77.53, 77.96, 78.38, 78.80, 79.23, 79.65, 80.07, 80.50, 80.92, 81.34, 81.76, 82.18, 82.60, 83.02, 83.44, 83.86, 84.28, 84.70, 85.12, 85.54, 85.95, 86.37, 86.79, 87.20, 87.62, 88.04, 88.45, 88.87, 89.28, 89.70, 90.11, 90.53, 90.94, 91.36, 91.77, 92.18, 92.60, 93.01, 93.42, 93.83, 94.24, 94.65, 95.07, 95.48, 95.89, 96.30, 96.71, 97.12, 97.52, 97.93, 98.34, 98.75, 99.16, 99.57},
{40.14, 40.59, 41.04, 41.49, 41.93, 42.38, 42.83, 43.28, 43.72, 44.17, 44.61, 45.06, 45.50, 45.95, 46.39, 46.83, 47.28, 47.72, 48.16, 48.61, 49.05, 49.49, 49.93, 50.37, 50.81, 51.25, 51.69, 52.13, 52.57, 53.01, 53.45, 53.89, 54.32, 54.76, 55.20, 55.63, 56.07, 56.51, 56.94, 57.38, 57.81, 58.25, 58.68, 59.12, 59.55, 59.98, 60.42, 60.85, 61.28, 61.71, 62.15, 62.58, 63.01, 63.44, 63.87, 64.30, 64.73, 65.16, 65.59, 66.02, 66.44, 66.87, 67.30, 67.73, 68.15, 68.58, 69.01, 69.43, 69.86, 70.28, 70.71, 71.13, 71.56, 71.98, 72.41, 72.83, 73.25, 73.67, 74.10, 74.52, 74.94, 75.36, 75.78, 76.20, 76.62, 77.04, 77.46, 77.88, 78.30, 78.72, 79.14, 79.56, 79.98, 80.39, 80.81, 81.23, 81.65, 82.06, 82.48, 82.89, 83.31, 83.72, 84.14, 84.55, 84.97, 85.38, 85.79, 86.21, 86.62, 87.03, 87.44, 87.86, 88.27, 88.68, 89.09, 89.50, 89.91, 90.32, 90.73, 91.14, 91.55, 91.96, 92.37, 92.77, 93.18, 93.59, 94.00, 94.40, 94.81, 95.22, 95.62, 96.03, 96.43, 96.84, 97.24, 97.65, 98.05, 98.46, 98.86, 99.26},
{40.49, 40.93, 41.37, 41.82, 42.26, 42.70, 43.14, 43.58, 44.03, 44.47, 44.91, 45.35, 45.79, 46.23, 46.66, 47.10, 47.54, 47.98, 48.42, 48.85, 49.29, 49.73, 50.16, 50.60, 51.04, 51.47, 51.91, 52.34, 52.77, 53.21, 53.64, 54.08, 54.51, 54.94, 55.37, 55.80, 56.24, 56.67, 57.10, 57.53, 57.96, 58.39, 58.82, 59.25, 59.68, 60.11, 60.53, 60.96, 61.39, 61.82, 62.24, 62.67, 63.10, 63.52, 63.95, 64.37, 64.80, 65.22, 65.65, 66.07, 66.49, 66.92, 67.34, 67.76, 68.19, 68.61, 69.03, 69.45, 69.87, 70.29, 70.71, 71.13, 71.55, 71.97, 72.39, 72.81, 73.23, 73.65, 74.07, 74.48, 74.90, 75.32, 75.73, 76.15, 76.57, 76.98, 77.40, 77.81, 78.23, 78.64, 79.06, 79.47, 79.88, 80.30, 80.71, 81.12, 81.53, 81.95, 82.36, 82.77, 83.18, 83.59, 84.00, 84.41, 84.82, 85.23, 85.64, 86.05, 86.46, 86.86, 87.27, 87.68, 88.09, 88.49, 88.90, 89.31, 89.71, 90.12, 90.52, 90.93, 91.33, 91.74, 92.14, 92.55, 92.95, 93.35, 93.76, 94.16, 94.56, 94.96, 95.37, 95.77, 96.17, 96.57, 96.97, 97.37, 97.77, 98.17, 98.57, 98.97},
{40.82, 41.26, 41.70, 42.14, 42.58, 43.01, 43.45, 43.89, 44.32, 44.76, 45.19, 45.63, 46.06, 46.50, 46.93, 47.37, 47.80, 48.23, 48.66, 49.10, 49.53, 49.96, 50.39, 50.82, 51.25, 51.69, 52.12, 52.54, 52.97, 53.40, 53.83, 54.26, 54.69, 55.12, 55.54, 55.97, 56.40, 56.82, 57.25, 57.68, 58.10, 58.53, 58.95, 59.38, 59.80, 60.23, 60.65, 61.07, 61.49, 61.92, 62.34, 62.76, 63.18, 63.60, 64.03, 64.45, 64.87, 65.29, 65.71, 66.13, 66.55, 66.96, 67.38, 67.80, 68.22, 68.64, 69.05, 69.47, 69.89, 70.30, 70.72, 71.13, 71.55, 71.96, 72.38, 72.79, 73.21, 73.62, 74.03, 74.45, 74.86, 75.27, 75.69, 76.10, 76.51, 76.92, 77.33, 77.74, 78.15, 78.56, 78.97, 79.38, 79.79, 80.20, 80.61, 81.02, 81.42, 81.83, 82.24, 82.65, 83.05, 83.46, 83.86, 84.27, 84.68, 85.08, 85.49, 85.89, 86.29, 86.70, 87.10, 87.51, 87.91, 88.31, 88.71, 89.12, 89.52, 89.92, 90.32, 90.72, 91.12, 91.52, 91.92, 92.32, 92.72, 93.12, 93.52, 93.92, 94.32, 94.71, 95.11, 95.51, 95.91, 96.30, 96.70, 97.10, 97.49, 97.89, 98.28, 98.68},
{41.15, 41.59, 42.02, 42.45, 42.89, 43.32, 43.75, 44.18, 44.61, 45.04, 45.47, 45.90, 46.33, 46.76, 47.19, 47.62, 48.05, 48.48, 48.91, 49.34, 49.76, 50.19, 50.62, 51.04, 51.47, 51.89, 52.32, 52.75, 53.17, 53.59, 54.02, 54.44, 54.87, 55.29, 55.71, 56.13, 56.56, 56.98, 57.40, 57.82, 58.24, 58.66, 59.08, 59.50, 59.92, 60.34, 60.76, 61.18, 61.60, 62.02, 62.43, 62.85, 63.27, 63.69, 64.10, 64.52, 64.93, 65.35, 65.76, 66.18, 66.59, 67.01, 67.42, 67.84, 68.25, 68.66, 69.08, 69.49, 69.90, 70.31, 70.72, 71.13, 71.55, 71.96, 72.37, 72.78, 73.19, 73.60, 74.00, 74.41, 74.82, 75.23, 75.64, 76.05, 76.45, 76.86, 77.27, 77.67, 78.08, 78.48, 78.89, 79.30, 79.70, 80.10, 80.51, 80.91, 81.32, 81.72, 82.12, 82.53, 82.93, 83.33, 83.73, 84.13, 84.54, 84.94, 85.34, 85.74, 86.14, 86.54, 86.94, 87.34, 87.73, 88.13, 88.53, 88.93, 89.33, 89.72, 90.12, 90.52, 90.92, 91.31, 91.71, 92.10, 92.50, 92.89, 93.29, 93.68, 94.08, 94.47, 94.87, 95.26, 95.65, 96.04, 96.44, 96.83, 97.22, 97.61, 98.00, 98.40},
{41.48, 41.90, 42.33, 42.76, 43.19, 43.62, 44.04, 44.47, 44.90, 45.32, 45.75, 46.17, 46.60, 47.03, 47.45, 47.87, 48.30, 48.72, 49.15, 49.57, 49.99, 50.41, 50.84, 51.26, 51.68, 52.10, 52.52, 52.94, 53.36, 53.78, 54.20, 54.62, 55.04, 55.46, 55.88, 56.29, 56.71, 57.13, 57.55, 57.96, 58.38, 58.80, 59.21, 59.63, 60.04, 60.46, 60.87, 61.29, 61.70, 62.11, 62.53, 62.94, 63.35, 63.76, 64.18, 64.59, 65.00, 65.41, 65.82, 66.23, 66.64, 67.05, 67.46, 67.87, 68.28, 68.69, 69.10, 69.51, 69.91, 70.32, 70.73, 71.14, 71.54, 71.95, 72.35, 72.76, 73.17, 73.57, 73.98, 74.38, 74.78, 75.19, 75.59, 76.00, 76.40, 76.80, 77.20, 77.61, 78.01, 78.41, 78.81, 79.21, 79.61, 80.01, 80.41, 80.81, 81.21, 81.61, 82.01, 82.41, 82.81, 83.20, 83.60, 84.00, 84.40, 84.79, 85.19, 85.59, 85.98, 86.38, 86.77, 87.17, 87.56, 87.96, 88.35, 88.75, 89.14, 89.53, 89.93, 90.32, 90.71, 91.11, 91.50, 91.89, 92.28, 92.67, 93.06, 93.45, 93.84, 94.23, 94.62, 95.01, 95.40, 95.79, 96.18, 96.57, 96.96, 97.34, 97.73, 98.12},
{41.79, 42.22, 42.64, 43.06, 43.49, 43.91, 44.33, 44.75, 45.18, 45.60, 46.02, 46.44, 46.86, 47.28, 47.70, 48.12, 48.54, 48.96, 49.38, 49.80, 50.21, 50.63, 51.05, 51.47, 51.88, 52.30, 52.72, 53.13, 53.55, 53.96, 54.38, 54.79, 55.21, 55.62, 56.04, 56.45, 56.86, 57.28, 57.69, 58.10, 58.51, 58.92, 59.34, 59.75, 60.16, 60.57, 60.98, 61.39, 61.80, 62.21, 62.62, 63.02, 63.43, 63.84, 64.25, 64.66, 65.06, 65.47, 65.88, 66.28, 66.69, 67.10, 67.50, 67.91, 68.31, 68.71, 69.12, 69.52, 69.93, 70.33, 70.73, 71.14, 71.54, 71.94, 72.34, 72.74, 73.14, 73.55, 73.95, 74.35, 74.75, 75.15, 75.55, 75.95, 76.34, 76.74, 77.14, 77.54, 77.94, 78.33, 78.73, 79.13, 79.53, 79.92, 80.32, 80.71, 81.11, 81.50, 81.90, 82.29, 82.69, 83.08, 83.48, 83.87, 84.26, 84.65, 85.05, 85.44, 85.83, 86.22, 86.62, 87.01, 87.40, 87.79, 88.18, 88.57, 88.96, 89.35, 89.74, 90.13, 90.51, 90.90, 91.29, 91.68, 92.07, 92.45, 92.84, 93.23, 93.61, 94.00, 94.39, 94.77, 95.16, 95.54, 95.93, 96.31, 96.70, 97.08, 97.46, 97.85},
{42.10, 42.52, 42.94, 43.36, 43.78, 44.19, 44.61, 45.03, 45.45, 45.87, 46.28, 46.70, 47.11, 47.53, 47.95, 48.36, 48.78, 49.19, 49.61, 50.02, 50.43, 50.85, 51.26, 51.67, 52.08, 52.50, 52.91, 53.32, 53.73, 54.14, 54.55, 54.96, 55.37, 55.78, 56.19, 56.60, 57.01, 57.42, 57.83, 58.24, 58.64, 59.05, 59.46, 59.87, 60.27, 60.68, 61.08, 61.49, 61.89, 62.30, 62.70, 63.11, 63.51, 63.92, 64.32, 64.72, 65.13, 65.53, 65.93, 66.33, 66.74, 67.14, 67.54, 67.94, 68.34, 68.74, 69.14, 69.54, 69.94, 70.34, 70.74, 71.14, 71.53, 71.93, 72.33, 72.73, 73.12, 73.52, 73.92, 74.31, 74.71, 75.11, 75.50, 75.90, 76.29, 76.69, 77.08, 77.47, 77.87, 78.26, 78.65, 79.05, 79.44, 79.83, 80.22, 80.62, 81.01, 81.40, 81.79, 82.18, 82.57, 82.96, 83.35, 83.74, 84.13, 84.52, 84.91, 85.30, 85.68, 86.07, 86.46, 86.85, 87.23, 87.62, 88.01, 88.39, 88.78, 89.16, 89.55, 89.93, 90.32, 90.70, 91.09, 91.47, 91.86, 92.24, 92.62, 93.01, 93.39, 93.77, 94.15, 94.53, 94.92, 95.30, 95.68, 96.06, 96.44, 96.82, 97.20, 97.58},
{42.40, 42.82, 43.23, 43.65, 44.06, 44.47, 44.89, 45.30, 45.71, 46.13, 46.54, 46.95, 47.36, 47.78, 48.19, 48.60, 49.01, 49.42, 49.83, 50.24, 50.65, 51.06, 51.47, 51.87, 52.28, 52.69, 53.10, 53.50, 53.91, 54.32, 54.72, 55.13, 55.54, 55.94, 56.35, 56.75, 57.16, 57.56, 57.97, 58.37, 58.77, 59.18, 59.58, 59.98, 60.38, 60.79, 61.19, 61.59, 61.99, 62.39, 62.79, 63.19, 63.59, 63.99, 64.39, 64.79, 65.19, 65.59, 65.99, 66.38, 66.78, 67.18, 67.58, 67.97, 68.37, 68.77, 69.16, 69.56, 69.95, 70.35, 70.74, 71.14, 71.53, 71.92, 72.32, 72.71, 73.11, 73.50, 73.89, 74.28, 74.67, 75.07, 75.46, 75.85, 76.24, 76.63, 77.02, 77.41, 77.80, 78.19, 78.58, 78.97, 79.36, 79.75, 80.13, 80.52, 80.91, 81.30, 81.68, 82.07, 82.46, 82.84, 83.23, 83.61, 84.00, 84.39, 84.77, 85.15, 85.54, 85.92, 86.31, 86.69, 87.07, 87.46, 87.84, 88.22, 88.60, 88.99, 89.37, 89.75, 90.13, 90.51, 90.89, 91.27, 91.65, 92.03, 92.41, 92.79, 93.17, 93.55, 93.92, 94.30, 94.68, 95.06, 95.44, 95.81, 96.19, 96.57, 96.94, 97.32},
{42.70, 43.11, 43.52, 43.93, 44.34, 44.75, 45.16, 45.57, 45.98, 46.38, 46.79, 47.20, 47.61, 48.02, 48.42, 48.83, 49.23, 49.64, 50.05, 50.45, 50.86, 51.26, 51.67, 52.07, 52.47, 52.88, 53.28, 53.68, 54.09, 54.49, 54.89, 55.29, 55.70, 56.10, 56.50, 56.90, 57.30, 57.70, 58.10, 58.50, 58.90, 59.30, 59.70, 60.09, 60.49, 60.89, 61.29, 61.69, 62.08, 62.48, 62.88, 63.27, 63.67, 64.06, 64.46, 64.85, 65.25, 65.64, 66.04, 66.43, 66.83, 67.22, 67.61, 68.00, 68.40, 68.79, 69.18, 69.57, 69.96, 70.36, 70.75, 71.14, 71.53, 71.92, 72.31, 72.70, 73.09, 73.47, 73.86, 74.25, 74.64, 75.03, 75.42, 75.80, 76.19, 76.58, 76.96, 77.35, 77.73, 78.12, 78.51, 78.89, 79.28, 79.66, 80.04, 80.43, 80.81, 81.20, 81.58, 81.96, 82.34, 82.73, 83.11, 83.49, 83.87, 84.25, 84.64, 85.02, 85.40, 85.78, 86.16, 86.54, 86.92, 87.30, 87.67, 88.05, 88.43, 88.81, 89.19, 89.56, 89.94, 90.32, 90.70, 91.07, 91.45, 91.83, 92.20, 92.58, 92.95, 93.33, 93.70, 94.08, 94.45, 94.82, 95.20, 95.57, 95.94, 96.32, 96.69, 97.06},
{42.99, 43.40, 43.80, 44.21, 44.61, 45.02, 45.42, 45.83, 46.23, 46.64, 47.04, 47.44, 47.85, 48.25, 48.65, 49.06, 49.46, 49.86, 50.26, 50.66, 51.06, 51.46, 51.86, 52.26, 52.66, 53.06, 53.46, 53.86, 54.26, 54.66, 55.06, 55.45, 55.85, 56.25, 56.65, 57.04, 57.44, 57.84, 58.23, 58.63, 59.02, 59.42, 59.81, 60.21, 60.60, 60.99, 61.39, 61.78, 62.17, 62.57, 62.96, 63.35, 63.74, 64.13, 64.53, 64.92, 65.31, 65.70, 66.09, 66.48, 66.87, 67.26, 67.65, 68.04, 68.42, 68.81, 69.20, 69.59, 69.98, 70.36, 70.75, 71.14, 71.52, 71.91, 72.30, 72.68, 73.07, 73.45, 73.84, 74.22, 74.61, 74.99, 75.37, 75.76, 76.14, 76.52, 76.91, 77.29, 77.67, 78.05, 78.43, 78.82, 79.20, 79.58, 79.96, 80.34, 80.72, 81.10, 81.48, 81.86, 82.24, 82.61, 82.99, 83.37, 83.75, 84.13, 84.50, 84.88, 85.26, 85.63, 86.01, 86.39, 86.76, 87.14, 87.51, 87.89, 88.26, 88.64, 89.01, 89.39, 89.76, 90.13, 90.51, 90.88, 91.25, 91.62, 92.00, 92.37, 92.74, 93.11, 93.48, 93.85, 94.22, 94.59, 94.96, 95.33, 95.70, 96.07, 96.44, 96.81},
{43.27, 43.68, 44.08, 44.48, 44.88, 45.28, 45.68, 46.08, 46.48, 46.88, 47.28, 47.68, 48.08, 48.48, 48.88, 49.28, 49.68, 50.07, 50.47, 50.87, 51.26, 51.66, 52.06, 52.45, 52.85, 53.24, 53.64, 54.03, 54.43, 54.82, 55.22, 55.61, 56.00, 56.40, 56.79, 57.18, 57.58, 57.97, 58.36, 58.75, 59.14, 59.53, 59.92, 60.32, 60.71, 61.10, 61.48, 61.87, 62.26, 62.65, 63.04, 63.43, 63.82, 64.20, 64.59, 64.98, 65.37, 65.75, 66.14, 66.53, 66.91, 67.30, 67.68, 68.07, 68.45, 68.84, 69.22, 69.60, 69.99, 70.37, 70.76, 71.14, 71.52, 71.90, 72.29, 72.67, 73.05, 73.43, 73.81, 74.19, 74.57, 74.95, 75.33, 75.71, 76.09, 76.47, 76.85, 77.23, 77.61, 77.98, 78.36, 78.74, 79.12, 79.49, 79.87, 80.25, 80.62, 81.00, 81.38, 81.75, 82.13, 82.50, 82.88, 83.25, 83.63, 84.00, 84.37, 84.75, 85.12, 85.49, 85.87, 86.24, 86.61, 86.98, 87.35, 87.73, 88.10, 88.47, 88.84, 89.21, 89.58, 89.95, 90.32, 90.69, 91.06, 91.43, 91.80, 92.16, 92.53, 92.90, 93.27, 93.63, 94.00, 94.37, 94.74, 95.10, 95.47, 95.83, 96.20, 96.56},
{43.55, 43.95, 44.35, 44.75, 45.14, 45.54, 45.94, 46.33, 46.73, 47.13, 47.52, 47.92, 48.31, 48.71, 49.10, 49.49, 49.89, 50.28, 50.68, 51.07, 51.46, 51.85, 52.25, 52.64, 53.03, 53.42, 53.81, 54.20, 54.59, 54.98, 55.38, 55.76, 56.15, 56.54, 56.93, 57.32, 57.71, 58.10, 58.49, 58.87, 59.26, 59.65, 60.04, 60.42, 60.81, 61.19, 61.58, 61.97, 62.35, 62.74, 63.12, 63.50, 63.89, 64.27, 64.66, 65.04, 65.42, 65.81, 66.19, 66.57, 66.95, 67.33, 67.72, 68.10, 68.48, 68.86, 69.24, 69.62, 70.00, 70.38, 70.76, 71.14, 71.52, 71.90, 72.27, 72.65, 73.03, 73.41, 73.79, 74.16, 74.54, 74.92, 75.29, 75.67, 76.04, 76.42, 76.79, 77.17, 77.54, 77.92, 78.29, 78.67, 79.04, 79.41, 79.79, 80.16, 80.53, 80.91, 81.28, 81.65, 82.02, 82.39, 82.76, 83.14, 83.51, 83.88, 84.25, 84.62, 84.99, 85.36, 85.73, 86.09, 86.46, 86.83, 87.20, 87.57, 87.93, 88.30, 88.67, 89.04, 89.40, 89.77, 90.14, 90.50, 90.87, 91.23, 91.60, 91.96, 92.33, 92.69, 93.06, 93.42, 93.78, 94.15, 94.51, 94.87, 95.24, 95.60, 95.96, 96.32},
{43.82, 44.22, 44.61, 45.01, 45.40, 45.79, 46.19, 46.58, 46.97, 47.36, 47.75, 48.15, 48.54, 48.93, 49.32, 49.71, 50.10, 50.49, 50.88, 51.27, 51.66, 52.04, 52.43, 52.82, 53.21, 53.60, 53.98, 54.37, 54.76, 55.14, 55.53, 55.92, 56.30, 56.69, 57.07, 57.46, 57.84, 58.23, 58.61, 58.99, 59.38, 59.76, 60.14, 60.53, 60.91, 61.29, 61.67, 62.06, 62.44, 62.82, 63.20, 63.58, 63.96, 64.34, 64.72, 65.10, 65.48, 65.86, 66.24, 66.62, 66.99, 67.37, 67.75, 68.13, 68.50, 68.88, 69.26, 69.64, 70.01, 70.39, 70.76, 71.14, 71.51, 71.89, 72.26, 72.64, 73.01, 73.39, 73.76, 74.13, 74.51, 74.88, 75.25, 75.63, 76.00, 76.37, 76.74, 77.11, 77.48, 77.85, 78.23, 78.60, 78.97, 79.34, 79.71, 80.07, 80.44, 80.81, 81.18, 81.55, 81.92, 82.29, 82.65, 83.02, 83.39, 83.76, 84.12, 84.49, 84.85, 85.22, 85.59, 85.95, 86.32, 86.68, 87.05, 87.41, 87.78, 88.14, 88.50, 88.87, 89.23, 89.59, 89.96, 90.32, 90.68, 91.04, 91.40, 91.77, 92.13, 92.49, 92.85, 93.21, 93.57, 93.93, 94.29, 94.65, 95.01, 95.37, 95.73, 96.09},
{44.09, 44.48, 44.87, 45.26, 45.65, 46.04, 46.43, 46.82, 47.21, 47.59, 47.98, 48.37, 48.76, 49.14, 49.53, 49.92, 50.30, 50.69, 51.07, 51.46, 51.85, 52.23, 52.61, 53.00, 53.38, 53.77, 54.15, 54.53, 54.92, 55.30, 55.68, 56.06, 56.45, 56.83, 57.21, 57.59, 57.97, 58.35, 58.73, 59.11, 59.49, 59.87, 60.25, 60.63, 61.01, 61.39, 61.77, 62.14, 62.52, 62.90, 63.28, 63.65, 64.03, 64.41, 64.78, 65.16, 65.53, 65.91, 66.28, 66.66, 67.03, 67.41, 67.78, 68.16, 68.53, 68.90, 69.28, 69.65, 70.02, 70.40, 70.77, 71.14, 71.51, 71.88, 72.25, 72.62, 73.00, 73.37, 73.74, 74.11, 74.48, 74.84, 75.21, 75.58, 75.95, 76.32, 76.69, 77.06, 77.42, 77.79, 78.16, 78.53, 78.89, 79.26, 79.62, 79.99, 80.36, 80.72, 81.09, 81.45, 81.82, 82.18, 82.55, 82.91, 83.27, 83.64, 84.00, 84.36, 84.73, 85.09, 85.45, 85.81, 86.17, 86.54, 86.90, 87.26, 87.62, 87.98, 88.34, 88.70, 89.06, 89.42, 89.78, 90.14, 90.50, 90.86, 91.21, 91.57, 91.93, 92.29, 92.65, 93.00, 93.36, 93.72, 94.07, 94.43, 94.79, 95.14, 95.50, 95.85},
{44.36, 44.74, 45.13, 45.51, 45.90, 46.28, 46.67, 47.05, 47.44, 47.82, 48.21, 48.59, 48.97, 49.36, 49.74, 50.12, 50.50, 50.89, 51.27, 51.65, 52.03, 52.41, 52.79, 53.17, 53.55, 53.93, 54.31, 54.69, 55.07, 55.45, 55.83, 56.21, 56.59, 56.96, 57.34, 57.72, 58.10, 58.47, 58.85, 59.23, 59.60, 59.98, 60.35, 60.73, 61.11, 61.48, 61.85, 62.23, 62.60, 62.98, 63.35, 63.72, 64.10, 64.47, 64.84, 65.22, 65.59, 65.96, 66.33, 66.70, 67.07, 67.44, 67.82, 68.19, 68.56, 68.93, 69.30, 69.66, 70.03, 70.40, 70.77, 71.14, 71.51, 71.88, 72.24, 72.61, 72.98, 73.34, 73.71, 74.08, 74.44, 74.81, 75.18, 75.54, 75.91, 76.27, 76.64, 77.00, 77.36, 77.73, 78.09, 78.46, 78.82, 79.18, 79.55, 79.91, 80.27, 80.63, 80.99, 81.36, 81.72, 82.08, 82.44, 82.80, 83.16, 83.52, 83.88, 84.24, 84.60, 84.96, 85.32, 85.68, 86.03, 86.39, 86.75, 87.11, 87.47, 87.82, 88.18, 88.54, 88.89, 89.25, 89.61, 89.96, 90.32, 90.67, 91.03, 91.38, 91.74, 92.09, 92.45, 92.80, 93.16, 93.51, 93.86, 94.22, 94.57, 94.92, 95.27, 95.63}
};

View File

@@ -1,14 +0,0 @@
#ifndef TRANSFORM_TABLE_H_
#define TRANSFORM_TABLE_H_
#include "zf_common_headfile.h"
extern const float InverseMapH[80][140] ;
extern const float InverseMapW[80][140] ;
void transform(float X, float Y, int* x, int* y);
#endif /* TRANSFORM_TABLE_H_ */

View File

@@ -42,7 +42,6 @@
#include "jj_motion.h"
#include "jj_blueteeth.h"
#include "jj_blueteeth.h"
void NMI_Handler(void) __attribute__((interrupt()));
void HardFault_Handler(void) __attribute__((interrupt()));
@@ -280,7 +279,7 @@ void TIM1_UP_IRQHandler(void)
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
sport_motion2(bt_fly);
sport_motion();
}
}
@@ -315,7 +314,8 @@ void TIM5_IRQHandler(void)
void TIM6_IRQHandler(void)
{
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
ICM_getEulerianAngles();
//ICM_getEulerianAngles();
imu660ra_get_gyro();
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
}
}

View File

@@ -3,21 +3,17 @@
#include "by_fan_control.h"
bool bt_rx_flag = false;
uint8 bt_buffer; // 接收字符存入
float bt_angle = 0.0f;
uint32_t bt_run_flag = 0;
uint8_t bt_flow_flag = 0;
uint8_t bt_fly_flag = 0;
uint32_t bt_run = 0;
uint32_t bt_fly = 0;
uint32_t bt_flow = 0;
enum bt_order {
Start_work = 0x01,
Turn_Left = 0x02,
Turn_Right = 0x03,
Speed_up = 0x04,
Speed_down = 0x05,
Stop_fly = 0x06,
Flow_on = 0x08,
Flow_up = 0x09,
Flow_down = 0x10,
Fly_ctrl = 0x01, // 起飞转换
Fly_up = 0x02, // 起飞程度增加
Fly_dowm = 0x03, // 起飞程度减小
Speed_up = 0x04, // 加速
Speed_down = 0x05, // 减速
Speed_ctrl = 0x06, // 速度开关
};
/**
* @brief 蓝牙初始化
@@ -36,41 +32,27 @@ void jj_bt_run()
{
if (bt_rx_flag) {
switch (bt_buffer) {
case Start_work:
bt_angle = 0.0f;
case Fly_ctrl:
bt_fly_flag = !bt_fly_flag;
break;
case Turn_Left:
bt_angle = 10.0f;
case Speed_ctrl:
bt_run_flag = !bt_run_flag;
break;
case Turn_Right:
bt_angle = -10.0f;
case Fly_up:
bt_fly += 10;
break;
case Speed_down:
case Fly_dowm:
bt_fly -= 10;
break;
case Speed_up:
bt_fly += 10;
bt_run += 10;
break;
case Stop_fly:
bt_run_flag = !bt_run_flag;
break;
case Flow_on:
bt_flow_flag = !bt_flow_flag;
break;
case Flow_up:
bt_flow += 20;
break;
case Flow_down:
bt_flow -= 20;
case Speed_down:
bt_run -= 10;
break;
default:
break;
}
if (bt_flow_flag == 0) {
bt_flow = 0;
}
by_pwm_update_duty(bt_flow + 500, bt_flow + 500);
bt_rx_flag = false;
}
}
@@ -88,5 +70,4 @@ void bt_printf(const char *format, ...)
;
USART_SendData((USART_TypeDef *)uart_index[UART_2], sbuf[i]);
}
}

View File

@@ -2,12 +2,12 @@
#define _JJ_BLUETEETH_H_
#include "stdio.h"
#include "zf_driver_uart.h"
extern bool bt_rx_flag;
extern uint8_t bt_buffer;
extern uint32_t bt_fly;
extern uint8 bt_buffer; // 接收字符存入
extern uint32_t bt_run_flag;
extern float bt_angle;
extern uint8_t bt_fly_flag;
extern uint32_t bt_run;
extern uint32_t bt_fly;
void jj_bt_init();
void jj_bt_run();
void bt_printf(const char *format, ...);

View File

@@ -1,44 +1,80 @@
#include "jj_motion.h"
#include "by_fan_control.h"
#include "by_imu.h"
#include "../3rd-lib/PID-Library/pid.h"
#include "jj_blueteeth.h"
#include "gl_common.h"
PID_TypeDef angle_pid;
PID_TypeDef gyro_z_pid;
PID_TypeDef img_x_pid;
#include "../3rd-lib/PID-Library/pid.h"
#include "zf_driver_encoder.h"
PID_TypeDef far_angle_pid;
PID_TypeDef far_gyro_pid;
PID_TypeDef near_pos_pid;
PID_TypeDef speed_pid;
float an_Kp = 8.0f;
float an_Ki = 0.0f;
float an_Ki = 1.0f;
float an_Kd = 2.0f;
float im_Kp = 1.0f;
float im_Ki = 0.0f;
float im_Kd = 0.0f;
float set_x = 0.0f;
float img_x = 40.0f;
float yaw0 = 0;
float out_M = 0;
float out_yaw;
uint32_t cnt1 = 0;
float in_angle;
float set_angle = 0.0f;
float out_angle;
float gy_Kp = 1.0f;
float gy_Ki = 0.0f;
float gy_Kd = 0.0f;
float in_gyro;
float out_gyro;
//float set_gyro = 0.0f;
float po_Kp = 1.0f;
float po_Ki = 0.0f;
float po_Kd = 0.0f;
float in_pos;
float out_pos;
float set_pos = 0.0f;
float sp_Kp = 1.0f;
float sp_Ki = 0.0f;
float sp_Kd = 0.0f;
float in_speed;
float out_speed;
float set_speed = 0.0f;
/**
* @brief
*
* @param fy y轴的加速度
*/
void sport_motion2(uint32_t fy)
int cnt1 = 0;
void sport_motion(void)
{
cnt1++;
yaw0 = imu660ra_gyro_z;
if (cnt1 >= 50) {
PID_Compute(&angle_pid);
in_gyro = imu660ra_gyro_z; // 陀螺仪输入
in_angle = 0; // 图像远端输入
in_pos = 0; // 图像近端输入
in_speed = encoder_get_count(TIM5_ENCOEDER) / 1024 / 0.01 * 0.25; // 速度输入,m/s
encoder_clear_count(TIM5_ENCOEDER); // 清除计数
PID_Compute(&far_gyro_pid);
if (cnt1 >= 10) {
PID_Compute(&far_angle_pid);
PID_Compute(&speed_pid);
cnt1 = 0;
}
PID_Compute(&gyro_z_pid);
PID_Compute(&near_pos_pid);
if (bt_run_flag == 1) {
by_pwm_power_duty((int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M),
(int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M));
by_pwm_power_duty((int32_t)(500 + out_pos + out_gyro),
(int32_t)(500 - out_pos - out_gyro),
(int32_t)(500 + out_speed + out_gyro),
(int32_t)(500 + out_speed - out_gyro));
} else {
by_pwm_power_duty(500, 500, 500, 500);
}
if (bt_fly_flag == 0) {
bt_fly = 0;
}
by_pwm_update_duty(bt_fly + 500, bt_fly + 500);
}
/**
* @brief 结构体初始化
@@ -47,14 +83,25 @@ void sport_motion2(uint32_t fy)
void sport_pid_init()
{
PID(&angle_pid, &bt_angle, &out_yaw, &set_x, im_Kp, im_Ki, im_Kd, 0, 0);
PID(&gyro_z_pid, &yaw0, &out_M, &out_yaw, an_Kp, an_Ki, an_Kd, 1, 1);
PID_Init(&angle_pid);
PID_Init(&gyro_z_pid);
PID(&far_angle_pid, &in_angle, &out_angle, &set_angle, an_Kp, an_Ki, an_Kd, 0, 0);
PID(&far_gyro_pid, &in_gyro, &out_gyro, &out_angle, gy_Kp, gy_Ki, gy_Kd, 1, 1);
PID_Init(&far_angle_pid);
PID_Init(&far_gyro_pid);
PID_SetOutputLimits(&angle_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&gyro_z_pid, -400.0f, 400.0f);
PID_SetOutputLimits(&far_angle_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&far_gyro_pid, -500.0f, 500.0f);
PID_SetMode(&gyro_z_pid, 1);
PID_SetMode(&angle_pid, 1);
PID_SetMode(&far_gyro_pid, 1);
PID_SetMode(&far_angle_pid, 1);
PID(&near_pos_pid, &in_pos, &out_pos, &set_pos, po_Kp, po_Ki, po_Kd, 0, 0);
PID(&speed_pid, &in_speed, &out_speed, &out_speed, sp_Kp, sp_Ki, sp_Kd, 1, 1);
PID_Init(&near_pos_pid);
PID_Init(&speed_pid);
PID_SetOutputLimits(&near_pos_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&speed_pid, -400.0f, 400.0f);
PID_SetMode(&near_pos_pid, 1);
PID_SetMode(&speed_pid, 1);
}

View File

@@ -2,17 +2,35 @@
#define _JJ_MOTION_H_
#include "ch32v30x.h"
#include "../3rd-lib/PID-Library/pid.h"
extern PID_TypeDef angle_pid;
extern PID_TypeDef gyro_z_pid;
extern float an_Kp;
extern float an_Ki;
extern float an_Kd;
extern float im_Kp;
extern float im_Ki;
extern float im_Kd;
extern float out_M;
extern float out_yaw;
extern float yaw0;
extern float in_angle;
extern float set_angle;
extern float out_angle;
extern float gy_Kp;
extern float gy_Ki;
extern float gy_Kd;
extern float in_gyro;
extern float out_gyro;
extern float set_gyro;
extern float po_Kp;
extern float po_Ki;
extern float po_Kd;
extern float in_pos;
extern float out_pos;
extern float set_pos;
extern float sp_Kp;
extern float sp_Ki;
extern float sp_Kd;
extern float in_speed;
extern float out_speed;
extern float set_speed;
void sport_pid_init();
void sport_motion2(uint32_t fy);
void sport_motion(void);
#endif

View File

@@ -3,23 +3,71 @@
#include "./page/page.h"
#include "zf_common_headfile.h"
#include "jj_motion.h"
PARAM_INFO Param_Data[DATA_NUM];
soft_iic_info_struct eeprom_param;
TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM];
void jj_param_eeprom_init()
/**
* @brief 参数初始化注册
*
*/
void jj_param_eeprom_init(void)
{
soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom初始化
PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P"); // 注冊
PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I"); // 注冊
PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D"); // 注冊
PARAM_REG(imgax_Kp, &im_Kp, EFLOAT, 1, "im_P"); // 注冊
PARAM_REG(imgax_Ki, &im_Ki, EFLOAT, 1, "im_I"); // 注冊
PARAM_REG(imgax_Kd, &im_Kd, EFLOAT, 1, "im_D"); // 注冊
for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) {
PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P:"); // 注冊
PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I:"); // 注冊
PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D:");
soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4);
PARAM_REG(gyro_Kp, &gy_Kp, EFLOAT, 1, "im_P:"); // 注冊
PARAM_REG(gyro_Ki, &gy_Ki, EFLOAT, 1, "im_I:"); // 注冊
PARAM_REG(gyro_Kd, &gy_Kd, EFLOAT, 1, "im_D:");
PARAM_REG(speed_Kp, &sp_Kp, EFLOAT, 1, "sp_P:"); // 注冊
PARAM_REG(speed_Ki, &sp_Ki, EFLOAT, 1, "sp_I:"); // 注冊
PARAM_REG(speed_Kd, &sp_Kd, EFLOAT, 1, "sp_D:");
PARAM_REG(pos_Kp, &po_Kp, EFLOAT, 1, "po_P:"); // 注冊
PARAM_REG(pos_Ki, &po_Ki, EFLOAT, 1, "po_I:"); // 注冊
PARAM_REG(pos_Kd, &po_Kd, EFLOAT, 1, "po_D:");
PARAM_REG(param_set_speed, &set_speed, EFLOAT, 1, "rate:");
jj_param_read(); // 注冊
}
/**
* @brief 参数写入
*
*/
void jj_param_write(void)
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) {
switch (Param_Data[i].type) {
case EFLOAT:
iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data));
break;
case EUINT32:
iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data));
break;
case EINT32:
iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data));
break;
default:
break;
}
eep_soft_iic_write_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4);
system_delay_ms(10);
}
}
/**
* @brief 参数读出
*
*/
void jj_param_read(void)
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) {
eep_soft_iic_read_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4);
switch (Param_Data[i].type) {
case EFLOAT:
*((float *)(Param_Data[i].p_data)) =
@@ -39,27 +87,3 @@ void jj_param_eeprom_init()
system_delay_ms(10);
}
}
/**
* @brief 参数更新
*
*/
void jj_param_update()
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) {
switch (Param_Data[i].type) {
case EFLOAT:
iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data));
break;
case EUINT32:
iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data));
break;
case EINT32:
iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data));
break;
default:
break;
}
soft_iic_write_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4);
system_delay_ms(10);
}
}

View File

@@ -8,21 +8,35 @@
* @brief 注册需调参数
*
*/
#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_,_text_) \
#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_, _text_) \
Param_Data[_data_tag_].p_data = (void *)_p_data_; \
Param_Data[_data_tag_].type = _type_; \
Param_Data[_data_tag_].cmd = _cmd_; \
Param_Data[_data_tag_].text = _text_;
typedef enum {
DATA_HEAD = -1,
angle_Kp,
Page1_head = 0,
angle_Kp = Page1_head,
angle_Ki,
angle_Kd,
imgax_Kp,
imgax_Ki,
imgax_Kd,
gyro_Kp,
gyro_Ki,
gyro_Kd,
speed_Kp,
speed_Ki,
speed_Kd,
pos_Kp,
pos_Ki,
pos_Kd,
param_set_speed,
Page2_head,
DATA_IN_FLASH_NUM,
delta_x,
delta_y,
DATA_NUM,
} data_tag_t;
@@ -30,26 +44,27 @@ typedef enum {
EUINT32,
EINT32,
EFLOAT,
}ENUM_TYPE;
} ENUM_TYPE;
typedef union{
typedef union {
uint32_t u32;
int32_t s32;
float f32;
uint8_t u8;
}TYPE_UNION;
} TYPE_UNION;
typedef struct {
void *p_data;
ENUM_TYPE type;
uint8_t cmd;
uint8_t cmd; // 01:仅存储 00仅显示 02传输并显示
char *text;
}PARAM_INFO;
} PARAM_INFO;
extern soft_iic_info_struct eeprom_param;
extern PARAM_INFO Param_Data[DATA_NUM];
extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM];
void jj_param_eeprom_init();
void jj_param_update();
void jj_param_show();
void jj_param_eeprom_init(void);
void jj_param_write(void);
void jj_param_read(void);
extern float data7;
#endif

View File

@@ -25,8 +25,6 @@
#include "page.h"
#include "page_ui_widget.h"
#include "gl_headfile.h"
#include "jj_param.h"
#include "jj_motion.h"
#include "jj_blueteeth.h"
@@ -43,20 +41,29 @@ int main(void)
system_delay_init();
debug_init();
encoder_dir_init(TIM5_ENCOEDER, TIM5_ENCOEDER_MAP0_CH1_A0, TIM5_ENCOEDER_MAP0_CH2_A1);
ips200_init(IPS200_TYPE_SPI);
while (imu660ra_init())
;
jj_param_eeprom_init();
jj_bt_init();
by_rb_init();
by_pwm_init();
by_buzzer_init();
by_tiny_frame_init();
// by_buzzer_init();
by_tiny_frame_init();
Page_Init();
sport_pid_init();
pit_ms_init(TIM6_PIT, 10); // 陀螺仪
pit_ms_init(TIM1_PIT, 1); // 运动解算bianmaqi
printf("ok\r\n");
while (1) {
by_buzzer_run();
Page_Run();
//by_buzzer_run();
jj_bt_run();
by_tiny_frame_run();
}
}

View File

@@ -124,7 +124,7 @@ void Page_Run(void)
void Page_Init(void)
{
PAGE_REG(page_menu);
PAGE_REG(page_rtcam);
// PAGE_REG(page_rtcam);
PAGE_REG(page_param);
// PAGE_REG(page_argv);
// PAGE_REG(page_sys);

View File

@@ -19,7 +19,7 @@ enum PageID {
PAGE_NULL = -1,
//......
page_menu,
page_rtcam,
//page_rtcam,
page_param,
// page_argv,
// page_sys,

View File

@@ -2,6 +2,7 @@
#include "page_ui_widget.h"
#include "jj_motion.h"
#include "page.h"
#include <math.h>
#define LINE_HEAD 0
#define LINE_END DATA_NUM - 2
@@ -25,14 +26,14 @@ static void Setup()
{
ips200_clear();
Print_Curser(Curser, Curser_Last, RGB565_PURPLE);
for (int16 i = 0; i < DATA_NUM - 1; i++) {
ips200_show_string(10, i * 18 + 2, Param_Data[i].text);
for (int16 i = 0; i < DATA_IN_FLASH_NUM - 1; i++) {
ips200_show_string(0, i * 18 + 2, Param_Data[i].text);
if (Param_Data[i].type == EINT32)
ips200_show_int(50, i * 18 + 2, *((int32 *)(Param_Data[i].p_data)), 5);
else if (Param_Data[i].type == EFLOAT)
ips200_show_float(50, i * 18 + 2, *((float *)(Param_Data[i].p_data)), 4, 5);
}
ips200_show_int(50, (DATA_NUM-1)* 18 + 2, index_power, 5);
ips200_show_int(50, (DATA_IN_FLASH_NUM-1)* 18 + 2, index_power, 5);
}
@@ -74,7 +75,7 @@ static void Event(page_event event)
Print_Curser(Curser, Curser_Last, RGB565_RED);
return;
} else if (page_event_press_long == event) {
jj_param_update();
jj_param_write();
sport_pid_init();
Page_Shift(page_menu);
return;

View File

@@ -1,91 +0,0 @@
#include "zf_common_headfile.h"
#include "page_ui_widget.h"
#include "page.h"
#define LINE_HEAD 11
#define LINE_END 16
static char Text[] = "RealTime Image";
static int8_t Curser = LINE_HEAD; // 定义光标位置
static int8_t Curser_Last = LINE_HEAD; // 定义光标位置
/***************************************************************************************
*
* 以下为页面模板函数
*
***************************************************************************************/
/**
* @brief 页面初始化事件
* @param 无
* @retval 无
*/
static void Setup()
{
ips200_clear();
Print_Curser(Curser, Curser_Last,RGB565_PURPLE);
}
/**
* @brief 页面退出事件
* @param 无
* @retval 无
*/
static void Exit()
{
}
/**
* @brief 页面循环执行的内容
* @param 无
* @retval 无
*/
static void Loop()
{
Show_Marked_Image();
}
/**
* @brief 页面事件
* @param btn:发出事件的按键
* @param event:事件编号
* @retval 无
*/
static void Event(page_event event)
{
Curser_Last = Curser;
if (page_event_forward == event) {
Curser--; // 光标上移
} else if (page_event_backward == event) {
Curser++; // 光标下移
} else if (page_event_press_short == event) {
} else if (page_event_press_long == event) {
Page_Shift(page_menu);
}
if (Curser < LINE_HEAD) {
Curser = LINE_END;
} else if (Curser > LINE_END) {
Curser = LINE_HEAD;
}
Print_Curser(Curser, Curser_Last,RGB565_PURPLE);
}
/**
* @brief 页面注册函数
*
* @param pageID
*/
void PageRegister_page_rtcam(unsigned char pageID)
{
Page_Register(pageID, Text, Setup, Loop, Exit, Event);
}
/***************************************************************************************
*
* 以下为页面自定义功能函数
*
***************************************************************************************/

View File

@@ -1,6 +1,6 @@
#include "page_ui_widget.h"
#include "zf_common_headfile.h"
#include "gl_data.h"
/**
* @brief 绘制光标
@@ -137,57 +137,57 @@ void Set_Vaule(ITEM *item, uint8_t item_num, float step)
// }
}
void Show_Marked_Image(void)
{
#define IMAGE_DISPLAY_WIDTH (230U)
#define IMAGE_DISPLAY_HEIGHT (146U)
#define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U)
#define START_Y (16U)
// void Show_Marked_Image(void)
// {
// #define IMAGE_DISPLAY_WIDTH (230U)
// #define IMAGE_DISPLAY_HEIGHT (146U)
// #define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U)
// #define START_Y (16U)
float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W));
float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H));
// float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W));
// float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H));
ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0);
ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE);
// 确认边线数组在显示前不会清空
for (uint i = 0; i < PT_MAXLEN; i++) {
//寻近线逆透视后边线数组
uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate);
uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate);
uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate);
uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate);
//寻远线逆透视后边线数组
uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate);
uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate);
uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate);
uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate);
//寻近线中线数组
uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate);
uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate);
uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate);
uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate);
// ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0);
// ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE);
// // 确认边线数组在显示前不会清空
// for (uint i = 0; i < PT_MAXLEN; i++) {
// //寻近线逆透视后边线数组
// uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate);
// uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate);
// uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate);
// uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate);
// //寻远线逆透视后边线数组
// uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate);
// uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate);
// uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate);
// uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate);
// //寻近线中线数组
// uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate);
// uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate);
// uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate);
// uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate);
//近线数组显示
ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED);
ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE);
// //近线数组显示
// ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED);
// ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE);
//远线数组显示
//ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED);
//ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE);
// //远线数组显示
// //ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED);
// //ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE);
//中线数组显示
ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK);
ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE);
// //中线数组显示
// ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK);
// ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
}
#undef IMAGE_DISPLAY_WIDTH
#undef START_X
#undef START_Y
}
// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// }
// #undef IMAGE_DISPLAY_WIDTH
// #undef START_X
// #undef START_Y
// }
uint16_t rgb_gradient(uint16_t i)
{

View File

@@ -6,6 +6,8 @@
#include "by_tiny_frame_parse.h"
#include "by_tiny_frame_pack.h"
#include "jj_motion.h"
void by_tiny_frame_read_write_run(void)
{
// empty
@@ -26,13 +28,22 @@ void by_tiny_frame_read_write_handle(by_tf_parse_frame_t frame_s, uint8_t status
switch (frame_s.cmd) {
case 0x03:
// 添加查询接口,操作完成后应答
frame_pack_s.data = 0XFFFFFFFF; // 示例
// 添加查询接口,操作完成后应答,主机读取,这个是从机
frame_pack_s.data = 0XFFFFFFFF; //it's useless just now
by_tiny_frame_pack_send(&frame_pack_s);
break;
case 0x06:
// 添加写入接口,操作完成后应答
frame_pack_s.data = frame_s.data;
switch (frame_pack_s.reg_addr) {
case 0x00:
in_angle = (float)frame_s.data;
break;
case 0x01:
in_pos = (float)frame_s.data;
break;
default:
break;
}
by_tiny_frame_pack_send(&frame_pack_s);
break;
default:

View File

@@ -228,7 +228,7 @@ uint8 imu660ra_init(void)
#if IMU660RA_USE_SOFT_IIC
soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口
#else
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, IMU660RA_CS_PIN); // 配置 IMU660RA 的 SPI 端口
gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的 CS 端口
imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备 ID 将设备设置为 SPI 模式
#endif

View File

@@ -62,21 +62,21 @@
#if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的
//====================================================软件 IIC 驱动====================================================
#define IMU660RA_SOFT_IIC_DELAY (10) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快
#define IMU660RA_SCL_PIN (E7) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (E8) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
#define IMU660RA_SCL_PIN (B3) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (B5) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
//====================================================软件 IIC 驱动====================================================
#else
//====================================================硬件 SPI 驱动====================================================
#define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 硬件 SPI 速率
#define IMU660RA_SPI SPI_3 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚
#define IMU660RA_SPI SPI_1 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI1_MAP1_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI1_MAP1_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI1_MAP1_MISO_B4 // 硬件 SPI MISO 引脚
//====================================================硬件 SPI 驱动====================================================
#endif
#define IMU660RA_CS_PIN (C10) // CS 片选引脚
#define IMU660RA_CS_PIN (B6) // CS 片选引脚
#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN)))
typedef enum {

View File

@@ -1,37 +1,37 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
#include "zf_common_debug.h"
@@ -46,12 +46,12 @@
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_delay(1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
//static void soft_iic_delay (vuint32 delay)
// static void soft_iic_delay (vuint32 delay)
//{
// volatile uint32 count = delay;
// while(count --);
//}
#define soft_iic_delay(x) for(uint32 i = x; i--; )
#define soft_iic_delay(x) for (uint32 i = x; i--;)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IIC START <20>ź<EFBFBD>
@@ -60,7 +60,7 @@
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_start(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_start(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
@@ -79,7 +79,7 @@ static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_stop(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_stop(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->sda_pin); // SDA <20>͵<EFBFBD>ƽ
@@ -100,17 +100,14 @@ static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_send_ack(soft_iic_obj, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static void soft_iic_send_ack(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
if(ack)
{
if (ack) {
gpio_high(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
}
else
{
} else {
gpio_low(soft_iic_obj->sda_pin); // SDA <20><><EFBFBD><EFBFBD>
}
@@ -128,7 +125,7 @@ static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_wait_ack(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
static uint8 soft_iic_wait_ack(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -142,8 +139,7 @@ static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
gpio_high(soft_iic_obj->scl_pin); // SCL <20>ߵ<EFBFBD>ƽ
soft_iic_delay(soft_iic_obj->delay);
if(gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin))
{
if (gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)) {
temp = 1;
}
gpio_low(soft_iic_obj->scl_pin); // SCL <20>͵<EFBFBD>ƽ
@@ -162,13 +158,12 @@ static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ACK ״̬
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 data)
static uint8 soft_iic_send_data(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0x80;
while(temp)
{
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
while (temp) {
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
((data & temp) ? (gpio_high(soft_iic_obj->sda_pin)) : (gpio_low(soft_iic_obj->sda_pin)));
temp >>= 1;
@@ -177,7 +172,7 @@ static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
}
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1 );
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -187,7 +182,7 @@ static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static uint8 soft_iic_read_data(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
uint8 data = 0x00;
@@ -199,8 +194,7 @@ static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN);
#endif
while(temp --)
{
while (temp--) {
gpio_low(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL <20><><EFBFBD><EFBFBD>
@@ -224,7 +218,7 @@ static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -242,15 +236,14 @@ void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_array(soft_iic_obj, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -263,7 +256,7 @@ void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit(soft_iic_obj, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data)
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -282,16 +275,15 @@ void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_array(soft_iic_obj, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -305,7 +297,7 @@ void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint1
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_register(soft_iic_obj, 0x01, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -325,16 +317,15 @@ void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_8bit_registers(soft_iic_obj, 0x01, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -348,7 +339,7 @@ void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_register(soft_iic_obj, 0x0101, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -370,7 +361,7 @@ void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const ui
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_write_16bit_registers(soft_iic_obj, 0x0101, data, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -378,10 +369,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, (uint8)((register_name & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
while(len--)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -393,7 +383,7 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -414,15 +404,14 @@ uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_array(soft_iic_obj, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -435,14 +424,14 @@ void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data,
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit(soft_iic_obj);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -456,17 +445,16 @@ uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_array(soft_iic_obj, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -479,7 +467,7 @@ void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -503,7 +491,7 @@ uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_8bit_registers(soft_iic_obj, 0x01, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -512,9 +500,8 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
soft_iic_send_data(soft_iic_obj, register_name);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -527,7 +514,7 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_register(soft_iic_obj, 0x0101);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
@@ -538,7 +525,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -553,7 +540,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_read_16bit_registers(soft_iic_obj, 0x0101, data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -563,11 +550,10 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -583,25 +569,22 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// ʹ<><CAB9>ʾ<EFBFBD><CABE> iic_transfer_8bit_array(IIC_1, addr, data, 64, data, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len --)
{
soft_iic_send_data(soft_iic_obj, *write_data ++);
while (write_len--) {
soft_iic_send_data(soft_iic_obj, *write_data++);
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
*read_data ++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
while (read_len--) {
*read_data++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
}
}
soft_iic_stop(soft_iic_obj);
@@ -618,27 +601,24 @@ void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> iic_transfer_16bit_array(IIC_1, addr, data, 64, data, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len--)
{
while (write_len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*write_data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data++ & 0x00FF));
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
while (read_len--) {
*read_data = soft_iic_read_data(soft_iic_obj, 0);
*read_data = ((*read_data << 8)| soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data ++;
*read_data = ((*read_data << 8) | soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data++;
}
}
soft_iic_stop(soft_iic_obj);
@@ -653,7 +633,7 @@ void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const ui
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_sccb_write_register(soft_iic_obj, 0x01, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -671,7 +651,7 @@ void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_sccb_read_register(soft_iic_obj, 0x01);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -698,7 +678,7 @@ uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uin
// ʹ<><CAB9>ʾ<EFBFBD><CABE> soft_iic_init(&soft_iic_obj, addr, 100, B6, B7);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(scl_pin != sda_pin); // <20><><EFBFBD>ѣ<EFBFBD> scl_pin <20><> sda_pin <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
@@ -709,3 +689,31 @@ void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay
gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // <20><>ȡ<EFBFBD><C8A1>ӦIO<49><4F><EFBFBD><EFBFBD> AF<41><46><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
}
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}

View File

@@ -1,42 +1,41 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_driver_soft_iic
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 <20><>W first version
********************************************************************************************************************/
#ifndef _zf_driver_soft_iic_h_
#define _zf_driver_soft_iic_h_
#include "zf_driver_gpio.h"
typedef struct
@@ -45,39 +44,41 @@ typedef struct
gpio_pin_enum sda_pin; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
uint8 addr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>λ<EFBFBD><CEBB>ַģʽ
uint32 delay; // ģ<><C4A3> IIC <20><><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
}soft_iic_info_struct;
} soft_iic_info_struct;
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len);
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len);
#endif