From 40f9e2fc0f2354e033553131fd63cfb9f755a2e2 Mon Sep 17 00:00:00 2001 From: Gwendal Grignou Date: Mon, 17 Dec 2018 15:14:00 -0800 Subject: motion_lid: Rewrite lid angle calculation based on chromium code Use code from ash/wm/tablet_mode/tablet_mode_controller.cc, in particular TabletModeController::HandleHingeRotation() to calculate lid angle. Add unit tests based on ash/wm/tablet_mode/tablet_mode_controller_unittest.cc and the data file accelerometer_test_data_literals.cc. BUG=b:120346412 BRANCH=none TEST=Check unit tests pass, check it compile on FPU based EC, EC without FPU and no 64 bit support (ampton). Check lid calculation is correct on eve: - with "while true ; do ectool motionsense lid_angle ; sleep 1 ; done" Check when hinge is almost vertical lid angle is close to constant or marked are unrieliable. Check when shaking device, lid angle is also unreliable Check with evtest SW_TABLET_MODE event is trigger when lid angle is available and cross 180 region. Change-Id: I545f7333ed9b53accedb75f238f747f66bae1f5d Signed-off-by: Gwendal Grignou Reviewed-on: https://chromium-review.googlesource.com/1388844 Commit-Ready: ChromeOS CL Exonerator Bot Reviewed-by: Jett Rink --- common/motion_lid.c | 357 +++++----- include/accelgyro.h | 8 + include/motion_lid.h | 28 +- test/build.mk | 4 + test/motion_angle.c | 103 +++ test/motion_angle.tasklist | 18 + test/motion_angle_data_literals.c | 1003 ++++++++++++++++++++++++++++ test/motion_angle_data_literals_tablet.c | 1040 ++++++++++++++++++++++++++++++ test/motion_angle_tablet.c | 111 ++++ test/motion_angle_tablet.tasklist | 18 + test/motion_common.c | 125 ++++ test/motion_common.h | 69 ++ test/motion_lid.c | 65 +- test/test_config.h | 16 +- 14 files changed, 2715 insertions(+), 250 deletions(-) create mode 100644 test/motion_angle.c create mode 100644 test/motion_angle.tasklist create mode 100644 test/motion_angle_data_literals.c create mode 100644 test/motion_angle_data_literals_tablet.c create mode 100644 test/motion_angle_tablet.c create mode 100644 test/motion_angle_tablet.tasklist create mode 100644 test/motion_common.c create mode 100644 test/motion_common.h diff --git a/common/motion_lid.c b/common/motion_lid.c index 4513df1e48..dd3506a3b8 100644 --- a/common/motion_lid.c +++ b/common/motion_lid.c @@ -38,7 +38,7 @@ static fp_t last_lid_angle_fp = FLOAT_TO_FP(-1); * measurements when the lid is physically closed. This will be used in * reliability calculations. */ -#define SMALL_LID_ANGLE_RANGE 15 +#define SMALL_LID_ANGLE_RANGE (FLOAT_TO_FP(15)) #endif /* Current acceleration vectors and current lid angle. */ @@ -46,15 +46,15 @@ static int lid_angle_deg; static int lid_angle_is_reliable; -/* - * Angle threshold for how close the hinge aligns with gravity before - * considering the lid angle calculation unreliable. For computational - * efficiency, value is given unit-less, so if you want the threshold to be - * at 15 degrees, the value would be cos(15 deg) = 0.96593. - * - * Here we're using cos(27.5 deg) = 0.88701. - */ -#define HINGE_ALIGNED_WITH_GRAVITY_THRESHOLD FLOAT_TO_FP(0.88701) +/* Smoothed vectors to increase accurency. */ +static intv3_t smoothed_base, smoothed_lid; + +/* 8.7 m/s^2 is the the maximum acceleration parallel to the hinge */ +#define SCALED_HINGE_VERTICAL_MAXIMUM \ + ((int)((8.7f * MOTION_SCALING_FACTOR) / MOTION_ONE_G)) + +#define SCALED_HINGE_VERTICAL_SMOOTHING_START \ + ((int)((7.0f * MOTION_SCALING_FACTOR) / MOTION_ONE_G)) /* * Constant to debounce lid angle changes around 360 - 0: @@ -67,9 +67,20 @@ static int lid_angle_is_reliable; * under the same acceleration. This constant, which mirrors * kNoisyMagnitudeDeviation used in Chromium, is an integer which defines the * maximum deviation in magnitude between the base and lid vectors. The units - * are in m/s^2. + * are in g. Currently set at 1m/s^2. */ -#define NOISY_MAGNITUDE_DEVIATION 1 +#define NOISY_MAGNITUDE_DEVIATION ((int)(MOTION_SCALING_FACTOR / MOTION_ONE_G)) + +/* + * Even with noise, any measurement greater than 1g on any axis is not suitable + * for lid calculation. It means the device is moving. + * To avoid using 64bits arithmetic, we need to be sure that square of magnitude + * is less than 1<<31, so magnitude is less sqrt(2)*(1<<15), less than ~40% over + * 1g. This is way above any usable noise. Assume noise is less than 10%. + */ +#define MOTION_SCALING_AXIS_MAX (MOTION_SCALING_FACTOR * 110) + +#define MOTION_SCALING_FACTOR2 (MOTION_SCALING_FACTOR * MOTION_SCALING_FACTOR) /* * Define the accelerometer orientation matrices based on the standard @@ -77,43 +88,16 @@ static int lid_angle_is_reliable; * frame before calculating lid angle). */ #ifdef CONFIG_ACCEL_STD_REF_FRAME_OLD -const struct accel_orientation acc_orient = { - /* Hinge aligns with y axis. */ - .rot_hinge_90 = { - { 0, 0, FLOAT_TO_FP(1)}, - { 0, FLOAT_TO_FP(1), 0}, - { FLOAT_TO_FP(-1), 0, 0} - }, - .rot_hinge_180 = { - { FLOAT_TO_FP(-1), 0, 0}, - { 0, FLOAT_TO_FP(1), 0}, - { 0, 0, FLOAT_TO_FP(-1)} - }, - .hinge_axis = {0, 1, 0}, -}; +static const intv3_t hinge_axis = { 0, 1, 0}; +#define HINGE_AXIS Y #else -const struct accel_orientation acc_orient = { - /* Hinge aligns with x axis. */ - .rot_hinge_90 = { - { FLOAT_TO_FP(1), 0, 0}, - { 0, 0, FLOAT_TO_FP(1)}, - { 0, FLOAT_TO_FP(-1), 0} - }, - .rot_hinge_180 = { - { FLOAT_TO_FP(1), 0, 0}, - { 0, FLOAT_TO_FP(-1), 0}, - { 0, 0, FLOAT_TO_FP(-1)} - }, - .hinge_axis = {1, 0, 0}, -}; +static const intv3_t hinge_axis = { 1, 0, 0}; +#define HINGE_AXIS X #endif -/* Pointer to constant acceleration orientation data. */ -const struct accel_orientation * const p_acc_orient = &acc_orient; - -const struct motion_sensor_t * const accel_base = +static const struct motion_sensor_t * const accel_base = &motion_sensors[CONFIG_LID_ANGLE_SENSOR_BASE]; -const struct motion_sensor_t * const accel_lid = +static const struct motion_sensor_t * const accel_lid = &motion_sensors[CONFIG_LID_ANGLE_SENSOR_LID]; #ifdef CONFIG_TABLET_MODE @@ -165,16 +149,6 @@ static fp_t laptop_zone_lid_angle = static int tablet_mode_lid_angle = DEFAULT_TABLET_MODE_ANGLE; static int tablet_mode_hys_degree = DEFAULT_TABLET_MODE_HYS; -/* - * We will change our tablet mode status when we are "convinced" that it has - * changed. This means we will have to consecutively calculate our new tablet - * mode while the angle is stable and come to the same conclusion. The number - * of consecutive calculations is the debounce count with an interval between - * readings set by the motion_sense task. This should avoid spurious forces - * that may trigger false transitions of the tablet mode switch. - */ -#define TABLET_MODE_DEBOUNCE_COUNT 3 - static void motion_lid_set_tablet_mode(int reliable) { static int tablet_mode_debounce_cnt = TABLET_MODE_DEBOUNCE_COUNT; @@ -305,109 +279,41 @@ static void motion_lid_set_dptf_profile(int reliable) static int calculate_lid_angle(const intv3_t base, const intv3_t lid, int *lid_angle) { - intv3_t v; - fp_t lid_to_base_fp, cos_lid_90, cos_lid_270; - fp_t lid_to_base, base_to_hinge; - fp_t denominator; - int reliable = 1; - int base_magnitude2, lid_magnitude2; - int base_range, lid_range, i; - intv3_t scaled_base, scaled_lid; - - /* - * The angle between lid and base is: - * acos((cad(base, lid) - cad(base, hinge)^2) /(1 - cad(base, hinge)^2)) - * where cad() is the cosine_of_angle_diff() function. - * - * Make sure to check for divide by 0. - */ - lid_to_base = cosine_of_angle_diff(base, lid); - base_to_hinge = cosine_of_angle_diff(base, p_acc_orient->hinge_axis); + intv3_t cross, proj_lid, proj_base, scaled_base, scaled_lid; + fp_t lid_to_base_fp, smoothed_ratio; + int base_magnitude2, lid_magnitude2, largest_hinge_accel; + int reliable = 1, i; /* - * If hinge aligns too closely with gravity, then result may be - * unreliable. + * Scale the vectors by their range, to be able to compare them. + * If a single measurement is greated than 1g, we may overflow fixed + * point calculation. However, we can exclude such a measurement, it + * means the device is in movement and lid angle calculation is not + * possible. */ - if (fp_abs(base_to_hinge) > HINGE_ALIGNED_WITH_GRAVITY_THRESHOLD) - reliable = 0; - - base_to_hinge = fp_sq(base_to_hinge); - - /* Check divide by 0. */ - denominator = FLOAT_TO_FP(1.0) - base_to_hinge; - if (fp_abs(denominator) < FLOAT_TO_FP(0.01)) { - *lid_angle = 0; - return 0; + for (i = X; i <= Z; i++) { + scaled_base[i] = base[i] * + accel_base->drv->get_range(accel_base); + scaled_lid[i] = lid[i] * + accel_lid->drv->get_range(accel_lid); + if (ABS(scaled_base[i]) > MOTION_SCALING_AXIS_MAX || + ABS(scaled_lid[i]) > MOTION_SCALING_AXIS_MAX) { + reliable = 0; + goto end_calculate_lid_angle; + } } - lid_to_base_fp = arc_cos(fp_div(lid_to_base - base_to_hinge, - denominator)); - - /* - * The previous calculation actually has two solutions, a positive and - * a negative solution. To figure out the sign of the answer, calculate - * the cosine of the angle between the actual lid angle and the - * estimated vector if the lid were open to 90 deg, cos_lid_90. Also - * calculate the cosine of the angle between the actual lid angle and - * the estimated vector if the lid were open to 270 deg, - * cos_lid_270. The smaller of the two angles represents which one is - * closer. If the lid is closer to the estimated 270 degree vector then - * the result is negative, otherwise it is positive. - */ - rotate(base, p_acc_orient->rot_hinge_90, v); - cos_lid_90 = cosine_of_angle_diff(v, lid); - rotate(v, p_acc_orient->rot_hinge_180, v); - cos_lid_270 = cosine_of_angle_diff(v, lid); - - /* - * Note that cos_lid_90 and cos_lid_270 are not in degrees, because - * the arc_cos() was never performed. But, since arc_cos() is - * monotonically decreasing, we can do this comparison without ever - * taking arc_cos(). But, since the function is monotonically - * decreasing, the logic of this comparison is reversed. - */ - if (cos_lid_270 > cos_lid_90) - lid_to_base_fp = -lid_to_base_fp; - - /* Place lid angle between 0 and 360 degrees. */ - if (lid_to_base_fp < 0) - lid_to_base_fp += FLOAT_TO_FP(360); - /* - * Perform some additional reliability checks. - * - * If the magnitude of the two vectors differ too greatly, then the - * readings are unreliable and we can't use them to calculate the lid - * angle. + * Calculate square of vector magnitude in g. + * Each entry is guaranteed to be up to +/- 1<<15, so the square will be + * less than 1<<30. */ - - /* Scale the vectors by their range. */ - base_range = accel_base->drv->get_range(accel_base); - lid_range = accel_lid->drv->get_range(accel_lid); - - for (i = X; i <= Z; i++) { - /* - * To increase precision, we'll use 8x the sensor data in the - * intermediate calculation. We would normally divide by 2^15. - * - * This is safe because even at a range of 8g, calculating the - * magnitude squared should still be less than the max of a - * 32-bit signed integer. - * - * The max that base[i] could be is 32768, resulting in a max - * value for scaled_base[i] of 640 @ 8g range and force. - * Typically our range is set to 2g. - */ - scaled_base[i] = base[i] * base_range * 10 >> 12; - scaled_lid[i] = lid[i] * lid_range * 10 >> 12; - } - - base_magnitude2 = (scaled_base[X] * scaled_base[X] + - scaled_base[Y] * scaled_base[Y] + - scaled_base[Z] * scaled_base[Z]) >> 6; - lid_magnitude2 = (scaled_lid[X] * scaled_lid[X] + - scaled_lid[Y] * scaled_lid[Y] + - scaled_lid[Z] * scaled_lid[Z]) >> 6; + base_magnitude2 = scaled_base[X] * scaled_base[X] + + scaled_base[Y] * scaled_base[Y] + + scaled_base[Z] * scaled_base[Z]; + lid_magnitude2 = scaled_lid[X] * scaled_lid[X] + + scaled_lid[Y] * scaled_lid[Y] + + scaled_lid[Z] * scaled_lid[Z]; /* * Check to see if they differ than more than NOISY_MAGNITUDE_DEVIATION. @@ -417,27 +323,93 @@ static int calculate_lid_angle(const intv3_t base, const intv3_t lid, * magnitude, but we can work with the magnitudes squared directly as * shown below: * - * If A and B are the base and lid magnitudes, and x is the noisy - * magnitude deviation: + * If A is a magnitudes, and x is the noisy magnitude deviation: * - * A - B < x - * A^2 - B^2 < x * (A + B) - * A^2 - B^2 < 2 * x * avg(A, B) + * 0 < 1g - A < x + * 0 < 1g^2 - A^2 < x * (A + B) + * 0 < 1g^2 - A^2 < 2 * x * avg(A, B) * * If we assume that the average acceleration should be about 1g, then * we have: * - * (A^2 - B^2) < 2 * 1g * NOISY_MAGNITUDE_DEVIATION + * 0 < 1g^2 - A^2 < 2 * 1g * NOISY_MAGNITUDE_DEVIATION */ - if (ABS(base_magnitude2 - lid_magnitude2) > - (2 * 10 * NOISY_MAGNITUDE_DEVIATION)) + if (MOTION_SCALING_FACTOR2 - base_magnitude2 > + 2 * MOTION_SCALING_FACTOR * NOISY_MAGNITUDE_DEVIATION) { + reliable = 0; + goto end_calculate_lid_angle; + } + if (MOTION_SCALING_FACTOR2 - lid_magnitude2 > + 2 * MOTION_SCALING_FACTOR * NOISY_MAGNITUDE_DEVIATION) { + reliable = 0; + goto end_calculate_lid_angle; + } + + largest_hinge_accel = MAX(ABS(scaled_base[HINGE_AXIS]), + ABS(scaled_lid[HINGE_AXIS])); + + smoothed_ratio = MAX(INT_TO_FP(0), MIN(INT_TO_FP(1), + fp_div(INT_TO_FP(largest_hinge_accel - + SCALED_HINGE_VERTICAL_SMOOTHING_START), + INT_TO_FP(SCALED_HINGE_VERTICAL_MAXIMUM - + SCALED_HINGE_VERTICAL_SMOOTHING_START)))); + + /* Check hinge is not too vertical */ + if (largest_hinge_accel > SCALED_HINGE_VERTICAL_MAXIMUM) { reliable = 0; + goto end_calculate_lid_angle; + } + + /* Smooth input to reduce calculation error due to noise. */ + vector_scale(smoothed_base, smoothed_ratio); + vector_scale(smoothed_lid, smoothed_ratio); + vector_scale(scaled_base, INT_TO_FP(1) - smoothed_ratio); + vector_scale(scaled_lid, INT_TO_FP(1) - smoothed_ratio); + for (i = X; i <= Z; i++) { + smoothed_base[i] += scaled_base[i]; + smoothed_lid[i] += scaled_lid[i]; + } + + /* Project vectors on the hinge hyperplan, putting smooth ones aside. */ + memcpy(proj_base, smoothed_base, sizeof(intv3_t)); + memcpy(proj_lid, smoothed_lid, sizeof(intv3_t)); + proj_base[HINGE_AXIS] = 0; + proj_lid[HINGE_AXIS] = 0; + + /* Calculate the clockwise angle */ + lid_to_base_fp = arc_cos(cosine_of_angle_diff(proj_base, proj_lid)); + cross_product(proj_base, proj_lid, cross); + + /* + * If the dot product of this cross product is normal, it means that + * the shortest angle between |base| and |lid| was counterclockwise + * with respect to the surface represented by |hinge_axis| and this + * angle must be reversed. + */ + if (dot_product(cross, hinge_axis) > 0) + lid_to_base_fp = FLOAT_TO_FP(360) - lid_to_base_fp; + +#ifndef CONFIG_ACCEL_STD_REF_FRAME_OLD + /* + * Angle is between the keyboard and the front of screen: we need to + * anlge between keyboard and back of screen: + * 180 instead of 0 when lid and base are flat on surface. + * 0 instead of 180 when lid is closed on keyboard. + */ + lid_to_base_fp = FLOAT_TO_FP(180) - lid_to_base_fp; +#endif + + /* Place lid angle between 0 and 360 degrees. */ + if (lid_to_base_fp < 0) + lid_to_base_fp += FLOAT_TO_FP(360); #ifdef CONFIG_TABLET_MODE /* Ignore large angles when the lid is closed. */ if (!lid_is_open() && - (lid_to_base_fp > FLOAT_TO_FP(SMALL_LID_ANGLE_RANGE))) + (lid_to_base_fp > SMALL_LID_ANGLE_RANGE)) { reliable = 0; + goto end_calculate_lid_angle; + } /* * Ignore small angles when the lid is open. @@ -451,33 +423,31 @@ static int calculate_lid_angle(const intv3_t base, const intv3_t lid, * reliable readings over a threshold to disable key scanning. */ if (lid_is_open() && - (lid_to_base_fp <= FLOAT_TO_FP(SMALL_LID_ANGLE_RANGE))) + (lid_to_base_fp <= SMALL_LID_ANGLE_RANGE)) { reliable = 0; - - if (reliable) { - /* - * Seed the lid angle now that we have a reliable - * measurement. - */ - if (last_lid_angle_fp == FLOAT_TO_FP(-1)) - last_lid_angle_fp = lid_to_base_fp; - - /* - * If the angle was last seen as really large and now it's quite - * small, we may be rotating around from 360->0 so correct it to - * be large. But in case that the lid switch is closed, we can - * prove the small angle we see is correct so we take the angle - * as is. - */ - if ((last_lid_angle_fp >= - FLOAT_TO_FP(360) - DEBOUNCE_ANGLE_DELTA) && - (lid_to_base_fp <= DEBOUNCE_ANGLE_DELTA) && - (lid_is_open())) - last_lid_angle_fp = FLOAT_TO_FP(360) - lid_to_base_fp; - else - last_lid_angle_fp = lid_to_base_fp; + goto end_calculate_lid_angle; } + /* Seed the lid angle now that we have a reliable measurement. */ + if (last_lid_angle_fp == FLOAT_TO_FP(-1)) + last_lid_angle_fp = lid_to_base_fp; + + /* + * If the angle was last seen as really large and now it's quite + * small, we may be rotating around from 360->0 so correct it to + * be large. But in case that the lid switch is closed, we can + * prove the small angle we see is correct so we take the angle + * as is. + */ + if ((last_lid_angle_fp >= + FLOAT_TO_FP(360) - DEBOUNCE_ANGLE_DELTA) && + (lid_to_base_fp <= DEBOUNCE_ANGLE_DELTA) && + (lid_is_open())) + last_lid_angle_fp = FLOAT_TO_FP(360) - lid_to_base_fp; + else + last_lid_angle_fp = lid_to_base_fp; + +end_calculate_lid_angle: /* * Round to nearest int by adding 0.5. Note, only works because lid * angle is known to be positive. @@ -493,7 +463,9 @@ static int calculate_lid_angle(const intv3_t base, const intv3_t lid, #endif /* CONFIG_DPTF_MULTI_PROFILE && CONFIG_DPTF_MOTION_LID_NO_HALL_SENSOR */ #else /* CONFIG_TABLET_MODE */ - *lid_angle = FP_TO_INT(lid_to_base_fp + FLOAT_TO_FP(0.5)); +end_calculate_lid_angle: + if (reliable) + *lid_angle = FP_TO_INT(lid_to_base_fp + FLOAT_TO_FP(0.5)); #endif return reliable; } @@ -511,25 +483,10 @@ int motion_lid_get_angle(void) */ void motion_lid_calc(void) { -#ifndef CONFIG_ACCEL_STD_REF_FRAME_OLD - /* - * rotate lid vector by 180 deg to be in the right coordinate frame - * because calculate_lid_angle assumes when the lid is closed, that - * the lid and base accelerometer data matches - */ - intv3_t lid = { accel_lid->xyz[X], - accel_lid->xyz[Y] * -1, - accel_lid->xyz[Z] * -1}; - /* Calculate angle of lid accel. */ - lid_angle_is_reliable = calculate_lid_angle( - accel_base->xyz, lid, - &lid_angle_deg); -#else /* Calculate angle of lid accel. */ lid_angle_is_reliable = calculate_lid_angle( accel_base->xyz, accel_lid->xyz, &lid_angle_deg); -#endif #ifdef CONFIG_LID_ANGLE_UPDATE lid_angle_update(motion_lid_get_angle()); diff --git a/include/accelgyro.h b/include/accelgyro.h index cc731cf794..2d415621d1 100644 --- a/include/accelgyro.h +++ b/include/accelgyro.h @@ -10,6 +10,14 @@ /* Header file for accelerometer / gyro drivers. */ +/* + * EC reports sensor data on 16 bits. For accel/gyro/mag.. the MSB is the sign. + * For instance, for gravity, + * real_value[in g] = measured_value * range >> 15 + */ +#define MOTION_SCALING_FACTOR (1 << 15) +#define MOTION_ONE_G (9.80665f) + struct accelgyro_drv { /** * Initialize accelerometers. diff --git a/include/motion_lid.h b/include/motion_lid.h index 110d614811..2816a70bdb 100644 --- a/include/motion_lid.h +++ b/include/motion_lid.h @@ -11,27 +11,15 @@ #include "host_command.h" #include "math_util.h" -/** - * This structure defines all of the data needed to specify the orientation - * of the base and lid accelerometers in order to calculate the lid angle. +/* + * We will change our tablet mode status when we are "convinced" that it has + * changed. This means we will have to consecutively calculate our new tablet + * mode while the angle is stable and come to the same conclusion. The number + * of consecutive calculations is the debounce count with an interval between + * readings set by the motion_sense task. This should avoid spurious forces + * that may trigger false transitions of the tablet mode switch. */ -struct accel_orientation { - /* Rotation matrix to rotate positive 90 degrees around the hinge. */ - mat33_fp_t rot_hinge_90; - - /* - * Rotation matrix to rotate 180 degrees around the hinge. The value - * here should be rot_hinge_90 ^ 2. - */ - mat33_fp_t rot_hinge_180; - - /* Vector pointing along hinge axis. */ - intv3_t hinge_axis; -}; - -/* Link global structure for orientation. This must be defined in board.c. */ -extern const struct accel_orientation acc_orient; - +#define TABLET_MODE_DEBOUNCE_COUNT 3 /** * Get last calculated lid angle. Note, the lid angle calculated by the EC diff --git a/test/build.mk b/test/build.mk index 31cec03c9a..362667a17e 100644 --- a/test/build.mk +++ b/test/build.mk @@ -41,6 +41,8 @@ test-list-host += kb_scan test-list-host += lid_sw test-list-host += lightbar test-list-host += math_util +test-list-host += motion_angle +test-list-host += motion_angle_tablet test-list-host += motion_lid test-list-host += mutex test-list-host += nvmem @@ -97,6 +99,8 @@ kb_scan-y=kb_scan.o lid_sw-y=lid_sw.o lightbar-y=lightbar.o math_util-y=math_util.o +motion_angle-y=motion_angle.o motion_angle_data_literals.o motion_common.o +motion_angle_tablet-y=motion_angle_tablet.o motion_angle_data_literals_tablet.o motion_common.o motion_lid-y=motion_lid.o mutex-y=mutex.o nvmem-y=nvmem.o diff --git a/test/motion_angle.c b/test/motion_angle.c new file mode 100644 index 0000000000..c69f1dccc2 --- /dev/null +++ b/test/motion_angle.c @@ -0,0 +1,103 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test motion sense code: Check lid angle calculation and tablet mode + * transition. + */ + +#include +#include + +#include "accelgyro.h" +#include "common.h" +#include "gpio.h" +#include "hooks.h" +#include "motion_common.h" +#include "motion_lid.h" +#include "motion_sense.h" +#include "tablet_mode.h" +#include "test_util.h" +#include "util.h" + +/*****************************************************************************/ +/* Test utilities */ + +/* Array units is in m/s^2 - old matrix format. */ +int filler(const struct motion_sensor_t *s, const float v) +{ + return (v * MOTION_SCALING_FACTOR) / s->drv->get_range(s); +} + +static int test_lid_angle_less180(void) +{ + int index = 0, lid_angle; + struct motion_sensor_t *lid = &motion_sensors[ + CONFIG_LID_ANGLE_SENSOR_LID]; + struct motion_sensor_t *base = &motion_sensors[ + CONFIG_LID_ANGLE_SENSOR_BASE]; + + /* We don't have TASK_CHIP so simulate init ourselves */ + hook_notify(HOOK_CHIPSET_SHUTDOWN); + TEST_ASSERT(sensor_active == SENSOR_ACTIVE_S5); + TEST_ASSERT(lid->drv->get_data_rate(lid) == 0); + TEST_ASSERT(motion_interval == 0); + + /* Go to S0 state */ + hook_notify(HOOK_CHIPSET_SUSPEND); + hook_notify(HOOK_CHIPSET_RESUME); + msleep(1000); + TEST_ASSERT(sensor_active == SENSOR_ACTIVE_S0); + TEST_ASSERT(lid->drv->get_data_rate(lid) == TEST_LID_FREQUENCY); + TEST_ASSERT(motion_interval == TEST_LID_EC_RATE); + + /* Open lid, testing close to 180 degree. */ + gpio_set_level(GPIO_LID_OPEN, 1); + msleep(1000); + + cprints(CC_ACCEL, "start loop"); + /* Check we will never enter tablet mode. */ + while (index < kAccelerometerLaptopModeTestDataLength) { + feed_accel_data(kAccelerometerLaptopModeTestData, + &index, filler); + wait_for_valid_sample(); + lid_angle = motion_lid_get_angle(); + cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", + index / TEST_LID_SAMPLE_SIZE, + lid->xyz[X], lid->xyz[Y], lid->xyz[Z], + base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); + /* We need few sample to debounce and enter laptop mode. */ + TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * + (TABLET_MODE_DEBOUNCE_COUNT + 2) || + !tablet_get_mode()); + } + + /* Check we will never exit tablet mode. */ + index = 0; + while (index < kAccelerometerFullyOpenTestDataLength) { + feed_accel_data(kAccelerometerFullyOpenTestData, + &index, filler); + wait_for_valid_sample(); + lid_angle = motion_lid_get_angle(); + cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", + index / TEST_LID_SAMPLE_SIZE, + lid->xyz[X], lid->xyz[Y], lid->xyz[Z], + base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); + TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * + (TABLET_MODE_DEBOUNCE_COUNT + 2) || + tablet_get_mode()); + } + return EC_SUCCESS; +} + + +void run_test(void) +{ + test_reset(); + + RUN_TEST(test_lid_angle_less180); + + test_print_result(); +} diff --git a/test/motion_angle.tasklist b/test/motion_angle.tasklist new file mode 100644 index 0000000000..60688f9c34 --- /dev/null +++ b/test/motion_angle.tasklist @@ -0,0 +1,18 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * List of enabled tasks in the priority order + * + * The first one has the lowest priority. + * + * For each task, use the macro TASK_TEST(n, r, d, s) where : + * 'n' in the name of the task + * 'r' in the main routine of the task + * 'd' in an opaque parameter passed to the routine at startup + * 's' is the stack size in bytes; must be a multiple of 8 + */ +#define CONFIG_TEST_TASK_LIST \ + TASK_TEST(MOTIONSENSE, motion_sense_task, NULL, TASK_STACK_SIZE) diff --git a/test/motion_angle_data_literals.c b/test/motion_angle_data_literals.c new file mode 100644 index 0000000000..6c0fcb35c2 --- /dev/null +++ b/test/motion_angle_data_literals.c @@ -0,0 +1,1003 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "util.h" + +/* + * Recopied from + * chromium/src/ash/wm/tablet_mode/accelerometer_test_data_literals.cc + * + * The arrays contain actual accelerator readings. + * [ CONFIG_ACCEL_STD_REF_FRAME_OLD must be defined to used this array. ] + */ +const float kAccelerometerLaptopModeTestData[] = { + -0.166016f, -0.00488281f, 0.924805f, -0.770508f, -0.0488281f, + -0.510742f, -0.199219f, -0.0078125f, 0.953125f, -0.782227f, + -0.0244141f, -0.652344f, -0.177734f, -0.0136719f, 0.936523f, + -0.772461f, -0.0527344f, -0.59375f, -0.176758f, -0.00878906f, + 0.9375f, -0.777344f, -0.0419922f, -0.637695f, -0.165039f, + -0.00878906f, 0.942383f, -0.782227f, -0.046875f, -0.613281f, + -0.180664f, -0.00976562f, 0.943359f, -0.777344f, -0.0419922f, + -0.601562f, -0.189453f, -0.00488281f, 0.943359f, -0.776367f, + -0.0263672f, -0.613281f, -0.166992f, -0.00488281f, 0.935547f, + -0.78125f, -0.0380859f, -0.609375f, -0.176758f, -0.00878906f, + 0.947266f, -0.790039f, -0.0576172f, -0.585938f, -0.173828f, + -0.0126953f, 0.93457f, -0.780273f, -0.0654297f, -0.666016f, + -0.169922f, -0.00195312f, 0.928711f, -0.775391f, -0.0351562f, + -0.561523f, -0.193359f, 0.0f, 0.941406f, -0.795898f, + -0.0478516f, -0.640625f, -0.162109f, -0.00585938f, 0.917969f, + -0.768555f, -0.0146484f, -0.685547f, -0.166992f, -0.0136719f, + 0.921875f, -0.755859f, -0.0166016f, -0.425781f, -0.175781f, + -0.0810547f, 1.00098f, -0.802734f, -0.117188f, -0.585938f, + -0.210938f, 0.0214844f, 0.881836f, -0.750977f, -0.0302734f, + -0.677734f, -0.285156f, 0.00976562f, 0.967773f, -0.763672f, + -0.0283203f, -0.850586f, -0.222656f, -0.0136719f, 0.943359f, + -0.763672f, -0.0507812f, -0.640625f, -0.236328f, 0.0859375f, + 0.892578f, -0.742188f, 0.0302734f, -0.484375f, -0.269531f, + 0.0263672f, 0.913086f, -0.714844f, -0.00585938f, -0.745117f, + -0.275391f, 0.0927734f, 0.977539f, -0.776367f, -0.078125f, + -0.750977f, -0.155273f, -0.0341797f, 1.2334f, -1.06445f, + -0.0478516f, -0.823242f, -0.196289f, 0.046875f, 1.19141f, + -1.00391f, -0.140625f, -0.541016f, 0.0917969f, 0.21582f, + 0.717773f, -0.764648f, -0.0341797f, -0.607422f, -0.0351562f, + 0.0888672f, 0.207031f, -0.214844f, -0.18457f, -0.0664062f, + -0.0898438f, 0.0556641f, 0.418945f, -0.232422f, 0.43457f, + 0.0361328f, 0.143555f, 0.376953f, 1.23633f, -1.09082f, + 0.529297f, 0.0507812f, 0.205078f, 0.438477f, 1.66602f, + -1.59668f, 0.325195f, -1.20996f, -0.0791016f, 0.404297f, + 1.50977f, -1.40918f, 0.31543f, -1.30273f, -0.0654297f, + 0.141602f, 0.699219f, -0.589844f, 0.0732422f, -0.27832f, + 0.00488281f, 0.00683594f, 0.0566406f, -0.0410156f, -0.0292969f, + -0.0234375f, -0.0488281f, -0.00195312f, -0.0292969f, 0.0849609f, + -0.139648f, 0.0585938f, 0.677734f, 0.667969f, 1.36523f, + -1.11816f, 0.412109f, 0.844727f, 0.142578f, 0.790039f, + 1.73145f, -1.68066f, 0.464844f, -1.29492f, -0.0800781f, + 0.803711f, 0.879883f, -0.765625f, -0.0400391f, -0.616211f, + -0.170898f, 0.879883f, 0.510742f, 0.158203f, 0.381836f, + -0.270508f, -0.0693359f, 0.651367f, 0.431641f, 0.104492f, + 0.991211f, -0.0634766f, -0.0478516f, 0.750977f, 0.283203f, + -0.0332031f, 1.52051f, -0.00195312f, -0.201172f, 1.08984f, + 0.173828f, 0.0849609f, 1.44141f, -0.214844f, -0.0107422f, + 1.29785f, 0.520508f, 0.00488281f, 1.73047f, -0.523438f, + 0.136719f, 1.42188f, 0.987305f, 0.0527344f, 1.74707f, + -0.525391f, 0.34668f, 0.469727f, 0.428711f, 0.114258f, + -0.788086f, 0.177734f, 0.400391f, -0.106445f, 0.328125f, + -0.566406f, -0.948242f, 0.670898f, 0.467773f, -0.21875f, + 0.55957f, -0.767578f, -0.232422f, 0.195312f, 0.625f, + -0.271484f, 0.865234f, -0.765625f, 0.299805f, 0.0703125f, + 0.378906f, -0.526367f, 0.548828f, -0.231445f, -0.569336f, + 0.455078f, 0.303711f, -0.866211f, -0.485352f, 0.566406f, + -1.60547f, 0.481445f, 0.183594f, -0.782227f, -0.260742f, + 0.243164f, -1.41504f, 0.373047f, 0.172852f, -0.935547f, + -0.412109f, 0.133789f, -1.69727f, 0.178711f, 0.407227f, + -0.952148f, -0.227539f, 0.0751953f, -1.67188f, 0.339844f, + 0.498047f, -0.795898f, 0.209961f, 0.177734f, -1.3916f, + 0.458984f, 0.295898f, 0.0390625f, 0.697266f, 0.258789f, + -0.0703125f, -0.131836f, 0.56543f, 0.250977f, 0.913086f, + -0.353516f, 0.90332f, 0.191406f, 0.708008f, 0.352539f, + 0.853516f, -0.839844f, 0.955078f, 0.636719f, 0.657227f, + 0.389648f, 0.620117f, -0.725586f, 0.43457f, 0.485352f, + 0.424805f, 0.479492f, 0.287109f, -0.505859f, -0.209961f, + 0.0927734f, 0.21582f, 0.709961f, 0.492188f, -0.413086f, + -0.0869141f, 0.0673828f, -0.119141f, 1.20508f, 0.392578f, + 0.229492f, 0.927734f, -0.297852f, 0.142578f, 1.0293f, + 0.430664f, 0.0449219f, 1.71875f, -0.0283203f, 0.0107422f, + 1.18164f, 0.0517578f, 0.0751953f, 1.80273f, -0.0693359f, + -0.19043f, 1.1748f, 0.236328f, 0.0839844f, 1.78711f, + -0.472656f, -0.270508f, 1.10254f, 0.964844f, 0.118164f, + 1.75684f, -0.901367f, -0.211914f, 1.11133f, 0.65625f, + 0.308594f, 0.142578f, 0.396484f, 0.239258f, 0.0800781f, + 0.973633f, -0.824219f, -0.25293f, 0.485352f, 0.351562f, + -0.0771484f, 1.08984f, -0.632812f, 0.240234f, -0.258789f, + 0.436523f, -0.514648f, 0.491211f, 0.0664062f, -0.244141f, + -0.148438f, -0.171875f, -0.477539f, -0.459961f, 1.1084f, + -0.822266f, -0.114258f, -0.192383f, -0.608398f, -0.771484f, + 1.11133f, -1.25488f, 1.01953f, -0.0839844f, -0.620117f, + -0.794922f, 0.660156f, -0.876953f, 0.0957031f, -0.242188f, + -0.711914f, -0.55957f, 0.736328f, -0.649414f, -0.0263672f, + -0.258789f, -0.498047f, -0.973633f, 0.957031f, -0.660156f, + 0.186523f, -0.262695f, -0.595703f, -0.787109f, 0.893555f, + -0.429688f, -0.0234375f, -0.254883f, -0.449219f, -0.783203f, + 0.90918f, 0.106445f, -0.161133f, -0.287109f, -0.0800781f, + -0.729492f, 0.933594f, -0.126953f, -0.0742188f, -0.550781f, + -0.271484f, -0.989258f, 1.00098f, -0.879883f, 0.0234375f, + -0.543945f, -0.50293f, -1.18945f, 1.24023f, -1.33398f, + 0.325195f, -0.262695f, -0.307617f, -0.912109f, 1.39062f, + -1.06055f, 0.0107422f, -0.00292969f, -0.573242f, -0.4375f, + 1.15625f, -0.651367f, -0.310547f, 0.188477f, -0.730469f, + -0.121094f, 0.611328f, -0.779297f, 0.335938f, 0.731445f, + -0.475586f, -0.00390625f, 0.100586f, -0.693359f, 0.254883f, + 0.813477f, -0.345703f, 0.420898f, -0.400391f, -0.539062f, + 0.365234f, 0.720703f, 0.0214844f, 0.673828f, -0.370117f, + 0.0585938f, 0.499023f, 0.523438f, 0.198242f, 0.759766f, + -0.544922f, 0.543945f, 0.226562f, 0.473633f, 0.34082f, + 0.595703f, -0.682617f, 0.292969f, -0.217773f, 0.0742188f, + 0.553711f, 0.762695f, -0.504883f, 0.292969f, 0.0751953f, + 0.0126953f, 0.427734f, 0.769531f, -0.265625f, 0.552734f, + -0.0175781f, -0.30957f, 0.253906f, 0.322266f, 0.117188f, + 0.263672f, -0.706055f, -0.991211f, 0.266602f, 0.501953f, + 0.00585938f, 0.0341797f, -1.24805f, -1.21777f, 0.488281f, + 0.461914f, 0.0986328f, 0.362305f, -1.1709f, -1.17188f, + 0.50293f, 0.458984f, 0.108398f, 0.460938f, -1.52148f, + -1.27051f, 0.379883f, 0.90625f, 0.0400391f, 0.524414f, + -1.77832f, -0.951172f, 0.397461f, 0.589844f, 0.520508f, + 0.439453f, -1.99902f, -0.643555f, 0.313477f, 0.766602f, + 0.450195f, 0.286133f, -1.29883f, -0.375f, 0.225586f, + 0.697266f, 0.299805f, 0.108398f, -0.976562f, 0.09375f, + 0.0361328f, 0.851562f, -0.210938f, 0.0615234f, -0.0898438f, + 0.59082f, 0.313477f, 0.756836f, -0.731445f, 0.296875f, + -0.0927734f, 0.552734f, 0.223633f, 0.558594f, -0.806641f, + 0.00195312f, 0.03125f, 0.728516f, 0.276367f, 0.744141f, + -0.994141f, 0.197266f, -0.425781f, 0.316406f, 0.046875f, + 0.601562f, -0.633789f, -0.0576172f, -0.320312f, 0.786133f, + 0.0986328f, 1.0f, -1.19922f, 0.34668f, -0.546875f, + 0.481445f, 0.00390625f, 0.876953f, -1.04297f, -0.0507812f, + -0.775391f, 0.333984f, -0.0175781f, 1.02539f, -1.07129f, + -0.12207f, -0.212891f, 0.28125f, 0.00488281f, 0.998047f, + -0.97168f, 0.178711f, -0.444336f, 0.178711f, 0.0136719f, + 0.896484f, -0.9375f, 0.0117188f, -0.291992f, 0.132812f, + 0.0234375f, 0.975586f, -0.943359f, -0.0078125f, 0.0546875f, + 0.244141f, -0.0771484f, 1.05469f, -1.02148f, 0.313477f, + -0.349609f, 0.148438f, 0.0839844f, 0.619141f, -0.75f, + -0.589844f, -0.0488281f, 0.0263672f, -0.176758f, 0.697266f, + -0.691406f, -0.625977f, -0.417969f, 0.408203f, 0.265625f, + 1.01953f, -1.09863f, 0.106445f, 0.0117188f, 0.157227f, + 0.424805f, 1.07422f, -0.816406f, 0.498047f, 0.0996094f, + 0.00585938f, 0.53418f, 0.771484f, -0.610352f, 0.744141f, + 0.0195312f, 0.0478516f, 0.552734f, 0.734375f, -0.72168f, + 0.518555f, -0.144531f, -0.0361328f, 0.513672f, 0.822266f, + -0.736328f, 0.65918f, -0.179688f, -0.104492f, 0.425781f, + 1.00098f, -0.885742f, 0.739258f, -0.681641f, -0.443359f, + 0.375977f, 0.884766f, -0.724609f, 0.110352f, -0.289062f, + -0.414062f, 0.494141f, 0.53125f, -0.422852f, 0.216797f, + -0.786133f, -0.569336f, 0.749023f, 0.75293f, -0.529297f, + 0.730469f, -0.911133f, -0.68457f, 0.611328f, 0.959961f, + -0.623047f, 1.06543f, -0.499023f, -0.392578f, 0.761719f, + 0.43457f, -0.357422f, 0.631836f, -0.746094f, -0.370117f, + 0.777344f, 0.379883f, -0.225586f, 0.677734f, -0.478516f, + -0.358398f, 0.788086f, 0.569336f, -0.34082f, 0.939453f, + -0.238281f, -0.230469f, 0.861328f, 0.448242f, -0.219727f, + 0.966797f, -0.310547f, -0.242188f, 0.863281f, 0.369141f, + -0.0859375f, 0.87207f, -0.400391f, -0.385742f, 0.841797f, + 0.401367f, -0.0634766f, 0.912109f, -0.458008f, 0.0107422f, + 0.753906f, 0.758789f, -0.675781f, 0.765625f, -0.342773f, + -0.123047f, 0.855469f, 0.599609f, -0.490234f, 0.963867f, + -0.118164f, -0.0117188f, 0.889648f, 0.637695f, -0.607422f, + 0.803711f, -0.597656f, -0.242188f, 0.855469f, 0.550781f, + -0.607422f, 0.576172f, -0.759766f, -0.220703f, 0.832031f, + 0.477539f, -0.491211f, 0.470703f, -0.575195f, -0.0869141f, + 1.01074f, 0.371094f, -0.25293f, 0.678711f, -0.316406f, + -0.197266f, 1.04785f, 0.386719f, -0.046875f, 0.967773f, + -0.761719f, -0.282227f, 0.956055f, 0.270508f, 0.230469f, + 1.39746f, -0.864258f, -0.417969f, 0.761719f, 0.457031f, + 0.0263672f, 1.38379f, -0.714844f, -0.288086f, 0.535156f, + 0.689453f, -0.507812f, 0.68457f, -0.433594f, -0.0908203f, + 0.210938f, 0.825195f, -0.649414f, 0.326172f, -0.793945f, + 0.0527344f, 0.0546875f, 0.911133f, -0.616211f, -0.0214844f, + -0.00195312f, -0.229492f, -0.0253906f, 0.775391f, -0.611328f, + -0.360352f, 0.0371094f, 0.161133f, 0.0253906f, 0.625f, + -0.624023f, -0.344727f, -0.146484f, 0.371094f, 0.255859f, + 1.41797f, -1.27832f, 0.614258f, 0.764648f, 0.869141f, + 0.426758f, 0.758789f, -1.04395f, 0.401367f, 0.263672f, + 0.563477f, 0.450195f, 0.774414f, -0.908203f, 0.384766f, + -0.262695f, 0.664062f, 0.509766f, 0.798828f, -0.757812f, + 0.770508f, 0.491211f, 0.62207f, 0.487305f, 0.496094f, + -0.530273f, 0.375977f, 1.18652f, 0.736328f, 0.386719f, + 0.470703f, -0.647461f, 0.379883f, 0.47168f, 0.834961f, + 0.289062f, 0.475586f, -0.654297f, 0.448242f, 0.395508f, + 0.930664f, 0.0830078f, 0.157227f, -0.304688f, 0.0634766f, + 1.30078f, 0.905273f, -0.102539f, 0.0576172f, -0.303711f, + -0.334961f, 0.885742f, 0.709961f, -0.143555f, 0.0390625f, + -0.18457f, -0.498047f, 1.1084f, 0.744141f, 0.0283203f, + 0.383789f, -0.371094f, -0.126953f, 1.17285f, 0.506836f, + 0.109375f, 0.680664f, -0.244141f, -0.0830078f, 0.577148f, + 0.12793f, 0.25f, 0.972656f, -0.328125f, 0.34082f, + -0.234375f, -0.327148f, 0.470703f, 0.987305f, -0.535156f, + 0.730469f, -0.957031f, -0.509766f, 0.602539f, 0.938477f, + -0.640625f, 0.836914f, -1.13672f, -0.56543f, 0.450195f, + 0.737305f, -0.449219f, 0.649414f, -1.08105f, -0.364258f, + 0.338867f, 0.667969f, -0.533203f, 0.654297f, -1.0918f, + -0.505859f, 0.422852f, 0.745117f, -0.443359f, 0.319336f, + -0.753906f, -0.563477f, 0.374023f, 0.640625f, -0.435547f, + 0.220703f, -0.868164f, -0.701172f, 0.317383f, 0.702148f, + -0.527344f, 0.138672f, -0.848633f, -0.431641f, 0.220703f, + 0.329102f, -0.25293f, -0.232422f, -0.875977f, -0.442383f, + 0.550781f, 0.783203f, -0.441406f, 0.160156f, -0.107422f, + 0.0683594f, 0.317383f, 1.12012f, -1.02344f, 0.322266f, + -0.469727f, -0.151367f, 0.43457f, 0.65625f, -0.745117f, + 0.216797f, -1.03223f, -0.200195f, 0.240234f, 1.11035f, + -0.90332f, 0.239258f, 0.0429688f, -0.228516f, 0.00390625f, + 0.836914f, -0.770508f, -0.280273f, -0.18457f, 0.0117188f, + 0.214844f, 0.767578f, -0.774414f, -0.0703125f, -0.954102f, + -0.508789f, -0.046875f, 1.00391f, -0.930664f, 0.0292969f, + 0.407227f, -0.519531f, 0.0361328f, 0.753906f, -0.777344f, + -0.0214844f, 0.741211f, -0.27832f, -0.0332031f, 1.15625f, + -0.862305f, -0.115234f, 0.821289f, -0.598633f, 0.00488281f, + 0.929688f, -1.01172f, -0.0996094f, 0.351562f, -0.524414f, + 0.118164f, 1.1709f, -0.938477f, 0.00878906f, 0.948242f, + -0.475586f, 0.443359f, 0.893555f, -0.597656f, 0.0107422f, + 0.558594f, -0.87207f, 0.0810547f, 0.487305f, -0.808594f, + 0.212891f, 0.0878906f, -0.612305f, 0.263672f, 0.400391f, + -0.709961f, 0.380859f, -0.0839844f, -0.566406f, 0.466797f, + 0.445312f, -0.769531f, 0.636719f, -0.273438f, -0.648438f, + 0.34375f, 0.56543f, -0.829102f, 0.417969f, -0.272461f, + -0.746094f, 0.202148f, 0.421875f, -0.445312f, 0.229492f, + 0.178711f, -0.408203f, 0.477539f, 0.693359f, -0.675781f, + 0.145508f, 0.37207f, -0.576172f, 0.0449219f, 0.845703f, + -0.920898f, -0.0185547f, 0.487305f, -0.460938f, 0.0253906f, + 1.04785f, -0.87207f, 0.176758f, 0.356445f, -0.217773f, + 0.0332031f, 0.945312f, -0.556641f, -0.110352f, 0.725586f, + 0.0810547f, -0.0361328f, 1.11426f, -0.396484f, 0.00488281f, + 0.743164f, 0.27832f, 0.0175781f, 0.839844f, -0.0371094f, + -0.00878906f, 0.964844f, 0.547852f, 0.0224609f, 0.518555f, + 0.386719f, -0.0585938f, 1.11816f, 0.712891f, 0.19043f, + 0.523438f, 0.429688f, -0.179688f, 1.18164f, 0.40332f, + 0.241211f, 1.19043f, -0.0234375f, 0.119141f, 0.90918f, + -0.078125f, 0.250977f, 0.973633f, -0.277344f, 0.227539f, + 0.908203f, -0.232422f, 0.269531f, 0.807617f, -0.59668f, + 0.253906f, 0.398438f, -0.506836f, 0.255859f, 0.694336f, + -0.742188f, 0.345703f, 0.412109f, -0.576172f, 0.189453f, + 0.708984f, -0.808594f, 0.230469f, 0.242188f, -0.550781f, + 0.0693359f, 0.695312f, -0.856445f, -0.0253906f, 0.177734f, + -0.6875f, -0.00976562f, 0.731445f, -0.991211f, -0.03125f, + 0.0175781f, -0.805664f, -0.192383f, 0.827148f, -0.947266f, + 0.0820312f, 0.254883f, -0.504883f, -0.259766f, 0.87207f, + -0.693359f, -0.345703f, 0.639648f, -0.162109f, -0.443359f, + 1.05176f, -0.595703f, -0.496094f, 0.485352f, -0.0380859f, + -0.490234f, 0.763672f, -0.382812f, -0.634766f, 0.369141f, + 0.136719f, -0.650391f, 0.536133f, -0.126953f, -0.901367f, + 0.275391f, 0.155273f, -0.75293f, 0.476562f, -0.183594f, + -1.00488f, 0.206055f, -0.0908203f, -1.06836f, 0.3125f, + -0.183594f, -1.30762f, 0.37793f, -0.185547f, -0.885742f, + 0.496094f, -0.250977f, -1.14941f, 0.0517578f, -0.242188f, + -0.753906f, 0.395508f, -0.133789f, -1.10156f, 0.183594f, + -0.398438f, -0.767578f, 0.951172f, -0.359375f, -0.866211f, + 0.373047f, -0.0224609f, -0.0537109f, 0.921875f, -0.263672f, + -0.251953f, 0.455078f, 0.230469f, 0.485352f, 0.84082f, + 0.0351562f, 0.0810547f, 0.554688f, 0.186523f, 0.774414f, + 0.720703f, 0.381836f, 0.71875f, 0.495117f, 0.530273f, + 0.771484f, 0.90332f, 0.34668f, 0.897461f, 0.456055f, + 0.575195f, 0.560547f, 0.133789f, 0.62793f, 0.795898f, + 0.400391f, 0.594727f, 0.577148f, -0.142578f, 0.691406f, + 0.770508f, 0.12793f, 0.679688f, 0.751953f, -0.201172f, + 0.728516f, 0.805664f, -0.0175781f, 0.46875f, 0.655273f, + -0.608398f, 0.750977f, 0.540039f, -0.0166016f, 0.30957f, + 0.755859f, -0.563477f, 0.609375f, 0.763672f, -0.310547f, + 0.0791016f, 0.668945f, -0.575195f, 0.398438f, 0.767578f, + -0.47168f, -0.12793f, 0.631836f, -0.768555f, 0.293945f, + 0.760742f, -0.743164f, -0.311523f, 0.509766f, -0.755859f, + 0.15918f, 0.614258f, -0.832031f, -0.575195f, 0.448242f, + -0.771484f, -0.0605469f, 0.341797f, -0.652344f, -0.8125f, + 0.262695f, -0.205078f, -0.541992f, 0.337891f, -0.8125f, + -1.20996f, 0.179688f, -0.311523f, -0.682617f, 0.0556641f, + -0.944336f, -1.29102f, 0.09375f, 0.503906f, -0.87793f, + -0.0742188f, -0.805664f, -1.53613f, -0.107422f, 0.50293f, + -0.807617f, -0.423828f, 0.0888672f, -0.847656f, -0.342773f, + 0.719727f, -0.87793f, -0.336914f, 0.115234f, -0.500977f, + -0.487305f, 0.395508f, -0.398438f, -0.624023f, 0.3125f, + -0.0693359f, -0.605469f, 0.429688f, -0.283203f, -0.813477f, + 0.246094f, 0.0898438f, -0.764648f, 0.356445f, -0.106445f, + -1.05371f, 0.595703f, 0.251953f, -0.729492f, 0.336914f, + -0.0595703f, -1.06445f, 0.824219f, 0.320312f, -0.50293f, + 0.459961f, -0.161133f, -0.820312f, 0.516602f, 0.410156f, + -0.401367f, 0.407227f, -0.106445f, -0.740234f, 0.546875f, + 0.663086f, -0.170898f, 0.574219f, -0.419922f, -0.271484f, + -0.0273438f, 0.239258f, -0.0361328f, 0.80957f, -0.576172f, + 0.0664062f, 0.0332031f, 0.181641f, 0.245117f, 1.06641f, + -0.826172f, 0.30957f, -0.241211f, 0.03125f, 0.422852f, + 1.14648f, -0.916992f, 0.672852f, -0.242188f, 0.0234375f, + 0.425781f, 1.16895f, -1.08887f, 0.748047f, -0.384766f, + 0.102539f, 0.457031f, 0.992188f, -0.896484f, 0.65625f, + -0.144531f, 0.0332031f, 0.295898f, 0.8125f, -0.706055f, + 0.166016f, -0.237305f, 0.0996094f, 0.130859f, 0.723633f, + -0.769531f, -0.125f, -0.339844f, -0.277344f, -0.00390625f, + 1.2959f, -0.999023f, 0.0185547f, 0.0527344f, 0.270508f, + 0.104492f, 1.05469f, -1.0918f, 0.205078f, 0.00390625f, + 0.141602f, 0.000976562f, 1.15039f, -1.14844f, 0.0664062f, + -0.0566406f, 0.0732422f, 0.0302734f, 1.08398f, -1.04004f, + 0.124023f, -0.114258f, 0.19043f, 0.0263672f, 0.985352f, + -1.00293f, 0.0634766f, -0.0585938f, 0.257812f, -0.0527344f, + 0.96875f, -0.990234f, -0.0361328f, -0.179688f, 0.266602f, + -0.219727f, 0.882812f, -0.879883f, -0.289062f, -0.00292969f, + 0.351562f, -0.313477f, 0.826172f, -0.84668f, -0.322266f, + 0.337891f, 0.478516f, -0.426758f, 0.594727f, -0.621094f, + -0.435547f, 0.676758f, 0.47168f, -0.432617f, 0.333008f, + -0.338867f, -0.767578f, 0.419922f, 0.576172f, -0.673828f, + 0.321289f, -0.53125f, -0.96582f, 0.290039f, 0.426758f, + -0.526367f, 0.230469f, -0.508789f, -1.05859f, 0.195312f, + 0.493164f, -0.479492f, 0.78418f, -0.992188f, -0.453125f, + -0.185547f, 0.375977f, -0.291992f, 0.77832f, -0.884766f, + -0.361328f, 0.438477f, -0.118164f, -0.222656f, 0.923828f, + -0.796875f, 0.0234375f, -0.375f, 0.0332031f, -0.216797f, + 0.908203f, -0.984375f, -0.295898f, -0.384766f, 0.0234375f, + -0.305664f, 1.12695f, -1.04004f, -0.344727f, -0.136719f, + 0.119141f, -0.385742f, 1.06738f, -1.01855f, -0.245117f, + -0.106445f, -0.114258f, -0.365234f, 0.962891f, -0.923828f, + -0.430664f, -0.637695f, -0.347656f, -0.436523f, 0.702148f, + -0.547852f, -0.618164f, -0.447266f, -0.241211f, -0.462891f, + 0.729492f, -0.609375f, -0.578125f, -0.486328f, -0.0556641f, + -0.536133f, 0.50293f, -0.480469f, -0.526367f, -0.210938f, + -0.0585938f, -0.637695f, 0.723633f, -0.319336f, -0.348633f, + -0.00292969f, -0.305664f, -0.629883f, 0.431641f, 0.266602f, + -0.612305f, -0.260742f, 0.0166016f, -0.65332f, -0.272461f, + 0.800781f, -1.09863f, -0.166992f, -0.0859375f, -0.520508f, + -0.473633f, 0.586914f, -0.696289f, -0.682617f, -0.149414f, + 0.198242f, -0.805664f, 1.1377f, 0.444336f, -0.458984f, + -0.577148f, 0.522461f, -0.683594f, 1.25586f, 0.827148f, + -0.249023f, -0.851562f, 0.84668f, -0.448242f, 1.26953f, + 0.855469f, -0.155273f, -0.765625f, 1.0f, -0.337891f, + 0.973633f, 0.660156f, -0.0859375f, -0.476562f, 1.11035f, + -0.00976562f, 0.547852f, 0.958984f, -0.34082f, -0.504883f, + 0.853516f, 0.0664062f, 0.378906f, 0.758789f, -0.749023f, + -0.509766f, 0.739258f, 0.499023f, -0.144531f, 0.84668f, + -0.931641f, -0.329102f, 0.740234f, 0.791992f, -0.168945f, + 0.594727f, -0.435547f, -0.268555f, 0.336914f, 0.817383f, + -0.430664f, -0.0253906f, -0.735352f, -0.0683594f, 0.152344f, + 0.725586f, -0.68457f, -0.294922f, -1.25391f, -0.125f, + 0.0917969f, 0.907227f, -0.633789f, -0.28125f, -0.222656f, + 0.0f, 0.188477f, 1.06445f, -0.929688f, 0.144531f, + -0.139648f, -0.00390625f, -0.21582f, 1.21387f, -0.952148f, + -0.0253906f, -0.389648f, 0.148438f, -0.283203f, 1.14844f, + -0.890625f, -0.204102f, -0.222656f, -0.0332031f, -0.451172f, + 0.625f, -0.486328f, -0.716797f, -0.103516f, 0.265625f, + -0.667969f, 0.231445f, -0.385742f, -0.977539f, 0.111328f, + 0.222656f, -0.766602f, 0.300781f, -0.390625f, -1.07129f, + 0.230469f, 0.318359f, -0.787109f, 0.427734f, -0.512695f, + -0.886719f, 0.240234f, 0.260742f, -0.647461f, 0.566406f, + -0.686523f, -0.723633f, -0.198242f, 0.0722656f, -0.3125f, + 0.771484f, -0.725586f, -0.478516f, -0.176758f, -0.113281f, + -0.262695f, 0.78125f, -0.644531f, -0.210938f, -0.0126953f, + -0.317383f, 0.0673828f, 0.944336f, -0.764648f, 0.1875f, + -0.636719f, -0.401367f, 0.118164f, 0.982422f, -0.826172f, + 0.105469f, -1.0625f, -0.298828f, 0.0537109f, 0.949219f, + -0.788086f, 0.176758f, -0.611328f, -0.0322266f, 0.0439453f, + 0.885742f, -0.730469f, 0.301758f, -0.463867f, -0.144531f, + -0.180664f, 1.08398f, -0.97168f, -0.470703f, 0.128906f, + 0.0146484f, -0.112305f, 0.889648f, -0.946289f, -0.165039f, + -1.34277f, -0.258789f, -0.211914f, 0.962891f, -0.844727f, + -0.588867f, 0.144531f, -0.228516f, -0.207031f, 0.974609f, + -0.848633f, -0.0273438f, -0.570312f, -0.228516f, 0.00195312f, + 1.03125f, -0.977539f, -0.0605469f, -0.733398f, -0.0908203f, + 0.0996094f, 0.856445f, -0.854492f, -0.000976562f, -0.458008f, + -0.135742f, 0.222656f, 1.34082f, -1.13574f, 0.639648f, + 0.015625f, -0.234375f, 0.136719f, 0.835938f, -0.822266f, + -0.114258f, -0.673828f, -0.186523f, 0.169922f, 0.925781f, + -0.839844f, 0.175781f, -0.394531f, 0.224609f, -0.0458984f, + 0.94043f, -0.964844f, -0.0556641f, -0.15332f, 0.163086f, + -0.0175781f, 0.944336f, -0.951172f, -0.0478516f, -0.302734f, + 0.117188f, -0.00683594f, 0.973633f, -0.970703f, -0.0810547f, + -0.301758f, 0.09375f, -0.000976562f, 1.01953f, -0.978516f, + 0.0292969f, -0.293945f, 0.0683594f, -0.00683594f, 1.0127f, + -0.966797f, -0.0175781f, -0.314453f, 0.181641f, 0.0126953f, + 0.982422f, -0.990234f, 0.03125f, -0.194336f, 0.155273f, + -0.00292969f, 0.962891f, -0.932617f, -0.00390625f, -0.0976562f, + 0.144531f, -0.0205078f, 0.913086f, -0.914062f, -0.0908203f, + -0.296875f, 0.166992f, -0.015625f, 0.930664f, -0.950195f, + -0.0888672f, -0.28418f, 0.196289f, -0.0107422f, 0.953125f, + -0.960938f, -0.0273438f, -0.195312f, 0.125f, 0.0126953f, + 0.986328f, -0.951172f, 0.0634766f, -0.231445f, 0.162109f, + -0.0136719f, 0.981445f, -0.974609f, -0.0449219f, -0.0761719f, + 0.186523f, -0.015625f, 0.950195f, -0.962891f, -0.0576172f, + -0.162109f, 0.154297f, -0.0292969f, 0.970703f, -0.973633f, + -0.0136719f, -0.394531f, 0.102539f, -0.00878906f, 0.970703f, + -0.915039f, 0.0546875f, -0.313477f, 0.110352f, -0.0234375f, + 0.947266f, -0.922852f, -0.139648f, -0.181641f, 0.12207f, + 0.0625f, 0.780273f, -0.899414f, -0.84375f, -0.0888672f, + -0.318359f, 1.00781f, 0.888672f, 0.27832f, 0.0195312f, + -1.08594f, 0.137695f, 0.56543f, 1.12891f, -0.235352f, + 1.65039f, -0.0820312f, 0.100586f, 0.987305f, 0.261719f, + -0.0615234f, 1.32227f, 0.669922f, 0.0f, 1.04102f, + 0.231445f, -0.174805f, 1.11426f, -0.261719f, -0.0527344f, + 0.958008f, 0.332031f, -0.28418f, 1.26953f, -0.612305f, + 0.208984f, 0.964844f, 1.15625f, -0.486328f, 2.0f, + -0.760742f, 0.0458984f, 1.44629f, 1.21289f, 0.924805f, + 1.1875f, -0.259766f, 0.114258f, 0.210938f, 0.486328f, + -0.422852f, -0.984375f, 1.08789f, 0.453125f, -0.229492f, + 0.457031f, -0.682617f, -0.500977f, 0.210938f, 0.391602f, + -0.303711f, 0.725586f, -0.80957f, -0.391602f, 0.0976562f, + 0.958984f, 0.0185547f, 1.69922f, -1.36035f, 1.98242f, + -0.392578f, -0.461914f, -0.37793f, -0.0712891f, 0.928711f, + -1.60254f, 0.133789f, -0.0419922f, -1.12109f, -0.201172f, + 0.0732422f, -1.99902f, 0.629883f, -0.174805f, -0.894531f, + 0.0742188f, -0.147461f, -1.23633f, -0.259766f, 0.0410156f, + -1.00879f, -0.0166016f, -0.0205078f, -1.99902f, 0.267578f, + -0.0664062f, -0.164062f, 0.511719f, 0.825195f, -1.21191f, + -0.515625f, 0.46875f, 0.0898438f, 1.09766f, -0.144531f, + 1.59375f, 0.166016f, 0.428711f, 0.294922f, 0.8125f, + -0.770508f, 0.535156f, 0.280273f, 0.231445f, 0.504883f, + 0.864258f, -0.884766f, 0.524414f, -0.183594f, 0.0820312f, + 0.713867f, 0.405273f, -0.520508f, -0.326172f, 0.0126953f, + -0.310547f, 1.38086f, 0.831055f, 0.380859f, 1.3125f, + -1.60645f, 0.151367f, 1.01953f, 0.580078f, -0.0283203f, + 2.0f, 1.03516f, -0.0634766f, 1.03418f, 0.332031f, + -0.0859375f, 1.32129f, -0.234375f, 0.0917969f, 1.49219f, + 0.30957f, -0.118164f, 1.76953f, -0.717773f, 0.174805f, + 1.59863f, 0.0947266f, 1.1875f, 0.429688f, 0.442383f, + 0.00976562f, 0.435547f, 0.345703f, -0.114258f, 0.238281f, + -0.689453f, 0.30957f, 0.0732422f, 0.606445f, -0.650391f, + -0.0947266f, -0.03125f, 0.183594f, -0.144531f, 0.746094f, + -0.793945f, -0.574219f, -0.0742188f, 0.196289f, -0.199219f, + 1.13867f, -1.11816f, -0.227539f, -0.462891f, 0.0517578f, + -0.0341797f, 1.18945f, -1.1084f, -0.0283203f, -0.342773f, + 0.174805f, -0.0078125f, 1.05176f, -1.03906f, 0.0253906f, + -0.375977f, -0.169922f, 0.00292969f, 0.837891f, -0.716797f, + -0.0205078f, -0.373047f, 0.293945f, 0.0175781f, 0.833984f, + -0.916016f, -0.0996094f, -0.149414f, 0.200195f, -0.00195312f, + 0.865234f, -0.916016f, -0.0117188f, -0.390625f, 0.290039f, + 0.0234375f, 0.985352f, -0.987305f, 0.0439453f, -0.214844f, + 0.0917969f, 0.0615234f, 1.02832f, -1.00684f, 0.152344f, + -0.452148f, 0.0615234f, -0.00585938f, 1.02148f, -0.976562f, + -0.0927734f, -0.286133f, 0.189453f, -0.0644531f, 1.02539f, + -1.02246f, 0.0166016f, -0.243164f, 0.109375f, -0.09375f, + 0.981445f, -0.931641f, 0.0458984f, -0.460938f, 0.0537109f, + -0.0429688f, 1.05859f, -0.850586f, 0.0771484f, -0.0507812f, + 0.108398f, -0.177734f, 0.779297f, -0.74707f, -0.378906f, + -0.413086f, -0.205078f, -0.0488281f, 0.946289f, -0.760742f, + -0.180664f, -0.228516f, -0.208008f, -0.0615234f, 1.05371f, + -0.953125f, -0.34668f, -1.16797f, -0.0322266f, -0.276367f, + 1.06641f, -0.863281f, -0.0244141f, -0.290039f, -0.0429688f, + 0.0439453f, 1.28223f, -1.06348f, 0.181641f, -0.514648f, + -0.0214844f, 0.0f, 0.861328f, -0.738281f, -0.0449219f, + 0.0722656f, 0.125f, 0.193359f, 1.15039f, -1.0957f, + 0.225586f, -0.137695f, 0.12207f, -0.0400391f, 0.732422f, + -0.818359f, -0.40918f, -0.672852f, -0.425781f, 0.839844f, + 0.856445f, 0.198242f, -0.363281f, 0.206055f, -0.214844f, + 1.20215f, 0.943359f, 0.0195312f, 2.0f, 0.874023f, + 0.0839844f, 0.827148f, 0.587891f, -0.384766f, 1.57715f, + 0.108398f, -0.116211f, 0.952148f, 0.246094f, -0.336914f, + 0.463867f, -0.740234f, 0.0185547f, 0.950195f, 0.55957f, + -0.442383f, 1.09668f, 0.0585938f, 0.132812f, 1.37695f, + 2.0f, -0.59375f, 2.0f, -0.676758f, -0.199219f, + -0.0205078f, 0.268555f, -0.5f, -1.94629f, 1.2832f, + 0.0078125f, -0.201172f, 0.674805f, -0.708984f, -0.490234f, + -0.515625f, 0.0439453f, -0.0830078f, 1.14355f, -1.01953f, + -0.0224609f, -0.282227f, 0.0214844f, -0.078125f, 1.09668f, + -0.961914f, 0.0253906f, -0.56543f, 0.30957f, 0.964844f, + 1.56836f, -0.272461f, 1.91309f, -0.53418f, -0.695312f, + -0.878906f, -0.0146484f, 0.277344f, -1.6416f, 0.0244141f, + 0.0898438f, -0.785156f, 0.229492f, -0.259766f, -1.06055f, + -0.241211f, 0.0224609f, -0.769531f, 0.748047f, -0.680664f, + -0.629883f, -0.549805f, -0.195312f, -0.796875f, -0.399414f, + 0.0859375f, -1.99902f, 0.24707f, 0.208984f, 0.563477f, + 1.91797f, 0.0585938f, 2.0f, -0.990234f, 0.327148f, + -0.0917969f, 1.16797f, -0.94043f, 0.623047f, -1.1748f, + -0.0205078f, -0.0449219f, 0.883789f, -0.905273f, -0.370117f, + -0.601562f, 0.0332031f, -0.0527344f, 0.928711f, -0.833984f, + -0.180664f, -0.267578f, 0.0351562f, -0.0175781f, 0.998047f, + -0.922852f, -0.000976562f, -0.371094f, 0.0341797f, -0.0166016f, + 0.977539f, -0.900391f, -0.00292969f, -0.37207f, 0.0449219f, + -0.0439453f, 0.989258f, -0.904297f, -0.0576172f, -0.37207f, + 0.270508f, -0.368164f, 0.0576172f, -0.607422f, -1.95508f, + -0.182617f, -0.390625f, 1.62598f, 1.52734f, 1.2793f, + 2.0f, -1.99902f, 0.226562f, 1.01465f, 0.669922f, + -0.373047f, 1.71484f, 1.99707f, -0.0654297f, 1.00391f, + 0.330078f, -0.432617f, 0.704102f, -0.96875f, 0.0800781f, + 0.964844f, 0.702148f, -0.5625f, 1.39746f, -0.203125f, + 0.255859f, 1.74512f, 1.52539f, 0.417969f, 2.0f, + -0.0976562f, -0.482422f, 0.09375f, 0.151367f, -0.328125f, + -1.88867f, -0.0595703f, 0.117188f, 0.0751953f, 0.870117f, + -0.870117f, 0.046875f, -0.280273f, 0.125f, 0.124023f, + 1.0791f, -0.964844f, 0.338867f, -0.0791016f, 0.0751953f, + 0.12207f, 0.920898f, -0.888672f, 0.0273438f, -0.250977f, + 0.00488281f, 0.165039f, 1.01074f, -0.944336f, 0.137695f, + -0.387695f, -0.142578f, 0.238281f, 1.77246f, -1.42285f, + 0.90625f, -0.856445f, 0.0556641f, -0.219727f, -0.785156f, + 1.47266f, -1.99902f, 1.27246f, -0.132812f, -0.746094f, + 0.172852f, -0.0830078f, -1.3584f, 0.638672f, 0.0175781f, + -0.786133f, 0.754883f, -0.729492f, -0.808594f, -0.291992f, + 0.170898f, -0.746094f, 0.623047f, -0.667969f, -0.743164f, + -0.241211f, 0.0693359f, -0.725586f, 0.495117f, -0.545898f, + -0.969727f, -0.131836f, 0.0234375f, -0.52832f, 0.280273f, + -0.327148f, -1.0498f, -0.210938f, -0.253906f, 0.234375f, + 0.661133f, -0.0332031f, -0.708008f, -0.458984f, 0.31543f, + 0.480469f, 1.59082f, -1.22266f, 1.41602f, -0.270508f, + 0.263672f, 0.318359f, 1.21289f, -1.12207f, 0.853516f, + -0.272461f, 0.158203f, 1.84766f, 2.0f, 0.341797f, + 2.0f, -0.788086f, -0.264648f, -0.326172f, -1.25977f, + 0.842773f, -1.99902f, -0.947266f, 0.249023f, -0.642578f, + 0.745117f, -0.744141f, -0.404297f, -0.266602f, 0.0898438f, + -0.568359f, 0.501953f, -0.494141f, -0.858398f, 0.0722656f, + -0.543945f, 1.16895f, 1.12012f, 1.47461f, -1.12988f, + -0.27832f, 0.53125f, 0.875f, 0.845703f, -0.318359f, + 1.68555f, 1.29199f, -0.00195312f, 0.861328f, 0.601562f, + -0.519531f, 1.16211f, -1.05957f, 0.0507812f, 0.904297f, + 0.625977f, -0.525391f, 1.16797f, -0.163086f, 0.125977f, + 1.99902f, 2.0f, 2.0f, 2.0f, -0.00195312f, + -1.11719f, -0.3125f, -0.320312f, 0.585938f, -1.99902f, + 0.647461f, 0.198242f, -0.538086f, 0.993164f, -0.897461f, + -0.227539f, -0.354492f, 0.0976562f, -0.416016f, 0.623047f, + -0.682617f, -0.832031f, -0.223633f, -0.160156f, 0.0751953f, + -0.791992f, 1.13379f, -1.99902f, -0.755859f, 0.669922f, + 1.02637f, 1.26758f, -0.293945f, 2.0f, 1.93457f, + -0.0126953f, 0.773438f, 0.475586f, -0.59375f, 0.329102f, + -0.588867f, 0.113281f, 0.740234f, 0.749023f, -0.716797f, + 0.941406f, -0.0878906f, 0.71875f, 1.8125f, 2.0f, + -0.289062f, 2.0f, -1.01074f, 0.0117188f, -0.183594f, + -0.969727f, 0.893555f, -1.99902f, 0.333008f, 0.188477f, + -0.643555f, 0.504883f, -0.511719f, -0.804688f, -0.957031f, + 0.0546875f, -0.305664f, -0.0449219f, -0.145508f, -1.875f, + 0.0996094f, -0.155273f, 1.59668f, 1.5293f, 1.46973f, + 2.0f, -1.9834f, 0.375f, 1.20508f, 0.736328f, + -0.399414f, 2.0f, 2.0f, 0.123047f, 0.834961f, + 1.04004f, -0.808594f, 1.31934f, -0.634766f, 0.548828f, + 0.129883f, -1.64746f, 2.0f, -1.99902f, 0.819336f, + 0.0273438f, -0.254883f, 0.722656f, -0.691406f, -0.464844f, + -1.05566f, 0.0634766f, -0.206055f, 1.02148f, -0.90332f, + 0.0595703f, -0.03125f, 0.129883f, -0.177734f, 0.697266f, + -0.713867f, -0.351562f, -0.169922f, -0.119141f, -0.172852f, + 1.01855f, -0.989258f, -0.12793f, -0.670898f, -0.146484f, + -0.261719f, 1.16602f, -1.05664f, -0.302734f, -0.25293f, + -0.0458984f, -0.198242f, 0.90625f, -0.876953f, -0.144531f, + -0.424805f, -0.151367f, -0.147461f, 0.926758f, -0.835938f, + -0.191406f, -0.326172f, -0.128906f, -0.216797f, 0.910156f, + -0.851562f, -0.291992f, -0.549805f, -0.0517578f, -0.0869141f, + 1.07715f, -0.977539f, -0.0361328f, -0.418945f, -0.148438f, + -0.133789f, 0.907227f, -0.836914f, -0.213867f, -0.768555f, + -0.0664062f, 0.182617f, 1.0498f, -0.915039f, 0.400391f, + -0.523438f, 0.015625f, 0.0f, 1.13184f, -1.09961f, + -0.244141f, -0.330078f, -0.115234f, 0.0166016f, 0.944336f, + -0.868164f, -0.430664f, -0.246094f, -0.0185547f, -0.00976562f, + 0.819336f, -0.822266f, -0.380859f, -1.1709f, 0.0605469f, + -0.0498047f, 0.777344f, -0.703125f, 0.0800781f, -0.451172f, + 0.304688f, 0.0517578f, 0.825195f, -0.771484f, 0.145508f, + 0.495117f, -0.0888672f, -0.243164f, 1.48145f, -1.22168f, + 0.0615234f, -0.192383f, -0.0537109f, 0.0195312f, 1.21582f, + -1.06836f, 0.175781f, -0.394531f, 0.237305f, -0.0126953f, + 0.800781f, -0.920898f, -0.12207f, -0.391602f, -0.0917969f, + -0.0791016f, 1.08008f, -1.03613f, -0.0654297f, -0.423828f, + 0.0478516f, -0.0253906f, 0.873047f, -0.884766f, -0.0722656f, + -0.579102f, 0.0136719f, -0.0917969f, 0.954102f, -0.922852f, + -0.172852f, -0.244141f, 0.0f, -0.141602f, 0.929688f, + -0.894531f, -0.179688f, -0.291992f, 0.0283203f, -0.0947266f, + 0.961914f, -0.926758f, -0.135742f, -0.329102f, 0.0576172f, + -0.0351562f, 0.999023f, -0.958984f, -0.0498047f, -0.248047f, + 0.0869141f, -0.078125f, 1.01074f, -0.954102f, 0.00976562f, + -0.217773f, 0.0986328f, -0.0556641f, 0.916992f, -0.914062f, + -0.136719f, -0.219727f, 0.0488281f, -0.139648f, 0.985352f, + -0.952148f, -0.152344f, -0.286133f, 0.0166016f, -0.0917969f, + 1.0459f, -0.972656f, -0.0605469f, -0.228516f, 0.0507812f, + -0.0810547f, 0.956055f, -0.9375f, -0.18457f, -0.275391f, + 0.0703125f, -0.0986328f, 0.948242f, -0.928711f, -0.162109f, + -0.333008f}; +const size_t kAccelerometerLaptopModeTestDataLength = + ARRAY_SIZE(kAccelerometerLaptopModeTestData); + +const float kAccelerometerFullyOpenTestData[] = { + 0.892578f, -0.0810547f, 0.0146484f, 0.929688f, -0.0644531f, + -0.0234375f, 0.996094f, -0.0136719f, 0.0185547f, 1.02344f, + -0.0615234f, -0.0449219f, 0.978516f, 0.125977f, 0.0400391f, + 0.996094f, 0.0332031f, -0.0117188f, 0.963867f, 0.107422f, + 0.0214844f, 0.980469f, 0.0185547f, -0.00683594f, 0.952148f, + 0.0361328f, 0.0253906f, 0.976562f, -0.00390625f, -0.0126953f, + 0.97168f, 0.0205078f, 0.0517578f, 1.01074f, 0.015625f, + -0.0234375f, 0.953125f, -0.000976562f, 0.0390625f, 0.977539f, + -0.0224609f, -0.00976562f, 0.954102f, 0.0244141f, 0.0439453f, + 0.986328f, 0.00292969f, -0.000976562f, 0.967773f, 0.0537109f, + 0.046875f, 0.99707f, 0.0175781f, -0.000976562f, 0.951172f, + 0.0390625f, 0.0341797f, 0.974609f, -0.00878906f, -0.000976562f, + 0.948242f, 0.0185547f, 0.0478516f, 0.976562f, -0.000976562f, + -0.00683594f, 0.958984f, 0.0263672f, 0.078125f, 0.982422f, + -0.0205078f, 0.0283203f, 0.930664f, 0.00878906f, 0.0664062f, + 0.970703f, 0.00390625f, -0.0078125f, 0.945312f, 0.0380859f, + -0.00585938f, 0.972656f, 0.0419922f, -0.0478516f, 1.01953f, + 0.240234f, -0.182617f, 1.00977f, 0.18457f, -0.126953f, + 1.05566f, 0.0751953f, -0.0888672f, 1.09766f, 0.0732422f, + -0.0898438f, 1.21484f, 0.119141f, -0.000976562f, 1.23633f, + 0.194336f, -0.447266f, 1.31445f, 0.213867f, -0.118164f, + 1.30762f, 0.0908203f, -0.260742f, 0.860352f, 0.141602f, + -0.166016f, 0.868164f, 0.0429688f, -0.258789f, 0.727539f, + 0.0419922f, -0.21875f, 0.740234f, 0.0126953f, -0.162109f, + 0.652344f, -0.00292969f, -0.185547f, 0.666992f, 0.0800781f, + -0.272461f, 0.852539f, -0.0478516f, -0.228516f, 0.819336f, + -0.0996094f, -0.180664f, 0.959961f, -0.0537109f, -0.240234f, + 0.935547f, -0.0917969f, -0.269531f, 0.988281f, -0.0507812f, + -0.197266f, 0.981445f, -0.0712891f, -0.323242f, 0.964844f, + -0.0683594f, -0.203125f, 0.941406f, -0.0898438f, -0.236328f, + 0.942383f, -0.0429688f, -0.206055f, 0.921875f, -0.0527344f, + -0.239258f, 0.976562f, -0.0742188f, -0.261719f, 0.958008f, + -0.09375f, -0.311523f, 0.949219f, -0.0839844f, -0.242188f, + 0.949219f, -0.0742188f, -0.323242f, 0.973633f, -0.0263672f, + -0.238281f, 0.958984f, -0.0488281f, -0.293945f, 0.931641f, + -0.0214844f, -0.225586f, 0.931641f, 0.0195312f, -0.225586f, + 0.810547f, -0.0947266f, -0.15332f, 0.947266f, 0.241211f, + -0.100586f, 0.326172f, 0.286133f, -0.12207f, 0.855469f, + 0.677734f, -0.228516f, 0.229492f, 1.08398f, 0.0224609f, + 0.822266f, 0.759766f, -0.0722656f, 0.294922f, 1.42676f, + 0.147461f, 0.239258f, 0.755859f, 0.142578f, -0.120117f, + 1.00977f, -0.0722656f, -0.154297f, 0.832031f, -0.0576172f, + -0.15332f, 1.10156f, -0.0273438f, -0.119141f, 1.05078f, + 0.0166016f, -0.0927734f, 1.09961f, -0.0703125f, -0.0751953f, + 1.04688f, -0.00195312f, -0.078125f, 0.897461f, -0.0625f, + -0.078125f, 0.854492f, -0.0947266f, -0.123047f, 0.811523f, + -0.0488281f, -0.113281f, 0.796875f, 0.0f, -0.0488281f, + 0.961914f, -0.177734f, -0.0898438f, 0.859375f, -0.172852f, + 0.0126953f, 1.1084f, -0.158203f, 0.0292969f, 1.0791f, + -0.152344f, 0.154297f, 1.29492f, -0.126953f, 0.134766f, + 1.23145f, -0.0878906f, -0.200195f, 0.667969f, -0.216797f, + -0.0888672f, 0.935547f, -0.143555f, 0.000976562f, 1.13281f, + -0.0498047f, 0.00195312f, 1.05469f, -0.231445f, 0.0927734f, + 0.956055f, -0.292969f, 0.0625f, 0.927734f, -0.112305f, + 0.0585938f, 0.975586f, -0.163086f, 0.0957031f, 1.03418f, + -0.229492f, 0.000976562f, 0.985352f, -0.09375f, -0.00585938f, + 0.945312f, -0.140625f, -0.0302734f, 0.998047f, -0.208008f, + -0.0507812f, 0.916016f, -0.112305f, 0.123047f, 0.981445f, + -0.205078f, 0.129883f, 1.02832f, -0.211914f, 0.105469f, + 1.01367f, -0.142578f, 0.111328f, 1.00098f, -0.110352f, + 0.0986328f, 0.999023f, -0.15918f, 0.0839844f, 0.922852f, + -0.223633f, 0.261719f, 1.06641f, -0.138672f, 0.240234f, + 0.916016f, -0.296875f, 0.00488281f, 1.04199f, -0.128906f, + 0.0341797f, 1.0791f, -0.265625f, 0.015625f, 0.963867f, + -0.161133f, 0.015625f, 0.958008f, -0.0722656f, -0.125f, + 1.03125f, -0.19043f, -0.0722656f, 1.16602f, -0.126953f, + -0.143555f, 1.12793f, -0.197266f, -0.120117f, 1.26465f, + -0.232422f, -0.226562f, 1.125f, -0.0712891f, -0.0927734f, + 1.26465f, -0.145508f, -0.551758f, 0.90918f, -0.163086f, + -0.228516f, 1.2041f, -0.0371094f, -0.493164f, 0.827148f, + 0.0371094f, -0.162109f, 0.568359f, -0.195312f, -0.641602f, + 0.438477f, -0.212891f, -0.513672f, 0.208008f, -0.0488281f, + -0.776367f, 0.0488281f, -0.115234f, -0.84375f, -0.314453f, + 0.106445f, -0.966797f, -0.0078125f, 0.00976562f, -1.01953f, + -0.220703f, -0.0322266f, -0.994141f, 0.0117188f, -0.248047f, + -0.975586f, 0.121094f, -0.0205078f, -0.947266f, 0.00292969f, + -0.160156f, -0.9375f, 0.0175781f, -0.0986328f, -0.916992f, + -0.0195312f, -0.208008f, -0.9375f, -0.0654297f, -0.134766f, + -0.948242f, -0.0185547f, -0.231445f, -0.977539f, -0.0537109f, + -0.198242f, -1.0166f, 0.0439453f, -0.433594f, -0.994141f, + -0.0595703f, -0.389648f, -1.07129f, 0.0859375f, -0.109375f, + -1.01953f, 0.0966797f, -0.12207f, -1.01074f, 0.125977f, + -0.192383f, -1.0f, 0.0820312f, -0.166016f, -1.04688f, + 0.0751953f, -0.265625f, -1.00879f, 0.139648f, -0.135742f, + -1.00977f, 0.0644531f, -0.235352f, -0.989258f, 0.100586f, + -0.144531f, -0.858398f, 0.0273438f, -0.22168f, -0.878906f, + -0.0634766f, -0.1875f, -0.905273f, -0.0195312f, -0.232422f, + -0.926758f, -0.0732422f, -0.319336f, -1.05078f, -0.00878906f, + -0.5625f, -1.05176f, 0.111328f, -0.456055f, -0.942383f, + -0.0146484f, -0.171875f, -0.946289f, -0.0224609f, -0.174805f, + -0.901367f, -0.0283203f, -0.332031f, -0.948242f, -0.0732422f, + -0.262695f, -0.867188f, 0.0351562f, -0.271484f, -0.913086f, + -0.0878906f, -0.259766f, -1.2793f, -0.226562f, -0.382812f, + -1.2334f, 0.0400391f, -0.260742f, -1.22949f, -0.216797f, + -0.432617f, -1.21191f, -0.131836f, -0.368164f, -1.10938f, + -0.323242f, -0.505859f, -1.01953f, -0.197266f, -0.405273f, + -1.25488f, -0.347656f, -0.448242f, -0.803711f, 0.0595703f, + -0.253906f, -0.489258f, -0.00390625f, 0.101562f, 0.15332f, + -0.423828f, -0.0195312f, 0.527344f, -0.350586f, -0.24707f, + 0.363281f, -1.33789f, -0.214844f, 0.322266f, -0.768555f, + -0.279297f, 0.266602f, -0.918945f, -0.320312f, 0.0634766f, + -0.97168f, -0.102539f, 0.114258f, -0.891602f, -0.158203f, + 0.0283203f, -0.998047f, -0.198242f, 0.0634766f, -0.931641f, + -0.239258f, 0.147461f, -0.963867f, -0.219727f, 0.142578f, + -1.02051f, -0.279297f, 0.105469f, -0.955078f, -0.238281f, + 0.104492f, -1.02637f, -0.291992f, -0.0302734f, -1.02637f, + -0.225586f, 0.000976562f, -0.907227f, -0.12793f, 0.03125f, + -0.979492f, -0.100586f, 0.0625f, -0.921875f, -0.155273f, + 0.146484f, -0.929688f, -0.158203f, 0.155273f, -0.981445f, + -0.171875f, 0.212891f, -0.927734f, -0.166992f, 0.198242f, + -1.05371f, -0.197266f, 0.189453f, -0.954102f, -0.113281f, + 0.189453f, -1.00293f, -0.180664f, 0.111328f, -0.967773f, + -0.109375f, 0.125977f, -0.966797f, -0.146484f, 0.0712891f, + -0.982422f, -0.0908203f, 0.112305f, -0.928711f, -0.149414f, + 0.0146484f, -1.00781f, -0.0996094f, 0.102539f, -0.810547f, + -0.157227f, -0.0117188f, -0.820312f, -0.0371094f, 0.28418f, + -0.446289f, -0.166016f, 0.208008f, -0.03125f, -0.0761719f, + 0.755859f, -0.280273f, -0.316406f, 1.42188f, 0.198242f, + -0.49707f, 1.37207f, -0.556641f, -0.382812f, 1.36523f, + 0.110352f, -0.342773f, 1.25391f, -0.225586f, -0.570312f, + 0.958984f, 0.0722656f, -0.237305f, 0.984375f, 0.0957031f, + -0.416992f, 0.853516f, 0.0400391f, -0.416016f, 0.873047f, + 0.0644531f, -0.370117f, 1.04004f, 0.0273438f, -0.408203f, + 0.920898f, -0.0986328f, -0.514648f, 0.956055f, 0.0527344f, + -0.428711f, 0.960938f, 0.109375f, -0.522461f, 0.801758f, + -0.277344f, -0.634766f, 0.882812f, 0.0527344f, -0.34668f, + 0.981445f, -0.09375f, -0.298828f, 0.952148f, -0.213867f, + -0.25293f, 0.90918f, -0.132812f, -0.493164f, 0.885742f, + -0.177734f, -0.525391f, 0.915039f, -0.0605469f, -0.439453f, + 0.87207f, -0.0986328f, -0.506836f, 0.905273f, -0.0732422f, + -0.462891f, 0.870117f, -0.0966797f, -0.511719f, 0.897461f, + -0.0234375f, -0.464844f, 0.868164f, -0.0283203f, -0.474609f, + 0.919922f, 0.0205078f, -0.34375f, 0.889648f, -0.00390625f, + -0.445312f, 0.804688f, -0.0263672f, -0.417969f, 0.806641f, + 0.0410156f, -0.399414f, 0.914062f, -0.0722656f, -0.386719f, + 0.890625f, -0.0615234f, -0.40625f, 0.928711f, 0.0253906f, + -0.118164f, 0.943359f, -0.000976562f, -0.398438f, 0.811523f, + -0.0605469f, -0.234375f, 0.879883f, 0.198242f, -0.509766f, + 0.958008f, 0.0361328f, -0.328125f, 0.938477f, -0.00976562f, + -0.429688f, 0.916016f, -0.0185547f, -0.266602f, 0.898438f, + -0.0380859f, -0.450195f, 0.870117f, 0.162109f, -0.210938f, + 0.899414f, 0.117188f, -0.517578f, 0.756836f, -0.0820312f, + -0.361328f, 0.868164f, -0.0576172f, -1.29883f, 0.515625f, + -0.00195312f, -1.13281f, 0.628906f, 0.00390625f, -0.103516f, + 0.485352f, -0.046875f, -0.922852f, 0.412109f, -0.108398f, + -0.898438f, 0.446289f, -0.111328f, -0.925781f, 0.375977f, + -0.125977f, -0.825195f, 0.446289f, -0.0966797f, -0.958008f, + 0.389648f, -0.0810547f, -1.00781f, 0.532227f, -0.104492f, + -1.0791f, 0.459961f, -0.138672f, -0.941406f, 0.509766f, + -0.107422f, -1.14062f, 0.447266f, -0.195312f, -0.867188f, + 0.474609f, -0.233398f, -0.751953f, 0.612305f, -0.126953f, + -0.661133f, 0.702148f, -0.199219f, -0.260742f, 0.856445f, + -0.0292969f, -0.743164f, 0.921875f, -0.0371094f, -0.293945f, + 0.902344f, -0.103516f, -0.416016f, 0.955078f, -0.00488281f, + -0.232422f, 0.951172f, -0.0498047f, -0.331055f, 0.871094f, + 0.00390625f, -0.186523f, 0.905273f, 0.0566406f, -0.249023f, + 0.677734f, 0.0253906f, 0.145508f, 0.826172f, 0.251953f, + -0.428711f, 0.764648f, 0.488281f, -0.265625f, 0.886719f, + 0.256836f, -0.408203f, 0.744141f, 0.689453f, -0.611328f, + 0.755859f, 0.431641f, -0.525391f, 0.588867f, 0.637695f, + -0.750977f, 0.578125f, 0.568359f, -0.540039f, 0.512695f, + 0.530273f, -0.722656f, 0.498047f, 0.526367f, -0.788086f, + 0.647461f, 0.522461f, -0.862305f, 0.567383f, 0.422852f, + -0.765625f, 0.648438f, 0.405273f, -0.938477f, 0.583008f, + 0.272461f, -1.15137f, 0.481445f, 0.00585938f, -0.788086f, + 0.454102f, -0.0615234f, -0.885742f, 0.306641f, -0.333984f, + -0.678711f, 0.322266f, -0.288086f, -0.615234f, 0.220703f, + -0.476562f, -0.748047f, 0.223633f, -0.396484f, -0.729492f, + 0.235352f, -0.510742f, -0.806641f, 0.227539f, -0.476562f, + -0.665039f, 0.275391f, -0.47168f, -0.938477f, 0.345703f, + -0.369141f, -0.709961f, 0.482422f, -0.393555f, -0.380859f, + 0.759766f, -0.143555f, -0.529297f, 0.956055f, -0.0185547f, + -0.12207f, 1.15527f, 0.0380859f, -0.529297f, 1.04102f, + 0.203125f, -0.0283203f, 1.11719f, 0.0888672f, -0.258789f, + 1.02734f, 0.297852f, -0.0244141f, 1.03223f, 0.211914f, + -0.0859375f, 0.798828f, 0.216797f, 0.19043f, 0.891602f, + 0.256836f, -0.102539f, 0.662109f, 0.263672f, 0.208984f, + 0.810547f, 0.380859f, -0.235352f, 0.707031f, 0.507812f, + -0.0800781f, 0.902344f, 0.470703f, -0.301758f, 0.577148f, + 0.674805f, -0.500977f, 0.748047f, 0.472656f, -0.493164f, + 0.478516f, 0.611328f, -1.04395f, 0.491211f, 0.651367f, + -0.581055f, 0.25293f, 0.325195f, -0.950195f, 0.224609f, + 0.404297f, -1.04883f, 0.116211f, -0.00292969f, -0.980469f, + 0.0566406f, 0.0195312f, -0.821289f, 0.0166016f, -0.141602f, + -0.959961f, -0.0322266f, -0.158203f, -0.837891f, 0.119141f, + -0.224609f, -1.00781f, 0.09375f, -0.151367f, -1.00684f, + 0.248047f, -0.238281f, -0.973633f, 0.271484f, -0.324219f, + -0.942383f, 0.443359f, -0.298828f, -0.845703f, 0.581055f, + -0.291992f, -0.700195f, 0.65918f, -0.319336f, -0.262695f, + 0.818359f, -0.286133f, -0.579102f, 0.827148f, -0.272461f, + -0.0908203f, 0.935547f, -0.233398f, -0.374023f, 0.920898f, + -0.137695f, 0.000976562f, 0.964844f, -0.12793f, -0.285156f, + 0.880859f, -0.0244141f, -0.0830078f, 0.930664f, 0.00976562f, + -0.15332f, 0.731445f, 0.172852f, 0.0380859f, 0.876953f, + 0.264648f, -0.194336f, 0.601562f, 0.613281f, -0.132812f, + 0.803711f, 0.53418f, -0.268555f, 0.933594f, 0.899414f, + -0.332031f, 0.923828f, 0.521484f, -0.425781f, 0.972656f, + 0.959961f, -0.506836f, 0.797852f, 0.506836f, -0.125977f, + 0.740234f, 0.756836f, -0.262695f, 0.783203f, 0.691406f, + -0.422852f, 0.474609f, 0.459961f, 0.00390625f, 0.683594f, + 0.941406f, -0.0625f, 0.0810547f, 1.06934f, 0.0625f, + 0.546875f, 0.967773f, 0.0351562f, 0.202148f, 1.32422f, + -0.148438f, 0.269531f, 0.818359f, -0.3125f, 0.0742188f, + 1.23633f, -0.188477f, -0.0263672f, 0.713867f, -0.139648f, + -0.230469f, 0.8125f, -0.134766f, -0.246094f, 0.734375f, + -0.09375f, -0.22168f, 1.17188f, -0.158203f, -0.209961f, + 1.09766f, -0.141602f, 0.00976562f, 0.991211f, -0.238281f, + 0.0341797f, 0.979492f, -0.207031f, -0.0166016f, 1.00293f, + -0.228516f, 0.0527344f, 1.28711f, -0.167969f, 0.164062f, + 0.925781f, -0.255859f, 0.170898f, 0.956055f, -0.256836f, + 0.191406f, 0.936523f, -0.145508f, 0.205078f, 0.904297f, + -0.257812f, 0.117188f, 0.870117f, -0.188477f, 0.166992f, + 1.02441f, -0.288086f, 0.163086f, 0.938477f, -0.262695f, + 0.138672f, 0.947266f, -0.219727f, 0.0947266f, 0.992188f, + -0.0732422f, 0.116211f, 1.00293f, -0.203125f, 0.0205078f, + 0.933594f, -0.235352f, -0.0126953f, 0.844727f, -0.0693359f, + 0.119141f, 1.00195f, -0.110352f, 0.135742f, 1.00391f, + -0.101562f, 0.0546875f, 1.06543f, -0.18457f, 0.0507812f, + 0.933594f, -0.112305f, 0.00976562f, 0.973633f, -0.193359f, + -0.0185547f, 0.885742f, -0.279297f, -0.0107422f, 1.02344f, + -0.078125f, -0.0107422f, 1.0127f, 0.140625f, -0.142578f, + 0.994141f, -0.132812f, -0.145508f, 0.90918f, -0.000976562f, + -0.22168f, 1.0498f, -0.148438f, -0.185547f, 1.2207f, + -0.172852f, -0.196289f, 1.0957f, -0.183594f, -0.0390625f, + 1.34863f, -0.21875f, -0.745117f, 0.952148f, 0.0126953f, + -0.196289f, 1.29492f, -0.150391f, -0.768555f, 0.853516f, + -0.163086f, -0.25f, 0.358398f, -0.0507812f, -0.80957f, + 0.139648f, 0.125f, -0.790039f, -0.257812f, 0.175781f, + -0.795898f, -0.135742f, 0.00585938f, -0.841797f, -0.279297f, + 0.0419922f, -0.708984f, 0.0175781f, -0.0957031f, -0.75f, + -0.204102f, 0.0419922f, -0.78125f, 0.0322266f, -0.125f, + -0.787109f, -0.0380859f, -0.0683594f, -1.06641f, 0.0947266f, + -0.238281f, -1.02148f, 0.117188f, -0.176758f, -1.77539f, + 0.0117188f, -0.31543f, -1.80566f, -0.0625f, -0.273438f, + -0.764648f, 0.143555f, -0.21875f, -0.746094f, 0.162109f, + -0.0351562f, -0.858398f, 0.186523f, -0.250977f, -0.918945f, + 0.0458984f, 0.135742f, -0.988281f, 0.241211f, -0.192383f, + -0.963867f, 0.277344f, -0.129883f, -0.994141f, 0.22168f, + -0.169922f, -0.96582f, 0.290039f, -0.217773f, -0.990234f, + 0.185547f, -0.152344f, -0.978516f, 0.169922f, -0.0361328f, + -0.912109f, 0.119141f, -0.352539f, -0.838867f, 0.183594f, + -0.0380859f, -0.753906f, 0.274414f, -0.575195f, -0.770508f, + 0.192383f, -0.482422f, -0.904297f, -0.0234375f, -0.498047f, + -0.817383f, 0.0527344f, -0.277344f, -0.428711f, 0.114258f, + -0.634766f, -0.427734f, -0.0429688f, -0.405273f, -0.318359f, + 0.118164f, -0.870117f, -0.193359f, 0.171875f, -0.938477f, + -0.1875f, 0.208008f, -1.04688f, -0.246094f, 0.0849609f, + -1.72461f, -0.353516f, 0.234375f, -1.05859f, -0.304688f, + 0.151367f, -1.38672f, -0.663086f, 0.242188f, -0.939453f, + -0.481445f, 0.189453f, -0.87793f, -0.831055f, 0.358398f, + -0.555664f, -0.621094f, 0.444336f, -0.287109f, -0.802734f, + 0.367188f, -0.25293f, -0.753906f, 0.413086f, 0.0126953f, + -1.0127f, 0.335938f, -0.250977f, -0.942383f, 0.563477f, + 0.000976562f, -1.33691f, 0.138672f, -0.365234f, -0.996094f, + 0.542969f, -0.0400391f, -1.44434f, 0.239258f, -0.655273f, + -0.625977f, 0.313477f, -0.444336f, -0.589844f, -0.106445f, + -0.217773f, 0.00585938f, -0.760742f, -0.219727f, 0.0654297f, + -0.626953f, -0.0439453f, 0.0732422f, -1.22168f, 0.0126953f, + 0.210938f, -0.754883f, -0.0839844f, 0.161133f, -0.980469f, + -0.124023f, 0.141602f, -0.828125f, -0.199219f, 0.152344f, + -0.80957f, -0.230469f, 0.231445f, -0.865234f, -0.259766f, + 0.232422f, -0.892578f, -0.305664f, 0.323242f, -0.87793f, + -0.294922f, 0.274414f, -1.0791f, -0.435547f, 0.222656f, + -0.863281f, -0.375f, 0.219727f, -1.0166f, -0.525391f, + 0.0341797f, -0.834961f, -0.454102f, 0.0371094f, -0.984375f, + -0.486328f, -0.135742f, -0.700195f, -0.339844f, -0.0078125f, + -1.20508f, -0.665039f, -0.791016f, 0.00390625f, -0.277344f, + 0.0136719f, -0.492188f, -0.779297f, -1.49316f, 0.0957031f, + -0.179688f, -0.587891f, 0.665039f, 0.398438f, -0.980469f, + 0.428711f, 0.254883f, -0.828125f, 0.724609f, 0.663086f, + -0.90625f, 0.555664f, 0.0791016f, -0.837891f, 0.591797f, + 0.257812f, -0.806641f, 0.609375f, 0.0458984f, -0.779297f, + 0.529297f, 0.00292969f, -0.829102f, 0.640625f, 0.0371094f, + -0.797852f, 0.583008f, 0.208984f, -0.864258f, 0.583984f, + -0.0615234f, -0.758789f, 0.72168f, 0.0947266f, -0.921875f, + 0.605469f, -0.264648f, -0.75293f, 0.701172f, 0.107422f, + -0.735352f, 0.44043f, -0.527344f, -0.398438f, 0.46875f, + -0.421875f, -0.424805f, 0.0810547f, -0.754883f, -0.241211f, + -0.107422f, -1.13574f, -0.410156f, -0.0400391f, -0.942383f, + -0.454102f, -0.12207f, -1.24902f, -0.509766f, -0.393555f, + -0.959961f, -0.511719f, -0.381836f, -1.04883f, -0.924805f, + -0.756836f, -1.17969f, -0.521484f, -0.105469f, -1.16504f, + -0.767578f, -0.477539f, -0.401367f, -0.0341797f, -0.341797f, + 0.0507812f, 0.389648f, -0.507812f, 0.186523f, 0.438477f, + -1.33594f, 0.625977f, 0.518555f, -0.671875f, 0.182617f, + 0.432617f, -1.18359f, 0.132812f, 0.414062f, -0.782227f, + 0.0615234f, 0.401367f, -1.30176f, -0.0683594f, -0.100586f, + -0.586914f, 0.0302734f, 0.191406f, -0.983398f, -0.0273438f, + -0.735352f, -0.224609f, -0.342773f, -0.241211f, -0.566406f, + 0.015625f, -1.1084f, -0.00976562f, -0.652344f, -0.75293f, + 0.239258f, -0.449219f, -1.08789f, 0.107422f, -0.572266f, + -0.887695f, 0.407227f, -0.423828f, -0.919922f, 0.173828f, + -0.705078f, -0.825195f, 0.411133f, -0.484375f, -0.799805f, + 0.237305f, -0.776367f, -0.745117f, 0.459961f, -0.819336f, + -0.749023f, 0.208008f, -0.788086f, -0.716797f, 0.226562f, + -0.795898f, -0.72168f, 0.123047f, -0.790039f, -0.705078f, + 0.101562f, -0.720703f, -0.745117f, -0.0517578f, -0.771484f, + -0.701172f, -0.0175781f, -0.758789f, -0.765625f, -0.0917969f, + -0.745117f, -0.751953f, -0.149414f, -0.6875f, -0.660156f, + -0.0166016f, -0.782227f, -0.592773f, -0.0205078f, -0.726562f, + -0.376953f, 0.119141f, -0.599609f, -0.371094f, 0.0107422f, + -0.736328f, -0.325195f, 0.0771484f, -0.768555f, -0.388672f, + -0.0273438f, -0.750977f, -0.477539f, 0.107422f, -0.919922f, + -0.514648f, 0.125f, -0.961914f, -0.37793f, 0.0136719f, + -0.981445f, -0.447266f, -0.0107422f, -0.823242f, -0.303711f, + 0.0986328f, -1.00684f, -0.366211f, 0.0986328f, -1.14551f, + -0.239258f, 0.140625f, -0.894531f, -0.297852f, 0.0849609f, + -0.949219f, -0.341797f, 0.131836f, -0.966797f, -0.380859f, + 0.0947266f, -0.75293f, -0.391602f, 0.0839844f, -0.908203f, + -0.40625f, 0.161133f, -0.860352f, -0.452148f, 0.1875f, + -0.950195f, -0.496094f, 0.200195f, -0.828125f, -0.581055f, + 0.0771484f, -0.93457f, -0.607422f, 0.0996094f, -0.863281f, + -0.59375f, 0.0927734f, -0.802734f, -0.604492f, 0.0947266f, + -0.807617f, -0.722656f, 0.101562f, -0.844727f, -0.711914f, + 0.149414f, -1.03125f, -0.77832f, 0.125977f, -0.78418f, + -0.740234f, 0.121094f, -0.891602f, -0.808594f, 0.164062f, + -0.650391f, -0.80957f, 0.0888672f, -0.416992f, -0.866211f, + 0.155273f, -0.382812f, -0.880859f, 0.0849609f, -0.264648f, + -0.775391f, 0.229492f, -0.389648f, -0.814453f, 0.0664062f, + -0.226562f, -0.625f, 0.414062f, -0.274414f, -0.681641f, + 0.0292969f, -0.0478516f, -0.711914f, 0.794922f, -0.388672f, + -0.584961f, 0.368164f, -0.257812f, -0.545898f, 1.09277f, + -0.277344f, -0.125977f, 0.822266f, -0.365234f, -0.467773f, + 0.714844f, -0.413086f, -0.136719f, 1.57227f, -0.0947266f, + -0.223633f, 0.817383f, -0.0556641f, -0.0322266f, 1.18945f, + -0.191406f, -0.498047f, 0.991211f, -0.231445f, -0.246094f, + 0.8125f, -0.239258f, -0.755859f, 0.853516f, -0.228516f, + -0.821289f, 0.503906f, -0.121094f, -0.795898f, 0.523438f, + -0.220703f, -0.773438f, 0.517578f, -0.274414f, -0.757812f, + 0.539062f, -0.222656f, -0.770508f, 0.396484f, -0.115234f, + -1.2334f, 0.485352f, -0.217773f, -0.94043f, 1.01758f, + -0.202148f, -0.605469f, 0.0546875f, 0.0957031f, -0.639648f, + -0.661133f, 0.245117f, -0.750977f, 0.0615234f, -0.726562f, + -0.879883f, -0.432617f, -1.05859f, -1.29688f, 0.00488281f, + 0.193359f, -0.939453f, 0.209961f, -0.209961f, -0.793945f, + 0.251953f, 0.722656f, -0.447266f, 0.0615234f, 0.855469f, + -0.454102f, -0.0126953f, 0.0527344f, -0.342773f, 0.154297f, + 1.3877f, -0.65918f, 0.133789f, 0.0576172f, -0.233398f, + -0.12207f, 0.46582f, -1.09961f, 0.438477f, -0.641602f, + -0.861328f, 0.197266f, -1.99902f, -0.932617f, 0.234375f, + 0.389648f, -0.792969f, -0.0908203f, 1.66797f, -1.0459f, + 0.0107422f, -0.543945f, -0.80957f, 0.206055f, -0.27832f, + -0.915039f, 0.104492f, -0.301758f, -0.891602f, 0.0556641f, + -0.681641f, -0.901367f, 0.0498047f, -0.461914f, -0.927734f, + -0.0390625f, -0.229492f, -1.04004f, 0.0869141f, -0.435547f, + -1.02148f, 0.0947266f, -0.527344f, -0.979492f, 0.0751953f, + 0.266602f, -0.786133f, -0.0224609f, -0.0947266f, -0.702148f, + -0.00683594f, -0.316406f, -0.698242f, -0.317383f, 1.92578f, + -1.0498f, 0.0273438f, -1.14258f, -0.226562f, 0.233398f, + -0.995117f, -0.9375f, 0.0146484f, -0.223633f, -0.49707f, + -0.0078125f, -1.95703f, -0.847656f, 0.157227f, 0.129883f, + -0.459961f, -0.114258f, 2.0f, -1.13574f, -0.0839844f, + -0.0878906f, -0.783203f, 0.131836f, -0.803711f, -0.90332f, + 0.208984f, -0.365234f, -0.97168f, -0.0322266f, 0.186523f, + -0.924805f, 0.00292969f, -0.272461f, -0.890625f, 0.015625f, + -0.333008f, -0.932617f, 0.180664f, -0.459961f, -0.90918f, + 0.240234f, -0.625977f, -1.1582f, 0.0996094f, -0.170898f, + -1.08887f, -0.00976562f, -0.849609f, -0.430664f, 0.139648f, + -0.308594f, -0.572266f, -0.722656f, 1.83496f, -1.00977f, + 0.387695f, 0.487305f, -0.268555f, 0.0712891f, -0.0136719f, + -1.5332f, 0.290039f, -0.0351562f, -0.861328f, 1.98535f, + -1.16602f, -0.602539f, 0.441406f, 0.175781f, -0.605469f, + -0.831055f, 0.686523f, -0.984375f, 0.494141f, -0.489258f, + -0.895508f, 0.371094f, -0.665039f, -1.14258f, -0.214844f, + -0.140625f, -1.06348f, -0.0996094f, 0.255859f, -0.874023f, + 0.193359f, -0.0947266f, -0.959961f, -0.0966797f, 0.00195312f, + -0.996094f, -0.0117188f, -0.174805f, -0.962891f, 0.106445f, + -0.162109f, -1.04297f, -0.0283203f, -0.306641f, -1.06738f, + -0.0224609f, -0.129883f, -1.03223f, 0.129883f, 0.195312f, + -1.08789f, -0.130859f, 0.649414f, -0.572266f, -0.0136719f, + -0.793945f, -0.382812f, 0.0f, -1.08301f, -0.78125f, + -0.0224609f, -0.339844f, -0.629883f, -0.0947266f, -1.83789f, + -1.01562f, 0.046875f, 0.223633f, -0.808594f, 0.0957031f, + 1.09766f, -0.756836f, -0.0488281f, 0.157227f, -0.59082f, + -0.103516f, 0.929688f, -0.816406f, -0.0322266f, -0.426758f, + -0.868164f, -0.209961f, -1.99902f, -0.986328f, -0.00878906f, + -0.365234f, -0.980469f, 0.0439453f, 0.59375f, -0.994141f, + 0.0253906f, 0.0371094f, -0.970703f, -0.0273438f, -0.120117f, + -0.935547f, 0.00195312f, -0.235352f, -0.952148f, -0.0263672f, + -0.194336f, -0.917969f, -0.0195312f, -0.261719f, -0.928711f, + -0.0234375f, -0.219727f, -0.945312f, 0.0107422f, -0.228516f, + -0.938477f, 0.00683594f, -0.178711f, -0.791016f, 0.03125f, + -0.255859f, -0.789062f, 0.0f, -0.141602f, -0.789062f, + 0.232422f, -0.285156f, -0.788086f, 0.228516f, -0.28125f, + -1.0f, 0.258789f, -0.277344f, -0.999023f, 0.28125f, + -0.25293f, -1.06152f, 0.046875f, -0.421875f, -1.07715f, + 0.0390625f, -0.224609f, -0.923828f, -0.0205078f, -0.335938f, + -0.984375f, -0.0966797f, -0.34668f, -0.990234f, -0.191406f, + -0.301758f, -1.03613f, -0.241211f, -0.37207f, -0.975586f, + -0.267578f, -0.460938f, -1.00977f, -0.320312f, -0.382812f, + -0.913086f, -0.257812f, -0.457031f, -0.925781f, -0.256836f, + -0.34668f, -0.889648f, -0.237305f, -0.393555f, -0.897461f, + -0.239258f, -0.429688f, -0.844727f, -0.21875f, -0.428711f, + -0.87207f, -0.203125f, -0.368164f, -0.84668f, -0.101562f, + -0.423828f, -0.875977f, -0.165039f, -0.363281f, -0.884766f, + -0.0625f, -0.473633f, -0.90332f, -0.078125f, -0.138672f, + -0.918945f, -0.198242f, -0.25f, -0.928711f, -0.138672f, + -0.267578f, -1.08203f, 0.00488281f, -0.575195f, -1.125f, + -0.0332031f, -0.4375f, -0.924805f, 0.078125f, -0.305664f, + -0.93457f, -0.0166016f, -0.475586f, -0.94043f, -0.00488281f, + -0.533203f, -0.956055f, 0.00292969f, -0.391602f, -1.00293f, + 0.0361328f, -0.711914f, -1.0166f, 0.0332031f, -0.448242f, + -0.806641f, -0.21582f, -0.556641f, -0.759766f, -0.0214844f, + -0.626953f, -0.700195f, -0.263672f, -0.308594f, -0.608398f, + -0.236328f, -0.253906f, -0.616211f, -0.378906f, 0.224609f, + -0.498047f, -0.399414f, 0.206055f, -0.516602f, -0.228516f, + 0.743164f, -0.174805f, -0.125f, 0.760742f, -0.0214844f, + -0.135742f, 0.966797f, 0.240234f, 0.0332031f, 1.01855f, + 0.105469f, 0.15332f, 0.950195f, 0.240234f, 0.0732422f, + 1.16895f, 0.245117f, 0.206055f, 0.952148f, 0.273438f, + -0.0390625f, 1.2793f, 0.404297f, 0.303711f, 0.720703f, + 0.369141f, 0.0966797f, 0.918945f, 0.329102f, 0.0390625f, + 0.991211f, 0.397461f, -0.124023f, 0.866211f, 0.210938f, + 0.130859f, 1.08789f, 0.317383f, 0.0537109f, 0.858398f, + 0.245117f, 0.0732422f, 0.741211f, 0.419922f, 0.0302734f, + 0.681641f, 0.485352f, -0.0214844f, 0.641602f, 0.520508f, + -0.129883f, 0.839844f, 0.490234f, 0.00390625f, 0.676758f, + 0.581055f, -0.0146484f, 0.692383f, 0.432617f, -0.0371094f, + 0.807617f, 0.664062f, 0.255859f, 0.216797f, 1.22559f, + 0.0195312f, 1.22168f, 1.2793f, -0.405273f, 1.72559f, + 0.708984f, -0.209961f, 0.579102f, 0.821289f, 0.0380859f, + 0.605469f, 0.80957f, 0.147461f, 0.419922f, 0.869141f, + 0.0390625f, 0.5625f, 0.786133f, 0.0654297f, 0.594727f, + 0.879883f, 0.0166016f, 0.480469f, 0.835938f, 0.00195312f, + 0.414062f, 0.899414f, -0.03125f, 0.344727f, 0.889648f, + 0.0185547f, 0.236328f, 0.932617f, -0.00585938f, 0.255859f, + 0.910156f, 0.0898438f, 0.262695f, 0.945312f, 0.0126953f, + 0.279297f, 0.860352f, 0.0507812f, 0.322266f, 0.913086f, + 0.00195312f, 0.296875f, 0.875977f, 0.0078125f, 0.373047f, + 0.922852f, -0.0244141f, 0.267578f, 0.884766f, 0.0117188f, + 0.347656f, 0.926758f, -0.0371094f, 0.266602f, 0.894531f, + -0.00683594f, 0.345703f, 0.926758f, -0.0478516f, 0.269531f, + 0.887695f, 0.0146484f, 0.360352f, 0.927734f, -0.03125f, + 0.272461f}; +const size_t kAccelerometerFullyOpenTestDataLength = + ARRAY_SIZE(kAccelerometerFullyOpenTestData); + diff --git a/test/motion_angle_data_literals_tablet.c b/test/motion_angle_data_literals_tablet.c new file mode 100644 index 0000000000..456779f457 --- /dev/null +++ b/test/motion_angle_data_literals_tablet.c @@ -0,0 +1,1040 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "util.h" + +/* + * Recopied from + * chromium/src/ash/wm/tablet_mode/accelerometer_test_data_literals.cc + * + * The arrays contain actual accelerator readings. + */ +const float kAccelerometerVerticalHingeTestData[] = { + -0.0766145f, 6.02381f, 7.85298f, -0.268151f, -8.84897f, + -1.3216f, -0.402226f, 5.11401f, 8.77236f, -1.10133f, + -10.1706f, 1.24498f, -1.18752f, 6.40688f, 8.0924f, + -2.60489f, -8.99262f, 2.58574f, 0.632069f, 9.05008f, + 3.61046f, 1.50356f, -9.67257f, 1.93451f, 0.411803f, + 8.81066f, 0.268151f, -0.00957681f, -8.7532f, 2.15478f, + -0.0191536f, 9.49062f, -0.68953f, 0.0383072f, -8.94474f, + 2.99754f, -0.871489f, 9.80665f, 1.53229f, -0.92895f, + -9.88326f, 0.957681f, 0.507571f, 9.19373f, 1.71425f, + 0.287304f, -9.03093f, 0.651223f, 0.363919f, 9.71088f, + 1.18752f, 1.10133f, -10.0556f, 2.98796f, 0.23942f, + 9.39485f, 1.0343f, 0.842759f, -9.73961f, -1.12049f, + 0.172383f, 9.50977f, 1.18752f, 0.0383072f, -9.9503f, + 0.957681f, -0.373495f, 9.96946f, 1.01514f, 0.794875f, + -10.1897f, -1.38864f, -9.50977f, -1.04387f, 0.325611f, + -9.76834f, 1.05345f, -0.679953f, -9.76834f, -0.641646f, + 0.488417f, -9.2895f, 0.316035f, 0.258574f, -9.29908f, + -0.890643f, 0.469264f, -9.33739f, 0.823605f, -0.45011f, + -9.69173f, -1.02472f, 0.536301f, -9.52892f, 0.90022f, + -0.411803f, -9.34696f, -0.890643f, 0.430956f, -9.48104f, + 0.823605f, -0.603339f, -9.7875f, -0.565032f, 0.574608f, + -9.96946f, 0.536301f, -0.699107f, -9.57681f, -0.823605f, + 0.641646f, -9.43316f, 0.593762f, -0.775721f, -9.35654f, + -1.04387f, 0.440533f, -9.77792f, 1.01514f, -0.881066f, + -9.32781f, -1.10133f, 0.306458f, -9.414f, 0.995988f, + 0.0287304f, -9.26077f, -1.01514f, 0.268151f, -9.29908f, + 0.881066f, 0.00957681f, -9.42358f, -0.679953f, 0.201113f, + -9.49062f, 0.488417f, -0.00957681f, -9.47146f, -0.363919f, + 0.191536f, -9.32781f, 0.124498f, 0.124498f, -9.5385f, + -0.0766145f, 0.268151f, -9.32781f, -0.172383f, 0.0574608f, + -9.69173f, 0.21069f, 0.354342f, -9.50019f, -0.306458f, + 0.0383072f, -9.54808f, 0.507571f, 0.363919f, -9.20331f, + -0.775721f, 0.0574608f, -9.59596f, 0.651223f, 0.679953f, + -9.56723f, -0.794875f, -0.0287304f, -9.49062f, 0.794875f, + 0.612916f, -9.06924f, -1.10133f, -0.201113f, -9.20331f, + 1.90578f, 1.46525f, -9.29908f, -2.17394f, 0.603339f, + -0.995988f, 0.0766145f, 9.58638f, -0.344765f, -0.92895f, + -9.1267f, -2.03986f, -0.497994f, 10.477f, -2.49955f, + -0.0957681f, -10.4866f, -1.5706f, -0.23942f, 9.13627f, + -1.92494f, -0.325611f, -9.05008f, -1.5706f, -0.0383072f, + 10.1323f, -1.87705f, -0.632069f, -9.52892f, -1.20668f, + 0.105345f, 9.14585f, -1.13964f, -0.718261f, -9.02135f, + -1.58975f, 0.296881f, 9.50019f, -1.74298f, -1.00556f, + -9.27993f, -1.09176f, 0.23942f, 9.87369f, -1.04387f, + -0.995988f, -9.35654f, -2.08774f, -0.526724f, 9.89284f, + -1.40779f, -0.459687f, -9.50977f, -2.70066f, -1.47483f, + 8.95431f, -1.92494f, 0.526724f, -8.95431f, -1.05345f, + -0.938527f, 9.14585f, -3.02627f, 1.04387f, -8.78193f, + 1.00556f, -3.56257f, 9.0022f, 1.96325f, 2.36547f, + -9.83538f, 1.02472f, -2.59531f, 9.49062f, 1.0726f, + 1.77171f, -9.06924f, 0.0861913f, -2.17394f, 9.21289f, + -0.823605f, 1.52271f, -10.1323f, 0.316035f, -3.09331f, + 10.0844f, 0.555455f, 2.00155f, -9.75877f, 1.51314f, + -2.24097f, 9.61511f, 0.670376f, 1.35033f, -9.77792f, + 0.986411f, -3.36146f, 9.59596f, 1.77171f, 2.29843f, + -9.48104f, 1.4461f, -2.8922f, 8.88728f, 1.84832f, + 2.38462f, -9.19373f, 1.75256f, -2.6432f, 9.89284f, + 1.38864f, 2.19309f, -9.20331f, 9.98861f, -0.718261f, + -0.746991f, 10.6111f, 0.632069f, 0.948104f, 8.99262f, + -0.258574f, 0.517148f, 9.10754f, 0.21069f, -1.21625f, + 9.90242f, -0.162806f, 0.0287304f, 10.5249f, -0.0861913f, + 0.229843f, 9.83538f, 0.0f, 0.181959f, 10.4291f, + -0.172383f, -0.47884f, 9.43316f, 0.201113f, -0.268151f, + 9.76834f, -0.134075f, -0.354342f, 10.0556f, 1.0726f, + 0.277727f, 9.93115f, -1.05345f, 0.363919f, 9.79707f, + 0.651223f, 0.699107f, 10.0173f, -0.775721f, 0.0670376f, + 9.49062f, 0.296881f, 0.919373f, 10.1801f, -0.68953f, + -0.651223f, 9.70131f, 1.00556f, 0.248997f, 9.42358f, + -0.995988f, 1.45567f, 9.13627f, -1.35033f, 2.36547f, + 9.40442f, 0.976834f, -4.34787f, 8.79151f, -0.90022f, + 1.56102f, 8.92558f, 0.6608f, -2.3942f, 9.59596f, + -0.363919f, 1.40779f, 9.05966f, 0.181959f, -2.1452f, + 9.48104f, -0.612916f, 2.36547f, 9.03093f, 0.21069f, + -2.18351f, 9.74919f, -1.5706f, 2.07817f, 8.85855f, + 1.04387f, -2.30801f, 8.81066f, -1.66636f, 3.4285f, + 8.52336f, 0.440533f, -4.52983f, 9.27993f, -2.19309f, + 2.2697f, 8.83939f, 0.90022f, -2.48039f, 9.1267f, + -2.77727f, 1.4461f, 8.78193f, 0.814029f, -4.24253f, + 8.90643f, -3.39977f, 0.651223f, 8.86812f, 1.08218f, + -2.34632f, 9.42358f, -3.26569f, 0.402226f, 8.94474f, + 0.526724f, -2.65278f, 9.38527f, -3.21781f, 0.0f, + 9.20331f, 0.143652f, -2.71024f, 9.44273f, -2.8922f, + -0.497994f, 9.35654f, 0.105345f, -2.78685f, 9.09797f, + -3.4285f, -1.00556f, 8.81066f, 0.785298f, -3.84988f, + 9.31823f, -3.09331f, -1.4461f, 8.68616f, 0.555455f, + -3.27527f, 9.414f, -2.5187f, -1.79086f, 8.59997f, + 0.766145f, -3.47638f, 9.0022f, -2.67193f, -2.43251f, + 8.77236f, 1.39821f, -2.85389f, 8.25521f, -3.29442f, + -2.46124f, 8.15944f, 1.09176f, -3.51469f, 8.72447f, + -2.69108f, -2.48997f, 8.91601f, 0.881066f, -3.66792f, + 8.92558f, -2.33674f, -2.31759f, 8.84897f, 1.06303f, + -3.055f, 8.92558f, -2.49955f, -2.29843f, 8.81066f, + 0.919373f, -2.56658f, 9.31823f, -2.78685f, -1.81959f, + 9.06924f, 0.411803f, -2.86347f, 9.38527f, -2.78685f, + -1.70467f, 9.25119f, 0.335188f, -4.67348f, 9.165f, + -3.9648f, -0.622492f, 8.65743f, 0.248997f, -3.055f, + 9.414f, -3.67749f, 0.0287304f, 8.82982f, 0.852336f, + -2.50912f, 8.82024f, -3.47638f, 0.201113f, 8.98304f, + 1.06303f, -3.33273f, 8.89685f, -3.64876f, 0.718261f, + 8.91601f, 1.52271f, -2.70066f, 8.95431f, -3.56257f, + 1.35991f, 9.05008f, 1.67594f, -3.16992f, 9.08839f, + -3.16035f, 2.03028f, 9.07881f, 1.64721f, -3.04542f, + 8.91601f, -3.11246f, 2.52828f, 8.88728f, 2.07817f, + -1.99198f, 9.1267f, -2.806f, 0.162806f, 9.1267f, + 2.806f, -2.07817f, 9.14585f, -2.31759f, 2.16436f, + 8.8777f, 2.19309f, -1.88663f, 9.88326f, -2.5187f, + 1.94409f, 9.1267f, 2.46124f, -2.806f, 7.64229f, + -6.0717f, 2.9305f, 8.07325f, 5.64074f, -2.63362f, + 4.29999f, -7.9679f, 0.622492f, 4.71179f, 7.74764f, + -3.41892f, 4.42448f, -8.99262f, 1.13964f, 3.98395f, + 8.47547f, -1.9824f, -0.699107f, -9.46189f, -0.794875f, + -0.593762f, 9.24162f, -2.74854f, 1.88663f, -8.8777f, + -0.153229f, 0.861913f, 8.98304f, -2.48039f, -1.52271f, + -9.32781f, -3.39977f, 0.0574608f, 8.99262f, -5.88974f, + -0.746991f, -3.93607f, -8.01579f, -1.17795f, 8.41801f, + -4.17549f, -2.30801f, -2.61447f, -9.44273f, -2.3942f, + 7.46991f, -5.01825f, -1.0343f, 1.89621f, -8.8777f, + -0.890643f, 8.65743f, -4.31914f, -2.16436f, 1.49398f, + -9.69173f, -1.37906f, 9.05008f, -2.43251f, -1.87705f, + 0.402226f, -8.95431f, -2.01113f, 8.72447f, -3.54342f, + -0.344765f, -2.95923f, -8.42759f, -0.92895f, 8.99262f, + -2.34632f, -0.392649f, -6.70376f, -6.55054f, -0.919373f, + 8.80109f, -2.35589f, -0.0766145f, -8.8777f, -5.89931f, + 0.890643f, 9.7875f, 2.24097f, -0.536301f, -8.08282f, + -4.88417f, -0.191536f, 9.21289f, 1.16837f, -0.440533f, + -7.93917f, -4.81713f, -0.890643f, 9.08839f, 1.75256f, + -1.20668f, -9.414f, -2.57616f, -0.708684f, 9.50977f, + 1.40779f, -1.14922f, -9.8258f, -1.24498f, -0.584185f, + 9.63427f, 0.727837f, -0.181959f, -9.25119f, -2.31759f, + -0.0574608f, 9.64384f, -0.612916f, 1.21625f, -9.50977f, + -1.16837f, 0.756568f, 9.45231f, -0.316035f, 1.21625f, + -10.5441f, -0.45011f, 1.5706f, 9.7875f, -1.22583f, + 9.07881f, 0.0766145f, -2.34632f, 9.26077f, 0.316035f, + 4.28083f, 8.72447f, 0.584185f, -3.27527f, 8.39886f, + 0.47884f, 3.98395f, 9.26077f, 2.35589f, -2.98796f, + 9.52892f, -1.61848f, 3.73495f, 8.91601f, 2.98796f, + -3.36146f, 9.7875f, -2.31759f, 3.60088f, 8.86812f, + 3.32315f, -3.62961f, 9.76834f, -2.46124f, 2.72939f, + 2.31759f, 10.2089f, -2.3942f, 0.995988f, -8.68616f, + 5.5737f, 1.13006f, 9.04051f, -2.09732f, 1.26414f, + -8.51378f, 4.40533f, 0.852336f, 9.91199f, -2.07817f, + 0.622492f, -9.18416f, 4.29999f, 0.229843f, 10.0269f, + -1.08218f, 0.220267f, -9.40442f, 4.40533f, 0.0766145f, + 9.54808f, -1.89621f, 0.967257f, -9.05966f, 3.92649f, + 0.335188f, 9.62469f, -0.497994f, 0.430956f, -9.71088f, + 4.02226f, 0.718261f, 9.63427f, 1.59933f, 0.383072f, + -8.88728f, 3.24654f, 0.42138f, 8.71489f, 2.55701f, + 0.68953f, -9.64384f, 1.67594f, 1.0726f, -7.0198f, + 7.20176f, 0.641646f, -9.17458f, 4.18506f, -0.402226f, + -2.46124f, 8.78193f, -0.0383072f, -8.31267f, 4.03184f, + 0.23942f, 2.27928f, 10.4675f, -0.517148f, -9.47146f, + 4.14676f, -1.37906f, 9.59596f, -4.07972f, 3.45723f, + -9.663f, 1.71425f, -0.134075f, 6.95276f, -5.80354f, + 0.268151f, -5.38217f, 7.03895f, 0.00957681f, 5.20978f, + -7.75721f, -0.047884f, -2.83473f, 8.53294f, -0.306458f, + 1.64721f, -8.64786f, 0.766145f, 0.162806f, 8.84897f, + -0.191536f, -2.58574f, -9.19373f, 0.0f, 4.05099f, + 8.52336f, -0.0383072f, -3.10289f, -9.17458f, 0.45011f, + 4.11803f, 9.19373f, 0.0957681f, -2.47082f, -9.61511f, + 0.804452f, 3.98395f, 8.52336f, 0.114922f, 4.00311f, + -8.76278f, 0.699107f, 4.53941f, 8.28394f, -0.0383072f, + 7.95833f, -6.57927f, -0.124498f, 3.52426f, 10.1035f, + -0.229843f, 6.68461f, -6.2345f, -0.153229f, 3.04542f, + 9.59596f, -0.344765f, 7.47949f, -7.29753f, 0.114922f, + 3.90734f, 9.03093f, -0.383072f, 7.57525f, -7.20176f, + -0.172383f, 3.70622f, 9.8258f, -0.335188f, 7.21134f, + -6.7325f, -0.172383f, 2.71024f, 10.2855f, -0.114922f, + 6.608f, -7.41245f, -0.201113f, 1.87705f, 9.39485f, + 1.37906f, -0.0670376f, -9.47146f, 1.1971f, 1.8579f, + 9.49062f, 0.842759f, -1.63763f, -8.95431f, 0.679953f, + 2.8922f, 9.1267f, 1.43652f, -1.58017f, -9.01178f, + 0.890643f, 3.66792f, 9.22246f, 0.746991f, -1.18752f, + -9.04051f, 2.12605f, 2.72939f, 9.52892f, 3.79242f, + 1.48441f, -9.04051f, 4.57771f, -0.785298f, 9.61511f, + 4.61602f, 1.21625f, -8.4659f, 4.94163f, -0.574608f, + 8.4659f, 4.67348f, 1.48441f, -8.23605f, 4.86502f, + -0.852336f, 9.24162f, 5.12359f, 0.92895f, -9.03093f, + 5.84185f, -0.430956f, 8.92558f, 5.38217f, 0.440533f, + -8.37971f, 6.72292f, -0.220267f, 8.02536f, 6.608f, + 1.6089f, -6.30154f, 6.33985f, 0.277727f, 6.58884f, + 9.85453f, 1.39821f, 0.153229f, 10.0844f, -1.46525f, + 0.45011f, 9.68215f, 1.90578f, -0.0766145f, 9.98861f, + -1.96325f, 0.536301f, 9.90242f, 2.20267f, 0.143652f, + 9.94073f, -2.20267f, 0.191536f, 9.46189f, 1.95367f, + 0.0957681f, 9.74919f, -2.06859f, 0.296881f, 9.30866f, + 1.64721f, 0.153229f, 9.84496f, -1.92494f, 0.574608f, + 7.38372f, 0.488417f, 6.76123f, 8.83939f, -1.37906f, + -3.11246f, 9.2895f, 0.153229f, -0.976834f, 9.86411f, + -0.0574608f, -0.957681f, 9.26077f, 0.833182f, 2.07817f, + 9.26077f, -0.938527f, -0.957681f, 10.0269f, -0.354342f, + 2.43251f, 9.84496f, 0.153229f, -0.957681f, 0.986411f, + -8.74362f, 1.34075f, 2.09732f, 9.165f, -1.84832f, + -1.25456f, -10.228f, 2.19309f, 0.42138f, 9.73004f, + -1.23541f, -1.49398f, -10.1706f, 0.172383f, -1.22583f, + 10.2089f, -0.593762f, -2.2314f, -9.663f, -0.526724f, + -1.6089f, 9.65342f, 0.593762f, -2.38462f, -9.165f, + -1.4461f, -2.46124f, 9.42358f, 0.430956f, -2.38462f, + -9.73004f, 0.0383072f, -2.31759f, 9.57681f, -0.47884f, + -2.44209f, -9.5385f, -0.746991f, -2.32716f, 9.58638f, + 0.612916f, -2.34632f, -10.1418f, -1.0726f, -1.92494f, + 9.90242f, 0.890643f, -2.84431f, 9.38527f, -2.38462f, + -1.69509f, -9.50977f, 2.73897f, -3.88818f, 7.9296f, + -2.40378f, -1.5706f, -8.4659f, 2.62405f, -8.91601f, + -2.98796f, 0.497994f, -8.97347f, 2.79643f, 0.373495f, + -10.3717f, 1.02472f, -0.105345f, -10.0461f, -1.02472f, + 0.679953f, -4.89375f, 8.17859f, 0.0766145f, -6.12916f, + -7.61356f, 0.172383f, -6.4835f, 7.5561f, -0.363919f, + -6.09085f, -7.46991f, 0.699107f, -6.19619f, 7.62314f, + -0.248997f, -5.78439f, -7.52737f, 1.55144f, -6.33985f, + 7.50822f, -0.45011f, -5.6982f, -7.48906f, 1.48441f, + -6.36858f, 7.46991f, -0.373495f, -5.72693f, -7.44118f, + 1.63763f, -6.33027f, 7.8434f, -0.316035f, -6.54096f, + -7.57525f, 1.37906f, -6.69419f, 7.52737f, -0.258574f, + -6.41646f, -7.37414f, 1.21625f, -6.62715f, 7.61356f, + -0.392649f, -6.24408f, -7.48906f, 1.23541f, -6.18662f, + 7.60398f, -0.201113f, -5.9472f, -7.45076f, 1.39821f, + -6.14831f, 7.86256f, -0.584185f, -6.26323f, -7.50822f, + 1.6089f, -5.26724f, 8.74362f, -0.153229f, -4.57771f, + -8.41801f, 0.6608f, -3.56257f, 8.82024f, 0.114922f, + -2.86347f, -8.82982f, 0.948104f, -2.53785f, 9.27035f, + 0.23942f, -2.33674f, -9.29908f, 1.02472f, -2.12605f, + 9.67257f, 0.354342f, -2.1452f, -9.45231f, 0.335188f, + -1.71425f, 9.36612f, 0.287304f, -1.41737f, -9.27035f, + -0.229843f, -2.65278f, 8.94474f, -0.306458f, -0.737414f, + -9.414f, 0.172383f, -8.72447f, 5.46836f, 0.325611f, + -10.2663f, -1.80044f, -0.143652f, -9.35654f, -0.794875f, + -0.756568f, -10.1801f, 1.0343f, 1.20668f, -9.54808f, + -0.986411f, -0.766145f, -9.165f, 0.890643f, 1.13964f, + -8.92558f, -0.555455f, -1.22583f, -9.68215f, 0.976834f, + 0.344765f, -9.14585f, 4.05099f, -1.31202f, -9.57681f, + 0.68953f, 1.51314f, -9.54808f, 0.0957681f, 1.45567f, + -9.18416f, -0.229843f, -0.6608f, -9.71088f, 0.047884f, + 1.35033f, -9.87369f, 0.0383072f, -0.909797f, -8.57124f, + 1.1971f, 3.86903f, -9.76834f, -1.13964f, -2.2697f, + -9.38527f, 0.890643f, 2.74854f, -9.38527f, -1.20668f, + -2.3942f, -8.74362f, 1.4461f, 3.45723f, -8.99262f, + -1.72383f, -2.56658f, -9.48104f, 1.13006f, 2.98796f, + -8.80109f, -1.76213f, -2.52828f, -9.69173f, 1.15879f, + 2.3942f, -8.98304f, -1.68552f, -1.71425f, -8.93516f, + 1.25456f, 3.26569f, -9.61511f, -1.38864f, -2.46124f, + -9.37569f, 1.4461f, 3.40934f, -8.83939f, -2.1069f, + -2.42293f, -9.165f, 1.61848f, 2.9305f, -9.165f, + -2.04944f, -2.50912f, -9.31823f, 0.823605f, 0.0f, + -9.48104f, -0.909797f, 0.497994f, -9.30866f, 1.0343f, + -0.775721f, -9.01178f, -1.15879f, 0.814029f, -9.25119f, + 0.948104f, -0.00957681f, -8.80109f, -1.16837f, 0.737414f, + -9.62469f, 1.39821f, -0.248997f, -9.39485f, -1.45567f, + 0.957681f, -9.57681f, 1.79086f, -0.296881f, -9.50019f, + -1.81002f, 0.842759f, -10.0652f, 1.45567f, -0.248997f, + -9.05966f, -1.61848f, 0.871489f, -9.69173f, 1.56102f, + -0.459687f, -8.91601f, -1.77171f, 0.890643f, -9.48104f, + -0.47884f, -0.497994f, -9.48104f, 0.296881f, 0.632069f, + -10.094f, 0.191536f, -0.248997f, -10.4387f, -0.0670376f, + 0.6608f, -8.08282f, 4.95121f, -1.31202f, -8.17859f, + -4.70221f, 1.80044f, -7.9296f, 5.04698f, -0.536301f, + -8.38928f, -4.80756f, 0.68953f, -8.10198f, 5.23851f, + -0.507571f, -7.97748f, -5.17148f, 1.21625f, -8.37013f, + 5.22894f, -0.497994f, -8.01579f, -5.23851f, 0.976834f, + -8.20732f, 5.20978f, -0.335188f, -7.99663f, -5.19063f, + 0.995988f, -8.26478f, 5.02782f, -0.0957681f, -8.0924f, + -5.0374f, 0.948104f, -8.36055f, 5.02782f, -0.268151f, + -8.02536f, -5.09486f, 0.995988f, -8.28394f, 5.01825f, + -0.191536f, -8.20732f, -5.06613f, 0.861913f, -8.37971f, + 5.06613f, -0.325611f, -8.20732f, -5.00867f, 0.92895f, + -8.3414f, 5.04698f, -0.124498f, -8.13071f, -5.14275f, + 0.852336f, -8.29351f, 5.07571f, -0.0766145f, -8.07325f, + -5.10444f, 0.976834f, -8.47547f, 4.77883f, -0.392649f, + -8.13071f, -4.86502f, 1.05345f, -8.60955f, 2.71981f, + 2.79643f, -9.25119f, 1.31202f, -0.306458f, -9.14585f, + 1.02472f, 1.51314f, -8.64786f, -1.33118f, -1.13964f, + -9.35654f, 1.01514f, 2.31759f, -8.72447f, -1.49398f, + -1.72383f, -9.73004f, 1.58017f, 2.7677f, -9.73004f, + -1.84832f, -1.93451f, -9.15543f, 1.33118f, 2.20267f, + -8.93516f, -1.64721f, -0.995988f, -9.45231f, 0.727837f, + 1.81959f, -9.51935f, -0.909797f, -2.78685f, -9.93115f, + 0.191536f, 0.890643f, -9.84496f, -0.23942f, -0.976834f, + -9.61511f, -0.21069f, 0.517148f, -8.80109f, -0.153229f, + -0.430956f, -9.50019f, 0.373495f, 0.948104f, -9.27035f, + -0.555455f, -0.344765f, -9.57681f, 0.172383f, 0.881066f, + -9.43316f, -0.335188f, -0.756568f, -9.50977f, -0.0191536f, + 0.497994f, -9.42358f, -0.181959f, -0.737414f, -9.92157f, + 0.306458f, 0.545878f, -10.0173f, -0.248997f, -0.134075f, + -9.79707f, 0.0287304f, 0.536301f, -9.71088f, -0.162806f, + -0.181959f, -9.60554f, -0.047884f, 0.804452f, -9.39485f, + -0.181959f, -0.593762f, -9.64384f, -0.047884f, 0.612916f, + -9.58638f, -0.201113f, -0.363919f, -9.56723f, 0.248997f, + 0.411803f, -10.1706f, -0.316035f, -0.526724f, -9.63427f, + 0.459687f, 1.09176f, -9.71088f, -0.603339f, -0.23942f, + -9.62469f, -0.0383072f, 0.68953f, -9.50019f, -0.0861913f, + -1.13006f, -9.80665f, -0.134075f, 0.335188f, -9.40442f, + -0.114922f, -0.354342f, -9.34696f, 0.153229f, 1.54187f, + -9.10754f, -0.526724f, -1.00556f, -9.7875f, 0.0287304f, + 0.775721f, -9.58638f, -0.172383f, -0.641646f, -9.60554f, + 0.258574f, 0.919373f, -9.31823f, -0.402226f, -0.603339f, + -9.5385f, -0.0766145f, 0.92895f, -9.09797f, -0.220267f, + -0.354342f, -9.61511f, -0.335188f, 0.316035f, -9.27993f, + 0.0766145f, -0.47884f, -9.40442f, 0.23942f, 0.6608f, + -9.40442f, -0.335188f, -0.603339f, -9.85453f, -0.0766145f, + 0.459687f, -9.54808f, -0.0670376f, -0.287304f, -9.63427f, + -0.344765f, 0.296881f, -9.32781f, 0.0574608f, -0.220267f, + -9.71088f, 0.181959f, 0.354342f, -9.95988f, -0.248997f, + 0.201113f, -9.8258f, -0.0383072f, 0.833182f, -9.83538f, + -0.047884f, -0.670376f, -9.44273f, 0.0670376f, 0.6608f, + -8.90643f, -0.392649f, -0.354342f, -9.54808f, 0.0957681f, + 0.90022f, -9.05008f, -0.411803f, -0.335188f, -9.52892f, + 0.201113f, 1.12049f, -9.23204f, -0.459687f, -0.842759f, + -9.61511f, -0.162806f, 0.248997f, -9.87369f, 0.124498f, + -1.12049f, -9.70131f, -0.0383072f, 0.670376f, -9.50977f, + -0.162806f, -0.890643f, -9.15543f, 0.488417f, 1.51314f, + -8.94474f, -0.852336f, -0.90022f, -9.60554f, -0.23942f, + 0.622492f, -9.35654f, 0.0f, -0.948104f, -9.64384f, + -0.191536f, 1.21625f, -9.2895f, -0.0766145f, -0.785298f, + -9.55765f, -0.306458f, 0.555455f, -9.73004f, 0.172383f, + -0.603339f, -9.663f, -0.306458f, 0.383072f, -9.63427f, + 0.172383f, -0.354342f, -9.70131f, -0.373495f, 0.68953f, + -9.69173f, 0.181959f, -1.0343f, -9.47146f, -0.526724f, + 0.823605f, -9.23204f, 0.220267f, -1.36948f, -9.36612f, + -0.0670376f, 1.05345f, -8.91601f, -0.316035f, -0.814029f, + -9.93115f, -0.268151f, 1.58017f, -10.0748f, 0.143652f, + -1.26414f, -9.87369f, 0.047884f, 2.09732f, -9.39485f, + -0.344765f, -1.48441f, -9.48104f, 0.967257f, 0.699107f, + -9.34696f, -1.15879f, -0.105345f, -9.414f, 0.852336f, + 0.756568f, -9.62469f, -1.0343f, -0.114922f, -9.80665f, + 0.814029f, 0.737414f, -9.23204f, -1.0726f, -0.23942f, + -9.47146f, 0.890643f, 0.392649f, -9.24162f, -1.08218f, + -0.229843f, -9.42358f, 0.775721f, 0.325611f, -9.21289f, + -0.986411f, -0.201113f, -9.52892f, 1.79086f, 2.04944f, + -9.32781f, -2.15478f, -1.39821f, -8.86812f, 2.07817f, + 2.2697f, -8.91601f, -2.24097f, -1.7334f, -9.34696f, + 1.68552f, 2.29843f, -8.78193f, -2.19309f, -1.58017f, + -9.62469f, 1.7334f, 2.35589f, -9.165f, -2.18351f, + -1.63763f, -9.99819f, 2.28886f, 2.27928f, -10.0365f, + -2.36547f, -1.69509f, -10.726f, -0.488417f, -0.363919f, + -9.25119f, 0.976834f, -3.03585f, -9.31823f, 1.41737f, + 2.09732f, -8.8777f, -1.76213f, 0.651223f, -9.71088f, + 1.00556f, 2.28886f, -9.36612f, -1.13006f, -1.53229f, + -9.87369f, 0.814029f, 1.46525f, -9.92157f, -0.919373f, + -0.957681f, -9.35654f, 0.0191536f, 1.09176f, -9.9503f, + -0.0574608f, -1.0726f, -9.50977f, -0.181959f, 0.603339f, + -8.90643f, -0.172383f, -0.0766145f, -9.85453f, -0.287304f, + 0.833182f, -9.76834f, 0.181959f, -0.402226f, -9.50977f, + -0.0957681f, 0.287304f, -9.7875f, 0.0191536f, -0.47884f, + -9.58638f, 0.047884f, 0.344765f, -9.44273f, -0.181959f, + -0.0861913f, -9.57681f, 0.0287304f, 0.555455f, -9.42358f, + -0.220267f, 0.0f, -9.73004f, -0.229843f, 0.21069f, + -9.51935f, 0.0670376f, -0.21069f, -10.0173f, -0.00957681f, + 0.105345f, -9.68215f, -0.0670376f, -0.124498f, -9.50977f, + 0.114922f, 0.287304f, -9.42358f, -0.229843f, 0.0957681f, + -9.57681f, -0.181959f, 0.181959f, -9.32781f, -0.047884f, + 0.105345f, -10.0078f, -0.258574f, -2.19309f, -9.70131f, + 0.248997f, 1.64721f, -9.55765f, -0.612916f, 0.105345f, + -8.76278f, 0.191536f, 0.919373f, -9.414f, -0.0383072f, + -0.641646f, -9.74919f, 0.0670376f, 0.814029f, -9.80665f, + -0.134075f, -0.804452f, -9.44273f, 0.0957681f, 1.01514f, + -9.71088f, 0.220267f, -0.584185f, -9.32781f, -0.248997f, + 0.957681f, -9.76834f, 0.0766145f, -0.440533f, -9.414f, + -0.21069f, 0.708684f, -9.73004f, 0.0574608f, -0.593762f, + -9.27035f, -0.172383f, 0.756568f, -9.663f, 0.287304f, + 0.172383f, -9.10754f, -0.507571f, 0.718261f, -9.49062f, + 0.229843f, 0.0574608f, -9.50977f, -0.402226f, 0.162806f, + -10.1418f, -0.0670376f, -0.411803f, -9.32781f, -0.0383072f, + 0.804452f, -9.57681f, 0.229843f, -0.21069f, -9.57681f, + -0.296881f, 0.469264f, -9.54808f, 2.03986f, 0.641646f, + -10.0269f, -1.00556f, -0.45011f, -8.77236f, 0.402226f, + 0.718261f, -9.37569f, -0.047884f, -0.344765f, -9.98861f, + -1.48441f, 0.047884f, -9.33739f, 1.33118f, -0.23942f, + -9.30866f, -0.68953f, 0.220267f, -10.0556f, 0.708684f, + 0.201113f, -7.12514f, 6.70376f, 0.105345f, -6.81869f, + -6.33985f, 0.92895f, -8.70532f, 5.46836f, 0.220267f, + -8.41801f, -5.36301f, 0.0574608f, -9.84496f, 3.82115f, + 0.248997f, -9.9503f, -3.5913f, -0.229843f, -10.3238f, + 3.09331f, -0.0574608f, -9.71088f, -2.66235f, 0.6608f, + -8.68616f, 1.53229f, 0.641646f, -9.17458f, -1.22583f, + 0.507571f, -10.0078f, -1.09176f, -0.622492f, -10.0078f, + 1.3216f, -0.497994f, -9.46189f, -1.17795f, 0.0766145f, + -9.23204f, 1.01514f, 0.248997f, -9.38527f, -1.94409f, + 0.296881f, -9.21289f, 1.79086f, -0.21069f, -9.10754f, + -2.12605f, 0.440533f, -9.09797f, 1.82917f, 0.172383f, + -9.02135f, -1.54187f, 0.047884f, -9.35654f, 1.54187f, + 0.047884f, -8.99262f, -1.66636f, -0.0191536f, -9.29908f, + 1.49398f, 0.344765f, -9.663f, -1.65679f, -0.593762f, + -9.29908f, 1.58975f, 0.296881f, -9.69173f, -1.1971f, + -0.153229f, -9.5385f, 1.16837f, 0.114922f, -9.80665f, + -1.22583f, 0.268151f, -9.43316f, 1.08218f, -0.114922f, + -9.74919f, -1.27372f, 0.775721f, -9.38527f, 1.11091f, + -0.440533f, -9.49062f, -1.20668f, 0.574608f, -9.37569f, + 0.995988f, -0.536301f, -9.33739f, -1.06303f, 0.871489f, + -9.5385f, 0.948104f, -0.699107f, -9.44273f, -0.976834f, + 0.871489f, -9.72046f, 0.890643f, -0.746991f, -9.87369f, + -1.33118f, 0.488417f, -9.46189f, 1.13006f, 0.248997f, + -8.92558f, -1.0343f, -0.134075f, -9.07881f, 1.04387f, + 0.737414f, -8.82982f, -0.814029f, -1.46525f, -9.20331f, + 1.06303f, 0.105345f, -9.94073f, -0.957681f, -0.153229f, + -9.35654f, 0.948104f, -0.603339f, -9.31823f, 1.34075f, + 2.03028f, -8.82024f, -1.76213f, -0.861913f, -8.42759f, + -0.440533f, 4.67348f, -8.94474f, 0.201113f, -5.08528f, + -7.51779f, -0.948104f, 5.77481f, -8.15944f, 0.833182f, + -5.63116f, -9.69173f, -0.948104f, 2.36547f, -10.1801f, + 0.679953f, -2.2314f, -9.11712f, 1.72383f, 0.574608f, + -8.83939f, -2.03986f, -0.0287304f, -9.31823f, 1.92494f, + 0.804452f, -9.79707f, -2.03028f, -0.517148f, -8.3414f, + 2.68151f, 1.9824f, -8.24563f, -2.71024f, -2.1069f, + -9.15543f, 2.41336f, 2.28886f, -7.49864f, -3.03585f, + -3.66792f, -8.59997f, 2.00155f, 2.59531f, -9.07881f, + -2.11647f, -2.52828f, -9.64384f, 1.89621f, 2.11647f, + -9.36612f, -2.16436f, -1.83875f, -9.01178f, 1.69509f, + 2.19309f, -9.17458f, -1.94409f, -1.56102f, -9.27993f, + 1.49398f, 2.28886f, -9.51935f, -1.72383f, -2.2697f, + -9.10754f, 1.52271f, 2.43251f, -8.84897f, -2.02071f, + -2.02071f, -9.08839f, 1.51314f, 2.55701f, -9.11712f, + -1.8579f, -2.21224f, -9.09797f, 1.47483f, 2.52828f, + -9.13627f, -1.8579f, -2.09732f, -9.06924f, 1.46525f, + 2.43251f, -8.92558f, -1.90578f, -2.09732f, -9.19373f, + 1.50356f, 2.3942f, -9.21289f, -1.82917f, -2.26013f, + -8.5904f, 2.16436f, 2.33674f, -8.51378f, -2.36547f, + -1.83875f, -8.25521f, 3.62961f, 2.03028f, -7.91044f, + -3.74453f, -1.12049f, -8.61913f, 3.84988f, 1.62806f, + -8.83939f, -3.97437f, -1.26414f, -8.23605f, 4.52025f, + 2.13563f, -8.83939f, -4.35745f, -1.14922f, -7.4316f, + 6.02381f, 2.34632f, -7.33583f, -5.84185f, -1.79086f, + -6.63673f, 6.67503f, 2.37505f, -6.44519f, -6.359f, + -1.62806f, -6.06212f, 7.51779f, 2.38462f, -6.25365f, + -7.23049f, -1.80044f, -5.25767f, 8.64786f, 2.09732f, + -4.32872f, -8.68616f, -2.03986f, -4.39575f, 7.97748f, + 2.00155f, -3.77326f, -8.42759f, -0.775721f, -4.64475f, + 8.32224f, 1.61848f, -4.29999f, -8.60955f, -0.622492f, + -4.7501f, 8.5042f, 1.81959f, -4.79798f, -8.4659f, + -1.08218f, -4.64475f, 8.37013f, 1.92494f, -4.53941f, + -8.5904f, -1.13964f, -4.77883f, 8.73405f, 2.11647f, + -3.33273f, -9.414f, -1.37906f, -9.73004f, -0.92895f, + 0.603339f, -9.67257f, 0.852336f, -1.11091f, -9.87369f, + -0.047884f, 0.153229f, -9.98861f, 0.0670376f, -0.440533f, + -9.61511f, 0.651223f, 0.181959f, -9.5385f, -0.785298f, + 0.612916f, -9.50019f, 0.335188f, -0.23942f, -8.88728f, + -0.536301f, 0.00957681f, -9.95988f, 0.670376f, 0.134075f, + -9.29908f, -0.881066f, 0.0861913f, -9.67257f, 0.488417f, + 0.220267f, -9.62469f, -0.545878f, 0.306458f, -9.58638f, + 0.344765f, 0.306458f, -9.165f, -0.574608f, 0.0287304f, + -9.65342f, 0.143652f, 0.287304f, -10.0844f, -0.191536f, + 0.440533f, -9.40442f, 0.679953f, 0.21069f, -9.37569f, + -0.881066f, 0.402226f, -9.79707f, 1.34075f, 0.785298f, + -10.1801f, -1.13964f, -0.220267f, -9.14585f, 2.29843f, + 0.794875f, -9.36612f, -2.24097f, -0.316035f, -8.83939f, + 3.37104f, 0.727837f, -8.70532f, -3.25611f, 0.0766145f, + -8.24563f, 4.42448f, 0.814029f, -8.14029f, -4.27126f, + -0.392649f, -7.63272f, 5.38217f, 0.957681f, -7.05811f, + -5.5737f, -0.0383072f, -7.57525f, 5.93762f, 1.29287f, + -7.02938f, -6.02381f, -0.651223f, -7.46991f, 6.18662f, + 1.76213f, -7.35499f, -6.21535f, -1.37906f, -7.35499f, + 6.38773f, 1.47483f, -7.40287f, -6.27281f, -0.967257f, + -7.02938f, 6.79953f, 1.30245f, -6.95276f, -6.68461f, + -0.890643f, -6.42604f, 7.32626f, 1.09176f, -6.4835f, + -7.19218f, -0.354342f, -6.41646f, 7.57525f, 0.938527f, + -6.11958f, -7.50822f, -0.229843f, -5.88016f, 7.71891f, + 0.794875f, -5.17148f, -7.70933f, 0.105345f, -5.74608f, + 7.85298f, 0.727837f, -5.09486f, -7.72848f, 0.114922f, + -5.9472f, 7.83383f, 0.727837f, -5.91847f, -7.65187f, + -0.0287304f, -5.97593f, 7.77637f, 0.718261f, -6.01423f, + -7.63272f, 0.191536f, -5.95677f, 7.78594f, 0.526724f, + -5.73651f, -7.6806f, 0.507571f, -5.95677f, 7.89129f, + 0.459687f, -5.66947f, -7.74764f, 0.517148f, -5.93762f, + 7.85298f, 0.430956f, -5.81312f, -7.69018f, 0.459687f, + -5.9855f, 7.78594f, 0.469264f, -5.86101f, -7.65187f, + 0.517148f, -6.03339f, 7.82425f, 0.411803f, -5.75566f, + -7.67102f, 0.526724f, -6.00466f, 7.79552f, 0.402226f, + -5.68862f, -7.67102f, 0.42138f, -6.00466f, 7.79552f, + 0.497994f, -5.60243f, -7.69975f, 0.201113f, -6.13873f, + 7.65187f, 0.42138f, -5.3247f, -7.62314f, 0.172383f, + -6.608f, 7.40287f, 0.258574f, -5.77481f, -7.46991f, + 0.593762f, -7.18261f, 6.82826f, 0.134075f, -6.75165f, + -6.71334f, 0.526724f, -7.88171f, 5.79397f, -0.181959f, + -7.19218f, -5.70778f, 1.54187f, -8.4659f, 4.54898f, + -0.842759f, -7.90087f, -4.30956f, 1.95367f, -10.5728f, + 0.632069f, -1.96325f, -9.84496f, 0.153229f, 1.82917f, + -9.27993f, -0.0861913f, -0.92895f, -9.31823f, 0.047884f, + 1.46525f, -9.93115f, 0.325611f, -1.1971f, -10.2759f, + -0.114922f, 2.3942f, -9.59596f, -0.0766145f, -0.316035f, + -9.97903f, 0.363919f, -1.13964f, -9.04051f, 2.50912f, + 1.31202f, -8.67659f, -2.58574f, -0.603339f, -9.83538f, + 1.00556f, 1.40779f, -9.09797f, -0.92895f, -0.948104f, + -9.165f, 0.699107f, 1.24498f, -8.8777f, -0.517148f, + -0.699107f, -9.57681f, 0.507571f, 0.641646f, -9.65342f, + -0.229843f, -0.565032f, -9.55765f, 0.287304f, 0.47884f, + -8.91601f, -0.201113f, -0.833182f, -9.69173f, 0.134075f, + 0.411803f, -9.47146f, 0.162806f, 0.172383f, -9.5385f, + -0.21069f, 0.143652f, -9.30866f, 0.497994f, -0.105345f, + -9.8258f, 0.507571f, 0.507571f, -9.50977f, -0.248997f, + 0.383072f, -9.60554f, 0.641646f, 0.948104f, -9.27993f, + -0.220267f, -0.0766145f, -10.0844f, 0.430956f, 0.986411f, + -9.52892f, -0.00957681f, 0.517148f, -9.02135f, 0.411803f, + 1.43652f, -9.42358f, -0.00957681f, -0.258574f, -9.27035f, + 1.54187f, 0.45011f, -9.84496f, -0.995988f, 0.316035f, + -9.8258f, -0.402226f, 0.842759f, -8.93516f, 0.967257f, + -0.785298f, -8.94474f, 2.63362f, 0.545878f, -9.25119f, + -2.78685f, 0.0383072f, -7.71891f, 5.74608f, 0.909797f, + -9.34696f, -5.07571f, -0.651223f, -8.63828f, 4.58729f, + 0.430956f, -8.69574f, -4.29041f, -1.16837f, -7.39329f, + 7.83383f, 0.612916f, -7.62314f, -7.28795f, -0.229843f, + -6.17704f, 7.59441f, 1.89621f, -5.58328f, -7.56568f, + 0.153229f, -5.53539f, 8.00621f, 0.967257f, -4.83629f, + -7.9679f, 0.411803f, -4.95121f, 8.04452f, 0.248997f, + -4.46279f, -8.20732f, 0.201113f, -4.99909f, 8.42759f, + 0.105345f, -4.89375f, -8.30309f, -0.0287304f, -4.52983f, + 8.5042f, 0.306458f, -4.72137f, -8.5042f, 0.0f, + -4.36702f, 8.72447f, 0.0f, -4.43406f, -8.68616f, + 0.181959f, -4.15633f, 8.8777f, 0.430956f, -3.98395f, + -9.02135f, 0.584185f, -4.14676f, 8.68616f, 0.0670376f, + -3.9648f, -8.85855f, 1.09176f, -4.18506f, 8.84897f, + -0.114922f, -4.35745f, -8.77236f, 0.248997f, -4.22337f, + 8.07325f, 0.325611f, -3.67749f, -8.5042f, 1.37906f, + -9.15543f, 3.87861f, 2.11647f, -9.27993f, -2.25055f, + -1.5706f, -9.31823f, 0.0670376f, 1.47483f, -10.1897f, + -0.0766145f, -0.354342f, -9.24162f, -0.162806f, 0.0670376f, + -9.81623f, 0.325611f, -1.0343f, -5.88016f, 7.79552f, + 1.65679f, -8.16902f, -5.56412f, -2.83473f, -8.38928f, + 4.31914f, 1.39821f, -8.81066f, -4.41491f, -1.08218f, + -8.82982f, 4.46279f, 0.986411f, -8.61913f, -4.73094f, + -0.727837f, -8.06367f, 3.85945f, 1.38864f, -8.16902f, + -3.98395f, -0.766145f, -8.73405f, 3.92649f, 1.63763f, + -8.71489f, -4.10845f, -1.61848f, -8.91601f, 3.36146f, + 2.04944f, -9.08839f, -3.47638f, -1.97282f, -8.82024f, + 3.40934f, 2.29843f, -8.83939f, -3.66792f, -2.24097f, + -8.88728f, 3.553f, 2.17394f, -8.84897f, -3.78284f, + -2.21224f, -8.73405f, 4.01268f, 2.21224f, -8.74362f, + -4.22337f, -2.07817f, -8.63828f, 3.90734f, 2.20267f, + -8.97347f, -3.77326f, -1.87705f, -8.39886f, 4.48195f, + 2.08774f, -9.06924f, -4.30956f, -1.71425f, -7.44118f, + 6.41646f, 1.83875f, -7.72848f, -6.76123f, -1.05345f, + -6.08127f, 7.51779f, 1.35991f, -4.92248f, -7.63272f, + 0.0766145f, -6.33027f, 7.44118f, 1.49398f, -6.03339f, + -7.42203f, -0.430956f, -6.13873f, 7.53695f, 1.42694f, + -6.27281f, -7.45076f, -0.90022f, -6.17704f, 7.54652f, + 1.37906f, -6.14831f, -7.51779f, -0.42138f, -6.06212f, + 7.56568f, 1.47483f, -6.2345f, -7.46033f, -0.316035f, + -6.02381f, 7.67102f, 1.49398f, -6.22492f, -7.50822f, + -0.497994f, -5.67905f, 7.85298f, 1.71425f, -6.03339f, + -7.57525f, -1.05345f, -5.06613f, 8.05409f, 1.83875f, + -4.82671f, -7.97748f, -0.565032f, -4.54898f, 8.23605f, + 1.99198f, -4.42448f, -8.42759f, -1.06303f, -4.24253f, + 8.7532f, 2.17394f, -4.40533f, -8.81066f, -2.05901f, + -3.44765f, 9.10754f, 1.92494f, -3.01669f, -9.39485f, + -0.68953f, -3.055f, 8.68616f, 2.11647f, -3.4285f, + -8.73405f, -1.3216f, -2.72939f, 8.88728f, 2.11647f, + -2.61447f, -9.02135f, -1.21625f, -2.55701f, 9.38527f, + 2.30801f, -2.15478f, -9.663f, -2.33674f, -2.48039f, + 9.23204f, 2.2314f, -1.53229f, -9.71088f, -1.13964f, + -3.66792f, 8.72447f, 2.24097f, -2.29843f, -8.88728f, + -2.31759f, -8.54251f, 3.89776f, 1.75256f, -9.05966f, + -2.90177f, -2.06859f, -9.29908f, 2.04944f, 1.6089f, + -9.86411f, -1.71425f, -1.16837f, -10.2855f, 1.29287f, + 0.766145f, -10.1993f, -1.1971f, -0.373495f, -9.89284f, + 1.1971f, 0.995988f, -9.14585f, -1.48441f, -0.201113f, + -9.43316f, 0.306458f, 1.45567f, -9.19373f, -0.6608f, + -0.727837f, -9.15543f, -0.0287304f, 0.047884f, -9.40442f, + 0.0287304f, 0.392649f, -9.9503f, -0.948104f, 0.0287304f, + -10.1323f, 1.06303f, -0.47884f, -10.0078f, -0.45011f, + 0.23942f, -9.52892f, 0.287304f, -0.191536f, -9.45231f, + -0.545878f, 0.42138f, -9.52892f, 0.354342f, -0.584185f, + -9.86411f, -0.258574f, 0.699107f, -9.44273f, 0.0f, + -0.42138f, -8.4659f, 3.95522f, 0.354342f, -8.57124f, + -4.1276f, 0.430956f, -8.71489f, 4.04141f, 0.306458f, + -8.95431f, -3.9648f, -0.603339f, -8.89685f, 3.58173f, + 0.354342f, -8.52336f, -3.85945f, 0.258574f, -9.35654f, + 3.54342f, -0.785298f, -9.02135f, -3.69665f, 0.92895f, + -8.76278f, 2.84431f, -1.17795f, -8.56167f, -2.806f, + 2.07817f, -8.89685f, 3.13162f, -1.49398f, -8.5042f, + -3.16035f, 2.03028f, -9.09797f, 4.00311f, -0.995988f, + -9.71088f, -3.79242f, 2.70066f, -9.04051f, 3.58173f, + -1.01514f, -8.04452f, -3.64876f, 1.81002f, -7.86256f, + 4.94163f, -0.201113f, -7.46991f, -5.02782f, 1.81959f, + -7.41245f, 6.46434f, -0.47884f, -7.44118f, -6.31112f, + 0.976834f, -6.57927f, 6.68461f, -0.114922f, -6.36858f, + -6.40688f, 2.35589f, -6.02381f, 7.31668f, -0.469264f, + -5.43005f, -7.24007f, 2.43251f, -6.87615f, 7.48906f, + -0.536301f, -7.03895f, -7.15387f, 0.90022f, -5.9855f, + 7.72848f, -0.201113f, -5.78439f, -7.47949f, 1.13964f, + -6.06212f, 7.9296f, -0.268151f, -5.25767f, -7.76679f, + 1.63763f, -5.70778f, 8.29351f, -0.162806f, -4.72137f, + -8.14029f, 1.20668f, -5.29597f, 8.42759f, 0.143652f, + -4.75967f, -8.42759f, 0.603339f, -5.11401f, 8.44674f, + 0.565032f, -4.85544f, -8.43717f, -0.00957681f, -5.43963f, + 8.23605f, 0.919373f, -5.1619f, -8.05409f, -0.325611f, + -5.60243f, 8.0924f, 0.718261f, -5.48751f, -7.86256f, + -0.047884f, -5.84185f, 7.98706f, 1.11091f, -5.58328f, + -7.91044f, 0.162806f, -5.79397f, 7.8434f, 1.16837f, + -5.47793f, -7.69975f, -0.392649f, -5.78439f, 7.77637f, + 1.36948f, -5.63116f, -7.61356f, -0.651223f, -5.95677f, + 7.73806f, 1.55144f, -5.19063f, -7.69975f, -0.833182f, + -6.22492f, 7.5561f, 1.49398f, -5.46836f, -7.53695f, + -0.833182f, -6.87615f, 6.98149f, 1.25456f, -6.53138f, + -6.82826f, -0.871489f, -7.40287f, 6.03339f, 0.6608f, + -6.67503f, -5.9855f, 0.344765f, -8.00621f, 4.66391f, + 0.574608f, -7.71891f, -4.67348f, 0.641646f, -9.48104f, + 2.24097f, 1.0343f, -9.77792f, -2.03028f, -0.995988f, + -9.76834f, 1.30245f, 1.05345f, -9.72046f, -1.25456f, + -0.593762f, -9.47146f, 0.507571f, 1.1971f, -10.4675f, + -0.459687f, -0.804452f, -9.67257f, 0.201113f, 1.15879f, + -9.60554f, -0.383072f, -1.13006f, -9.42358f, -0.0191536f, + 1.08218f, -10.0844f, -0.0574608f, -0.823605f, -7.12514f, + 6.99107f, -0.488417f, -7.20176f, -6.6463f, 1.63763f, + -7.16345f, 6.86657f, -0.430956f, -7.46991f, -6.47392f, + 0.823605f, -7.09641f, 7.1443f, -0.804452f, -6.6463f, + -7.00065f, 1.76213f, -7.50822f, 6.62715f, -0.277727f, + -5.86101f, -7.06768f, 0.986411f, -7.2688f, 7.23049f, + -0.47884f, -7.28795f, -6.97192f, 1.51314f, -7.37414f, + 6.62715f, -0.287304f, -7.24964f, -6.39731f, 0.995988f, + -7.40287f, 6.56969f, -0.392649f, -7.11557f, -6.44519f, + 1.14922f, -7.3071f, 6.8953f, -0.584185f, -6.56011f, + -6.91445f, 1.78129f, -7.51779f, 6.78038f, -0.612916f, + -5.74608f, -7.02938f, 3.48596f, -7.24007f, 6.33985f, + -0.325611f, -6.8953f, -6.03339f, 0.536301f, -8.99262f, + 5.01825f, -0.258574f, -9.73961f, -4.56814f, 0.632069f, + -9.79707f, 1.66636f, 0.287304f, -9.21289f, -1.87705f, + -0.105345f, -9.77792f, 1.10133f, 0.995988f, -8.88728f, + -1.47483f, -0.335188f, -9.44273f, 1.24498f, 0.497994f, + -9.44273f, -1.34075f, -0.268151f, -9.7875f, 1.0726f, + 0.68953f, -9.39485f, -1.27372f, -0.162806f, -8.86812f, + 2.24097f, 0.545878f, -8.61913f, -2.47082f, 0.632069f, + -9.0022f, 2.02071f, 0.718261f, -9.36612f, -2.12605f, + -0.440533f, -9.22246f, 2.29843f, 1.05345f, -9.10754f, + -2.46124f, -0.402226f, -9.55765f, 2.32716f, 0.842759f, + -9.19373f, -2.50912f, -0.497994f, -8.95431f, 2.62405f, + 1.0726f, -9.15543f, -2.73897f, -0.737414f, -9.54808f, + 2.34632f, 1.11091f, -9.05966f, -2.55701f, -0.440533f, + -10.0556f, -0.746991f, 1.15879f, -8.90643f, 1.48441f, + -1.74298f, -8.53294f, -2.1452f, 2.67193f, -9.15543f, + 2.84431f, -1.62806f, -8.94474f, 1.81959f, 0.42138f, + -9.30866f, -1.75256f, -0.746991f, -9.92157f, 2.12605f, + 0.670376f, -9.35654f, -2.24097f, -0.699107f, -9.49062f, + 2.12605f, 1.25456f, -8.91601f, -2.36547f, -0.411803f, + -8.86812f, 2.40378f, 0.948104f, -8.95431f, -2.47082f, + -0.871489f, -8.90643f, 2.65278f, 1.49398f, -8.95431f, + -2.88262f, -1.18752f, -8.95431f, 3.15077f, 1.25456f, + -9.05966f, -3.34231f, -1.10133f, -9.02135f, 2.9305f, + 1.25456f, -9.03093f, -3.26569f, -1.0726f, -9.32781f, + 2.87304f, 1.0726f, -8.97347f, -3.26569f, -0.794875f, + -9.1267f, 2.94966f, 1.10133f, -9.06924f, -3.20823f, + -0.679953f, -9.06924f, 3.01669f, 1.01514f, -8.98304f, + -3.21781f, -0.507571f, -9.165f, 3.18908f, 0.555455f, + -9.03093f, -3.49553f, -0.354342f, -9.04051f, 3.32315f, + 0.344765f, -9.05966f, -3.48596f, -0.181959f, -8.76278f, + 3.02627f, 0.708684f, -8.90643f, -3.23696f, -0.248997f, + -8.85855f, 2.79643f, 0.641646f, -8.90643f, -2.96881f, + -0.306458f, -8.92558f, 2.7677f, 0.833182f, -8.91601f, + -3.02627f, -0.430956f, -8.94474f, 2.86347f, 1.00556f, + -8.86812f, -3.16035f, -0.565032f, -8.98304f, 2.94966f, + 1.1971f, -9.07881f, -3.20823f, -0.766145f, -8.89685f, + 2.92093f, 1.12049f, -8.89685f, -3.09331f, -0.842759f, + -8.83939f, 2.97839f, 0.967257f, -8.85855f, -3.1795f, + -0.919373f, -8.93516f, 3.15077f, 1.42694f, -8.90643f, + -3.43807f, -0.948104f, -8.99262f, 3.20823f, 1.33118f, + -8.92558f, -3.43807f, -1.0726f, -8.86812f, 3.01669f, + 1.52271f, -8.77236f, -3.33273f, -1.08218f, -8.81066f, + 3.23696f, 1.50356f, -8.82024f, -3.4668f, -1.13964f, + -8.86812f, 3.41892f, 1.40779f, -8.90643f, -3.62961f, + -1.06303f, -8.82982f, 3.38061f, 1.55144f, -8.79151f, + -3.62003f, -1.08218f, -8.82024f, 3.12204f, 1.67594f, + -8.82024f, -3.41892f, -1.15879f, -8.73405f, 3.25611f, + 1.75256f, -8.72447f, -3.4285f, -1.28329f, -8.79151f, + 3.32315f, 1.96325f, -8.78193f, -3.5913f, -1.55144f, + -8.71489f, 3.27527f, 2.02071f, -8.73405f, -3.48596f, + -1.67594f, -8.82024f, 3.16035f, 2.02071f, -8.7532f, + -3.41892f, -1.62806f, -8.73405f, 3.40934f, 1.90578f, + -8.74362f, -3.62003f, -1.38864f, -8.74362f, 3.41892f, + 1.93451f, -8.68616f, -3.66792f, -1.45567f, -8.70532f, + 3.40934f, 1.99198f, -8.68616f, -3.62961f, -1.78129f, + -8.69574f, 3.56257f, 1.93451f, -8.72447f, -3.77326f, + -1.45567f, -8.79151f, 3.45723f, 2.13563f, -8.74362f, + -3.68707f, -1.54187f, -8.79151f, 3.25611f, 2.03986f, + -8.65743f, -3.62003f, -1.6089f, -8.80109f, 3.32315f, + 1.92494f, -8.69574f, -3.5913f, -1.88663f, -8.99262f, + 3.13162f, 1.91536f, -8.63828f, -3.50511f, -1.42694f, + -8.69574f, 3.19865f, 2.22182f, -8.86812f, -3.43807f, + -1.80044f, -8.89685f, 2.61447f, 2.05901f, -8.7532f, + -2.85389f, -1.39821f, -9.32781f, 2.38462f, 2.08774f, + -8.85855f, -2.67193f, -1.5706f, -9.72046f, 1.13006f, + 1.86748f, -9.03093f, -0.756568f, -1.0343f, -10.3334f, + 0.42138f, -1.53229f, -9.57681f, -0.220267f, 1.26414f, + -8.95431f, -0.383072f, 0.201113f, -9.73961f, 0.651223f, + -0.565032f, -10.3334f, -0.651223f, -0.0574608f, -9.68215f, + 0.536301f, 1.02472f, -9.56723f, -0.823605f, -0.296881f, + -9.58638f, 0.890643f, 0.0287304f, -9.50977f, -0.957681f, + -0.0957681f, -9.54808f, 0.890643f, 0.0861913f, -9.72046f, + -1.04387f, -0.248997f, -9.35654f, 1.00556f, 0.335188f, + -9.47146f, -0.948104f, -0.325611f, -9.45231f, 0.90022f, + 0.0383072f, -9.70131f, -0.814029f, -0.191536f, -9.51935f, + 0.756568f, 0.335188f, -9.69173f, -0.861913f, -0.0383072f, + -9.58638f, 0.775721f, 0.306458f, -9.73004f, -0.986411f, + 0.00957681f, -9.47146f, 0.833182f, 0.258574f, -9.64384f, + -0.766145f, -0.287304f, -9.5385f, 0.699107f, 0.335188f, + -9.60554f, -0.842759f, -0.153229f, -9.5385f, 0.785298f, + 0.402226f, -9.73961f, -0.890643f, -0.191536f, -9.43316f, + 0.785298f, 0.411803f, -9.663f, -0.737414f, -0.392649f, + -9.56723f, 0.775721f, 0.335188f, -9.60554f, -0.766145f, + -0.287304f, -9.49062f, 0.679953f, 0.344765f, -9.67257f, + -0.785298f, -0.201113f, -9.44273f, 0.699107f, 0.316035f, + -9.62469f, -0.737414f, -0.220267f, -9.54808f, 0.679953f, + 0.440533f, -9.96946f, -0.497994f, -0.392649f, -9.61511f, + 0.440533f, 0.363919f, -9.46189f, -0.383072f, -0.383072f, + -9.48104f, 0.306458f, 0.565032f, -9.69173f, -1.0726f, + -0.766145f, -9.05008f, 0.909797f, 0.775721f, -9.63427f, + -0.430956f, -0.737414f, -9.54808f, 0.344765f, 0.718261f, + -9.58638f, -0.383072f, -0.229843f, -9.5385f, 0.172383f, + 0.632069f, -9.62469f, -0.335188f, -0.545878f, -9.52892f, + 0.306458f, 0.622492f, -9.48104f, -0.383072f, -0.392649f, + -9.44273f, 0.23942f, 0.68953f, -9.70131f, -0.344765f, + -0.354342f, -9.59596f, 0.229843f, 0.565032f, -9.40442f, + -0.392649f, -0.497994f, -9.43316f, 0.248997f, 0.555455f, + -9.34696f, -0.373495f, -0.220267f, -9.34696f, 0.181959f, + 0.392649f, -10.4579f, 0.0670376f, 0.181959f, -9.5385f, + -0.229843f, 0.296881f, -9.29908f, -0.0287304f, -0.42138f, + -9.45231f, 0.00957681f, 0.565032f, -9.84496f, -0.0766145f, + 0.105345f, -9.64384f, -0.0574608f, 0.277727f, -9.67257f, + -0.21069f, -0.306458f, -9.29908f, 0.047884f, 0.469264f, + -9.64384f, -0.248997f, 0.114922f, -9.52892f, 0.0191536f, + 0.201113f, -9.64384f, -0.411803f, -0.0861913f, -9.67257f, + 0.248997f, 0.0670376f, -9.73004f, -0.383072f, -0.00957681f, + -9.59596f, 0.268151f, -0.047884f, -9.77792f, -0.162806f, + 0.0766145f, -9.68215f, 0.00957681f, 0.153229f, -9.68215f, + -0.0957681f, 0.143652f, -9.50977f, -0.0957681f, 0.23942f, + -9.60554f, -0.316035f, 0.0f, -9.43316f, 0.124498f, + 0.134075f, -9.52892f, -0.47884f, -0.134075f, -9.50019f, + 0.316035f, -0.00957681f, -9.88326f, -0.23942f, -0.0670376f, + -9.5385f, 0.0861913f, 0.316035f, -9.60554f, -0.0766145f, + 0.220267f, -9.62469f, -0.00957681f, -0.172383f, -9.74919f, + -0.00957681f, 0.0766145f, -9.43316f, -0.105345f, 0.0957681f, + -9.69173f, -0.0670376f, 0.00957681f, -9.51935f, -0.0383072f, + -0.0383072f, -9.71088f, 0.0191536f, 0.0766145f, -9.50977f, + -0.0957681f, 0.0766145f, -9.56723f, -0.105345f, 0.0861913f, + -9.2895f, -0.114922f, 0.153229f, -9.71088f, -0.162806f, + 0.0861913f, -9.50019f, 0.0287304f, 0.0861913f, -9.64384f, + -0.0191536f, 0.287304f, -9.50977f, -0.134075f, -0.0383072f, + -9.50019f, 0.143652f, 0.21069f, -9.44273f, -0.23942f, + -0.344765f, -9.64384f, -0.0287304f, 0.172383f, -9.48104f, + -0.0574608f, -0.0957681f, -9.69173f, -0.181959f, 0.201113f, + -9.48104f, 0.114922f, -0.0574608f, -9.75877f, -0.0670376f, + 0.0191536f, -9.55765f, 0.0383072f, 0.172383f, -9.61511f, + -0.0574608f, 0.268151f, -9.24162f, -0.0957681f, -0.0574608f, + -9.56723f, 0.047884f, 0.325611f, -9.51935f, -0.134075f, + -0.459687f, -9.47146f, 0.0f, 0.622492f, -9.49062f, + -0.0670376f, -0.488417f, -9.59596f, 0.0f, 0.823605f, + -9.48104f, -0.0383072f, -0.574608f, -9.5385f, -0.335188f, + 0.641646f, -9.54808f, 0.296881f, -0.536301f, -9.48104f, + -0.363919f, 0.641646f, -9.50977f, 0.287304f, -0.45011f, + -9.46189f, -0.047884f, 1.13964f, -9.57681f, 0.0f, + -0.632069f, -9.57681f, -0.316035f, 0.909797f, -9.63427f, + 0.258574f, -0.517148f, -9.64384f, -0.344765f, 0.545878f, + -9.59596f, 0.296881f, -0.440533f, -9.54808f, -0.0574608f, + 0.746991f, -9.59596f, -0.0383072f, -0.296881f, -9.49062f, + 0.00957681f, 0.852336f, -9.46189f, -0.124498f, -0.21069f, + -9.57681f, 0.0766145f, 0.641646f, -9.37569f, -0.181959f, + -0.42138f, -9.70131f, 0.344765f, 0.737414f, -9.24162f, + -0.469264f, -0.794875f, -9.47146f, 0.0f, 0.699107f, + -9.76834f, 0.0287304f, -0.746991f, -9.48104f, -0.153229f, + 1.33118f, -9.36612f, 0.0957681f, -0.948104f, -9.74919f, + -0.201113f, 1.10133f, -9.35654f, 0.181959f, -0.909797f, + -9.54808f, 0.0957681f, 0.881066f, -9.73961f, 0.153229f, + -1.05345f, -9.49062f, -0.306458f, 1.04387f, -9.51935f, + 0.584185f, -0.766145f, -9.93115f, -0.814029f, 0.727837f, + -9.75877f, 1.0726f, -0.316035f, -9.72046f, -0.296881f, + 0.162806f, -9.47146f, 0.392649f, 0.0766145f, -9.40442f, + 0.21069f, 0.287304f, -9.37569f, -0.248997f, 0.536301f, + -9.5385f, 0.0861913f, 0.114922f, -9.40442f, -0.0287304f, + -0.0383072f, -10.0461f, 0.181959f, -0.00957681f, -9.32781f, + -0.181959f, 0.622492f, -9.46189f, 0.296881f, -0.201113f, + -9.35654f, -0.201113f, 0.201113f, -9.31823f, -0.402226f, + 0.21069f, -9.91199f, 0.517148f, 1.01514f, -9.87369f, + 0.047884f, -0.047884f, -9.56723f, 0.248997f, -0.114922f, + -9.76834f, -0.335188f, 0.0383072f, -9.02135f, 0.316035f, + 0.105345f, -9.5385f, -0.335188f, 0.0287304f, -9.59596f, + 0.344765f, 0.670376f, -9.70131f, 0.0287304f, -0.383072f, + -10.4579f, 0.402226f, 0.411803f, -10.4291f, -0.45011f, + 0.306458f, -9.44273f, 0.545878f, 0.430956f, -9.79707f, + 0.507571f, -0.679953f, -9.26077f, -0.469264f, 1.26414f, + -9.51935f, 0.775721f, -0.114922f, -9.19373f, -0.718261f, + 0.718261f, -9.68215f, 0.881066f, -0.316035f, -9.01178f, + -0.890643f, 0.938527f, -9.25119f, 1.04387f, -0.861913f, + -8.76278f, -0.881066f, -0.823605f, -9.71088f, 0.354342f, + -0.181959f, -9.32781f, -0.248997f, -0.0957681f, -10.4387f, + 0.995988f, -0.268151f, -10.2376f, -0.699107f, 0.536301f, + -9.98861f, 0.555455f, -0.0574608f, -9.49062f, -0.459687f, + 0.823605f, -9.79707f, 0.316035f, 0.268151f, -8.85855f, + -0.488417f, -0.574608f, -9.663f, 0.373495f, -0.287304f, + -9.42358f, 0.0191536f, -1.65679f, -9.42358f, 1.0726f, + 1.80044f, -9.63427f, -0.21069f, -1.66636f, -9.31823f, + 0.306458f, 2.83473f, -9.17458f, 0.814029f, -2.98796f, + -8.67659f, 0.143652f, 1.7334f, -9.31823f, 1.23541f, + -1.15879f, -9.13627f, -1.75256f, 0.785298f, -8.80109f, + 2.54743f, -0.0766145f, -9.91199f, -0.134075f, 1.21625f, + -9.72046f, 0.488417f, 0.363919f, -9.14585f, -0.277727f, + 1.0343f, -9.21289f, 0.718261f, -0.143652f, -9.48104f, + -0.296881f, -0.114922f, -9.2895f, 0.565032f, 0.565032f, + -10.2663f, 0.459687f, -0.143652f, -9.56723f, -0.105345f, + 0.459687f, -10.094f, 0.68953f, -0.306458f, -9.59596f, + -0.172383f, 0.957681f, -10.094f, 0.0861913f, -0.220267f, + -9.34696f, 0.191536f, 0.392649f, -9.79707f, -0.181959f, + -0.488417f, -9.55765f, 0.555455f, 1.0343f, -10.1227f, + 0.0191536f, -0.976834f, -9.40442f, 0.354342f, 0.871489f, + -9.69173f, 0.593762f, -0.296881f, -9.14585f, -0.517148f, + 1.31202f, -9.69173f, 0.861913f, -0.775721f, -9.07881f, + -0.68953f, 0.497994f, -9.90242f, 0.919373f, 0.00957681f, + -9.43316f, -0.68953f, 0.325611f, -9.79707f, 0.507571f, + 0.114922f, -9.40442f, -0.316035f, 0.430956f, -9.8258f, + 0.536301f, -0.0191536f, -9.32781f, -0.258574f, 0.258574f, + -9.93115f, 0.383072f, 0.143652f, -9.48104f, -0.181959f, + 0.6608f, -9.55765f, 0.0861913f, -0.0383072f, -9.37569f, + 0.0287304f, 0.430956f, -9.39485f, 0.325611f, 0.0287304f, + -9.32781f, -0.0861913f, 0.392649f, -9.50019f, 0.651223f, + 0.23942f, -9.40442f, -0.469264f, 0.545878f, -9.75877f, + 0.536301f, 0.0574608f, -9.38527f, -0.411803f, 0.47884f, + -9.87369f, 0.574608f, 0.0383072f, -9.54808f, -0.402226f, + 0.258574f, -9.65342f, 0.325611f, 0.23942f, -9.56723f, + -0.220267f, 0.6608f, -9.50977f, 0.134075f, 0.0766145f, + -9.38527f, -0.047884f, 0.536301f, -9.70131f, 0.0f, + -0.42138f, -9.35654f, 0.181959f, 0.881066f, -9.71088f, + 0.181959f, -0.402226f, -9.50019f, -0.00957681f, 0.727837f, + -9.49062f, 0.306458f, -0.0766145f, -9.27993f, -0.268151f, + 0.766145f, -9.73961f, 0.181959f, -0.517148f, -9.49062f, + -0.0287304f, 0.986411f, -9.86411f, 0.0383072f, -0.383072f, + -9.47146f, 0.0383072f, 0.986411f, -9.50977f, 0.402226f, + -0.383072f, -9.10754f, -0.363919f, 0.823605f, -10.0365f, + 0.90022f, -0.497994f, -9.59596f, -0.651223f, 0.833182f, + -9.73961f, 0.517148f, -0.0957681f, -9.31823f, -0.440533f, + 0.641646f, -9.56723f, 0.0191536f, -0.114922f, -9.33739f, + -0.047884f, 0.593762f, -9.67257f, -0.23942f, -0.459687f, + -9.51935f, 0.258574f, 0.794875f, -9.39485f, 0.0574608f, + -0.172383f, -9.29908f, -0.0574608f, 0.440533f, -10.0078f, + 0.134075f, -0.536301f, -9.45231f, -0.0670376f, 0.766145f, + -10.0748f, -0.0287304f, -0.584185f, -9.55765f, -0.0766145f, + 1.06303f, -9.73961f, 0.392649f, -0.402226f, -9.50019f, + -0.316035f, 1.35991f, -9.75877f, 0.229843f, -0.373495f, + -9.51935f, -0.248997f, 1.39821f, -10.2855f, 0.191536f, + -0.181959f, -10.1514f, -0.124498f, 1.23541f, -10.0461f, + 0.105345f, -0.440533f, -9.88326f, 0.0574608f, -0.0191536f, + -9.60554f, -0.201113f, 0.0957681f, -9.33739f, 0.047884f, + -0.248997f, -9.29908f, -0.23942f, 0.373495f, -9.04051f, + -0.0861913f, -0.00957681f, -9.24162f, -0.114922f, 1.78129f, + -9.414f, -0.124498f, -1.16837f, -9.68215f, -0.181959f, + 1.35033f, -9.60554f, 0.0191536f, -1.4461f, -9.19373f, + -0.220267f, 1.84832f, -9.23204f, -0.00957681f, -1.70467f, + -9.11712f, -0.181959f, 1.50356f, -8.74362f, -0.143652f, + -1.97282f, -8.89685f, 0.143652f, 1.88663f, -8.90643f, + -0.373495f, -1.25456f, -8.81066f, -0.124498f, 1.31202f, + -8.79151f, -0.134075f, -0.92895f, -8.99262f, -0.536301f, + 0.430956f, -9.31823f, 0.373495f, -0.181959f, -10.2855f, + -0.153229f, 0.708684f, -10.5536f, 0.229843f, -0.105345f, + -10.2855f, -0.220267f, -0.105345f, -9.95988f, 0.296881f, + -0.162806f, -9.79707f, -0.0861913f, 0.536301f, -9.39485f, + -0.124498f, -0.392649f, -10.2759f, 0.047884f, 1.09176f, + -9.61511f, -0.191536f, -0.517148f, -10.0461f, 0.229843f, + 1.5706f, -9.56723f, -0.430956f, -0.584185f, -9.5385f, + 0.287304f, 0.938527f, -9.49062f, -0.47884f, -0.287304f, + -9.56723f, -0.248997f, 0.497994f, -9.50977f, 0.0766145f, + -0.957681f, -9.79707f, -0.191536f, 0.296881f, -9.40442f, + 0.00957681f, -0.0383072f, -9.61511f, 0.0191536f, 0.268151f, + -9.31823f, -0.201113f, -0.344765f, -9.48104f, 0.45011f, + 0.555455f, -9.29908f, -0.746991f, 0.0191536f, -9.03093f, + 0.248997f, 0.612916f, -8.97347f, -0.459687f, 0.459687f, + -9.11712f, -0.277727f, -0.402226f, -9.0022f, 0.191536f, + 0.191536f, -10.6207f, -0.0766145f, 0.641646f, -10.1897f, + -0.00957681f, 0.344765f, -10.0844f, 0.0574608f, 0.201113f, + -10.1131f, -0.124498f, 0.191536f, -9.38527f, -0.153229f, + -0.0191536f, -9.43316f, -0.0574608f, -0.134075f, -9.42358f, + -0.47884f, 0.172383f, -9.27035f, 0.143652f, 0.21069f, + -10.343f, -0.0383072f, -0.373495f, -9.8258f, 0.0861913f, + 0.316035f, -10.1706f, -0.181959f, -0.143652f, -9.74919f, + 0.114922f, 0.258574f, -9.50977f, -0.430956f, 0.0670376f, + -9.29908f, 0.172383f, 0.344765f, -9.86411f, -0.68953f, + 0.0191536f, -10.0748f, 0.737414f, 0.440533f, -9.91199f, + -0.622492f, -0.430956f, -9.86411f, 0.708684f, 0.335188f, + -9.88326f, -0.392649f, 0.153229f, -9.77792f, 0.354342f, + -0.191536f, -9.60554f, 0.0670376f, 0.0670376f, -9.31823f, + -0.277727f, -0.0957681f, -9.55765f, 0.593762f, 0.153229f, + -9.23204f, -0.852336f, -0.201113f, -9.63427f, 0.42138f, + 0.507571f, -9.42358f, -0.603339f, -0.641646f, -9.64384f, + 0.42138f, 0.718261f, -9.47146f, -0.507571f, -0.995988f, + -9.83538f, 0.134075f, 0.603339f, -9.32781f, -0.172383f, + -0.861913f, -9.60554f, 0.181959f, 1.05345f, -9.72046f, + -0.0574608f, -1.21625f, -9.57681f, -0.00957681f, 1.1971f, + -9.69173f, 0.363919f, -1.31202f, -9.29908f, -0.306458f, + 1.37906f, -9.33739f, 0.766145f, -1.41737f, -9.05008f, + -0.0574608f, 1.09176f, -9.07881f, 0.727837f, -0.861913f, + -9.42358f, -0.785298f, 0.632069f, -9.48104f, 1.01514f, + 0.047884f, -9.69173f, -1.04387f, -0.124498f, -8.99262f, + 1.11091f, 0.325611f, -9.70131f, -0.363919f, -0.325611f, + -9.50019f, 0.737414f, 1.31202f, -9.76834f, -0.162806f, + -1.10133f, -9.68215f, 0.296881f, 1.04387f, -9.77792f, + 0.603339f, -0.0957681f, -9.83538f, -0.47884f, 0.909797f, + -10.4387f, 0.0766145f, -0.459687f, -9.9503f, 0.047884f, + 1.38864f, -9.60554f, -0.584185f, 0.459687f, -9.75877f, + 0.536301f, -0.124498f, -9.74919f, -0.172383f, 0.651223f, + -10.4483f, 0.229843f, -0.268151f, -9.50019f, -1.58975f, + 0.622492f, -9.64384f, 1.58975f, -0.114922f, -8.96389f, + -1.69509f, 1.16837f, -8.72447f, 1.71425f, -1.04387f, + -8.91601f, -0.90022f, 1.92494f, -8.84897f, 1.04387f, + -0.833182f, -8.86812f, -0.0574608f, 1.17795f, -8.91601f, + 0.47884f, -1.47483f, -9.22246f, 1.25456f, 1.76213f, + -8.88728f, -1.42694f, -2.36547f, -10.1227f, 2.24097f, + 2.09732f, -9.09797f, -2.35589f, -3.11246f, -9.84496f, + 2.75812f, 2.1069f, -9.26077f, -2.98796f, -2.33674f, + -9.01178f, 0.0766145f, 4.2138f, -8.45632f, 1.02472f, + -3.69665f, -8.51378f, -0.344765f, 3.95522f, -8.90643f, + 2.00155f, -3.78284f, -9.05966f, -0.497994f, 3.50511f, + -9.42358f, 1.86748f, -3.62003f, -9.68215f, -0.488417f, + 3.74453f, -9.48104f, 1.69509f, -3.18908f, -9.93115f, + -0.871489f, 3.54342f, -9.68215f, 2.03986f, -2.8922f, + -9.85453f, -0.861913f, 3.16035f, -9.81623f, 2.08774f, + -2.66235f, -9.95988f, -0.852336f, 2.74854f, -9.59596f, + 1.83875f, -2.15478f, -10.0652f, -0.622492f, 2.28886f, + -9.5385f, 1.46525f, -2.18351f, -9.67257f, -0.632069f, + 2.01113f, -9.43316f, 1.3216f, -1.67594f, -9.42358f, + -0.679953f, 1.05345f, -9.45231f, 1.5706f, -1.23541f, + -9.2895f, -0.459687f, 1.39821f, -9.5385f, 1.46525f, + -1.16837f, -9.58638f, -0.316035f, 1.47483f, -9.54808f, + 1.20668f, -1.26414f, -9.60554f, -0.411803f, 1.39821f, + -9.31823f, 1.14922f, -1.14922f, -9.76834f, -0.354342f, + 1.35991f, -9.52892f, 1.11091f, -1.35991f, -9.81623f, + 0.0574608f, 1.46525f, -9.663f, 0.833182f, -1.1971f, + -9.80665f, 0.21069f, 1.62806f, -9.70131f, 0.641646f, + -1.24498f, -9.9503f, 0.497994f, 1.53229f, -9.88326f, + 0.325611f, -1.05345f, -9.86411f, 0.565032f, 1.58017f, + -9.87369f, 0.220267f, -1.24498f, -9.94073f, 0.268151f, + 1.97282f, -9.91199f, 0.584185f, -1.35033f, -9.25119f, + 0.306458f, 1.13006f, -9.46189f, 0.383072f, -1.11091f, + -8.97347f, -0.0670376f, 1.22583f, -8.98304f, 0.459687f, + -0.488417f, -9.30866f, -0.737414f, 1.23541f, -9.13627f, + 1.00556f, -0.526724f, -10.6781f, -0.775721f, 0.373495f, + -10.5919f, 1.13964f, 0.42138f, -9.54808f, -2.07817f, + 0.68953f, -9.26077f, 1.82917f, -0.105345f, -9.03093f, + -0.976834f, 0.430956f, -9.47146f, 0.995988f, -0.181959f, + -9.86411f, -0.23942f, 0.124498f, -9.73004f, 0.153229f, + 0.871489f, -9.97903f, -0.220267f, 0.162806f, -9.59596f, + 0.153229f, 0.430956f, -9.8258f, -0.114922f, 0.0957681f, + -9.76834f, 0.00957681f, -0.0287304f, -10.1801f, -0.268151f, + 0.258574f, -10.0844f, 0.23942f, 0.0766145f, -10.1131f, + 0.794875f, 0.0f, -9.86411f, -0.593762f, 0.909797f, + -9.29908f, -2.09732f, 1.72383f, -9.17458f, 1.89621f, + -1.58975f, -8.91601f, -2.16436f, 1.94409f, -9.1267f, + 2.03986f, -1.96325f, -9.30866f, -2.42293f, 2.02071f, + -9.43316f, 2.26013f, -1.38864f, -9.8258f, -2.2697f, + 1.16837f, -9.44273f, 2.16436f, -1.09176f, -9.14585f, + -2.03986f, 1.26414f, -9.01178f, 1.82917f, -1.28329f, + -8.89685f, -2.09732f, 1.64721f, -8.95431f, 1.93451f, + -1.69509f, -8.8777f, -2.19309f, 1.28329f, -9.03093f, + 2.11647f, -1.40779f, -9.31823f, -2.2697f, 1.09176f, + -9.11712f, 2.06859f, -1.3216f, -9.2895f, -2.21224f, + 1.4461f, -9.165f, 2.00155f, -1.48441f, -8.98304f, + -2.20267f, 1.46525f, -8.83939f, 2.00155f, -1.24498f, + -9.14585f, -2.26013f, 1.43652f, -9.01178f, 2.1069f, + -1.45567f, -9.1267f, -2.29843f, 1.63763f, -9.04051f, + 2.12605f, -1.76213f, -9.18416f, -2.27928f, 1.9824f, + -9.09797f, 2.07817f, -1.79086f, -9.08839f, -2.00155f, + 1.79086f, -9.44273f, 1.87705f, -1.62806f, -9.14585f, + -2.31759f, 1.84832f, -8.86812f, 2.06859f, 1.61848f, + -9.165f, -2.24097f, 2.05901f, -9.0022f, 2.02071f, + -1.7334f, -9.04051f, -2.1452f, 2.04944f, -9.2895f, + 2.06859f, -1.70467f, -9.20331f, -2.22182f, 2.06859f, + -9.33739f, 2.09732f, -1.76213f, -9.34696f, -2.13563f, + 1.99198f, -9.1267f, 1.9824f, -1.84832f, -8.88728f, + -1.79086f, 1.55144f, -9.03093f, 1.62806f, -1.61848f, + -9.1267f, -1.58975f, 1.47483f, -9.19373f, 1.49398f, + -1.47483f, -8.92558f, -1.48441f, 1.76213f, -8.69574f, + 1.18752f, -1.76213f, -9.24162f, -1.35991f, 1.49398f, + -9.48104f, 1.23541f, -1.61848f, -9.51935f, 1.86748f, + 2.00155f, -8.71489f, -1.24498f, -2.11647f, -5.6982f, + 8.15944f, 1.27372f, -4.52983f, -7.99663f, -0.775721f, + -4.00311f, 8.31267f, 0.632069f, -3.68707f, -8.03494f, + 0.344765f, -2.16436f, 7.79552f, 3.7158f, -1.7334f, + -7.74764f, -4.22337f, -1.56102f, 8.78193f, 4.39575f, + -1.58017f, -8.76278f, -4.5011f, -1.72383f, 9.05008f, + 5.25767f, -1.93451f, -9.11712f, -3.9648f, -0.995988f, + 7.97748f, 5.34386f, -1.33118f, -7.92002f, -4.03184f, + -0.670376f, 9.17458f, 4.3766f, 0.220267f, -9.60554f, + -4.13718f, -0.746991f, 7.33583f, 5.34386f, -1.1971f, + -7.28795f, -5.14275f, 0.871489f, 7.90087f, 5.80354f, + 0.584185f, -8.33182f, -3.04542f, 0.986411f, 7.59441f, + 6.49307f, -0.0670376f, -7.85298f, -5.92804f, 2.07817f, + 8.83939f, 5.4109f, 0.325611f, -9.59596f, -3.83072f, + 0.718261f, 7.38372f, 5.99508f, 0.248997f, -8.29351f, + -5.10444f, 1.72383f, 7.83383f, 5.85143f, 2.12605f, + -9.15543f, -4.03184f, 2.05901f, 7.37414f, 5.79397f, + 2.19309f, -8.49463f, -4.95121f, 2.13563f, 7.91044f, + 4.29999f, 2.1452f, -8.76278f, -2.24097f, 1.31202f, + 8.59997f, 5.72693f, 0.746991f, -9.55765f, -3.54342f, + 1.36948f, 8.5042f, 5.09486f, 1.17795f, -9.62469f, + -4.1276f, 1.77171f, 8.69574f, 5.46836f, 1.63763f, + -9.40442f, -2.32716f, 1.91536f, 7.75721f, 5.25767f, + 2.04944f, -8.81066f, -2.40378f, 0.392649f, 7.73806f, + 5.63116f, 1.45567f, -9.24162f, -1.49398f, -0.258574f, + 6.82826f, 7.34541f, -0.42138f, -9.07881f, -1.30245f, + -0.517148f, 6.97192f, 7.6806f, -0.890643f, -9.58638f, + -4.81713f, -0.21069f, 3.13162f, 9.20331f, -0.967257f, + -10.0748f, 0.181959f, -0.948104f, -5.9855f, 7.4316f, + -1.00556f, -9.5385f, 0.497994f, 0.162806f, -8.47547f, + 4.32872f, 0.248997f, -9.165f, -2.27928f, 0.143652f, + -8.6287f, 4.47237f, 0.354342f, -9.51935f, 0.986411f, +}; + +const size_t kAccelerometerVerticalHingeTestDataLength = + ARRAY_SIZE(kAccelerometerVerticalHingeTestData); + +const float kAccelerometerVerticalHingeUnstableTestData[] = { + 8.5904f, -1.36948f, -3.74453f, 8.72447f, 1.1971f, 4.00311f, + 8.80109f, -3.08373f, 2.27928f, 8.95431f, -1.90578f, -1.10133f, + 8.93516f, -2.03986f, 0.248997f, 9.05008f, 1.53229f, -0.708684f, + -8.78193f, 1.43652f, -2.63362f, -8.66701f, 0.220267f, 2.79643f, + -8.66701f, -2.06859f, 2.42293f, -8.79151f, -2.88262f, -1.16837f, + 8.74362f, -1.9824f, 3.53384f, 9.04051f, 0.0574608f, -1.36948f, + 8.78193f, -4.1276f, 2.58574f, 8.8777f, 0.201113f, -1.80044f, + 8.70532f, -0.296881f, 1.52271f, 9.02135f, -0.871489f, -2.43251f, + -9.09797f, -1.3216f, -3.60088f, -8.97347f, 2.52828f, 2.6432f, + -8.82024f, 1.87705f, 0.354342f, -7.93917f, -4.38618f, 0.258574f, + -8.81066f, 1.91536f, -2.92093f, -8.04452f, -5.4492f, 3.28484f, + -8.86812f, 2.05901f, 0.890643f, -8.01579f, -5.65989f, -2.20267f, + -9.0022f, 2.18351f, -2.9305f, -8.80109f, -4.01268f, 3.055f, + -9.37569f, -1.04387f, 0.277727f, -6.80911f, 2.806f, -6.0717f, + -8.79151f, -8.79151f, -2.11647f, -8.6287f, -1.53229f, 3.58173f, + -8.97347f, -0.335188f, 1.26414f, 8.5042f, 1.51314f, -2.20267f, + -9.19373f, -1.37906f, 1.41737f, -7.67102f, 2.8922f, -5.09486f, + -8.81066f, 0.986411f, 2.30801f, -8.53294f, 3.26569f, -3.11246f, + -9.03093f, 1.06303f, 1.39821f, -8.8777f, -4.47237f, -0.632069f, + -8.74362f, -1.83875f, -0.0957681f, -7.92002f, 1.0343f, -3.84988f, + -8.92558f, 0.440533f, 1.26414f, -8.71489f, -0.153229f, -3.64876f, +}; + +const size_t kAccelerometerVerticalHingeUnstableTestDataLength = + ARRAY_SIZE(kAccelerometerVerticalHingeUnstableTestData); diff --git a/test/motion_angle_tablet.c b/test/motion_angle_tablet.c new file mode 100644 index 0000000000..ee241d3172 --- /dev/null +++ b/test/motion_angle_tablet.c @@ -0,0 +1,111 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test motion sense code, when in tablet mode. + */ + +#include +#include + +#include "accelgyro.h" +#include "common.h" +#include "gpio.h" +#include "hooks.h" +#include "motion_common.h" +#include "motion_lid.h" +#include "motion_sense.h" +#include "tablet_mode.h" +#include "test_util.h" +#include "util.h" + + +/*****************************************************************************/ +/* Test utilities */ + +/* convert array value from g to m.s^2. */ +int filler(const struct motion_sensor_t *s, const float v) +{ + return FP_TO_INT( fp_div( + FLOAT_TO_FP(v) * MOTION_SCALING_FACTOR, + fp_mul(INT_TO_FP(s->drv->get_range(s)), MOTION_ONE_G))); +} + +static int test_lid_angle_less180(void) +{ + int index = 0, lid_angle; + struct motion_sensor_t *lid = &motion_sensors[ + CONFIG_LID_ANGLE_SENSOR_LID]; + struct motion_sensor_t *base = &motion_sensors[ + CONFIG_LID_ANGLE_SENSOR_BASE]; + + /* We don't have TASK_CHIP so simulate init ourselves */ + hook_notify(HOOK_CHIPSET_SHUTDOWN); + TEST_ASSERT(sensor_active == SENSOR_ACTIVE_S5); + TEST_ASSERT(lid->drv->get_data_rate(lid) == 0); + TEST_ASSERT(motion_interval == 0); + + /* Go to S0 state */ + hook_notify(HOOK_CHIPSET_SUSPEND); + hook_notify(HOOK_CHIPSET_RESUME); + msleep(1000); + TEST_ASSERT(sensor_active == SENSOR_ACTIVE_S0); + TEST_ASSERT(lid->drv->get_data_rate(lid) == TEST_LID_FREQUENCY); + TEST_ASSERT(motion_interval == TEST_LID_EC_RATE); + + /* Open lid, testing close to 180 degree. */ + gpio_set_level(GPIO_LID_OPEN, 1); + msleep(1000); + + cprints(CC_ACCEL, "start loop"); + /* Force clamshell mode, to be sure we go in tablet mode ASAP. */ + tablet_set_mode(0); + + /* Check we stay in tablet mode, even when hinge is vertical. */ + while (index < kAccelerometerVerticalHingeTestDataLength) { + feed_accel_data(kAccelerometerVerticalHingeTestData, + &index, filler); + wait_for_valid_sample(); + lid_angle = motion_lid_get_angle(); + cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", + index / TEST_LID_SAMPLE_SIZE, + lid->xyz[X], lid->xyz[Y], lid->xyz[Z], + base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); + /* We need few sample to debounce and enter laptop mode. */ + TEST_ASSERT(index < 2 * TEST_LID_SAMPLE_SIZE * \ + (TABLET_MODE_DEBOUNCE_COUNT + 2) || + tablet_get_mode()); + } + /* + * Check we stay in tablet mode, even when hinge is vertical and + * shaked. + */ + tablet_set_mode(0); + while (index < kAccelerometerVerticalHingeUnstableTestDataLength) { + feed_accel_data(kAccelerometerVerticalHingeUnstableTestData, + &index, filler); + wait_for_valid_sample(); + lid_angle = motion_lid_get_angle(); + cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", + index / TEST_LID_SAMPLE_SIZE, + lid->xyz[X], lid->xyz[Y], lid->xyz[Z], + base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); + /* We need few sample to debounce and enter laptop mode. */ + TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * + (TABLET_MODE_DEBOUNCE_COUNT + 2) || + tablet_get_mode()); + } + return EC_SUCCESS; +} + + +void run_test(void) +{ + test_reset(); + + RUN_TEST(test_lid_angle_less180); + + test_print_result(); +} diff --git a/test/motion_angle_tablet.tasklist b/test/motion_angle_tablet.tasklist new file mode 100644 index 0000000000..60688f9c34 --- /dev/null +++ b/test/motion_angle_tablet.tasklist @@ -0,0 +1,18 @@ +/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * List of enabled tasks in the priority order + * + * The first one has the lowest priority. + * + * For each task, use the macro TASK_TEST(n, r, d, s) where : + * 'n' in the name of the task + * 'r' in the main routine of the task + * 'd' in an opaque parameter passed to the routine at startup + * 's' is the stack size in bytes; must be a multiple of 8 + */ +#define CONFIG_TEST_TASK_LIST \ + TASK_TEST(MOTIONSENSE, motion_sense_task, NULL, TASK_STACK_SIZE) diff --git a/test/motion_common.c b/test/motion_common.c new file mode 100644 index 0000000000..2e0ebc3d91 --- /dev/null +++ b/test/motion_common.c @@ -0,0 +1,125 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common test code to test lid angle calculation. + */ + +#include "accelgyro.h" +#include "host_command.h" +#include "motion_common.h" +#include "motion_sense.h" +#include "task.h" +#include "timer.h" + +/*****************************************************************************/ +/* Mock functions */ +static int accel_init(const struct motion_sensor_t *s) +{ + return EC_SUCCESS; +} + +static int accel_read(const struct motion_sensor_t *s, intv3_t v) +{ + rotate(s->xyz, *s->rot_standard_ref, v); + return EC_SUCCESS; +} + +static int accel_get_range(const struct motion_sensor_t *s) +{ + return s->default_range; +} + +static int accel_get_resolution(const struct motion_sensor_t *s) +{ + return 0; +} + +int test_data_rate[2] = { 0 }; + +static int accel_set_data_rate(const struct motion_sensor_t *s, + const int rate, + const int rnd) +{ + test_data_rate[s - motion_sensors] = rate | (rnd ? ROUND_UP_FLAG : 0); + return EC_SUCCESS; +} + +static int accel_get_data_rate(const struct motion_sensor_t *s) +{ + return test_data_rate[s - motion_sensors]; +} + +const struct accelgyro_drv test_motion_sense = { + .init = accel_init, + .read = accel_read, + .get_range = accel_get_range, + .get_resolution = accel_get_resolution, + .set_data_rate = accel_set_data_rate, + .get_data_rate = accel_get_data_rate, +}; + +struct motion_sensor_t motion_sensors[] = { + { + .name = "base", + .active_mask = SENSOR_ACTIVE_S0_S3_S5, + .chip = MOTIONSENSE_CHIP_LSM6DS0, + .type = MOTIONSENSE_TYPE_ACCEL, + .location = MOTIONSENSE_LOC_BASE, + .drv = &test_motion_sense, + .rot_standard_ref = NULL, + .default_range = 2, /* g, enough for laptop. */ + .config = { + /* EC use accel for angle detection */ + [SENSOR_CONFIG_EC_S0] = { + .odr = TEST_LID_FREQUENCY, + }, + }, + }, + { + .name = "lid", + .active_mask = SENSOR_ACTIVE_S0, + .chip = MOTIONSENSE_CHIP_KXCJ9, + .type = MOTIONSENSE_TYPE_ACCEL, + .location = MOTIONSENSE_LOC_LID, + .drv = &test_motion_sense, + .rot_standard_ref = NULL, + .default_range = 2, /* g, enough for laptop. */ + .config = { + /* EC use accel for angle detection */ + [SENSOR_CONFIG_EC_S0] = { + .odr = TEST_LID_FREQUENCY, + }, + }, + }, +}; +const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); + +/* Read 6 samples from array to sensor vectors, convert units if necessary. */ +void feed_accel_data(const float *array, int *idx, + int (filler)(const struct motion_sensor_t*, const float)) +{ + int i, j; + + for (i = 0; i < motion_sensor_count; i++) { + struct motion_sensor_t *s = &motion_sensors[i]; + + for (j = X; j <= Z; j++) + s->xyz[j] = filler(s, array[*idx + i * 3 + j]); + } + *idx += 6; +} + +void wait_for_valid_sample(void) +{ + uint8_t sample; + uint8_t *lpc_status = host_get_memmap(EC_MEMMAP_ACC_STATUS); + + sample = *lpc_status & EC_MEMMAP_ACC_STATUS_SAMPLE_ID_MASK; + usleep(TEST_LID_EC_RATE); + task_wake(TASK_ID_MOTIONSENSE); + while ((*lpc_status & EC_MEMMAP_ACC_STATUS_SAMPLE_ID_MASK) == sample) + usleep(TEST_LID_SLEEP_RATE); +} + + diff --git a/test/motion_common.h b/test/motion_common.h new file mode 100644 index 0000000000..3adb9f24e5 --- /dev/null +++ b/test/motion_common.h @@ -0,0 +1,69 @@ +/* Copyright 2018 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Common test code to test lid angle calculation. + */ +#ifndef __CROS_EC_MOTION_COMMON_H +#define __CROS_EC_MOTION_COMMON_H + +#include "motion_sense.h" +/* + * Period in us for the motion task period. + * The task will read the vectors at that interval + */ +#define TEST_LID_EC_RATE (1 * MSEC) +#define TEST_LID_FREQUENCY (1e9 / TEST_LID_EC_RATE) /* mHz */ + +/* + * Time in ms to wait for the task to read the vectors. + */ +#define TEST_LID_SLEEP_RATE (TEST_LID_EC_RATE / 5) + +/* We gather 6 elements [2 vectors of 3 axis] per sample. */ +#define TEST_LID_SAMPLE_SIZE (2 * 3) + +extern enum chipset_state_mask sensor_active; +extern unsigned int motion_interval; + +extern struct motion_sensor_t motion_sensors[]; +extern const unsigned int motion_sensor_count; + +void wait_for_valid_sample(void); +void feed_accel_data(const float *array, int *idx, + int (filler)(const struct motion_sensor_t *s, const float f)); + +/* + * External data - from + * chromium/src/ash/wm/tablet_mode/tablet_mode_controller_unittest.cc + * + * Test accelerometer data taken with the lid at less than 180 degrees while + * shaking the device around. The data is to be interpreted in groups of 6 where + * each 6 values corresponds to the base accelerometer (-y / g, -x / g, -z / g) + * followed by the lid accelerometer (-y / g , x / g, z / g). + * [ CONFIG_ACCEL_STD_REF_FRAME_OLD must be defined to used this array. ] + */ +extern const float kAccelerometerLaptopModeTestData[]; +extern const size_t kAccelerometerLaptopModeTestDataLength; + +/* + * Test accelerometer data taken with the lid open 360 degrees while + * shaking the device around. The data is to be interpreted in groups of 6 where + * each 6 values corresponds to the base accelerometer (-y / g, -x / g, -z / g) + * followed by the lid accelerometer (-y / g , x / g, z / g). + * [ CONFIG_ACCEL_STD_REF_FRAME_OLD must be defined to used this array. ] + */ +extern const float kAccelerometerFullyOpenTestData[]; +extern const size_t kAccelerometerFullyOpenTestDataLength; + +/* + * Test accelerometer data taken with the lid open 360 degrees while the device + * hinge was nearly vertical, while shaking the device around. The data is to be + * interpreted in groups of 6 where each 6 values corresponds to the X, Y, and Z + * readings from the base and lid accelerometers in this order. + */ +extern const float kAccelerometerVerticalHingeTestData[]; +extern const size_t kAccelerometerVerticalHingeTestDataLength; +extern const float kAccelerometerVerticalHingeUnstableTestData[]; +extern const size_t kAccelerometerVerticalHingeUnstableTestDataLength; +#endif /* __CROS_EC_MOTION_COMMON_H */ diff --git a/test/motion_lid.c b/test/motion_lid.c index c9c7570232..6dc5f05831 100644 --- a/test/motion_lid.c +++ b/test/motion_lid.c @@ -33,6 +33,7 @@ extern unsigned motion_interval; * Time in ms to wait for the task to read the vectors. */ #define TEST_LID_SLEEP_RATE (TEST_LID_EC_RATE / 5) +#define ONE_G_MEASURED (1 << 14) /*****************************************************************************/ /* Mock functions */ @@ -56,7 +57,7 @@ static int accel_set_range(const struct motion_sensor_t *s, static int accel_get_range(const struct motion_sensor_t *s) { - return 0; + return s->default_range; } static int accel_get_resolution(const struct motion_sensor_t *s) @@ -97,7 +98,7 @@ struct motion_sensor_t motion_sensors[] = { .location = MOTIONSENSE_LOC_BASE, .drv = &test_motion_sense, .rot_standard_ref = NULL, - .default_range = 2, /* g, enough for laptop. */ + .default_range = MOTION_SCALING_FACTOR / ONE_G_MEASURED, .config = { /* AP: by default shutdown all sensors */ [SENSOR_CONFIG_AP] = { @@ -127,7 +128,7 @@ struct motion_sensor_t motion_sensors[] = { .location = MOTIONSENSE_LOC_LID, .drv = &test_motion_sense, .rot_standard_ref = NULL, - .default_range = 2, /* g, enough for laptop. */ + .default_range = MOTION_SCALING_FACTOR / ONE_G_MEASURED, .config = { /* AP: by default shutdown all sensors */ [SENSOR_CONFIG_AP] = { @@ -174,6 +175,7 @@ static int test_lid_angle(void) CONFIG_LID_ANGLE_SENSOR_BASE]; struct motion_sensor_t *lid = &motion_sensors[ CONFIG_LID_ANGLE_SENSOR_LID]; + int lid_angle; /* We don't have TASK_CHIP so simulate init ourselves */ hook_notify(HOOK_CHIPSET_SHUTDOWN); @@ -195,10 +197,10 @@ static int test_lid_angle(void) */ base->xyz[X] = 0; base->xyz[Y] = 0; - base->xyz[Z] = 1000; + base->xyz[Z] = ONE_G_MEASURED; lid->xyz[X] = 0; lid->xyz[Y] = 0; - lid->xyz[Z] = -1000; + lid->xyz[Z] = -ONE_G_MEASURED; gpio_set_level(GPIO_LID_OPEN, 0); /* Initial wake up, like init does */ task_wake(TASK_ID_MOTIONSENSE); @@ -208,11 +210,16 @@ static int test_lid_angle(void) task_wake(TASK_ID_MOTIONSENSE); wait_for_valid_sample(); - TEST_ASSERT(motion_lid_get_angle() == 0); + lid_angle = motion_lid_get_angle(); + cprints(CC_ACCEL, "LID(%d, %d, %d)/BASE(%d, %d, %d): %d", + lid->xyz[X], lid->xyz[Y], lid->xyz[Z], + base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); + TEST_ASSERT(lid_angle == 0); /* Set lid open to 90 degrees. */ lid->xyz[X] = 0; - lid->xyz[Y] = 1000; + lid->xyz[Y] = ONE_G_MEASURED; lid->xyz[Z] = 0; gpio_set_level(GPIO_LID_OPEN, 1); msleep(100); @@ -222,15 +229,15 @@ static int test_lid_angle(void) /* Set lid open to 225. */ lid->xyz[X] = 0; - lid->xyz[Y] = -500; - lid->xyz[Z] = 500; + lid->xyz[Y] = -1 * ONE_G_MEASURED * 0.707106; + lid->xyz[Z] = ONE_G_MEASURED * 0.707106; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == 225); /* Set lid open to 350 */ lid->xyz[X] = 0; - lid->xyz[Y] = -173; - lid->xyz[Z] = -984; + lid->xyz[Y] = -1 * ONE_G_MEASURED * 0.1736; + lid->xyz[Z] = -1 * ONE_G_MEASURED * 0.9848; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == 350); @@ -239,15 +246,15 @@ static int test_lid_angle(void) * open, we should be getting an unreliable reading. */ lid->xyz[X] = 0; - lid->xyz[Y] = 173; - lid->xyz[Z] = -984; + lid->xyz[Y] = ONE_G_MEASURED * 0.1736; + lid->xyz[Z] = -1 * ONE_G_MEASURED * 0.9848; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == LID_ANGLE_UNRELIABLE); /* Rotate back to 180 and then 10 */ lid->xyz[X] = 0; lid->xyz[Y] = 0; - lid->xyz[Z] = 1000; + lid->xyz[Z] = ONE_G_MEASURED; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == 180); @@ -256,8 +263,8 @@ static int test_lid_angle(void) * See SMALL_LID_ANGLE_RANGE. */ lid->xyz[X] = 0; - lid->xyz[Y] = 173; - lid->xyz[Z] = -984; + lid->xyz[Y] = ONE_G_MEASURED * 0.1736; + lid->xyz[Z] = -1 * ONE_G_MEASURED * 0.9848; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == LID_ANGLE_UNRELIABLE); @@ -265,7 +272,7 @@ static int test_lid_angle(void) * Align base with hinge and make sure it returns unreliable for angle. * In this test it doesn't matter what the lid acceleration vector is. */ - base->xyz[X] = 1000; + base->xyz[X] = ONE_G_MEASURED; base->xyz[Y] = 0; base->xyz[Z] = 0; wait_for_valid_sample(); @@ -275,12 +282,12 @@ static int test_lid_angle(void) * Use all three axes and set lid to negative base and make sure * angle is 180. */ - base->xyz[X] = 500; - base->xyz[Y] = 400; - base->xyz[Z] = 300; - lid->xyz[X] = 500; - lid->xyz[Y] = 400; - lid->xyz[Z] = 300; + base->xyz[X] = 5296; + base->xyz[Y] = 7856; + base->xyz[Z] = 13712; + lid->xyz[X] = 5296; + lid->xyz[Y] = 7856; + lid->xyz[Z] = 13712; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == 180); @@ -289,10 +296,10 @@ static int test_lid_angle(void) */ base->xyz[X] = 0; base->xyz[Y] = 0; - base->xyz[Z] = 1000; + base->xyz[Z] = ONE_G_MEASURED; lid->xyz[X] = 0; lid->xyz[Y] = 0; - lid->xyz[Z] = -1000; + lid->xyz[Z] = -1 * ONE_G_MEASURED; gpio_set_level(GPIO_LID_OPEN, 0); msleep(100); wait_for_valid_sample(); @@ -303,8 +310,8 @@ static int test_lid_angle(void) * be regarded as unreliable. */ lid->xyz[X] = 0; - lid->xyz[Y] = -173; - lid->xyz[Z] = -984; + lid->xyz[Y] = -1 * ONE_G_MEASURED * 0.1736; + lid->xyz[Z] = -1 * ONE_G_MEASURED * 0.9848; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == LID_ANGLE_UNRELIABLE); @@ -317,8 +324,8 @@ static int test_lid_angle(void) gpio_set_level(GPIO_LID_OPEN, 0); msleep(100); lid->xyz[X] = 0; - lid->xyz[Y] = 173; - lid->xyz[Z] = -984; + lid->xyz[Y] = ONE_G_MEASURED * 0.1736; + lid->xyz[Z] = -1 * ONE_G_MEASURED * 0.9848; wait_for_valid_sample(); TEST_ASSERT(motion_lid_get_angle() == 10); diff --git a/test/test_config.h b/test/test_config.h index 12331461e6..b5f81f4e1e 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -66,7 +66,8 @@ #define CONFIG_MAG_CALIBRATE #endif -#ifdef TEST_MOTION_LID +#if defined(TEST_MOTION_LID) || defined(TEST_MOTION_ANGLE) || \ + defined(TEST_MOTION_ANGLE_TABLET) #define CONFIG_LID_ANGLE #define CONFIG_LID_ANGLE_SENSOR_BASE 0 #define CONFIG_LID_ANGLE_SENSOR_LID 1 @@ -74,6 +75,19 @@ #define CONFIG_MOTION_FILL_LPC_SENSE_DATA #endif +#if defined(TEST_MOTION_ANGLE) +#define CONFIG_ACCEL_FORCE_MODE_MASK \ + ((1 << CONFIG_LID_ANGLE_SENSOR_BASE) | \ + (1 << CONFIG_LID_ANGLE_SENSOR_LID)) +#define CONFIG_ACCEL_STD_REF_FRAME_OLD +#endif + +#if defined(TEST_MOTION_ANGLE_TABLET) +#define CONFIG_ACCEL_FORCE_MODE_MASK \ + ((1 << CONFIG_LID_ANGLE_SENSOR_BASE) | \ + (1 << CONFIG_LID_ANGLE_SENSOR_LID)) +#endif + #ifdef TEST_RMA_AUTH /* Test server public and private keys */ -- cgit v1.2.1