Source directories are roughly separated by their dependencies.
Later, the build script will be updated to produce one shared object per one directory, and a dynamic loading routine will be applied.
Change-Id: Iceaae6740cebc15a89ce0631f13b1254640b12c4
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
ADD_DEFINITIONS(-O2 -Wall -fPIC -fdata-sections -ffunction-sections -fvisibility=hidden)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -Wl,--as-needed -Wl,--gc-section -Wl,--print-gc-section")
-# Base Dependency
-SET(dependencies libcontext-server)
-
# Profiles
IF("${PROFILE}" STREQUAL "mobile")
ADD_DEFINITIONS("-D_MOBILE_")
ADD_DEFINITIONS("-D_WEARABLE_")
ENDIF("${PROFILE}" STREQUAL "wearable")
-IF("${PROFILE}" STREQUAL "tv")
- ADD_DEFINITIONS("-D_TV_")
-ENDIF("${PROFILE}" STREQUAL "tv")
-# Include Sub-modules
-ADD_SUBDIRECTORY(src)
-MESSAGE("Compile definitions: ${compile_defs}")
+# Dependency & Source
+SET(DEPS
+ libcontext-server
+ vconf
+ capi-system-info
+ capi-system-device
+ capi-system-runtime-info
+ capi-appfw-package-manager
+ capi-appfw-application
+ capi-appfw-app-manager
+ pkgmgr
+ pkgmgr-info
+ capi-media-sound-manager
+ capi-network-bluetooth
+ capi-network-wifi
+ motion
+)
+
+FILE(GLOB SRCS
+ src/shared/*.cpp
+ src/time/*.cpp
+ src/activity/*.cpp
+ src/app-stats/*.cpp
+ src/headphone/*.cpp
+ src/system/*.cpp
+ src/wifi/*.cpp
+)
+
+IF("${PROFILE}" STREQUAL "mobile")
+SET(DEPS ${DEPS}
+ msg-service
+ contacts-service2
+ tapi
+ capi-telephony
+ capi-messaging-email
+ capi-content-media-content
+ capi-location-manager
+ capi-geofence-manager
+)
+
+FILE(GLOB SRCS ${SRCS}
+ src/call/*.cpp
+ src/contacts/*.cpp
+ src/email/*.cpp
+ src/geofence/*.cpp
+ src/media-stats/*.cpp
+ src/message/*.cpp
+ src/my-place/*.cpp
+ src/my-place/user_places/*.cpp
+ src/social-stats/*.cpp
+)
+ENDIF("${PROFILE}" STREQUAL "mobile")
+
# Build
INCLUDE(FindPkgConfig)
-PKG_CHECK_MODULES(DEPS REQUIRED ${dependencies})
+PKG_CHECK_MODULES(DEPS REQUIRED ${DEPS})
FOREACH(flag ${DEPS_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)
-ADD_LIBRARY(${target} STATIC ${sources})
+ADD_LIBRARY(${target} STATIC ${SRCS})
TARGET_LINK_LIBRARIES(${target} ${DEPS_LDFLAGS})
SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_FLAGS ${EXTRA_CFLAGS})
SET_TARGET_PROPERTIES(${target} PROPERTIES COMPILE_DEFINITIONS "${compile_defs}")
SET_TARGET_PROPERTIES(${target} PROPERTIES VERSION ${FULLVER})
# Package Config
-FOREACH(item IN LISTS dependencies)
+FOREACH(item IN LISTS DEPS)
SET(deps_str "${deps_str} ${item}")
ENDFOREACH(item)
FILES_MATCHING PATTERN "*.h"
)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
-INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RuntimeLibraries)
+INSTALL(TARGETS ${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
%define BUILD_PROFILE %{?profile}%{!?profile:%{?tizen_profile_name}}
%define keepstatic 1
+%if "%{?BUILD_PROFILE}" == "tv"
+ExcludeArch: %{arm} aarch64 %ix86 x86_64
+%endif
+
BuildRequires: cmake
BuildRequires: pkgconfig(libcontext-server)
BuildRequires: pkgconfig(pkgmgr)
BuildRequires: pkgconfig(pkgmgr-info)
BuildRequires: pkgconfig(capi-media-sound-manager)
-
-%if "%{?BUILD_PROFILE}" == "mobile"
BuildRequires: pkgconfig(capi-network-bluetooth)
BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-telephony)
-BuildRequires: pkgconfig(tapi)
-BuildRequires: pkgconfig(msg-service)
-BuildRequires: pkgconfig(capi-messaging-email)
BuildRequires: pkgconfig(motion)
+
+%if "%{?BUILD_PROFILE}" == "mobile"
+BuildRequires: pkgconfig(msg-service)
BuildRequires: pkgconfig(contacts-service2)
+BuildRequires: pkgconfig(tapi)
+BuildRequires: pkgconfig(capi-telephony)
+BuildRequires: pkgconfig(capi-messaging-email)
BuildRequires: pkgconfig(capi-content-media-content)
BuildRequires: pkgconfig(capi-location-manager)
BuildRequires: pkgconfig(capi-geofence-manager)
%endif
-%if "%{?BUILD_PROFILE}" == "wearable"
-BuildRequires: pkgconfig(capi-network-bluetooth)
-BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-telephony)
-BuildRequires: pkgconfig(tapi)
-BuildRequires: pkgconfig(msg-service)
-BuildRequires: pkgconfig(motion)
-%endif
-
-%if "%{?BUILD_PROFILE}" == "tv"
-BuildRequires: pkgconfig(capi-network-bluetooth)
-BuildRequires: pkgconfig(capi-network-wifi)
-BuildRequires: pkgconfig(capi-content-media-content)
-%endif
-
%description
Context Provider
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-
-FUNCTION(add_provider prvd_name)
- ADD_SUBDIRECTORY(${prvd_name})
- GET_DIRECTORY_PROPERTY(srcs_subdir DIRECTORY ${prvd_name} DEFINITION prvd_srcs)
- GET_DIRECTORY_PROPERTY(deps_subdir DIRECTORY ${prvd_name} DEFINITION prvd_deps)
- GET_DIRECTORY_PROPERTY(cdef_subdir DIRECTORY ${prvd_name} DEFINITION prvd_cdef)
- SET(srcs_collected ${srcs_collected} ${srcs_subdir} PARENT_SCOPE)
- SET(deps_collected ${deps_collected} ${deps_subdir} PARENT_SCOPE)
- SET(cdef_collected ${cdef_collected} ${cdef_subdir} PARENT_SCOPE)
-ENDFUNCTION(add_provider)
-
-
-add_provider(device)
-add_provider(statistics)
-add_provider(place)
-#add_provider(custom)
-
-
-LIST(REMOVE_DUPLICATES deps_collected)
-
-SET(sources ${sources} ${srcs_collected} PARENT_SCOPE)
-SET(dependencies ${dependencies} ${deps_collected} PARENT_SCOPE)
-SET(compile_defs ${compile_defs} ${cdef_collected} PARENT_SCOPE)
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_ACTIVITY_STATUS_H_
+#define _DEVICE_ACTIVITY_STATUS_H_
+
+#include "ActivityBase.h"
+#include "ActivityTypes.h"
+
+#define GENERATE_ACTIVITY_PROVIDER(actPrvd, actSubj, actType) \
+ class actPrvd : public UserActivityBase { \
+ public: \
+ actPrvd() : UserActivityBase(actSubj, actType) {} \
+ }; \
+
+namespace ctx {
+ GENERATE_ACTIVITY_PROVIDER(UserActivityStationary, USER_ACT_SUBJ_STATIONARY, ACTIVITY_STATIONARY);
+ GENERATE_ACTIVITY_PROVIDER(UserActivityWalking, USER_ACT_SUBJ_WALKING, ACTIVITY_WALK);
+ GENERATE_ACTIVITY_PROVIDER(UserActivityRunning, USER_ACT_SUBJ_RUNNING, ACTIVITY_RUN);
+ GENERATE_ACTIVITY_PROVIDER(UserActivityInVehicle, USER_ACT_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE);
+}
+
+#endif // _DEVICE_ACTIVITY_STATUS_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include "ActivityTypes.h"
+#include "ActivityBase.h"
+
+using namespace ctx;
+
+UserActivityBase::UserActivityBase(const char *subject, activity_type_e type) :
+ DeviceProviderBase(subject),
+ __activityType(type),
+ __activityHandle(NULL)
+{
+}
+
+UserActivityBase::~UserActivityBase()
+{
+ if (__activityHandle)
+ activity_release(__activityHandle);
+}
+
+bool UserActivityBase::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/sensor.activity_recognition");
+}
+
+void UserActivityBase::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}",
+ "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}"
+ );
+}
+
+void UserActivityBase::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData)
+{
+ IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error);
+
+ UserActivityBase *instance = static_cast<UserActivityBase*>(userData);
+ instance->__handleUpdate(activity, data, timestamp);
+}
+
+void UserActivityBase::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp)
+{
+ IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity);
+
+ Json dataRead;
+ dataRead.set(NULL, USER_ACT_EVENT, USER_ACT_DETECTED);
+
+ activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW;
+ activity_get_accuracy(data, &accuracy);
+
+ switch (accuracy) {
+ case ACTIVITY_ACCURACY_HIGH:
+ dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_HIGH);
+ break;
+ case ACTIVITY_ACCURACY_MID:
+ dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_NORMAL);
+ break;
+ default:
+ dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_LOW);
+ break;
+ }
+
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+int UserActivityBase::subscribe()
+{
+ IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE);
+
+ activity_create(&__activityHandle);
+ IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+ int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this);
+ if (ret != ACTIVITY_ERROR_NONE) {
+ _E("Recognition starting failed");
+ activity_release(__activityHandle);
+ __activityHandle = NULL;
+ return ERR_OPERATION_FAILED;
+ }
+
+ return ERR_NONE;
+}
+
+int UserActivityBase::unsubscribe()
+{
+ IF_FAIL_RETURN(__activityHandle, ERR_NONE);
+
+ activity_stop_recognition(__activityHandle);
+ activity_release(__activityHandle);
+ __activityHandle = NULL;
+
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_ACTIVITY_STATUS_BASE_H_
+#define _DEVICE_ACTIVITY_STATUS_BASE_H_
+
+#include <string>
+#include <activity_recognition.h>
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class UserActivityBase : public DeviceProviderBase {
+ public:
+ UserActivityBase(const char *subject, activity_type_e type);
+ virtual ~UserActivityBase();
+
+ int subscribe();
+ int unsubscribe();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ protected:
+ activity_type_e __activityType;
+ activity_h __activityHandle;
+
+ private:
+ void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp);
+ static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData);
+ };
+
+}
+
+#endif // _DEVICE_ACTIVITY_STATUS_BASE_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_ACTIVITY_STATUS_TYPES_H_
+#define _DEVICE_ACTIVITY_STATUS_TYPES_H_
+
+// Subject
+#define USER_ACT_SUBJ_IN_VEHICLE "activity/in_vehicle"
+#define USER_ACT_SUBJ_RUNNING "activity/running"
+#define USER_ACT_SUBJ_STATIONARY "activity/stationary"
+#define USER_ACT_SUBJ_WALKING "activity/walking"
+
+// Data Key
+#define USER_ACT_EVENT "Event"
+#define USER_ACT_ACCURACY "Accuracy"
+
+// Data Value
+#define USER_ACT_DETECTED "Detected"
+#define USER_ACT_LOW "Low"
+#define USER_ACT_NORMAL "Normal"
+#define USER_ACT_HIGH "High"
+
+#endif // _DEVICE_ACTIVITY_STATUS_TYPES_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <time.h>
+#include <app_manager.h>
+
+#include <Json.h>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "AppStatisticsTypes.h"
+#include "ActiveWindowMonitor.h"
+
+/* Active window changes frequently.
+ * We thus consider the apps being foregrounded at least 3 secs */
+#define ONE_DAY_IN_SEC 86400
+
+ctx::AppUseMonitor::AppUseMonitor() :
+ __signalId(-1),
+ __lastCleanupTime(0),
+ __dbusWatcher(DBusType::SYSTEM)
+{
+ __startLogging();
+}
+
+ctx::AppUseMonitor::~AppUseMonitor()
+{
+ __stopLogging();
+}
+
+bool ctx::AppUseMonitor::__startLogging()
+{
+ __signalId = __dbusWatcher.watch(NULL, "/Org/Tizen/Aul/AppStatus", "org.tizen.aul.AppStatus", "AppStatusChange", this);
+ _D("Active window monitoring started (%lld)", __signalId);
+ return (__signalId > 0);
+}
+
+void ctx::AppUseMonitor::__stopLogging()
+{
+ if (__signalId > 0) {
+ __dbusWatcher.unwatch(__signalId);
+ _D("Active window monitoring stopped");
+ }
+}
+
+void ctx::AppUseMonitor::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
+{
+ gint pid = 0;
+ const gchar *appId = NULL;
+ const gchar *pkgId = NULL;
+ const gchar *status = NULL;
+ const gchar *type = NULL;
+
+ g_variant_get(param, "(i&s&s&s&s)", &pid, &appId, &pkgId, &status, &type);
+ _D("AppEvent: %s, %s, %s", appId, status, type);
+
+ IF_FAIL_VOID(appId && status && type);
+ IF_FAIL_VOID(STR_EQ(type, "uiapp") && !__isSkippable(appId));
+
+ if (STR_EQ(status, "fg")) {
+ __createRecord(appId);
+ } else if (STR_EQ(status, "bg")) {
+ __finishRecord(appId);
+ __removeExpired();
+ }
+}
+
+void ctx::AppUseMonitor::__createRecord(std::string appId)
+{
+ int audioJack;
+ int systemVolume;
+ int mediaVolume;
+ std::string bssid;
+ Json data;
+ data.set(NULL, STATS_APP_ID, appId);
+
+ if (ctx::system_info::getAudioJackState(&audioJack))
+ data.set(NULL, STATS_AUDIO_JACK, audioJack);
+
+ if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
+ data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
+ data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
+ }
+
+ if (ctx::system_info::getWifiBssid(bssid))
+ data.set(NULL, STATS_BSSID, bssid);
+
+ __dbManager.insert(0, APP_TABLE_USAGE_LOG, data, NULL);
+}
+
+void ctx::AppUseMonitor::__finishRecord(std::string appId)
+{
+ /* TODO: It might be necessary to update system status here */
+ std::stringstream query;
+ query <<
+ "UPDATE " APP_TABLE_USAGE_LOG \
+ " SET " STATS_DURATION " = strftime('%s', 'now') - " STATS_UNIV_TIME \
+ " WHERE " STATS_COL_ROW_ID " = (" \
+ "SELECT MAX(" STATS_COL_ROW_ID ") FROM " APP_TABLE_USAGE_LOG \
+ " WHERE " STATS_APP_ID " = '" << appId << "'" \
+ " AND " STATS_DURATION " = 0)";
+ __dbManager.execute(0, query.str().c_str(), NULL);
+}
+
+bool ctx::AppUseMonitor::__isSkippable(std::string appId)
+{
+ /* TODO: circular cache */
+ app_info_h appInfo = NULL;
+ int err = app_manager_get_app_info(appId.c_str(), &appInfo);
+ IF_FAIL_RETURN_TAG(err == APP_MANAGER_ERROR_NONE && appInfo, true, _E, "app_manager_get_app_info() failed");
+
+ bool nodisp = false;
+ err = app_info_is_nodisplay(appInfo, &nodisp);
+ if (err != APP_MANAGER_ERROR_NONE) {
+ app_info_destroy(appInfo);
+ _E("app_info_is_nodisplay() failed");
+ return true;
+ }
+
+ app_info_destroy(appInfo);
+ return nodisp;
+}
+
+void ctx::AppUseMonitor::__removeExpired()
+{
+ int timestamp = static_cast<int>(time(NULL));
+ IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
+
+ __lastCleanupTime = timestamp;
+
+ std::stringstream query;
+ query << "DELETE FROM " APP_TABLE_USAGE_LOG " WHERE " \
+ STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
+ __dbManager.execute(0, query.str().c_str(), NULL);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_USE_MONITOR_H_
+#define _CONTEXT_STATS_APP_USE_MONITOR_H_
+
+#include <string>
+#include <sstream>
+#include <DBusSignalWatcher.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+ class AppUseMonitor : public IDBusSignalListener {
+ private:
+ int64_t __signalId;
+ int __lastCleanupTime;
+ DBusSignalWatcher __dbusWatcher;
+ DatabaseManager __dbManager;
+
+ bool __startLogging(void);
+ void __stopLogging(void);
+
+ bool __isSkippable(std::string appId);
+ void __createRecord(std::string appId);
+ void __finishRecord(std::string appId);
+ void __removeExpired();
+ void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
+
+ public:
+ AppUseMonitor();
+ ~AppUseMonitor();
+ }; /* class AppUseMonitor */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_USE_MONITOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_TYPES_H_
+#define _CONTEXT_STATS_APP_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define APP_HISTORY_PRIV "apphistory.read"
+#define APP_SUBJ_LOGGER "stats/app/logger"
+#define APP_SUBJ_RECENTLY_USED "stats/app/recently"
+#define APP_SUBJ_FREQUENTLY_USED "stats/app/often"
+#define APP_SUBJ_RARELY_USED "stats/app/rarely"
+#define APP_SUBJ_PEAK_TIME "stats/app/peak_time"
+#define APP_SUBJ_COMMON_SETTING "stats/app/setting"
+#define APP_SUBJ_FREQUENCY "stats/app/frequency"
+
+#define APP_TABLE_REMOVABLE_APP "Log_RemovableApp"
+#define APP_TABLE_REMOVABLE_APP_COLUMNS \
+ "AppId TEXT NOT NULL UNIQUE"
+
+#define APP_TABLE_USAGE_LOG "Log_AppLaunch"
+#define APP_TABLE_USAGE_LOG_COLUMNS \
+ "AppId TEXT NOT NULL, Duration INTEGER NOT NULL DEFAULT 0, " \
+ "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
+ "BSSID TEXT, " \
+ "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+ "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define APP_TEMP_USAGE_FREQ "Temp_AppLaunchFreq"
+#define APP_TEMP_USAGE_FREQ_SQL \
+ "CREATE TABLE IF NOT EXISTS " APP_TEMP_USAGE_FREQ \
+ " (AppId TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
+
+#endif /* End of _CONTEXT_STATS_APP_TYPES_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AppStatisticsTypes.h"
+#include "AppStatsLogger.h"
+
+using namespace ctx;
+
+AppStatsLogger::AppStatsLogger() :
+ ContextProvider(APP_SUBJ_LOGGER),
+ __initializer(NULL),
+ __installMon(NULL),
+ __launchMon(NULL)
+{
+ __initializer = new(std::nothrow) AppDbInitializer();
+ IF_FAIL_VOID_TAG(__initializer, _E, "Memory allocation failed");
+
+ __installMon = new(std::nothrow) AppInstallMonitor();
+ __launchMon = new(std::nothrow) AppUseMonitor();
+ IF_FAIL_CATCH_TAG(__installMon && __launchMon, _E, "Memory allocation failed");
+ return;
+
+CATCH:
+ delete __installMon;
+ delete __launchMon;
+ __installMon = NULL;
+ __launchMon = NULL;
+}
+
+AppStatsLogger::~AppStatsLogger()
+{
+ delete __installMon;
+ delete __launchMon;
+}
+
+int AppStatsLogger::subscribe(Json option, Json* requestResult)
+{
+ return ERR_NONE;
+}
+
+int AppStatsLogger::unsubscribe(Json option)
+{
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_APP_STATS_LOGGER_H_
+#define _CONTEXT_APP_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "DbInit.h"
+#include "InstallMonitor.h"
+#include "ActiveWindowMonitor.h"
+
+namespace ctx {
+
+ class AppStatsLogger : public ContextProvider {
+ public:
+ AppStatsLogger();
+ ~AppStatsLogger();
+
+ int subscribe(Json option, Json *requestResult);
+ int unsubscribe(Json option);
+
+ void submitTriggerItem() {}
+
+ private:
+ AppDbInitializer *__initializer;
+ AppInstallMonitor *__installMon;
+ AppUseMonitor *__launchMon;
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_APP_STATS_LOGGER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AppStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+AppStatsProvider::AppStatsProvider(const char *subject) :
+ ContextProvider(subject)
+{
+}
+
+AppStatsProvider::~AppStatsProvider()
+{
+}
+
+void AppStatsProvider::submitTriggerItem()
+{
+}
+
+int AppStatsProvider::read(Json option, Json *requestResult)
+{
+ AppDbHandle *handle = new(std::nothrow) AppDbHandle(this);
+ IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+ int err = handle->read(option);
+ if (err != ERR_NONE) {
+ delete handle;
+ return err;
+ }
+
+ return ERR_NONE;
+}
+
+void AppFreqProvider::submitTriggerItem()
+{
+ registerTriggerItem(OPS_READ,
+ "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
+ "{"
+ "\"AppId\":{\"type\":\"string\"},"
+ TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
+ "}");
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_APP_STATS_PROVIDER_H_
+#define _CONTEXT_APP_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "AppStatisticsTypes.h"
+
+namespace ctx {
+
+ class AppStatsProvider : public ContextProvider {
+ public:
+ int read(Json option, Json *requestResult);
+ virtual void submitTriggerItem();
+
+ protected:
+ AppStatsProvider(const char *subject);
+ virtual ~AppStatsProvider();
+ };
+
+
+ class RecentAppProvider : public AppStatsProvider {
+ public:
+ RecentAppProvider() :
+ AppStatsProvider(APP_SUBJ_RECENTLY_USED) {}
+ };
+
+
+ class FrequentAppProvider : public AppStatsProvider {
+ public:
+ FrequentAppProvider() :
+ AppStatsProvider(APP_SUBJ_FREQUENTLY_USED) {}
+ };
+
+
+ class RareAppProvider : public AppStatsProvider {
+ public:
+ RareAppProvider() :
+ AppStatsProvider(APP_SUBJ_RARELY_USED) {}
+ };
+
+
+ class AppPeakTimeProvider : public AppStatsProvider {
+ public:
+ AppPeakTimeProvider() :
+ AppStatsProvider(APP_SUBJ_PEAK_TIME) {}
+ };
+
+
+ class AppSettingProvider : public AppStatsProvider {
+ public:
+ AppSettingProvider() :
+ AppStatsProvider(APP_SUBJ_COMMON_SETTING) {}
+ };
+
+
+ class AppFreqProvider : public AppStatsProvider {
+ public:
+ AppFreqProvider() :
+ AppStatsProvider(APP_SUBJ_FREQUENCY) {}
+
+ void submitTriggerItem();
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_APP_STATS_PROVIDER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "AppStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+AppDbHandle::AppDbHandle(ContextProvider *provider) :
+ StatsDbHandleBase(provider)
+{
+}
+
+AppDbHandle::~AppDbHandle()
+{
+}
+
+int AppDbHandle::read(Json filter)
+{
+ std::string query;
+ const char *subject = reqProvider->getSubject();
+
+ if (STR_EQ(subject, APP_SUBJ_RECENTLY_USED)) {
+ query = createSqlRecentlyUsed(filter);
+
+ } else if (STR_EQ(subject, APP_SUBJ_FREQUENTLY_USED)) {
+ query = createSqlFrequentlyUsed(filter);
+
+ } else if (STR_EQ(subject, APP_SUBJ_RARELY_USED)) {
+ query = createSqlRarelyUsed(filter);
+
+ } else if (STR_EQ(subject, APP_SUBJ_PEAK_TIME)) {
+ query = createSqlPeakTime(filter);
+
+ } else if (STR_EQ(subject, APP_SUBJ_COMMON_SETTING)) {
+ query = createSqlCommonSetting(filter);
+
+ } else if (STR_EQ(subject, APP_SUBJ_FREQUENCY)) {
+ isTriggerItem = true;
+ query = createSqlFrequency(filter);
+ }
+
+ IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+ bool ret = executeQuery(filter, query.c_str());
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+ return ERR_NONE;
+}
+
+std::string AppDbHandle::createWhereClauseWithDeviceStatus(Json filter)
+{
+ std::stringstream whereClause;
+ std::string bssid;
+ int audioJack;
+
+ whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+ if (filter.get(NULL, STATS_BSSID, &bssid))
+ whereClause << " AND " STATS_BSSID " = '" << bssid << "'";
+
+ if (filter.get(NULL, STATS_AUDIO_JACK, &audioJack))
+ whereClause << " AND " STATS_AUDIO_JACK " = " << audioJack;
+
+ return whereClause.str();
+}
+
+std::string AppDbHandle::createSqlPeakTime(Json filter)
+{
+ return StatsDbHandleBase::createSqlPeakTime(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
+}
+
+std::string AppDbHandle::createSqlCommonSetting(Json filter)
+{
+ return StatsDbHandleBase::createSqlCommonSetting(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
+}
+
+std::string AppDbHandle::createSqlFrequency(Json filter)
+{
+ Json filterCleaned;
+ std::string weekStr;
+ std::string timeOfDay;
+ std::string appId;
+
+ if (!filter.get(NULL, STATS_APP_ID, &appId)) {
+ _E("Invalid parameter");
+ return "";
+ }
+
+ if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+ filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+ if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+ filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+ std::string whereClause = createWhereClause(filterCleaned);
+
+ std::stringstream query;
+
+ query <<
+ "DELETE FROM " APP_TEMP_USAGE_FREQ ";";
+
+ query <<
+ "INSERT INTO " APP_TEMP_USAGE_FREQ \
+ " SELECT " STATS_APP_ID ", COUNT(*) AS " STATS_TOTAL_COUNT \
+ " FROM " APP_TABLE_USAGE_LOG \
+ " WHERE " << whereClause <<
+ " GROUP BY " STATS_APP_ID ";";
+
+ query <<
+ "INSERT OR IGNORE INTO " APP_TEMP_USAGE_FREQ " (" STATS_APP_ID ")" \
+ " VALUES ('" << appId << "');";
+
+ query <<
+ "SELECT S." STATS_APP_ID ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
+ " FROM " APP_TEMP_USAGE_FREQ " AS S" \
+ " LEFT JOIN " APP_TEMP_USAGE_FREQ " AS lesser" \
+ " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
+ " WHERE S." STATS_APP_ID " = '" << appId << "'";
+
+ return query.str();
+}
+
+std::string AppDbHandle::createSqlRecentlyUsed(Json filter)
+{
+ std::stringstream query;
+ int limit = DEFAULT_LIMIT;
+
+ filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+ query <<
+ "SELECT " STATS_APP_ID ", " \
+ "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+ "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+ "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+ " FROM " APP_TABLE_USAGE_LOG \
+ " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
+ " GROUP BY " STATS_APP_ID \
+ " ORDER BY MAX(" STATS_UNIV_TIME ") DESC" \
+ " LIMIT " << limit;
+
+ return query.str();
+}
+
+std::string AppDbHandle::createSqlFrequentlyUsed(Json filter)
+{
+ std::stringstream query;
+ int limit = DEFAULT_LIMIT;
+
+ filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+ query <<
+ "SELECT " STATS_APP_ID ", " \
+ "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+ "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+ "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+ " FROM " APP_TABLE_USAGE_LOG \
+ " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
+ " GROUP BY " STATS_APP_ID \
+ " ORDER BY COUNT(*) DESC" \
+ " LIMIT " << limit;
+
+ return query.str();
+}
+
+std::string AppDbHandle::createSqlRarelyUsed(Json filter)
+{
+ std::stringstream query;
+ int limit = DEFAULT_LIMIT;
+
+ filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+ query <<
+ "SELECT i." STATS_APP_ID ", " \
+ "COUNT(u." STATS_DURATION ") AS " STATS_TOTAL_COUNT ", " \
+ "IFNULL(SUM(u." STATS_DURATION "),0) AS " STATS_TOTAL_DURATION ", " \
+ "IFNULL(MAX(u." STATS_UNIV_TIME "),-1) AS " STATS_LAST_TIME \
+ " FROM " APP_TABLE_REMOVABLE_APP " i LEFT OUTER JOIN (" \
+ " SELECT * FROM " APP_TABLE_USAGE_LOG \
+ " WHERE " << createWhereClauseWithDeviceStatus(filter) << ") u" \
+ " ON i." STATS_APP_ID " = u." STATS_APP_ID \
+ " GROUP BY i." STATS_APP_ID \
+ " ORDER BY " STATS_TOTAL_COUNT " ASC" \
+ " LIMIT " << limit;
+
+ return query.str();
+}
+
+void AppDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+ IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), APP_SUBJ_FREQUENCY), _E, "Invalid subject");
+
+ Json results;
+ std::string valStr;
+ int val;
+
+ jsonResult.get(NULL, STATS_APP_ID, &valStr);
+ results.set(NULL, STATS_APP_ID, valStr);
+ jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+ results.set(NULL, STATS_TOTAL_COUNT, val);
+ jsonResult.get(NULL, STATS_RANK, &val);
+ results.set(NULL, STATS_RANK, val);
+
+ reqProvider->replyToRead(reqFilter, error, results);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_DB_HANDLE_H_
+#define _CONTEXT_STATS_APP_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+ class AppDbHandle : public StatsDbHandleBase {
+ public:
+ AppDbHandle(ContextProvider *provider);
+ ~AppDbHandle();
+
+ int read(Json filter);
+
+ protected:
+ std::string createWhereClauseWithDeviceStatus(Json filter);
+ std::string createSqlRecentlyUsed(Json filter);
+ std::string createSqlFrequentlyUsed(Json filter);
+ std::string createSqlRarelyUsed(Json filter);
+ std::string createSqlPeakTime(Json filter);
+ std::string createSqlCommonSetting(Json filter);
+ std::string createSqlFrequency(Json filter);
+ void replyTriggerItem(int error, Json &jsonResult);
+ };
+}
+
+#endif /* End of _CONTEXT_STATS_APP_DB_HANDLE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Json.h>
+#include <Types.h>
+#include "AppStatisticsTypes.h"
+#include "DbInit.h"
+
+#define EMPTY_CHECKER_QID 999
+
+ctx::AppDbInitializer::AppDbInitializer()
+{
+ __createTable();
+ __checkAppList();
+}
+
+ctx::AppDbInitializer::~AppDbInitializer()
+{
+}
+
+void ctx::AppDbInitializer::__createTable()
+{
+ static bool done = false;
+ IF_FAIL_VOID(!done);
+
+ __dbManager.createTable(0, APP_TABLE_USAGE_LOG, APP_TABLE_USAGE_LOG_COLUMNS, NULL, NULL);
+ __dbManager.createTable(0, APP_TABLE_REMOVABLE_APP, APP_TABLE_REMOVABLE_APP_COLUMNS, NULL, NULL);
+ __dbManager.execute(0, APP_TEMP_USAGE_FREQ_SQL, NULL);
+
+ done = true;
+}
+
+void ctx::AppDbInitializer::__checkAppList()
+{
+ __dbManager.execute(EMPTY_CHECKER_QID, "SELECT * FROM " APP_TABLE_REMOVABLE_APP " LIMIT 1", this);
+}
+
+void ctx::AppDbInitializer::__duplicateAppList()
+{
+ int err;
+ package_manager_filter_h filter;
+
+ err = package_manager_filter_create(&filter);
+ IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_create() failed");
+
+ err = package_manager_filter_add_bool(filter, PACKAGE_MANAGER_PKGINFO_PROP_REMOVABLE, true);
+ IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_add_bool() failed");
+
+ err = package_manager_filter_foreach_package_info(filter, __packageInfoCb, this);
+ IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_foreach_package_info() failed");
+
+CATCH:
+ if (filter)
+ package_manager_filter_destroy(filter);
+}
+
+bool ctx::AppDbInitializer::__packageInfoCb(package_info_h packageInfo, void *userData)
+{
+ int err = package_info_foreach_app_from_package(packageInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
+ IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_info_foreach_app_from_package() failed");
+ return true;
+}
+
+bool ctx::AppDbInitializer::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
+{
+ Json data;
+ DatabaseManager dbManager;
+
+ data.set(NULL, STATS_APP_ID, appId);
+ return dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
+}
+
+void ctx::AppDbInitializer::onTableCreated(unsigned int queryId, int error)
+{
+}
+
+void ctx::AppDbInitializer::onInserted(unsigned int queryId, int error, int64_t rowId)
+{
+}
+
+void ctx::AppDbInitializer::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+ if (queryId != EMPTY_CHECKER_QID) {
+ _E("Unknown Query ID: %d", queryId);
+ delete this;
+ return;
+ }
+
+ if (records.empty())
+ __duplicateAppList();
+
+ delete this;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_DB_INITIALIZER_H_
+#define _CONTEXT_STATS_APP_DB_INITIALIZER_H_
+
+#include <package_manager.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+ class AppDbInitializer : public IDatabaseListener {
+ private:
+ void __createTable();
+ void __checkAppList();
+ void __duplicateAppList();
+
+ void onTableCreated(unsigned int queryId, int error);
+ void onInserted(unsigned int queryId, int error, int64_t rowId);
+ void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+ static bool __packageInfoCb(package_info_h packageInfo, void *userData);
+ static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
+
+ DatabaseManager __dbManager;
+
+ public:
+ AppDbInitializer();
+ ~AppDbInitializer();
+ };
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_DB_INITIALIZER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <glib.h>
+#include <Json.h>
+#include <Types.h>
+#include <DatabaseManager.h>
+#include "AppStatisticsTypes.h"
+#include "InstallMonitor.h"
+
+static package_manager_event_type_e __lastEventType;
+
+ctx::AppInstallMonitor::AppInstallMonitor() :
+ __pkgmgrHandle(NULL)
+{
+ __startMonitoring();
+}
+
+ctx::AppInstallMonitor::~AppInstallMonitor()
+{
+ __stopMonitoring();
+}
+
+bool ctx::AppInstallMonitor::__startMonitoring()
+{
+ int err = package_manager_create(&__pkgmgrHandle);
+ IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_create() failed");
+
+ err = package_manager_set_event_cb(__pkgmgrHandle, __packageEventCb, this);
+ IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_set_event_cb() failed");
+
+ return true;
+}
+
+void ctx::AppInstallMonitor::__stopMonitoring()
+{
+ if(__pkgmgrHandle) {
+ package_manager_unset_event_cb(__pkgmgrHandle);
+ package_manager_destroy(__pkgmgrHandle);
+ __pkgmgrHandle = NULL;
+ }
+}
+
+void ctx::AppInstallMonitor::__packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData)
+{
+ IF_FAIL_VOID_TAG(error == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager error: %d", error);
+
+ if (!(eventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) &&
+ !(eventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_STARTED)) {
+ _D("Skipping event type-%d / state-%d", eventType, eventState);
+ return;
+ }
+
+ package_info_h pkgInfo;
+ int err = package_manager_get_package_info(package, &pkgInfo);
+ IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_get_package_info() failed");
+
+ __lastEventType = eventType;
+
+ err = package_info_foreach_app_from_package(pkgInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
+ if (err != PACKAGE_MANAGER_ERROR_NONE)
+ _E("package_info_foreach_app_from_package() failed");
+
+ package_info_destroy(pkgInfo);
+}
+
+bool ctx::AppInstallMonitor::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
+{
+ DatabaseManager dbManager;
+
+ if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL) {
+ Json data;
+ data.set(NULL, STATS_APP_ID, appId);
+ dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
+ } else if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL) {
+ dbManager.execute(0, __createDeletionQuery(APP_TABLE_REMOVABLE_APP, appId).c_str(), NULL);
+ dbManager.execute(0, __createDeletionQuery(APP_TABLE_USAGE_LOG, appId).c_str(), NULL);
+ }
+
+ return true;
+}
+
+std::string ctx::AppInstallMonitor::__createDeletionQuery(const char* tableName, const char* appId)
+{
+ std::stringstream query;
+ query << "DELETE FROM " << tableName;
+ query << " WHERE " STATS_APP_ID " = '" << appId << "'";
+ return query.str();
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
+#define _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
+
+#include <package_manager.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+ class AppInstallMonitor : public IDatabaseListener {
+ private:
+ package_manager_h __pkgmgrHandle;
+
+ bool __startMonitoring();
+ void __stopMonitoring();
+
+ static std::string __createDeletionQuery(const char* tableName, const char* appId);
+ static void __packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData);
+ static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
+
+ void onTableCreated(unsigned int queryId, int error) {}
+ void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+ void onExecuted(unsigned int queryId, int error, std::vector<Json>& records) {}
+
+ public:
+ AppInstallMonitor();
+ ~AppInstallMonitor();
+ };
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_APP_INSTALL_MONITOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include <ContextManager.h>
+#include <Json.h>
+#include "AppInactiveDetector.h"
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetector.h"
+
+
+ctx::app_inactive_detector_provider *ctx::app_inactive_detector_provider::__instance = NULL;
+
+ctx::app_inactive_detector_provider::app_inactive_detector_provider()
+{
+}
+
+ctx::app_inactive_detector_provider::~app_inactive_detector_provider()
+{
+}
+
+ctx::ContextProvider *ctx::app_inactive_detector_provider::create(void *data)
+{
+ IF_FAIL_RETURN(!__instance, __instance);
+ __instance = new(std::nothrow) app_inactive_detector_provider();
+ IF_FAIL_RETURN_TAG(__instance, NULL, _E, "Memory allocation failed");
+ _I(BLUE("Created"));
+ return __instance;
+}
+
+void ctx::app_inactive_detector_provider::destroy(void *data)
+{
+ IF_FAIL_VOID(__instance);
+ delete __instance;
+ __instance = NULL;
+ _I(BLUE("Destroyed"));
+}
+
+int ctx::app_inactive_detector_provider::subscribe(const char *subject, ctx::Json option, ctx::Json* request_result)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int ctx::app_inactive_detector_provider::unsubscribe(const char *subject, ctx::Json option)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int ctx::app_inactive_detector_provider::read(const char *subject, ctx::Json option, ctx::Json* request_result)
+{
+ _I(BLUE("Read"));
+ _J("Option", option);
+
+ int error = engine->read(subject, option);
+ return error == ERR_NONE ? ERR_NONE : error;
+}
+
+int ctx::app_inactive_detector_provider::write(const char *subject, ctx::Json data, ctx::Json* request_result)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+bool ctx::app_inactive_detector_provider::is_supported()
+{
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_H__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_H__
+
+#include <ContextProvider.h>
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetector.h"
+
+namespace ctx {
+
+ class app_inactive_detector_provider : public ContextProvider {
+
+ public:
+ static ContextProvider *create(void *data);
+ static void destroy(void *data);
+ static bool is_supported();
+
+ int subscribe(const char *subject, ctx::Json option, ctx::Json *request_result);
+ int unsubscribe(const char *subject, ctx::Json option);
+ int read(const char *subject, ctx::Json option, ctx::Json *request_result);
+ int write(const char *subject, ctx::Json data, ctx::Json *request_result);
+
+ private:
+ static app_inactive_detector_provider *__instance;
+ inactive_detector *engine;
+
+ app_inactive_detector_provider();
+ ~app_inactive_detector_provider();
+
+ }; /* class app_inactive_detector_provider */
+
+} /* namespace ctx */
+
+#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_H__ */
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
+
+#include <string>
+
+// Context Items
+//#define APP_INACTIVE_SUBJ_RECALCULATE "app/recalculate"
+#define APP_INACTIVE_SUBJ_GET_APPS_INACTIVE "app/inactive"
+#define APP_INACTIVE_SUBJ_GET_APPS_ACTIVE "app/active"
+#define APP_INACTIVE_SUBJ_GET_APPS_WEIGHT "app/weight"
+#define APP_INACTIVE_SUBJ_UPDATE_CLUSTERS "app/update"
+
+enum {
+ APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT = 1,
+ APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE = 2,
+ APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE = 3,
+ APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS = 4
+};
+
+// Database
+#define APP_INACTIVE_DETECTOR_APPINFO_TABLE "context_app_info"
+#define APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "app_info"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID "_id"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "package_name"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE "package_type"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY "is_nodisplay"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED "is_enabled"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT "is_atboot"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED "is_preloaded"
+#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP "timestamp"
+
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE "context_app_launch_log"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "app_launch_log"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_ID "_id"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION "duration"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_SYSTEM_VOLUME "system_volume"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_BSSID "bssid"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP "timestamp"
+#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP_UTC "timestamp_utc"
+
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE "context_app_activity_classified"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "app_activity_classified"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ID "_id"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE "activity_rate"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME "timeframe"
+#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "is_active"
+
+
+#define APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "virtual_app_history"
+#define APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT "weight"
+
+// Output Data Key
+#define APP_INACTIVE_DETECTOR_DATA_READ "AppsList"
+#define APP_INACTIVE_DETECTOR_DATA_TIMESTAMP_FROM "timestamp_from"
+#define APP_INACTIVE_DETECTOR_ACTIVITY_RATE "activity_rate"
+#define APP_INACTIVE_DETECTOR_DATA_TIMEFRAME "timeframe"
+#define APP_INACTIVE_DETECTOR_DATA_ISACTIVE "is_active"
+
+//Other
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP "$timestamp"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER "$cluster"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME "$timeframe"
+#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES "$values"
+
+// Objects
+struct app_t {
+ int id;
+ std::string package_name;
+ int is_nodisplay;
+ int is_enabled;
+ int is_atboot;
+ int is_preloaded;
+ double timestamp;
+ int weight;
+ int is_active;
+ int timeframe;
+};
+
+
+#define APP_TYPE_INACTIVE_INACTIVE 1
+#define APP_TYPE_INACTIVE_ACTIVE 2
+
+
+#define APP_INACTIVE_TASK_START_HOUR 3
+#define APP_INACTIVE_TASK_START_MINUTE 0
+
+
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY 60*60*24
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS 60*60*24*3
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK 60*60*24*7
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS 60*60*24*14
+#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH 60*60*24*31
+
+
+
+#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__ */
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ctime>
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "InactiveDetectorWeight.h"
+#include "InactiveDetectorStorage.h"
+#include "InactiveDetectorClassificator.h"
+#include "TimerManager.h"
+
+ctx::inactive_detector::inactive_detector()
+{
+ timer_id = timer_mgr.setAt( // execute once every night
+ APP_INACTIVE_TASK_START_HOUR,
+ APP_INACTIVE_TASK_START_MINUTE,
+ DayOfWeek::EVERYDAY,
+ this);
+ if (timer_id < 0) {
+ _E("inactive_detector timer set FAIL");
+ return;
+ } else {
+ update_clusters();
+ _D("inactive_detector timer set SUCCESS");
+ }
+
+}
+
+ctx::inactive_detector::~inactive_detector()
+{
+ if (timer_id >= 0) {
+ timer_mgr.remove(timer_id);
+ _D("inactive_detejctor timer removed");
+ }
+
+}
+
+bool ctx::inactive_detector::onTimerExpired(int timerId)
+{
+ update_clusters();
+ return true;
+}
+
+int ctx::inactive_detector::update_clusters()
+{
+ // define timeframes stack
+ std::vector<int> timeframes;
+ timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY);
+ timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS);
+ timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK);
+ timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS);
+ timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH);
+
+ // recalculate weights
+ // foreach timeframe
+ for(std::vector<int>::iterator timeframe = timeframes.begin();
+ timeframe != timeframes.end(); timeframe++)
+ {
+ inactive_detector_weight i_detector_weight;
+ int error = i_detector_weight.request_weights(*timeframe);
+ _E("update_clusters request_weights:%d, error:%d", *timeframe, error);
+ }
+
+ return ERR_NONE;
+}
+
+void ctx::inactive_detector::on_cluster_update_finished(std::vector<app_t> *apps_with_weight, int error)
+{
+ if (error == ERR_NONE) {
+ _I("on_cluster_update_finished success");
+ }
+ // clean memory
+ delete apps_with_weight;
+}
+
+int ctx::inactive_detector::read(
+ const char *subject,
+ ctx::Json option)
+{
+ ctx::inactive_detector_storage *handle = new(std::nothrow) ctx::inactive_detector_storage();
+ IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+ int err = handle->read(subject, option);
+ if (err != ERR_NONE) {
+ delete handle;
+ return err;
+ }
+
+ return ERR_NONE;
+}
+
+ctx::Json ctx::inactive_detector::to_json(std::vector<app_t> *app_infos)
+{
+ ctx::Json data;
+
+ for(std::vector<app_t>::iterator app_info = app_infos->begin();
+ app_info != app_infos->end(); app_info++)
+ {
+ ctx::Json app_j;
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME, app_info->package_name);
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY, app_info->is_nodisplay);
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED, app_info->is_enabled);
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT, app_info->is_atboot);
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED, app_info->is_preloaded);
+ app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP, app_info->timestamp);
+ }
+ return data;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_H__
+#define __CONTEXT_INACTIVE_DETECTOR_H__
+
+#include <string>
+#include <Json.h>
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <TimerManager.h>
+
+namespace ctx {
+
+ class inactive_detector : public ITimerListener {
+ private:
+ int timer_id;
+ TimerManager timer_mgr;
+ public:
+ inactive_detector();
+ ~inactive_detector();
+
+ int read(const char *subject,
+ ctx::Json option);
+
+ int update_clusters();
+ void on_cluster_update_finished(
+ std::vector<app_t> *apps_classified,
+ int error);
+ ctx::Json to_json(std::vector<app_t> *apps);
+
+ bool onTimerExpired(int timerId);
+ }; /* class inactive_detector */
+
+} /* namespace ctx */
+
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetectorClassificator.h"
+#include "InactiveDetectorClassificatorKmeans.h"
+
+int ctx::inactive_detector_classificator::classify(std::vector<app_t> *apps_with_weights)
+{
+ inactive_detector_classificator_kmeans kmeans;
+ int error = kmeans.classify(apps_with_weights);
+
+ return error;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
+#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <Json.h>
+
+namespace ctx {
+
+ class inactive_detector_classificator
+ {
+ public:
+ inactive_detector_classificator();
+ ~inactive_detector_classificator();
+
+ int classify(std::vector<app_t> *apps_with_weights);
+ }; /* class inactive_detector_classificator */
+
+} /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <Types.h>
+#include "AppInactiveDetectorTypes.h"
+#include "InactiveDetectorClassificatorKmeans.h"
+#include "InactiveDetectorClassificatorKmeansTypes.h"
+#include <math.h>
+#include <stdlib.h>
+
+double ctx::inactive_detector_classificator_kmeans::randomf(double x)
+{
+ return x * rand() / (RAND_MAX - 1.);
+}
+
+double ctx::inactive_detector_classificator_kmeans::glide_function(double x)
+{
+ double value = sqrt(log(x) + 1);
+ return (value > 0 ? value : 0);
+}
+
+point_s *ctx::inactive_detector_classificator_kmeans::reproject_to_2d(std::vector<app_t> *apps_with_weights)
+{
+ int distr_size = apps_with_weights->size();
+ point_s *p = new point_s[distr_size];
+
+ int i=0;
+ for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
+ apps_with_weight != apps_with_weights->end(); apps_with_weight++)
+ {
+ point_s the_point;
+
+ the_point.x = glide_function(apps_with_weight->weight); // normalize weight values
+ the_point.y = 0; //remove 3rd dimension of the data
+ the_point.origin_id = apps_with_weight->package_name;
+
+ p[i] = the_point;
+ i++;
+ }
+
+ return p;
+}
+
+bool ctx::inactive_detector_classificator_kmeans::annotate_data(std::vector<app_t> *apps_with_weights, point_s *c)
+{
+ int i=0, max_group=-1;
+
+ for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
+ apps_with_weight != apps_with_weights->end(); apps_with_weight++)
+ {
+ apps_with_weight->is_active = c[i].group;
+ i++;
+ max_group = c[i].group > max_group ? c[i].group : max_group;
+ }
+
+ return max_group == APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT;
+}
+
+double ctx::inactive_detector_classificator_kmeans::distance_to(point_s *p_from,
+ point_s *p_to)
+{
+ double x = p_from->x - p_to->x, y = p_from->y - p_to->y;
+ return x*x + y*y;
+}
+
+int ctx::inactive_detector_classificator_kmeans::nearest(point_s *pt,
+ point_s *centers,
+ int cluster_number,
+ double *distance)
+{
+ int i;
+ int min_i = pt->group;
+ point_s *c;
+
+ double d;
+ double min_d = HUGE_VAL;
+
+ for_n {
+ if (min_d >(d = distance_to(c, pt))) {
+ min_d = d; min_i = i;
+ }
+ }
+
+ if (distance) *distance = min_d;
+ return min_i;
+}
+
+void ctx::inactive_detector_classificator_kmeans::kpp(point_s *points, int length, point_s *centers, int cluster_number)
+{
+ int j;
+ int n_cluster;
+ double sum;
+ double *d = new double[length];
+
+ point_s *p;
+ centers[0] = points[rand() % length];
+ for (n_cluster = 1; n_cluster < cluster_number; n_cluster++) {
+ sum = 0;
+ for_len{
+ nearest(p, centers, n_cluster, d + j);
+ sum += d[j];
+ }
+ sum = randomf(sum);
+ for_len{
+ if ((sum -= d[j]) > 0) continue;
+ centers[n_cluster] = points[j];
+ break;
+ }
+ }
+ for_len p->group = nearest(p, centers, n_cluster, 0);
+
+ delete d;
+}
+
+point_s *ctx::inactive_detector_classificator_kmeans::lloyd(point_s *points, int length, int cluster_number)
+{
+ int i, j, min_i;
+ int changed;
+
+ point_s *centers = new point_s;
+ point_s *p, *c;
+
+ /* k++ init */
+ kpp(points, length, centers, cluster_number);
+
+ do {
+ /* group element for centroids are used as counters */
+ for_n{ c->group = 0; c->x = c->y = 0; }
+ for_len{
+ c = centers + p->group;
+ c->group++;
+ c->x += p->x; c->y += p->y;
+ }
+ for_n{ c->x /= c->group; c->y /= c->group; }
+
+ changed = 0;
+ /* find closest centroid of each point */
+ for_len{
+ min_i = nearest(p, centers, cluster_number, 0);
+ if (min_i != p->group) {
+ changed++;
+ p->group = min_i;
+ }
+ }
+ } while (changed > (length >> 10)); /* stop when 99.9% of points are good */
+
+ for_n{ c->group = i; }
+
+ return centers;
+}
+
+int ctx::inactive_detector_classificator_kmeans::classify(std::vector<app_t> *apps_with_weights)
+{
+ //array of generated points
+ point_s *v = reproject_to_2d(apps_with_weights);
+ //mark cluster for each point, output centers
+ point_s *c = lloyd(v, apps_with_weights->size(), APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT);
+ //append the result to input data
+ bool classification_is_success = annotate_data(apps_with_weights, c);
+
+ return classification_is_success ? ERR_NONE : ERR_OPERATION_FAILED;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
+#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
+
+#include <vector>
+#include "InactiveDetectorClassificatorKmeansTypes.h"
+#include <Json.h>
+
+namespace ctx {
+
+ #define for_n for (c = centers, i = 0; i < cluster_number; i++, c++)
+ #define for_len for (j = 0, p = points; j < length; j++, p++)
+
+ class inactive_detector_classificator_kmeans
+ {
+ private:
+ double randomf(double x);
+ double glide_function(double x);
+ point_s *reproject_to_2d(std::vector<app_t> *apps_with_weights);
+ bool annotate_data(std::vector<app_t> *apps_with_weights, point_s *c);
+
+ double distance_to(point_s *p_from, point_s *p_to);
+ int nearest(point_s *pt, point_s *centers, int cluster_number, double *distance);
+ void kpp(point_s *points, int length, point_s *centers, int centers_count);
+ point_s *lloyd(point_s *points, int length, int cluster_number);
+ public:
+ inactive_detector_classificator_kmeans();
+ ~inactive_detector_classificator_kmeans();
+
+ int classify(std::vector<app_t> *apps_with_weights);
+ }; /* class inactive_detector_classificator_kmeans */
+} /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
+#define __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
+
+#define APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT 2
+
+typedef struct {
+ std::string origin_id;
+ double x;
+ double y;
+ int group;
+} point_s;
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <ctime>
+#include <string>
+#include <memory>
+#include <Types.h>
+#include "InactiveDetector.h"
+#include "InactiveDetectorStorage.h"
+#include "InactiveDetectorStorageQueries.h"
+#include "InactiveDetectorClassificator.h"
+#include "AppInactiveDetectorTypes.h"
+
+/*int ctx::inactive_detector_storage::create_table()
+{
+ bool ret = __dbManager.createTable(0, WIFI_TABLE_NAME, WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
+ _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
+ return ret;
+}*/
+
+
+
+// expected Json format example: {timeframe: 1; is_active: 0}
+int ctx::inactive_detector_storage::read(
+ const char *subject,
+ ctx::Json filter)
+{
+ std::string query;
+ query = query_get_apps(subject, filter);
+
+ IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+ bool ret = __dbManager.execute(
+ STR_EQ(subject, APP_INACTIVE_SUBJ_GET_APPS_INACTIVE) ?
+ APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE :
+ APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE,
+ query.c_str(),
+ this);
+
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+ return ERR_NONE;
+}
+
+std::string ctx::inactive_detector_storage::query_get_apps(const char *subject, ctx::Json filter)
+{
+ double timeframe;
+ int is_active;
+
+ std::string query(GET_APP_INFO_INACTIVE_QUERY);
+ std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
+ std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
+
+ filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_TIMEFRAME, &timeframe);
+ filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_ISACTIVE, &is_active);
+
+ std::stringstream timeframe_stream;
+ timeframe_stream << timeframe;
+
+ std::stringstream is_active_stream;
+ is_active_stream << is_active;
+
+ inject_params(query, placeholder_timeframe, timeframe_stream.str());
+ inject_params(query, placeholder_is_active, is_active_stream.str());
+
+ return query;
+}
+
+std::string ctx::inactive_detector_storage::query_update_apps(std::vector<app_t> *apps_with_weights)
+{
+ std::string delete_query(DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME);
+ std::string insert_query(INSERT_APP_ACTIVITY_CLASSIFIED);
+ std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
+ std::string placeholder_values(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES);
+ std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
+
+ std::stringstream timeframe_stream;
+ timeframe_stream << apps_with_weights->front().timeframe;
+
+ inject_params(delete_query, placeholder_timeframe, timeframe_stream.str());
+ inject_params(insert_query, placeholder_values, subquery_form_values(apps_with_weights));
+
+ std::stringstream result;
+ result << delete_query << insert_query;
+ return result.str();
+}
+
+// foreach app_info id+cluster -> select for insert
+std::string ctx::inactive_detector_storage::subquery_form_values(std::vector<app_t> *apps_with_weights)
+{
+ std::stringstream select_elements;
+
+ for(std::vector<app_t>::iterator row = apps_with_weights->begin();
+ row != apps_with_weights->end(); row++)
+ {
+ //SELECT 1 as is_active, 1 as timeframe, 3964 as context_app_info_id
+ std::stringstream select_element;
+ select_element << " SELECT " << row->is_active << " as ";
+ select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE;
+ select_element << ", " << row->timeframe << " as ";
+ select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME;
+ select_element << ", " << row->id << " as ";
+ select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID;
+
+ if ((row != apps_with_weights->end()) && (row == --apps_with_weights->end()))
+ select_element << " UNION ";
+
+ select_elements << select_element;
+ }
+
+ return select_elements.str();
+}
+
+void ctx::inactive_detector_storage::json_to_object(std::vector<Json>& records,
+ std::vector<app_t> *apps_with_weights, bool result_mode)
+{
+ for(std::vector<Json>::iterator row = records.begin();
+ row != records.end(); row++)
+ {
+ app_t app_with_weight;
+ if (result_mode)
+ {
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME,
+ &app_with_weight.package_name);
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY,
+ &app_with_weight.is_nodisplay);
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED,
+ &app_with_weight.is_enabled);
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT,
+ &app_with_weight.is_atboot);
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED,
+ &app_with_weight.is_preloaded);
+ row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
+ &app_with_weight.weight);
+ }
+ else
+ {
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID,
+ &app_with_weight.id);
+ row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP,
+ &app_with_weight.timestamp);
+ row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
+ &app_with_weight.weight);
+ row->get(NULL, APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE,
+ &app_with_weight.is_active);
+ }
+
+ apps_with_weights->push_back(app_with_weight);
+ }
+}
+
+void ctx::inactive_detector_storage::onExecuted(unsigned int query_id,
+ int error,
+ std::vector<Json>& records)
+{
+ if (error != ERR_NONE) {
+ _E("query_id:%d, error:%d", query_id, error);
+ return;
+ }
+
+ std::vector<app_t> *apps_with_weights = NULL;
+ if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE ||
+ query_id == APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE)
+ {
+ json_to_object(records, apps_with_weights, TRUE);
+ }
+ else if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT) {
+
+ json_to_object(records, apps_with_weights, FALSE);
+
+ if (apps_with_weights->size() > 0) {
+ inactive_detector_classificator i_detector_classificator;
+ int _error = i_detector_classificator.classify(apps_with_weights);
+
+ if(_error == ERR_NONE)
+ {
+ std::string query;
+ query = query_update_apps(apps_with_weights);
+ bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS,
+ query.c_str(),
+ this);
+ _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+ }
+ else
+ {
+ _E("classification query_id:%d, error:%d",
+ query_id, _error);
+ }
+ }
+ }
+ else if (query_id == APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS) {
+ _D("UPDATE_CLUSTERS execute query id: %d", query_id);
+ }
+ else {
+ _E("unknown query_id:%d", query_id);
+ }
+}
+
+void ctx::inactive_detector_storage::inject_params(std::string& str, const std::string& from, const std::string& to)
+{
+ if(from.empty())
+ return;
+ size_t start_pos = 0;
+ while((start_pos = str.find(from, start_pos)) != std::string::npos) {
+ str.replace(start_pos, from.length(), to);
+ start_pos += to.length();
+ }
+}
+
+// normalzie weights
+int ctx::inactive_detector_storage::update_ranks()
+{
+ return ERR_NONE;
+}
+
+int ctx::inactive_detector_storage::get_apps_info_w_weights(
+ double timestamp_from)
+{
+ std::stringstream timestamp_stream;
+ timestamp_stream << timestamp_from;
+ std::string timestamp_str = timestamp_stream.str();
+
+ std::string query(GET_APP_INFO_W_WEIGHT_QUERY);
+ std::string placeholder(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP);
+
+ inject_params(query, placeholder, timestamp_str);
+
+ bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT,
+ query.c_str(),
+ this);
+ _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+
+ return ERR_NONE ;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
+#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+#include <Json.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+ class inactive_detector_storage : public IDatabaseListener
+ {
+ private:
+ //int type; //TODO: enum
+ void inject_params(std::string& str,
+ const std::string& from,
+ const std::string& to);
+
+ void json_to_object(std::vector<Json>& records,
+ std::vector<app_t> *apps_with_weights, bool result_mode);
+
+ std::string query_get_apps(const char *subject,
+ ctx::Json filter);
+
+ std::string query_update_apps(std::vector<app_t> *apps_with_weights);
+
+ std::string subquery_form_values(std::vector<app_t> *apps_with_weights);
+
+ void onTableCreated(unsigned int query_id, int error) {}
+ void onInserted(unsigned int query_id, int error, int64_t row_id) {}
+ void onExecuted(unsigned int query_id, int error, std::vector<Json>& records);
+
+ DatabaseManager __dbManager;
+
+ public:
+ inactive_detector_storage();
+ ~inactive_detector_storage();
+
+ int read(const char *subject,
+ ctx::Json filter);
+
+ int update_ranks();
+ int get_apps_info_w_weights(double timestamp_from);
+ }; /* class inactive_detector_storage */
+
+} /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
+#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
+
+#include <vector>
+#include "AppInactiveDetectorTypes.h"
+
+/*
+
+--1 calculate weights
+SELECT
+ app_info._id,
+ app_info.package_name,
+ app_info.is_nodisplay,
+ app_info.is_enabled,
+ app_info.is_atboot,
+ app_info.is_preloaded,
+ app_info.timestamp,
+
+ app_hist_g.weight as weight
+FROM
+ context_app_info app_info
+
+INNER JOIN
+
+ (SELECT
+ distinct package_name ,
+ IFNULL((select count(package_name) from context_app_launch_log
+ where package_name == app_hist.package_name AND timestamp> 8640412900), 0 )
+ *
+ IFNULL((select sum(duration) from context_app_launch_log
+ where package_name == app_hist.package_name AND timestamp> 8640412900) , 0)
+ as weight
+
+ FROM context_app_launch_log app_hist
+)app_hist_g
+
+ON app_hist_g.package_name
+=
+app_info.package_name
+
+ORDER BY app_hist_g.weight
+
+*/
+
+#define GET_APP_INFO_W_WEIGHT_QUERY "SELECT "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP ", "\
+ ""\
+ " " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
+ ""\
+ " FROM " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS \
+ ""\
+ " INNER JOIN " \
+ " (SELECT "\
+ " DISTINCT " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "," \
+ " IFNULL((SELECT COUNT(" APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ")" \
+ " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
+ " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+ " AND " \
+ " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
+ "), 0) " \
+ " * " \
+ " IFNULL((SELECT SUM(" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION ")" \
+ " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
+ " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+ " AND " \
+ " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
+ ""\
+ "), 0) " \
+ " as " APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
+ " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS \
+ ") " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS \
+ " ON " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+ " = " \
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
+ " ORDER BY " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT
+
+/*
+--2 select inner join context_app_info
+SELECT
+ app_info.package_name,
+ app_info.is_nodisplay,
+ app_info.is_enabled,
+ app_info.is_atboot,
+ app_info.is_preloaded,
+
+ activity_classified.activity_rate
+
+FROM
+ context_activity_classified activity_classified
+INNER JOIN
+ context_app_info app_info
+ON activity_classified.context_app_info_id = app_info._id
+
+WHERE
+ activity_classified.is_active = 1
+ AND
+ activity_classified.timeframe = 1
+*/
+
+#define GET_APP_INFO_INACTIVE_QUERY "SELECT "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
+ " "\
+ " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE " "\
+ " FROM "\
+ " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS " "\
+ " INNER JOIN "\
+ " " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS " "\
+ " ON " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ""\
+ " = " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID " "\
+ " WHERE "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ""\
+ " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER ""\
+ " AND "\
+ " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ""\
+ " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME ""
+
+/*
+--3 update ranks and clusters for each timeframe: delete all for each time frame, add new calculations for apps
+DELETE FROM
+ context_activity_classified
+WHERE
+ timeframe = 1
+*/
+
+#define DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME "DELETE FROM "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
+ " WHERE "\
+ " timeframe = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME
+
+
+/*INSERT INTO
+ context_activity_classified
+ (is_active,
+ timeframe,
+ context_app_info_id)
+SELECT
+ is_active,
+ timeframe,
+ context_app_info_id
+FROM --make loop
+ (
+ SELECT 1 as is_active, 1 as timeframe, 3964 as context_app_info_id
+ UNION
+ SELECT 0 as is_active, 1 as timeframe, 3964 as context_app_info_id
+ ) q
+*/
+
+#define INSERT_APP_ACTIVITY_CLASSIFIED " INSERT INTO "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
+ "( " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ", "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ")" \
+"SELECT " \
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "," \
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
+ APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID \
+"FROM"\
+ "(" \
+ APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES \
+ ") q"
+
+
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include "InactiveDetectorWeight.h"
+#include "InactiveDetectorStorage.h"
+
+int ctx::inactive_detector_weight::request_weights(
+ double timestamp_from)
+{
+ inactive_detector_storage ids;
+ // query the database for the result
+ int error = ids.get_apps_info_w_weights(timestamp_from);
+
+ return error;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
+#define __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
+
+// #include <string>
+// #include <sstream>
+
+namespace ctx {
+
+ class inactive_detector_weight {
+ public:
+ inactive_detector_weight() {};
+ ~inactive_detector_weight() {};
+ int request_weights(double timestamp_from);// {};
+ }; /* class inactive_detector_weight */
+
+} /* namespace ctx */
+
+#endif /* __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__ */
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Call.h"
+
+#define TELEPHONY_NOTI_ID_CNT 8
+
+using namespace ctx;
+
+static bool __telephonyInitialized = false;
+static telephony_noti_e __callNotiIds[] =
+{
+ TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE,
+ TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE,
+// TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD,
+// TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING,
+ TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING,
+ TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING,
+ TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE,
+ TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE,
+// TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING,
+ TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING,
+ TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING,
+};
+static Json __latest;
+
+SocialStatusCall::SocialStatusCall() :
+ DeviceProviderBase(SOCIAL_ST_SUBJ_CALL)
+{
+ __handleList.count = 0;
+ __handleList.handle = NULL;
+}
+
+SocialStatusCall::~SocialStatusCall()
+{
+}
+
+bool SocialStatusCall::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusCall::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{"
+ "\"Medium\":{\"type\":\"string\",\"values\":[\"Voice\",\"Video\"]},"
+ "\"State\":{\"type\":\"string\",\"values\":[\"Idle\",\"Connecting\",\"Connected\"]},"
+ "\"Address\":{\"type\":\"string\"}"
+ "}",
+ NULL);
+ /* TODO remove Connecting, Connected */
+}
+
+void SocialStatusCall::__updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData)
+{
+ SocialStatusCall *instance = static_cast<SocialStatusCall*>(userData);
+ instance->__handleUpdate(handle, notiId, data);
+}
+
+void SocialStatusCall::__handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id)
+{
+ Json data;
+ unsigned int count;
+ telephony_call_h *callList;
+
+ // Call state
+ switch (notiId) {
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
+ data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+ break;
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
+ data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ACTIVE);
+ break;
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
+ data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ALERTING);
+ break;
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
+ data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_INCOMING);
+ break;
+/* // Ignore below cases
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
+ default:
+ _E("Unkown noti id: %d", notiId);
+ return;
+ }
+
+ // Call type
+ switch (notiId) {
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
+ data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VOICE);
+ break;
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
+ data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VIDEO);
+ break;
+/* // Ignore below cases
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
+ case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
+ case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
+ default:
+ _E("Unkown noti id: %d", notiId);
+ return;
+ }
+
+ int err = telephony_call_get_call_list(handle, &count, &callList);
+ IF_FAIL_VOID_TAG(err == TELEPHONY_ERROR_NONE, _E, "Getting call list failed");
+
+ unsigned int callId = *static_cast<unsigned int *>(id);
+ for (unsigned int i = 0; i < count; i++) {
+ unsigned int tempId;
+ // Handle id
+ if (!__getCallHandleId(callList[i], tempId)) {
+ continue;
+ }
+
+ if (callId != tempId) {
+ continue;
+ }
+
+ // Address
+ std::string address;
+ if (__getCallAddress(callList[i], address)) {
+ data.set(NULL, SOCIAL_ST_ADDRESS, address);
+ break;
+ }
+ }
+
+ if (__latest != data) {
+ publish(NULL, ERR_NONE, data);
+ __latest = data.str();
+ }
+ telephony_call_release_call_list(count, &callList);
+}
+
+bool SocialStatusCall::__initTelephony()
+{
+ IF_FAIL_RETURN(!__telephonyInitialized, true);
+
+ int err = telephony_init(&__handleList);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Initialization failed");
+
+ __telephonyInitialized = true;
+ return true;
+}
+
+void SocialStatusCall::__releaseTelephony()
+{
+ IF_FAIL_VOID(__telephonyInitialized);
+
+ telephony_deinit(&__handleList);
+
+ __telephonyInitialized = false;
+}
+
+bool SocialStatusCall::__setCallback()
+{
+ /* TODO: Consider dual-sim devices */
+ IF_FAIL_RETURN_TAG(__initTelephony(), false, _E, "Initialization failed");
+
+ int err;
+
+ for (unsigned int i = 0; i < __handleList.count; i++) {
+ for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
+ err = telephony_set_noti_cb(__handleList.handle[i], __callNotiIds[j], __updateCb, this);
+ IF_FAIL_CATCH(err == TELEPHONY_ERROR_NONE);
+ }
+ }
+
+ return true;
+
+CATCH:
+ _E("Initialization failed");
+ __releaseTelephony();
+ return false;
+}
+
+void SocialStatusCall::__unsetCallback()
+{
+ for (unsigned int i = 0; i < __handleList.count; i++) {
+ for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
+ telephony_unset_noti_cb(__handleList.handle[i], __callNotiIds[j]);
+ }
+ }
+
+ __releaseTelephony();
+}
+
+bool SocialStatusCall::__getCallState(telephony_call_h& handle, std::string& state)
+{
+ state.clear();
+
+ telephony_call_status_e st;
+ int err = telephony_call_get_status(handle, &st);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting state failed");
+
+ switch (st) {
+ case TELEPHONY_CALL_STATUS_ACTIVE:
+ state = SOCIAL_ST_ACTIVE;
+ break;
+ case TELEPHONY_CALL_STATUS_HELD:
+ state = SOCIAL_ST_HELD;
+ break;
+ case TELEPHONY_CALL_STATUS_DIALING:
+ state = SOCIAL_ST_DIALING;
+ break;
+ case TELEPHONY_CALL_STATUS_ALERTING:
+ state = SOCIAL_ST_ALERTING;
+ break;
+ case TELEPHONY_CALL_STATUS_INCOMING:
+ state = SOCIAL_ST_INCOMING;
+ break;
+ default:
+ state = SOCIAL_ST_IDLE;
+ }
+
+ IF_FAIL_RETURN_TAG(!state.empty(), false, _W, "State is empty");
+
+ return true;
+}
+
+bool SocialStatusCall::__getCallType(telephony_call_h& handle, std::string& type)
+{
+ type.clear();
+
+ telephony_call_type_e t;
+ int err = telephony_call_get_type(handle, &t);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting type failed");
+
+ switch (t) {
+ case TELEPHONY_CALL_TYPE_VOICE:
+ type = SOCIAL_ST_VOICE;
+ break;
+ case TELEPHONY_CALL_TYPE_VIDEO:
+ type = SOCIAL_ST_VIDEO;
+ break;
+ default:
+ _E("Unknown type: %d", t);
+ return false;
+ }
+
+ IF_FAIL_RETURN_TAG(!type.empty(), false, _W, "Type is empty");
+
+ return true;
+}
+
+bool SocialStatusCall::__getCallAddress(telephony_call_h& handle, std::string& address)
+{
+ address.clear();
+
+ char* number = NULL;
+ int err = telephony_call_get_number(handle, &number);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting address failed");
+
+ if (number) {
+ address = number;
+ g_free(number);
+ number = NULL;
+ }
+
+ IF_FAIL_RETURN_TAG(!address.empty(), false, _W, "Address is empty");
+
+ return true;
+}
+
+bool SocialStatusCall::__getCallHandleId(telephony_call_h& handle, unsigned int& id)
+{
+ int err = telephony_call_get_handle_id(handle, &id);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting handle id failed");
+
+ return true;
+}
+
+int SocialStatusCall::subscribe()
+{
+ bool ret = __setCallback();
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int SocialStatusCall::unsubscribe()
+{
+ __unsetCallback();
+ return ERR_NONE;
+}
+
+bool SocialStatusCall::__readCurrentStatus(telephony_h& handle, Json* data)
+{
+ unsigned int count = 0;
+ telephony_call_h *callList = NULL;
+ telephony_call_get_call_list(handle, &count, &callList);
+
+ // Default data
+ data->set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+
+ // Held & Dialing are ignored
+ for (unsigned int i = 0; i < count; i++) {
+ // Call state
+ std::string state;
+ if (__getCallState(callList[i], state)) {
+ // Skip Held & Dialing
+ if (state.compare(SOCIAL_ST_HELD) == 0 || state.compare(SOCIAL_ST_DIALING) == 0)
+ continue;
+
+ data->set(NULL, SOCIAL_ST_STATE, state);
+ }
+
+ // Call type
+ std::string type;
+ if (__getCallType(callList[i], type)) {
+ data->set(NULL, SOCIAL_ST_MEDIUM, type);
+ }
+
+ // Address
+ std::string address;
+ if (__getCallAddress(callList[i], address)) {
+ data->set(NULL, SOCIAL_ST_ADDRESS, address);
+ }
+
+ if (state == SOCIAL_ST_ACTIVE) {
+ break;
+ }
+ }
+
+ telephony_call_release_call_list(count, &callList);
+ return true;
+}
+
+int SocialStatusCall::read()
+{
+ bool temporaryHandle = false;
+ if (!__telephonyInitialized) {
+ IF_FAIL_RETURN(__initTelephony(), ERR_OPERATION_FAILED);
+ temporaryHandle = true;
+ }
+
+ bool ret = true;
+ Json data;
+ data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
+
+ for (unsigned int i = 0; i < __handleList.count; i++) {
+ telephony_sim_state_e state;
+ int err = telephony_sim_get_state(__handleList.handle[i], &state);
+ IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting SIM status failed");
+
+ if (state != TELEPHONY_SIM_STATE_AVAILABLE)
+ continue;
+
+ ret = __readCurrentStatus(__handleList.handle[i], &data);
+ break;
+ }
+
+ if (temporaryHandle)
+ __releaseTelephony();
+
+ if (ret) {
+ replyToRead(NULL, ERR_NONE, data);
+ return ERR_NONE;
+ }
+
+ return ERR_OPERATION_FAILED;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_CALL_H_
+#define _CONTEXT_SOCIAL_STATUS_CALL_H_
+
+#include <telephony.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class SocialStatusCall : public DeviceProviderBase {
+ public:
+ SocialStatusCall();
+ ~SocialStatusCall();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ telephony_handle_list_s __handleList;
+
+ bool __initTelephony();
+ void __releaseTelephony();
+ bool __setCallback();
+ void __unsetCallback();
+ bool __readCurrentStatus(telephony_h& handle, Json* data);
+
+ bool __getCallState(telephony_call_h& handle, std::string& state);
+ bool __getCallType(telephony_call_h& handle, std::string& type);
+ bool __getCallAddress(telephony_call_h& handle, std::string& address);
+ bool __getCallHandleId(telephony_call_h& handle, unsigned int& id);
+
+ void __handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id);
+ static void __updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData);
+ };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_CALL_H_
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Contacts.h"
+
+#define MY_PROFILE_VIEW _contacts_my_profile._uri
+#define PERSON_VIEW _contacts_person._uri
+#define TIME_INTERVAL 1
+
+using namespace ctx;
+
+SocialStatusContacts::SocialStatusContacts() :
+ DeviceProviderBase(SOCIAL_ST_SUBJ_CONTACTS),
+ __latestMyProfile(0),
+ __latestPerson(0)
+{
+}
+
+SocialStatusContacts::~SocialStatusContacts()
+{
+}
+
+bool SocialStatusContacts::isSupported()
+{
+ return true;
+}
+
+void SocialStatusContacts::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{"
+ "\"Event\":{\"type\":\"string\",\"values\":[\"Changed\"]},"
+ "\"Type\":{\"type\":\"string\",\"values\":[\"MyProfile\",\"Person\"]}"
+ "}",
+ NULL);
+}
+
+void SocialStatusContacts::__updateCb(const char* viewUri, void* userData)
+{
+ SocialStatusContacts *instance = static_cast<SocialStatusContacts*>(userData);
+ instance->__handleUpdate(viewUri);
+}
+
+void SocialStatusContacts::__handleUpdate(const char* viewUri)
+{
+ if (!STR_EQ(viewUri, _contacts_my_profile._uri) && !STR_EQ(viewUri, _contacts_person._uri)) {
+ _W("Unknown view uri");
+ return;
+ }
+
+ std::string view = (STR_EQ(viewUri, _contacts_my_profile._uri)? SOCIAL_ST_MY_PROFILE : SOCIAL_ST_PERSON);
+ IF_FAIL_VOID_TAG(!__isConsecutiveChange(viewUri), _D, "Ignore consecutive db change: %s", view.c_str());
+
+ Json data;
+ data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_CHANGED);
+ data.set(NULL, SOCIAL_ST_TYPE, view);
+ publish(NULL, ERR_NONE, data);
+}
+
+bool SocialStatusContacts::__isConsecutiveChange(const char* viewUri)
+{
+ time_t now = time(NULL);
+ double diff = 0;
+
+ if (STR_EQ(viewUri, MY_PROFILE_VIEW)) {
+ diff = difftime(now, __latestMyProfile);
+ __latestMyProfile = now;
+ } else if (STR_EQ(viewUri, PERSON_VIEW)) {
+ diff = difftime(now, __latestPerson);
+ __latestPerson = now;
+ }
+
+ if (diff < TIME_INTERVAL)
+ return true;
+
+ return false;
+}
+
+bool SocialStatusContacts::__setCallback()
+{
+ int err;
+
+ err = contacts_connect();
+ IF_FAIL_RETURN_TAG(err == CONTACTS_ERROR_NONE, false, _E, "Connecting contacts failed");
+
+ err = contacts_db_add_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
+ IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting my profile view changed callback failed");
+
+ err = contacts_db_add_changed_cb(PERSON_VIEW, __updateCb, this);
+ IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting person view changed callback failed");
+
+ return true;
+
+CATCH:
+ contacts_disconnect();
+ return false;
+}
+
+void SocialStatusContacts::__unsetCallback()
+{
+ contacts_db_remove_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
+ contacts_db_remove_changed_cb(PERSON_VIEW, __updateCb, this);
+
+ contacts_disconnect();
+
+ __latestMyProfile = 0;
+ __latestPerson = 0;
+}
+
+int SocialStatusContacts::subscribe()
+{
+ bool ret = __setCallback();
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int SocialStatusContacts::unsubscribe()
+{
+ __unsetCallback();
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+#define _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+
+#include <contacts.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class SocialStatusContacts : public DeviceProviderBase {
+ public:
+ SocialStatusContacts();
+ ~SocialStatusContacts();
+
+ int subscribe();
+ int unsubscribe();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ time_t __latestMyProfile;
+ time_t __latestPerson;
+
+ bool __setCallback();
+ void __unsetCallback();
+ void __handleUpdate(const char* viewUri);
+ static void __updateCb(const char* viewUri, void* userData);
+ bool __isConsecutiveChange(const char* viewUri);
+ };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Common Profile
-FILE(GLOB prvd_srcs ./*.cpp system/Alarm.cpp system/Time.cpp)
-SET(prvd_deps vconf capi-system-info capi-system-device capi-system-runtime-info)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
- SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi contacts-service2)
- SET(prvd_deps ${prvd_deps} capi-telephony tapi msg-service capi-messaging-email motion)
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} activity/*.cpp)
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} system/*.cpp)
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} social/*.cpp)
-ENDIF("${PROFILE}" STREQUAL "mobile")
-
-# Wearable Profile
-IF("${PROFILE}" STREQUAL "wearable")
- SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi)
- SET(prvd_deps ${prvd_deps} capi-telephony tapi msg-service motion)
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} activity/*.cpp)
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} system/*.cpp)
- FILE(GLOB prvd_srcs ${prvd_srcs} social/Call.cpp social/Message.cpp)
-ENDIF("${PROFILE}" STREQUAL "wearable")
-
-# TV Profile
-IF("${PROFILE}" STREQUAL "tv")
- SET(prvd_deps ${prvd_deps} capi-network-bluetooth capi-network-wifi)
- FILE(GLOB prvd_srcs ${prvd_srcs} system/Headphone.cpp system/Wifi.cpp)
-ENDIF("${PROFILE}" STREQUAL "tv")
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextProvider.h>
-#include <DeviceContextProvider.h>
-
-#include "system/SystemTypes.h"
-#include "social/SocialTypes.h"
-#include "activity/ActivityTypes.h"
-
-#include "system/Alarm.h"
-#include "system/Time.h"
-
-#ifdef _MOBILE_
-#include "system/runtime_info/Charger.h"
-#include "system/runtime_info/Gps.h"
-#include "system/runtime_info/Usb.h"
-#include "system/Wifi.h"
-#include "system/Headphone.h"
-#include "system/Battery.h"
-#include "system/Psmode.h"
-#include "social/Call.h"
-#include "social/Email.h"
-#include "social/Message.h"
-#include "social/Contacts.h"
-#include "activity/Activity.h"
-#endif
-
-#ifdef _WEARABLE_
-#include "system/runtime_info/Charger.h"
-#include "system/runtime_info/Gps.h"
-#include "system/runtime_info/Usb.h"
-#include "system/Wifi.h"
-#include "system/Headphone.h"
-#include "system/Battery.h"
-#include "system/Psmode.h"
-#include "social/Call.h"
-#include "social/Message.h"
-#include "activity/Activity.h"
-#endif
-
-#define PRIV_NETWORK "network.get"
-#define PRIV_TELEPHONY "telephony"
-#define PRIV_MESSAGE "message.read"
-#define PRIV_CONTACT "contact.read"
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
- Provider *provider = new(std::nothrow) Provider();
- IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
- if (!provider->isSupported()) {
- delete provider;
- return;
- }
-
- provider->registerProvider(privilege, provider);
- provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initDeviceContextProvider()
-{
- registerProvider<DeviceStatusAlarm>(DEVICE_ST_SUBJ_ALARM, NULL);
- registerProvider<DeviceStatusTime>(DEVICE_ST_SUBJ_TIME, NULL);
-
-#ifdef _MOBILE_
- registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
- registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
-
- registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
- registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
- registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
- registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
- registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
-
- registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
- registerProvider<SocialStatusEmail>(SOCIAL_ST_SUBJ_EMAIL, NULL);
- registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
- registerProvider<SocialStatusContacts>(SOCIAL_ST_SUBJ_CONTACTS, PRIV_CONTACT);
-
- registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
- registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
- registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
- registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
-
- /* Create context providers, which need to be initiated before being subscribed */
- /*
- if (DeviceStatusWifi::isSupported())
- DeviceStatusWifi::create(NULL);
- */
-#endif
-
-#ifdef _WEARABLE_
- registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
- registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
-
- registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
- registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
- registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
- registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
- registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
-
- registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
- registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
-
- registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
- registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
- registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
- registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
-#endif
-
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <system_info.h>
-#include "DeviceProviderBase.h"
-
-using namespace ctx;
-
-DeviceProviderBase::DeviceProviderBase(const char *subject) :
- ContextProvider(subject),
- __beingSubscribed(false)
-{
-}
-
-bool DeviceProviderBase::isSupported()
-{
- return true;
-}
-
-void DeviceProviderBase::submitTriggerItem()
-{
-}
-
-int DeviceProviderBase::subscribe(Json option, Json *requestResult)
-{
- IF_FAIL_RETURN(!__beingSubscribed, ERR_NONE);
-
- int ret = subscribe();
-
- if (ret == ERR_NONE)
- __beingSubscribed = true;
-
- return ret;
-}
-
-int DeviceProviderBase::unsubscribe(Json option)
-{
- int ret = ERR_NONE;
-
- if (__beingSubscribed)
- ret = unsubscribe();
-
- return ret;
-}
-
-int DeviceProviderBase::read(Json option, Json *requestResult)
-{
- return read();
-}
-
-int DeviceProviderBase::write(Json data, Json *requestResult)
-{
- return write();
-}
-
-int DeviceProviderBase::subscribe()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::unsubscribe()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::read()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int DeviceProviderBase::write()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-bool DeviceProviderBase::getSystemInfoBool(const char *key)
-{
- bool supported = false;
- int ret = system_info_get_platform_bool(key, &supported);
- IF_FAIL_RETURN_TAG(ret == SYSTEM_INFO_ERROR_NONE, false, _E, "system_info_get_platform_bool() failed");
- return supported;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_DEVICE_PROVIDER_BASE_H_
-#define _CONTEXT_DEVICE_PROVIDER_BASE_H_
-
-#include <ContextProvider.h>
-
-namespace ctx {
-
- class DeviceProviderBase : public ContextProvider {
- public:
- int subscribe(Json option, Json *requestResult);
- int unsubscribe(Json option);
- int read(Json option, Json *requestResult);
- int write(Json data, Json *requestResult);
-
- virtual bool isSupported();
- virtual void submitTriggerItem();
-
- protected:
- bool __beingSubscribed;
-
- DeviceProviderBase(const char *subject);
- virtual ~DeviceProviderBase() {}
-
- virtual int subscribe();
- virtual int unsubscribe();
- virtual int read();
- virtual int write();
-
- static bool getSystemInfoBool(const char *key);
- };
-}
-
-#endif // _CONTEXT_DEVICE_PROVIDER_BASE_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_ACTIVITY_STATUS_H_
-#define _DEVICE_ACTIVITY_STATUS_H_
-
-#include "ActivityBase.h"
-
-#define GENERATE_ACTIVITY_PROVIDER(actPrvd, actSubj, actType) \
- class actPrvd : public UserActivityBase { \
- public: \
- actPrvd() : UserActivityBase(actSubj, actType) {} \
- }; \
-
-namespace ctx {
- GENERATE_ACTIVITY_PROVIDER(UserActivityStationary, USER_ACT_SUBJ_STATIONARY, ACTIVITY_STATIONARY);
- GENERATE_ACTIVITY_PROVIDER(UserActivityWalking, USER_ACT_SUBJ_WALKING, ACTIVITY_WALK);
- GENERATE_ACTIVITY_PROVIDER(UserActivityRunning, USER_ACT_SUBJ_RUNNING, ACTIVITY_RUN);
- GENERATE_ACTIVITY_PROVIDER(UserActivityInVehicle, USER_ACT_SUBJ_IN_VEHICLE, ACTIVITY_IN_VEHICLE);
-}
-
-#endif // _DEVICE_ACTIVITY_STATUS_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <system_info.h>
-#include "ActivityTypes.h"
-#include "ActivityBase.h"
-
-using namespace ctx;
-
-UserActivityBase::UserActivityBase(const char *subject, activity_type_e type) :
- DeviceProviderBase(subject),
- __activityType(type),
- __activityHandle(NULL)
-{
-}
-
-UserActivityBase::~UserActivityBase()
-{
- if (__activityHandle)
- activity_release(__activityHandle);
-}
-
-bool UserActivityBase::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/sensor.activity_recognition");
-}
-
-void UserActivityBase::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{\"Event\":{\"type\":\"string\", \"values\":[\"Detected\"]}}",
- "{\"Accuracy\":{\"type\":\"string\", \"values\":[\"Low\", \"Normal\", \"High\"]}}"
- );
-}
-
-void UserActivityBase::__updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData)
-{
- IF_FAIL_VOID_TAG(error == ACTIVITY_ERROR_NONE, _E, "Error: %d", error);
-
- UserActivityBase *instance = static_cast<UserActivityBase*>(userData);
- instance->__handleUpdate(activity, data, timestamp);
-}
-
-void UserActivityBase::__handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp)
-{
- IF_FAIL_VOID_TAG(activity == __activityType, _E, "Invalid activity: %d", activity);
-
- Json dataRead;
- dataRead.set(NULL, USER_ACT_EVENT, USER_ACT_DETECTED);
-
- activity_accuracy_e accuracy = ACTIVITY_ACCURACY_LOW;
- activity_get_accuracy(data, &accuracy);
-
- switch (accuracy) {
- case ACTIVITY_ACCURACY_HIGH:
- dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_HIGH);
- break;
- case ACTIVITY_ACCURACY_MID:
- dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_NORMAL);
- break;
- default:
- dataRead.set(NULL, USER_ACT_ACCURACY, USER_ACT_LOW);
- break;
- }
-
- publish(NULL, ERR_NONE, dataRead);
-}
-
-int UserActivityBase::subscribe()
-{
- IF_FAIL_RETURN(__activityHandle == NULL, ERR_NONE);
-
- activity_create(&__activityHandle);
- IF_FAIL_RETURN_TAG(__activityHandle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
- int ret = activity_start_recognition(__activityHandle, __activityType, __updateCb, this);
- if (ret != ACTIVITY_ERROR_NONE) {
- _E("Recognition starting failed");
- activity_release(__activityHandle);
- __activityHandle = NULL;
- return ERR_OPERATION_FAILED;
- }
-
- return ERR_NONE;
-}
-
-int UserActivityBase::unsubscribe()
-{
- IF_FAIL_RETURN(__activityHandle, ERR_NONE);
-
- activity_stop_recognition(__activityHandle);
- activity_release(__activityHandle);
- __activityHandle = NULL;
-
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_ACTIVITY_STATUS_BASE_H_
-#define _DEVICE_ACTIVITY_STATUS_BASE_H_
-
-#include <string>
-#include <activity_recognition.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class UserActivityBase : public DeviceProviderBase {
- public:
- UserActivityBase(const char *subject, activity_type_e type);
- virtual ~UserActivityBase();
-
- int subscribe();
- int unsubscribe();
-
- bool isSupported();
- void submitTriggerItem();
-
- protected:
- activity_type_e __activityType;
- activity_h __activityHandle;
-
- private:
- void __handleUpdate(activity_type_e activity, const activity_data_h data, double timestamp);
- static void __updateCb(activity_type_e activity, const activity_data_h data, double timestamp, activity_error_e error, void* userData);
- };
-
-}
-
-#endif // _DEVICE_ACTIVITY_STATUS_BASE_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_ACTIVITY_STATUS_TYPES_H_
-#define _DEVICE_ACTIVITY_STATUS_TYPES_H_
-
-// Subject
-#define USER_ACT_SUBJ_IN_VEHICLE "activity/in_vehicle"
-#define USER_ACT_SUBJ_RUNNING "activity/running"
-#define USER_ACT_SUBJ_STATIONARY "activity/stationary"
-#define USER_ACT_SUBJ_WALKING "activity/walking"
-
-// Data Key
-#define USER_ACT_EVENT "Event"
-#define USER_ACT_ACCURACY "Accuracy"
-
-// Data Value
-#define USER_ACT_DETECTED "Detected"
-#define USER_ACT_LOW "Low"
-#define USER_ACT_NORMAL "Normal"
-#define USER_ACT_HIGH "High"
-
-#endif // _DEVICE_ACTIVITY_STATUS_TYPES_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Call.h"
-
-#define TELEPHONY_NOTI_ID_CNT 8
-
-using namespace ctx;
-
-static bool __telephonyInitialized = false;
-static telephony_noti_e __callNotiIds[] =
-{
- TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE,
- TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE,
-// TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD,
-// TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING,
- TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING,
- TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING,
- TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE,
- TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE,
-// TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING,
- TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING,
- TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING,
-};
-static Json __latest;
-
-SocialStatusCall::SocialStatusCall() :
- DeviceProviderBase(SOCIAL_ST_SUBJ_CALL)
-{
- __handleList.count = 0;
- __handleList.handle = NULL;
-}
-
-SocialStatusCall::~SocialStatusCall()
-{
-}
-
-bool SocialStatusCall::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusCall::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{"
- "\"Medium\":{\"type\":\"string\",\"values\":[\"Voice\",\"Video\"]},"
- "\"State\":{\"type\":\"string\",\"values\":[\"Idle\",\"Connecting\",\"Connected\"]},"
- "\"Address\":{\"type\":\"string\"}"
- "}",
- NULL);
- /* TODO remove Connecting, Connected */
-}
-
-void SocialStatusCall::__updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData)
-{
- SocialStatusCall *instance = static_cast<SocialStatusCall*>(userData);
- instance->__handleUpdate(handle, notiId, data);
-}
-
-void SocialStatusCall::__handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id)
-{
- Json data;
- unsigned int count;
- telephony_call_h *callList;
-
- // Call state
- switch (notiId) {
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
- data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
- break;
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
- data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ACTIVE);
- break;
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
- data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_ALERTING);
- break;
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
- data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_INCOMING);
- break;
-/* // Ignore below cases
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
- default:
- _E("Unkown noti id: %d", notiId);
- return;
- }
-
- // Call type
- switch (notiId) {
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_IDLE:
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_ACTIVE:
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_ALERTING:
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_INCOMING:
- data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VOICE);
- break;
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_IDLE:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ACTIVE:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_ALERTING:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_INCOMING:
- data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_VIDEO);
- break;
-/* // Ignore below cases
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_HELD:
- case TELEPHONY_NOTI_VOICE_CALL_STATUS_DIALING:
- case TELEPHONY_NOTI_VIDEO_CALL_STATUS_DIALING:*/
- default:
- _E("Unkown noti id: %d", notiId);
- return;
- }
-
- int err = telephony_call_get_call_list(handle, &count, &callList);
- IF_FAIL_VOID_TAG(err == TELEPHONY_ERROR_NONE, _E, "Getting call list failed");
-
- unsigned int callId = *static_cast<unsigned int *>(id);
- for (unsigned int i = 0; i < count; i++) {
- unsigned int tempId;
- // Handle id
- if (!__getCallHandleId(callList[i], tempId)) {
- continue;
- }
-
- if (callId != tempId) {
- continue;
- }
-
- // Address
- std::string address;
- if (__getCallAddress(callList[i], address)) {
- data.set(NULL, SOCIAL_ST_ADDRESS, address);
- break;
- }
- }
-
- if (__latest != data) {
- publish(NULL, ERR_NONE, data);
- __latest = data.str();
- }
- telephony_call_release_call_list(count, &callList);
-}
-
-bool SocialStatusCall::__initTelephony()
-{
- IF_FAIL_RETURN(!__telephonyInitialized, true);
-
- int err = telephony_init(&__handleList);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Initialization failed");
-
- __telephonyInitialized = true;
- return true;
-}
-
-void SocialStatusCall::__releaseTelephony()
-{
- IF_FAIL_VOID(__telephonyInitialized);
-
- telephony_deinit(&__handleList);
-
- __telephonyInitialized = false;
-}
-
-bool SocialStatusCall::__setCallback()
-{
- /* TODO: Consider dual-sim devices */
- IF_FAIL_RETURN_TAG(__initTelephony(), false, _E, "Initialization failed");
-
- int err;
-
- for (unsigned int i = 0; i < __handleList.count; i++) {
- for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
- err = telephony_set_noti_cb(__handleList.handle[i], __callNotiIds[j], __updateCb, this);
- IF_FAIL_CATCH(err == TELEPHONY_ERROR_NONE);
- }
- }
-
- return true;
-
-CATCH:
- _E("Initialization failed");
- __releaseTelephony();
- return false;
-}
-
-void SocialStatusCall::__unsetCallback()
-{
- for (unsigned int i = 0; i < __handleList.count; i++) {
- for (unsigned int j = 0; j < TELEPHONY_NOTI_ID_CNT; j++) {
- telephony_unset_noti_cb(__handleList.handle[i], __callNotiIds[j]);
- }
- }
-
- __releaseTelephony();
-}
-
-bool SocialStatusCall::__getCallState(telephony_call_h& handle, std::string& state)
-{
- state.clear();
-
- telephony_call_status_e st;
- int err = telephony_call_get_status(handle, &st);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting state failed");
-
- switch (st) {
- case TELEPHONY_CALL_STATUS_ACTIVE:
- state = SOCIAL_ST_ACTIVE;
- break;
- case TELEPHONY_CALL_STATUS_HELD:
- state = SOCIAL_ST_HELD;
- break;
- case TELEPHONY_CALL_STATUS_DIALING:
- state = SOCIAL_ST_DIALING;
- break;
- case TELEPHONY_CALL_STATUS_ALERTING:
- state = SOCIAL_ST_ALERTING;
- break;
- case TELEPHONY_CALL_STATUS_INCOMING:
- state = SOCIAL_ST_INCOMING;
- break;
- default:
- state = SOCIAL_ST_IDLE;
- }
-
- IF_FAIL_RETURN_TAG(!state.empty(), false, _W, "State is empty");
-
- return true;
-}
-
-bool SocialStatusCall::__getCallType(telephony_call_h& handle, std::string& type)
-{
- type.clear();
-
- telephony_call_type_e t;
- int err = telephony_call_get_type(handle, &t);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting type failed");
-
- switch (t) {
- case TELEPHONY_CALL_TYPE_VOICE:
- type = SOCIAL_ST_VOICE;
- break;
- case TELEPHONY_CALL_TYPE_VIDEO:
- type = SOCIAL_ST_VIDEO;
- break;
- default:
- _E("Unknown type: %d", t);
- return false;
- }
-
- IF_FAIL_RETURN_TAG(!type.empty(), false, _W, "Type is empty");
-
- return true;
-}
-
-bool SocialStatusCall::__getCallAddress(telephony_call_h& handle, std::string& address)
-{
- address.clear();
-
- char* number = NULL;
- int err = telephony_call_get_number(handle, &number);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting address failed");
-
- if (number) {
- address = number;
- g_free(number);
- number = NULL;
- }
-
- IF_FAIL_RETURN_TAG(!address.empty(), false, _W, "Address is empty");
-
- return true;
-}
-
-bool SocialStatusCall::__getCallHandleId(telephony_call_h& handle, unsigned int& id)
-{
- int err = telephony_call_get_handle_id(handle, &id);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, false, _E, "Getting handle id failed");
-
- return true;
-}
-
-int SocialStatusCall::subscribe()
-{
- bool ret = __setCallback();
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int SocialStatusCall::unsubscribe()
-{
- __unsetCallback();
- return ERR_NONE;
-}
-
-bool SocialStatusCall::__readCurrentStatus(telephony_h& handle, Json* data)
-{
- unsigned int count = 0;
- telephony_call_h *callList = NULL;
- telephony_call_get_call_list(handle, &count, &callList);
-
- // Default data
- data->set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
-
- // Held & Dialing are ignored
- for (unsigned int i = 0; i < count; i++) {
- // Call state
- std::string state;
- if (__getCallState(callList[i], state)) {
- // Skip Held & Dialing
- if (state.compare(SOCIAL_ST_HELD) == 0 || state.compare(SOCIAL_ST_DIALING) == 0)
- continue;
-
- data->set(NULL, SOCIAL_ST_STATE, state);
- }
-
- // Call type
- std::string type;
- if (__getCallType(callList[i], type)) {
- data->set(NULL, SOCIAL_ST_MEDIUM, type);
- }
-
- // Address
- std::string address;
- if (__getCallAddress(callList[i], address)) {
- data->set(NULL, SOCIAL_ST_ADDRESS, address);
- }
-
- if (state == SOCIAL_ST_ACTIVE) {
- break;
- }
- }
-
- telephony_call_release_call_list(count, &callList);
- return true;
-}
-
-int SocialStatusCall::read()
-{
- bool temporaryHandle = false;
- if (!__telephonyInitialized) {
- IF_FAIL_RETURN(__initTelephony(), ERR_OPERATION_FAILED);
- temporaryHandle = true;
- }
-
- bool ret = true;
- Json data;
- data.set(NULL, SOCIAL_ST_STATE, SOCIAL_ST_IDLE);
-
- for (unsigned int i = 0; i < __handleList.count; i++) {
- telephony_sim_state_e state;
- int err = telephony_sim_get_state(__handleList.handle[i], &state);
- IF_FAIL_RETURN_TAG(err == TELEPHONY_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting SIM status failed");
-
- if (state != TELEPHONY_SIM_STATE_AVAILABLE)
- continue;
-
- ret = __readCurrentStatus(__handleList.handle[i], &data);
- break;
- }
-
- if (temporaryHandle)
- __releaseTelephony();
-
- if (ret) {
- replyToRead(NULL, ERR_NONE, data);
- return ERR_NONE;
- }
-
- return ERR_OPERATION_FAILED;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_CALL_H_
-#define _CONTEXT_SOCIAL_STATUS_CALL_H_
-
-#include <telephony.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class SocialStatusCall : public DeviceProviderBase {
- public:
- SocialStatusCall();
- ~SocialStatusCall();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- telephony_handle_list_s __handleList;
-
- bool __initTelephony();
- void __releaseTelephony();
- bool __setCallback();
- void __unsetCallback();
- bool __readCurrentStatus(telephony_h& handle, Json* data);
-
- bool __getCallState(telephony_call_h& handle, std::string& state);
- bool __getCallType(telephony_call_h& handle, std::string& type);
- bool __getCallAddress(telephony_call_h& handle, std::string& address);
- bool __getCallHandleId(telephony_call_h& handle, unsigned int& id);
-
- void __handleUpdate(telephony_h handle, telephony_noti_e notiId, void* id);
- static void __updateCb(telephony_h handle, telephony_noti_e notiId, void *data, void *userData);
- };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_CALL_H_
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Contacts.h"
-
-#define MY_PROFILE_VIEW _contacts_my_profile._uri
-#define PERSON_VIEW _contacts_person._uri
-#define TIME_INTERVAL 1
-
-using namespace ctx;
-
-SocialStatusContacts::SocialStatusContacts() :
- DeviceProviderBase(SOCIAL_ST_SUBJ_CONTACTS),
- __latestMyProfile(0),
- __latestPerson(0)
-{
-}
-
-SocialStatusContacts::~SocialStatusContacts()
-{
-}
-
-bool SocialStatusContacts::isSupported()
-{
- return true;
-}
-
-void SocialStatusContacts::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{"
- "\"Event\":{\"type\":\"string\",\"values\":[\"Changed\"]},"
- "\"Type\":{\"type\":\"string\",\"values\":[\"MyProfile\",\"Person\"]}"
- "}",
- NULL);
-}
-
-void SocialStatusContacts::__updateCb(const char* viewUri, void* userData)
-{
- SocialStatusContacts *instance = static_cast<SocialStatusContacts*>(userData);
- instance->__handleUpdate(viewUri);
-}
-
-void SocialStatusContacts::__handleUpdate(const char* viewUri)
-{
- if (!STR_EQ(viewUri, _contacts_my_profile._uri) && !STR_EQ(viewUri, _contacts_person._uri)) {
- _W("Unknown view uri");
- return;
- }
-
- std::string view = (STR_EQ(viewUri, _contacts_my_profile._uri)? SOCIAL_ST_MY_PROFILE : SOCIAL_ST_PERSON);
- IF_FAIL_VOID_TAG(!__isConsecutiveChange(viewUri), _D, "Ignore consecutive db change: %s", view.c_str());
-
- Json data;
- data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_CHANGED);
- data.set(NULL, SOCIAL_ST_TYPE, view);
- publish(NULL, ERR_NONE, data);
-}
-
-bool SocialStatusContacts::__isConsecutiveChange(const char* viewUri)
-{
- time_t now = time(NULL);
- double diff = 0;
-
- if (STR_EQ(viewUri, MY_PROFILE_VIEW)) {
- diff = difftime(now, __latestMyProfile);
- __latestMyProfile = now;
- } else if (STR_EQ(viewUri, PERSON_VIEW)) {
- diff = difftime(now, __latestPerson);
- __latestPerson = now;
- }
-
- if (diff < TIME_INTERVAL)
- return true;
-
- return false;
-}
-
-bool SocialStatusContacts::__setCallback()
-{
- int err;
-
- err = contacts_connect();
- IF_FAIL_RETURN_TAG(err == CONTACTS_ERROR_NONE, false, _E, "Connecting contacts failed");
-
- err = contacts_db_add_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
- IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting my profile view changed callback failed");
-
- err = contacts_db_add_changed_cb(PERSON_VIEW, __updateCb, this);
- IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "Setting person view changed callback failed");
-
- return true;
-
-CATCH:
- contacts_disconnect();
- return false;
-}
-
-void SocialStatusContacts::__unsetCallback()
-{
- contacts_db_remove_changed_cb(MY_PROFILE_VIEW, __updateCb, this);
- contacts_db_remove_changed_cb(PERSON_VIEW, __updateCb, this);
-
- contacts_disconnect();
-
- __latestMyProfile = 0;
- __latestPerson = 0;
-}
-
-int SocialStatusContacts::subscribe()
-{
- bool ret = __setCallback();
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int SocialStatusContacts::unsubscribe()
-{
- __unsetCallback();
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
-#define _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
-
-#include <contacts.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class SocialStatusContacts : public DeviceProviderBase {
- public:
- SocialStatusContacts();
- ~SocialStatusContacts();
-
- int subscribe();
- int unsubscribe();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- time_t __latestMyProfile;
- time_t __latestPerson;
-
- bool __setCallback();
- void __unsetCallback();
- void __handleUpdate(const char* viewUri);
- static void __updateCb(const char* viewUri, void* userData);
- bool __isConsecutiveChange(const char* viewUri);
- };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_CONTACTS_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <email-api-etc.h>
-#include "SocialTypes.h"
-#include "Email.h"
-
-using namespace ctx;
-
-SocialStatusEmail::SocialStatusEmail() :
- DeviceProviderBase(SOCIAL_ST_SUBJ_EMAIL),
- __dbusSignalId(-1),
- __dbusWatcher(DBusType::SESSION)
-{
-}
-
-SocialStatusEmail::~SocialStatusEmail()
-{
-}
-
-bool SocialStatusEmail::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusEmail::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{"
- "\"Event\":{\"type\":\"string\",\"values\":[\"Received\",\"Sent\"]}"
- "}",
- NULL);
-}
-
-void SocialStatusEmail::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
-{
- gint subType = 0;
- gint gi1 = 0;
- const gchar *gc = NULL;
- gint gi2 = 0;
- gint gi3 = 0;
-
- g_variant_get(param, "(ii&sii)", &subType, &gi1, &gc, &gi2, &gi3);
-
- if (subType == NOTI_DOWNLOAD_FINISH) {
- //TODO: Check if this signal actually means that there are new mails
- _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
- Json dataUpdated;
- dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
- publish(NULL, ERR_NONE, dataUpdated);
-
- } else if (subType == NOTI_SEND_FINISH) {
- _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
- Json dataUpdated;
- dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_SENT);
- publish(NULL, ERR_NONE, dataUpdated);
- }
-}
-
-
-int SocialStatusEmail::subscribe()
-{
- __dbusSignalId = __dbusWatcher.watch(NULL, NULL, "User.Email.NetworkStatus", "email", this);
- IF_FAIL_RETURN_TAG(__dbusSignalId >= 0, ERR_OPERATION_FAILED, _E, "Email dbus signal subscription failed");
- return ERR_NONE;
-}
-
-
-int SocialStatusEmail::unsubscribe()
-{
- __dbusWatcher.unwatch(__dbusSignalId);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_EMAIL_H_
-#define _CONTEXT_SOCIAL_STATUS_EMAIL_H_
-
-#include <DBusSignalWatcher.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class SocialStatusEmail : public DeviceProviderBase, public IDBusSignalListener {
- public:
- SocialStatusEmail();
- ~SocialStatusEmail();
-
- int subscribe();
- int unsubscribe();
-
- bool isSupported();
- void submitTriggerItem();
-
- void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
-
- private:
- int64_t __dbusSignalId;
- DBusSignalWatcher __dbusWatcher;
- };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_EMAIL_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialTypes.h"
-#include "Message.h"
-
-#define MAX_ADDR_SIZE 20
-
-using namespace ctx;
-
-SocialStatusMessage::SocialStatusMessage() :
- DeviceProviderBase(SOCIAL_ST_SUBJ_MESSAGE),
- __messageHandle(NULL)
-{
-}
-
-SocialStatusMessage::~SocialStatusMessage()
-{
-}
-
-bool SocialStatusMessage::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/network.telephony");
-}
-
-void SocialStatusMessage::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{"
- "\"Event\":{\"type\":\"string\",\"values\":[\"Received\"]},"
- "\"Type\":{\"type\":\"string\",\"values\":[\"SMS\",\"MMS\"]},"
- "\"Address\":{\"type\":\"string\"}"
- "}",
- NULL);
-}
-
-void SocialStatusMessage::__updateCb(msg_handle_t handle, msg_struct_t msg, void* userData)
-{
- SocialStatusMessage *instance = static_cast<SocialStatusMessage*>(userData);
- instance->__handleUpdate(msg);
-}
-
-void SocialStatusMessage::__handleUpdate(msg_struct_t msg)
-{
- int err;
- int type;
- char address[MAX_ADDR_SIZE];
- Json data;
-
- err = msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &type);
- IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting message type failed");
-
- err = msg_get_str_value(msg, MSG_MESSAGE_REPLY_ADDR_STR, address, MAX_ADDR_SIZE);
- IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting reply address failed");
-
- switch (type) {
- case MSG_TYPE_SMS_CB :
- case MSG_TYPE_SMS_JAVACB :
- case MSG_TYPE_SMS_WAPPUSH :
- case MSG_TYPE_SMS_MWI :
- case MSG_TYPE_SMS_SYNCML :
- case MSG_TYPE_SMS_REJECT :
- case MSG_TYPE_SMS_ETWS_PRIMARY :
- case MSG_TYPE_SMS :
- data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_SMS);
- break;
- case MSG_TYPE_MMS_NOTI :
- case MSG_TYPE_MMS_JAVA :
- case MSG_TYPE_MMS :
- data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_MMS);
- break;
- default :
- _W("Unknown message type");
- return;
- }
-
- data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
- data.set(NULL, SOCIAL_ST_ADDRESS, address);
-
- publish(NULL, ERR_NONE, data);
-}
-
-bool SocialStatusMessage::__setCallback()
-{
- int err;
-
- err = msg_open_msg_handle(&__messageHandle);
- IF_FAIL_RETURN_TAG(err == MSG_SUCCESS, false, _E, "Handle creation failed");
-
- err = msg_reg_sms_message_callback(__messageHandle, __updateCb, 0, this);
- if (err != MSG_SUCCESS) {
- msg_close_msg_handle(&__messageHandle);
- _E("Setting SMS event callback failed");
- return false;
- }
-
- msg_reg_mms_conf_message_callback(__messageHandle, __updateCb, NULL, this);
- return true;
-}
-
-void SocialStatusMessage::__unsetCallback()
-{
- if (__messageHandle)
- msg_close_msg_handle(&__messageHandle);
-
- __messageHandle = NULL;
-}
-
-int SocialStatusMessage::subscribe()
-{
- bool ret = __setCallback();
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int SocialStatusMessage::unsubscribe()
-{
- __unsetCallback();
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_SMS_H_
-#define _CONTEXT_SOCIAL_STATUS_SMS_H_
-
-#include <msg.h>
-#include <msg_transport.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class SocialStatusMessage : public DeviceProviderBase {
- public:
- SocialStatusMessage();
- ~SocialStatusMessage();
-
- int subscribe();
- int unsubscribe();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- msg_handle_t __messageHandle;
- bool __beingSubscribed;
-
- bool __setCallback();
- void __unsetCallback();
- void __handleUpdate(msg_struct_t msg);
- static void __updateCb(msg_handle_t handle, msg_struct_t msg, void* userData);
- };
-}
-
-#endif // _CONTEXT_SOCIAL_STATUS_SMS_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATUS_TYPES_H_
-#define _CONTEXT_SOCIAL_STATUS_TYPES_H_
-
-// Subject
-#define SOCIAL_ST_SUBJ_CALL "social/call"
-#define SOCIAL_ST_SUBJ_EMAIL "social/email"
-#define SOCIAL_ST_SUBJ_MESSAGE "social/message"
-#define SOCIAL_ST_SUBJ_CONTACTS "social/contacts"
-
-// Data Key
-#define SOCIAL_ST_STATE "State"
-#define SOCIAL_ST_EVENT "Event"
-#define SOCIAL_ST_TYPE "Type"
-#define SOCIAL_ST_MEDIUM "Medium"
-#define SOCIAL_ST_ADDRESS "Address"
-
-// Data Values
-#define SOCIAL_ST_IDLE "Idle"
-#define SOCIAL_ST_CONNECTING "Connecting"
-#define SOCIAL_ST_CONNECTED "Connected"
-#define SOCIAL_ST_ACTIVE SOCIAL_ST_CONNECTED
-#define SOCIAL_ST_HELD "Held"
-#define SOCIAL_ST_DIALING "Dialing"
-#define SOCIAL_ST_ALERTING SOCIAL_ST_CONNECTING
-#define SOCIAL_ST_INCOMING SOCIAL_ST_CONNECTING
-#define SOCIAL_ST_VOICE "Voice"
-#define SOCIAL_ST_VIDEO "Video"
-#define SOCIAL_ST_SENT "Sent"
-#define SOCIAL_ST_RECEIVED "Received"
-#define SOCIAL_ST_SMS "SMS"
-#define SOCIAL_ST_MMS "MMS"
-#define SOCIAL_ST_MY_PROFILE "MyProfile"
-#define SOCIAL_ST_PERSON "Person"
-#define SOCIAL_ST_CHANGED "Changed"
-
-#endif //_CONTEXT_SOCIAL_STATUS_TYPES_H
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Alarm.h"
-
-using namespace ctx;
-
-DeviceStatusAlarm::DeviceStatusAlarm()
- : ContextProvider(DEVICE_ST_SUBJ_ALARM)
-{
-}
-
-DeviceStatusAlarm::~DeviceStatusAlarm()
-{
- __clear();
-
- for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
- delete *it;
- }
- __optionSet.clear();
-}
-
-bool DeviceStatusAlarm::isSupported()
-{
- return true;
-}
-
-void DeviceStatusAlarm::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{"
- "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
- "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
- "}",
- NULL);
-}
-
-int DeviceStatusAlarm::subscribe(Json option, Json *requestResult)
-{
- int dow = __getArrangedDayOfWeek(option);
-
- int time;
- for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
- __add(time, dow);
- }
-
- Json* elem = new(std::nothrow) Json(option);
- if (elem) {
- __optionSet.insert(elem);
- } else {
- unsubscribe(option);
- _E("Memory allocation failed");
- return ERR_OUT_OF_MEMORY;
- }
-
- return ERR_NONE;
-}
-
-int DeviceStatusAlarm::unsubscribe(Json option)
-{
- int dow = __getArrangedDayOfWeek(option);
-
- int time;
- for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
- __remove(time, dow);
- }
-
- OptionSet::iterator target = __findOption(option);
- if (target != __optionSet.end()) {
- delete (*target);
- __optionSet.erase(target);
- }
-
- return ERR_NONE;
-}
-
-int DeviceStatusAlarm::__getArrangedDayOfWeek(Json& option)
-{
- int dow = 0;
-
- std::string tempDay;
- for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &tempDay); i++) {
- dow |= TimerManager::dowToInt(tempDay);
- }
- _D("Requested day of week (%#x)", dow);
-
- return dow;
-}
-
-DeviceStatusAlarm::RefCountArray::RefCountArray()
-{
- memset(count, 0, sizeof(int) * DAYS_PER_WEEK);
-}
-
-int DeviceStatusAlarm::__mergeDayOfWeek(int* refCnt)
-{
- int dayOfWeek = 0;
-
- for (int d = 0; d < DAYS_PER_WEEK; ++d) {
- if (refCnt[d] > 0) {
- dayOfWeek |= (0x01 << d);
- }
- }
-
- return dayOfWeek;
-}
-
-bool DeviceStatusAlarm::__add(int minute, int dayOfWeek)
-{
- IF_FAIL_RETURN_TAG(minute >=0 && minute < 1440 &&
- dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
- false, _E, "Invalid parameter");
-
- RefCountArray &ref = __refCountMap[minute];
-
- for (int d = 0; d < DAYS_PER_WEEK; ++d) {
- if ((dayOfWeek & (0x01 << d)) != 0) {
- ref.count[d] += 1;
- }
- }
-
- return __resetTimer(minute);
-}
-
-bool DeviceStatusAlarm::__remove(int minute, int dayOfWeek)
-{
- IF_FAIL_RETURN_TAG(minute >= 0 && minute < 1440 &&
- dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
- false, _E, "Invalid parameter");
-
- RefCountArray &ref = __refCountMap[minute];
-
- for (int d = 0; d < DAYS_PER_WEEK; ++d) {
- if ((dayOfWeek & (0x01 << d)) != 0 && ref.count[d] > 0) {
- ref.count[d] -= 1;
- }
- }
-
- return __resetTimer(minute);
-}
-
-bool DeviceStatusAlarm::__resetTimer(int minute)
-{
- int dayOfWeek = __mergeDayOfWeek(__refCountMap[minute].count);
- TimerState &timer = __timerStateMap[minute];
-
- if (dayOfWeek == timer.dayOfWeek) {
- /* Necessary timers are already running... */
- return true;
- }
-
- if (dayOfWeek == 0 && timer.timerId > 0) {
- /* Turn off the timer at hour, if it is not necessray anymore. */
- __timerManager.remove(timer.timerId);
- __timerStateMap.erase(minute);
- __refCountMap.erase(minute);
- return true;
- }
-
- if (timer.timerId > 0) {
- /* Turn off the current timer, to set a new one. */
- __timerManager.remove(timer.timerId);
- timer.timerId = -1;
- timer.dayOfWeek = 0;
- }
-
- /* Create a new timer, w.r.t. the new dayOfWeek value. */
- int h = minute / 60;
- int m = minute - h * 60;
- int tid = __timerManager.setAt(h, m, static_cast<DayOfWeek>(dayOfWeek), this);
- IF_FAIL_RETURN_TAG(tid > 0, false, _E, "Timer setting failed");
-
- timer.timerId = tid;
- timer.dayOfWeek = dayOfWeek;
-
- return true;
-}
-
-void DeviceStatusAlarm::__clear()
-{
- for (auto it = __timerStateMap.begin(); it != __timerStateMap.end(); ++it) {
- if (it->second.timerId > 0) {
- __timerManager.remove(it->second.timerId);
- }
- }
-
- __timerStateMap.clear();
- __refCountMap.clear();
-}
-
-bool DeviceStatusAlarm::onTimerExpired(int timerId)
-{
- time_t rawTime;
- struct tm timeInfo;
-
- time(&rawTime);
- tzset();
- localtime_r(&rawTime, &timeInfo);
-
- int hour = timeInfo.tm_hour;
- int min = timeInfo.tm_min;
- int dayOfWeek = (0x01 << timeInfo.tm_wday);
-
- __handleUpdate(hour, min, dayOfWeek);
-
- return true;
-}
-
-void DeviceStatusAlarm::__handleUpdate(int hour, int min, int dayOfWeek)
-{
- _I("Time: %02d:%02d, Day of Week: %#x", hour, min, dayOfWeek);
-
- Json dataRead;
- int resultTime = hour * 60 + min;
- std::string resultDay = TimerManager::dowToStr(dayOfWeek);
- dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, resultTime);
- dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, resultDay);
-
- for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
- Json option = (**it);
- if (__isMatched(option, resultTime, resultDay)) {
- publish(option, ERR_NONE, dataRead);
- }
- }
-}
-
-bool DeviceStatusAlarm::__isMatched(Json& option, int time, std::string day)
-{
- bool ret = false;
- int optionTime;
- for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &optionTime); i++){
- if (time == optionTime) {
- ret = true;
- break;
- }
- }
- IF_FAIL_RETURN(ret, false);
-
- std::string optionDay;
- for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &optionDay); i++){
- if (day == optionDay) {
- return true;
- }
- }
-
- return false;
-}
-
-DeviceStatusAlarm::OptionSet::iterator DeviceStatusAlarm::__findOption(Json& option)
-{
- for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
- if (option == (**it))
- return it;
- }
- return __optionSet.end();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_ALARM_H_
-#define _DEVICE_SYSTEM_STATUS_ALARM_H_
-
-#include <map>
-#include <set>
-#include <TimerManager.h>
-#include <ContextProvider.h>
-
-namespace ctx {
-
- class DeviceStatusAlarm : public ContextProvider, ITimerListener {
- public:
- DeviceStatusAlarm();
- ~DeviceStatusAlarm();
-
- int subscribe(Json option, Json *requestResult);
- int unsubscribe(Json option);
-
- bool isSupported();
- void submitTriggerItem();
-
- protected:
- bool onTimerExpired(int timerId);
-
- private:
- struct RefCountArray {
- int count[7]; /* reference counts for days of week*/
- RefCountArray();
- };
-
- struct TimerState {
- int timerId;
- int dayOfWeek; /* day of week, merged into one integer */
- TimerState() : timerId(-1), dayOfWeek(0) {}
- };
-
- typedef std::map<int, RefCountArray> RefCountMap;
- typedef std::map<int, TimerState> TimerStateMap;
- typedef std::set<Json*> OptionSet;
-
- RefCountMap __refCountMap;
- TimerStateMap __timerStateMap;
- OptionSet __optionSet;
- TimerManager __timerManager;
-
- bool __add(int minute, int dayOfWeek);
- bool __remove(int minute, int dayOfWeek);
- bool __resetTimer(int hour);
- void __clear();
- void __handleUpdate(int hour, int min, int dayOfWeek);
-
- int __getArrangedDayOfWeek(Json& option);
- int __mergeDayOfWeek(int *refCnt);
-
- bool __isMatched(Json& option, int time, std::string day);
- OptionSet::iterator __findOption(Json& option);
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_ALARM_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Battery.h"
-
-using namespace ctx;
-
-DeviceStatusBattery::DeviceStatusBattery()
- : DeviceProviderBase(DEVICE_ST_SUBJ_BATTERY)
-{
-}
-
-DeviceStatusBattery::~DeviceStatusBattery()
-{
-}
-
-bool DeviceStatusBattery::isSupported()
-{
- return true;
-}
-
-void DeviceStatusBattery::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{"
- "\"Level\":{\"type\":\"string\",\"values\":[\"Empty\",\"Critical\",\"Low\",\"Normal\",\"High\",\"Full\"]},"
- TRIG_BOOL_ITEM_DEF("IsCharging")
- "}",
- NULL);
-}
-
-void DeviceStatusBattery::__updateCb(device_callback_e deviceType, void* value, void* userData)
-{
- IF_FAIL_VOID(deviceType == DEVICE_CALLBACK_BATTERY_LEVEL);
-
- DeviceStatusBattery *instance = static_cast<DeviceStatusBattery*>(userData);
- instance->__handleUpdate(deviceType, value);
-}
-
-void DeviceStatusBattery::__handleUpdate(device_callback_e deviceType, void* value)
-{
- intptr_t level = (intptr_t)value;
-
- const char* levelString = __transToString(level);
- IF_FAIL_VOID(levelString);
-
- Json dataRead;
- dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
-
- bool chargingState = false;
- int ret = device_battery_is_charging(&chargingState);
- IF_FAIL_VOID_TAG(ret == DEVICE_ERROR_NONE, _E, "Getting state failed");
-
- dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
- publish(NULL, ERR_NONE, dataRead);
-}
-
-const char* DeviceStatusBattery::__transToString(intptr_t level)
-{
- switch (level) {
- case DEVICE_BATTERY_LEVEL_EMPTY:
- return DEVICE_ST_EMPTY;
-
- case DEVICE_BATTERY_LEVEL_CRITICAL:
- return DEVICE_ST_CRITICAL;
-
- case DEVICE_BATTERY_LEVEL_LOW:
- return DEVICE_ST_LOW;
-
- case DEVICE_BATTERY_LEVEL_HIGH:
- return DEVICE_ST_NORMAL;
-
- case DEVICE_BATTERY_LEVEL_FULL:
- {
- int percent;
- device_battery_get_percent(&percent);
-
- if (percent == 100) {
- return DEVICE_ST_FULL;
- } else {
- return DEVICE_ST_HIGH;
- }
- break;
- }
-
- default:
- _E("Invalid battery level");
- return NULL;
- }
-}
-
-int DeviceStatusBattery::subscribe()
-{
- int ret = device_add_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb, this);
- IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int DeviceStatusBattery::unsubscribe()
-{
- int ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb);
- IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int DeviceStatusBattery::read()
-{
- device_battery_level_e level;
- Json dataRead;
-
- int ret = device_battery_get_level_status(&level);
- IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-
- const char* levelString = __transToString(level);
- IF_FAIL_RETURN(levelString, ERR_OPERATION_FAILED);
-
- dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
-
- bool chargingState = false;
- ret = device_battery_is_charging(&chargingState);
- IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
-
- dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_BATTERY_H_
-#define _DEVICE_SYSTEM_STATUS_BATTERY_H_
-
-#include <device/callback.h>
-#include <device/battery.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusBattery : public DeviceProviderBase {
- public:
- DeviceStatusBattery();
- ~DeviceStatusBattery();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- const char* __transToString(intptr_t level);
- void __handleUpdate(device_callback_e deviceType, void* value);
- static void __updateCb(device_callback_e deviceType, void* value, void* userData);
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_BATTERY_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Headphone.h"
-
-#define HANDLING_DELAY 2000
-#define MAX_HANDLING_COUNT 3
-
-using namespace ctx;
-
-DeviceStatusHeadphone::DeviceStatusHeadphone() :
- DeviceProviderBase(DEVICE_ST_SUBJ_HEADPHONE),
- __connected(false),
- __audioJackState(RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED),
- __btAudioState(false),
- __btAudioCallbackOn(false),
- __btEventHandlerAdded(false),
- __btEventHandlingCount(0)
-{
-}
-
-DeviceStatusHeadphone::~DeviceStatusHeadphone()
-{
-}
-
-bool DeviceStatusHeadphone::isSupported()
-{
- return true;
-}
-
-void DeviceStatusHeadphone::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{"
- TRIG_BOOL_ITEM_DEF("IsConnected") ","
- "\"Type\":{\"type\":\"string\",\"values\":[\"Normal\",\"Headset\",\"Bluetooth\"]}"
- "}",
- NULL);
-}
-
-int DeviceStatusHeadphone::subscribe()
-{
- __connected = __getCurrentStatus();
-
- // Wired headphone
- int ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, __onAudioJackStateChanged, this);
- IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
-
- // Bluetooth headphone
- __setBtAudioCallback();
-
- return ERR_NONE;
-}
-
-int DeviceStatusHeadphone::unsubscribe()
-{
- runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
- __unsetBtAudioCallback();
-
- return ERR_NONE;
-}
-
-int DeviceStatusHeadphone::read()
-{
- if (!__beingSubscribed)
- __connected = __getCurrentStatus();
-
- Json data;
- __generateDataPacket(&data);
- replyToRead(NULL, ERR_NONE, data);
-
- return ERR_NONE;
-}
-
-void DeviceStatusHeadphone::__setBtAudioCallback()
-{
- IF_FAIL_VOID(!__btAudioCallbackOn);
- int ret;
-
- ret = bt_initialize();
- if (ret != BT_ERROR_NONE) {
- _W("Bluetooth initialization failed");
- return;
- }
-
- ret = bt_device_set_connection_state_changed_cb(__onBtConnectionChanged, this);
- if (ret != BT_ERROR_NONE) {
- bt_deinitialize();
- return;
- }
-
- __btAudioCallbackOn = true;
-}
-
-void DeviceStatusHeadphone::__unsetBtAudioCallback()
-{
- IF_FAIL_VOID(__btAudioCallbackOn);
-
- bt_device_unset_connection_state_changed_cb();
- bt_deinitialize();
-
- __btAudioCallbackOn = false;
-}
-
-void DeviceStatusHeadphone::__setBtAudioState(bool state)
-{
- __btAudioState = state;
-}
-
-bool DeviceStatusHeadphone::__getCurrentStatus()
-{
- int ret;
-
- // Wired audio
- ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
- IF_FAIL_RETURN(ret == ERR_NONE, __connected);
-
- // Bluetooth audio
- __btAudioState = false;
- ret = bt_initialize();
- if (ret == BT_ERROR_NONE) {
- bt_adapter_foreach_bonded_device(__onBtBond, this);
- bt_deinitialize();
- }
-
- return ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
-}
-
-void DeviceStatusHeadphone::__generateDataPacket(Json* data)
-{
- data->set(NULL, DEVICE_ST_IS_CONNECTED, __connected ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- switch (__audioJackState) {
- case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE:
- data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_NORMAL);
- break;
- case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE:
- data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_HEADSET);
- break;
- default:
- if (__btAudioState)
- data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_BLUETOOTH);
- break;
- }
-}
-
-bool DeviceStatusHeadphone::__handleUpdate()
-{
- bool prevState = __connected;
- __connected = ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
-
- IF_FAIL_RETURN(prevState != __connected, false);
-
- Json data;
- __generateDataPacket(&data);
- publish(NULL, ERR_NONE, data);
- return true;
-}
-
-void DeviceStatusHeadphone::__handleAudioJackEvent()
-{
- int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
- IF_FAIL_VOID_TAG(ret == ERR_NONE, _E, "Getting runtime info failed");
- __handleUpdate();
-}
-
-void DeviceStatusHeadphone::__onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData)
-{
- _D("EarJack");
- DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
- instance->__handleAudioJackEvent();
-}
-
-void DeviceStatusHeadphone::__onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData)
-{
- DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
- IF_FAIL_VOID(connected != instance->__btAudioState);
- IF_FAIL_VOID(!instance->__btEventHandlerAdded);
-
- if (connected) {
- _D("BT state checking scheduled");
- instance->__btEventHandlerAdded = true;
- instance->__btEventHandlingCount = 0;
- g_timeout_add(HANDLING_DELAY, __handleBtEvent, userData);
- } else {
- __handleBtEvent(userData);
- }
-}
-
-gboolean DeviceStatusHeadphone::__handleBtEvent(gpointer data)
-{
- _D("BT state checking started");
- DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(data);
- instance->__btEventHandlerAdded = false;
-
- instance->__setBtAudioState(false);
- int err = bt_adapter_foreach_bonded_device(__onBtBond, data);
- IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, FALSE, _E, "bt_adapter_foreach_bonded_device() failed");
-
- instance->__btEventHandlingCount++;
-
- if (instance->__handleUpdate() || instance->__btEventHandlingCount >= MAX_HANDLING_COUNT)
- return FALSE;
-
- return TRUE;
-}
-
-bool DeviceStatusHeadphone::__onBtBond(bt_device_info_s *deviceInfo, void* userData)
-{
- if (deviceInfo->bt_class.major_device_class != BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO)
- return true;
-
- bool st = false;
- int err = bt_device_is_profile_connected(deviceInfo->remote_address, BT_PROFILE_A2DP, &st);
- IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, false, _E, "bt_device_is_profile_connected() failed");
-
- if (st) {
- DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
- instance->__setBtAudioState(true);
- return false;
- }
-
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_HEADPHONE_H_
-#define _DEVICE_STATUS_HEADPNOHE_H_
-
-#include <glib.h>
-#include <runtime_info.h>
-#include <bluetooth.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusHeadphone : public DeviceProviderBase {
- public:
- DeviceStatusHeadphone();
- ~DeviceStatusHeadphone();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- bool __connected;
- int __audioJackState;
- bool __btAudioState;
- bool __btAudioCallbackOn;
- bool __btEventHandlerAdded;
- int __btEventHandlingCount;
-
- bool __getCurrentStatus();
- void __setBtAudioCallback();
- void __unsetBtAudioCallback();
- void __setBtAudioState(bool state);
-
- void __generateDataPacket(Json* data);
- bool __handleUpdate();
- void __handleAudioJackEvent();
- static gboolean __handleBtEvent(gpointer data);
-
- static void __onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData);
- static void __onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData);
- static bool __onBtBond(bt_device_info_s *deviceInfo, void* userData);
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_HEADPHONE_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SystemTypes.h"
-#include "Psmode.h"
-
-using namespace ctx;
-
-DeviceStatusPsmode::DeviceStatusPsmode() :
- DeviceProviderBase(DEVICE_ST_SUBJ_PSMODE)
-{
-}
-
-DeviceStatusPsmode::~DeviceStatusPsmode()
-{
-}
-
-bool DeviceStatusPsmode::isSupported()
-{
- return true;
-}
-
-void DeviceStatusPsmode::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{" TRIG_BOOL_ITEM_DEF("IsEnabled") "}", NULL);
-}
-
-void DeviceStatusPsmode::__updateCb(keynode_t *node, void* userData)
-{
- DeviceStatusPsmode *instance = static_cast<DeviceStatusPsmode*>(userData);
- instance->__handleUpdate(node);
-}
-
-void DeviceStatusPsmode::__handleUpdate(keynode_t *node)
-{
- int status;
- Json dataRead;
-
- status = vconf_keynode_get_int(node);
- IF_FAIL_VOID_TAG(status >= 0, _E, "Getting state failed");
-
- dataRead.set(NULL, DEVICE_ST_IS_ENABLED, status == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
-
- publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusPsmode::subscribe()
-{
- int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb, this);
- IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int DeviceStatusPsmode::unsubscribe()
-{
- int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb);
- IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int DeviceStatusPsmode::read()
-{
- int mode;
- int ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode);
- IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
-
- Json dataRead;
- dataRead.set(NULL, DEVICE_ST_IS_ENABLED, mode == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
-
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
-#define _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
-
-#include <vconf.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusPsmode : public DeviceProviderBase {
- public:
- DeviceStatusPsmode();
- ~DeviceStatusPsmode();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- void __handleUpdate(keynode_t *node);
- static void __updateCb(keynode_t *node, void* userData);
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_TYPES_H_
-#define _DEVICE_SYSTEM_STATUS_TYPES_H_
-
-// Subject
-#define DEVICE_ST_SUBJ_BATTERY "system/battery"
-#define DEVICE_ST_SUBJ_CHARGER "system/charger"
-#define DEVICE_ST_SUBJ_HEADPHONE "system/headphone"
-#define DEVICE_ST_SUBJ_WIFI "system/wifi"
-#define DEVICE_ST_SUBJ_USB "system/usb"
-#define DEVICE_ST_SUBJ_GPS "system/gps"
-#define DEVICE_ST_SUBJ_PSMODE "system/psmode"
-#define DEVICE_ST_SUBJ_ALARM "device/alarm"
-#define DEVICE_ST_SUBJ_TIME "device/time"
-
-// Data Key
-#define DEVICE_ST_EVENT "Event"
-#define DEVICE_ST_STATE "State"
-#define DEVICE_ST_TYPE "Type"
-#define DEVICE_ST_LEVEL "Level"
-#define DEVICE_ST_BSSID "BSSID"
-#define DEVICE_ST_IS_CONNECTED "IsConnected"
-#define DEVICE_ST_IS_ENABLED "IsEnabled"
-#define DEVICE_ST_IS_CHARGING "IsCharging"
-#define DEVICE_ST_DETECTED "Detected"
-#define DEVICE_ST_TIME_OF_DAY "TimeOfDay"
-#define DEVICE_ST_DAY_OF_WEEK "DayOfWeek"
-#define DEVICE_ST_DAY_OF_MONTH "DayOfMonth"
-
-// Data Value
-#define DEVICE_ST_TRUE 1
-#define DEVICE_ST_FALSE 0
-#define DEVICE_ST_ENTER "Enter"
-#define DEVICE_ST_EXIT "Exit"
-#define DEVICE_ST_DISABLED "Disabled"
-#define DEVICE_ST_CONNECTED "Connected"
-#define DEVICE_ST_UNCONNECTED "Unconnected"
-#define DEVICE_ST_SEARCHING "Searching"
-#define DEVICE_ST_EMPTY "Empty"
-#define DEVICE_ST_CRITICAL "Critical"
-#define DEVICE_ST_LOW "Low"
-#define DEVICE_ST_NORMAL "Normal"
-#define DEVICE_ST_HIGH "High"
-#define DEVICE_ST_FULL "Full"
-#define DEVICE_ST_HEADSET "Headset"
-#define DEVICE_ST_BLUETOOTH "Bluetooth"
-
-#define TRIG_BOOL_ITEM_DEF(sbj) "\"" sbj "\":{\"type\":\"integer\",\"min\":0,\"max\":1}"
-
-#endif //_DEVICE_SYSTEM_STATUS_TYPES_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <TimerManager.h>
-#include "SystemTypes.h"
-#include "Time.h"
-
-using namespace ctx;
-
-DeviceStatusTime::DeviceStatusTime() :
- DeviceProviderBase(DEVICE_ST_SUBJ_TIME)
-{
-}
-
-DeviceStatusTime::~DeviceStatusTime()
-{
-}
-
-bool DeviceStatusTime::isSupported()
-{
- return true;
-}
-
-void DeviceStatusTime::submitTriggerItem()
-{
- registerTriggerItem(OPS_READ,
- "{"
- "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
- "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]},"
- "\"DayOfMonth\":{\"type\":\"integer\",\"min\":1,\"max\":31}"
- "}",
- NULL);
-}
-
-int DeviceStatusTime::subscribe()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int DeviceStatusTime::unsubscribe()
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int DeviceStatusTime::read()
-{
- time_t rawtime;
- struct tm timeInfo;
-
- time(&rawtime);
- tzset();
- localtime_r(&rawtime, &timeInfo);
-
- int dayOfMonth = timeInfo.tm_mday;
- int minuteOfDay = timeInfo.tm_hour * 60 + timeInfo.tm_min;
- std::string dayOfWeek = TimerManager::dowToStr(0x01 << timeInfo.tm_wday);
-
- Json dataRead;
- dataRead.set(NULL, DEVICE_ST_DAY_OF_MONTH, dayOfMonth);
- dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, dayOfWeek);
- dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, minuteOfDay);
-
- _I("Time: %02d:%02d, Day of Week: %s, Day of Month: %d", timeInfo.tm_hour, timeInfo.tm_min, dayOfWeek.c_str(), dayOfMonth);
-
- replyToRead(NULL, ERR_NONE, dataRead);
-
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_TIME_H_
-#define _DEVICE_SYSTEM_STATUS_TIME_H_
-
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusTime : public DeviceProviderBase {
- public:
- DeviceStatusTime();
- ~DeviceStatusTime();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_TIME_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <SharedVars.h>
-#include "SystemTypes.h"
-#include "Wifi.h"
-
-using namespace ctx;
-
-DeviceStatusWifi::DeviceStatusWifi() :
- DeviceProviderBase(DEVICE_ST_SUBJ_WIFI),
- __lastState(UNKNOWN),
- __isInitialized(false),
- __isActivated(false),
- __connState(WIFI_CONNECTION_STATE_FAILURE)
-{
- IF_FAIL_VOID_TAG(__startMonitor(), _W, "WiFi monitor initialization failed");
-
- if (!__getCurrentState()) {
- __stopMonitor();
- _W("Getting current WiFi status failed");
- }
-}
-
-DeviceStatusWifi::~DeviceStatusWifi()
-{
- __stopMonitor();
-}
-
-bool DeviceStatusWifi::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/network.wifi");
-}
-
-void DeviceStatusWifi::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{"
- "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Unconnected\",\"Connected\"]},"
- "\"BSSID\":{\"type\":\"string\"}"
- "}",
- NULL);
-}
-
-bool DeviceStatusWifi::__getCurrentState()
-{
- int err;
-
- if (!__isInitialized) {
- err = wifi_initialize();
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
- }
-
- err = wifi_is_activated(&__isActivated);
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_is_activated() failed");
-
- err = wifi_get_connection_state(&__connState);
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connection_state() failed");
-
- if (__isActivated) {
- if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
- __lastState = CONNECTED;
- __getBssid();
- } else {
- __lastState = UNCONNECTED;
- __clearBssid();
- }
- } else {
- __lastState = DISABLED;
- __clearBssid();
- }
-
- if (!__isInitialized)
- wifi_deinitialize();
-
- return true;
-}
-
-bool DeviceStatusWifi::__getBssid()
-{
- int err;
- char *strBuf = NULL;
- wifi_ap_h ap = NULL;
-
- err = wifi_get_connected_ap(&ap);
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connected_ap() failed");
-
- wifi_ap_get_bssid(ap, &strBuf);
- __bssid = (strBuf != NULL ? strBuf : "");
- g_free(strBuf);
-
- wifi_ap_destroy(ap);
-
- if (__bssid.empty())
- _W("Failed to get BSSID");
-
- SharedVars().set(SharedVars::WIFI_BSSID, __bssid);
- _D("BSSID: %s", __bssid.c_str());
-
- return !__bssid.empty();
-}
-
-void DeviceStatusWifi::__clearBssid()
-{
- __bssid.clear();
- SharedVars().clear(SharedVars::WIFI_BSSID);
- _D("No WiFi connection");
-}
-
-bool DeviceStatusWifi::__getResponsePacket(Json* data)
-{
- switch (__lastState) {
- case DISABLED:
- data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_DISABLED);
- break;
-
- case UNCONNECTED:
- data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_UNCONNECTED);
- break;
-
- case CONNECTED:
- data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_CONNECTED);
- data->set(NULL, DEVICE_ST_BSSID, __bssid);
- break;
-
- default:
- return false;
- }
-
- return true;
-}
-
-int DeviceStatusWifi::read()
-{
- IF_FAIL_RETURN(__getCurrentState(), ERR_OPERATION_FAILED);
-
- Json dataRead;
- if (__getResponsePacket(&dataRead)) {
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
- }
-
- return ERR_OPERATION_FAILED;
-}
-
-bool DeviceStatusWifi::__startMonitor()
-{
- IF_FAIL_RETURN(!__isInitialized, true);
-
- int err;
- err = wifi_initialize();
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
-
- err = wifi_set_device_state_changed_cb(__deviceStateChangedCb, this);
- IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_device_state_changed_cb() failed");
-
- err = wifi_set_connection_state_changed_cb(__connectionStateChangedCb, this);
- IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_connection_state_changed_cb() failed");
-
- __isInitialized = true;
- return true;
-
-CATCH:
- wifi_deinitialize();
- return false;
-}
-
-void DeviceStatusWifi::__stopMonitor()
-{
- IF_FAIL_VOID(__isInitialized);
-
- wifi_unset_device_state_changed_cb();
- wifi_unset_connection_state_changed_cb();
- wifi_deinitialize();
- __isInitialized = false;
-}
-
-int DeviceStatusWifi::subscribe()
-{
-#if 0
- IF_FAIL_RETURN(__startMonitor(), ERR_OPERATION_FAILED);
- if (!__getCurrentState()) {
- __stopMonitor();
- return ERR_OPERATION_FAILED;
- }
-#endif
-
- return ERR_NONE;
-}
-
-int DeviceStatusWifi::unsubscribe()
-{
-#if 0
- __stopMonitor();
-#endif
- return ERR_NONE;
-}
-
-void DeviceStatusWifi::__handleUpdate()
-{
- int prevState = __lastState;
-
- if (__isActivated) {
- if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
- __lastState = CONNECTED;
- } else {
- __lastState = UNCONNECTED;
- }
- } else {
- __lastState = DISABLED;
- }
-
- if (__lastState != prevState) {
- if (__lastState == CONNECTED) {
- __getBssid();
- } else {
- __clearBssid();
- }
-
- Json data;
- if (__beingSubscribed && __getResponsePacket(&data))
- publish(NULL, ERR_NONE, data);
- }
-}
-
-void DeviceStatusWifi::__deviceStateChangedCb(wifi_device_state_e state, void *userData)
-{
- DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
- instance->__isActivated = (state == WIFI_DEVICE_STATE_ACTIVATED);
- instance->__handleUpdate();
-}
-
-void DeviceStatusWifi::__connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
-{
- DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
- instance->__connState = state;
- instance->__handleUpdate();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_WIFI_H_
-#define _DEVICE_SYSTEM_STATUS_WIFI_H_
-
-#include <string>
-#include <wifi.h>
-#include "../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusWifi : public DeviceProviderBase {
- public:
- DeviceStatusWifi();
- ~DeviceStatusWifi();
-
- int subscribe();
- int unsubscribe();
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- enum InternalState {
- UNKNOWN = -1,
- DISABLED = 0,
- UNCONNECTED,
- CONNECTED,
- };
-
- int __lastState;
- bool __isInitialized;
- bool __isActivated;
- wifi_connection_state_e __connState;
- std::string __bssid;
-
- bool __getCurrentState();
- bool __getBssid();
- void __clearBssid();
- bool __getResponsePacket(Json* data);
- void __handleUpdate();
- bool __startMonitor();
- void __stopMonitor();
- static void __deviceStateChangedCb(wifi_device_state_e state, void *userData);
- static void __connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
- };
-}
-
-#endif // _CONTEXT_SYSTEM_STATUS_WIFI_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Charger.h"
-
-using namespace ctx;
-
-DeviceStatusCharger::DeviceStatusCharger() :
- DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_CHARGER, RUNTIME_INFO_KEY_CHARGER_CONNECTED)
-{
-}
-
-DeviceStatusCharger::~DeviceStatusCharger()
-{
-}
-
-bool DeviceStatusCharger::isSupported()
-{
- return true;
-}
-
-void DeviceStatusCharger::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
-}
-
-void DeviceStatusCharger::handleUpdate()
-{
- bool chargerStatus = false;
-
- int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
- IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
- Json dataRead;
- dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusCharger::read()
-{
- bool chargerStatus = false;
- Json dataRead;
-
- int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
- IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
- dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_CHARGER_
-#define _DEVICE_SYSTEM_STATUS_CHARGER_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
- class DeviceStatusCharger : public DeviceStatusRuntimeInfo {
- public:
- DeviceStatusCharger();
- ~DeviceStatusCharger();
-
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- protected:
- void handleUpdate();
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_CHARGER_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Gps.h"
-
-using namespace ctx;
-
-static const char* __getStatusString(int gpsStatus)
-{
- switch (gpsStatus) {
- case RUNTIME_INFO_GPS_STATUS_DISABLED:
- return DEVICE_ST_DISABLED;
-
- case RUNTIME_INFO_GPS_STATUS_SEARCHING:
- return DEVICE_ST_SEARCHING;
-
- case RUNTIME_INFO_GPS_STATUS_CONNECTED:
- return DEVICE_ST_CONNECTED;
-
- default:
- _E("Unknown GPS status: %d", gpsStatus);
- return NULL;
- }
-}
-
-DeviceStatusGps::DeviceStatusGps() :
- DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_GPS, RUNTIME_INFO_KEY_GPS_STATUS)
-{
-}
-
-DeviceStatusGps::~DeviceStatusGps()
-{
-}
-
-bool DeviceStatusGps::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/location.gps");
-}
-
-void DeviceStatusGps::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{"
- "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Searching\",\"Connected\"]}"
- "}",
- NULL);
-}
-
-void DeviceStatusGps::handleUpdate()
-{
- int gpsStatus;
- int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
- IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
- Json dataRead;
-
- const char* stateStr = __getStatusString(gpsStatus);
- IF_FAIL_VOID(stateStr);
-
- dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
-
- publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusGps::read()
-{
- int gpsStatus;
- Json dataRead;
-
- int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
- IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
- const char* stateStr = __getStatusString(gpsStatus);
- IF_FAIL_RETURN(stateStr, ERR_OPERATION_FAILED);
-
- dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
-
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_GPS_H_
-#define _DEVICE_SYSTEM_STATUS_GPS_H_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
- class DeviceStatusGps : public DeviceStatusRuntimeInfo {
- public:
- DeviceStatusGps();
- ~DeviceStatusGps();
-
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- protected:
- void handleUpdate();
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_GPS_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "RuntimeInfoBase.h"
-
-using namespace ctx;
-
-DeviceStatusRuntimeInfo::DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key) :
- DeviceProviderBase(subject),
- __infoKey(key)
-{
-}
-
-runtime_info_key_e DeviceStatusRuntimeInfo::__getInfoKey()
-{
- return __infoKey;
-}
-
-void DeviceStatusRuntimeInfo::updateCb(runtime_info_key_e runtimeKey, void* userData)
-{
- DeviceStatusRuntimeInfo *instance = static_cast<DeviceStatusRuntimeInfo*>(userData);
- IF_FAIL_VOID_TAG(runtimeKey == instance->__getInfoKey(), _W, "Runtime info key mismatch");
- instance->handleUpdate();
-}
-
-int DeviceStatusRuntimeInfo::subscribe()
-{
- int ret = runtime_info_set_changed_cb(__infoKey, updateCb, this);
- IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
-
-int DeviceStatusRuntimeInfo::unsubscribe()
-{
- int ret = runtime_info_unset_changed_cb(__infoKey);
- IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
-#define _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
-
-#include <runtime_info.h>
-#include "../../DeviceProviderBase.h"
-
-namespace ctx {
-
- class DeviceStatusRuntimeInfo : public DeviceProviderBase {
- public:
- DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key);
-
- int subscribe();
- int unsubscribe();
- virtual int read() = 0;
-
- protected:
- runtime_info_key_e __infoKey;
-
- virtual ~DeviceStatusRuntimeInfo(){}
- static void updateCb(runtime_info_key_e runtimeKey, void* userData);
- virtual void handleUpdate() = 0;
-
- private:
- runtime_info_key_e __getInfoKey();
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "../SystemTypes.h"
-#include "Usb.h"
-
-using namespace ctx;
-
-DeviceStatusUsb::DeviceStatusUsb() :
- DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_USB, RUNTIME_INFO_KEY_USB_CONNECTED)
-{
-}
-
-DeviceStatusUsb::~DeviceStatusUsb()
-{
-}
-
-bool DeviceStatusUsb::isSupported()
-{
- return getSystemInfoBool("tizen.org/feature/usb.host");
-}
-
-void DeviceStatusUsb::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
- "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
-}
-
-void DeviceStatusUsb::handleUpdate()
-{
- bool status = false;
-
- int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
- IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
-
- Json dataRead;
- dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- publish(NULL, ERR_NONE, dataRead);
-}
-
-int DeviceStatusUsb::read()
-{
- bool status = false;
- Json dataRead;
-
- int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
- IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
-
- dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
-
- replyToRead(NULL, ERR_NONE, dataRead);
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _DEVICE_SYSTEM_STATUS_USB_H_
-#define _DEVICE_SYSTEM_STATUS_USB_H_
-
-#include "RuntimeInfoBase.h"
-
-namespace ctx {
-
- class DeviceStatusUsb : public DeviceStatusRuntimeInfo {
- public:
- DeviceStatusUsb();
- ~DeviceStatusUsb();
-
- int read();
-
- bool isSupported();
- void submitTriggerItem();
-
- protected:
- void handleUpdate();
- };
-}
-
-#endif // _DEVICE_SYSTEM_STATUS_USB_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <email-api-etc.h>
+#include "Email.h"
+
+using namespace ctx;
+
+SocialStatusEmail::SocialStatusEmail() :
+ DeviceProviderBase(SOCIAL_ST_SUBJ_EMAIL),
+ __dbusSignalId(-1),
+ __dbusWatcher(DBusType::SESSION)
+{
+}
+
+SocialStatusEmail::~SocialStatusEmail()
+{
+}
+
+bool SocialStatusEmail::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusEmail::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{"
+ "\"Event\":{\"type\":\"string\",\"values\":[\"Received\",\"Sent\"]}"
+ "}",
+ NULL);
+}
+
+void SocialStatusEmail::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
+{
+ gint subType = 0;
+ gint gi1 = 0;
+ const gchar *gc = NULL;
+ gint gi2 = 0;
+ gint gi3 = 0;
+
+ g_variant_get(param, "(ii&sii)", &subType, &gi1, &gc, &gi2, &gi3);
+
+ if (subType == NOTI_DOWNLOAD_FINISH) {
+ //TODO: Check if this signal actually means that there are new mails
+ _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
+ Json dataUpdated;
+ dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
+ publish(NULL, ERR_NONE, dataUpdated);
+
+ } else if (subType == NOTI_SEND_FINISH) {
+ _D("sub type: %d, gi1: %d, gc: %s, gi2: %d, gi3: %d", subType, gi1, gc, gi2, gi3);
+ Json dataUpdated;
+ dataUpdated.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_SENT);
+ publish(NULL, ERR_NONE, dataUpdated);
+ }
+}
+
+
+int SocialStatusEmail::subscribe()
+{
+ __dbusSignalId = __dbusWatcher.watch(NULL, NULL, "User.Email.NetworkStatus", "email", this);
+ IF_FAIL_RETURN_TAG(__dbusSignalId >= 0, ERR_OPERATION_FAILED, _E, "Email dbus signal subscription failed");
+ return ERR_NONE;
+}
+
+
+int SocialStatusEmail::unsubscribe()
+{
+ __dbusWatcher.unwatch(__dbusSignalId);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_EMAIL_H_
+#define _CONTEXT_SOCIAL_STATUS_EMAIL_H_
+
+#include <DBusSignalWatcher.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class SocialStatusEmail : public DeviceProviderBase, public IDBusSignalListener {
+ public:
+ SocialStatusEmail();
+ ~SocialStatusEmail();
+
+ int subscribe();
+ int unsubscribe();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
+
+ private:
+ int64_t __dbusSignalId;
+ DBusSignalWatcher __dbusWatcher;
+ };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_EMAIL_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Types.h>
+#include <Json.h>
+#include "PlaceGeofenceProvider.h"
+#include "GeofenceMonitorHandle.h"
+
+using namespace ctx;
+
+GeofenceMonitorHandle::GeofenceMonitorHandle(PlaceGeofenceProvider *provider) :
+ __provider(provider),
+ __placeId(-1),
+ __prevState(GEOFENCE_STATE_UNCERTAIN),
+ __geoHandle(NULL)
+{
+}
+
+GeofenceMonitorHandle::~GeofenceMonitorHandle()
+{
+ __stopMonitor();
+}
+
+bool GeofenceMonitorHandle::startMonitor(int placeId)
+{
+ _D("Starts to monitor Place-%d", placeId);
+
+ IF_FAIL_RETURN(placeId >= 0, false);
+ IF_FAIL_RETURN_TAG(__geoHandle == NULL, false, _E, "Re-starting MyPlace monitor");
+
+ geofence_manager_create(&__geoHandle);
+ IF_FAIL_RETURN_TAG(__geoHandle, false, _E, "Geofence initialization failed");
+
+ int ret;
+
+ ret = geofence_manager_set_geofence_state_changed_cb(__geoHandle, __fenceStateCb, this);
+ IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting state callback failed");
+
+ ret = geofence_manager_set_geofence_event_cb(__geoHandle, __fenceEventCb, this);
+ IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting event callback failed");
+
+ ret = geofence_manager_foreach_place_geofence_list(__geoHandle, placeId, __fenceListCb, this);
+ IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Getting fence list failed");
+
+ __placeId = placeId;
+ return true;
+
+CATCH:
+ __stopMonitor();
+ return false;
+}
+
+int GeofenceMonitorHandle::getPlaceId()
+{
+ return __placeId;
+}
+
+void GeofenceMonitorHandle::__stopMonitor()
+{
+ _D("Stops monitoring Place-%d", __placeId);
+
+ //TODO: Do we need to stop all geofences explicitly?
+ if (__geoHandle) {
+ geofence_manager_destroy(__geoHandle);
+ __geoHandle = NULL;
+ }
+
+ __geoStateMap.clear();
+ __placeId = -1;
+ __prevState = GEOFENCE_STATE_UNCERTAIN;
+}
+
+bool GeofenceMonitorHandle::__startFence(int fenceId)
+{
+ int ret;
+
+ ret = geofence_manager_start(__geoHandle, fenceId);
+ IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Starting failed");
+
+ geofence_status_h status;
+ ret = geofence_status_create(fenceId, &status);
+ IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Getting status failed");
+
+ geofence_state_e state = GEOFENCE_STATE_UNCERTAIN;
+ geofence_status_get_state(status, &state);
+ geofence_status_destroy(status);
+
+ __geoStateMap[fenceId] = state;
+
+ return true;
+}
+
+void GeofenceMonitorHandle::__removeFence(int fenceId)
+{
+ geofence_manager_stop(__geoHandle, fenceId);
+ __geoStateMap.erase(fenceId);
+}
+
+void GeofenceMonitorHandle::__updateFence(int fenceId, geofence_manage_e manage)
+{
+ switch (manage) {
+ case GEOFENCE_MANAGE_PLACE_REMOVED:
+ _W("[Place-%d] Removed", __placeId);
+ __stopMonitor();
+ break;
+ case GEOFENCE_MANAGE_FENCE_ADDED:
+ _I("[Place %d] Fence-%d added", __placeId, fenceId);
+ __startFence(fenceId);
+ __emitStateChange();
+ break;
+ case GEOFENCE_MANAGE_FENCE_REMOVED:
+ _I("[Place-%d] Fence-%d removed", __placeId, fenceId);
+ __removeFence(fenceId);
+ __emitStateChange();
+ break;
+ case GEOFENCE_MANAGE_FENCE_STARTED:
+ _D("[Place-%d] Fence-%d started", __placeId, fenceId);
+ break;
+ case GEOFENCE_MANAGE_FENCE_STOPPED:
+ _D("[Place-%d] Fence-%d stopped", __placeId, fenceId);
+ //TODO: Do we need to restart this?
+ break;
+ default:
+ _D("[Place-%d] Ignoring the manage event %d", __placeId, manage);
+ break;
+ }
+}
+
+void GeofenceMonitorHandle::__updateState(int fenceId, geofence_state_e state)
+{
+ __geoStateMap[fenceId] = state;
+}
+
+void GeofenceMonitorHandle::__emitStateChange()
+{
+ geofence_state_e currentState = GEOFENCE_STATE_UNCERTAIN;
+ int outCount = 0;
+
+ for (auto it = __geoStateMap.begin(); it != __geoStateMap.end(); ++it) {
+ if (it->second == GEOFENCE_STATE_IN) {
+ currentState = GEOFENCE_STATE_IN;
+ break;
+ } else if (it->second == GEOFENCE_STATE_OUT) {
+ ++outCount;
+ }
+ }
+
+ if (currentState != GEOFENCE_STATE_IN && outCount > 0) {
+ currentState = GEOFENCE_STATE_OUT;
+ }
+
+ if (currentState == __prevState) {
+ return;
+ }
+
+ __prevState = currentState;
+
+ Json option;
+ option.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
+
+ Json data;
+ data.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
+ data.set(NULL, PLACE_GEOFENCE_EVENT, __getStateString(currentState));
+
+ __provider->publish(option, ERR_NONE, data);
+}
+
+const char* GeofenceMonitorHandle::__getStateString(geofence_state_e state)
+{
+ switch (state) {
+ case GEOFENCE_STATE_IN:
+ return PLACE_GEOFENCE_IN;
+ case GEOFENCE_STATE_OUT:
+ return PLACE_GEOFENCE_OUT;
+ case GEOFENCE_STATE_UNCERTAIN:
+ return PLACE_GEOFENCE_UNCERTAIN;
+ default:
+ return PLACE_GEOFENCE_UNCERTAIN;
+ }
+}
+
+bool GeofenceMonitorHandle::__fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData)
+{
+ _D("FenceID: %d, Index: %d, Count: %d", geofenceId, fenceIndex, fenceCount);
+ IF_FAIL_RETURN(fenceCount > 0, false);
+
+ GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+ return handle->__startFence(geofenceId);
+}
+
+void GeofenceMonitorHandle::__fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData)
+{
+ IF_FAIL_VOID_TAG(error == GEOFENCE_MANAGER_ERROR_NONE, _W, "Geofence error: %d", error);
+
+ GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+
+ IF_FAIL_VOID_TAG(placeId == handle->getPlaceId(), _W, "Mismatched Place ID");
+
+ handle->__updateFence(geofenceId, manage);
+}
+
+void GeofenceMonitorHandle::__fenceStateCb(int geofenceId, geofence_state_e state, void* userData)
+{
+ GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
+ handle->__updateState(geofenceId, state);
+ handle->__emitStateChange();
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
+#define _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
+
+#include <string>
+#include <map>
+#include <geofence_manager.h>
+
+namespace ctx {
+
+ class PlaceGeofenceProvider;
+
+ class GeofenceMonitorHandle {
+ public:
+ GeofenceMonitorHandle(PlaceGeofenceProvider *provider);
+ ~GeofenceMonitorHandle();
+
+ bool startMonitor(int placeId);
+ int getPlaceId();
+
+ private:
+ PlaceGeofenceProvider *__provider;
+ int __placeId;
+ geofence_state_e __prevState;
+ geofence_manager_h __geoHandle;
+ std::map<int, geofence_state_e> __geoStateMap;
+
+ void __emitStateChange();
+ void __stopMonitor();
+ bool __startFence(int fenceId);
+ void __removeFence(int fenceId);
+ void __updateFence(int fenceId, geofence_manage_e manage);
+ void __updateState(int fenceId, geofence_state_e state);
+
+ static const char* __getStateString(geofence_state_e state);
+
+ static bool __fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData);
+ static void __fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData);
+ static void __fenceStateCb(int geofenceId, geofence_state_e state, void* userData);
+ };
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <geofence_manager.h>
+#include "GeofenceMonitorHandle.h"
+#include "PlaceGeofenceProvider.h"
+
+using namespace ctx;
+
+PlaceGeofenceProvider::PlaceGeofenceProvider() :
+ ContextProvider(PLACE_SUBJ_GEOFENCE)
+{
+}
+
+PlaceGeofenceProvider::~PlaceGeofenceProvider()
+{
+ for (auto& it : __handleMap) {
+ delete it.second;
+ }
+
+ __handleMap.clear();
+}
+
+bool PlaceGeofenceProvider::isSupported()
+{
+ bool supported = false;
+ int ret = geofence_manager_is_supported(&supported);
+ IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, false, _E, "geofence_manager_is_supported() failed");
+ return supported;
+}
+
+void PlaceGeofenceProvider::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{"
+ "\"Event\":{\"type\":\"string\",\"values\":[\"In\",\"Out\"]}"
+ "}",
+ "{"
+ "\"PlaceId\":{\"type\":\"integer\",\"min\":1}"
+ "}");
+}
+
+int PlaceGeofenceProvider::subscribe(Json option, Json *requestResult)
+{
+ int placeId = -1;
+ option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
+ IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
+
+ auto it = __handleMap.find(placeId);
+ if (it != __handleMap.end()) {
+ _D("Place ID %d is being monitored already", placeId);
+ return ERR_NONE;
+ }
+
+ GeofenceMonitorHandle *handle = new(std::nothrow) GeofenceMonitorHandle(this);
+ ASSERT_ALLOC(handle);
+
+ bool ret = handle->startMonitor(placeId);
+ if (!ret) {
+ _E("Monitoring Place ID %d failed", placeId);
+ delete handle;
+ return ERR_OPERATION_FAILED;
+ }
+
+ __handleMap[placeId] = handle;
+
+ return ERR_NONE;
+}
+
+int PlaceGeofenceProvider::unsubscribe(Json option)
+{
+ int placeId = -1;
+ option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
+ IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
+
+ auto it = __handleMap.find(placeId);
+ if (it == __handleMap.end()) {
+ _D("Place ID %d is not being monitored", placeId);
+ return ERR_NONE;
+ }
+
+ delete it->second;
+ __handleMap.erase(it);
+
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
+#define _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
+
+#include <map>
+#include <ContextProvider.h>
+#include "PlaceGeofenceTypes.h"
+
+namespace ctx {
+
+ class GeofenceMonitorHandle;
+
+ class PlaceGeofenceProvider : public ContextProvider {
+ public:
+ PlaceGeofenceProvider();
+ ~PlaceGeofenceProvider();
+
+ int subscribe(Json option, Json *requestResult);
+ int unsubscribe(Json option);
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ std::map<int, GeofenceMonitorHandle*> __handleMap;
+ };
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_GEOFENCE_TYPES_H_
+#define _CONTEXT_PLACE_GEOFENCE_TYPES_H_
+
+// Subject
+#define PLACE_SUBJ_GEOFENCE "place/geofence"
+
+// Privilege
+#define PLACE_PRIV_GEOFENCE "location"
+
+// Option & Data Key
+#define PLACE_GEOFENCE_PLACE_ID "PlaceId"
+#define PLACE_GEOFENCE_EVENT "Event"
+
+// Data Value
+#define PLACE_GEOFENCE_UNCERTAIN "Uncertain"
+#define PLACE_GEOFENCE_IN "In"
+#define PLACE_GEOFENCE_OUT "Out"
+
+#endif /* End of _CONTEXT_PLACE_GEOFENCE_TYPES_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Headphone.h"
+
+#define HANDLING_DELAY 2000
+#define MAX_HANDLING_COUNT 3
+
+using namespace ctx;
+
+DeviceStatusHeadphone::DeviceStatusHeadphone() :
+ DeviceProviderBase(DEVICE_ST_SUBJ_HEADPHONE),
+ __connected(false),
+ __audioJackState(RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED),
+ __btAudioState(false),
+ __btAudioCallbackOn(false),
+ __btEventHandlerAdded(false),
+ __btEventHandlingCount(0)
+{
+}
+
+DeviceStatusHeadphone::~DeviceStatusHeadphone()
+{
+}
+
+bool DeviceStatusHeadphone::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusHeadphone::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{"
+ TRIG_BOOL_ITEM_DEF("IsConnected") ","
+ "\"Type\":{\"type\":\"string\",\"values\":[\"Normal\",\"Headset\",\"Bluetooth\"]}"
+ "}",
+ NULL);
+}
+
+int DeviceStatusHeadphone::subscribe()
+{
+ __connected = __getCurrentStatus();
+
+ // Wired headphone
+ int ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, __onAudioJackStateChanged, this);
+ IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+
+ // Bluetooth headphone
+ __setBtAudioCallback();
+
+ return ERR_NONE;
+}
+
+int DeviceStatusHeadphone::unsubscribe()
+{
+ runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
+ __unsetBtAudioCallback();
+
+ return ERR_NONE;
+}
+
+int DeviceStatusHeadphone::read()
+{
+ if (!__beingSubscribed)
+ __connected = __getCurrentStatus();
+
+ Json data;
+ __generateDataPacket(&data);
+ replyToRead(NULL, ERR_NONE, data);
+
+ return ERR_NONE;
+}
+
+void DeviceStatusHeadphone::__setBtAudioCallback()
+{
+ IF_FAIL_VOID(!__btAudioCallbackOn);
+ int ret;
+
+ ret = bt_initialize();
+ if (ret != BT_ERROR_NONE) {
+ _W("Bluetooth initialization failed");
+ return;
+ }
+
+ ret = bt_device_set_connection_state_changed_cb(__onBtConnectionChanged, this);
+ if (ret != BT_ERROR_NONE) {
+ bt_deinitialize();
+ return;
+ }
+
+ __btAudioCallbackOn = true;
+}
+
+void DeviceStatusHeadphone::__unsetBtAudioCallback()
+{
+ IF_FAIL_VOID(__btAudioCallbackOn);
+
+ bt_device_unset_connection_state_changed_cb();
+ bt_deinitialize();
+
+ __btAudioCallbackOn = false;
+}
+
+void DeviceStatusHeadphone::__setBtAudioState(bool state)
+{
+ __btAudioState = state;
+}
+
+bool DeviceStatusHeadphone::__getCurrentStatus()
+{
+ int ret;
+
+ // Wired audio
+ ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
+ IF_FAIL_RETURN(ret == ERR_NONE, __connected);
+
+ // Bluetooth audio
+ __btAudioState = false;
+ ret = bt_initialize();
+ if (ret == BT_ERROR_NONE) {
+ bt_adapter_foreach_bonded_device(__onBtBond, this);
+ bt_deinitialize();
+ }
+
+ return ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
+}
+
+void DeviceStatusHeadphone::__generateDataPacket(Json* data)
+{
+ data->set(NULL, DEVICE_ST_IS_CONNECTED, __connected ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ switch (__audioJackState) {
+ case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE:
+ data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_NORMAL);
+ break;
+ case RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE:
+ data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_HEADSET);
+ break;
+ default:
+ if (__btAudioState)
+ data->set(NULL, DEVICE_ST_TYPE, DEVICE_ST_BLUETOOTH);
+ break;
+ }
+}
+
+bool DeviceStatusHeadphone::__handleUpdate()
+{
+ bool prevState = __connected;
+ __connected = ((__audioJackState != RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED) || __btAudioState);
+
+ IF_FAIL_RETURN(prevState != __connected, false);
+
+ Json data;
+ __generateDataPacket(&data);
+ publish(NULL, ERR_NONE, data);
+ return true;
+}
+
+void DeviceStatusHeadphone::__handleAudioJackEvent()
+{
+ int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &__audioJackState);
+ IF_FAIL_VOID_TAG(ret == ERR_NONE, _E, "Getting runtime info failed");
+ __handleUpdate();
+}
+
+void DeviceStatusHeadphone::__onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData)
+{
+ _D("EarJack");
+ DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+ instance->__handleAudioJackEvent();
+}
+
+void DeviceStatusHeadphone::__onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData)
+{
+ DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+ IF_FAIL_VOID(connected != instance->__btAudioState);
+ IF_FAIL_VOID(!instance->__btEventHandlerAdded);
+
+ if (connected) {
+ _D("BT state checking scheduled");
+ instance->__btEventHandlerAdded = true;
+ instance->__btEventHandlingCount = 0;
+ g_timeout_add(HANDLING_DELAY, __handleBtEvent, userData);
+ } else {
+ __handleBtEvent(userData);
+ }
+}
+
+gboolean DeviceStatusHeadphone::__handleBtEvent(gpointer data)
+{
+ _D("BT state checking started");
+ DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(data);
+ instance->__btEventHandlerAdded = false;
+
+ instance->__setBtAudioState(false);
+ int err = bt_adapter_foreach_bonded_device(__onBtBond, data);
+ IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, FALSE, _E, "bt_adapter_foreach_bonded_device() failed");
+
+ instance->__btEventHandlingCount++;
+
+ if (instance->__handleUpdate() || instance->__btEventHandlingCount >= MAX_HANDLING_COUNT)
+ return FALSE;
+
+ return TRUE;
+}
+
+bool DeviceStatusHeadphone::__onBtBond(bt_device_info_s *deviceInfo, void* userData)
+{
+ if (deviceInfo->bt_class.major_device_class != BT_MAJOR_DEVICE_CLASS_AUDIO_VIDEO)
+ return true;
+
+ bool st = false;
+ int err = bt_device_is_profile_connected(deviceInfo->remote_address, BT_PROFILE_A2DP, &st);
+ IF_FAIL_RETURN_TAG(err == BT_ERROR_NONE, false, _E, "bt_device_is_profile_connected() failed");
+
+ if (st) {
+ DeviceStatusHeadphone *instance = static_cast<DeviceStatusHeadphone*>(userData);
+ instance->__setBtAudioState(true);
+ return false;
+ }
+
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_HEADPHONE_H_
+#define _CONTEXT_HEADPNOHE_H_
+
+#include <glib.h>
+#include <runtime_info.h>
+#include <bluetooth.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class DeviceStatusHeadphone : public DeviceProviderBase {
+ public:
+ DeviceStatusHeadphone();
+ ~DeviceStatusHeadphone();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ bool __connected;
+ int __audioJackState;
+ bool __btAudioState;
+ bool __btAudioCallbackOn;
+ bool __btEventHandlerAdded;
+ int __btEventHandlingCount;
+
+ bool __getCurrentStatus();
+ void __setBtAudioCallback();
+ void __unsetBtAudioCallback();
+ void __setBtAudioState(bool state);
+
+ void __generateDataPacket(Json* data);
+ bool __handleUpdate();
+ void __handleAudioJackEvent();
+ static gboolean __handleBtEvent(gpointer data);
+
+ static void __onAudioJackStateChanged(runtime_info_key_e runtimeKey, void* userData);
+ static void __onBtConnectionChanged(bool connected, bt_device_connection_info_s *connInfo, void *userData);
+ static bool __onBtBond(bt_device_info_s *deviceInfo, void* userData);
+ };
+}
+
+#endif // _CONTEXT_HEADPHONE_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "MediaStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+MediaDbHandle::MediaDbHandle(ContextProvider *provider) :
+ StatsDbHandleBase(provider)
+{
+}
+
+MediaDbHandle::~MediaDbHandle()
+{
+}
+
+int MediaDbHandle::read(Json filter)
+{
+ //TODO: filter validation (in the API side?)
+ std::string query;
+ const char *subject = reqProvider->getSubject();
+
+ if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC)) {
+ query = createSqlPeakTime(MEDIA_TYPE_MUSIC, filter);
+
+ } else if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO)) {
+ query = createSqlPeakTime(MEDIA_TYPE_VIDEO, filter);
+
+ } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC)) {
+ query = createSqlCommonSetting(MEDIA_TYPE_MUSIC, filter);
+
+ } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO)) {
+ query = createSqlCommonSetting(MEDIA_TYPE_VIDEO, filter);
+
+ } else if (STR_EQ(subject, MEDIA_SUBJ_MUSIC_FREQUENCY)) {
+ isTriggerItem = true;
+ query = createSqlFrequency(MEDIA_TYPE_MUSIC, filter);
+
+ } else if (STR_EQ(subject, MEDIA_SUBJ_VIDEO_FREQUENCY)) {
+ isTriggerItem = true;
+ query = createSqlFrequency(MEDIA_TYPE_VIDEO, filter);
+ }
+
+ IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+ bool ret = executeQuery(filter, query.c_str());
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+ return ERR_NONE;
+}
+
+std::string MediaDbHandle::createWhereClause(int mediaType, Json filter)
+{
+ std::stringstream whereClause;
+
+ whereClause << CX_MEDIA_TYPE " = " << mediaType << " AND ";
+ whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+ return whereClause.str();
+}
+
+std::string MediaDbHandle::createSqlPeakTime(int mediaType, Json filter)
+{
+ std::string where = createWhereClause(mediaType, filter);
+ return StatsDbHandleBase::createSqlPeakTime(filter, MEDIA_TABLE_NAME, where);
+}
+
+std::string MediaDbHandle::createSqlCommonSetting(int mediaType, Json filter)
+{
+ std::string where = createWhereClause(mediaType, filter);
+ return StatsDbHandleBase::createSqlCommonSetting(filter, MEDIA_TABLE_NAME, where);
+}
+
+std::string MediaDbHandle::createSqlFrequency(int mediaType, Json filter)
+{
+ Json filterCleaned;
+ std::string weekStr;
+ std::string timeOfDay;
+
+ if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+ filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+ if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+ filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+ std::string whereClause = createWhereClause(mediaType, filterCleaned);
+
+ std::stringstream query;
+ query <<
+ "SELECT IFNULL(COUNT(*),0) AS " STATS_TOTAL_COUNT \
+ " FROM " MEDIA_TABLE_NAME \
+ " WHERE " << whereClause;
+
+ return query.str();
+}
+
+void MediaDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+ IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_MUSIC_FREQUENCY) ||
+ STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_VIDEO_FREQUENCY), _E, "Invalid subject");
+
+ Json results;
+ int val;
+
+ jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+ results.set(NULL, STATS_TOTAL_COUNT, val);
+
+ reqProvider->replyToRead(reqFilter, error, results);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
+#define _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+ class MediaDbHandle : public StatsDbHandleBase {
+ public:
+ MediaDbHandle(ContextProvider *provider);
+ ~MediaDbHandle();
+
+ int read(Json filter);
+
+ protected:
+ std::string createWhereClause(int mediaType, Json filter);
+ std::string createSqlPeakTime(int mediaType, Json filter);
+ std::string createSqlCommonSetting(int mediaType, Json filter);
+ std::string createSqlFrequency(int mediaType, Json filter);
+ void replyTriggerItem(int error, Json &jsonResult);
+ };
+}
+
+#endif /* End of _CONTEXT_STATS_MEDIA_DB_HANDLE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <time.h>
+#include <Types.h>
+#include "../shared/SystemInfo.h"
+#include "MediaStatisticsTypes.h"
+#include "DbHandle.h"
+#include "MediaContentMonitor.h"
+
+#define PLAYCOUNT_RETENTION_PERIOD 259200 /* 1 month in secs */
+#define ONE_DAY_IN_SEC 86400
+
+ctx::MediaContentMonitor::MediaContentMonitor() :
+ __started(false),
+ __lastCleanupTime(0)
+{
+ __dbManager.createTable(0, MEDIA_TABLE_NAME, MEDIA_TABLE_COLUMNS, NULL, NULL);
+ __dbManager.execute(0, MEDIA_PLAYCOUNT_TABLE_SCHEMA, NULL);
+
+ __started = __startMonitoring();
+}
+
+ctx::MediaContentMonitor::~MediaContentMonitor()
+{
+ if (__started)
+ __stopMonitoring();
+}
+
+bool ctx::MediaContentMonitor::__startMonitoring()
+{
+ int err;
+ err = media_content_connect();
+ IF_FAIL_RETURN_TAG(err == MEDIA_CONTENT_ERROR_NONE, false, _E, "media_content_connect() failed");
+
+ err = media_content_set_db_updated_cb(__onMediaContentDbUpdated, this);
+ if (err != MEDIA_CONTENT_ERROR_NONE) {
+ media_content_disconnect();
+ _E("media_content_set_db_updated_cb() failed");
+ return false;
+ }
+
+ return true;
+}
+
+void ctx::MediaContentMonitor::__stopMonitoring()
+{
+ media_content_unset_db_updated_cb();
+ media_content_disconnect();
+}
+
+void ctx::MediaContentMonitor::__onMediaContentDbUpdated(
+ media_content_error_e error, int pid,
+ media_content_db_update_item_type_e updateItem,
+ media_content_db_update_type_e updateType,
+ media_content_type_e mediaType,
+ char *uuid, char *path, char *mimeType, void *userData)
+{
+ IF_FAIL_VOID(error == MEDIA_CONTENT_ERROR_NONE && uuid != NULL);
+ IF_FAIL_VOID(updateItem == MEDIA_ITEM_FILE && updateType == MEDIA_CONTENT_UPDATE);
+ IF_FAIL_VOID(mediaType == MEDIA_CONTENT_TYPE_MUSIC || mediaType == MEDIA_CONTENT_TYPE_VIDEO);
+
+ media_info_h media = NULL;
+ media_info_get_media_from_db(uuid, &media);
+ IF_FAIL_VOID_TAG(media, _E, "media_info_get_media_from_db() failed");
+
+ int cnt = -1;
+ media_info_get_played_count(media, &cnt);
+ media_info_destroy(media);
+ IF_FAIL_VOID_TAG(cnt >= 0, _E, "Invalid play count");
+
+ MediaContentMonitor *instance = static_cast<MediaContentMonitor*>(userData);
+ instance->__updatePlayCount(uuid,
+ (mediaType == MEDIA_CONTENT_TYPE_MUSIC) ? MEDIA_TYPE_MUSIC : MEDIA_TYPE_VIDEO,
+ cnt);
+}
+
+void ctx::MediaContentMonitor::__appendCleanupQuery(std::stringstream &query)
+{
+ int timestamp = static_cast<int>(time(NULL));
+ IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
+
+ __lastCleanupTime = timestamp;
+
+ query <<
+ "DELETE FROM Log_MediaPlayCount WHERE UTC < strftime('%s', 'now') - " << PLAYCOUNT_RETENTION_PERIOD << ";" \
+ "DELETE FROM " MEDIA_TABLE_NAME " WHERE UTC < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD << ";";
+}
+
+void ctx::MediaContentMonitor::__updatePlayCount(const char *uuid, int type, int count)
+{
+ std::stringstream query;
+ query <<
+ /* Inserting the media record to the play count table, if not exist */
+ "INSERT OR IGNORE INTO Log_MediaPlayCount" \
+ " (UUID, MediaType) VALUES ('" << uuid << "'," << type <<");" \
+ /* Updating the play count and getting the diff from the previous count */
+ "UPDATE Log_MediaPlayCount SET Diff = " << count << " - Count," \
+ " Count = " << count << ", UTC = strftime('%s', 'now')" \
+ " WHERE UUID = '" << uuid << "';";
+ __appendCleanupQuery(query);
+ query <<
+ /* Checking whether the play count changes */
+ "SELECT MediaType FROM Log_MediaPlayCount" \
+ " WHERE UUID = '" << uuid << "' AND Diff > 0;";
+
+ __dbManager.execute(0, query.str().c_str(), this);
+}
+
+void ctx::MediaContentMonitor::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+ IF_FAIL_VOID(!records.empty());
+
+ int mediaType = 0;
+ records[0].get(NULL, CX_MEDIA_TYPE, &mediaType);
+
+ __insertLog(mediaType);
+}
+
+void ctx::MediaContentMonitor::__insertLog(int mediaType)
+{
+ int systemVolume = -1, mediaVolume = -1, audioJack = -1;
+
+ Json data;
+ data.set(NULL, CX_MEDIA_TYPE, mediaType);
+
+ if (ctx::system_info::getAudioJackState(&audioJack))
+ data.set(NULL, STATS_AUDIO_JACK, audioJack);
+
+ if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
+ data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
+ data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
+ }
+
+ __dbManager.insert(0, MEDIA_TABLE_NAME, data, NULL);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
+#define _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
+
+#include <sstream>
+#include <media_content.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+
+ class MediaContentMonitor : public IDatabaseListener {
+ private:
+ bool __started;
+ int __lastCleanupTime;
+ DatabaseManager __dbManager;
+
+ bool __startMonitoring();
+ void __stopMonitoring();
+
+ void __appendCleanupQuery(std::stringstream &query);
+ void __updatePlayCount(const char *uuid, int type, int count);
+ void __insertLog(int mediaType);
+
+ void onTableCreated(unsigned int queryId, int error) {}
+ void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+ void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+ static void __onMediaContentDbUpdated(media_content_error_e error, int pid,
+ media_content_db_update_item_type_e updateItem,
+ media_content_db_update_type_e updateType,
+ media_content_type_e mediaType,
+ char *uuid, char *path, char *mimeType, void *userData);
+
+ public:
+ MediaContentMonitor();
+ ~MediaContentMonitor();
+ };
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_MEDIA_TYPES_H_
+#define _CONTEXT_STATS_MEDIA_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define MEDIA_HISTORY_PRIV "mediahistory.read"
+#define MEDIA_SUBJ_LOGGER "stats/media/logger"
+#define MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC "stats/music/peak_time"
+#define MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO "stats/video/peak_time"
+#define MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC "stats/music/setting"
+#define MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO "stats/video/setting"
+#define MEDIA_SUBJ_MUSIC_FREQUENCY "stats/music/frequency"
+#define MEDIA_SUBJ_VIDEO_FREQUENCY "stats/video/frequency"
+
+#define MEDIA_TABLE_NAME "Log_MediaPlayback"
+#define MEDIA_TABLE_COLUMNS \
+ "MediaType INTEGER NOT NULL, " \
+ "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
+ "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+ "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define MEDIA_PLAYCOUNT_TABLE_SCHEMA \
+ "CREATE TABLE IF NOT EXISTS Log_MediaPlayCount" \
+ " (UUID TEXT NOT NULL PRIMARY KEY, MediaType INTEGER NOT NULL," \
+ " Count INTEGER DEFAULT 0, Diff INTEGER DEFAULT 0, " \
+ " UTC TIMESTAMP DEFAULT (strftime('%s', 'now')))"
+
+#define CX_MEDIA_TYPE "MediaType"
+
+enum mediaType_e {
+ MEDIA_TYPE_MUSIC = 1,
+ MEDIA_TYPE_VIDEO,
+};
+
+#endif /* End of _CONTEXT_STATS_MEDIA_TYPES_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MediaStatisticsTypes.h"
+#include "MediaStatsLogger.h"
+
+using namespace ctx;
+
+MediaStatsLogger::MediaStatsLogger() :
+ ContextProvider(MEDIA_SUBJ_LOGGER)
+{
+}
+
+MediaStatsLogger::~MediaStatsLogger()
+{
+}
+
+int MediaStatsLogger::subscribe(Json option, Json* requestResult)
+{
+ return ERR_NONE;
+}
+
+int MediaStatsLogger::unsubscribe(Json option)
+{
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_MEDIA_STATS_LOGGER_H_
+#define _CONTEXT_MEDIA_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "MediaContentMonitor.h"
+
+namespace ctx {
+
+ class MediaStatsLogger : public ContextProvider {
+ public:
+ MediaStatsLogger();
+ ~MediaStatsLogger();
+
+ int subscribe(Json option, Json *requestResult);
+ int unsubscribe(Json option);
+
+ void submitTriggerItem() {}
+
+ private:
+ MediaContentMonitor __contentMon;
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_MEDIA_STATS_LOGGER_H_ */
+
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MediaStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+MediaStatsProvider::MediaStatsProvider(const char *subject) :
+ ContextProvider(subject)
+{
+}
+
+MediaStatsProvider::~MediaStatsProvider()
+{
+}
+
+bool MediaStatsProvider::isSupported()
+{
+ /* TODO */
+ return true;
+}
+
+void MediaStatsProvider::submitTriggerItem()
+{
+}
+
+int MediaStatsProvider::read(Json option, Json* requestResult)
+{
+ MediaDbHandle *handle = new(std::nothrow) MediaDbHandle(this);
+ IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+ int err = handle->read(option);
+ if (err != ERR_NONE) {
+ delete handle;
+ return err;
+ }
+
+ return ERR_NONE;
+}
+
+void MusicFreqProvider::submitTriggerItem()
+{
+ registerTriggerItem(OPS_READ,
+ "{" TRIG_DEF_TOTAL_COUNT "}",
+ "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
+}
+
+void VideoFreqProvider::submitTriggerItem()
+{
+ registerTriggerItem(OPS_READ,
+ "{" TRIG_DEF_TOTAL_COUNT "}",
+ "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_MEDIA_STATS_PROVIDER_H_
+#define _CONTEXT_MEDIA_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "MediaStatisticsTypes.h"
+
+namespace ctx {
+
+ class MediaStatsProvider : public ContextProvider {
+ public:
+ int read(Json option, Json* requestResult);
+
+ bool isSupported();
+ virtual void submitTriggerItem();
+
+ protected:
+ MediaStatsProvider(const char *subject);
+ virtual ~MediaStatsProvider();
+ }; /* class MediaStatsProvider */
+
+
+ class MusicPeakTimeProvider : public MediaStatsProvider {
+ public:
+ MusicPeakTimeProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC) {}
+ };
+
+
+ class VideoPeakTimeProvider : public MediaStatsProvider {
+ public:
+ VideoPeakTimeProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO) {}
+ };
+
+
+ class MusicSettingProvider: public MediaStatsProvider {
+ public:
+ MusicSettingProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC) {}
+ };
+
+
+ class VideoSettingProvider: public MediaStatsProvider {
+ public:
+ VideoSettingProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO) {}
+ };
+
+
+ class MusicFreqProvider: public MediaStatsProvider {
+ public:
+ MusicFreqProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_MUSIC_FREQUENCY) {}
+
+ void submitTriggerItem();
+ };
+
+
+ class VideoFreqProvider: public MediaStatsProvider {
+ public:
+ VideoFreqProvider() :
+ MediaStatsProvider(MEDIA_SUBJ_VIDEO_FREQUENCY) {}
+
+ void submitTriggerItem();
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_MEDIA_STATS_PROVIDER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Message.h"
+
+#define MAX_ADDR_SIZE 20
+
+using namespace ctx;
+
+SocialStatusMessage::SocialStatusMessage() :
+ DeviceProviderBase(SOCIAL_ST_SUBJ_MESSAGE),
+ __messageHandle(NULL)
+{
+}
+
+SocialStatusMessage::~SocialStatusMessage()
+{
+}
+
+bool SocialStatusMessage::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/network.telephony");
+}
+
+void SocialStatusMessage::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{"
+ "\"Event\":{\"type\":\"string\",\"values\":[\"Received\"]},"
+ "\"Type\":{\"type\":\"string\",\"values\":[\"SMS\",\"MMS\"]},"
+ "\"Address\":{\"type\":\"string\"}"
+ "}",
+ NULL);
+}
+
+void SocialStatusMessage::__updateCb(msg_handle_t handle, msg_struct_t msg, void* userData)
+{
+ SocialStatusMessage *instance = static_cast<SocialStatusMessage*>(userData);
+ instance->__handleUpdate(msg);
+}
+
+void SocialStatusMessage::__handleUpdate(msg_struct_t msg)
+{
+ int err;
+ int type;
+ char address[MAX_ADDR_SIZE];
+ Json data;
+
+ err = msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &type);
+ IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting message type failed");
+
+ err = msg_get_str_value(msg, MSG_MESSAGE_REPLY_ADDR_STR, address, MAX_ADDR_SIZE);
+ IF_FAIL_VOID_TAG(err == MSG_SUCCESS, _W, "Getting reply address failed");
+
+ switch (type) {
+ case MSG_TYPE_SMS_CB :
+ case MSG_TYPE_SMS_JAVACB :
+ case MSG_TYPE_SMS_WAPPUSH :
+ case MSG_TYPE_SMS_MWI :
+ case MSG_TYPE_SMS_SYNCML :
+ case MSG_TYPE_SMS_REJECT :
+ case MSG_TYPE_SMS_ETWS_PRIMARY :
+ case MSG_TYPE_SMS :
+ data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_SMS);
+ break;
+ case MSG_TYPE_MMS_NOTI :
+ case MSG_TYPE_MMS_JAVA :
+ case MSG_TYPE_MMS :
+ data.set(NULL, SOCIAL_ST_TYPE, SOCIAL_ST_MMS);
+ break;
+ default :
+ _W("Unknown message type");
+ return;
+ }
+
+ data.set(NULL, SOCIAL_ST_EVENT, SOCIAL_ST_RECEIVED);
+ data.set(NULL, SOCIAL_ST_ADDRESS, address);
+
+ publish(NULL, ERR_NONE, data);
+}
+
+bool SocialStatusMessage::__setCallback()
+{
+ int err;
+
+ err = msg_open_msg_handle(&__messageHandle);
+ IF_FAIL_RETURN_TAG(err == MSG_SUCCESS, false, _E, "Handle creation failed");
+
+ err = msg_reg_sms_message_callback(__messageHandle, __updateCb, 0, this);
+ if (err != MSG_SUCCESS) {
+ msg_close_msg_handle(&__messageHandle);
+ _E("Setting SMS event callback failed");
+ return false;
+ }
+
+ msg_reg_mms_conf_message_callback(__messageHandle, __updateCb, NULL, this);
+ return true;
+}
+
+void SocialStatusMessage::__unsetCallback()
+{
+ if (__messageHandle)
+ msg_close_msg_handle(&__messageHandle);
+
+ __messageHandle = NULL;
+}
+
+int SocialStatusMessage::subscribe()
+{
+ bool ret = __setCallback();
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int SocialStatusMessage::unsubscribe()
+{
+ __unsetCallback();
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_SMS_H_
+#define _CONTEXT_SOCIAL_STATUS_SMS_H_
+
+#include <msg.h>
+#include <msg_transport.h>
+#include "../shared/SocialTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class SocialStatusMessage : public DeviceProviderBase {
+ public:
+ SocialStatusMessage();
+ ~SocialStatusMessage();
+
+ int subscribe();
+ int unsubscribe();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ msg_handle_t __messageHandle;
+ bool __beingSubscribed;
+
+ bool __setCallback();
+ void __unsetCallback();
+ void __handleUpdate(msg_struct_t msg);
+ static void __updateCb(msg_handle_t handle, msg_struct_t msg, void* userData);
+ };
+}
+
+#endif // _CONTEXT_SOCIAL_STATUS_SMS_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "place_recognition.h"
+#include "user_places/user_places.h"
+
+int ctx::PlaceRecognitionProvider::subscribe(ctx::Json option, ctx::Json* requestResult)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int ctx::PlaceRecognitionProvider::unsubscribe(ctx::Json option)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int ctx::PlaceRecognitionProvider::read(ctx::Json option, ctx::Json* requestResult)
+{
+ _I(BLUE("Read"));
+ _J("Option", option);
+
+ std::vector<std::shared_ptr<ctx::Place>> places = __engine.getPlaces();
+ Json dataRead = UserPlaces::composeJson(places);
+
+ /*
+ * The below function needs to be called once.
+ * It does not need to be called within this read() function.
+ * In can be called later, in another scope.
+ * Please just be sure that, the 2nd input parameter "option" should be the same to the
+ * "option" parameter received via ctx::PlaceRecognitionProvider::read().
+ */
+ replyToRead(option, ERR_NONE, dataRead);
+
+ return ERR_NONE;
+}
+
+int ctx::PlaceRecognitionProvider::write(ctx::Json data, ctx::Json* requestResult)
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+bool ctx::PlaceRecognitionProvider::isSupported()
+{
+ /* TODO: This function should be implemented properly */
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_H_
+#define _CONTEXT_PLACE_RECOGNITION_H_
+
+#include <ContextProvider.h>
+#include "place_recognition_types.h"
+#include "user_places/user_places.h"
+
+namespace ctx {
+
+ class PlaceRecognitionProvider : public ContextProvider {
+ public:
+ PlaceRecognitionProvider() :
+ ContextProvider(PLACE_SUBJ_RECOGNITION),
+ __engine(PLACE_RECOG_HIGH_ACCURACY_MODE) {}
+
+ ~PlaceRecognitionProvider() {}
+
+ int subscribe(ctx::Json option, ctx::Json *requestResult);
+ int unsubscribe(ctx::Json option);
+ int read(ctx::Json option, ctx::Json *requestResult);
+ int write(ctx::Json data, ctx::Json *requestResult);
+
+ bool isSupported();
+ void submitTriggerItem() {}
+
+ private:
+ UserPlaces __engine;
+ }; /* class PlaceRecognitionProvider */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_TYPES_
+#define _CONTEXT_PLACE_RECOGNITION_TYPES_
+
+// Context Items
+#define PLACE_SUBJ_RECOGNITION "place/pattern/personal_poi"
+
+#define PLACE_PRIV_RECOGNITION "location"
+
+// Database
+#define VISIT_TABLE "place_status_user_place_visit"
+#define VISIT_COLUMN_START_TIME "start_time"
+#define VISIT_COLUMN_END_TIME "end_time"
+#define VISIT_COLUMN_WIFI_APS "wifi_aps"
+#define VISIT_COLUMN_CATEGORY "category"
+#ifdef TIZEN_ENGINEER_MODE
+#define VISIT_COLUMN_START_TIME_HUMAN "start_time_human" // only for debug: human readable time data:
+#define VISIT_COLUMN_END_TIME_HUMAN "end_time_human" // only for debug: human readable time data:
+#endif /* TIZEN_ENGINEER_MODE */
+#define VISIT_COLUMN_LOCATION_VALID "geo_valid"
+#define VISIT_COLUMN_LOCATION_LATITUDE "geo_latitude"
+#define VISIT_COLUMN_LOCATION_LONGITUDE "geo_longitude"
+#define VISIT_COLUMN_CATEG_HOME "categ_home"
+#define VISIT_COLUMN_CATEG_WORK "categ_work"
+#define VISIT_COLUMN_CATEG_OTHER "categ_other"
+
+#define PLACE_TABLE "place_status_user_place"
+#define PLACE_COLUMN_CATEG_ID "type_id" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
+#define PLACE_COLUMN_CATEG_CONFIDENCE "type_confidence"
+#define PLACE_COLUMN_NAME "name"
+#define PLACE_COLUMN_LOCATION_VALID "geo_valid"
+#define PLACE_COLUMN_LOCATION_LATITUDE "geo_latitude"
+#define PLACE_COLUMN_LOCATION_LONGITUDE "geo_longitude"
+#define PLACE_COLUMN_WIFI_APS "wifi_aps"
+#define PLACE_COLUMN_CREATE_DATE "create_date"
+
+#define WIFI_TABLE_NAME "place_status_user_place_wifi"
+#define WIFI_COLUMN_TIMESTAMP "timestamp"
+#define WIFI_COLUMN_BSSID "bssid"
+
+#define LOCATION_TABLE_NAME "place_status_user_place_location"
+#define LOCATION_COLUMN_LATITUDE "geo_latitude"
+#define LOCATION_COLUMN_LONGITUDE "geo_longitude"
+#define LOCATION_COLUMN_ACCURACY "accuracy"
+#define LOCATION_COLUMN_TIMESTAMP "timestamp"
+#ifdef TIZEN_ENGINEER_MODE
+#define LOCATION_COLUMN_TIMESTAMP_HUMAN "time_human" // only for debug: human readable time data:
+#define LOCATION_COLUMN_METHOD "method"
+#endif /* TIZEN_ENGINEER_MODE */
+
+// Data Key
+#define DATA_READ "PlacesList"
+#define PLACE_CATEG_ID "TypeId" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
+#define PLACE_CATEG_CONFIDENCE "TypeConfidence"
+#define PLACE_NAME "Name"
+#define PLACE_GEO_LATITUDE "GeoLatitude"
+#define PLACE_GEO_LONGITUDE "GeoLongitude"
+#define PLACE_WIFI_APS "WifiAPs"
+#define PLACE_CREATE_DATE "CreateDate"
+
+// Data values
+enum PlaceCategId {
+ PLACE_CATEG_ID_NONE = 0,
+ PLACE_CATEG_ID_HOME = 1,
+ PLACE_CATEG_ID_WORK = 2,
+ PLACE_CATEG_ID_OTHER = 3
+};
+
+enum PlaceRecogMode {
+ PLACE_RECOG_HIGH_ACCURACY_MODE = 0,
+ PLACE_RECOG_LOW_POWER_MODE = 1
+};
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_TYPES_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "debug_utils.h"
+#include <Types.h>
+
+std::string ctx::DebugUtils::humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc)
+{
+ struct tm * timeinfo;
+ if (utc) {
+ format += " UTC";
+ size += 4;
+ timeinfo = gmtime(×tamp);
+ } else {
+ timeinfo = localtime(×tamp);
+ }
+ char buffer[size];
+ if (timeinfo) {
+ strftime(buffer, size, format.c_str(), timeinfo);
+ } else {
+ snprintf(buffer, size, "NULL");
+ }
+ return std::string(buffer);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
+#define _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
+
+#include <string>
+#include <ctime>
+
+namespace ctx {
+
+ class DebugUtils {
+
+ public:
+ static std::string humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc = false);
+
+ }; /* class DebugUtils */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "gmap.h"
+#include <iostream>
+#include <fstream>
+
+const std::string ctx::Gmap::__HTML_HEADER = R"(
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
+ <meta charset="utf-8">
+ <title>Simple markers</title>
+ <style>
+ html, body, #map-canvas {
+ height: 100%;
+ margin: 0px;
+ padding: 0px
+ }
+ </style>
+ <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
+ <script>
+function initialize() {
+ var mapOptions = {
+ zoom: 2,
+ center: new google.maps.LatLng(20,60)
+ }
+ var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
+)";
+
+const std::string ctx::Gmap::__HTML_FOOTER = R"(
+}
+
+google.maps.event.addDomListener(window, 'load', initialize);
+
+ </script>
+ </head>
+ <body>
+ <div id="map-canvas"></div>
+ </body>
+</html>
+)";
+
+std::string ctx::Gmap::__iconForCategId(PlaceCategId categId)
+{
+ switch (categId) {
+ case PLACE_CATEG_ID_HOME: return "markerH.png";
+ case PLACE_CATEG_ID_WORK: return "markerW.png";
+ case PLACE_CATEG_ID_OTHER: return "markerO.png";
+ case PLACE_CATEG_ID_NONE: return "markerN.png";
+ default: return "markerD.png";
+ }
+}
+
+void ctx::Gmap::__placeMarker2Stream(const ctx::Place& place, std::ostream& out)
+{
+ if (place.locationValid) {
+ out << "new google.maps.Marker({" << std::endl;
+ out << " position: new google.maps.LatLng(" << place.location.latitude << "," << place.location.longitude << ")," << std::endl;
+ out << " map: map," << std::endl;
+ out << " icon: \"http://maps.google.com/mapfiles/" << __iconForCategId(place.categId)<< "\"" << std::endl;
+ out << "});" << std::endl;
+ }
+}
+
+void ctx::Gmap::__html2Stream(const std::vector<std::shared_ptr<ctx::Place>>& places, std::ostream& out)
+{
+ out << __HTML_HEADER;
+ for (std::shared_ptr<ctx::Place> place : places) {
+ __placeMarker2Stream(*place, out);
+ }
+ out << __HTML_FOOTER;
+}
+
+void ctx::Gmap::writeMap(const std::vector<std::shared_ptr<ctx::Place>>& places)
+{
+ std::ofstream out(GMAP_FILE);
+ __html2Stream(places, out);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_GMAP_H_
+#define _CONTEXT_PLACE_RECOGNITION_GMAP_H_
+
+#include "user_places_types.h"
+#include "../place_recognition_types.h"
+
+#define GMAP_FILE "/opt/usr/media/Others/user_places_map.html"
+
+namespace ctx {
+
+ /*
+ * Class for generating a HTML page with GoogleMaps with all user places.
+ * This class is for test/demo purposes only. TODO: Remove this class from final solution.
+ */
+ class Gmap {
+
+ private:
+ static const std::string __HTML_HEADER;
+ static const std::string __HTML_FOOTER;
+ static std::string __iconForCategId(PlaceCategId categId);
+ static void __placeMarker2Stream(const Place& place, std::ostream& out);
+ static void __html2Stream(const std::vector<std::shared_ptr<Place>>& places, std::ostream& out);
+
+ public:
+ static void writeMap(const std::vector<std::shared_ptr<Place>>& places);
+
+ }; /* class Gmap */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_GMAP_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <memory>
+#include <queue>
+#include "graph.h"
+
+std::shared_ptr<ctx::graph::Components> ctx::graph::connectedComponents(Graph &graph)
+{
+ std::shared_ptr<Components> ccs = std::make_shared<Components>();
+ std::set<int> fringe;
+
+ for (Node i = 0; i < static_cast<Node>(graph.size()); i++) {
+ if (!graph[i]) {
+ continue;
+ }
+ // neighbourhood of node i exists (was not removed)
+ std::shared_ptr<Component> c = std::make_shared<Component>();
+ ccs->push_back(c);
+ fringe.insert(i);
+ while (!fringe.empty()) {
+ Node currNode = *fringe.begin();
+ fringe.erase(fringe.begin());
+ c->insert(currNode);
+
+ std::shared_ptr<NeighbourNodes> currNhood = graph[currNode];
+ for (Node nhoodNode : *currNhood) {
+ if (graph[nhoodNode] && fringe.find(nhoodNode) == fringe.end()) {
+ fringe.insert(nhoodNode);
+ }
+ }
+ graph[currNode].reset(); // removing current node
+ }
+ }
+ return ccs;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
+#define _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
+
+#include <memory>
+#include <vector>
+#include <set>
+
+namespace ctx {
+
+namespace graph {
+
+ typedef int Node;
+ typedef std::set<Node> NeighbourNodes;
+ typedef std::vector<std::shared_ptr<NeighbourNodes>> Graph;
+ typedef std::set<Node> Component;
+ typedef std::vector<std::shared_ptr<Component>> Components;
+
+ /*
+ * make connected components of a given graph
+ * caution: the graph will be changed (its nodes will be cleared)
+ */
+ std::shared_ptr<Components> connectedComponents(Graph &graph);
+
+} /* namespace graph */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_GRAPH_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+ class ILocationListener {
+
+ public:
+ virtual ~ILocationListener() {};
+ virtual void onNewLocation(LocationEvent location) = 0;
+
+ }; /* class ILocationListener */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include <DatabaseManager.h>
+#include "../place_recognition_types.h"
+#include "user_places_params.h"
+#include "debug_utils.h"
+#include "location_logger.h"
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __LOCATION_CREATE_TABLE_COLUMNS \
+ LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
+ LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
+ LOCATION_COLUMN_ACCURACY " REAL, "\
+ LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
+ LOCATION_COLUMN_TIMESTAMP_HUMAN " TEXT, "\
+ LOCATION_COLUMN_METHOD " INTEGER "
+#else /* TIZEN_ENGINEER_MODE */
+#define __LOCATION_CREATE_TABLE_COLUMNS \
+ LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
+ LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
+ LOCATION_COLUMN_ACCURACY " REAL, "\
+ LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL "
+#endif /* TIZEN_ENGINEER_MODE */
+
+#define __LOCATION_ERROR_LOG(error) { \
+ if (error != LOCATIONS_ERROR_NONE) { \
+ _E("ERROR == %s", __locationError2Str(error)); \
+ } else { \
+ _D("SUCCESS"); \
+ } \
+}
+
+void ctx::LocationLogger::__locationServiceStateChangedCb(location_service_state_e state, void *userData)
+{
+ ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+ locationLogger->__locationServiceState = state;
+ if (state == LOCATIONS_SERVICE_ENABLED) {
+ _D("LOCATIONS_SERVICE_ENABLED");
+ switch (locationLogger->__timerPurpose) {
+ case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+ _D("Waiting for location service start FINISHED");
+ locationLogger->__timerStop();
+ locationLogger->__locationRequest();
+ break;
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+ case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+ case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+ default:
+ // Do nothing
+ break;
+ }
+ } else {
+ _D("LOCATIONS_SERVICE_DISABLED");
+// locationLogger->__timerStop();
+ }
+}
+
+void ctx::LocationLogger::__locationSettingChangedCb(location_method_e method, bool enable, void *userData)
+{
+ ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+ locationLogger->__locationMethodState = enable;
+ if (method == locationLogger->__locationMethod) {
+ if (enable) {
+ _D("Location method settings ON");
+ switch (locationLogger->__timerPurpose) {
+ case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+ _D("Waiting for location method settings on FINISHED");
+ if (locationLogger->__locationServiceState == LOCATIONS_SERVICE_ENABLED) {
+ locationLogger->__timerStop();
+ locationLogger->__locationRequest();
+ } else {
+ locationLogger->__locationManagerStart();
+ }
+ break;
+ case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+ case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+ default:
+ // Do nothing
+ break;
+ }
+ } else {
+ _D("Location method settings OFF");
+// locationLogger->__timerStop();
+ }
+ }
+}
+
+void ctx::LocationLogger::__positionUpdatedCb(double latitude, double longitude,
+ double altitude, time_t timestamp, void *userData)
+{
+ _D("");
+ ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
+ double horizontal = locationLogger->__locationManagerGetHorizontalAccuracy();
+#ifdef TIZEN_ENGINEER_MODE
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_REQUEST);
+#else /* TIZEN_ENGINEER_MODE */
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+ locationLogger->__broadcast(location);
+ locationLogger->__onActiveRequestSucceeded();
+}
+
+void ctx::LocationLogger::__locationUpdatedCb(location_error_e error, double latitude, double longitude,
+ double altitude, time_t timestamp, double speed, double direction, double climb, void *userData)
+{
+ _D("");
+ __positionUpdatedCb(latitude, longitude, altitude, timestamp, userData);
+}
+
+const char* ctx::LocationLogger::__locationError2Str(int error)
+{
+ switch (error) {
+ case LOCATIONS_ERROR_NONE:
+ return "LOCATIONS_ERROR_NONE";
+ case LOCATIONS_ERROR_OUT_OF_MEMORY:
+ return "LOCATIONS_ERROR_OUT_OF_MEMORY";
+ case LOCATIONS_ERROR_INVALID_PARAMETER:
+ return "LOCATIONS_ERROR_INVALID_PARAMETER";
+ case LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED:
+ return "LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED";
+ case LOCATIONS_ERROR_NOT_SUPPORTED:
+ return "LOCATIONS_ERROR_NOT_SUPPORTED";
+ case LOCATIONS_ERROR_INCORRECT_METHOD:
+ return "LOCATIONS_ERROR_INCORRECT_METHOD";
+ case LOCATIONS_ERROR_NETWORK_FAILED:
+ return "LOCATIONS_ERROR_NETWORK_FAILED";
+ case LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE:
+ return "LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE";
+ case LOCATIONS_ERROR_GPS_SETTING_OFF:
+ return "LOCATIONS_ERROR_GPS_SETTING_OFF";
+ case LOCATIONS_ERROR_SECURITY_RESTRICTED:
+ return "LOCATIONS_ERROR_SECURITY_RESTRICTED";
+ default:
+ return "unknown location error code";
+ }
+}
+
+
+void ctx::LocationLogger::__log(location_accessibility_state_e state)
+{
+ switch (state) {
+ case LOCATIONS_ACCESS_STATE_NONE : // Access state is not determined
+ _D("LOCATIONS_ACCESS_STATE_NONE ");
+ break;
+ case LOCATIONS_ACCESS_STATE_DENIED: // Access denied
+ _D("LOCATIONS_ACCESS_STATE_DENIED");
+ break;
+ case LOCATIONS_ACCESS_STATE_ALLOWED: // Access authorized
+ _D("LOCATIONS_ACCESS_STATE_ALLOWED");
+ break;
+ default:
+ break;
+ }
+}
+
+int ctx::LocationLogger::__dbCreateTable()
+{
+ ctx::DatabaseManager dbManager;
+ bool ret = dbManager.createTable(0, LOCATION_TABLE_NAME, __LOCATION_CREATE_TABLE_COLUMNS, NULL, NULL);
+ _D("%s -> Table Creation Request", ret ? "SUCCESS" : "FAIL");
+ return 0;
+}
+
+int ctx::LocationLogger::__dbInsertLog(LocationEvent locationEvent)
+{
+ Json data;
+ data.set(NULL, LOCATION_COLUMN_LATITUDE, locationEvent.coordinates.latitude);
+ data.set(NULL, LOCATION_COLUMN_LONGITUDE, locationEvent.coordinates.longitude);
+ data.set(NULL, LOCATION_COLUMN_ACCURACY, locationEvent.coordinates.accuracy);
+ data.set(NULL, LOCATION_COLUMN_TIMESTAMP, static_cast<int>(locationEvent.timestamp));
+#ifdef TIZEN_ENGINEER_MODE
+ std::string timeHuman = DebugUtils::humanReadableDateTime(locationEvent.timestamp, "%F %T", 80);
+ data.set(NULL, LOCATION_COLUMN_TIMESTAMP_HUMAN, timeHuman);
+ data.set(NULL, LOCATION_COLUMN_METHOD, static_cast<int>(locationEvent.method));
+#endif /* TIZEN_ENGINEER_MODE */
+
+ ctx::DatabaseManager dbManager;
+ int64_t rowId;
+ bool ret = dbManager.insertSync(LOCATION_TABLE_NAME, data, &rowId);
+ _D("%s -> DB: location table insert result", ret ? "SUCCESS" : "FAIL");
+ return ret;
+}
+
+ctx::LocationLogger::LocationLogger(ILocationListener *listener, bool testMode) :
+ __listener(listener),
+ __testMode(testMode),
+ __activeRequestAttempts(0),
+ __activeAttempts(0),
+ __allAttempts(0),
+ __locationCount(0),
+ __activeRequestSucceeded(false),
+ __activeLocationSucceeded(false),
+ __timerId(-1),
+ __timerTimestamp(0),
+ __timerPurpose(LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL),
+ __locationServiceState(LOCATIONS_SERVICE_DISABLED),
+ __locationMethod(LOCATION_LOGGER_METHOD),
+ __locationMethodState(false)
+{
+ _D("CONSTRUCTOR");
+
+ __locationManagerCreate();
+
+ if (__testMode) {
+ return;
+ }
+ if (LOCATION_LOGGER_DATABASE) {
+ __dbCreateTable();
+ }
+
+ __locationManagerSetServiceStateChangedCb();
+ __locationManagerSetSettingChangedCb();
+ __locationMethodState = __locationManagerIsEnabledMethod(__locationMethod);
+}
+
+ctx::LocationLogger::~LocationLogger()
+{
+ _D("DESTRUCTOR");
+ __stopLogging();
+ __locationManagerUnsetServiceStateChangedCb();
+ __locationManagerUnsetSettingChangedCb();
+ __locationManagerDestroy();
+}
+
+void ctx::LocationLogger::__locationManagerCreate()
+{
+ int ret = location_manager_create(__locationMethod, &__locationManager);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerDestroy()
+{
+ int ret = location_manager_destroy(__locationManager);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerSetServiceStateChangedCb()
+{
+ int ret = location_manager_set_service_state_changed_cb(__locationManager, __locationServiceStateChangedCb, this);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerUnsetServiceStateChangedCb()
+{
+ int ret = location_manager_unset_service_state_changed_cb(__locationManager);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerStart()
+{
+ int ret = location_manager_start(__locationManager);
+ __LOCATION_ERROR_LOG(ret);
+ __startServiceTimerStart();
+}
+
+void ctx::LocationLogger::__locationManagerStop()
+{
+ int ret = location_manager_stop(__locationManager);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+double ctx::LocationLogger::__locationManagerGetHorizontalAccuracy()
+{
+ location_accuracy_level_e accuracyLevel;
+ double horizontal, vertical;
+ int ret = location_manager_get_accuracy(__locationManager, &accuracyLevel, &horizontal, &vertical);
+ __LOCATION_ERROR_LOG(ret);
+ return horizontal;
+}
+
+location_accessibility_state_e ctx::LocationLogger::__locationManagerGetAccessibilityState()
+{
+ location_accessibility_state_e state;
+ int ret = location_manager_get_accessibility_state(&state);
+ __LOCATION_ERROR_LOG(ret);
+ return state;
+}
+
+void ctx::LocationLogger::__locationManagerSetSettingChangedCb()
+{
+ int ret = location_manager_set_setting_changed_cb(__locationMethod, __locationSettingChangedCb, this);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+void ctx::LocationLogger::__locationManagerUnsetSettingChangedCb()
+{
+ int ret = location_manager_unset_setting_changed_cb(__locationMethod);
+ __LOCATION_ERROR_LOG(ret);
+}
+
+bool ctx::LocationLogger::__locationManagerRequestSingleLocation()
+{
+ int ret = location_manager_request_single_location(__locationManager,
+ LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS, __locationUpdatedCb, this);
+ _D("%s (seconds=%d) ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+ ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+ LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS,
+ __activeRequestAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+ __activeAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+ __allAttempts,
+ LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+ __locationCount,
+ LOCATION_LOGGER_MAX_LOCATION_COUNT);
+ __LOCATION_ERROR_LOG(ret);
+ __activeRequestAttempts++;
+ __activeAttempts++;
+ __allAttempts++;
+ if (ret == LOCATIONS_ERROR_NONE) {
+ __activeRequestTimerStart();
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool ctx::LocationLogger::__locationManagerGetLocation()
+{
+ double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
+ location_accuracy_level_e level;
+ time_t timestamp;
+ int ret = location_manager_get_location(__locationManager, &altitude, &latitude, &longitude,
+ &climb, &direction, &speed, &level, &horizontal, &vertical, ×tamp);
+ _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+ ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+ __activeRequestAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+ __activeAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+ __allAttempts,
+ LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+ __locationCount,
+ LOCATION_LOGGER_MAX_LOCATION_COUNT);
+ __LOCATION_ERROR_LOG(ret);
+ __activeAttempts++;
+ __allAttempts++;
+ if (ret == LOCATIONS_ERROR_NONE) {
+#ifdef TIZEN_ENGINEER_MODE
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LOCATION);
+#else /* TIZEN_ENGINEER_MODE */
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+ __broadcast(location);
+ __onActiveLocationSucceeded();
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void ctx::LocationLogger::__locationManagerGetLastLocation()
+{
+ double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
+ location_accuracy_level_e level;
+ time_t timestamp;
+ int ret = location_manager_get_last_location(__locationManager, &altitude, &latitude, &longitude,
+ &climb, &direction, &speed, &level, &horizontal, &vertical, ×tamp);
+ _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
+ ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
+ __activeRequestAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+ __activeAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+ __allAttempts,
+ LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+ __locationCount,
+ LOCATION_LOGGER_MAX_LOCATION_COUNT);
+ __LOCATION_ERROR_LOG(ret);
+ __allAttempts++;
+ if (ret == LOCATIONS_ERROR_NONE) {
+#ifdef TIZEN_ENGINEER_MODE
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LAST_LOCATION);
+#else /* TIZEN_ENGINEER_MODE */
+ ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
+#endif /* TIZEN_ENGINEER_MODE */
+ __broadcast(location);
+ }
+}
+
+bool ctx::LocationLogger::__locationManagerIsEnabledMethod(location_method_e method)
+{
+ bool enable;
+ int ret = location_manager_is_enabled_method(method, &enable);
+ __LOCATION_ERROR_LOG(ret);
+ return enable;
+}
+
+bool ctx::LocationLogger::__checkGeneralLimits()
+{
+ return (__locationCount < LOCATION_LOGGER_MAX_LOCATION_COUNT
+ && __allAttempts < LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS);
+}
+
+bool ctx::LocationLogger::__checkActiveLimits()
+{
+ return (!__activeLocationSucceeded
+ && __activeAttempts < LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS);
+}
+
+bool ctx::LocationLogger::__checkActiveRequestLimits()
+{
+ return (!__activeRequestSucceeded
+ && __activeRequestAttempts < LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS);
+}
+
+void ctx::LocationLogger::__locationRequest()
+{
+ _D("");
+ bool requestSingleLocationRet = false;
+ bool getLocationRet = false;
+ if (__checkGeneralLimits() && __checkActiveLimits() && __checkActiveRequestLimits()) {
+ requestSingleLocationRet = __locationManagerRequestSingleLocation();
+ }
+ if (__checkGeneralLimits() && __checkActiveLimits() && !requestSingleLocationRet) {
+ getLocationRet = __locationManagerGetLocation();
+ }
+ if (__checkGeneralLimits() && !requestSingleLocationRet && !getLocationRet
+ && __activeAttempts >= LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS) {
+ __locationManagerGetLastLocation();
+ }
+ if (!requestSingleLocationRet) {
+ __locationManagerStop();
+ __setNextTimer();
+ }
+}
+
+void ctx::LocationLogger::__setNextTimer()
+{
+ _D("ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d])",
+ __activeRequestAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
+ __activeAttempts,
+ LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
+ __allAttempts,
+ LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
+ __locationCount,
+ LOCATION_LOGGER_MAX_LOCATION_COUNT);
+ if (__checkGeneralLimits()) {
+ if (__checkActiveLimits()) {
+ __activeIntervalTimerStart();
+ } else {
+ __passiveIntervalTimerStart();
+ }
+ }
+}
+
+void ctx::LocationLogger::__onActiveRequestSucceeded()
+{
+ _D("");
+ __locationManagerStop();
+ __activeRequestSucceeded = true;
+ __onActiveLocationSucceeded();
+}
+
+void ctx::LocationLogger::__onActiveLocationSucceeded()
+{
+ _D("");
+ __activeLocationSucceeded = true;
+}
+
+void ctx::LocationLogger::__broadcast(ctx::LocationEvent locationEvent)
+{
+ _D("");
+ __locationCount++;
+ if (__listener) {
+ __listener->onNewLocation(locationEvent);
+ }
+ if (LOCATION_LOGGER_DATABASE) {
+ __dbInsertLog(locationEvent);
+ }
+}
+
+bool ctx::LocationLogger::onTimerExpired(int id)
+{
+ time_t now = time(nullptr);
+ double seconds = difftime(now, __timerTimestamp);
+
+ switch (__timerPurpose) {
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
+ _D("Active request FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ __locationManagerStop();
+ __setNextTimer();
+ return false;
+ case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
+ _D("Service start in timeout time FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ // Waiting for service start FAILURE is also some kind of active request attempt
+ __activeRequestAttempts++;
+ __activeAttempts++;
+ __allAttempts++;
+ __locationManagerStop();
+ __setNextTimer();
+ return false;
+ case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
+ _D("Still waiting for Location method settings on, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ // Do nothing
+ return false;
+ case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
+ _D("Active interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ break;
+ case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
+ _D("Passive interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ break;
+ default:
+ _D("Do nothing, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
+ return false;
+ }
+ if (__locationMethodState) {
+ __locationManagerStart();
+ } else {
+ __timerPurpose = LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON;
+ _D("LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON");
+ }
+ return false;
+}
+
+void ctx::LocationLogger::__activeRequestTimerStart()
+{
+ int minutes = LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS / 60;
+ if (LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS % 60) {
+ minutes++;
+ }
+ __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST;
+ _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST (minutes=%d)", minutes);
+ __timerStart(minutes);
+}
+
+void ctx::LocationLogger::__startServiceTimerStart()
+{
+ __timerPurpose = LOCATION_LOGGER_WAITING_FOR_SERVICE_START;
+ _D("LOCATION_LOGGER_WAITING_FOR_SERVICE_START");
+ __timerStart(LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES);
+}
+
+void ctx::LocationLogger::__activeIntervalTimerStart()
+{
+ __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL;
+ _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL");
+ __timerStart(LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES);
+}
+
+void ctx::LocationLogger::__passiveIntervalTimerStart()
+{
+ __timerPurpose = LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL;
+ _D("LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL");
+ __timerStart(LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES);
+}
+
+void ctx::LocationLogger::__timerStart(time_t minutes)
+{
+ __timerTimestamp = time(nullptr);
+ __timerId = __timerManager.setFor(minutes, this);
+ _D("%s (minutes=%d) timerId = %d", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes, __timerId);
+}
+
+void ctx::LocationLogger::__timerStop()
+{
+ _D("");
+ __timerManager.remove(__timerId);
+}
+
+void ctx::LocationLogger::__startLogging()
+{
+ _D("");
+ __activeRequestAttempts = 0;
+ __activeAttempts = 0;
+ __allAttempts = 0;
+ __locationCount = 0;
+ __activeRequestSucceeded = false;;
+ __activeLocationSucceeded = false;
+ __locationManagerStart();
+}
+
+void ctx::LocationLogger::__stopLogging()
+{
+ _D("");
+ __timerStop();
+ __locationManagerStop();
+}
+
+void ctx::LocationLogger::onVisitStart()
+{
+ _D("");
+ if (!__testMode) {
+ __startLogging();
+ }
+}
+
+void ctx::LocationLogger::onVisitEnd()
+{
+ _D("");
+ if (!__testMode) {
+ __stopLogging();
+ }
+}
+
+#undef __LOCATION_ERROR_LOG
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
+
+#include <locations.h>
+#include <TimerManager.h>
+#include "visit_listener_iface.h"
+#include "location_listener_iface.h"
+
+/* Database usage flag */
+#define LOCATION_LOGGER_DATABASE false // TODO: false in final solution
+
+/* Locations measure method */
+#define LOCATION_LOGGER_METHOD LOCATIONS_METHOD_HYBRID
+
+/* TIMEOUTS: Location active measure request timeout (in seconds). */
+#define LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS 100
+
+/* TIMEOUTS: Location service start timeout (in minutes). */
+#define LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES 2
+
+/* FREQUENCIES/INTERVALS: "Active" measure attempts frequency (in minutes) */
+#define LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES 5
+
+/* FREQUENCIES/INTERVALS: "Passive" measure attempts frequency (in minutes) */
+#define LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES 30
+
+/* ATTEMTS LIMITS: "Active" request attempts limit (must be <= than active location attempts) */
+#define LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS 0
+
+/* ATTEMTS LIMITS: "Active" measures attempts limit (must be <= than all attempts limit) */
+#define LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS 2
+
+/* ATTEMTS LIMITS: All attempts ("active" + "passive") limit */
+#define LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS 3
+
+/* LOCATION LIMIT: Location count limit per visit */
+#define LOCATION_LOGGER_MAX_LOCATION_COUNT 3
+
+namespace ctx {
+
+ enum TimerPurpose {
+ LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST = 0,
+ LOCATION_LOGGER_WAITING_FOR_SERVICE_START = 1,
+ LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON = 2,
+ LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL = 3,
+ LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL = 4
+ };
+
+ class LocationLogger : public ITimerListener, public IVisitListener {
+
+ public:
+ LocationLogger(ILocationListener *listener = nullptr, bool testMode = false);
+ ~LocationLogger();
+
+ private:
+ /* INPUT */
+ void onVisitStart();
+ void onVisitEnd();
+
+ /* OUTPUT */
+ ILocationListener * const __listener;
+ void __broadcast(LocationEvent locationEvent);
+
+ /* INTERNAL */
+ bool __testMode;
+ void __startLogging();
+ void __stopLogging();
+ void __locationRequest();
+ void __onActiveRequestSucceeded();
+ void __onActiveLocationSucceeded();
+
+ /* INTERNAL : COUNTERS (LIMITS) */
+ int __activeRequestAttempts;
+ int __activeAttempts;
+ int __allAttempts;
+ int __locationCount;
+ bool __checkGeneralLimits();
+ bool __checkActiveLimits();
+ bool __checkActiveRequestLimits();
+
+ /* INTERNAL : FLAGS */
+ bool __activeRequestSucceeded;
+ bool __activeLocationSucceeded;
+
+ /* TIMER */
+ int __timerId;
+ time_t __timerTimestamp;
+ TimerManager __timerManager;
+ TimerPurpose __timerPurpose;
+ void __setNextTimer();
+ void __activeRequestTimerStart();
+ void __startServiceTimerStart();
+ void __activeIntervalTimerStart();
+ void __passiveIntervalTimerStart();
+ void __timerStart(time_t minutes);
+ void __timerStop();
+ bool onTimerExpired(int timerId);
+
+ /* DATABASE */
+ static int __dbCreateTable();
+ int __dbInsertLog(LocationEvent locationEvent);
+
+ /* DEBUG */
+ static const char* __locationError2Str(int error);
+ static void __log(location_accessibility_state_e state);
+
+ /* LOCATION MANAGER */
+ location_manager_h __locationManager;
+ void __locationManagerCreate();
+ void __locationManagerDestroy();
+ void __locationManagerStart();
+ void __locationManagerStop();
+ location_accessibility_state_e __locationManagerGetAccessibilityState();
+
+ /* LOCATION MANAGER : LOCATION SERVICE STATE */
+ location_service_state_e __locationServiceState;
+ static void __locationServiceStateChangedCb(location_service_state_e state, void *userData);
+ void __locationManagerSetServiceStateChangedCb();
+ void __locationManagerUnsetServiceStateChangedCb();
+
+ /* LOCATION MANAGER : LOCATION METHOD SETTINGS */
+ location_method_e __locationMethod;
+ bool __locationMethodState;
+ bool __locationManagerIsEnabledMethod(location_method_e method);
+ static void __locationSettingChangedCb(location_method_e method, bool enable, void *userData);
+ void __locationManagerSetSettingChangedCb();
+ void __locationManagerUnsetSettingChangedCb();
+
+ /* LOCATION MANAGER : LOCATION */
+ double __locationManagerGetHorizontalAccuracy();
+
+ /* LOCATION MANAGER : LOCATION : SYNCHRONOUS */
+ bool __locationManagerGetLocation();
+ void __locationManagerGetLastLocation();
+
+ /* LOCATION MANAGER : LOCATION : ASYNCHRONOUS */
+ static void __positionUpdatedCb(double latitude, double longitude,
+ double altitude, time_t timestamp, void *userData);
+ static void __locationUpdatedCb(location_error_e error, double latitude,
+ double longitude, double altitude, time_t timestamp, double speed,
+ double direction, double climb, void *userData);
+ bool __locationManagerRequestSingleLocation();
+
+ }; /* class LocationLogger */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mahal.h"
+#include <math.h>
+#include <Types.h>
+
+ctx::num_t ctx::MahalModel::distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
+{
+ size_t n = v1.size();
+ if (m.size() != n * n) {
+ _E("m.size() != n * n");
+ return 0.0; // this value does not make any sense
+ }
+
+ std::vector<num_t> diff(n);
+ for (size_t i = 0; i < n; i++) {
+ diff[i] = v2[i] - v1[i];
+ }
+
+ num_t dist2 = 0; // squared distance
+ for (size_t j = 0; j < n; j++) {
+ for (size_t i = 0; i < n; i++) {
+ dist2 += m[i * n + j] * diff[i] * diff[j];
+ }
+ }
+ return sqrt(dist2);
+}
+
+ctx::num_t ctx::MahalModel::distance(const std::vector<ctx::num_t> &v)
+{
+ return distance(v, __mean, __sigma);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
+#define _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
+
+#include <vector>
+#include "user_places_types.h"
+
+namespace ctx {
+
+ /*
+ * Class for Mahalanobis distance computation.
+ */
+ class MahalModel {
+
+ private:
+ std::vector<num_t> __mean;
+ std::vector<num_t> __sigma; // represents square matrix row-wise
+
+ public:
+ static num_t distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
+ MahalModel(std::vector<num_t> mean, std::vector<num_t> sigma) :
+ __mean(mean),
+ __sigma(sigma) { }
+ num_t distance(const std::vector<num_t> &v);
+
+ }; /* class MahalModel */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_MAHAL_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <algorithm>
+#include <Types.h>
+#include "median.h"
+
+ctx::num_t ctx::median(std::vector<ctx::num_t> &v)
+{
+ if (v.empty()) {
+ _E("Median of empty set");
+ return 0; // this value does not make any sense
+ }
+ size_t n = v.size() / 2;
+ std::nth_element(v.begin(), v.begin() + n, v.end());
+ num_t vn = v[n];
+ if (v.size() % 2 == 1) {
+ return vn;
+ } else {
+ std::nth_element(v.begin(), v.begin() + n - 1, v.end());
+ return 0.5 * (vn + v[n - 1]);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_MEDIAN_
+#define _CONTEXT_PLACE_RECOGNITION_MEDIAN_
+
+#include "user_places_types.h"
+#include <vector>
+#include "../place_recognition_types.h"
+
+namespace ctx {
+
+ num_t median(std::vector<num_t> &values); // caution: the input vector will be sorted
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_MEDIAN_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "piecewise_lin.h"
+#include <Types.h>
+
+ctx::PiecewiseLin::PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs) :
+ __xs(xs),
+ __vs(vs),
+ __n(xs.size())
+{
+ if (xs.size() != vs.size()) {
+ _E("Input arguments have different sizes");
+ return;
+ }
+}
+
+ctx::num_t ctx::PiecewiseLin::value(num_t x)
+{
+ if (x <= __xs[0]) {
+ return __vs[0];
+ } else if (x >= __xs[__n-1]) {
+ return __vs[__n - 1];
+ } else {
+ num_t xp = __xs[0];
+ for (size_t i = 1; i < __n; i++) {
+ num_t xn = __xs[i];
+ if (x <= xn) {
+ num_t d = xn - xp;
+ num_t dxp = x - xp;
+ num_t dxn = xn - x;
+ return (dxn * __vs[i-1] + dxp * __vs[i]) / d;
+ }
+ xp = xn;
+ }
+ }
+ _E("Function should return result earlier");
+ return 0.0; // this value does not make any sense
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
+#define _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+ /*
+ * Piecewise linear function. Used for approximation.
+ */
+ class PiecewiseLin {
+
+ private:
+ std::vector<num_t> __xs; // nodes
+ std::vector<num_t> __vs; // values in nodes
+ size_t __n;
+
+ public:
+ PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs);
+ num_t value(num_t x);
+
+ }; /* PiecewiseLin */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "place_categer.h"
+#include "median.h"
+#include "../place_recognition_types.h"
+#include "user_places_params.h"
+#include "user_places_types.h"
+#include <algorithm>
+#include <Types.h>
+
+void ctx::PlaceCateger::reduceOutliers(ctx::Visits &visits)
+{
+ int size = visits.size();
+ visits.erase(std::remove_if(
+ visits.begin(),
+ visits.end(),
+ [](Visit v)->bool {
+ return v.categs[PLACE_CATEG_ID_HOME] < PLACES_CATEGER_MIN_VISITS_SCORE
+ && v.categs[PLACE_CATEG_ID_WORK] < PLACES_CATEGER_MIN_VISITS_SCORE
+ && v.categs[PLACE_CATEG_ID_OTHER] < PLACES_CATEGER_MIN_VISITS_SCORE;
+ }),
+ visits.end());
+ int newSize = visits.size();
+ if (size != newSize) {
+ _D("Visits number from %d to %d (visits min scores checking)", size, newSize);
+ }
+}
+
+/*
+ * Change category if home or work has to few visits
+ */
+bool ctx::PlaceCateger::__reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits)
+{
+ return (categId == PLACE_CATEG_ID_HOME && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_HOME)
+ || (categId == PLACE_CATEG_ID_WORK && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_WORK);
+}
+
+void ctx::PlaceCateger::categorize(ctx::Visits &visits, ctx::Place &place)
+{
+ reduceOutliers(visits);
+
+ place.categId = PLACE_CATEG_ID_NONE;
+ place.categConfidence = 0.0;
+
+ if (!visits.empty()) {
+ const std::vector<PlaceCategId> categIds = {
+ PLACE_CATEG_ID_HOME,
+ PLACE_CATEG_ID_WORK,
+ PLACE_CATEG_ID_OTHER
+ };
+ num_t sumScore = 0.0;
+ num_t maxScore = 0.0;
+ for (PlaceCategId categId : categIds) {
+ std::vector<num_t> categVector = categVectorFromVisits(visits, categId);
+ num_t score = median(categVector);
+ sumScore += score;
+ if (score > maxScore) {
+ maxScore = score;
+ place.categId = categId;
+ }
+ }
+ if (sumScore > 0) {
+ place.categConfidence = maxScore / sumScore;
+ }
+ if (__reduceCategory(place.categId, visits)) {
+ place.categId = PLACE_CATEG_ID_OTHER;
+ place.categConfidence = 0.0;
+ }
+ }
+
+ place.name = categId2Name(place.categId);
+}
+
+std::vector<ctx::num_t> ctx::PlaceCateger::categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
+{
+ std::vector<ctx::num_t> vec;
+ for (auto &visit : visits) {
+ auto search = visit.categs.find(categId);
+ if (search != visit.categs.end()) {
+ vec.push_back(search->second);
+ }
+ }
+ return vec;
+}
+
+std::string ctx::PlaceCateger::categId2Name(PlaceCategId categId) {
+ switch (categId) {
+ case PLACE_CATEG_ID_HOME:
+ return "home";
+ case PLACE_CATEG_ID_WORK:
+ return "work";
+ case PLACE_CATEG_ID_OTHER:
+ return "other";
+ case PLACE_CATEG_ID_NONE:
+ return "none";
+ default:
+ return "";
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
+#define _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
+
+#include "user_places_types.h"
+#include <utility>
+#include <vector>
+#include <string>
+#include "../place_recognition_types.h"
+
+namespace ctx {
+
+ class PlaceCateger {
+
+ private:
+ static bool __reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits);
+
+ public:
+ static void reduceOutliers(Visits &visits); // TODO: move to private
+ static std::vector<ctx::num_t> categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId); // TODO: move to private
+ static void categorize(ctx::Visits &visits, ctx::Place &place);
+ static std::string categId2Name(PlaceCategId categId); // TODO: move to private
+
+ }; /* class PlaceCateger */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include "similarity.h"
+#include "places_detector.h"
+#include "place_categer.h"
+#include "graph.h"
+#include "median.h"
+#ifdef TIZEN_ENGINEER_MODE
+#include "gmap.h"
+#endif /* TIZEN_ENGINEER_MODE */
+#include "../place_recognition_types.h"
+#include <fstream>
+#include <algorithm>
+#include "user_places_params.h"
+
+#define __DELETE_PLACES_QUERY "DELETE FROM " PLACE_TABLE
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __USER_PLACES_FILE "/opt/usr/media/Others/user_places.txt" // TODO: Only for debug purposes -> Remove in final solution
+#endif /* TIZEN_ENGINEER_MODE */
+
+#define __GET_VISITS_QUERY "SELECT "\
+ VISIT_COLUMN_END_TIME ", "\
+ VISIT_COLUMN_START_TIME ", "\
+ VISIT_COLUMN_WIFI_APS ", "\
+ VISIT_COLUMN_LOCATION_VALID ", "\
+ VISIT_COLUMN_LOCATION_LATITUDE ", "\
+ VISIT_COLUMN_LOCATION_LONGITUDE ", " \
+ VISIT_COLUMN_CATEG_HOME ", "\
+ VISIT_COLUMN_CATEG_WORK ", "\
+ VISIT_COLUMN_CATEG_OTHER \
+ " FROM " VISIT_TABLE
+
+#define __GET_PLACES_QUERY "SELECT "\
+ PLACE_COLUMN_CATEG_ID ", "\
+ PLACE_COLUMN_CATEG_CONFIDENCE ", "\
+ PLACE_COLUMN_NAME ", "\
+ PLACE_COLUMN_LOCATION_VALID ", "\
+ PLACE_COLUMN_LOCATION_LATITUDE ", "\
+ PLACE_COLUMN_LOCATION_LONGITUDE ", " \
+ PLACE_COLUMN_WIFI_APS ", "\
+ PLACE_COLUMN_CREATE_DATE \
+ " FROM " PLACE_TABLE
+
+#define __PLACE_TABLE_COLUMNS \
+ PLACE_COLUMN_CATEG_ID " INTEGER, "\
+ PLACE_COLUMN_CATEG_CONFIDENCE " REAL, "\
+ PLACE_COLUMN_NAME " TEXT, "\
+ PLACE_COLUMN_LOCATION_VALID " INTEGER, "\
+ PLACE_COLUMN_LOCATION_LATITUDE " REAL, "\
+ PLACE_COLUMN_LOCATION_LONGITUDE " REAL, "\
+ PLACE_COLUMN_WIFI_APS " STRING, "\
+ PLACE_COLUMN_CREATE_DATE " timestamp"
+
+bool ctx::PlacesDetector::onTimerExpired(int timerId)
+{
+ _D("");
+ __dbDeletePlaces();
+ __dbDeleteOldVisits();
+ std::vector<Json> records = __dbGetVisits();
+ Visits visits = __visitsFromJsons(records);
+ __processVisits(visits);
+ return true;
+}
+
+std::vector<ctx::Json> ctx::PlacesDetector::__dbGetVisits()
+{
+ std::vector<Json> records;
+ bool ret = __dbManager.executeSync(__GET_VISITS_QUERY, &records);
+ _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+ return records;
+}
+
+std::vector<ctx::Json> ctx::PlacesDetector::__dbGetPlaces()
+{
+ std::vector<Json> records;
+ bool ret = __dbManager.executeSync(__GET_PLACES_QUERY, &records);
+ _D("load places execute query result: %s", ret ? "SUCCESS" : "FAIL");
+ return records;
+}
+
+double ctx::PlacesDetector::__doubleValueFromJson(Json &row, const char* key)
+{
+ double value;
+ row.get(NULL, key, &value);
+ _D("__doubleValueFromJson, key:%s, value: %lf", key, value);
+ return value;
+}
+
+ctx::Categs ctx::PlacesDetector::__visitCategsFromJson(Json &row)
+{
+ Categs categs;
+ categs[PLACE_CATEG_ID_HOME] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_HOME);
+ categs[PLACE_CATEG_ID_WORK] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_WORK);
+ categs[PLACE_CATEG_ID_OTHER] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_OTHER);
+ return categs;
+}
+
+ctx::Visit ctx::PlacesDetector::__visitFromJson(Json &row)
+{
+ int startTime;
+ int endTime;
+ std::string str;
+ row.get(NULL, VISIT_COLUMN_START_TIME, &startTime);
+ row.get(NULL, VISIT_COLUMN_END_TIME, &endTime);
+ row.get(NULL, VISIT_COLUMN_WIFI_APS, &str);
+
+ std::stringstream ss;
+ ss << str;
+ std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
+ ss >> *macSet;
+
+ Interval interval(startTime, endTime);
+ Categs categs = __visitCategsFromJson(row);
+
+ Visit visit(interval, macSet, categs);
+
+ { // location
+ int locationValidInt;
+ row.get(NULL, VISIT_COLUMN_LOCATION_VALID, &locationValidInt);
+ visit.locationValid = (bool) locationValidInt;
+ row.get(NULL, VISIT_COLUMN_LOCATION_LATITUDE, &(visit.location.latitude));
+ row.get(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, &(visit.location.longitude));
+ }
+
+ return visit;
+}
+
+ctx::Visits ctx::PlacesDetector::__visitsFromJsons(std::vector<Json>& records)
+{
+ Visits visits;
+ _D("db_result: number of all visits: %d", records.size());
+
+ for (Json &row : records) {
+ Visit visit = __visitFromJson(row);
+ visits.push_back(visit);
+ }
+ _D("number of all visits in vector: %d", visits.size());
+ return visits;
+}
+
+std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromJson(Json &row)
+{
+ std::shared_ptr<Place> place = std::make_shared<Place>();
+ { // category
+ int categId;
+ row.get(NULL, PLACE_COLUMN_CATEG_ID, &categId);
+ // This is due to the fact the JSON module API interface doesn't handle enum
+ place->categId = static_cast<PlaceCategId>(categId);
+ }
+ row.get(NULL, PLACE_COLUMN_NAME, &(place->name));
+ row.get(NULL, PLACE_COLUMN_WIFI_APS, &(place->wifiAps));
+ { // location
+ int locationValidInt;
+ row.get(NULL, PLACE_COLUMN_LOCATION_VALID, &locationValidInt);
+ place->locationValid = (bool) locationValidInt;
+ row.get(NULL, PLACE_COLUMN_LOCATION_LATITUDE, &(place->location.latitude));
+ row.get(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, &(place->location.longitude));
+ }
+ { // createDate
+ int createDate;
+ row.get(NULL, PLACE_COLUMN_CREATE_DATE, &(createDate));
+ // This is due to the fact the JSON module API interface doesn't handle time_t
+ place->createDate = static_cast<time_t>(createDate);
+ }
+ _D("db_result: categId: %d; place: name: %s; wifiAps: %s; locationValid: %d; latitude: %lf, longitude: %lf, createDate: %d", place->categId, place->name.c_str(), place->wifiAps.c_str(), place->locationValid, place->location.latitude, place->location.longitude, place->createDate);
+ return place;
+}
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::__placesFromJsons(std::vector<Json>& records)
+{
+ std::vector<std::shared_ptr<Place>> places;
+ _D("db_result: number of all places: %d", records.size());
+
+ for (Json &row : records) {
+ std::shared_ptr<Place> place = __placeFromJson(row);
+ places.push_back(place);
+ }
+ _D("number of all places in vector: %d", places.size());
+ return places;
+}
+
+void ctx::PlacesDetector::reduceOutliers(ctx::Visits &visits)
+{
+ int size = visits.size();
+ visits.erase(std::remove_if(
+ visits.begin(),
+ visits.end(),
+ [](Visit v)->bool {
+ int minutes = (v.interval.end - v.interval.start) / 60;
+ return (minutes < PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES)
+ || (minutes > PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES);
+ }),
+ visits.end());
+ int newSize = visits.size();
+ if (size != newSize) {
+ _D("Visits number from %d to %d (to short and to long reduction)", size, newSize);
+ }
+}
+
+void ctx::PlacesDetector::__processVisits(ctx::Visits &visits)
+{
+ reduceOutliers(visits);
+
+ _D("__testMode = %d", __testMode);
+ auto components = __mergeVisits(visits);
+ std::vector<std::shared_ptr<Place>> newDetectedPlaces;
+#ifdef TIZEN_ENGINEER_MODE
+ std::vector<Visits> placesVisits; // TODO: remove from final solution.
+#endif /* TIZEN_ENGINEER_MODE */
+ for (std::shared_ptr<graph::Component> component : *components) {
+ // Small places outliers reduction
+ if (!__testMode && component->size() < PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE) {
+ continue;
+ }
+
+ std::shared_ptr<Visits> merged = std::make_shared<Visits>();
+ for (graph::Node i : *component) {
+ merged->push_back(visits[i]);
+ }
+ std::shared_ptr<Place> place = __placeFromMergedVisits(*merged);
+ if (place->categId == PLACE_CATEG_ID_NONE) {
+ continue;
+ }
+ newDetectedPlaces.push_back(place);
+ if (!__testMode) {
+ __dbInsertPlace(*place);
+ }
+
+#ifdef TIZEN_ENGINEER_MODE
+ { // TODO: Only for debug -> remove in final solution
+ Visits placeVisits;
+ for (graph::Node i : *component) {
+ placeVisits.push_back(visits[i]);
+ }
+ placesVisits.push_back(placeVisits);
+ }
+#endif /* TIZEN_ENGINEER_MODE */
+ }
+
+ __detectedPlacesUpdate(newDetectedPlaces);
+
+#ifdef TIZEN_ENGINEER_MODE
+ { // Print to file TODO: Only for debug -> remove in final solution
+ std::ofstream out(__USER_PLACES_FILE);
+ for (size_t i = 0; i < newDetectedPlaces.size(); i++) {
+ newDetectedPlaces[i]->print2Stream(out);
+ Visits placeVisits = placesVisits[i];
+ for (Visit visit : placeVisits) {
+ visit.printShort2Stream(out);
+ }
+ }
+ out.close();
+ Gmap::writeMap(newDetectedPlaces);
+ }
+#endif /* TIZEN_ENGINEER_MODE */
+}
+
+/*
+ * Replace old places by new ones.
+ */
+void ctx::PlacesDetector::__detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces)
+{
+ _D("");
+ // XXX: In case of thread safety issues use std::mutex to protect places list.
+ __detectedPlaces = newPlaces;
+}
+
+void ctx::PlacesDetector::__mergeLocation(const Visits &visits, Place &place)
+{
+ place.locationValid = false;
+ std::vector<double> latitudes;
+ std::vector<double> longitudes;
+ for (const Visit& visit : visits) {
+ if (visit.locationValid) {
+ latitudes.push_back(visit.location.latitude);
+ longitudes.push_back(visit.location.longitude);
+ place.locationValid = true;
+ }
+ }
+ if (place.locationValid) {
+ place.location.latitude = median(latitudes);
+ place.location.longitude = median(longitudes);
+ }
+}
+
+std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromMergedVisits(Visits &mergedVisits)
+{
+ std::shared_ptr<Place> place = std::make_shared<Place>();
+ place->createDate = std::time(nullptr);
+ std::vector<std::shared_ptr<MacSet>> macSets;
+ for (const Visit &visit : mergedVisits) {
+ macSets.push_back(visit.macSet);
+ }
+ std::shared_ptr<MacSet> allMacs = macSetsUnion(macSets);
+ std::stringstream ss;
+ ss << *allMacs;
+ place->wifiAps = ss.str();
+
+ __mergeLocation(mergedVisits, *place);
+
+ PlaceCateger::categorize(mergedVisits, *place);
+
+ return place;
+}
+
+void ctx::PlacesDetector::reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
+{
+ int size = cc->size();
+ cc->erase(std::remove_if(cc->begin(),
+ cc->end(),
+ [](std::shared_ptr<graph::Component> &c)->bool {
+ return c->size() < PLACES_DETECTOR_MIN_VISITS_PER_PLACE;
+ }),
+ cc->end());
+ int newSize = cc->size();
+ if (size != newSize) {
+ _D("Connected components from %d to %d (min visit per place)", size, newSize);
+ }
+}
+
+std::shared_ptr<ctx::graph::Components> ctx::PlacesDetector::__mergeVisits(const std::vector<Visit> &visits)
+{
+ auto graph = __graphFromVisits(visits);
+ auto cc = graph::connectedComponents(*graph);
+ reduceOutliers(cc);
+ return cc;
+}
+
+std::shared_ptr<ctx::graph::Graph> ctx::PlacesDetector::__graphFromVisits(const std::vector<Visit> &visits)
+{
+ std::shared_ptr<graph::Graph> graph = std::make_shared<graph::Graph>();
+ graph->resize(visits.size());
+ for (size_t i = 0; i < visits.size(); i++) {
+ (*graph)[i] = std::make_shared<graph::NeighbourNodes>();
+ for (size_t j = 0; j < i; j++) {
+ if (similarity::isJoint(*visits[i].macSet, *visits[j].macSet)) {
+ (*graph)[i]->insert(j);
+ (*graph)[j]->insert(i);
+ }
+ }
+ }
+ return graph;
+}
+
+void ctx::PlacesDetector::__dbDeletePlaces()
+{
+ std::vector<Json> records;
+ bool ret = __dbManager.executeSync(__DELETE_PLACES_QUERY, &records);
+ _D("delete places execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::PlacesDetector::__dbDeleteOldVisits()
+{
+ time_t currentTime;
+ time(¤tTime);
+ time_t thresholdTime = currentTime - PLACES_DETECTOR_RETENTION_SECONDS;
+ __dbDeleteOlderVisitsThan(thresholdTime);
+}
+
+void ctx::PlacesDetector::__dbDeleteOlderVisitsThan(time_t threshold)
+{
+ _D("deleting vistits older than: %d", threshold);
+ std::stringstream query;
+ query << "DELETE FROM " << VISIT_TABLE;
+ query << " WHERE " << VISIT_COLUMN_END_TIME << " < " << threshold;
+ // query << " AND 0"; // XXX: Always false condition. Uncomment it for not deleting any visit during development.
+ std::vector<Json> records;
+ bool ret = __dbManager.executeSync(query.str().c_str(), &records);
+ _D("delete old visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+ctx::PlacesDetector::PlacesDetector(bool testMode) :
+ __testMode(testMode)
+{
+ if (testMode) {
+ return;
+ }
+ __dbCreateTable();
+ std::vector<Json> records = __dbGetPlaces();
+ std::vector<std::shared_ptr<Place>> dbPlaces = __placesFromJsons(records);
+ __detectedPlacesUpdate(dbPlaces);
+}
+
+void ctx::PlacesDetector::__dbCreateTable()
+{
+ bool ret = __dbManager.createTable(0, PLACE_TABLE, __PLACE_TABLE_COLUMNS);
+ _D("db: place Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::PlacesDetector::__dbInsertPlace(const Place &place)
+{
+ Json data;
+ data.set(NULL, PLACE_COLUMN_CATEG_ID, place.categId);
+ data.set(NULL, PLACE_COLUMN_CATEG_CONFIDENCE, place.categConfidence);
+ data.set(NULL, PLACE_COLUMN_NAME, place.name);
+
+ data.set(NULL, PLACE_COLUMN_LOCATION_VALID, place.locationValid);
+ data.set(NULL, PLACE_COLUMN_LOCATION_LATITUDE, place.location.latitude);
+ data.set(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, place.location.longitude);
+
+ data.set(NULL, PLACE_COLUMN_WIFI_APS, place.wifiAps);
+ data.set(NULL, PLACE_COLUMN_CREATE_DATE, static_cast<int>(place.createDate));
+
+ int64_t rowId;
+ bool ret = __dbManager.insertSync(PLACE_TABLE, data, &rowId);
+ _D("insert place execute query result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::getPlaces()
+{
+ // XXX: In case of thread safety issues use std::mutex to protect places list.
+ return __detectedPlaces;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
+#define _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
+
+#include <vector>
+#include <cstdint>
+#include <ITimerListener.h>
+#include <DatabaseManager.h>
+#include "visit_detector.h"
+#include "user_places_types.h"
+
+namespace ctx {
+
+ class PlacesDetector : public ITimerListener {
+
+ private:
+ bool __testMode;
+ DatabaseManager __dbManager;
+
+ double __doubleValueFromJson(Json &row, const char* key);
+ Categs __visitCategsFromJson(Json &row);
+ Visit __visitFromJson(Json &row);
+ Visits __visitsFromJsons(std::vector<Json>& records);
+ std::shared_ptr<ctx::Place> __placeFromJson(Json &row);
+ std::vector<std::shared_ptr<Place>> __placesFromJsons(std::vector<Json>& records);
+
+ std::shared_ptr<graph::Graph> __graphFromVisits(const std::vector<Visit> &visits);
+
+ void __dbCreateTable();
+ void __dbDeletePlaces();
+ void __dbDeleteOldVisits();
+ void __dbDeleteOlderVisitsThan(time_t threshold);
+ std::vector<Json> __dbGetVisits();
+ std::vector<Json> __dbGetPlaces();
+ void __dbInsertPlace(const Place &place);
+
+ std::shared_ptr<Place> __placeFromMergedVisits(Visits &mergedVisits);
+ std::vector<std::shared_ptr<Place>> __detectedPlaces;
+ void __detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces);
+ void __processVisits(Visits &visits);
+ static void __mergeLocation(const Visits &mergedVisits, Place &place);
+ std::shared_ptr<graph::Components> __mergeVisits(const std::vector<Visit> &visits);
+
+ bool onTimerExpired(int timerId);
+
+ public:
+ PlacesDetector(bool testMode = false);
+ static void reduceOutliers(Visits &visits); // TODO: move to private
+ static void reduceOutliers(std::shared_ptr<graph::Components> &cc); // TODO: move to private
+ std::vector<std::shared_ptr<Place>> getPlaces();
+
+ }; /* class PlacesDetector */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
+#define _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
+
+namespace ctx {
+
+namespace prob_features {
+
+ /*
+ * Probabilities for whole week <monday ÷ sunday> with minutes resolution
+ * from beginning of the week (sunday -> monday midnight) <0, 10080).
+ * Key is PlaceCategId:
+ * PLACE_CATEG_ID_HOME
+ * PLACE_CATEG_ID_WORK
+ * PLACE_CATEG_ID_OTHER
+ */
+ std::map<PlaceCategId, std::vector<num_t>> weekModel {
+ { PLACE_CATEG_ID_HOME,
+ {
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9833333333333330,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9830508474576270,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9827586206896550,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9821428571428570,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9629629629629630,
+ 0.9629629629629630,
+ 0.9629629629629630,
+ 0.9629629629629630,
+ 0.9629629629629630,
+ 0.9629629629629630,
+ 0.9454545454545450,
+ 0.9454545454545450,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9245283018867930,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9215686274509800,
+ 0.9215686274509800,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8490566037735850,
+ 0.8490566037735850,
+ 0.8490566037735850,
+ 0.8490566037735850,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8113207547169810,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7692307692307690,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7169811320754720,
+ 0.7169811320754720,
+ 0.7169811320754720,
+ 0.7115384615384620,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.6875000000000000,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6666666666666670,
+ 0.6400000000000000,
+ 0.6274509803921570,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6078431372549020,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5769230769230770,
+ 0.5769230769230770,
+ 0.5600000000000000,
+ 0.5490196078431370,
+ 0.5208333333333330,
+ 0.5208333333333330,
+ 0.5208333333333330,
+ 0.5208333333333330,
+ 0.5208333333333330,
+ 0.5102040816326530,
+ 0.4893617021276600,
+ 0.4893617021276600,
+ 0.4893617021276600,
+ 0.4893617021276600,
+ 0.4444444444444440,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4255319148936170,
+ 0.4130434782608700,
+ 0.4130434782608700,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.2790697674418600,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2666666666666670,
+ 0.2666666666666670,
+ 0.2666666666666670,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2200000000000000,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1346153846153850,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1481481481481480,
+ 0.1636363636363640,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1578947368421050,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1754385964912280,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1818181818181820,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1785714285714290,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1818181818181820,
+ 0.1964285714285710,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1964285714285710,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.2105263157894740,
+ 0.2142857142857140,
+ 0.2321428571428570,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2500000000000000,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2592592592592590,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2592592592592590,
+ 0.2592592592592590,
+ 0.2592592592592590,
+ 0.2777777777777780,
+ 0.2777777777777780,
+ 0.2641509433962260,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2745098039215690,
+ 0.2830188679245280,
+ 0.2884615384615380,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2884615384615380,
+ 0.2941176470588230,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.3000000000000000,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3000000000000000,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3200000000000000,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3478260869565220,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.4130434782608700,
+ 0.4130434782608700,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4489795918367350,
+ 0.4888888888888890,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5116279069767440,
+ 0.5116279069767440,
+ 0.5116279069767440,
+ 0.5238095238095240,
+ 0.5238095238095240,
+ 0.5365853658536590,
+ 0.5365853658536590,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5227272727272730,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5227272727272730,
+ 0.5227272727272730,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5111111111111110,
+ 0.5111111111111110,
+ 0.5227272727272730,
+ 0.5227272727272730,
+ 0.4893617021276600,
+ 0.5000000000000000,
+ 0.5102040816326530,
+ 0.5102040816326530,
+ 0.5200000000000000,
+ 0.5306122448979590,
+ 0.5200000000000000,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5192307692307690,
+ 0.5094339622641510,
+ 0.5094339622641510,
+ 0.5094339622641510,
+ 0.5294117647058820,
+ 0.5384615384615380,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5636363636363640,
+ 0.5535714285714290,
+ 0.5535714285714290,
+ 0.5535714285714290,
+ 0.5636363636363640,
+ 0.5714285714285710,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5818181818181820,
+ 0.5925925925925930,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6956521739130430,
+ 0.7111111111111110,
+ 0.7111111111111110,
+ 0.7111111111111110,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.7872340425531920,
+ 0.7872340425531920,
+ 0.7872340425531920,
+ 0.7708333333333330,
+ 0.7400000000000000,
+ 0.7400000000000000,
+ 0.7551020408163260,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7115384615384620,
+ 0.7115384615384620,
+ 0.7115384615384620,
+ 0.7169811320754720,
+ 0.7169811320754720,
+ 0.7307692307692310,
+ 0.7307692307692310,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7800000000000000,
+ 0.7800000000000000,
+ 0.7692307692307690,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7800000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8200000000000000,
+ 0.8200000000000000,
+ 0.8039215686274510,
+ 0.8039215686274510,
+ 0.8039215686274510,
+ 0.8039215686274510,
+ 0.8235294117647060,
+ 0.8076923076923080,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7884615384615380,
+ 0.8076923076923080,
+ 0.8076923076923080,
+ 0.8076923076923080,
+ 0.8113207547169810,
+ 0.8113207547169810,
+ 0.8148148148148150,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8148148148148150,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8333333333333330,
+ 0.8518518518518520,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8793103448275860,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8771929824561400,
+ 0.8793103448275860,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8793103448275860,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.9000000000000000,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9016393442622950,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9062500000000000,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9508196721311470,
+ 0.9508196721311470,
+ 0.9508196721311470,
+ 0.9508196721311470,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9836065573770490,
+ 0.9836065573770490,
+ 0.9836065573770490,
+ 0.9836065573770490,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9838709677419350,
+ 0.9841269841269840,
+ 0.9841269841269840,
+ 0.9841269841269840,
+ 0.9841269841269840,
+ 0.9841269841269840,
+ 0.9841269841269840,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9848484848484850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9846153846153850,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 0.9843750000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 1.0000000000000000,
+ 0.9661016949152540,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9473684210526320,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9137931034482760,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9107142857142860,
+ 0.9272727272727270,
+ 0.9107142857142860,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.8947368421052630,
+ 0.9107142857142860,
+ 0.9107142857142860,
+ 0.9107142857142860,
+ 0.9107142857142860,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8727272727272730,
+ 0.8888888888888890,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8490566037735850,
+ 0.8490566037735850,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8000000000000000,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7818181818181820,
+ 0.7777777777777780,
+ 0.7454545454545450,
+ 0.7454545454545450,
+ 0.7407407407407410,
+ 0.7407407407407410,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7307692307692310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7058823529411760,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.6800000000000000,
+ 0.6800000000000000,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6600000000000000,
+ 0.6600000000000000,
+ 0.6600000000000000,
+ 0.6470588235294120,
+ 0.6346153846153850,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.5769230769230770,
+ 0.5576923076923080,
+ 0.5576923076923080,
+ 0.5576923076923080,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5471698113207550,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5200000000000000,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5200000000000000,
+ 0.5200000000000000,
+ 0.5200000000000000,
+ 0.5200000000000000,
+ 0.5200000000000000,
+ 0.5200000000000000,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5000000000000000,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4509803921568630,
+ 0.4600000000000000,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3541666666666670,
+ 0.3333333333333330,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3061224489795920,
+ 0.3000000000000000,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2391304347826090,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2045454545454550,
+ 0.1956521739130430,
+ 0.1914893617021280,
+ 0.1875000000000000,
+ 0.1632653061224490,
+ 0.1632653061224490,
+ 0.1600000000000000,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.1093750000000000,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0468750000000000,
+ 0.0476190476190476,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0476190476190476,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0333333333333333,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0357142857142857,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0937500000000000,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.1000000000000000,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1311475409836070,
+ 0.1333333333333330,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1290322580645160,
+ 0.1269841269841270,
+ 0.1406250000000000,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1562500000000000,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1718750000000000,
+ 0.1846153846153850,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1904761904761900,
+ 0.1774193548387100,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1864406779661020,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1929824561403510,
+ 0.2000000000000000,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2115384615384620,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2181818181818180,
+ 0.2181818181818180,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2280701754385960,
+ 0.2321428571428570,
+ 0.2363636363636360,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2407407407407410,
+ 0.2592592592592590,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2884615384615380,
+ 0.3000000000000000,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3400000000000000,
+ 0.3400000000000000,
+ 0.3400000000000000,
+ 0.3400000000000000,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3400000000000000,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3653846153846150,
+ 0.3888888888888890,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4385964912280700,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4464285714285710,
+ 0.4545454545454550,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4705882352941180,
+ 0.5000000000000000,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5192307692307690,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.4905660377358490,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4905660377358490,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.4909090909090910,
+ 0.4909090909090910,
+ 0.5192307692307690,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5576923076923080,
+ 0.5576923076923080,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.6170212765957450,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6666666666666670,
+ 0.6739130434782610,
+ 0.6808510638297870,
+ 0.6458333333333330,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6530612244897960,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6875000000000000,
+ 0.6938775510204080,
+ 0.7083333333333330,
+ 0.7234042553191490,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6981132075471700,
+ 0.7169811320754720,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7358490566037730,
+ 0.7407407407407410,
+ 0.7547169811320760,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7272727272727270,
+ 0.7454545454545450,
+ 0.7321428571428570,
+ 0.7321428571428570,
+ 0.7321428571428570,
+ 0.7321428571428570,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7288135593220340,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7213114754098360,
+ 0.7258064516129030,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7419354838709680,
+ 0.7419354838709680,
+ 0.7419354838709680,
+ 0.7666666666666670,
+ 0.7666666666666670,
+ 0.7666666666666670,
+ 0.7666666666666670,
+ 0.7666666666666670,
+ 0.7796610169491530,
+ 0.8214285714285710,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7796610169491530,
+ 0.7833333333333330,
+ 0.7868852459016390,
+ 0.8000000000000000,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7936507936507940,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.7968750000000000,
+ 0.7968750000000000,
+ 0.7968750000000000,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.7846153846153850,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8125000000000000,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8906250000000000,
+ 0.8906250000000000,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8730158730158730,
+ 0.8888888888888890,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9242424242424240,
+ 0.9253731343283580,
+ 0.9264705882352940,
+ 0.9264705882352940,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9285714285714290,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9420289855072460,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9565217391304350,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9705882352941180,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9701492537313430,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9696969696969700,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9692307692307690,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9692307692307690,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9365079365079360,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9333333333333330,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9166666666666670,
+ 0.9322033898305080,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8852459016393440,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8644067796610170,
+ 0.8666666666666670,
+ 0.8524590163934430,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8474576271186440,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8166666666666670,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8000000000000000,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7636363636363640,
+ 0.7592592592592590,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7500000000000000,
+ 0.7450980392156860,
+ 0.7346938775510200,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7058823529411760,
+ 0.7000000000000000,
+ 0.6862745098039220,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6538461538461540,
+ 0.6470588235294120,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6226415094339620,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5714285714285710,
+ 0.5714285714285710,
+ 0.5614035087719300,
+ 0.5517241379310340,
+ 0.5272727272727270,
+ 0.5272727272727270,
+ 0.5272727272727270,
+ 0.5272727272727270,
+ 0.5178571428571430,
+ 0.5178571428571430,
+ 0.4909090909090910,
+ 0.4821428571428570,
+ 0.4821428571428570,
+ 0.4736842105263160,
+ 0.4482758620689660,
+ 0.4482758620689660,
+ 0.4385964912280700,
+ 0.4385964912280700,
+ 0.4385964912280700,
+ 0.4385964912280700,
+ 0.4385964912280700,
+ 0.4385964912280700,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3703703703703700,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3518518518518520,
+ 0.3137254901960780,
+ 0.2941176470588230,
+ 0.2800000000000000,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2200000000000000,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1612903225806450,
+ 0.1406250000000000,
+ 0.1406250000000000,
+ 0.1384615384615380,
+ 0.1384615384615380,
+ 0.1406250000000000,
+ 0.1406250000000000,
+ 0.1384615384615380,
+ 0.1384615384615380,
+ 0.1363636363636360,
+ 0.1363636363636360,
+ 0.1363636363636360,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1323529411764710,
+ 0.1304347826086960,
+ 0.1304347826086960,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1285714285714290,
+ 0.1267605633802820,
+ 0.1142857142857140,
+ 0.1142857142857140,
+ 0.1159420289855070,
+ 0.1159420289855070,
+ 0.1159420289855070,
+ 0.1029411764705880,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0869565217391304,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0735294117647059,
+ 0.0724637681159420,
+ 0.0735294117647059,
+ 0.0746268656716418,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0645161290322581,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0645161290322581,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0606060606060606,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0571428571428571,
+ 0.0579710144927536,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0597014925373134,
+ 0.0606060606060606,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0579710144927536,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0746268656716418,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0704225352112676,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0684931506849315,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0563380281690141,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0422535211267606,
+ 0.0428571428571429,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0428571428571429,
+ 0.0434782608695652,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0724637681159420,
+ 0.0735294117647059,
+ 0.0724637681159420,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0985915492957746,
+ 0.0985915492957746,
+ 0.1000000000000000,
+ 0.1014492753623190,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1470588235294120,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1470588235294120,
+ 0.1470588235294120,
+ 0.1449275362318840,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1323529411764710,
+ 0.1343283582089550,
+ 0.1212121212121210,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1212121212121210,
+ 0.1194029850746270,
+ 0.1194029850746270,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1470588235294120,
+ 0.1492537313432840,
+ 0.1515151515151520,
+ 0.1515151515151520,
+ 0.1515151515151520,
+ 0.1515151515151520,
+ 0.1515151515151520,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1791044776119400,
+ 0.1791044776119400,
+ 0.1818181818181820,
+ 0.1875000000000000,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1774193548387100,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1666666666666670,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.2131147540983610,
+ 0.2166666666666670,
+ 0.2166666666666670,
+ 0.2131147540983610,
+ 0.2258064516129030,
+ 0.2258064516129030,
+ 0.2258064516129030,
+ 0.2258064516129030,
+ 0.2258064516129030,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2372881355932200,
+ 0.2456140350877190,
+ 0.2363636363636360,
+ 0.2631578947368420,
+ 0.2631578947368420,
+ 0.2586206896551720,
+ 0.2631578947368420,
+ 0.2631578947368420,
+ 0.2678571428571430,
+ 0.2727272727272730,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2909090909090910,
+ 0.2962962962962960,
+ 0.2830188679245280,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3877551020408160,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.4081632653061220,
+ 0.4038461538461540,
+ 0.4074074074074070,
+ 0.4035087719298250,
+ 0.3965517241379310,
+ 0.3965517241379310,
+ 0.4067796610169490,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4237288135593220,
+ 0.4237288135593220,
+ 0.4237288135593220,
+ 0.4310344827586210,
+ 0.4310344827586210,
+ 0.4237288135593220,
+ 0.4237288135593220,
+ 0.4237288135593220,
+ 0.4333333333333330,
+ 0.4426229508196720,
+ 0.4426229508196720,
+ 0.4516129032258060,
+ 0.4516129032258060,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4531250000000000,
+ 0.4461538461538460,
+ 0.4461538461538460,
+ 0.4285714285714290,
+ 0.4354838709677420,
+ 0.4262295081967210,
+ 0.4482758620689660,
+ 0.4482758620689660,
+ 0.4406779661016950,
+ 0.4406779661016950,
+ 0.4406779661016950,
+ 0.4576271186440680,
+ 0.4590163934426230,
+ 0.4677419354838710,
+ 0.4915254237288140,
+ 0.4915254237288140,
+ 0.4915254237288140,
+ 0.5000000000000000,
+ 0.5081967213114750,
+ 0.5081967213114750,
+ 0.5081967213114750,
+ 0.5081967213114750,
+ 0.5166666666666670,
+ 0.5166666666666670,
+ 0.5166666666666670,
+ 0.5166666666666670,
+ 0.5081967213114750,
+ 0.5081967213114750,
+ 0.5081967213114750,
+ 0.5000000000000000,
+ 0.5084745762711860,
+ 0.5084745762711860,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5081967213114750,
+ 0.5161290322580650,
+ 0.5076923076923080,
+ 0.5156250000000000,
+ 0.5238095238095240,
+ 0.5238095238095240,
+ 0.5238095238095240,
+ 0.5245901639344260,
+ 0.5333333333333330,
+ 0.5245901639344260,
+ 0.5500000000000000,
+ 0.5500000000000000,
+ 0.5573770491803280,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5645161290322580,
+ 0.5625000000000000,
+ 0.5538461538461540,
+ 0.5454545454545450,
+ 0.5454545454545450,
+ 0.5454545454545450,
+ 0.5454545454545450,
+ 0.5384615384615380,
+ 0.5384615384615380,
+ 0.5384615384615380,
+ 0.5454545454545450,
+ 0.5588235294117650,
+ 0.5588235294117650,
+ 0.5671641791044780,
+ 0.5588235294117650,
+ 0.5588235294117650,
+ 0.5588235294117650,
+ 0.5757575757575760,
+ 0.5757575757575760,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6290322580645160,
+ 0.6290322580645160,
+ 0.6290322580645160,
+ 0.6393442622950820,
+ 0.6393442622950820,
+ 0.6393442622950820,
+ 0.6271186440677970,
+ 0.6271186440677970,
+ 0.6271186440677970,
+ 0.6206896551724140,
+ 0.6206896551724140,
+ 0.6206896551724140,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6315789473684210,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6226415094339620,
+ 0.6181818181818180,
+ 0.6296296296296300,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6315789473684210,
+ 0.6428571428571430,
+ 0.6545454545454550,
+ 0.6607142857142860,
+ 0.6607142857142860,
+ 0.6607142857142860,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6779661016949150,
+ 0.6779661016949150,
+ 0.6833333333333330,
+ 0.6833333333333330,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7166666666666670,
+ 0.7049180327868850,
+ 0.7049180327868850,
+ 0.7049180327868850,
+ 0.7049180327868850,
+ 0.6935483870967740,
+ 0.6935483870967740,
+ 0.6935483870967740,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6969696969696970,
+ 0.6969696969696970,
+ 0.7076923076923080,
+ 0.7076923076923080,
+ 0.6969696969696970,
+ 0.6969696969696970,
+ 0.6865671641791040,
+ 0.6865671641791040,
+ 0.6865671641791040,
+ 0.6911764705882350,
+ 0.6911764705882350,
+ 0.6911764705882350,
+ 0.6911764705882350,
+ 0.7014925373134330,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7164179104477610,
+ 0.7164179104477610,
+ 0.7164179104477610,
+ 0.7164179104477610,
+ 0.7164179104477610,
+ 0.7164179104477610,
+ 0.7246376811594200,
+ 0.7246376811594200,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7352941176470590,
+ 0.7462686567164180,
+ 0.7462686567164180,
+ 0.7575757575757580,
+ 0.7611940298507460,
+ 0.7611940298507460,
+ 0.7647058823529410,
+ 0.7681159420289850,
+ 0.7681159420289850,
+ 0.7681159420289850,
+ 0.7681159420289850,
+ 0.7681159420289850,
+ 0.7681159420289850,
+ 0.7826086956521740,
+ 0.7941176470588230,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8059701492537310,
+ 0.8181818181818180,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8484848484848480,
+ 0.8484848484848480,
+ 0.8484848484848480,
+ 0.8484848484848480,
+ 0.8507462686567160,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8656716417910450,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8636363636363640,
+ 0.8636363636363640,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8906250000000000,
+ 0.8906250000000000,
+ 0.8906250000000000,
+ 0.8923076923076920,
+ 0.8923076923076920,
+ 0.8923076923076920,
+ 0.8923076923076920,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9014084507042250,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9305555555555560,
+ 0.9305555555555560,
+ 0.9305555555555560,
+ 0.9305555555555560,
+ 0.9305555555555560,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9315068493150680,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9324324324324320,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9459459459459460,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9452054794520550,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9577464788732390,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9571428571428570,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9558823529411760,
+ 0.9545454545454550,
+ 0.9545454545454550,
+ 0.9545454545454550,
+ 0.9545454545454550,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9672131147540980,
+ 0.9672131147540980,
+ 0.9672131147540980,
+ 0.9672131147540980,
+ 0.9672131147540980,
+ 0.9672131147540980,
+ 0.9666666666666670,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9322033898305080,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.9137931034482760,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8965517241379310,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8793103448275860,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7704918032786880,
+ 0.7704918032786880,
+ 0.7704918032786880,
+ 0.7704918032786880,
+ 0.7704918032786880,
+ 0.7580645161290320,
+ 0.7540983606557380,
+ 0.7419354838709680,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7288135593220340,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7068965517241380,
+ 0.7068965517241380,
+ 0.7017543859649120,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6842105263157900,
+ 0.6842105263157900,
+ 0.6842105263157900,
+ 0.6842105263157900,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6666666666666670,
+ 0.6551724137931030,
+ 0.6379310344827590,
+ 0.6271186440677970,
+ 0.6206896551724140,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5789473684210530,
+ 0.5689655172413790,
+ 0.5689655172413790,
+ 0.5689655172413790,
+ 0.5689655172413790,
+ 0.5689655172413790,
+ 0.5593220338983050,
+ 0.5593220338983050,
+ 0.5593220338983050,
+ 0.5593220338983050,
+ 0.5500000000000000,
+ 0.5423728813559320,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5333333333333330,
+ 0.5423728813559320,
+ 0.5423728813559320,
+ 0.5333333333333330,
+ 0.5166666666666670,
+ 0.5333333333333330,
+ 0.5254237288135590,
+ 0.5254237288135590,
+ 0.5254237288135590,
+ 0.5333333333333330,
+ 0.5245901639344260,
+ 0.5081967213114750,
+ 0.4736842105263160,
+ 0.4655172413793100,
+ 0.4576271186440680,
+ 0.4482758620689660,
+ 0.4406779661016950,
+ 0.4406779661016950,
+ 0.4310344827586210,
+ 0.4310344827586210,
+ 0.4310344827586210,
+ 0.4310344827586210,
+ 0.4137931034482760,
+ 0.4137931034482760,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3396226415094340,
+ 0.3333333333333330,
+ 0.3272727272727270,
+ 0.3272727272727270,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2830188679245280,
+ 0.2549019607843140,
+ 0.2600000000000000,
+ 0.2448979591836730,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2264150943396230,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1639344262295080,
+ 0.1451612903225810,
+ 0.1451612903225810,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1029411764705880,
+ 0.1044776119402990,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0597014925373134,
+ 0.0606060606060606,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0746268656716418,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0746268656716418,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0869565217391304,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1029411764705880,
+ 0.0909090909090909,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0937500000000000,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.0895522388059701,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0923076923076923,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0923076923076923,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1016949152542370,
+ 0.0967741935483871,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.1111111111111110,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1076923076923080,
+ 0.1093750000000000,
+ 0.1111111111111110,
+ 0.1093750000000000,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0806451612903226,
+ 0.0819672131147541,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1186440677966100,
+ 0.1147540983606560,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1269841269841270,
+ 0.1269841269841270,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1269841269841270,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1311475409836070,
+ 0.1311475409836070,
+ 0.1290322580645160,
+ 0.1311475409836070,
+ 0.1451612903225810,
+ 0.1333333333333330,
+ 0.1311475409836070,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1500000000000000,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1774193548387100,
+ 0.1904761904761900,
+ 0.1935483870967740,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1833333333333330,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1896551724137930,
+ 0.2033898305084750,
+ 0.2000000000000000,
+ 0.1967213114754100,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1724137931034480,
+ 0.1864406779661020,
+ 0.1896551724137930,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1694915254237290,
+ 0.1833333333333330,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.2105263157894740,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2280701754385960,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2280701754385960,
+ 0.2000000000000000,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1964285714285710,
+ 0.2241379310344830,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2321428571428570,
+ 0.2407407407407410,
+ 0.2407407407407410,
+ 0.2407407407407410,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2352941176470590,
+ 0.2352941176470590,
+ 0.2400000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2982456140350880,
+ 0.2982456140350880,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3148148148148150,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3584905660377360,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4038461538461540,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4285714285714290,
+ 0.4285714285714290,
+ 0.4200000000000000,
+ 0.4117647058823530,
+ 0.4230769230769230,
+ 0.4117647058823530,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4313725490196080,
+ 0.4230769230769230,
+ 0.4400000000000000,
+ 0.4400000000000000,
+ 0.4400000000000000,
+ 0.4509803921568630,
+ 0.4615384615384620,
+ 0.4615384615384620,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4901960784313730,
+ 0.4901960784313730,
+ 0.5098039215686270,
+ 0.5098039215686270,
+ 0.5000000000000000,
+ 0.5192307692307690,
+ 0.5294117647058820,
+ 0.5490196078431370,
+ 0.5490196078431370,
+ 0.5600000000000000,
+ 0.5576923076923080,
+ 0.5686274509803920,
+ 0.5800000000000000,
+ 0.5800000000000000,
+ 0.5882352941176470,
+ 0.6000000000000000,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6226415094339620,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6481481481481480,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6666666666666670,
+ 0.6800000000000000,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6792452830188680,
+ 0.6923076923076920,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.7115384615384620,
+ 0.7115384615384620,
+ 0.7254901960784310,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7090909090909090,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.6779661016949150,
+ 0.6885245901639340,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.6984126984126980,
+ 0.6885245901639340,
+ 0.6885245901639340,
+ 0.6885245901639340,
+ 0.7000000000000000,
+ 0.6774193548387100,
+ 0.6774193548387100,
+ 0.6774193548387100,
+ 0.6774193548387100,
+ 0.6721311475409840,
+ 0.6557377049180330,
+ 0.6557377049180330,
+ 0.6666666666666670,
+ 0.6779661016949150,
+ 0.6779661016949150,
+ 0.6779661016949150,
+ 0.6779661016949150,
+ 0.6779661016949150,
+ 0.7272727272727270,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.7068965517241380,
+ 0.7068965517241380,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7321428571428570,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7543859649122810,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7894736842105260,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7741935483870970,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8032786885245900,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8064516129032260,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8166666666666670,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8166666666666670,
+ 0.8196721311475410,
+ 0.8196721311475410,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8666666666666670,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8833333333333330,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8906250000000000,
+ 0.8906250000000000,
+ 0.8923076923076920,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8939393939393940,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.8955223880597010,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9016393442622950,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.8852459016393440,
+ 0.8833333333333330,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8596491228070170,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.7962962962962960,
+ 0.7924528301886790,
+ 0.7884615384615380,
+ 0.7843137254901960,
+ 0.7843137254901960,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7407407407407410,
+ 0.7407407407407410,
+ 0.7272727272727270,
+ 0.7222222222222220,
+ 0.6842105263157900,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6724137931034480,
+ 0.6607142857142860,
+ 0.6545454545454550,
+ 0.6481481481481480,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6603773584905660,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6111111111111110,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5849056603773580,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5660377358490570,
+ 0.5660377358490570,
+ 0.5555555555555560,
+ 0.5471698113207550,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5370370370370370,
+ 0.5272727272727270,
+ 0.5272727272727270,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.4905660377358490,
+ 0.4905660377358490,
+ 0.4905660377358490,
+ 0.4905660377358490,
+ 0.4814814814814810,
+ 0.4905660377358490,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4807692307692310,
+ 0.4705882352941180,
+ 0.4615384615384620,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4489795918367350,
+ 0.4489795918367350,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4255319148936170,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4222222222222220,
+ 0.4222222222222220,
+ 0.4130434782608700,
+ 0.4130434782608700,
+ 0.4130434782608700,
+ 0.4000000000000000,
+ 0.3720930232558140,
+ 0.3720930232558140,
+ 0.3636363636363640,
+ 0.3555555555555560,
+ 0.3478260869565220,
+ 0.3404255319148940,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.2954545454545450,
+ 0.2888888888888890,
+ 0.2888888888888890,
+ 0.2888888888888890,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2444444444444440,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2200000000000000,
+ 0.2040816326530610,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1818181818181820,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1578947368421050,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1052631578947370,
+ 0.1071428571428570,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0740740740740741,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0740740740740741,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0784313725490196,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0816326530612245,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1041666666666670,
+ 0.1224489795918370,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1538461538461540,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1346153846153850,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1636363636363640,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1896551724137930,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2352941176470590,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2352941176470590,
+ 0.2352941176470590,
+ 0.2352941176470590,
+ 0.2500000000000000,
+ 0.2549019607843140,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2800000000000000,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2916666666666670,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2916666666666670,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3200000000000000,
+ 0.3200000000000000,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3061224489795920,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3617021276595740,
+ 0.3750000000000000,
+ 0.3829787234042550,
+ 0.3913043478260870,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.4042553191489360,
+ 0.4130434782608700,
+ 0.4318181818181820,
+ 0.4444444444444440,
+ 0.4545454545454550,
+ 0.4545454545454550,
+ 0.4761904761904760,
+ 0.4651162790697670,
+ 0.4545454545454550,
+ 0.4545454545454550,
+ 0.4651162790697670,
+ 0.4545454545454550,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4545454545454550,
+ 0.4418604651162790,
+ 0.4523809523809520,
+ 0.4523809523809520,
+ 0.4878048780487810,
+ 0.4878048780487810,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5116279069767440,
+ 0.5116279069767440,
+ 0.5227272727272730,
+ 0.5227272727272730,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5476190476190480,
+ 0.5348837209302320,
+ 0.5348837209302320,
+ 0.5476190476190480,
+ 0.5476190476190480,
+ 0.5454545454545450,
+ 0.5714285714285710,
+ 0.5909090909090910,
+ 0.5777777777777780,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6170212765957450,
+ 0.6304347826086960,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5882352941176470,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6078431372549020,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.6037735849056600,
+ 0.6153846153846150,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6326530612244900,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6600000000000000,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6734693877551020,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6600000000000000,
+ 0.6470588235294120,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6603773584905660,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7254901960784310,
+ 0.7307692307692310,
+ 0.7307692307692310,
+ 0.7307692307692310,
+ 0.7307692307692310,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7272727272727270,
+ 0.7142857142857140,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7090909090909090,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7307692307692310,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7358490566037730,
+ 0.7407407407407410,
+ 0.7407407407407410,
+ 0.7407407407407410,
+ 0.7407407407407410,
+ 0.7547169811320760,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7647058823529410,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7777777777777780,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8909090909090910,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8775510204081630,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8800000000000000,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8800000000000000,
+ 0.8627450980392160,
+ 0.8571428571428570,
+ 0.8541666666666670,
+ 0.8541666666666670,
+ 0.8510638297872340,
+ 0.8478260869565220,
+ 0.8478260869565220,
+ 0.8478260869565220,
+ 0.8297872340425530,
+ 0.8125000000000000,
+ 0.7959183673469390,
+ 0.7916666666666670,
+ 0.7916666666666670,
+ 0.7916666666666670,
+ 0.7916666666666670,
+ 0.7916666666666670,
+ 0.7872340425531920,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7659574468085110,
+ 0.7659574468085110,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7555555555555560,
+ 0.7727272727272730,
+ 0.7906976744186050,
+ 0.7954545454545450,
+ 0.7954545454545450,
+ 0.7954545454545450,
+ 0.7954545454545450,
+ 0.7954545454545450,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7446808510638300,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7608695652173910,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7555555555555560,
+ 0.7608695652173910,
+ 0.7659574468085110,
+ 0.7659574468085110,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7346938775510200,
+ 0.7291666666666670,
+ 0.7234042553191490,
+ 0.7291666666666670,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.6938775510204080,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.7111111111111110,
+ 0.7173913043478260,
+ 0.7111111111111110,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7209302325581400,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6808510638297870,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6808510638297870,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6734693877551020,
+ 0.6666666666666670,
+ 0.6530612244897960,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6530612244897960,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6734693877551020,
+ 0.6938775510204080,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7083333333333330,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.7021276595744680,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.7083333333333330,
+ 0.6938775510204080,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.6862745098039220,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6792452830188680,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6545454545454550,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6603773584905660,
+ 0.6538461538461540,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6603773584905660,
+ 0.6730769230769230,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6800000000000000,
+ 0.6938775510204080,
+ 0.6800000000000000,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6600000000000000,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6600000000000000,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6530612244897960,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6326530612244900,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5869565217391300,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5833333333333330,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5531914893617020,
+ 0.5531914893617020,
+ 0.5531914893617020,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5434782608695650,
+ 0.5434782608695650,
+ 0.5434782608695650,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5869565217391300,
+ 0.5869565217391300,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5744680851063830,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5714285714285710,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5800000000000000,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.6000000000000000,
+ 0.5882352941176470,
+ 0.5961538461538460,
+ 0.5849056603773580,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5961538461538460,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.6122448979591840,
+ 0.6078431372549020,
+ 0.6078431372549020,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6153846153846150,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.5961538461538460,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5925925925925930,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.6000000000000000,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6071428571428570,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6296296296296300,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6111111111111110,
+ 0.6037735849056600,
+ 0.5925925925925930,
+ 0.5925925925925930,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.5925925925925930,
+ 0.6000000000000000,
+ 0.6037735849056600,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6226415094339620,
+ 0.6226415094339620,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6226415094339620,
+ 0.6226415094339620,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6481481481481480,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6481481481481480,
+ 0.6545454545454550,
+ 0.6545454545454550,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6491228070175440,
+ 0.6491228070175440,
+ 0.6491228070175440,
+ 0.6491228070175440,
+ 0.6607142857142860,
+ 0.6666666666666670,
+ 0.6603773584905660,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6470588235294120,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6666666666666670,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6200000000000000,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6326530612244900,
+ 0.6530612244897960,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6530612244897960,
+ 0.6600000000000000,
+ 0.6600000000000000,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6530612244897960,
+ 0.6400000000000000,
+ 0.6274509803921570,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.5849056603773580,
+ 0.6000000000000000,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6037735849056600,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6226415094339620,
+ 0.6226415094339620,
+ 0.6037735849056600,
+ 0.6037735849056600,
+ 0.6111111111111110,
+ 0.6181818181818180,
+ 0.6071428571428570,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5862068965517240,
+ 0.5862068965517240,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5789473684210530,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5789473684210530,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.5892857142857140,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6862745098039220,
+ 0.7000000000000000,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.6862745098039220,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7200000000000000,
+ 0.7346938775510200,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.7058823529411760,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6909090909090910,
+ 0.6909090909090910,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7090909090909090,
+ 0.7222222222222220,
+ 0.7358490566037730,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7272727272727270,
+ 0.7142857142857140,
+ 0.7192982456140350,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7241379310344830,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7413793103448280,
+ 0.7543859649122810,
+ 0.7543859649122810,
+ 0.7543859649122810,
+ 0.7543859649122810,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8070175438596490,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8035714285714290,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8103448275862070,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8363636363636360,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8431372549019610,
+ 0.8431372549019610,
+ 0.8431372549019610,
+ 0.8431372549019610,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8936170212765960,
+ 0.8936170212765960,
+ 0.8936170212765960,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8222222222222220,
+ 0.8043478260869560,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7755102040816330,
+ 0.7755102040816330,
+ 0.7755102040816330,
+ 0.7755102040816330,
+ 0.7755102040816330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7234042553191490,
+ 0.7083333333333330,
+ 0.7021276595744680,
+ 0.6875000000000000,
+ 0.6734693877551020,
+ 0.6734693877551020,
+ 0.6666666666666670,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6666666666666670,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6666666666666670,
+ 0.6739130434782610,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7209302325581400,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7173913043478260,
+ 0.7173913043478260,
+ 0.7111111111111110,
+ 0.7111111111111110,
+ 0.7272727272727270,
+ 0.7441860465116280,
+ 0.7441860465116280,
+ 0.7441860465116280,
+ 0.7500000000000000,
+ 0.7333333333333330,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7446808510638300,
+ 0.7446808510638300,
+ 0.7291666666666670,
+ 0.7500000000000000,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7600000000000000,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7551020408163260,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7200000000000000,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7200000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7551020408163260,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7446808510638300,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7391304347826090,
+ 0.7446808510638300,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7291666666666670,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7142857142857140,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7142857142857140,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7173913043478260,
+ 0.7173913043478260,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7111111111111110,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6808510638297870,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6888888888888890,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6976744186046510,
+ 0.6976744186046510,
+ 0.7209302325581400,
+ 0.7142857142857140,
+ 0.6976744186046510,
+ 0.6976744186046510,
+ 0.6976744186046510,
+ 0.6818181818181820,
+ 0.6666666666666670,
+ 0.6382978723404260,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.6000000000000000,
+ 0.6122448979591840,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6200000000000000,
+ 0.6200000000000000,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6458333333333330,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6595744680851060,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6956521739130430,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7272727272727270,
+ 0.7111111111111110,
+ 0.7111111111111110,
+ 0.7173913043478260,
+ 0.7111111111111110,
+ 0.7111111111111110,
+ 0.6956521739130430,
+ 0.6808510638297870,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6444444444444440,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6521739130434780,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6521739130434780,
+ 0.6521739130434780,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6458333333333330,
+ 0.6458333333333330,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6458333333333330,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6400000000000000,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6200000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6304347826086960,
+ 0.6382978723404260,
+ 0.6304347826086960,
+ 0.6444444444444440,
+ 0.6590909090909090,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6222222222222220,
+ 0.6136363636363640,
+ 0.6046511627906980,
+ 0.6046511627906980,
+ 0.6046511627906980,
+ 0.6046511627906980,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6136363636363640,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6363636363636360,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6222222222222220,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6585365853658540,
+ 0.6829268292682930,
+ 0.6904761904761900,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6904761904761900,
+ 0.6904761904761900,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6904761904761900,
+ 0.6904761904761900,
+ 0.6904761904761900,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6904761904761900,
+ 0.6904761904761900,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6590909090909090,
+ 0.6590909090909090,
+ 0.6511627906976740,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6170212765957450,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.6086956521739130,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6136363636363640,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6511627906976740,
+ 0.6511627906976740,
+ 0.6511627906976740,
+ 0.6590909090909090,
+ 0.6744186046511630,
+ 0.6744186046511630,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6739130434782610,
+ 0.6595744680851060,
+ 0.6595744680851060,
+ 0.6739130434782610,
+ 0.6976744186046510,
+ 0.6818181818181820,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6956521739130430,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6739130434782610,
+ 0.6739130434782610,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6739130434782610,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.6739130434782610,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6808510638297870,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.6875000000000000,
+ 0.7021276595744680,
+ 0.7173913043478260,
+ 0.7173913043478260,
+ 0.7234042553191490,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7083333333333330,
+ 0.7234042553191490,
+ 0.7234042553191490,
+ 0.7234042553191490,
+ 0.7234042553191490,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7291666666666670,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7659574468085110,
+ 0.7659574468085110,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.8043478260869560,
+ 0.8043478260869560,
+ 0.8043478260869560,
+ 0.8043478260869560,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.8043478260869560,
+ 0.8043478260869560,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7708333333333330,
+ 0.7755102040816330,
+ 0.7916666666666670,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8125000000000000,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8260869565217390,
+ 0.8297872340425530,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8163265306122450,
+ 0.8125000000000000,
+ 0.8085106382978720,
+ 0.8085106382978720,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8222222222222220,
+ 0.8297872340425530,
+ 0.8297872340425530,
+ 0.8297872340425530,
+ 0.8297872340425530,
+ 0.8297872340425530,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8163265306122450,
+ 0.8163265306122450,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8541666666666670,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8541666666666670,
+ 0.8541666666666670,
+ 0.8541666666666670,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8723404255319150,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8775510204081630,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8958333333333330,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.8979591836734690,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.8979591836734690,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9200000000000000,
+ 0.9183673469387750,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9019607843137260,
+ 0.9019607843137260,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9038461538461540,
+ 0.9056603773584910,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9074074074074070,
+ 0.9090909090909090,
+ 0.9259259259259260,
+ 0.9272727272727270,
+ 0.9272727272727270,
+ 0.9272727272727270,
+ 0.9285714285714290,
+ 0.9454545454545450,
+ 0.9454545454545450,
+ 0.9464285714285710,
+ 0.9464285714285710,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9636363636363640,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9642857142857140,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9649122807017540,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9824561403508770,
+ 0.9824561403508770,
+ 0.9824561403508770
+ }
+ },
+ { PLACE_CATEG_ID_WORK,
+ {
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0377358490566038,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1698113207547170,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2115384615384620,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2641509433962260,
+ 0.2641509433962260,
+ 0.2641509433962260,
+ 0.2692307692307690,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2916666666666670,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2916666666666670,
+ 0.3200000000000000,
+ 0.3333333333333330,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3529411764705880,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.4000000000000000,
+ 0.4117647058823530,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4489795918367350,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.5111111111111110,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5319148936170210,
+ 0.5434782608695650,
+ 0.5434782608695650,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5652173913043480,
+ 0.5777777777777780,
+ 0.5777777777777780,
+ 0.5777777777777780,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6086956521739130,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6444444444444440,
+ 0.6444444444444440,
+ 0.6744186046511630,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6818181818181820,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.6888888888888890,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7045454545454550,
+ 0.7346938775510200,
+ 0.7346938775510200,
+ 0.7400000000000000,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8947368421052630,
+ 0.8947368421052630,
+ 0.8947368421052630,
+ 0.8947368421052630,
+ 0.8947368421052630,
+ 0.8947368421052630,
+ 0.8965517241379310,
+ 0.8965517241379310,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8833333333333330,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8852459016393440,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.8870967741935480,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8983050847457630,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8360655737704920,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8644067796610170,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8524590163934430,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8688524590163930,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8833333333333330,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8793103448275860,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8214285714285710,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8000000000000000,
+ 0.7962962962962960,
+ 0.7818181818181820,
+ 0.7777777777777780,
+ 0.7735849056603770,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7735849056603770,
+ 0.7735849056603770,
+ 0.7692307692307690,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7592592592592590,
+ 0.7454545454545450,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7192982456140350,
+ 0.7068965517241380,
+ 0.7068965517241380,
+ 0.7017543859649120,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7272727272727270,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.6964285714285710,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7090909090909090,
+ 0.6964285714285710,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.6964285714285710,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7017543859649120,
+ 0.6785714285714290,
+ 0.6607142857142860,
+ 0.6491228070175440,
+ 0.6491228070175440,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6363636363636360,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6111111111111110,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6226415094339620,
+ 0.6153846153846150,
+ 0.6153846153846150,
+ 0.6274509803921570,
+ 0.6037735849056600,
+ 0.5961538461538460,
+ 0.6078431372549020,
+ 0.6078431372549020,
+ 0.6078431372549020,
+ 0.5961538461538460,
+ 0.5882352941176470,
+ 0.5769230769230770,
+ 0.5769230769230770,
+ 0.5600000000000000,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5400000000000000,
+ 0.5102040816326530,
+ 0.5102040816326530,
+ 0.5102040816326530,
+ 0.5102040816326530,
+ 0.5102040816326530,
+ 0.5000000000000000,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4680851063829790,
+ 0.4565217391304350,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3469387755102040,
+ 0.3111111111111110,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3170731707317070,
+ 0.3170731707317070,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2727272727272730,
+ 0.2558139534883720,
+ 0.2558139534883720,
+ 0.2558139534883720,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2444444444444440,
+ 0.2444444444444440,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1702127659574470,
+ 0.1666666666666670,
+ 0.1632653061224490,
+ 0.1632653061224490,
+ 0.1600000000000000,
+ 0.1428571428571430,
+ 0.1400000000000000,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1538461538461540,
+ 0.1698113207547170,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1372549019607840,
+ 0.1346153846153850,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1272727272727270,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1090909090909090,
+ 0.1071428571428570,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.1090909090909090,
+ 0.0925925925925926,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.0869565217391304,
+ 0.0888888888888889,
+ 0.0888888888888889,
+ 0.0888888888888889,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0888888888888889,
+ 0.0888888888888889,
+ 0.0888888888888889,
+ 0.0888888888888889,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.1041666666666670,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0816326530612245,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1000000000000000,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0338983050847458,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1818181818181820,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2407407407407410,
+ 0.2407407407407410,
+ 0.2452830188679250,
+ 0.2452830188679250,
+ 0.2452830188679250,
+ 0.2500000000000000,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2745098039215690,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3269230769230770,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3461538461538460,
+ 0.3653846153846150,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4200000000000000,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4200000000000000,
+ 0.4313725490196080,
+ 0.4313725490196080,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4615384615384620,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.5098039215686270,
+ 0.5200000000000000,
+ 0.5306122448979590,
+ 0.5306122448979590,
+ 0.5306122448979590,
+ 0.5306122448979590,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.5957446808510640,
+ 0.6041666666666670,
+ 0.6041666666666670,
+ 0.6122448979591840,
+ 0.6122448979591840,
+ 0.6326530612244900,
+ 0.6400000000000000,
+ 0.6470588235294120,
+ 0.6470588235294120,
+ 0.6600000000000000,
+ 0.6600000000000000,
+ 0.6600000000000000,
+ 0.7021276595744680,
+ 0.7021276595744680,
+ 0.7173913043478260,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7333333333333330,
+ 0.7727272727272730,
+ 0.7826086956521740,
+ 0.7872340425531920,
+ 0.7916666666666670,
+ 0.8163265306122450,
+ 0.8163265306122450,
+ 0.8200000000000000,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8148148148148150,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8275862068965520,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8709677419354840,
+ 0.8709677419354840,
+ 0.8593750000000000,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8769230769230770,
+ 0.8769230769230770,
+ 0.8906250000000000,
+ 0.8906250000000000,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9166666666666670,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9152542372881350,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9166666666666670,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.9016393442622950,
+ 0.9032258064516130,
+ 0.9047619047619050,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9062500000000000,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9076923076923080,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9230769230769230,
+ 0.9218750000000000,
+ 0.9206349206349210,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9218750000000000,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9365079365079360,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9508196721311470,
+ 0.9508196721311470,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9354838709677420,
+ 0.9333333333333330,
+ 0.9310344827586210,
+ 0.9298245614035090,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9122807017543860,
+ 0.9107142857142860,
+ 0.9090909090909090,
+ 0.9259259259259260,
+ 0.9259259259259260,
+ 0.9259259259259260,
+ 0.9259259259259260,
+ 0.9272727272727270,
+ 0.9259259259259260,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9298245614035090,
+ 0.9310344827586210,
+ 0.9310344827586210,
+ 0.9333333333333330,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9344262295081970,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9333333333333330,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9322033898305080,
+ 0.9482758620689660,
+ 0.9482758620689660,
+ 0.9473684210526320,
+ 0.9482758620689660,
+ 0.9482758620689660,
+ 0.9473684210526320,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9482758620689660,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9508196721311470,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9491525423728810,
+ 0.9491525423728810,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9508196721311470,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9661016949152540,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9655172413793100,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9661016949152540,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9500000000000000,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9516129032258060,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9687500000000000,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9677419354838710,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9682539682539680,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9531250000000000,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9393939393939390,
+ 0.9393939393939390,
+ 0.9393939393939390,
+ 0.9393939393939390,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9538461538461540,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9516129032258060,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9523809523809520,
+ 0.9516129032258060,
+ 0.9365079365079360,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9206349206349210,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9193548387096770,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9180327868852460,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.9032258064516130,
+ 0.8870967741935480,
+ 0.8593750000000000,
+ 0.8571428571428570,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8500000000000000,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8360655737704920,
+ 0.8333333333333330,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8064516129032260,
+ 0.7936507936507940,
+ 0.7812500000000000,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7656250000000000,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7692307692307690,
+ 0.7656250000000000,
+ 0.7656250000000000,
+ 0.7619047619047620,
+ 0.7619047619047620,
+ 0.7619047619047620,
+ 0.7619047619047620,
+ 0.7619047619047620,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7343750000000000,
+ 0.7230769230769230,
+ 0.7187500000000000,
+ 0.7187500000000000,
+ 0.7187500000000000,
+ 0.7230769230769230,
+ 0.7230769230769230,
+ 0.7230769230769230,
+ 0.7142857142857140,
+ 0.7258064516129030,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7288135593220340,
+ 0.7321428571428570,
+ 0.7321428571428570,
+ 0.7321428571428570,
+ 0.7192982456140350,
+ 0.7272727272727270,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7090909090909090,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7222222222222220,
+ 0.7307692307692310,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.6909090909090910,
+ 0.6909090909090910,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6785714285714290,
+ 0.6551724137931030,
+ 0.6551724137931030,
+ 0.6491228070175440,
+ 0.6428571428571430,
+ 0.6545454545454550,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6481481481481480,
+ 0.6296296296296300,
+ 0.6274509803921570,
+ 0.6274509803921570,
+ 0.6153846153846150,
+ 0.6000000000000000,
+ 0.5918367346938780,
+ 0.5918367346938780,
+ 0.5800000000000000,
+ 0.5800000000000000,
+ 0.5800000000000000,
+ 0.5800000000000000,
+ 0.5686274509803920,
+ 0.5686274509803920,
+ 0.5714285714285710,
+ 0.5714285714285710,
+ 0.5714285714285710,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5600000000000000,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5510204081632650,
+ 0.5192307692307690,
+ 0.5000000000000000,
+ 0.4821428571428570,
+ 0.4821428571428570,
+ 0.4821428571428570,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4727272727272730,
+ 0.4561403508771930,
+ 0.4642857142857140,
+ 0.4642857142857140,
+ 0.4642857142857140,
+ 0.4642857142857140,
+ 0.4642857142857140,
+ 0.4464285714285710,
+ 0.4545454545454550,
+ 0.4629629629629630,
+ 0.4629629629629630,
+ 0.4629629629629630,
+ 0.4509803921568630,
+ 0.4230769230769230,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4038461538461540,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3269230769230770,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2553191489361700,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2444444444444440,
+ 0.2391304347826090,
+ 0.2340425531914890,
+ 0.2500000000000000,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2244897959183670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2083333333333330,
+ 0.2040816326530610,
+ 0.1875000000000000,
+ 0.1702127659574470,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.2040816326530610,
+ 0.2040816326530610,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1886792452830190,
+ 0.1698113207547170,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0847457627118644,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0468750000000000,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0149253731343284,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1186440677966100,
+ 0.1166666666666670,
+ 0.1311475409836070,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1355932203389830,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1666666666666670,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1818181818181820,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.2181818181818180,
+ 0.2222222222222220,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2307692307692310,
+ 0.2352941176470590,
+ 0.2448979591836730,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2549019607843140,
+ 0.2600000000000000,
+ 0.2745098039215690,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2884615384615380,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.3076923076923080,
+ 0.3137254901960780,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3207547169811320,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3859649122807020,
+ 0.3965517241379310,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4363636363636360,
+ 0.4363636363636360,
+ 0.4464285714285710,
+ 0.4464285714285710,
+ 0.4727272727272730,
+ 0.4821428571428570,
+ 0.4821428571428570,
+ 0.4912280701754390,
+ 0.5172413793103450,
+ 0.5172413793103450,
+ 0.5263157894736840,
+ 0.5263157894736840,
+ 0.5263157894736840,
+ 0.5263157894736840,
+ 0.5263157894736840,
+ 0.5263157894736840,
+ 0.5660377358490570,
+ 0.5660377358490570,
+ 0.5660377358490570,
+ 0.5660377358490570,
+ 0.5660377358490570,
+ 0.5740740740740740,
+ 0.5818181818181820,
+ 0.5818181818181820,
+ 0.5925925925925930,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6470588235294120,
+ 0.6666666666666670,
+ 0.6800000000000000,
+ 0.6938775510204080,
+ 0.6938775510204080,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7200000000000000,
+ 0.7200000000000000,
+ 0.7400000000000000,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7358490566037730,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7547169811320760,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8064516129032260,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8382352941176470,
+ 0.8405797101449270,
+ 0.8405797101449270,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8428571428571430,
+ 0.8450704225352110,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8676470588235290,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8787878787878790,
+ 0.8787878787878790,
+ 0.8787878787878790,
+ 0.8787878787878790,
+ 0.8787878787878790,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8840579710144930,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8985507246376810,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9130434782608700,
+ 0.9117647058823530,
+ 0.9130434782608700,
+ 0.9117647058823530,
+ 0.9104477611940300,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9090909090909090,
+ 0.9062500000000000,
+ 0.9076923076923080,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.9047619047619050,
+ 0.8769230769230770,
+ 0.8750000000000000,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8730158730158730,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8615384615384620,
+ 0.8615384615384620,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8548387096774190,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8666666666666670,
+ 0.8709677419354840,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8593750000000000,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8636363636363640,
+ 0.8695652173913040,
+ 0.8695652173913040,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8714285714285710,
+ 0.8732394366197180,
+ 0.8732394366197180,
+ 0.8857142857142860,
+ 0.8840579710144930,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8955223880597010,
+ 0.8939393939393940,
+ 0.8955223880597010,
+ 0.8970588235294120,
+ 0.8985507246376810,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.8985507246376810,
+ 0.8985507246376810,
+ 0.8985507246376810,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8955223880597010,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8970588235294120,
+ 0.8985507246376810,
+ 0.8985507246376810,
+ 0.9000000000000000,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9154929577464790,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9178082191780820,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9166666666666670,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9295774647887320,
+ 0.9305555555555560,
+ 0.9305555555555560,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9436619718309860,
+ 0.9444444444444440,
+ 0.9444444444444440,
+ 0.9436619718309860,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9428571428571430,
+ 0.9295774647887320,
+ 0.9285714285714290,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9275362318840580,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9142857142857140,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9154929577464790,
+ 0.9285714285714290,
+ 0.9275362318840580,
+ 0.9264705882352940,
+ 0.9264705882352940,
+ 0.9264705882352940,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9253731343283580,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9104477611940300,
+ 0.9117647058823530,
+ 0.9117647058823530,
+ 0.9130434782608700,
+ 0.9117647058823530,
+ 0.9130434782608700,
+ 0.9000000000000000,
+ 0.9000000000000000,
+ 0.8873239436619720,
+ 0.8873239436619720,
+ 0.8857142857142860,
+ 0.8840579710144930,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8823529411764710,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8656716417910450,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8382352941176470,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8260869565217390,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8260869565217390,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8382352941176470,
+ 0.8358208955223880,
+ 0.8484848484848480,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8333333333333330,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8088235294117650,
+ 0.8059701492537310,
+ 0.8030303030303030,
+ 0.8030303030303030,
+ 0.8030303030303030,
+ 0.8030303030303030,
+ 0.8030303030303030,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.7878787878787880,
+ 0.7878787878787880,
+ 0.7761194029850750,
+ 0.7761194029850750,
+ 0.7727272727272730,
+ 0.7656250000000000,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7903225806451610,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8032786885245900,
+ 0.8000000000000000,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7833333333333330,
+ 0.7833333333333330,
+ 0.7540983606557380,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7377049180327870,
+ 0.7258064516129030,
+ 0.7258064516129030,
+ 0.7258064516129030,
+ 0.7258064516129030,
+ 0.7258064516129030,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7166666666666670,
+ 0.7118644067796610,
+ 0.7017543859649120,
+ 0.7090909090909090,
+ 0.6842105263157900,
+ 0.6842105263157900,
+ 0.6724137931034480,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6607142857142860,
+ 0.6545454545454550,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6545454545454550,
+ 0.6481481481481480,
+ 0.6603773584905660,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.6415094339622640,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5833333333333330,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5510204081632650,
+ 0.5416666666666670,
+ 0.5416666666666670,
+ 0.5306122448979590,
+ 0.5000000000000000,
+ 0.4814814814814810,
+ 0.4385964912280700,
+ 0.4482758620689660,
+ 0.4310344827586210,
+ 0.4237288135593220,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.3833333333333330,
+ 0.3898305084745760,
+ 0.3898305084745760,
+ 0.3898305084745760,
+ 0.3793103448275860,
+ 0.3793103448275860,
+ 0.3728813559322030,
+ 0.3728813559322030,
+ 0.3728813559322030,
+ 0.3666666666666670,
+ 0.3606557377049180,
+ 0.3606557377049180,
+ 0.3548387096774190,
+ 0.3548387096774190,
+ 0.3437500000000000,
+ 0.3437500000000000,
+ 0.3437500000000000,
+ 0.3437500000000000,
+ 0.3281250000000000,
+ 0.3230769230769230,
+ 0.3230769230769230,
+ 0.3333333333333330,
+ 0.3225806451612900,
+ 0.3278688524590160,
+ 0.2931034482758620,
+ 0.2931034482758620,
+ 0.2881355932203390,
+ 0.2881355932203390,
+ 0.2881355932203390,
+ 0.2711864406779660,
+ 0.2786885245901640,
+ 0.2741935483870970,
+ 0.2542372881355930,
+ 0.2542372881355930,
+ 0.2542372881355930,
+ 0.2500000000000000,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2333333333333330,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2333333333333330,
+ 0.2203389830508470,
+ 0.2203389830508470,
+ 0.2166666666666670,
+ 0.2166666666666670,
+ 0.2131147540983610,
+ 0.2096774193548390,
+ 0.2307692307692310,
+ 0.2187500000000000,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2131147540983610,
+ 0.2000000000000000,
+ 0.2131147540983610,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1967213114754100,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1875000000000000,
+ 0.1846153846153850,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1818181818181820,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1791044776119400,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.2033898305084750,
+ 0.2033898305084750,
+ 0.2033898305084750,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2105263157894740,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2181818181818180,
+ 0.2181818181818180,
+ 0.2181818181818180,
+ 0.2181818181818180,
+ 0.2181818181818180,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2075471698113210,
+ 0.2037037037037040,
+ 0.2075471698113210,
+ 0.1886792452830190,
+ 0.1818181818181820,
+ 0.1666666666666670,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1754385964912280,
+ 0.1785714285714290,
+ 0.1636363636363640,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1551724137931030,
+ 0.1551724137931030,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1355932203389830,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1166666666666670,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0882352941176471,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0882352941176471,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0869565217391304,
+ 0.0735294117647059,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0606060606060606,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0298507462686567,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0298507462686567,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0135135135135135,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0862068965517241,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1034482758620690,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.2096774193548390,
+ 0.2131147540983610,
+ 0.2258064516129030,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2372881355932200,
+ 0.2542372881355930,
+ 0.2542372881355930,
+ 0.2586206896551720,
+ 0.2586206896551720,
+ 0.2631578947368420,
+ 0.2678571428571430,
+ 0.2678571428571430,
+ 0.2807017543859650,
+ 0.2807017543859650,
+ 0.2807017543859650,
+ 0.2807017543859650,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2982456140350880,
+ 0.3103448275862070,
+ 0.3275862068965520,
+ 0.3389830508474580,
+ 0.3448275862068970,
+ 0.3684210526315790,
+ 0.3684210526315790,
+ 0.3859649122807020,
+ 0.3965517241379310,
+ 0.3965517241379310,
+ 0.3965517241379310,
+ 0.3965517241379310,
+ 0.3965517241379310,
+ 0.3898305084745760,
+ 0.3898305084745760,
+ 0.3898305084745760,
+ 0.3898305084745760,
+ 0.4000000000000000,
+ 0.4067796610169490,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4067796610169490,
+ 0.4067796610169490,
+ 0.4166666666666670,
+ 0.4333333333333330,
+ 0.4333333333333330,
+ 0.4406779661016950,
+ 0.4406779661016950,
+ 0.4406779661016950,
+ 0.4333333333333330,
+ 0.4262295081967210,
+ 0.4426229508196720,
+ 0.4736842105263160,
+ 0.4827586206896550,
+ 0.4915254237288140,
+ 0.5000000000000000,
+ 0.5084745762711860,
+ 0.5084745762711860,
+ 0.5172413793103450,
+ 0.5172413793103450,
+ 0.5172413793103450,
+ 0.5172413793103450,
+ 0.5344827586206900,
+ 0.5344827586206900,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.6037735849056600,
+ 0.6111111111111110,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6111111111111110,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6181818181818180,
+ 0.6296296296296300,
+ 0.6296296296296300,
+ 0.6415094339622640,
+ 0.6666666666666670,
+ 0.6800000000000000,
+ 0.6938775510204080,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.7115384615384620,
+ 0.7115384615384620,
+ 0.7115384615384620,
+ 0.7169811320754720,
+ 0.7413793103448280,
+ 0.7413793103448280,
+ 0.7413793103448280,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7627118644067800,
+ 0.7627118644067800,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7868852459016390,
+ 0.7903225806451610,
+ 0.7903225806451610,
+ 0.7936507936507940,
+ 0.7936507936507940,
+ 0.7936507936507940,
+ 0.7936507936507940,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8125000000000000,
+ 0.8153846153846150,
+ 0.8153846153846150,
+ 0.8153846153846150,
+ 0.8153846153846150,
+ 0.8153846153846150,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8358208955223880,
+ 0.8382352941176470,
+ 0.8358208955223880,
+ 0.8507462686567160,
+ 0.8507462686567160,
+ 0.8507462686567160,
+ 0.8507462686567160,
+ 0.8507462686567160,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8805970149253730,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8805970149253730,
+ 0.8939393939393940,
+ 0.8923076923076920,
+ 0.8923076923076920,
+ 0.8923076923076920,
+ 0.8787878787878790,
+ 0.8787878787878790,
+ 0.8656716417910450,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8550724637681160,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8529411764705880,
+ 0.8656716417910450,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8676470588235290,
+ 0.8550724637681160,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8428571428571430,
+ 0.8405797101449270,
+ 0.8405797101449270,
+ 0.8405797101449270,
+ 0.8285714285714290,
+ 0.8285714285714290,
+ 0.8285714285714290,
+ 0.8285714285714290,
+ 0.8285714285714290,
+ 0.8285714285714290,
+ 0.8235294117647060,
+ 0.8484848484848480,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8461538461538460,
+ 0.8437500000000000,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8208955223880600,
+ 0.8208955223880600,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.8088235294117650,
+ 0.7971014492753620,
+ 0.7826086956521740,
+ 0.7826086956521740,
+ 0.7794117647058820,
+ 0.7794117647058820,
+ 0.7910447761194030,
+ 0.8030303030303030,
+ 0.8030303030303030,
+ 0.8000000000000000,
+ 0.7878787878787880,
+ 0.7878787878787880,
+ 0.8000000000000000,
+ 0.7936507936507940,
+ 0.7777777777777780,
+ 0.7580645161290320,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7457627118644070,
+ 0.7096774193548390,
+ 0.7166666666666670,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7213114754098360,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.6984126984126980,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7076923076923080,
+ 0.7076923076923080,
+ 0.7076923076923080,
+ 0.7076923076923080,
+ 0.7076923076923080,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.7031250000000000,
+ 0.6923076923076920,
+ 0.7031250000000000,
+ 0.6984126984126980,
+ 0.7031250000000000,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.7096774193548390,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6984126984126980,
+ 0.6935483870967740,
+ 0.6825396825396830,
+ 0.6825396825396830,
+ 0.6984126984126980,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7096774193548390,
+ 0.7213114754098360,
+ 0.7540983606557380,
+ 0.7540983606557380,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7758620689655170,
+ 0.7931034482758620,
+ 0.8000000000000000,
+ 0.8000000000000000,
+ 0.8064516129032260,
+ 0.8196721311475410,
+ 0.8253968253968250,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8412698412698410,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8500000000000000,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8500000000000000,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8524590163934430,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8548387096774190,
+ 0.8412698412698410,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8437500000000000,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8307692307692310,
+ 0.8181818181818180,
+ 0.8181818181818180,
+ 0.8153846153846150,
+ 0.8153846153846150,
+ 0.8281250000000000,
+ 0.8281250000000000,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8095238095238100,
+ 0.8095238095238100,
+ 0.8225806451612900,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8360655737704920,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8474576271186440,
+ 0.8500000000000000,
+ 0.8500000000000000,
+ 0.8333333333333330,
+ 0.8333333333333330,
+ 0.8500000000000000,
+ 0.8524590163934430,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8387096774193550,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8412698412698410,
+ 0.8387096774193550,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8225806451612900,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8253968253968250,
+ 0.8095238095238100,
+ 0.8225806451612900,
+ 0.8196721311475410,
+ 0.8166666666666670,
+ 0.8166666666666670,
+ 0.8166666666666670,
+ 0.8166666666666670,
+ 0.8166666666666670,
+ 0.8135593220338980,
+ 0.8135593220338980,
+ 0.7966101694915250,
+ 0.7868852459016390,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7777777777777780,
+ 0.7741935483870970,
+ 0.7741935483870970,
+ 0.7868852459016390,
+ 0.7868852459016390,
+ 0.7741935483870970,
+ 0.7704918032786880,
+ 0.7580645161290320,
+ 0.7666666666666670,
+ 0.7540983606557380,
+ 0.7540983606557380,
+ 0.7540983606557380,
+ 0.7500000000000000,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7377049180327870,
+ 0.7258064516129030,
+ 0.7142857142857140,
+ 0.7096774193548390,
+ 0.7049180327868850,
+ 0.7049180327868850,
+ 0.7166666666666670,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7118644067796610,
+ 0.7241379310344830,
+ 0.7118644067796610,
+ 0.7000000000000000,
+ 0.6885245901639340,
+ 0.7000000000000000,
+ 0.7000000000000000,
+ 0.6949152542372880,
+ 0.6949152542372880,
+ 0.6949152542372880,
+ 0.6949152542372880,
+ 0.7068965517241380,
+ 0.6949152542372880,
+ 0.6896551724137930,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.7017543859649120,
+ 0.6779661016949150,
+ 0.6666666666666670,
+ 0.6610169491525420,
+ 0.6610169491525420,
+ 0.6610169491525420,
+ 0.6610169491525420,
+ 0.6500000000000000,
+ 0.6500000000000000,
+ 0.6440677966101690,
+ 0.6440677966101690,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6428571428571430,
+ 0.6315789473684210,
+ 0.6206896551724140,
+ 0.6206896551724140,
+ 0.6034482758620690,
+ 0.6034482758620690,
+ 0.6034482758620690,
+ 0.6034482758620690,
+ 0.6034482758620690,
+ 0.6140350877192980,
+ 0.6140350877192980,
+ 0.6071428571428570,
+ 0.6071428571428570,
+ 0.6071428571428570,
+ 0.5964912280701750,
+ 0.5862068965517240,
+ 0.5862068965517240,
+ 0.5862068965517240,
+ 0.5862068965517240,
+ 0.5964912280701750,
+ 0.6181818181818180,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5964912280701750,
+ 0.5892857142857140,
+ 0.5689655172413790,
+ 0.5614035087719300,
+ 0.5614035087719300,
+ 0.5535714285714290,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5555555555555560,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.5636363636363640,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5740740740740740,
+ 0.5576923076923080,
+ 0.5576923076923080,
+ 0.5490196078431370,
+ 0.5490196078431370,
+ 0.5600000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5400000000000000,
+ 0.5192307692307690,
+ 0.5192307692307690,
+ 0.5192307692307690,
+ 0.4905660377358490,
+ 0.4905660377358490,
+ 0.4905660377358490,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4814814814814810,
+ 0.4561403508771930,
+ 0.4561403508771930,
+ 0.4363636363636360,
+ 0.4363636363636360,
+ 0.4363636363636360,
+ 0.4259259259259260,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3921568627450980,
+ 0.3921568627450980,
+ 0.3773584905660380,
+ 0.3333333333333330,
+ 0.3148148148148150,
+ 0.3018867924528300,
+ 0.2962962962962960,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.3076923076923080,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2800000000000000,
+ 0.2745098039215690,
+ 0.2692307692307690,
+ 0.2745098039215690,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2549019607843140,
+ 0.2500000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1960784313725490,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.2000000000000000,
+ 0.1923076923076920,
+ 0.1960784313725490,
+ 0.1800000000000000,
+ 0.1800000000000000,
+ 0.1764705882352940,
+ 0.1800000000000000,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1698113207547170,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1886792452830190,
+ 0.1851851851851850,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1764705882352940,
+ 0.1600000000000000,
+ 0.1538461538461540,
+ 0.1481481481481480,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1509433962264150,
+ 0.1346153846153850,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1176470588235290,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0847457627118644,
+ 0.0819672131147541,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0727272727272727,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1818181818181820,
+ 0.1851851851851850,
+ 0.2280701754385960,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2413793103448280,
+ 0.2500000000000000,
+ 0.2545454545454540,
+ 0.2592592592592590,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2452830188679250,
+ 0.2592592592592590,
+ 0.2592592592592590,
+ 0.2592592592592590,
+ 0.2592592592592590,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2909090909090910,
+ 0.2909090909090910,
+ 0.2962962962962960,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3207547169811320,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3518518518518520,
+ 0.3584905660377360,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4259259259259260,
+ 0.4150943396226420,
+ 0.4230769230769230,
+ 0.4230769230769230,
+ 0.4230769230769230,
+ 0.4230769230769230,
+ 0.4313725490196080,
+ 0.4423076923076920,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4509803921568630,
+ 0.4693877551020410,
+ 0.4693877551020410,
+ 0.4791666666666670,
+ 0.4791666666666670,
+ 0.4791666666666670,
+ 0.4893617021276600,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.5111111111111110,
+ 0.5111111111111110,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5217391304347830,
+ 0.5333333333333330,
+ 0.5581395348837210,
+ 0.5581395348837210,
+ 0.5681818181818180,
+ 0.5777777777777780,
+ 0.5652173913043480,
+ 0.5531914893617020,
+ 0.5777777777777780,
+ 0.5777777777777780,
+ 0.5909090909090910,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.6250000000000000,
+ 0.6250000000000000,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6382978723404260,
+ 0.6521739130434780,
+ 0.6739130434782610,
+ 0.6888888888888890,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7083333333333330,
+ 0.7200000000000000,
+ 0.7346938775510200,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7450980392156860,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7454545454545450,
+ 0.7592592592592590,
+ 0.7592592592592590,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7678571428571430,
+ 0.7543859649122810,
+ 0.7719298245614030,
+ 0.7719298245614030,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7796610169491530,
+ 0.7758620689655170,
+ 0.7758620689655170,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7894736842105260,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.7931034482758620,
+ 0.8070175438596490,
+ 0.8214285714285710,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8245614035087720,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8392857142857140,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8363636363636360,
+ 0.8545454545454550,
+ 0.8571428571428570,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8571428571428570,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8793103448275860,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8813559322033900,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8448275862068960,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8392857142857140,
+ 0.8333333333333330,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8301886792452830,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8269230769230770,
+ 0.8269230769230770,
+ 0.8431372549019610,
+ 0.8431372549019610,
+ 0.8490566037735850,
+ 0.8490566037735850,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8571428571428570,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8545454545454550,
+ 0.8545454545454550,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8545454545454550,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8596491228070170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8666666666666670,
+ 0.8813559322033900,
+ 0.8793103448275860,
+ 0.8793103448275860,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8793103448275860,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8620689655172410,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8644067796610170,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8750000000000000,
+ 0.8771929824561400,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8750000000000000,
+ 0.8771929824561400,
+ 0.8771929824561400,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8620689655172410,
+ 0.8474576271186440,
+ 0.8474576271186440,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8421052631578950,
+ 0.8448275862068960,
+ 0.8448275862068960,
+ 0.8571428571428570,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8727272727272730,
+ 0.8703703703703700,
+ 0.8867924528301890,
+ 0.8867924528301890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8888888888888890,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8703703703703700,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8703703703703700,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8518518518518520,
+ 0.8679245283018870,
+ 0.8679245283018870,
+ 0.8653846153846150,
+ 0.8653846153846150,
+ 0.8627450980392160,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8571428571428570,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8600000000000000,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8627450980392160,
+ 0.8600000000000000,
+ 0.8775510204081630,
+ 0.8750000000000000,
+ 0.8571428571428570,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8400000000000000,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8235294117647060,
+ 0.8076923076923080,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7818181818181820,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7857142857142860,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.8076923076923080,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.7962962962962960,
+ 0.8113207547169810,
+ 0.7924528301886790,
+ 0.7924528301886790,
+ 0.7777777777777780,
+ 0.7777777777777780,
+ 0.7636363636363640,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7500000000000000,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7368421052631580,
+ 0.7241379310344830,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7192982456140350,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7142857142857140,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7090909090909090,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.6851851851851850,
+ 0.6909090909090910,
+ 0.6909090909090910,
+ 0.6909090909090910,
+ 0.6909090909090910,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.7037037037037040,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.6981132075471700,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6923076923076920,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6792452830188680,
+ 0.6730769230769230,
+ 0.6730769230769230,
+ 0.6666666666666670,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6538461538461540,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6666666666666670,
+ 0.6538461538461540,
+ 0.6470588235294120,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6346153846153850,
+ 0.6400000000000000,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6250000000000000,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6326530612244900,
+ 0.6250000000000000,
+ 0.6000000000000000,
+ 0.6000000000000000,
+ 0.5882352941176470,
+ 0.5882352941176470,
+ 0.5800000000000000,
+ 0.5600000000000000,
+ 0.5714285714285710,
+ 0.5714285714285710,
+ 0.5714285714285710,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5625000000000000,
+ 0.5510204081632650,
+ 0.5294117647058820,
+ 0.5294117647058820,
+ 0.5384615384615380,
+ 0.5384615384615380,
+ 0.5384615384615380,
+ 0.5384615384615380,
+ 0.5000000000000000,
+ 0.5000000000000000,
+ 0.4893617021276600,
+ 0.4791666666666670,
+ 0.4680851063829790,
+ 0.4782608695652170,
+ 0.4666666666666670,
+ 0.4666666666666670,
+ 0.4666666666666670,
+ 0.4666666666666670,
+ 0.4565217391304350,
+ 0.4565217391304350,
+ 0.4255319148936170,
+ 0.4130434782608700,
+ 0.3863636363636360,
+ 0.3777777777777780,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3333333333333330,
+ 0.3488372093023260,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3488372093023260,
+ 0.3409090909090910,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3181818181818180,
+ 0.3255813953488370,
+ 0.3095238095238100,
+ 0.3095238095238100,
+ 0.2926829268292680,
+ 0.2926829268292680,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2790697674418600,
+ 0.2619047619047620,
+ 0.2558139534883720,
+ 0.2558139534883720,
+ 0.2380952380952380,
+ 0.2380952380952380,
+ 0.2272727272727270,
+ 0.2142857142857140,
+ 0.2045454545454550,
+ 0.2000000000000000,
+ 0.1777777777777780,
+ 0.1777777777777780,
+ 0.1702127659574470,
+ 0.1521739130434780,
+ 0.1458333333333330,
+ 0.1458333333333330,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1568627450980390,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1372549019607840,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1020408163265310,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.0851063829787234,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0800000000000000,
+ 0.0784313725490196,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0363636363636364,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0384615384615385,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0377358490566038,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0377358490566038,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0185185185185185,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000
+ }
+ },
+ { PLACE_CATEG_ID_OTHER,
+ {
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0377358490566038,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0192307692307692,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0188679245283019,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0192307692307692,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0192307692307692,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0208333333333333,
+ 0.0212765957446808,
+ 0.0212765957446808,
+ 0.0212765957446808,
+ 0.0212765957446808,
+ 0.0416666666666667,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0408163265306122,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0444444444444444,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0425531914893617,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0465116279069768,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1228070175438600,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1228070175438600,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1052631578947370,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1250000000000000,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.1090909090909090,
+ 0.1071428571428570,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1071428571428570,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0877192982456140,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1071428571428570,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1296296296296300,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.0980392156862745,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1153846153846150,
+ 0.1176470588235290,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1400000000000000,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1600000000000000,
+ 0.1836734693877550,
+ 0.1836734693877550,
+ 0.1836734693877550,
+ 0.1632653061224490,
+ 0.1632653061224490,
+ 0.1800000000000000,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.2173913043478260,
+ 0.2173913043478260,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2040816326530610,
+ 0.2000000000000000,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1627906976744190,
+ 0.1627906976744190,
+ 0.1627906976744190,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1463414634146340,
+ 0.1463414634146340,
+ 0.1860465116279070,
+ 0.1860465116279070,
+ 0.2045454545454550,
+ 0.2093023255813950,
+ 0.2093023255813950,
+ 0.2093023255813950,
+ 0.2272727272727270,
+ 0.2272727272727270,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2444444444444440,
+ 0.2444444444444440,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.3404255319148940,
+ 0.3333333333333330,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3200000000000000,
+ 0.3265306122448980,
+ 0.3400000000000000,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3269230769230770,
+ 0.3207547169811320,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3333333333333330,
+ 0.3269230769230770,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3090909090909090,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3272727272727270,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3214285714285710,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3148148148148150,
+ 0.3090909090909090,
+ 0.3148148148148150,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2173913043478260,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1777777777777780,
+ 0.1777777777777780,
+ 0.1777777777777780,
+ 0.1777777777777780,
+ 0.1521739130434780,
+ 0.1521739130434780,
+ 0.1521739130434780,
+ 0.1304347826086960,
+ 0.1304347826086960,
+ 0.1304347826086960,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1250000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1632653061224490,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1800000000000000,
+ 0.1800000000000000,
+ 0.1800000000000000,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1886792452830190,
+ 0.1886792452830190,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1346153846153850,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1200000000000000,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0784313725490196,
+ 0.0961538461538462,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0625000000000000,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0172413793103448,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0178571428571429,
+ 0.0181818181818182,
+ 0.0357142857142857,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0350877192982456,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0181818181818182,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0181818181818182,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0181818181818182,
+ 0.0185185185185185,
+ 0.0181818181818182,
+ 0.0181818181818182,
+ 0.0185185185185185,
+ 0.0185185185185185,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0192307692307692,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0392156862745098,
+ 0.0200000000000000,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0425531914893617,
+ 0.0416666666666667,
+ 0.0625000000000000,
+ 0.0612244897959184,
+ 0.0612244897959184,
+ 0.0612244897959184,
+ 0.0600000000000000,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0638297872340425,
+ 0.0638297872340425,
+ 0.0434782608695652,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0444444444444444,
+ 0.0227272727272727,
+ 0.0217391304347826,
+ 0.0212765957446808,
+ 0.0208333333333333,
+ 0.0204081632653061,
+ 0.0204081632653061,
+ 0.0200000000000000,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0196078431372549,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0166666666666667,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0333333333333333,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0545454545454545,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0333333333333333,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0175438596491228,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0175438596491228,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0161290322580645,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0322580645161290,
+ 0.0483870967741936,
+ 0.0468750000000000,
+ 0.0476190476190476,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0645161290322581,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0847457627118644,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0877192982456140,
+ 0.0727272727272727,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0576923076923077,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1206896551724140,
+ 0.1206896551724140,
+ 0.1228070175438600,
+ 0.1250000000000000,
+ 0.1090909090909090,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.1000000000000000,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1153846153846150,
+ 0.1111111111111110,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1052631578947370,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.1071428571428570,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0784313725490196,
+ 0.0769230769230769,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0769230769230769,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.1132075471698110,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1132075471698110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1538461538461540,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1276595744680850,
+ 0.1304347826086960,
+ 0.1304347826086960,
+ 0.0888888888888889,
+ 0.0869565217391304,
+ 0.0851063829787234,
+ 0.1041666666666670,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1224489795918370,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1020408163265310,
+ 0.1041666666666670,
+ 0.1063829787234040,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1698113207547170,
+ 0.1666666666666670,
+ 0.1509433962264150,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1818181818181820,
+ 0.1636363636363640,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1864406779661020,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1833333333333330,
+ 0.1967213114754100,
+ 0.1935483870967740,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1666666666666670,
+ 0.1525423728813560,
+ 0.1071428571428570,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1403508771929820,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1694915254237290,
+ 0.1666666666666670,
+ 0.1639344262295080,
+ 0.1500000000000000,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1587301587301590,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1562500000000000,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1692307692307690,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1406250000000000,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0952380952380952,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0153846153846154,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0169491525423729,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0161290322580645,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0169491525423729,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0169491525423729,
+ 0.0166666666666667,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0166666666666667,
+ 0.0169491525423729,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0163934426229508,
+ 0.0166666666666667,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0172413793103448,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0181818181818182,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0178571428571429,
+ 0.0181818181818182,
+ 0.0185185185185185,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0188679245283019,
+ 0.0192307692307692,
+ 0.0196078431372549,
+ 0.0204081632653061,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0392156862745098,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0566037735849057,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0363636363636364,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0370370370370370,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0370370370370370,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0312500000000000,
+ 0.0312500000000000,
+ 0.0307692307692308,
+ 0.0307692307692308,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0294117647058823,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0285714285714286,
+ 0.0281690140845070,
+ 0.0285714285714286,
+ 0.0285714285714286,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0303030303030303,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0149253731343284,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0151515151515152,
+ 0.0156250000000000,
+ 0.0153846153846154,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0158730158730159,
+ 0.0461538461538462,
+ 0.0468750000000000,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.1093750000000000,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0666666666666667,
+ 0.0645161290322581,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0757575757575758,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0571428571428571,
+ 0.0579710144927536,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0447761194029851,
+ 0.0454545454545455,
+ 0.0447761194029851,
+ 0.0441176470588235,
+ 0.0434782608695652,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0434782608695652,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0298507462686567,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0285714285714286,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0140845070422535,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0136986301369863,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0138888888888889,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0000000000000000,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0281690140845070,
+ 0.0285714285714286,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0285714285714286,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0298507462686567,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0144927536231884,
+ 0.0142857142857143,
+ 0.0142857142857143,
+ 0.0140845070422535,
+ 0.0140845070422535,
+ 0.0142857142857143,
+ 0.0144927536231884,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0149253731343284,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0147058823529412,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0289855072463768,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0294117647058823,
+ 0.0298507462686567,
+ 0.0303030303030303,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0454545454545455,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0441176470588235,
+ 0.0447761194029851,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0454545454545455,
+ 0.0468750000000000,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0476190476190476,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0491803278688525,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0526315789473684,
+ 0.0545454545454545,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0545454545454545,
+ 0.0555555555555556,
+ 0.0566037735849057,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0384615384615385,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0612244897959184,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0612244897959184,
+ 0.0961538461538462,
+ 0.1111111111111110,
+ 0.1578947368421050,
+ 0.1551724137931030,
+ 0.1724137931034480,
+ 0.1694915254237290,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.2000000000000000,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1864406779661020,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.2033898305084750,
+ 0.2033898305084750,
+ 0.2033898305084750,
+ 0.2000000000000000,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.2187500000000000,
+ 0.2187500000000000,
+ 0.2187500000000000,
+ 0.2187500000000000,
+ 0.2187500000000000,
+ 0.2307692307692310,
+ 0.2307692307692310,
+ 0.2380952380952380,
+ 0.2419354838709680,
+ 0.2459016393442620,
+ 0.2586206896551720,
+ 0.2586206896551720,
+ 0.2711864406779660,
+ 0.2711864406779660,
+ 0.2711864406779660,
+ 0.2711864406779660,
+ 0.2622950819672130,
+ 0.2580645161290320,
+ 0.2542372881355930,
+ 0.2542372881355930,
+ 0.2542372881355930,
+ 0.2500000000000000,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2459016393442620,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2622950819672130,
+ 0.2622950819672130,
+ 0.2622950819672130,
+ 0.2666666666666670,
+ 0.2711864406779660,
+ 0.2711864406779660,
+ 0.2833333333333330,
+ 0.2833333333333330,
+ 0.2786885245901640,
+ 0.2741935483870970,
+ 0.2615384615384620,
+ 0.2656250000000000,
+ 0.2539682539682540,
+ 0.2539682539682540,
+ 0.2539682539682540,
+ 0.2622950819672130,
+ 0.2666666666666670,
+ 0.2622950819672130,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2459016393442620,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2500000000000000,
+ 0.2615384615384620,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2769230769230770,
+ 0.2769230769230770,
+ 0.2769230769230770,
+ 0.2727272727272730,
+ 0.2647058823529410,
+ 0.2647058823529410,
+ 0.2537313432835820,
+ 0.2647058823529410,
+ 0.2647058823529410,
+ 0.2647058823529410,
+ 0.2424242424242420,
+ 0.2424242424242420,
+ 0.2153846153846150,
+ 0.2153846153846150,
+ 0.2153846153846150,
+ 0.2153846153846150,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1578947368421050,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1509433962264150,
+ 0.1666666666666670,
+ 0.1509433962264150,
+ 0.1886792452830190,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1929824561403510,
+ 0.1785714285714290,
+ 0.1818181818181820,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1666666666666670,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1803278688524590,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1969696969696970,
+ 0.1969696969696970,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2121212121212120,
+ 0.2121212121212120,
+ 0.2238805970149250,
+ 0.2238805970149250,
+ 0.2238805970149250,
+ 0.2205882352941180,
+ 0.2205882352941180,
+ 0.2205882352941180,
+ 0.2205882352941180,
+ 0.2089552238805970,
+ 0.2058823529411760,
+ 0.2058823529411760,
+ 0.1940298507462690,
+ 0.1940298507462690,
+ 0.1940298507462690,
+ 0.1940298507462690,
+ 0.1940298507462690,
+ 0.1940298507462690,
+ 0.1884057971014490,
+ 0.1884057971014490,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1641791044776120,
+ 0.1641791044776120,
+ 0.1515151515151520,
+ 0.1492537313432840,
+ 0.1492537313432840,
+ 0.1470588235294120,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1449275362318840,
+ 0.1304347826086960,
+ 0.1323529411764710,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1343283582089550,
+ 0.1212121212121210,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1230769230769230,
+ 0.1230769230769230,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1194029850746270,
+ 0.1142857142857140,
+ 0.1142857142857140,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1044776119402990,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1044776119402990,
+ 0.1044776119402990,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1014492753623190,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0857142857142857,
+ 0.0857142857142857,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0845070422535211,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0704225352112676,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0694444444444444,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0563380281690141,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0547945205479452,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0540540540540541,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0405405405405405,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0410958904109589,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0416666666666667,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0422535211267606,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0428571428571429,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0454545454545455,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0468750000000000,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0317460317460317,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0333333333333333,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0322580645161290,
+ 0.0327868852459016,
+ 0.0327868852459016,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0338983050847458,
+ 0.0344827586206897,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0333333333333333,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0338983050847458,
+ 0.0333333333333333,
+ 0.0491803278688525,
+ 0.0491803278688525,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0566037735849057,
+ 0.0555555555555556,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0754716981132075,
+ 0.0784313725490196,
+ 0.0600000000000000,
+ 0.0612244897959184,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0566037735849057,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0483870967741936,
+ 0.0491803278688525,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0634920634920635,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0441176470588235,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0447761194029851,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0597014925373134,
+ 0.0454545454545455,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0461538461538462,
+ 0.0606060606060606,
+ 0.0606060606060606,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0724637681159420,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0735294117647059,
+ 0.0597014925373134,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0579710144927536,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0571428571428571,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0579710144927536,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0735294117647059,
+ 0.0606060606060606,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0615384615384615,
+ 0.0625000000000000,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1029411764705880,
+ 0.1014492753623190,
+ 0.1159420289855070,
+ 0.1159420289855070,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1194029850746270,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1076923076923080,
+ 0.1212121212121210,
+ 0.1212121212121210,
+ 0.1076923076923080,
+ 0.1111111111111110,
+ 0.1269841269841270,
+ 0.1451612903225810,
+ 0.1500000000000000,
+ 0.1500000000000000,
+ 0.1525423728813560,
+ 0.1935483870967740,
+ 0.2000000000000000,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1967213114754100,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1904761904761900,
+ 0.1904761904761900,
+ 0.1904761904761900,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1846153846153850,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.2000000000000000,
+ 0.1875000000000000,
+ 0.1904761904761900,
+ 0.1875000000000000,
+ 0.1904761904761900,
+ 0.1904761904761900,
+ 0.1935483870967740,
+ 0.2063492063492060,
+ 0.2063492063492060,
+ 0.2063492063492060,
+ 0.2063492063492060,
+ 0.2096774193548390,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2063492063492060,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1935483870967740,
+ 0.1803278688524590,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1379310344827590,
+ 0.1206896551724140,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1129032258064520,
+ 0.0983606557377049,
+ 0.0952380952380952,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0645161290322581,
+ 0.0793650793650794,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0781250000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.0923076923076923,
+ 0.1060606060606060,
+ 0.1060606060606060,
+ 0.1076923076923080,
+ 0.1076923076923080,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0833333333333333,
+ 0.0819672131147541,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0806451612903226,
+ 0.0819672131147541,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0983606557377049,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0819672131147541,
+ 0.0819672131147541,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0967741935483871,
+ 0.1000000000000000,
+ 0.1147540983606560,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.1000000000000000,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0967741935483871,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.1000000000000000,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.1016949152542370,
+ 0.0862068965517241,
+ 0.0847457627118644,
+ 0.1000000000000000,
+ 0.1147540983606560,
+ 0.1166666666666670,
+ 0.1166666666666670,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1186440677966100,
+ 0.1206896551724140,
+ 0.1186440677966100,
+ 0.1206896551724140,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1228070175438600,
+ 0.1525423728813560,
+ 0.1500000000000000,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1525423728813560,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1578947368421050,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1754385964912280,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1754385964912280,
+ 0.1818181818181820,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2142857142857140,
+ 0.2068965517241380,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2142857142857140,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1800000000000000,
+ 0.1800000000000000,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.1923076923076920,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2456140350877190,
+ 0.2456140350877190,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2592592592592590,
+ 0.2641509433962260,
+ 0.2641509433962260,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2641509433962260,
+ 0.2777777777777780,
+ 0.2962962962962960,
+ 0.3018867924528300,
+ 0.3148148148148150,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.3018867924528300,
+ 0.2884615384615380,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3076923076923080,
+ 0.3137254901960780,
+ 0.3200000000000000,
+ 0.3200000000000000,
+ 0.3200000000000000,
+ 0.3200000000000000,
+ 0.3137254901960780,
+ 0.3269230769230770,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3529411764705880,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3076923076923080,
+ 0.2884615384615380,
+ 0.2745098039215690,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2400000000000000,
+ 0.2500000000000000,
+ 0.2352941176470590,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2352941176470590,
+ 0.2200000000000000,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2075471698113210,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1698113207547170,
+ 0.1666666666666670,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1509433962264150,
+ 0.1509433962264150,
+ 0.1568627450980390,
+ 0.1600000000000000,
+ 0.1730769230769230,
+ 0.1851851851851850,
+ 0.1538461538461540,
+ 0.1538461538461540,
+ 0.1698113207547170,
+ 0.1730769230769230,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.2000000000000000,
+ 0.1851851851851850,
+ 0.1851851851851850,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2372881355932200,
+ 0.2295081967213110,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2096774193548390,
+ 0.2096774193548390,
+ 0.2096774193548390,
+ 0.2063492063492060,
+ 0.2063492063492060,
+ 0.2096774193548390,
+ 0.2096774193548390,
+ 0.2222222222222220,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2295081967213110,
+ 0.2166666666666670,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2419354838709680,
+ 0.2459016393442620,
+ 0.2622950819672130,
+ 0.2622950819672130,
+ 0.2500000000000000,
+ 0.2372881355932200,
+ 0.2372881355932200,
+ 0.2372881355932200,
+ 0.2372881355932200,
+ 0.2372881355932200,
+ 0.2000000000000000,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2105263157894740,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1964285714285710,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1754385964912280,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1403508771929820,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1379310344827590,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1694915254237290,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1774193548387100,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1746031746031750,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1774193548387100,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1639344262295080,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1587301587301590,
+ 0.1639344262295080,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1612903225806450,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1500000000000000,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1500000000000000,
+ 0.1475409836065570,
+ 0.1475409836065570,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1311475409836070,
+ 0.1311475409836070,
+ 0.1311475409836070,
+ 0.1311475409836070,
+ 0.1311475409836070,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1166666666666670,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1129032258064520,
+ 0.1129032258064520,
+ 0.1269841269841270,
+ 0.1269841269841270,
+ 0.1269841269841270,
+ 0.1269841269841270,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1290322580645160,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1147540983606560,
+ 0.1000000000000000,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0983606557377049,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0967741935483871,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0952380952380952,
+ 0.0937500000000000,
+ 0.0937500000000000,
+ 0.0923076923076923,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0895522388059701,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0746268656716418,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0757575757575758,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0769230769230769,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0793650793650794,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0806451612903226,
+ 0.0645161290322581,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0655737704918033,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0833333333333333,
+ 0.0851063829787234,
+ 0.0652173913043478,
+ 0.0652173913043478,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0652173913043478,
+ 0.0652173913043478,
+ 0.0652173913043478,
+ 0.0666666666666667,
+ 0.0697674418604651,
+ 0.0697674418604651,
+ 0.0681818181818182,
+ 0.0666666666666667,
+ 0.0869565217391304,
+ 0.1063829787234040,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1136363636363640,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1086956521739130,
+ 0.0869565217391304,
+ 0.0666666666666667,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0625000000000000,
+ 0.0600000000000000,
+ 0.0612244897959184,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0588235294117647,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0727272727272727,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0666666666666667,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0892857142857143,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0784313725490196,
+ 0.0784313725490196,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0545454545454545,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0508474576271187,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0500000000000000,
+ 0.0508474576271187,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0689655172413793,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0714285714285714,
+ 0.0701754385964912,
+ 0.0862068965517241,
+ 0.0862068965517241,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0847457627118644,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0526315789473684,
+ 0.0526315789473684,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0517241379310345,
+ 0.0677966101694915,
+ 0.0677966101694915,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0701754385964912,
+ 0.0689655172413793,
+ 0.0689655172413793,
+ 0.0714285714285714,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0555555555555556,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0370370370370370,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0555555555555556,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0576923076923077,
+ 0.0576923076923077,
+ 0.0588235294117647,
+ 0.0600000000000000,
+ 0.0600000000000000,
+ 0.0612244897959184,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0408163265306122,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0400000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0400000000000000,
+ 0.0204081632653061,
+ 0.0208333333333333,
+ 0.0204081632653061,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0200000000000000,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0392156862745098,
+ 0.0384615384615385,
+ 0.0377358490566038,
+ 0.0377358490566038,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0576923076923077,
+ 0.0566037735849057,
+ 0.0566037735849057,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0555555555555556,
+ 0.0566037735849057,
+ 0.0754716981132075,
+ 0.0754716981132075,
+ 0.0740740740740741,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0714285714285714,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0862068965517241,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0877192982456140,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0892857142857143,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0943396226415094,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.1153846153846150,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0800000000000000,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0833333333333333,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0816326530612245,
+ 0.0833333333333333,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1000000000000000,
+ 0.1200000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1428571428571430,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1458333333333330,
+ 0.1458333333333330,
+ 0.1489361702127660,
+ 0.1458333333333330,
+ 0.1489361702127660,
+ 0.1304347826086960,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1521739130434780,
+ 0.1521739130434780,
+ 0.1702127659574470,
+ 0.1739130434782610,
+ 0.1818181818181820,
+ 0.1777777777777780,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1904761904761900,
+ 0.1860465116279070,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1860465116279070,
+ 0.2045454545454550,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2272727272727270,
+ 0.2325581395348840,
+ 0.2380952380952380,
+ 0.2380952380952380,
+ 0.2195121951219510,
+ 0.2195121951219510,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2093023255813950,
+ 0.2093023255813950,
+ 0.2045454545454550,
+ 0.2045454545454550,
+ 0.1860465116279070,
+ 0.1860465116279070,
+ 0.1860465116279070,
+ 0.1860465116279070,
+ 0.1860465116279070,
+ 0.1904761904761900,
+ 0.2093023255813950,
+ 0.2093023255813950,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2272727272727270,
+ 0.2142857142857140,
+ 0.2045454545454550,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2127659574468080,
+ 0.2173913043478260,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2549019607843140,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2549019607843140,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2692307692307690,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2745098039215690,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2653061224489800,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2600000000000000,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2400000000000000,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2244897959183670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2127659574468080,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2600000000000000,
+ 0.2745098039215690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2641509433962260,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2830188679245280,
+ 0.2641509433962260,
+ 0.2641509433962260,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2692307692307690,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2352941176470590,
+ 0.2352941176470590,
+ 0.2200000000000000,
+ 0.2200000000000000,
+ 0.2200000000000000,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2115384615384620,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2181818181818180,
+ 0.2321428571428570,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2363636363636360,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2545454545454540,
+ 0.2678571428571430,
+ 0.2678571428571430,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2545454545454540,
+ 0.2407407407407410,
+ 0.2407407407407410,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2264150943396230,
+ 0.2307692307692310,
+ 0.2156862745098040,
+ 0.2156862745098040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.2264150943396230,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2075471698113210,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.1960784313725490,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2037037037037040,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2075471698113210,
+ 0.2037037037037040,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1481481481481480,
+ 0.1481481481481480,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1454545454545450,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1090909090909090,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1132075471698110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1111111111111110,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1272727272727270,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1296296296296300,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1320754716981130,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1176470588235290,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1346153846153850,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1372549019607840,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1224489795918370,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1200000000000000,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1200000000000000,
+ 0.1372549019607840,
+ 0.1428571428571430,
+ 0.1458333333333330,
+ 0.1458333333333330,
+ 0.1489361702127660,
+ 0.1521739130434780,
+ 0.1521739130434780,
+ 0.1521739130434780,
+ 0.1702127659574470,
+ 0.1875000000000000,
+ 0.2040816326530610,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2083333333333330,
+ 0.2127659574468080,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2444444444444440,
+ 0.2272727272727270,
+ 0.2093023255813950,
+ 0.2045454545454550,
+ 0.2045454545454550,
+ 0.2045454545454550,
+ 0.2045454545454550,
+ 0.2045454545454550,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2222222222222220,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2553191489361700,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2391304347826090,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2444444444444440,
+ 0.2391304347826090,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2653061224489800,
+ 0.2708333333333330,
+ 0.2765957446808510,
+ 0.2708333333333330,
+ 0.2857142857142860,
+ 0.2857142857142860,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.3061224489795920,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.2888888888888890,
+ 0.2826086956521740,
+ 0.2888888888888890,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2790697674418600,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3191489361702130,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3191489361702130,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3265306122448980,
+ 0.3333333333333330,
+ 0.3469387755102040,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3469387755102040,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3265306122448980,
+ 0.3061224489795920,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.2916666666666670,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.2978723404255320,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.2916666666666670,
+ 0.3061224489795920,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3269230769230770,
+ 0.3333333333333330,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3207547169811320,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3454545454545450,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3396226415094340,
+ 0.3461538461538460,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3518518518518520,
+ 0.3518518518518520,
+ 0.3518518518518520,
+ 0.3396226415094340,
+ 0.3269230769230770,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3200000000000000,
+ 0.3061224489795920,
+ 0.3200000000000000,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3269230769230770,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3400000000000000,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3400000000000000,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3469387755102040,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3673469387755100,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.3958333333333330,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4130434782608700,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4166666666666670,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4375000000000000,
+ 0.4468085106382980,
+ 0.4468085106382980,
+ 0.4468085106382980,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4565217391304350,
+ 0.4565217391304350,
+ 0.4565217391304350,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4444444444444440,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4347826086956520,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4130434782608700,
+ 0.4130434782608700,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4255319148936170,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4285714285714290,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4166666666666670,
+ 0.4200000000000000,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4081632653061220,
+ 0.4000000000000000,
+ 0.4117647058823530,
+ 0.4038461538461540,
+ 0.4150943396226420,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4038461538461540,
+ 0.3962264150943400,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.3877551020408160,
+ 0.3921568627450980,
+ 0.3921568627450980,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3846153846153850,
+ 0.3962264150943400,
+ 0.4038461538461540,
+ 0.4038461538461540,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4181818181818180,
+ 0.4074074074074070,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4000000000000000,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3928571428571430,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3703703703703700,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3888888888888890,
+ 0.3962264150943400,
+ 0.4074074074074070,
+ 0.4074074074074070,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3888888888888890,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4074074074074070,
+ 0.4000000000000000,
+ 0.3962264150943400,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3773584905660380,
+ 0.3773584905660380,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3584905660377360,
+ 0.3773584905660380,
+ 0.3773584905660380,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3518518518518520,
+ 0.3518518518518520,
+ 0.3518518518518520,
+ 0.3518518518518520,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3518518518518520,
+ 0.3454545454545450,
+ 0.3454545454545450,
+ 0.3571428571428570,
+ 0.3571428571428570,
+ 0.3571428571428570,
+ 0.3571428571428570,
+ 0.3508771929824560,
+ 0.3508771929824560,
+ 0.3508771929824560,
+ 0.3508771929824560,
+ 0.3392857142857140,
+ 0.3333333333333330,
+ 0.3396226415094340,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3529411764705880,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3333333333333330,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3800000000000000,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3653846153846150,
+ 0.3653846153846150,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3673469387755100,
+ 0.3469387755102040,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3469387755102040,
+ 0.3400000000000000,
+ 0.3400000000000000,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3529411764705880,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3469387755102040,
+ 0.3600000000000000,
+ 0.3725490196078430,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3846153846153850,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4038461538461540,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.4038461538461540,
+ 0.4259259259259260,
+ 0.4259259259259260,
+ 0.4259259259259260,
+ 0.4259259259259260,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4150943396226420,
+ 0.4000000000000000,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.3888888888888890,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3888888888888890,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3703703703703700,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3773584905660380,
+ 0.3773584905660380,
+ 0.3962264150943400,
+ 0.3962264150943400,
+ 0.3888888888888890,
+ 0.3818181818181820,
+ 0.3928571428571430,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4035087719298250,
+ 0.4137931034482760,
+ 0.4137931034482760,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4210526315789470,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4210526315789470,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4107142857142860,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3888888888888890,
+ 0.3818181818181820,
+ 0.3818181818181820,
+ 0.3584905660377360,
+ 0.3584905660377360,
+ 0.3461538461538460,
+ 0.3461538461538460,
+ 0.3137254901960780,
+ 0.3000000000000000,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3137254901960780,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.3000000000000000,
+ 0.2800000000000000,
+ 0.2653061224489800,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.3076923076923080,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.2941176470588230,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3207547169811320,
+ 0.3090909090909090,
+ 0.3090909090909090,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2962962962962960,
+ 0.2909090909090910,
+ 0.2777777777777780,
+ 0.2641509433962260,
+ 0.2777777777777780,
+ 0.2777777777777780,
+ 0.2727272727272730,
+ 0.2857142857142860,
+ 0.2807017543859650,
+ 0.2758620689655170,
+ 0.2758620689655170,
+ 0.2758620689655170,
+ 0.2758620689655170,
+ 0.2758620689655170,
+ 0.2631578947368420,
+ 0.2631578947368420,
+ 0.2631578947368420,
+ 0.2586206896551720,
+ 0.2456140350877190,
+ 0.2456140350877190,
+ 0.2456140350877190,
+ 0.2456140350877190,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2321428571428570,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2241379310344830,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2280701754385960,
+ 0.2142857142857140,
+ 0.2142857142857140,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.2068965517241380,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1929824561403510,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1964285714285710,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1818181818181820,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1785714285714290,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1896551724137930,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1754385964912280,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1724137931034480,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1578947368421050,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1607142857142860,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1636363636363640,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1698113207547170,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1730769230769230,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1764705882352940,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1600000000000000,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1568627450980390,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1063829787234040,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1400000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1333333333333330,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1777777777777780,
+ 0.1956521739130430,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2244897959183670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2765957446808510,
+ 0.2916666666666670,
+ 0.2978723404255320,
+ 0.3125000000000000,
+ 0.3265306122448980,
+ 0.3265306122448980,
+ 0.3333333333333330,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3333333333333330,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3333333333333330,
+ 0.3260869565217390,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.2790697674418600,
+ 0.2666666666666670,
+ 0.2666666666666670,
+ 0.2826086956521740,
+ 0.2826086956521740,
+ 0.2888888888888890,
+ 0.2888888888888890,
+ 0.2727272727272730,
+ 0.2558139534883720,
+ 0.2558139534883720,
+ 0.2558139534883720,
+ 0.2500000000000000,
+ 0.2666666666666670,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2553191489361700,
+ 0.2553191489361700,
+ 0.2708333333333330,
+ 0.2500000000000000,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2549019607843140,
+ 0.2549019607843140,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2400000000000000,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2448979591836730,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2800000000000000,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2800000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2448979591836730,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2553191489361700,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2608695652173910,
+ 0.2553191489361700,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2708333333333330,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2653061224489800,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2800000000000000,
+ 0.2857142857142860,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2857142857142860,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2826086956521740,
+ 0.2826086956521740,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2888888888888890,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3191489361702130,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3111111111111110,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3023255813953490,
+ 0.3023255813953490,
+ 0.2790697674418600,
+ 0.2857142857142860,
+ 0.3023255813953490,
+ 0.3023255813953490,
+ 0.3023255813953490,
+ 0.3181818181818180,
+ 0.3333333333333330,
+ 0.3617021276595740,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4117647058823530,
+ 0.4000000000000000,
+ 0.3877551020408160,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.3800000000000000,
+ 0.3800000000000000,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3673469387755100,
+ 0.3541666666666670,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3404255319148940,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3043478260869570,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2727272727272730,
+ 0.2888888888888890,
+ 0.2888888888888890,
+ 0.2826086956521740,
+ 0.2888888888888890,
+ 0.2888888888888890,
+ 0.3043478260869570,
+ 0.3191489361702130,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3333333333333330,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3555555555555560,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3478260869565220,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3478260869565220,
+ 0.3478260869565220,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3541666666666670,
+ 0.3541666666666670,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3617021276595740,
+ 0.3541666666666670,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3600000000000000,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3725490196078430,
+ 0.3800000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3877551020408160,
+ 0.3877551020408160,
+ 0.3750000000000000,
+ 0.3750000000000000,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3695652173913040,
+ 0.3617021276595740,
+ 0.3695652173913040,
+ 0.3555555555555560,
+ 0.3409090909090910,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3777777777777780,
+ 0.3863636363636360,
+ 0.3953488372093020,
+ 0.3953488372093020,
+ 0.3953488372093020,
+ 0.3953488372093020,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3863636363636360,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3636363636363640,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3777777777777780,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3414634146341460,
+ 0.3170731707317070,
+ 0.3095238095238100,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3095238095238100,
+ 0.3095238095238100,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3095238095238100,
+ 0.3095238095238100,
+ 0.3095238095238100,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3095238095238100,
+ 0.3095238095238100,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3555555555555560,
+ 0.3409090909090910,
+ 0.3409090909090910,
+ 0.3488372093023260,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3829787234042550,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.3913043478260870,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.4042553191489360,
+ 0.3913043478260870,
+ 0.4000000000000000,
+ 0.4000000000000000,
+ 0.3863636363636360,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3636363636363640,
+ 0.3488372093023260,
+ 0.3488372093023260,
+ 0.3488372093023260,
+ 0.3409090909090910,
+ 0.3255813953488370,
+ 0.3255813953488370,
+ 0.3181818181818180,
+ 0.3181818181818180,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3260869565217390,
+ 0.3404255319148940,
+ 0.3404255319148940,
+ 0.3260869565217390,
+ 0.3023255813953490,
+ 0.3181818181818180,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3043478260869570,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3260869565217390,
+ 0.3260869565217390,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.3260869565217390,
+ 0.3111111111111110,
+ 0.3111111111111110,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.2954545454545450,
+ 0.3260869565217390,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3191489361702130,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.3125000000000000,
+ 0.2978723404255320,
+ 0.2826086956521740,
+ 0.2826086956521740,
+ 0.2765957446808510,
+ 0.2978723404255320,
+ 0.2978723404255320,
+ 0.2916666666666670,
+ 0.2765957446808510,
+ 0.2765957446808510,
+ 0.2765957446808510,
+ 0.2765957446808510,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.3061224489795920,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2916666666666670,
+ 0.2708333333333330,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2500000000000000,
+ 0.2340425531914890,
+ 0.2340425531914890,
+ 0.2173913043478260,
+ 0.2173913043478260,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.2173913043478260,
+ 0.2173913043478260,
+ 0.2000000000000000,
+ 0.2000000000000000,
+ 0.2173913043478260,
+ 0.2173913043478260,
+ 0.1956521739130430,
+ 0.1956521739130430,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2291666666666670,
+ 0.2244897959183670,
+ 0.2083333333333330,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1875000000000000,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1739130434782610,
+ 0.1702127659574470,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1836734693877550,
+ 0.1875000000000000,
+ 0.1914893617021280,
+ 0.1914893617021280,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1739130434782610,
+ 0.1777777777777780,
+ 0.1702127659574470,
+ 0.1702127659574470,
+ 0.1702127659574470,
+ 0.1702127659574470,
+ 0.1702127659574470,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1875000000000000,
+ 0.1836734693877550,
+ 0.1836734693877550,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1666666666666670,
+ 0.1458333333333330,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1428571428571430,
+ 0.1458333333333330,
+ 0.1458333333333330,
+ 0.1458333333333330,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1276595744680850,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1250000000000000,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1224489795918370,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1041666666666670,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1020408163265310,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0800000000000000,
+ 0.0816326530612245,
+ 0.1000000000000000,
+ 0.1000000000000000,
+ 0.0980392156862745,
+ 0.0980392156862745,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0961538461538462,
+ 0.0943396226415094,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0909090909090909,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0925925925925926,
+ 0.0909090909090909,
+ 0.0740740740740741,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0727272727272727,
+ 0.0714285714285714,
+ 0.0545454545454545,
+ 0.0545454545454545,
+ 0.0535714285714286,
+ 0.0535714285714286,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0363636363636364,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0357142857142857,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0350877192982456,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0344827586206897,
+ 0.0175438596491228,
+ 0.0175438596491228,
+ 0.0175438596491228
+ }
+ }
+ };
+
+} /* namespace prob_features */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
+#define _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+namespace similarity {
+
+ template <class T> ctx::share_t overlap1stOver2nd(const T &s1, const T &s2)
+ {
+ if (s2.empty()) {
+ return 0;
+ }
+ int count = 0;
+ for (auto e : s2) {
+ if (s1.find(e) != s1.end()) {
+ count++;
+ }
+ }
+ return (ctx::share_t) count / s2.size();
+ }
+
+ template <class T> ctx::share_t overlapBiggerOverSmaller(const T &s1, const T &s2)
+ {
+ if (s1.size() > s2.size()) {
+ return similarity::overlap1stOver2nd(s1, s2);
+ } else {
+ return similarity::overlap1stOver2nd(s2, s1);
+ }
+ }
+
+ template <class T> bool isJoint(const T &s1, const T &s2)
+ {
+ for (auto e : s2) {
+ if (s1.find(e) != s1.end()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+} /* namespace similarity */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <ctime>
+#include <memory>
+#include <Types.h>
+#include "user_places.h"
+#include "places_detector.h"
+#include "../place_recognition_types.h"
+
+ctx::UserPlaces::UserPlaces(PlaceRecogMode energyMode):
+ __visitDetector(nullptr),
+ __placesDetector(nullptr),
+ __placesDetectorTimerId(-1)
+{
+ time_t now = std::time(nullptr);
+ __visitDetector = new(std::nothrow) VisitDetector(now, energyMode);
+ if (__visitDetector == nullptr) {
+ _E("Cannot initialize __visitDetector");
+ return;
+ }
+
+ __placesDetector = new(std::nothrow) PlacesDetector();
+ if (__placesDetector == nullptr) {
+ _E("Cannot initialize __placesDetector");
+ return;
+ }
+
+ __placesDetectorTimerId = __timerManager.setAt( // execute once every night
+ PLACES_DETECTOR_TASK_START_HOUR,
+ PLACES_DETECTOR_TASK_START_MINUTE,
+ DayOfWeek::EVERYDAY,
+ __placesDetector);
+ if (__placesDetectorTimerId < 0) {
+ _E("PlacesDetector timer set FAIL");
+ return;
+ } else {
+ _D("PlacesDetector timer set SUCCESS");
+ }
+}
+
+ctx::UserPlaces::~UserPlaces()
+{
+ if (__placesDetectorTimerId >= 0) {
+ __timerManager.remove(__placesDetectorTimerId);
+ _D("PlacesDetector timer removed");
+ }
+
+ if (__visitDetector) {
+ delete __visitDetector;
+ }
+
+ if (__placesDetector) {
+ delete __placesDetector;
+ }
+};
+
+std::vector<std::shared_ptr<ctx::Place>> ctx::UserPlaces::getPlaces()
+{
+ if (__placesDetector) {
+ return __placesDetector->getPlaces();
+ } else {
+ return std::vector<std::shared_ptr<ctx::Place>>();
+ }
+}
+
+/*
+ * Example JSON output:
+ * ------------------------------------------------
+ * {
+ * "PlacesList": [
+ * {
+ * "TypeId": 2,
+ * "Name": "Work",
+ * "GeoLatitude": 10.94433,
+ * "GeoLongitude": 50.85504,
+ * "WifiAPs": "00:1f:f3:5b:2b:1f,15:34:56:78:9a:ba,13:34:56:78:9a:ba",
+ * "CreateDate": 12132567
+ * },
+ * {
+ * "TypeId": 1,
+ * "Name": "Home",
+ * "GeoLatitude": 10.96233,
+ * "GeoLongitude": 50.84304,
+ * "WifiAPs": "aa:bb:cc:dd:ee:ff,10:34:56:78:9a:bc",
+ * "CreateDate": 12132889
+ * },
+ * {
+ * "TypeId": 3,
+ * "Name": "Other",
+ * "GeoLatitude": 10.96553,
+ * "GeoLongitude": 50.80404,
+ * "WifiAPs": "12:34:56:78:9a:ba",
+ * "CreateDate": 12132346
+ * }
+ * ]
+ * }
+ */
+ctx::Json ctx::UserPlaces::composeJson(std::vector<std::shared_ptr<Place>> places)
+{
+ ctx::Json data;
+ for (std::shared_ptr<ctx::Place> place : places) {
+ ctx::Json placeJson;
+ placeJson.set(NULL, PLACE_CATEG_ID, place->categId);
+ placeJson.set(NULL, PLACE_CATEG_CONFIDENCE, place->categConfidence);
+ placeJson.set(NULL, PLACE_NAME, place->name);
+ if (place->locationValid) {
+ placeJson.set(NULL, PLACE_GEO_LATITUDE, place->location.latitude);
+ placeJson.set(NULL, PLACE_GEO_LONGITUDE, place->location.longitude);
+ }
+ placeJson.set(NULL, PLACE_WIFI_APS, place->wifiAps);
+ placeJson.set(NULL, PLACE_CREATE_DATE, static_cast<int>(place->createDate));
+ data.append(NULL, DATA_READ, placeJson);
+ }
+ return data;
+}
+
+void ctx::UserPlaces::setMode(PlaceRecogMode energyMode)
+{
+ if (__visitDetector) {
+ __visitDetector->setMode(energyMode);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
+
+#include <vector>
+#include <Json.h>
+#include <TimerManager.h>
+#include "visit_detector.h"
+#include "places_detector.h"
+#include "user_places_types.h"
+
+namespace ctx {
+
+ class UserPlaces {
+
+ private:
+ VisitDetector *__visitDetector;
+ PlacesDetector *__placesDetector;
+ int __placesDetectorTimerId;
+ TimerManager __timerManager;
+
+ public:
+ UserPlaces(PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE);
+ ~UserPlaces();
+
+ void setMode(PlaceRecogMode energyMode);
+ std::vector<std::shared_ptr<Place>> getPlaces();
+ static Json composeJson(std::vector<std::shared_ptr<Place>> places);
+
+ }; /* class UserPlaces */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
+
+/*
+ * WiFi scanning frequency (in minutes) in PLACE_RECOG_HIGH_ACCURACY_MODE.
+ */
+#define WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY 3
+
+/*
+ * WiFi scanning frequency (in minutes) in PLACE_RECOG_LOW_POWER_MODE.
+ */
+#define WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER 60
+
+/*
+ * Time window taken into consideration (in seconds) in PLACE_RECOG_HIGH_ACCURACY_MODE.
+ */
+#define VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY 360
+
+/*
+ * Time window taken into consideration (in seconds) in PLACE_RECOG_LOW_POWER_MODE.
+ */
+#define VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER 3600
+
+/*
+ * Overlap threshold between two sets of mac addresses (overlap
+ * coefficient for two sets should be higher than this threshold
+ * in order to detect stable radio environment); =< 1.0
+ * New parameter in algorithm compared to original version of PlaceSense!
+ */
+#define VISIT_DETECTOR_OVERLAP 0.8f
+
+/*
+ * Specifies how many stable intervals must be seen to
+ * indicate an entrance to a place; >= 1
+ */
+#define VISIT_DETECTOR_STABLE_DEPTH 1
+
+/*
+ * Representatives threshold (representatnive beacon
+ * response rate should be higher than this threshold); =< 1.0
+ */
+#define VISIT_DETECTOR_REP_THRESHOLD 0.9f
+
+/*
+ * Specifies how long scans must be unstable to indicate a leave form a place; >= 1
+ */
+#define VISIT_DETECTOR_TOLERANCE_DEPTH 3
+
+#define PLACES_DETECTOR_TASK_START_HOUR 3
+#define PLACES_DETECTOR_TASK_START_MINUTE 11
+#define PLACES_DETECTOR_RETENTION_DAYS 30
+#define PLACES_DETECTOR_RETENTION_SECONDS 24 * 60 * 60 * PLACES_DETECTOR_RETENTION_DAYS
+
+/*
+ * Number of digits after decimal point used in geo coordinates.
+ */
+#define GEO_LOCATION_PRECISION 7
+
+/*
+ * Minimal duration of visit (in minutes) taking into account for place detection
+ */
+#define PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES 15
+
+/*
+ * Maximum duration of visit (in minutes) taking into account for place detection
+ */
+#define PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES 5 * 24 * 60
+
+/*
+ * Minimum visits number per place
+ */
+#define PLACES_DETECTOR_MIN_VISITS_PER_PLACE 1
+
+/*
+ * Minimum visits number per big place
+ */
+#define PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE 4
+
+/*
+ * Minimal visit category score for taking this visit into consideration during
+ * place categorization
+ */
+#define PLACES_CATEGER_MIN_VISITS_SCORE 0.1
+
+/*
+ * Minimum visits number per home
+ */
+#define PLACES_CATEGER_MIN_VISITS_PER_HOME 3
+
+/*
+ * Minimum visits number per work
+ */
+#define PLACES_CATEGER_MIN_VISITS_PER_WORK 2
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <set>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <algorithm>
+#include <Types.h>
+#include "user_places_types.h"
+#include "user_places_params.h"
+#include "debug_utils.h"
+
+#define __MAC_STRING_COMPONENTS_SEPARATOR ':'
+#define __MAC_SET_STRING_DELIMITER ','
+
+ctx::Mac::Mac(const std::string& str)
+{
+ std::stringstream ss(str);
+ try {
+ ss >> *this;
+ } catch (std::runtime_error &e) {
+ _E("%s", e.what());
+ }
+}
+
+ctx::Mac::Mac(const char *str)
+{
+ std::stringstream ss(str);
+ try {
+ ss >> *this;
+ } catch (std::runtime_error &e) {
+ _E("%s", e.what());
+ }
+}
+
+std::istream& ctx::operator>>(std::istream &input, ctx::Mac &mac)
+{
+ int h;
+ char colon;
+ for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
+ input >> std::hex;
+ input >> h;
+ mac.c[i] = h;
+ if (i + 1 >= ctx::Mac::MAC_SIZE) {
+ break;
+ }
+ input >> colon;
+ if (colon != __MAC_STRING_COMPONENTS_SEPARATOR) {
+ throw std::runtime_error("Invalid MAC format");
+ }
+ }
+ input >> std::dec;
+ return input;
+}
+
+std::ostream& ctx::operator<<(std::ostream &output, const ctx::Mac &mac)
+{
+ size_t i = 0;
+ while (true) {
+ output << std::hex << std::setfill('0') << std::setw(2);
+ output << static_cast<int>(mac.c[i]);
+ i++;
+ if (i >= Mac::MAC_SIZE) {
+ break;
+ }
+ output << __MAC_STRING_COMPONENTS_SEPARATOR;
+ }
+ output << std::dec;
+ return output;
+}
+
+ctx::Mac::operator std::string() const
+{
+ std::stringstream ss;
+ ss << *this;
+ return ss.str();
+}
+
+bool ctx::operator==(const Mac &m1, const Mac &m2)
+{
+ for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
+ if (m1.c[i] != m2.c[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool ctx::operator!=(const Mac &m1, const Mac &m2)
+{
+ return !(m1 == m2);
+}
+
+bool ctx::operator<(const Mac &m1, const Mac &m2)
+{
+ unsigned char c1, c2;
+ for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
+ c1 = m1.c[i];
+ c2 = m2.c[i];
+ if (c1 < c2) {
+ return true;
+ }
+ if (c1 > c2) {
+ return false;
+ }
+ }
+ return false; // they are equal
+}
+
+std::istream& ctx::operator>>(std::istream &input, ctx::MacSet &macSet)
+{
+ Mac mac;
+ char delimeter;
+ while (!input.eof()) {
+ try {
+ input >> mac;
+ } catch (std::runtime_error &e) {
+ _E("Cannot read macSet. Exception: %s", e.what());
+ break;
+ }
+ macSet.insert(mac);
+ if (input.eof()) {
+ break;
+ }
+ delimeter = input.get();
+ if (delimeter != __MAC_SET_STRING_DELIMITER) {
+ input.unget();
+ break;
+ }
+ }
+ return input;
+}
+
+std::ostream& ctx::operator<<(std::ostream &output, const ctx::MacSet &macSet)
+{
+ std::vector<Mac> macVec(macSet.size());
+ std::copy(macSet.begin(), macSet.end(), macVec.begin());
+ std::sort(macVec.begin(), macVec.end());
+
+ bool first = true;
+ for (auto &mac: macVec) {
+ if (first) {
+ first = false;
+ } else {
+ output << __MAC_SET_STRING_DELIMITER;
+ }
+ output << mac;
+ }
+ return output;
+}
+
+void ctx::LocationEvent::log()
+{
+ std::string time_str = DebugUtils::humanReadableDateTime(timestamp, "%T", 9);
+#ifdef TIZEN_ENGINEER_MODE
+ _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s, method=%d",
+ coordinates.latitude,
+ coordinates.longitude,
+ coordinates.accuracy,
+ time_str.c_str(),
+ method);
+#else /* TIZEN_ENGINEER_MODE */
+ _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s",
+ coordinates.latitude,
+ coordinates.longitude,
+ coordinates.accuracy,
+ time_str.c_str());
+#endif /* TIZEN_ENGINEER_MODE */
+}
+
+void ctx::Visit::setLocation(Location location_)
+{
+ locationValid = true;
+ location = location_;
+}
+
+void ctx::Visit::printShort2Stream(std::ostream &out) const
+{
+ // print only valid visits
+ if (interval.end != 0) {
+ float duration = ((float) (interval.end - interval.start)) / 3600; // [h]
+ out << "__VISIT " << duration << "h: ";
+ out << DebugUtils::humanReadableDateTime(interval.start, "%m/%d %H:%M", 15) << " ÷ ";
+ out << DebugUtils::humanReadableDateTime(interval.end, "%m/%d %H:%M", 15) << std::endl;
+ }
+}
+
+bool ctx::operator==(const ctx::Visit &v1, const ctx::Visit &v2)
+{
+ return v1.interval.start == v2.interval.start
+ && v1.interval.end == v2.interval.end
+ && v1.categs == v2.categs
+ && v1.location.latitude == v2.location.latitude
+ && v1.location.longitude == v2.location.longitude
+ && v1.location.accuracy == v2.location.accuracy
+ && v1.locationValid == v2.locationValid
+ && v1.macSet == v2.macSet;
+}
+
+ctx::MacSet ctx::macSetFromString(const std::string &str)
+{
+ MacSet macSet;
+ std::stringstream ss;
+ ss << str;
+ ss >> macSet;
+ return macSet;
+}
+
+bool ctx::operator>(const Mac &m1, const Mac &m2)
+{
+ return m2 < m1;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::macSetFromMacs2Counts(const Macs2Counts &macs2Counts)
+{
+ std::shared_ptr<MacSet> macSet(std::make_shared<MacSet>());
+ for (auto &macCount: macs2Counts) {
+ macSet->insert(macCount.first);
+ }
+ return macSet;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets)
+{
+ std::shared_ptr<MacSet> unionSet = std::make_shared<MacSet>();
+ for (std::shared_ptr<MacSet> macSet : macSets) {
+ unionSet->insert(macSet->begin(), macSet->end());
+ }
+ return unionSet;
+}
+
+ctx::Interval::Interval(time_t start_, time_t end_) : start(start_), end(end_) {
+ if (end_ < start_) {
+ _E("Negative interval, start=%d, end=%d", start_, end_);
+ }
+}
+
+void ctx::Place::print2Stream(std::ostream &out) const
+{
+ out << "PLACE:" << std::endl;
+ out << "__CATEGORY: " << name << std::endl;
+ if (locationValid) {
+ out << "__LOCATION: lat=" << std::setprecision(GEO_LOCATION_PRECISION + 2) << location.latitude;
+ out << ", lon=" << location.longitude << std::setprecision(5) << std::endl;
+ }
+ out << "__WIFI:" << wifiAps << std::endl;
+ out << "__CREATE_DATE: " << DebugUtils::humanReadableDateTime(createDate, "%F %T", 80) << std::endl;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
+#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
+
+#include <memory>
+#include <vector>
+#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include "graph.h"
+#include "../place_recognition_types.h"
+#include <string>
+#include <ctime>
+
+namespace ctx {
+
+ /*
+ * type for numerical computations
+ */
+ typedef double num_t;
+
+ /*
+ * mac address
+ */
+ class Mac {
+
+ public:
+ const static size_t MAC_SIZE = 6; // number of bytes for mac address.
+ unsigned char c[MAC_SIZE];
+
+ Mac() {};
+ Mac(const std::string &str);
+ Mac(const char *str);
+ operator std::string() const;
+
+ }; /* class Mac */
+
+ std::istream &operator>>(std::istream &input, ctx::Mac &mac);
+ std::ostream &operator<<(std::ostream &output, const ctx::Mac &mac);
+ bool operator==(const ctx::Mac &m1, const ctx::Mac &m2);
+ bool operator!=(const ctx::Mac &m1, const ctx::Mac &m2);
+ bool operator<(const ctx::Mac &m1, const ctx::Mac &m2);
+ bool operator>(const ctx::Mac &m1, const ctx::Mac &m2);
+
+} /* namespace ctx */
+
+namespace std {
+
+ template <> struct hash<ctx::Mac> {
+ size_t operator()(const ctx::Mac & m) const {
+ size_t h = 1;
+ for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
+ h = h * 37 + m.c[i];
+ }
+ return h;
+ }
+ };
+
+} /* namespace std */
+
+namespace ctx {
+
+ typedef float share_t;
+ typedef int count_t;
+
+ typedef std::unordered_map<ctx::Mac, ctx::count_t> Macs2Counts;
+ typedef std::unordered_map<ctx::Mac, ctx::share_t> Macs2Shares;
+
+ typedef std::unordered_set<ctx::Mac> MacSet;
+
+ std::istream &operator>>(std::istream &input, ctx::MacSet &macSet);
+ std::ostream &operator<<(std::ostream &output, const ctx::MacSet &macSet);
+ ctx::MacSet macSetFromString(const std::string &str);
+
+ std::shared_ptr<MacSet> macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets);
+
+ struct Interval {
+ time_t start;
+ time_t end;
+
+ Interval(time_t start, time_t end);
+ };
+
+} /* namespace ctx */
+
+namespace std {
+
+ template <> struct hash<ctx::Interval> {
+ size_t operator()(const ctx::Interval & interval) const {
+ return interval.end * interval.start;
+ }
+ };
+
+} /* namespace std */
+
+namespace ctx {
+
+ /*
+ * fully describes interval data after the interval is finished
+ */
+ struct Frame {
+ Interval interval;
+ count_t numberOfTimestamps;
+ Macs2Counts macs2Counts;
+
+ Frame(Interval interval_) : interval(interval_), numberOfTimestamps(0) {};
+ };
+
+ /*
+ * mac address + its timestamp
+ */
+ struct MacEvent {
+ time_t timestamp;
+ Mac mac;
+
+ MacEvent(time_t timestamp_, Mac mac_) : timestamp(timestamp_), mac(mac_) {}
+ };
+
+ typedef std::map<int, num_t> Categs; // scores of categories
+
+ struct Location {
+ double latitude;
+ double longitude;
+ double accuracy; // [m]
+
+ Location(double latitude_ = 0.0, double longitude_ = 0.0, double accuracy_ = -1.0)
+ : latitude(latitude_), longitude(longitude_), accuracy(accuracy_) {}
+
+ }; /* struct Location */
+
+#ifdef TIZEN_ENGINEER_MODE
+ enum LocationSource {
+ LOCATION_METHOD_REQUEST = 0,
+ LOCATION_METHOD_GET_LOCATION = 1,
+ LOCATION_METHOD_GET_LAST_LOCATION = 2
+ };
+#endif /* TIZEN_ENGINEER_MODE */
+
+ /*
+ * location + timestamp + method
+ */
+ struct LocationEvent {
+ Location coordinates;
+ time_t timestamp;
+
+#ifdef TIZEN_ENGINEER_MODE
+ LocationSource method;
+
+ LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_, LocationSource method_) :
+ coordinates(latitude_, longitude_, accuracy_),
+ timestamp(timestamp_), method(method_) {}
+#else /* TIZEN_ENGINEER_MODE */
+ LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_) :
+ coordinates(latitude_, longitude_, accuracy_),
+ timestamp(timestamp_) {}
+#endif /* TIZEN_ENGINEER_MODE */
+
+ void log();
+
+ }; /* struct LocationEvent */
+
+ struct Visit {
+ Interval interval;
+ std::shared_ptr<MacSet> macSet;
+ Categs categs;
+ bool locationValid;
+ Location location; // makes sense if locationValid == true;
+
+ Visit(Interval interval_, std::shared_ptr<MacSet> macSet_ = std::make_shared<MacSet>(), Categs categs_ = Categs()) :
+ interval(interval_),
+ macSet(macSet_),
+ categs(categs_),
+ locationValid(false) {}
+ void setLocation(Location location);
+ void printShort2Stream(std::ostream &out) const;
+
+ }; /* struct Visit */
+
+ bool operator==(const Visit &v1, const Visit &v2);
+ typedef std::vector<Visit> Visits;
+ typedef std::vector<MacEvent> MacEvents; // used to store current interval logs
+
+ std::shared_ptr<MacSet> macSetFromMacs2Counts(const Macs2Counts &macs2Counts);
+
+ typedef float confidence_t;
+
+ class Place {
+
+ public:
+ PlaceCategId categId; // category of a place (work/home/other)
+ confidence_t categConfidence; // confidence of the above category - between [0,1]
+ std::string name; // for now: "work"/"home"/"other"
+ bool locationValid;
+ Location location; // makes sense if locationValid == true;
+ std::string wifiAps; // WiFi APs MAC addresses separated by ","
+ time_t createDate; // The last update time of this place
+
+ void print2Stream(std::ostream &out) const;
+
+ }; /* class Place */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "visit_categer.h"
+#include "mahal.h"
+#include <time.h>
+#include "../place_recognition_types.h"
+#include "prob_features_model.h"
+#include <Types.h>
+
+// categorizer model parameters trained offline (implemented in python):
+const std::map<int, ctx::MahalModel> ctx::VisitCateger::__models({
+{
+ PLACE_CATEG_ID_HOME,
+ ctx::MahalModel(
+ {
+ 0.588408417316, 0.475154840361, -0.564085141865, 0.077711893790, 0.782630398597, -0.650926403250, -0.101943950378
+ },
+ {
+ 0.797977863370, -0.133179879257, 0.242803062646, -0.059448581046, -0.117039646748, 0.097645535057, 0.014250290052,
+ -0.133179879257, 1.028900241400, -0.252245407243, 0.058455883835, -0.283950879851, 0.172204076583, 0.247906065767,
+ 0.242803062646, -0.252245407243, 1.832134785177, 0.327188225606, 0.874905851092, -0.371088938012, -1.289816938938,
+ -0.059448581046, 0.058455883835, 0.327188225606, 1.455090164348, 0.138363721074, 0.216985279422, -1.113021128017,
+ -0.117039646748, -0.283950879851, 0.874905851092, 0.138363721074, 1.379674755873, -0.977922749615, -0.738895486376,
+ 0.097645535057, 0.172204076583, -0.371088938012, 0.216985279422, -0.977922749615, 0.899928922718, -0.158101631251,
+ 0.014250290052, 0.247906065767, -1.289816938938, -1.113021128017, -0.738895486376, -0.158101631251, 2.644105309746
+ })
+},
+{
+ PLACE_CATEG_ID_WORK,
+ ctx::MahalModel(
+ {
+ -0.128092670982, -0.762177819157, 0.262924477521, -0.412038966097, -1.049141893517, 1.104760800499, -0.628939955525
+ },
+ {
+ 15.751249839350, 11.389025401325, -9.885346240379, -0.010809392387, -1.308837060762, 0.970778241189, 0.558946631235,
+ 11.389025401325, 12.830223040140, -8.517695939156, 0.293693134532, -0.845784968295, 1.418175236596, -2.246658259974,
+ -9.885346240379, -8.517695939156, 10.222750966685, 0.390448668966, 1.095218945062, -0.403733435617, -1.815103304859,
+ -0.010809392387, 0.293693134532, 0.390448668966, 2.256864603458, 0.632080300647, -0.019551779384, -1.751417951792,
+ -1.308837060762, -0.845784968295, 1.095218945062, 0.632080300647, 3.132753467561, -1.427748733399, -4.291958669471,
+ 0.970778241189, 1.418175236596, -0.403733435617, -0.019551779384, -1.427748733399, 1.183055586213, 0.200571452172,
+ 0.558946631235, -2.246658259974, -1.815103304859, -1.751417951792, -4.291958669471, 0.200571452172, 11.668888615934
+ })
+},
+{
+ PLACE_CATEG_ID_OTHER,
+ ctx::MahalModel(
+ {
+ -0.542340098504, 0.184789511765, 0.387451546413, 0.301902661472, 0.109392397093, -0.310468874039, 0.709513920221
+ },
+ {
+ 2.153884992301, -0.129488409324, 0.136236052776, -0.138043678532, -0.227492557156, 0.117810812390, 0.265072329266,
+ -0.129488409324, 3.165213522741, -1.751520714507, 0.467831090302, -0.483916138161, 0.376293684450, 0.149387541935,
+ 0.136236052776, -1.751520714507, 2.483475248800, 0.384085303028, 0.338642175318, -0.052000492068, -0.801404345627,
+ -0.138043678532, 0.467831090302, 0.384085303028, 1.972390458477, -0.025332052563, 0.393845805027, -1.225948397955,
+ -0.227492557156, -0.483916138161, 0.338642175318, -0.025332052563, 0.890301343360, -0.549163112351, -0.746838701215,
+ 0.117810812390, 0.376293684450, -0.052000492068, 0.393845805027, -0.549163112351, 0.474674836872, 0.012417969474,
+ 0.265072329266, 0.149387541935, -0.801404345627, -1.225948397955, -0.746838701215, 0.012417969474, 2.104629121515
+ })
+}});
+
+ctx::PiecewiseLin ctx::VisitCateger::__chiApprox(
+{
+ 0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08,
+ 0.09, 0.1 , 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17,
+ 0.18, 0.19, 0.2 , 0.21, 0.22, 0.23, 0.24, 0.25, 0.26,
+ 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32, 0.33, 0.34, 0.35,
+ 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43, 0.44,
+ 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53,
+ 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62,
+ 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7 , 0.71,
+ 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8 ,
+ 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89,
+ 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
+ 0.99, 1. , 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07,
+ 1.08, 1.09, 1.1 , 1.11, 1.12, 1.13, 1.14, 1.15, 1.16,
+ 1.17, 1.18, 1.19, 1.2 , 1.21, 1.22, 1.23, 1.24, 1.25,
+ 1.26, 1.27, 1.28, 1.29, 1.3 , 1.31, 1.32, 1.33, 1.34,
+ 1.35, 1.36, 1.37, 1.38, 1.39, 1.4 , 1.41, 1.42, 1.43,
+ 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.5 , 1.51, 1.52,
+ 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.59, 1.6 , 1.61,
+ 1.62, 1.63, 1.64, 1.65, 1.66, 1.67, 1.68, 1.69, 1.7 ,
+ 1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79,
+ 1.8 , 1.81, 1.82, 1.83, 1.84, 1.85, 1.86, 1.87, 1.88,
+ 1.89, 1.9 , 1.91, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97,
+ 1.98, 1.99, 2. , 2.01, 2.02, 2.03, 2.04, 2.05, 2.06,
+ 2.07, 2.08, 2.09, 2.1 , 2.11, 2.12, 2.13, 2.14, 2.15,
+ 2.16, 2.17, 2.18, 2.19, 2.2 , 2.21, 2.22, 2.23, 2.24,
+ 2.25, 2.26, 2.27, 2.28, 2.29, 2.3 , 2.31, 2.32, 2.33,
+ 2.34, 2.35, 2.36, 2.37, 2.38, 2.39, 2.4 , 2.41, 2.42,
+ 2.43, 2.44, 2.45, 2.46, 2.47, 2.48, 2.49, 2.5 , 2.51,
+ 2.52, 2.53, 2.54, 2.55, 2.56, 2.57, 2.58, 2.59, 2.6 ,
+ 2.61, 2.62, 2.63, 2.64, 2.65, 2.66, 2.67, 2.68, 2.69,
+ 2.7 , 2.71, 2.72, 2.73, 2.74, 2.75, 2.76, 2.77, 2.78,
+ 2.79, 2.8 , 2.81, 2.82, 2.83, 2.84, 2.85, 2.86, 2.87,
+ 2.88, 2.89, 2.9 , 2.91, 2.92, 2.93, 2.94, 2.95, 2.96,
+ 2.97, 2.98, 2.99, 3. , 3.01, 3.02, 3.03, 3.04, 3.05,
+ 3.06, 3.07, 3.08, 3.09, 3.1 , 3.11, 3.12, 3.13, 3.14,
+ 3.15, 3.16, 3.17, 3.18, 3.19, 3.2 , 3.21, 3.22, 3.23,
+ 3.24, 3.25, 3.26, 3.27, 3.28, 3.29, 3.3 , 3.31, 3.32,
+ 3.33, 3.34, 3.35, 3.36, 3.37, 3.38, 3.39, 3.4 , 3.41,
+ 3.42, 3.43, 3.44, 3.45, 3.46, 3.47, 3.48, 3.49, 3.5 ,
+ 3.51, 3.52, 3.53, 3.54, 3.55, 3.56, 3.57, 3.58, 3.59,
+ 3.6 , 3.61, 3.62, 3.63, 3.64, 3.65, 3.66, 3.67, 3.68,
+ 3.69, 3.7 , 3.71, 3.72, 3.73, 3.74, 3.75, 3.76, 3.77,
+ 3.78, 3.79, 3.8 , 3.81, 3.82, 3.83, 3.84, 3.85, 3.86,
+ 3.87, 3.88, 3.89, 3.9 , 3.91, 3.92, 3.93, 3.94, 3.95,
+ 3.96, 3.97, 3.98, 3.99, 4. , 4.01, 4.02, 4.03, 4.04,
+ 4.05, 4.06, 4.07, 4.08, 4.09, 4.1 , 4.11, 4.12, 4.13,
+ 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.2 , 4.21, 4.22,
+ 4.23, 4.24, 4.25, 4.26, 4.27, 4.28, 4.29, 4.3 , 4.31,
+ 4.32, 4.33, 4.34, 4.35, 4.36, 4.37, 4.38, 4.39, 4.4 ,
+ 4.41, 4.42, 4.43, 4.44, 4.45, 4.46, 4.47, 4.48, 4.49,
+ 4.5 , 4.51, 4.52, 4.53, 4.54, 4.55, 4.56, 4.57, 4.58,
+ 4.59, 4.6 , 4.61, 4.62, 4.63, 4.64, 4.65, 4.66, 4.67,
+ 4.68, 4.69, 4.7 , 4.71, 4.72, 4.73, 4.74, 4.75, 4.76,
+ 4.77, 4.78, 4.79, 4.8 , 4.81, 4.82, 4.83, 4.84, 4.85,
+ 4.86, 4.87, 4.88, 4.89, 4.9 , 4.91, 4.92, 4.93, 4.94,
+ 4.95, 4.96, 4.97, 4.98, 4.99, 5. , 5.01, 5.02, 5.03,
+ 5.04, 5.05, 5.06, 5.07, 5.08, 5.09, 5.1 , 5.11, 5.12,
+ 5.13, 5.14, 5.15, 5.16, 5.17, 5.18, 5.19, 5.2 , 5.21,
+ 5.22, 5.23, 5.24, 5.25, 5.26, 5.27, 5.28, 5.29, 5.3 ,
+ 5.31, 5.32, 5.33, 5.34, 5.35, 5.36, 5.37, 5.38, 5.39,
+ 5.4 , 5.41, 5.42, 5.43, 5.44, 5.45, 5.46, 5.47, 5.48,
+ 5.49, 5.5 , 5.51, 5.52, 5.53, 5.54, 5.55, 5.56, 5.57,
+ 5.58, 5.59, 5.6 , 5.61, 5.62, 5.63, 5.64, 5.65, 5.66,
+ 5.67, 5.68, 5.69, 5.7 , 5.71, 5.72, 5.73, 5.74, 5.75,
+ 5.76, 5.77, 5.78, 5.79, 5.8 , 5.81, 5.82, 5.83, 5.84,
+ 5.85, 5.86, 5.87, 5.88, 5.89, 5.9 , 5.91, 5.92, 5.93,
+ 5.94, 5.95, 5.96, 5.97, 5.98, 5.99, 6. , 6.01, 6.02,
+ 6.03, 6.04, 6.05, 6.06, 6.07, 6.08, 6.09, 6.1 , 6.11,
+ 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19, 6.2 ,
+ 6.21, 6.22, 6.23, 6.24, 6.25, 6.26, 6.27, 6.28, 6.29,
+ 6.3 , 6.31, 6.32, 6.33, 6.34, 6.35, 6.36, 6.37, 6.38,
+ 6.39, 6.4 , 6.41, 6.42, 6.43, 6.44, 6.45, 6.46, 6.47,
+ 6.48, 6.49, 6.5 , 6.51, 6.52, 6.53, 6.54, 6.55, 6.56,
+ 6.57, 6.58, 6.59, 6.6 , 6.61, 6.62, 6.63, 6.64, 6.65,
+ 6.66, 6.67, 6.68, 6.69, 6.7 , 6.71, 6.72, 6.73, 6.74,
+ 6.75, 6.76, 6.77, 6.78, 6.79, 6.8 , 6.81, 6.82, 6.83,
+ 6.84, 6.85, 6.86, 6.87, 6.88, 6.89, 6.9 , 6.91, 6.92,
+ 6.93, 6.94, 6.95, 6.96, 6.97, 6.98, 6.99, 7.
+},
+{
+ 0. , 0. , 0. , 0. , 0. , 0. ,
+ 0. , 0. , 0. , 0. , 0. , 0. ,
+ 0. , 0. , 0. , 0. , 0. , 0. ,
+ 0. , 0. , 0. , 0. , 0. , 0. ,
+ 0. , 0. , 0.000001, 0.000001, 0.000001, 0.000001,
+ 0.000002, 0.000002, 0.000003, 0.000003, 0.000004, 0.000005,
+ 0.000006, 0.000007, 0.000008, 0.00001 , 0.000012, 0.000014,
+ 0.000016, 0.000019, 0.000023, 0.000026, 0.000031, 0.000035,
+ 0.000041, 0.000047, 0.000054, 0.000062, 0.00007 , 0.00008 ,
+ 0.000091, 0.000103, 0.000116, 0.000131, 0.000147, 0.000165,
+ 0.000185, 0.000207, 0.000231, 0.000257, 0.000285, 0.000316,
+ 0.00035 , 0.000387, 0.000427, 0.000471, 0.000518, 0.000569,
+ 0.000624, 0.000683, 0.000747, 0.000816, 0.00089 , 0.00097 ,
+ 0.001055, 0.001147, 0.001245, 0.001349, 0.001461, 0.00158 ,
+ 0.001708, 0.001843, 0.001987, 0.002141, 0.002303, 0.002476,
+ 0.002659, 0.002854, 0.003059, 0.003276, 0.003506, 0.003748,
+ 0.004004, 0.004274, 0.004558, 0.004857, 0.005171, 0.005502,
+ 0.00585 , 0.006215, 0.006597, 0.006999, 0.007419, 0.007859,
+ 0.00832 , 0.008802, 0.009305, 0.009831, 0.01038 , 0.010953,
+ 0.01155 , 0.012172, 0.01282 , 0.013495, 0.014197, 0.014927,
+ 0.015686, 0.016473, 0.017291, 0.01814 , 0.019021, 0.019933,
+ 0.020879, 0.021858, 0.022872, 0.023921, 0.025006, 0.026127,
+ 0.027285, 0.028482, 0.029717, 0.030992, 0.032306, 0.033662,
+ 0.035059, 0.036497, 0.037979, 0.039504, 0.041073, 0.042687,
+ 0.044345, 0.04605 , 0.047801, 0.049599, 0.051445, 0.053339,
+ 0.055282, 0.057273, 0.059315, 0.061406, 0.063548, 0.065742,
+ 0.067986, 0.070283, 0.072632, 0.075034, 0.077488, 0.079996,
+ 0.082558, 0.085174, 0.087843, 0.090568, 0.093346, 0.09618 ,
+ 0.099069, 0.102013, 0.105012, 0.108066, 0.111176, 0.114342,
+ 0.117563, 0.120839, 0.124171, 0.127558, 0.131001, 0.134499,
+ 0.138052, 0.141659, 0.145322, 0.149039, 0.15281 , 0.156635,
+ 0.160514, 0.164446, 0.168431, 0.172469, 0.176559, 0.180701,
+ 0.184894, 0.189138, 0.193432, 0.197776, 0.202169, 0.206611,
+ 0.211101, 0.215639, 0.220223, 0.224853, 0.229528, 0.234248,
+ 0.239012, 0.24382 , 0.248669, 0.25356 , 0.258492, 0.263464,
+ 0.268474, 0.273523, 0.278608, 0.283731, 0.288888, 0.29408 ,
+ 0.299305, 0.304562, 0.309851, 0.31517 , 0.320519, 0.325895,
+ 0.331299, 0.336729, 0.342185, 0.347664, 0.353166, 0.35869 ,
+ 0.364234, 0.369798, 0.375381, 0.38098 , 0.386596, 0.392227,
+ 0.397871, 0.403529, 0.409197, 0.414876, 0.420565, 0.426261,
+ 0.431964, 0.437673, 0.443387, 0.449103, 0.454822, 0.460543,
+ 0.466263, 0.471981, 0.477698, 0.483411, 0.48912 , 0.494822,
+ 0.500518, 0.506206, 0.511886, 0.517554, 0.523212, 0.528858,
+ 0.53449 , 0.540108, 0.545711, 0.551297, 0.556866, 0.562417,
+ 0.567948, 0.573459, 0.578949, 0.584417, 0.589861, 0.595282,
+ 0.600677, 0.606048, 0.611391, 0.616707, 0.621995, 0.627254,
+ 0.632483, 0.637681, 0.642848, 0.647984, 0.653086, 0.658155,
+ 0.66319 , 0.66819 , 0.673155, 0.678084, 0.682976, 0.687831,
+ 0.692649, 0.697428, 0.702168, 0.70687 , 0.711531, 0.716153,
+ 0.720733, 0.725273, 0.729772, 0.734228, 0.738643, 0.743015,
+ 0.747344, 0.75163 , 0.755873, 0.760072, 0.764227, 0.768339,
+ 0.772406, 0.776428, 0.780406, 0.784339, 0.788228, 0.792071,
+ 0.795869, 0.799622, 0.80333 , 0.806992, 0.810609, 0.814181,
+ 0.817707, 0.821188, 0.824624, 0.828015, 0.83136 , 0.83466 ,
+ 0.837916, 0.841126, 0.844292, 0.847413, 0.85049 , 0.853522,
+ 0.85651 , 0.859455, 0.862355, 0.865212, 0.868026, 0.870796,
+ 0.873524, 0.876209, 0.878852, 0.881452, 0.884011, 0.886528,
+ 0.889005, 0.89144 , 0.893834, 0.896189, 0.898503, 0.900778,
+ 0.903014, 0.90521 , 0.907369, 0.909488, 0.911571, 0.913615,
+ 0.915623, 0.917594, 0.919528, 0.921427, 0.92329 , 0.925118,
+ 0.926911, 0.92867 , 0.930395, 0.932086, 0.933745, 0.93537 ,
+ 0.936963, 0.938525, 0.940055, 0.941554, 0.943022, 0.94446 ,
+ 0.945869, 0.947248, 0.948598, 0.949919, 0.951213, 0.952478,
+ 0.953717, 0.954928, 0.956113, 0.957273, 0.958406, 0.959514,
+ 0.960598, 0.961657, 0.962692, 0.963703, 0.964692, 0.965657,
+ 0.9666 , 0.967521, 0.968421, 0.969299, 0.970156, 0.970993,
+ 0.97181 , 0.972607, 0.973385, 0.974144, 0.974884, 0.975605,
+ 0.976309, 0.976996, 0.977665, 0.978317, 0.978953, 0.979572,
+ 0.980176, 0.980764, 0.981337, 0.981895, 0.982438, 0.982967,
+ 0.983482, 0.983984, 0.984472, 0.984947, 0.985409, 0.985858,
+ 0.986296, 0.986721, 0.987135, 0.987537, 0.987929, 0.988309,
+ 0.988678, 0.989038, 0.989387, 0.989726, 0.990056, 0.990376,
+ 0.990687, 0.990989, 0.991282, 0.991566, 0.991843, 0.992111,
+ 0.992371, 0.992624, 0.992869, 0.993106, 0.993337, 0.99356 ,
+ 0.993777, 0.993988, 0.994191, 0.994389, 0.99458 , 0.994766,
+ 0.994946, 0.99512 , 0.995289, 0.995452, 0.99561 , 0.995764,
+ 0.995912, 0.996056, 0.996195, 0.996329, 0.99646 , 0.996586,
+ 0.996708, 0.996825, 0.996939, 0.99705 , 0.997156, 0.99726 ,
+ 0.997359, 0.997456, 0.997549, 0.997639, 0.997726, 0.99781 ,
+ 0.997891, 0.997969, 0.998045, 0.998118, 0.998189, 0.998257,
+ 0.998323, 0.998386, 0.998447, 0.998506, 0.998563, 0.998618,
+ 0.998671, 0.998723, 0.998772, 0.998819, 0.998865, 0.998909,
+ 0.998952, 0.998993, 0.999033, 0.999071, 0.999107, 0.999143,
+ 0.999177, 0.99921 , 0.999241, 0.999272, 0.999301, 0.999329,
+ 0.999356, 0.999382, 0.999407, 0.999431, 0.999455, 0.999477,
+ 0.999498, 0.999519, 0.999539, 0.999558, 0.999576, 0.999594,
+ 0.999611, 0.999627, 0.999643, 0.999658, 0.999672, 0.999686,
+ 0.999699, 0.999712, 0.999724, 0.999736, 0.999747, 0.999758,
+ 0.999769, 0.999779, 0.999788, 0.999797, 0.999806, 0.999815,
+ 0.999823, 0.99983 , 0.999838, 0.999845, 0.999852, 0.999858,
+ 0.999865, 0.999871, 0.999876, 0.999882, 0.999887, 0.999892,
+ 0.999897, 0.999902, 0.999906, 0.99991 , 0.999915, 0.999918,
+ 0.999922, 0.999926, 0.999929, 0.999932, 0.999936, 0.999938,
+ 0.999941, 0.999944, 0.999947, 0.999949, 0.999952, 0.999954,
+ 0.999956, 0.999958, 0.99996 , 0.999962, 0.999964, 0.999965,
+ 0.999967, 0.999969, 0.99997 , 0.999972, 0.999973, 0.999974,
+ 0.999975, 0.999977, 0.999978, 0.999979, 0.99998 , 0.999981,
+ 0.999982, 0.999983, 0.999984, 0.999984, 0.999985, 0.999986,
+ 0.999987, 0.999987, 0.999988, 0.999988, 0.999989, 0.99999 ,
+ 0.99999 , 0.999991, 0.999991, 0.999992, 0.999992, 0.999992,
+ 0.999993, 0.999993, 0.999993, 0.999994, 0.999994, 0.999994,
+ 0.999995, 0.999995, 0.999995, 0.999995, 0.999996, 0.999996,
+ 0.999996, 0.999996, 0.999997, 0.999997, 0.999997, 0.999997,
+ 0.999997, 0.999997, 0.999998, 0.999998, 0.999998, 0.999998,
+ 0.999998, 0.999998, 0.999998, 0.999998, 0.999998, 0.999998,
+ 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
+ 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
+ 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
+ 0.999999, 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1. , 1. ,
+ 1. , 1. , 1. , 1. , 1.
+} // this is chi cdf for 7 degrees of freedom (because we have 7 features)
+);
+
+const std::vector<ctx::num_t> ctx::VisitCateger::__featuresMean(
+{
+ 344.542975696503,
+ 894.178423236515,
+ 868.300533491405,
+ 2.820391227030,
+ 0.511747454052,
+ 0.348669092762,
+ 0.139583453187
+});
+
+const std::vector<ctx::num_t> ctx::VisitCateger::__featuresStd(
+{
+ 416.061437196941,
+ 301.401812101781,
+ 300.774466281622,
+ 1.916233112930,
+ 0.314254748759,
+ 0.360707461975,
+ 0.109386661911
+});
+
+ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
+{
+ struct tm *timeinfo = localtime(&time);
+ if (timeinfo == NULL) {
+ return {0, 0, 0, false};
+ }
+ int minutesSinceMidnight = 60 * timeinfo->tm_hour + timeinfo->tm_min;
+ int weekday = (timeinfo->tm_wday + 6) % 7; // Monday is 0, Sunday is 6
+ bool weekend = weekday > 4;
+ int minutesSinceBeginingOfTheWeek = 24 * 60 * weekday + minutesSinceMidnight;
+ return {
+ minutesSinceMidnight,
+ minutesSinceBeginingOfTheWeek,
+ weekday,
+ weekend
+ };
+}
+
+int ctx::VisitCateger::weeksScope(const TimeFeatures &startF, const Interval &interval)
+{
+ int durationMinutes = (interval.end - interval.start) / 60;
+ int scopeMinutes = startF.minutesSinceBeginingOfTheWeek + durationMinutes;
+ int weeksScope = scopeMinutes / __MINUTES_IN_WEEK;
+ if (scopeMinutes % __MINUTES_IN_WEEK > 0) {
+ weeksScope++;
+ }
+ return weeksScope;
+}
+
+ctx::num_t ctx::VisitCateger::__sum(const std::vector<num_t> model, const size_t &from, const size_t &to)
+{
+ size_t toSecure = to;
+ if (to >= model.size()) {
+ _E("'to' exceeds model size");
+ toSecure = model.size() - 1;
+ }
+
+ if (from > to) {
+ _E("'from' greater than 'to'");
+ }
+
+ num_t result = 0.0;
+ for (size_t i = from; i <= toSecure; i++) {
+ result += model[i];
+ }
+
+ return result;
+}
+
+ctx::num_t ctx::VisitCateger::__weekModelMeanValue(PlaceCategId categ, const Interval &interval,
+ const TimeFeatures &startF, const TimeFeatures &endF)
+{
+ num_t ret = 0.0;
+ int minutes = 0;
+ int ws = weeksScope(startF, interval);
+ for (int week = 1; week <= ws; week++) {
+ size_t startIndex = (week == 1)
+ ? startF.minutesSinceBeginingOfTheWeek
+ : 0;
+ size_t endIndex = (week == ws)
+ ? endF.minutesSinceBeginingOfTheWeek
+ : __MINUTES_IN_WEEK - 1;
+ ret += __sum(prob_features::weekModel[categ], startIndex, endIndex);
+ minutes += endIndex - startIndex + 1;
+ }
+ if (minutes > 0) {
+ return ret / minutes;
+ }
+ return ret;
+}
+
+ctx::Categs ctx::VisitCateger::weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
+{
+ ctx::Categs categs;
+ for (const auto &item : prob_features::weekModel) {
+ categs[item.first] = __weekModelMeanValue(item.first, interval, startF, endF);
+ }
+ _D("categs: H=%.12f, W=%.12f, O=%.12f",
+ categs[PLACE_CATEG_ID_HOME],
+ categs[PLACE_CATEG_ID_WORK],
+ categs[PLACE_CATEG_ID_OTHER]);
+ return categs;
+}
+
+ctx::IntervalFeatures ctx::VisitCateger::intervalFeatures(const Interval &interval)
+{
+ num_t durationMinutes = 1.0 * (interval.end - interval.start) / 60;
+ TimeFeatures startFeatures = timeFeatures(interval.start);
+ TimeFeatures endFeatures = timeFeatures(interval.end);
+ Categs weekFeatures = weekModelFeatures(interval, startFeatures, endFeatures);
+ return {
+ durationMinutes,
+ (num_t) startFeatures.minutesSinceMidnight,
+ (num_t) endFeatures.minutesSinceMidnight,
+ (num_t) startFeatures.weekday,
+ weekFeatures[PLACE_CATEG_ID_HOME],
+ weekFeatures[PLACE_CATEG_ID_WORK],
+ weekFeatures[PLACE_CATEG_ID_OTHER]
+ };
+}
+
+void ctx::VisitCateger::__normalize(std::vector<ctx::num_t> &features)
+{
+ size_t n = features.size();
+ for (size_t i = 0; i < n; i++) {
+ features[i] -= __featuresMean[i];
+ features[i] /= __featuresStd[i];
+ }
+}
+
+void ctx::VisitCateger::categorize(ctx::Visit &visit)
+{
+ IntervalFeatures features = intervalFeatures(visit.interval);
+ __normalize(features);
+
+ for (auto &modelPair : __models) {
+ int categId = modelPair.first;
+ MahalModel model = modelPair.second;
+
+ num_t distance = model.distance(features);
+ num_t probability = 1 - __chiApprox.value(distance); // sth like probability but not exactly
+ visit.categs[categId] = probability;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
+
+#include "user_places_types.h"
+#include "mahal.h"
+#include "piecewise_lin.h"
+#include <map>
+
+namespace ctx {
+
+ struct TimeFeatures {
+ int minutesSinceMidnight;
+ int minutesSinceBeginingOfTheWeek;
+ int weekday;
+ bool weekend;
+ };
+
+ typedef std::vector<num_t> IntervalFeatures;
+
+ /*
+ * visit categorizer class
+ */
+ class VisitCateger {
+
+ private:
+ static const int __MINUTES_IN_WEEK = 60 * 24 * 7;
+ static const std::map<int, MahalModel> __models;
+ static const std::vector<num_t> __featuresMean;
+ static const std::vector<num_t> __featuresStd;
+ static num_t __sum(const std::vector<num_t> model, const size_t &from, const size_t &to);
+ static num_t __weekModelMeanValue(PlaceCategId categ, const Interval &interval,
+ const TimeFeatures &startF, const TimeFeatures &endF);
+ static void __normalize(std::vector<num_t> &features);
+ static PiecewiseLin __chiApprox; // tabled chi function approximator
+
+ public:
+ /**
+ * Function interpret time in timestamp input argument,
+ *
+ * @param time timestamp
+ * @return TimeFeatures structure with interpretations of timestamp
+ */
+ static TimeFeatures timeFeatures(const time_t &time);
+
+ static int weeksScope(const TimeFeatures &startF, const Interval &interval);
+
+ /**
+ * Function interpret time interval input argument and calculates scores
+ * that argument interval is home, work or other based on whole week model.
+ *
+ * @param interval time interval
+ * @param startF start time features
+ * @param endF end time features
+ * @return Categs score that argument interval is home, work or other
+ */
+ static Categs weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
+ const TimeFeatures &endF);
+
+ /**
+ * Function interpret time interval input argument,
+ *
+ * @param interval time interval
+ * @return IntervalFeatures vector with interpretations of input time interval
+ */
+ static IntervalFeatures intervalFeatures(const Interval &interval);
+
+ /**
+ * Function categorize visit based on visits time interval and fill its categories values.
+ */
+ static void categorize(ctx::Visit &visit);
+
+ }; /* class VisitCateger */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <set>
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <Types.h>
+#include <Json.h>
+#include "../place_recognition_types.h"
+#include "visit_detector.h"
+#include "user_places_params.h"
+#include "visit_categer.h"
+#include "similarity.h"
+#include "median.h"
+#include "debug_utils.h"
+
+#ifdef TIZEN_ENGINEER_MODE
+#define __VISIT_TABLE_COLUMNS \
+ VISIT_COLUMN_WIFI_APS " TEXT, "\
+ VISIT_COLUMN_START_TIME " timestamp, "\
+ VISIT_COLUMN_END_TIME " timestamp, "\
+ VISIT_COLUMN_START_TIME_HUMAN " TEXT, "\
+ VISIT_COLUMN_END_TIME_HUMAN " TEXT, "\
+ VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
+ VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
+ VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
+ VISIT_COLUMN_CATEG_HOME " REAL, "\
+ VISIT_COLUMN_CATEG_WORK " REAL, "\
+ VISIT_COLUMN_CATEG_OTHER " REAL"
+#else /* TIZEN_ENGINEER_MODE */
+#define __VISIT_TABLE_COLUMNS \
+ VISIT_COLUMN_WIFI_APS " TEXT, "\
+ VISIT_COLUMN_START_TIME " timestamp, "\
+ VISIT_COLUMN_END_TIME " timestamp, "\
+ VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
+ VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
+ VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
+ VISIT_COLUMN_CATEG_HOME " REAL, "\
+ VISIT_COLUMN_CATEG_WORK " REAL, "\
+ VISIT_COLUMN_CATEG_OTHER " REAL"
+#endif /* TIZEN_ENGINEER_MODE */
+
+ctx::VisitDetector::VisitDetector(time_t startScan, PlaceRecogMode energyMode, bool testMode) :
+ __testMode(testMode),
+ __locationLogger(this, testMode),
+ __wifiLogger(this, energyMode, testMode),
+ __currentInterval(startScan, startScan + VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
+ __stableCounter(0),
+ __tolerance(VISIT_DETECTOR_TOLERANCE_DEPTH),
+ __entranceToPlace(false),
+ __periodSeconds(VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
+ __entranceTime(0),
+ __departureTime(0)
+{
+ __setPeriod(energyMode);
+ __currentInterval = Interval(startScan, startScan + __periodSeconds);
+ __currentMacEvents = std::make_shared<MacEvents>();
+ __stayMacs = std::make_shared<MacSet>();
+
+ if (__testMode) {
+ __detectedVisits = std::make_shared<ctx::Visits>();
+ return;
+ }
+
+ __listeners.push_back(&__locationLogger);
+ __listeners.push_back(&__wifiLogger);
+ __dbCreateTable();
+ __wifiLogger.startLogging();
+}
+
+ctx::VisitDetector::~VisitDetector()
+{
+}
+
+bool ctx::VisitDetector::__isValid(const ctx::Mac &mac)
+{
+ return mac != "00:00:00:00:00:00";
+}
+
+void ctx::VisitDetector::onWifiScan(ctx::MacEvent e)
+{
+ _D("timestamp=%d, curent_interval.end=%d, mac=%s", e.timestamp, __currentInterval.end, std::string(e.mac).c_str());
+ if (__isValid(e.mac)) {
+ while (e.timestamp > __currentInterval.end) {
+ __processCurrentLogger();
+ __shiftCurrentInterval();
+ }
+ __currentMacEvents->push_back(e);
+ }
+}
+
+void ctx::VisitDetector::__processCurrentLogger()
+{
+ _D("");
+ std::shared_ptr<ctx::Frame> frame = __makeFrame(__currentMacEvents, __currentInterval);
+ __detectEntranceOrDeparture(frame);
+ __currentMacEvents->clear();
+}
+
+std::shared_ptr<ctx::Frame> ctx::VisitDetector::__makeFrame(std::shared_ptr<ctx::MacEvents> logger, ctx::Interval interval)
+{
+ std::set<time_t> timestamps;
+ std::shared_ptr<Frame> frame = std::make_shared<Frame>(interval);
+ for (auto log : *logger) {
+ timestamps.insert(log.timestamp);
+ if (frame->macs2Counts.find(log.mac) == frame->macs2Counts.end()) {
+ frame->macs2Counts[log.mac] = 1;
+ } else {
+ frame->macs2Counts[log.mac] += 1;
+ }
+ }
+ frame->numberOfTimestamps = timestamps.size();
+ return frame;
+}
+
+void ctx::VisitDetector::__shiftCurrentInterval()
+{
+ __currentInterval.end += __periodSeconds;
+ __currentInterval.start += __periodSeconds;
+}
+
+void ctx::VisitDetector::__detectEntranceOrDeparture(std::shared_ptr<ctx::Frame> frame)
+{
+ __entranceToPlace ? __detectDeparture(frame) : __detectEntrance(frame);
+}
+
+bool ctx::VisitDetector::__isDisjoint(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
+{
+ for (auto &mac : macSet) {
+ if (macs2Counts.find(mac) != macs2Counts.end()) {
+ return false;
+ }
+ }
+ return true;
+}
+
+bool ctx::VisitDetector::__protrudesFrom(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
+{
+ for (auto &macCount : macs2Counts) {
+ if (macSet.find(macCount.first) == macSet.end()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void ctx::VisitDetector::__detectDeparture(std::shared_ptr<ctx::Frame> frame)
+{
+ if (__tolerance == VISIT_DETECTOR_TOLERANCE_DEPTH) {
+ __departureTime = frame->interval.start;
+ __bufferedFrames.clear();
+ } else { // __tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH
+ __bufferedFrames.push_back(frame);
+ }
+ if (__isDisjoint(frame->macs2Counts, *__representativesMacs)) {
+ if (frame->macs2Counts.empty() || __protrudesFrom(frame->macs2Counts, *__stayMacs)) {
+ __tolerance--;
+ } else { // no new macs
+ __bufferedFrames.clear();
+ }
+ if (__tolerance == 0) { // departure detected
+ __visitEndDetected();
+ __processBuffer(frame);
+ }
+ } else if (__tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH) {
+ __tolerance++;
+ }
+}
+
+void ctx::VisitDetector::__visitStartDetected()
+{
+ __entranceToPlace = true;
+
+ __locationEvents.clear();
+ if (!__testMode) {
+ for (IVisitListener* listener : __listeners) {
+ listener->onVisitStart();
+ }
+ }
+ __representativesMacs = __selectRepresentatives(__historyFrames);
+ __entranceTime = __historyFrames[0]->interval.start;
+ _I("Entrance detected, timestamp: %d", __entranceTime);
+ __resetHistory();
+}
+
+void ctx::VisitDetector::__visitEndDetected()
+{
+ if (!__testMode) {
+ for (IVisitListener* listener : __listeners) {
+ listener->onVisitEnd();
+ }
+ }
+ _I("Departure detected, timestamp: %d", __departureTime);
+
+ Interval interval(__entranceTime, __departureTime);
+ Visit visit(interval, __representativesMacs);
+ VisitCateger::categorize(visit);
+
+ __putLocationToVisit(visit);
+
+ if (__testMode) {
+ __detectedVisits->push_back(visit);
+ } else {
+ __dbInsertVisit(visit);
+ }
+
+ // cleaning
+ __entranceToPlace = false;
+ __representativesMacs.reset();
+ __tolerance = VISIT_DETECTOR_TOLERANCE_DEPTH;
+}
+
+void ctx::VisitDetector::__putLocationToVisit(ctx::Visit &visit)
+{
+ // TODO: remove small accuracy locations from vectors?
+ std::vector<double> latitudes;
+ std::vector<double> longitudes;
+ visit.locationValid = false;
+ for (LocationEvent location : __locationEvents) {
+ if (location.timestamp >= __entranceTime && location.timestamp <= __departureTime) {
+ latitudes.push_back(location.coordinates.latitude);
+ longitudes.push_back(location.coordinates.longitude);
+ visit.locationValid = true;
+ }
+ }
+ if (visit.locationValid) {
+ visit.location.latitude = median(latitudes);
+ visit.location.longitude = median(longitudes);
+ _D("visit location set: lat=%.8f, lon=%.8f", visit.location.latitude, visit.location.longitude);
+ } else {
+ _D("visit location not set");
+ }
+}
+
+void ctx::VisitDetector::__processBuffer(std::shared_ptr<ctx::Frame> frame)
+{
+ if (__bufferedFrames.empty()) {
+ __historyFrames.push_back(frame);
+ } else {
+ __historyFrames.push_back(__bufferedFrames[0]);
+ for (size_t i = 1; i < __bufferedFrames.size(); i++) {
+ __detectEntrance(__bufferedFrames[i]);
+ if (__entranceToPlace) {
+ break;
+ }
+ }
+ }
+}
+
+void ctx::VisitDetector::__detectEntrance(std::shared_ptr<ctx::Frame> currentFrame)
+{
+ if (currentFrame->macs2Counts.empty() || __historyFrames.empty()) {
+ __resetHistory(currentFrame);
+ return;
+ }
+
+ if (__stableCounter == 0) {
+ std::shared_ptr<Frame> oldestHistoryFrame = __historyFrames[0];
+ __stayMacs = macSetFromMacs2Counts(oldestHistoryFrame->macs2Counts);
+ }
+
+ std::shared_ptr<MacSet> currentBeacons = macSetFromMacs2Counts(currentFrame->macs2Counts);
+
+ if (similarity::overlapBiggerOverSmaller(*currentBeacons, *__stayMacs) > VISIT_DETECTOR_OVERLAP) {
+ __stableCounter++;
+ __historyFrames.push_back(currentFrame);
+
+ if (__stableCounter == VISIT_DETECTOR_STABLE_DEPTH) { // entrance detected
+ __visitStartDetected();
+ }
+ } else {
+ __resetHistory(currentFrame);
+ }
+ return;
+}
+
+void ctx::VisitDetector::__resetHistory()
+{
+ __stableCounter = 0;
+ __historyFrames.clear();
+}
+
+void ctx::VisitDetector::__resetHistory(std::shared_ptr<Frame> frame)
+{
+ __resetHistory();
+ __historyFrames.push_back(frame);
+}
+
+std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames)
+{
+ Macs2Counts reprs2Counts;
+ count_t allCount = 0;
+
+ for (auto frame : frames) {
+ allCount += frame->numberOfTimestamps;
+ for (auto &c : frame->macs2Counts) {
+ reprs2Counts[c.first] += c.second;
+ }
+ }
+
+ std::shared_ptr<Macs2Shares> reprs2Shares = __macSharesFromCounts(reprs2Counts, allCount);
+
+ share_t maxShare = __calcMaxShare(*reprs2Shares);
+ share_t threshold = maxShare < VISIT_DETECTOR_REP_THRESHOLD ? maxShare : VISIT_DETECTOR_REP_THRESHOLD;
+
+ std::shared_ptr<MacSet> reprsMacSet = __macSetOfGreaterOrEqualShare(*reprs2Shares, threshold);
+
+ return reprsMacSet;
+}
+
+ctx::share_t ctx::VisitDetector::__calcMaxShare(const ctx::Macs2Shares &macs2Shares)
+{
+ ctx::share_t maxShare = 0.0;
+ for (auto &macShare : macs2Shares) {
+ if (macShare.second > maxShare) {
+ maxShare = macShare.second;
+ }
+ }
+ return maxShare;
+}
+
+std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__macSetOfGreaterOrEqualShare(const ctx::Macs2Shares &macs2Shares, ctx::share_t threshold)
+{
+ std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
+ for (auto &macShare : macs2Shares) {
+ if (macShare.second >= threshold) {
+ macSet->insert(macShare.first);
+ }
+ }
+ return macSet;
+}
+
+std::shared_ptr<ctx::Macs2Shares> ctx::VisitDetector::__macSharesFromCounts(ctx::Macs2Counts const &macs2Counts, ctx::count_t denominator)
+{
+ std::shared_ptr<Macs2Shares> macs2Shares(std::make_shared<Macs2Shares>());
+ for (auto macCount : macs2Counts) {
+ (*macs2Shares)[macCount.first] = (share_t) macCount.second / denominator;
+ }
+ return macs2Shares;
+}
+
+std::shared_ptr<ctx::Visits> ctx::VisitDetector::getVisits()
+{
+ return __detectedVisits;
+}
+
+void ctx::VisitDetector::__dbCreateTable()
+{
+ bool ret = __dbManager.createTable(0, VISIT_TABLE, __VISIT_TABLE_COLUMNS);
+ _D("db: visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
+}
+
+void ctx::VisitDetector::__putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data)
+{
+ auto categ = categs.find(categType);
+ if (categ == categs.end()) {
+ _E("json_put_visit no type %d in categs", categType);
+ } else {
+ data.set(NULL, key, categ->second);
+ }
+}
+
+void ctx::VisitDetector::__putVisitCategsToJson(const Categs &categs, Json &data)
+{
+ __putVisitCategToJson(VISIT_COLUMN_CATEG_HOME, categs, PLACE_CATEG_ID_HOME, data);
+ __putVisitCategToJson(VISIT_COLUMN_CATEG_WORK, categs, PLACE_CATEG_ID_WORK, data);
+ __putVisitCategToJson(VISIT_COLUMN_CATEG_OTHER, categs, PLACE_CATEG_ID_OTHER, data);
+}
+
+int ctx::VisitDetector::__dbInsertVisit(Visit visit)
+{
+ std::stringstream ss;
+ ss << *visit.macSet;
+
+ Json data;
+ data.set(NULL, VISIT_COLUMN_WIFI_APS, ss.str().c_str());
+
+ data.set(NULL, VISIT_COLUMN_LOCATION_VALID, visit.locationValid);
+ data.set(NULL, VISIT_COLUMN_LOCATION_LATITUDE, visit.location.latitude);
+ data.set(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, visit.location.longitude);
+
+ data.set(NULL, VISIT_COLUMN_START_TIME, static_cast<int>(visit.interval.start));
+ data.set(NULL, VISIT_COLUMN_END_TIME, static_cast<int>(visit.interval.end));
+
+#ifdef TIZEN_ENGINEER_MODE
+ std::string startTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.start, "%F %T", 80);
+ std::string endTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.end, "%F %T", 80);
+ data.set(NULL, VISIT_COLUMN_START_TIME_HUMAN, startTimeHuman.c_str());
+ data.set(NULL, VISIT_COLUMN_END_TIME_HUMAN, endTimeHuman.c_str());
+ _D("db: visit table insert interval: (%d, %d): (%s, %s)",
+ visit.interval.start, visit.interval.end, startTimeHuman.c_str(), endTimeHuman.c_str());
+#else
+ _D("db: visit table insert interval: (%d, %d)", visit.interval.start, visit.interval.end);
+#endif /* TIZEN_ENGINEER_MODE */
+
+ __putVisitCategsToJson(visit.categs, data);
+
+ int64_t rowId;
+ bool ret = __dbManager.insertSync(VISIT_TABLE, data, &rowId);
+ _D("db: visit table insert result: %s", ret ? "SUCCESS" : "FAIL");
+ return ret;
+}
+
+void ctx::VisitDetector::onNewLocation(LocationEvent locationEvent)
+{
+ _D("");
+ locationEvent.log();
+ __locationEvents.push_back(locationEvent);
+};
+
+void ctx::VisitDetector::__setPeriod(PlaceRecogMode energyMode)
+{
+ switch (energyMode) {
+ case PLACE_RECOG_LOW_POWER_MODE:
+ __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER;
+ break;
+ case PLACE_RECOG_HIGH_ACCURACY_MODE:
+ __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY;
+ break;
+ default:
+ _E("Incorrect energy mode");
+ }
+}
+
+void ctx::VisitDetector::setMode(PlaceRecogMode energyMode)
+{
+ _D("");
+ __setPeriod(energyMode);
+ __wifiLogger.setMode(energyMode);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
+
+#include <memory>
+#include <vector>
+#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include "user_places_types.h"
+#include <Json.h>
+#include <DatabaseManager.h>
+#include "visit_listener_iface.h"
+#include "location_logger.h"
+#include "location_listener_iface.h"
+#include "wifi_listener_iface.h"
+#include "wifi_logger.h"
+
+namespace ctx {
+
+ class VisitDetector : public IWifiListener, ILocationListener {
+
+ private:
+ bool __testMode;
+ std::shared_ptr<Visits> __detectedVisits; // only used in test mode
+ LocationLogger __locationLogger;
+ WifiLogger __wifiLogger;
+ std::vector<IVisitListener*> __listeners;
+ std::shared_ptr<MacEvents> __currentMacEvents;
+ Interval __currentInterval;
+ std::vector<LocationEvent> __locationEvents;
+ std::vector<std::shared_ptr<Frame>> __historyFrames; // python: history_scans + history_times
+ std::vector<std::shared_ptr<Frame>> __bufferedFrames; // python: buffered_scans + buffered_times
+ int __stableCounter;
+ int __tolerance;
+ bool __entranceToPlace;
+ int __periodSeconds;
+ DatabaseManager __dbManager;
+
+ // fields that are used only in case of entrance detection
+ std::shared_ptr<MacSet> __representativesMacs; // macs that represent the current place
+ std::shared_ptr<MacSet> __stayMacs; // macs that can appear in the current place
+ time_t __entranceTime;
+ time_t __departureTime;
+
+ bool __isValid(const Mac &mac);
+ void __shiftCurrentInterval();
+ void __detectEntranceOrDeparture(std::shared_ptr<Frame> frame);
+ void __detectEntrance(std::shared_ptr<Frame> frame);
+ void __detectDeparture(std::shared_ptr<Frame> frame);
+ void __processBuffer(std::shared_ptr<Frame> frame); // python: buffer_analysing
+ std::shared_ptr<Frame> __makeFrame(std::shared_ptr<MacEvents> macEvents, Interval interval); // python: scans2fingerprint
+ void __resetHistory();
+ void __resetHistory(std::shared_ptr<Frame> frame);
+ void __visitStartDetected();
+ void __visitEndDetected();
+ void __putLocationToVisit(Visit &visit);
+ std::shared_ptr<MacSet> __selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames);
+ std::shared_ptr<MacSet> __macSetOfGreaterOrEqualShare(const Macs2Shares &macs2Shares, share_t threshold);
+ std::shared_ptr<Macs2Shares> __macSharesFromCounts(Macs2Counts const &macs2Counts, count_t denominator); // python: response_rate
+ share_t __calcMaxShare(const Macs2Shares &macs2Shares);
+ bool __isDisjoint(const Macs2Counts &macs2Counts, const MacSet &macSet);
+ bool __protrudesFrom(const Macs2Counts &macs2Counts, const MacSet &macSet);
+ void __setPeriod(PlaceRecogMode mode);
+ void __processCurrentLogger();
+
+ /* DATABASE */
+ void __dbCreateTable();
+ int __dbInsertVisit(Visit visit);
+ void __putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data);
+ void __putVisitCategsToJson(const Categs &categs, Json &data);
+
+ /* INPUT */
+ void onWifiScan(MacEvent event);
+ void onNewLocation(LocationEvent location);
+
+ public:
+ VisitDetector(time_t startScan, PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE, bool testMode = false);
+ ~VisitDetector();
+
+ std::shared_ptr<Visits> getVisits(); // only used in test mode
+ void setMode(PlaceRecogMode energyMode);
+
+ }; /* class VisitDetector */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
+
+namespace ctx {
+
+ class IVisitListener {
+
+ public:
+ virtual ~IVisitListener() {};
+ virtual void onVisitStart() = 0;
+ virtual void onVisitEnd() = 0;
+
+ }; /* class IVisitListener */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
+#define _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
+
+#include "user_places_types.h"
+
+namespace ctx {
+
+ class IWifiListener {
+
+ public:
+ virtual ~IWifiListener() {};
+ virtual void onWifiScan(ctx::MacEvent macEvent) = 0;
+
+ }; /* IWifiListener */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include <DatabaseManager.h>
+#include "../place_recognition_types.h"
+#include "debug_utils.h"
+#include "wifi_logger.h"
+
+#define __WIFI_CREATE_TABLE_COLUMNS \
+ WIFI_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
+ WIFI_COLUMN_BSSID " TEXT NOT NULL"
+
+#define __WIFI_ERROR_LOG(error) { \
+ if (error != WIFI_ERROR_NONE) { \
+ _E("ERROR == %s", __wifiError2Str(error)); \
+ } else { \
+ _D("SUCCESS"); \
+ } \
+}
+
+int ctx::WifiLogger::__dbCreateTable()
+{
+ ctx::DatabaseManager dbManager;
+ bool ret = dbManager.createTable(0, WIFI_TABLE_NAME, __WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
+ _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
+ return ret;
+}
+
+int ctx::WifiLogger::__dbInsertLogs()
+{
+ if (__logs.size() > 0) {
+ ctx::DatabaseManager dbManager;
+ std::stringstream query;
+ const char* separator = " ";
+ query << "BEGIN TRANSACTION; \
+ INSERT INTO " WIFI_TABLE_NAME " \
+ ( " WIFI_COLUMN_BSSID ", " WIFI_COLUMN_TIMESTAMP " ) \
+ VALUES";
+ for (MacEvent mac_event : __logs) {
+ query << separator << "( '" << mac_event.mac << "', '" << mac_event.timestamp << "' )";
+ separator = ", ";
+ }
+ __logs.clear();
+ query << "; \
+ END TRANSACTION;";
+ bool ret = dbManager.execute(0, query.str().c_str(), NULL);
+ _D("DB insert request: %s", ret ? "SUCCESS" : "FAIL");
+ return ret;
+ }
+ _D("__logs vector empty -> nothing to insert");
+ return 0;
+}
+
+ctx::WifiLogger::WifiLogger(IWifiListener * listener, PlaceRecogMode energyMode, bool testMode) :
+ __timerOn(false),
+ __intervalMinutes(WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY),
+ __testMode(testMode),
+ __listener(listener),
+ __lastScanTime(time_t(0)),
+ __lasTimerCallbackTime(time_t(0)),
+ __duringVisit(false),
+ __connectedToWifiAp(false),
+ __started(false),
+ __running(false)
+{
+ _D("CONSTRUCTOR");
+ if (testMode) {
+ return;
+ }
+ __setInterval(energyMode);
+
+ if (WIFI_LOGGER_DATABASE) {
+ __dbCreateTable();
+ }
+
+ __logs = std::vector<MacEvent>();
+
+ __wifiInitializeRequest();
+ __wifiSetDeviceStateChangedCbRequest();
+ if (WIFI_LOGGER_LOW_POWER_MODE) {
+ __wifiSetConnectionStateChangedCbRequest();
+ }
+ wifi_connection_state_e state = __wifiGetConnectionStateRequest();
+ __connectedToWifiAp = (state == WIFI_CONNECTION_STATE_CONNECTED);
+ _D("__connectedToWifiAp = %d, __duringVisit = %d IN CONSTRUCTOR",
+ static_cast<int>(__connectedToWifiAp),
+ static_cast<int>(__duringVisit));
+}
+
+ctx::WifiLogger::~WifiLogger()
+{
+ _D("DESTRUCTOR");
+ stopLogging();
+ __wifiDeinitializeRequest();
+}
+
+void ctx::WifiLogger::__wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData)
+{
+ ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+ switch (state) {
+ case WIFI_DEVICE_STATE_DEACTIVATED:
+ _D("WIFI setting OFF");
+ if (wifiLogger->__started) {
+ wifiLogger->__stopLogging();
+ }
+ break;
+ case WIFI_DEVICE_STATE_ACTIVATED:
+ _D("WIFI setting ON");
+ if (wifiLogger->__started) {
+ wifiLogger->__startLogging();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void ctx::WifiLogger::__wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
+{
+ ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+ switch (state) {
+ case WIFI_CONNECTION_STATE_CONNECTED:
+ _D("connected to AP");
+ wifiLogger->__connectedToWifiAp = true;
+ break;
+ default:
+ _D("disconnected from AP -> __lastScansPool.clear()");
+ wifiLogger->__connectedToWifiAp = false;
+ wifiLogger->__lastScansPool.clear();
+ break;
+ }
+ // TODO: Check if AP bssid (MAC Address) will be helpful somehow in LOW_POWER mode
+}
+
+bool ctx::WifiLogger::__wifiFoundApCb(wifi_ap_h ap, void *userData)
+{
+ ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+
+ char *bssid = NULL;
+ int ret = __wifiApGetBssidRequest(ap, &bssid);
+ if (ret != WIFI_ERROR_NONE) {
+ return false;
+ }
+
+ Mac mac;
+ try {
+ mac = Mac(bssid);
+ } catch (std::runtime_error &e) {
+ _E("Cannot create mac_event. Exception: %s", e.what());
+ return false;
+ }
+
+ MacEvent log(wifiLogger->__lastScanTime, mac);
+ if (wifiLogger->__listener) {
+ wifiLogger->__listener->onWifiScan(log);
+ if (WIFI_LOGGER_LOW_POWER_MODE
+ && (wifiLogger->__connectedToWifiAp || wifiLogger->__duringVisit) ) {
+ // Add to last scans AP's set
+ wifiLogger->__lastScansPool.insert(std::string(bssid));
+ }
+ }
+ if (WIFI_LOGGER_DATABASE) {
+ wifiLogger->__logs.push_back(log);
+ }
+
+ return true;
+}
+
+const char* ctx::WifiLogger::__wifiError2Str(int error)
+{
+ switch (error) {
+ case WIFI_ERROR_INVALID_PARAMETER:
+ return "WIFI_ERROR_INVALID_PARAMETER";
+ case WIFI_ERROR_OUT_OF_MEMORY:
+ return "WIFI_ERROR_OUT_OF_MEMORY";
+ case WIFI_ERROR_INVALID_OPERATION:
+ return "WIFI_ERROR_INVALID_OPERATION";
+ case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
+ return "WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED";
+ case WIFI_ERROR_OPERATION_FAILED:
+ return "WIFI_ERROR_OPERATION_FAILED";
+ case WIFI_ERROR_NO_CONNECTION:
+ return "WIFI_ERROR_NO_CONNECTION";
+ case WIFI_ERROR_NOW_IN_PROGRESS:
+ return "WIFI_ERROR_NOW_IN_PROGRESS";
+ case WIFI_ERROR_ALREADY_EXISTS:
+ return "WIFI_ERROR_ALREADY_EXISTS";
+ case WIFI_ERROR_OPERATION_ABORTED:
+ return "WIFI_ERROR_OPERATION_ABORTED";
+ case WIFI_ERROR_DHCP_FAILED:
+ return "WIFI_ERROR_DHCP_FAILED";
+ case WIFI_ERROR_INVALID_KEY:
+ return "WIFI_ERROR_INVALID_KEY";
+ case WIFI_ERROR_NO_REPLY:
+ return "WIFI_ERROR_NO_REPLY";
+ case WIFI_ERROR_SECURITY_RESTRICTED:
+ return "WIFI_ERROR_SECURITY_RESTRICTED";
+ case WIFI_ERROR_PERMISSION_DENIED:
+ return "WIFI_ERROR_PERMISSION_DENIED";
+ default:
+ return "unknown wifi error code";
+ }
+}
+
+void ctx::WifiLogger::__wifiScanFinishedCb(wifi_error_e errorCode, void *userData)
+{
+ ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
+
+ time_t now = time(nullptr);
+#ifdef TIZEN_ENGINEER_MODE
+ double seconds = 0;
+ if (wifiLogger->__lastScanTime > 0) {
+ seconds = difftime(now, wifiLogger->__lastScanTime);
+ }
+ std::string timeStr = DebugUtils::humanReadableDateTime(now, "%T", 9);
+ _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d -> scan %s (from last : %.1fs)",
+ static_cast<int>(wifiLogger->__connectedToWifiAp),
+ static_cast<int>(wifiLogger->__duringVisit),
+ wifiLogger->__lastScansPool.size(),
+ timeStr.c_str(),
+ seconds);
+#endif /* TIZEN_ENGINEER_MODE */
+ wifiLogger->__lastScanTime = now;
+
+ int ret = __wifiForeachFoundApsRequest(userData);
+ if (ret != WIFI_ERROR_NONE) {
+ return;
+ }
+ if (WIFI_LOGGER_DATABASE) {
+ wifiLogger->__dbInsertLogs();
+ }
+}
+
+bool ctx::WifiLogger::__checkWifiIsActivated()
+{
+ bool wifiActivated = true;
+ int ret = wifi_is_activated(&wifiActivated);
+ __WIFI_ERROR_LOG(ret);
+ _D("Wi-Fi is %s", wifiActivated ? "ON" : "OFF");
+ return wifiActivated;
+}
+
+void ctx::WifiLogger::__wifiScanRequest()
+{
+ int ret = wifi_scan(__wifiScanFinishedCb, this);
+ __WIFI_ERROR_LOG(ret);
+}
+
+int ctx::WifiLogger::__wifiForeachFoundApsRequest(void *userData)
+{
+ int ret = wifi_foreach_found_aps(__wifiFoundApCb, userData);
+ __WIFI_ERROR_LOG(ret);
+ return ret;
+}
+
+wifi_connection_state_e ctx::WifiLogger::__wifiGetConnectionStateRequest()
+{
+ wifi_connection_state_e connectionState;
+ int ret = wifi_get_connection_state(&connectionState);
+ __WIFI_ERROR_LOG(ret);
+ return connectionState;
+}
+
+void ctx::WifiLogger::__wifiSetBackgroundScanCbRequest()
+{
+ int ret = wifi_set_background_scan_cb(__wifiScanFinishedCb, this);
+ __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiSetDeviceStateChangedCbRequest()
+{
+ int ret = wifi_set_device_state_changed_cb(__wifiDeviceStateChangedCb, this);
+ __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiSetConnectionStateChangedCbRequest()
+{
+ int ret = wifi_set_connection_state_changed_cb(__wifiConnectionStateChangedCb, this);
+ __WIFI_ERROR_LOG(ret);
+}
+
+int ctx::WifiLogger::__wifiApGetBssidRequest(wifi_ap_h ap, char **bssid)
+{
+ int ret = wifi_ap_get_bssid(ap, bssid);
+ __WIFI_ERROR_LOG(ret);
+ return ret;
+}
+
+void ctx::WifiLogger::__wifiInitializeRequest()
+{
+ int ret = wifi_initialize();
+ __WIFI_ERROR_LOG(ret);
+}
+
+void ctx::WifiLogger::__wifiDeinitializeRequest()
+{
+ int ret = wifi_deinitialize();
+ __WIFI_ERROR_LOG(ret);
+}
+
+bool ctx::WifiLogger::__checkTimerId(int id)
+{
+ _D("id == %d, __timerId == %d", id, __timerId);
+ return id == __timerId;
+}
+
+/*
+ * Accepted time from last callback is >= than minimum interval
+ */
+bool ctx::WifiLogger::__checkTimerTime(time_t now)
+{
+ double seconds = 0;
+ if (__lasTimerCallbackTime > 0) {
+ seconds = difftime(now, __lasTimerCallbackTime);
+ if (seconds < WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL) {
+ _D("last == %d, now == %d, diff = %.1fs -> Incorrect timer callback", __lasTimerCallbackTime, now, seconds);
+ return false;
+ } else {
+ _D("last == %d, now == %d, diff = %.1fs -> Correct timer callback", __lasTimerCallbackTime, now, seconds);
+ }
+ } else {
+ _D("last == %d, now == %d -> First callback", __lasTimerCallbackTime, now);
+ }
+ __lasTimerCallbackTime = now;
+ return true;
+}
+
+bool ctx::WifiLogger::onTimerExpired(int id)
+{
+ time_t now = time(nullptr);
+ _D("");
+ if (__checkTimerId(id) == false) {
+ // Incorrect callback call
+ return false;
+ }
+ if (__checkTimerTime(now) == false) {
+ // Prevention from double callback call bug
+ return __timerOn;
+ }
+ _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d",
+ static_cast<int>(__connectedToWifiAp),
+ static_cast<int>(__duringVisit),
+ __lastScansPool.size());
+ if (WIFI_LOGGER_LOW_POWER_MODE
+ && __duringVisit
+ && __connectedToWifiAp
+ && __lastScansPool.size() > 0) {
+ _D("trying to send fake scan");
+ if (__listener) {
+ _D("__listener != false -> CORRECT");
+ for (std::string bssid : __lastScansPool) {
+ Mac mac(bssid);
+ MacEvent scan(now, mac);
+ _D("send fake scan (%s)", bssid.c_str());
+ __listener->onWifiScan(scan);
+ }
+ }
+ } else {
+ __wifiScanRequest();
+ }
+ return __timerOn;
+}
+
+void ctx::WifiLogger::startLogging()
+{
+ _D("");
+ __started = true;
+ __startLogging();
+}
+
+void ctx::WifiLogger::__startLogging()
+{
+ _D("");
+ if (!__checkWifiIsActivated() || __running) {
+ return;
+ }
+ __running = true;
+
+ if (WIFI_LOGGER_ACTIVE_SCANNING) {
+ __timerStart(__intervalMinutes);
+ __wifiScanRequest();
+ }
+ if (WIFI_LOGGER_PASSIVE_SCANNING) {
+ __wifiSetBackgroundScanCbRequest();
+ }
+}
+
+void ctx::WifiLogger::stopLogging()
+{
+ _D("");
+ __started = false;
+ __stopLogging();
+}
+
+void ctx::WifiLogger::__stopLogging()
+{
+ _D("");
+ if (!__running) {
+ return;
+ }
+ if (WIFI_LOGGER_ACTIVE_SCANNING) {
+ // Unset timer
+ __timerOn = false;
+ // Remove timer
+ __timerManager.remove(__timerId);
+ }
+ if (WIFI_LOGGER_PASSIVE_SCANNING) {
+ wifi_unset_background_scan_cb();
+ }
+ __running = false;
+}
+
+void ctx::WifiLogger::__timerStart(time_t minutes)
+{
+ __timerOn = true;
+ __timerId = __timerManager.setFor(minutes, this);
+ _D("%s (minutes=%d)", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes);
+}
+
+void ctx::WifiLogger::onVisitStart()
+{
+ _D("");
+ __duringVisit = true;
+}
+
+void ctx::WifiLogger::onVisitEnd()
+{
+ _D("__lastScansPool.clear()");
+ __duringVisit = false;
+ __lastScansPool.clear();
+}
+
+void ctx::WifiLogger::__setInterval(PlaceRecogMode energyMode)
+{
+ switch (energyMode) {
+ case PLACE_RECOG_LOW_POWER_MODE:
+ __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER;
+ break;
+ case PLACE_RECOG_HIGH_ACCURACY_MODE:
+ __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY;
+ break;
+ default:
+ _E("Incorrect energy mode");
+ }
+}
+
+void ctx::WifiLogger::__timerRestart()
+{
+ __timerManager.remove(__timerId);
+ __timerStart(__intervalMinutes);
+}
+
+void ctx::WifiLogger::setMode(PlaceRecogMode energyMode)
+{
+ _D("");
+ __setInterval(energyMode);
+ if (WIFI_LOGGER_ACTIVE_SCANNING && __timerOn) {
+ __timerRestart();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
+#define _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
+
+#include <wifi.h>
+#include <time.h>
+#include <vector>
+#include <set>
+#include <TimerManager.h>
+#include "wifi_listener_iface.h"
+#include "visit_listener_iface.h"
+#include "user_places_params.h"
+
+/* Database usage flag */
+#define WIFI_LOGGER_DATABASE false
+
+/* Active scanning usage flag */
+#define WIFI_LOGGER_ACTIVE_SCANNING true
+
+/* Passive scanning usage flag */
+#define WIFI_LOGGER_PASSIVE_SCANNING true
+
+/* Active scanning minimum interval in seconds */
+#define WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL 10
+
+/*
+ * Low power scanning usage flag
+ * (When phone is connected to some WiFi Access Point
+ * last scan data is returned instead of new scan triggering)
+ */
+#define WIFI_LOGGER_LOW_POWER_MODE false
+
+namespace ctx {
+
+ class WifiLogger : public ITimerListener, public IVisitListener {
+
+ public:
+ WifiLogger(IWifiListener * listener = nullptr,
+ PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE,
+ bool testMode = false);
+ ~WifiLogger();
+
+ void startLogging();
+ void stopLogging();
+ void setMode(PlaceRecogMode energyMode);
+
+ private:
+ /* INPUT */
+ void onVisitStart();
+ void onVisitEnd();
+
+ bool onTimerExpired(int timerId);
+
+ /* TIMER */
+ bool __timerOn;
+ int __timerId;
+ int __intervalMinutes;
+ TimerManager __timerManager;
+ void __setInterval(PlaceRecogMode energyMode);
+ bool __checkTimerId(int id);
+ bool __checkTimerTime(time_t now);
+ void __timerStart(time_t minutes);
+ void __timerRestart();
+
+ /* DATABASE */
+ static int __dbCreateTable();
+ int __dbInsertLogs();
+
+ /* SYSTEM CAPI WRAPPERS */
+ void __wifiSetBackgroundScanCbRequest();
+ void __wifiSetDeviceStateChangedCbRequest();
+ void __wifiSetConnectionStateChangedCbRequest();
+ static bool __checkWifiIsActivated();
+ void __wifiScanRequest();
+ static int __wifiForeachFoundApsRequest(void *userData);
+ static wifi_connection_state_e __wifiGetConnectionStateRequest();
+ static int __wifiApGetBssidRequest(wifi_ap_h ap, char **bssid);
+ void __wifiInitializeRequest();
+ void __wifiDeinitializeRequest();
+
+ /* SYSTEM CAPI CALLBACKS */
+ static void __wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData);
+ static void __wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
+ static bool __wifiFoundApCb(wifi_ap_h ap, void *userData);
+ static void __wifiScanFinishedCb(wifi_error_e errorCode, void *userData);
+
+ bool __testMode;
+ IWifiListener * const __listener;
+ std::vector<MacEvent> __logs;
+ std::set<std::string> __lastScansPool;
+ time_t __lastScanTime;
+ time_t __lasTimerCallbackTime;
+ bool __duringVisit;
+ bool __connectedToWifiAp;
+ bool __started;
+ bool __running;
+
+ void __startLogging();
+ void __stopLogging();
+ static const char* __wifiError2Str(int error);
+
+ }; /* class WifiLogger */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_ */
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Build flag for the place auto detection engine.
-# Set this to "yes" to enable the engine.
-SET(enable_recog_engine "no")
-
-# Common Profile
-FILE(GLOB prvd_srcs *.cpp)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} geofence/*.cpp)
- SET(prvd_deps ${prvd_deps} capi-geofence-manager)
- IF("${enable_recog_engine}" STREQUAL "yes")
- FILE(GLOB_RECURSE prvd_srcs ${prvd_srcs} recognition/*.cpp)
- SET(prvd_deps ${prvd_deps} capi-location-manager)
- SET(prvd_deps ${prvd_deps} capi-network-wifi)
- ELSE("${enable_recog_engine}" STREQUAL "yes")
- SET(prvd_cdef ${prvd_cdef} _DISABLE_RECOG_ENGINE_)
- ENDIF("${enable_recog_engine}" STREQUAL "yes")
-ENDIF("${PROFILE}" STREQUAL "mobile")
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <PlaceContextProvider.h>
-
-#ifdef _MOBILE_
-#include "geofence/PlaceGeofenceProvider.h"
-#ifndef _DISABLE_RECOG_ENGINE_
-#include "recognition/place_recognition.h"
-#endif /* _DISABLE_RECOG_ENGINE_ */
-#endif /* _MOBILE_ */
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
- Provider *provider = new(std::nothrow) Provider();
- IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
- if (!provider->isSupported()) {
- delete provider;
- return;
- }
-
- provider->registerProvider(privilege, provider);
- provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initPlaceContextProvider()
-{
-#ifdef _MOBILE_
- registerProvider<PlaceGeofenceProvider>(PLACE_SUBJ_GEOFENCE, PLACE_PRIV_GEOFENCE);
-
-#ifndef _DISABLE_RECOG_ENGINE_
- registerProvider<PlaceRecognitionProvider>(PLACE_SUBJ_RECOGNITION, PLACE_PRIV_RECOGNITION);
-#endif /* _DISABLE_RECOG_ENGINE_ */
-
-#endif /* _MOBILE_ */
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <Json.h>
-#include "PlaceGeofenceProvider.h"
-#include "GeofenceMonitorHandle.h"
-
-using namespace ctx;
-
-GeofenceMonitorHandle::GeofenceMonitorHandle(PlaceGeofenceProvider *provider) :
- __provider(provider),
- __placeId(-1),
- __prevState(GEOFENCE_STATE_UNCERTAIN),
- __geoHandle(NULL)
-{
-}
-
-GeofenceMonitorHandle::~GeofenceMonitorHandle()
-{
- __stopMonitor();
-}
-
-bool GeofenceMonitorHandle::startMonitor(int placeId)
-{
- _D("Starts to monitor Place-%d", placeId);
-
- IF_FAIL_RETURN(placeId >= 0, false);
- IF_FAIL_RETURN_TAG(__geoHandle == NULL, false, _E, "Re-starting MyPlace monitor");
-
- geofence_manager_create(&__geoHandle);
- IF_FAIL_RETURN_TAG(__geoHandle, false, _E, "Geofence initialization failed");
-
- int ret;
-
- ret = geofence_manager_set_geofence_state_changed_cb(__geoHandle, __fenceStateCb, this);
- IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting state callback failed");
-
- ret = geofence_manager_set_geofence_event_cb(__geoHandle, __fenceEventCb, this);
- IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Setting event callback failed");
-
- ret = geofence_manager_foreach_place_geofence_list(__geoHandle, placeId, __fenceListCb, this);
- IF_FAIL_CATCH_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, _E, "Getting fence list failed");
-
- __placeId = placeId;
- return true;
-
-CATCH:
- __stopMonitor();
- return false;
-}
-
-int GeofenceMonitorHandle::getPlaceId()
-{
- return __placeId;
-}
-
-void GeofenceMonitorHandle::__stopMonitor()
-{
- _D("Stops monitoring Place-%d", __placeId);
-
- //TODO: Do we need to stop all geofences explicitly?
- if (__geoHandle) {
- geofence_manager_destroy(__geoHandle);
- __geoHandle = NULL;
- }
-
- __geoStateMap.clear();
- __placeId = -1;
- __prevState = GEOFENCE_STATE_UNCERTAIN;
-}
-
-bool GeofenceMonitorHandle::__startFence(int fenceId)
-{
- int ret;
-
- ret = geofence_manager_start(__geoHandle, fenceId);
- IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Starting failed");
-
- geofence_status_h status;
- ret = geofence_status_create(fenceId, &status);
- IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, true, _W, "Getting status failed");
-
- geofence_state_e state = GEOFENCE_STATE_UNCERTAIN;
- geofence_status_get_state(status, &state);
- geofence_status_destroy(status);
-
- __geoStateMap[fenceId] = state;
-
- return true;
-}
-
-void GeofenceMonitorHandle::__removeFence(int fenceId)
-{
- geofence_manager_stop(__geoHandle, fenceId);
- __geoStateMap.erase(fenceId);
-}
-
-void GeofenceMonitorHandle::__updateFence(int fenceId, geofence_manage_e manage)
-{
- switch (manage) {
- case GEOFENCE_MANAGE_PLACE_REMOVED:
- _W("[Place-%d] Removed", __placeId);
- __stopMonitor();
- break;
- case GEOFENCE_MANAGE_FENCE_ADDED:
- _I("[Place %d] Fence-%d added", __placeId, fenceId);
- __startFence(fenceId);
- __emitStateChange();
- break;
- case GEOFENCE_MANAGE_FENCE_REMOVED:
- _I("[Place-%d] Fence-%d removed", __placeId, fenceId);
- __removeFence(fenceId);
- __emitStateChange();
- break;
- case GEOFENCE_MANAGE_FENCE_STARTED:
- _D("[Place-%d] Fence-%d started", __placeId, fenceId);
- break;
- case GEOFENCE_MANAGE_FENCE_STOPPED:
- _D("[Place-%d] Fence-%d stopped", __placeId, fenceId);
- //TODO: Do we need to restart this?
- break;
- default:
- _D("[Place-%d] Ignoring the manage event %d", __placeId, manage);
- break;
- }
-}
-
-void GeofenceMonitorHandle::__updateState(int fenceId, geofence_state_e state)
-{
- __geoStateMap[fenceId] = state;
-}
-
-void GeofenceMonitorHandle::__emitStateChange()
-{
- geofence_state_e currentState = GEOFENCE_STATE_UNCERTAIN;
- int outCount = 0;
-
- for (auto it = __geoStateMap.begin(); it != __geoStateMap.end(); ++it) {
- if (it->second == GEOFENCE_STATE_IN) {
- currentState = GEOFENCE_STATE_IN;
- break;
- } else if (it->second == GEOFENCE_STATE_OUT) {
- ++outCount;
- }
- }
-
- if (currentState != GEOFENCE_STATE_IN && outCount > 0) {
- currentState = GEOFENCE_STATE_OUT;
- }
-
- if (currentState == __prevState) {
- return;
- }
-
- __prevState = currentState;
-
- Json option;
- option.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
-
- Json data;
- data.set(NULL, PLACE_GEOFENCE_PLACE_ID, __placeId);
- data.set(NULL, PLACE_GEOFENCE_EVENT, __getStateString(currentState));
-
- __provider->publish(option, ERR_NONE, data);
-}
-
-const char* GeofenceMonitorHandle::__getStateString(geofence_state_e state)
-{
- switch (state) {
- case GEOFENCE_STATE_IN:
- return PLACE_GEOFENCE_IN;
- case GEOFENCE_STATE_OUT:
- return PLACE_GEOFENCE_OUT;
- case GEOFENCE_STATE_UNCERTAIN:
- return PLACE_GEOFENCE_UNCERTAIN;
- default:
- return PLACE_GEOFENCE_UNCERTAIN;
- }
-}
-
-bool GeofenceMonitorHandle::__fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData)
-{
- _D("FenceID: %d, Index: %d, Count: %d", geofenceId, fenceIndex, fenceCount);
- IF_FAIL_RETURN(fenceCount > 0, false);
-
- GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
- return handle->__startFence(geofenceId);
-}
-
-void GeofenceMonitorHandle::__fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData)
-{
- IF_FAIL_VOID_TAG(error == GEOFENCE_MANAGER_ERROR_NONE, _W, "Geofence error: %d", error);
-
- GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
-
- IF_FAIL_VOID_TAG(placeId == handle->getPlaceId(), _W, "Mismatched Place ID");
-
- handle->__updateFence(geofenceId, manage);
-}
-
-void GeofenceMonitorHandle::__fenceStateCb(int geofenceId, geofence_state_e state, void* userData)
-{
- GeofenceMonitorHandle *handle = reinterpret_cast<GeofenceMonitorHandle*>(userData);
- handle->__updateState(geofenceId, state);
- handle->__emitStateChange();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
-#define _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_
-
-#include <string>
-#include <map>
-#include <geofence_manager.h>
-
-namespace ctx {
-
- class PlaceGeofenceProvider;
-
- class GeofenceMonitorHandle {
- public:
- GeofenceMonitorHandle(PlaceGeofenceProvider *provider);
- ~GeofenceMonitorHandle();
-
- bool startMonitor(int placeId);
- int getPlaceId();
-
- private:
- PlaceGeofenceProvider *__provider;
- int __placeId;
- geofence_state_e __prevState;
- geofence_manager_h __geoHandle;
- std::map<int, geofence_state_e> __geoStateMap;
-
- void __emitStateChange();
- void __stopMonitor();
- bool __startFence(int fenceId);
- void __removeFence(int fenceId);
- void __updateFence(int fenceId, geofence_manage_e manage);
- void __updateState(int fenceId, geofence_state_e state);
-
- static const char* __getStateString(geofence_state_e state);
-
- static bool __fenceListCb(int geofenceId, geofence_h fence, int fenceIndex, int fenceCount, void* userData);
- static void __fenceEventCb(int placeId, int geofenceId, geofence_manager_error_e error, geofence_manage_e manage, void* userData);
- static void __fenceStateCb(int geofenceId, geofence_state_e state, void* userData);
- };
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_MONITOR_HANDLE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <geofence_manager.h>
-#include "GeofenceMonitorHandle.h"
-#include "PlaceGeofenceProvider.h"
-
-using namespace ctx;
-
-PlaceGeofenceProvider::PlaceGeofenceProvider() :
- ContextProvider(PLACE_SUBJ_GEOFENCE)
-{
-}
-
-PlaceGeofenceProvider::~PlaceGeofenceProvider()
-{
- for (auto& it : __handleMap) {
- delete it.second;
- }
-
- __handleMap.clear();
-}
-
-bool PlaceGeofenceProvider::isSupported()
-{
- bool supported = false;
- int ret = geofence_manager_is_supported(&supported);
- IF_FAIL_RETURN_TAG(ret == GEOFENCE_MANAGER_ERROR_NONE, false, _E, "geofence_manager_is_supported() failed");
- return supported;
-}
-
-void PlaceGeofenceProvider::submitTriggerItem()
-{
- registerTriggerItem(OPS_SUBSCRIBE,
- "{"
- "\"Event\":{\"type\":\"string\",\"values\":[\"In\",\"Out\"]}"
- "}",
- "{"
- "\"PlaceId\":{\"type\":\"integer\",\"min\":1}"
- "}");
-}
-
-int PlaceGeofenceProvider::subscribe(Json option, Json *requestResult)
-{
- int placeId = -1;
- option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
- IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
-
- auto it = __handleMap.find(placeId);
- if (it != __handleMap.end()) {
- _D("Place ID %d is being monitored already", placeId);
- return ERR_NONE;
- }
-
- GeofenceMonitorHandle *handle = new(std::nothrow) GeofenceMonitorHandle(this);
- ASSERT_ALLOC(handle);
-
- bool ret = handle->startMonitor(placeId);
- if (!ret) {
- _E("Monitoring Place ID %d failed", placeId);
- delete handle;
- return ERR_OPERATION_FAILED;
- }
-
- __handleMap[placeId] = handle;
-
- return ERR_NONE;
-}
-
-int PlaceGeofenceProvider::unsubscribe(Json option)
-{
- int placeId = -1;
- option.get(NULL, PLACE_GEOFENCE_PLACE_ID, &placeId);
- IF_FAIL_RETURN_TAG(placeId != -1, ERR_INVALID_PARAMETER, _E, "Getting PlaceID failed");
-
- auto it = __handleMap.find(placeId);
- if (it == __handleMap.end()) {
- _D("Place ID %d is not being monitored", placeId);
- return ERR_NONE;
- }
-
- delete it->second;
- __handleMap.erase(it);
-
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
-#define _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_
-
-#include <map>
-#include <ContextProvider.h>
-#include "PlaceGeofenceTypes.h"
-
-namespace ctx {
-
- class GeofenceMonitorHandle;
-
- class PlaceGeofenceProvider : public ContextProvider {
- public:
- PlaceGeofenceProvider();
- ~PlaceGeofenceProvider();
-
- int subscribe(Json option, Json *requestResult);
- int unsubscribe(Json option);
-
- bool isSupported();
- void submitTriggerItem();
-
- private:
- std::map<int, GeofenceMonitorHandle*> __handleMap;
- };
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_PROVIDER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_GEOFENCE_TYPES_H_
-#define _CONTEXT_PLACE_GEOFENCE_TYPES_H_
-
-// Subject
-#define PLACE_SUBJ_GEOFENCE "place/geofence"
-
-// Privilege
-#define PLACE_PRIV_GEOFENCE "location"
-
-// Option & Data Key
-#define PLACE_GEOFENCE_PLACE_ID "PlaceId"
-#define PLACE_GEOFENCE_EVENT "Event"
-
-// Data Value
-#define PLACE_GEOFENCE_UNCERTAIN "Uncertain"
-#define PLACE_GEOFENCE_IN "In"
-#define PLACE_GEOFENCE_OUT "Out"
-
-#endif /* End of _CONTEXT_PLACE_GEOFENCE_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "place_recognition.h"
-#include "user_places/user_places.h"
-
-int ctx::PlaceRecognitionProvider::subscribe(ctx::Json option, ctx::Json* requestResult)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int ctx::PlaceRecognitionProvider::unsubscribe(ctx::Json option)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int ctx::PlaceRecognitionProvider::read(ctx::Json option, ctx::Json* requestResult)
-{
- _I(BLUE("Read"));
- _J("Option", option);
-
- std::vector<std::shared_ptr<ctx::Place>> places = __engine.getPlaces();
- Json dataRead = UserPlaces::composeJson(places);
-
- /*
- * The below function needs to be called once.
- * It does not need to be called within this read() function.
- * In can be called later, in another scope.
- * Please just be sure that, the 2nd input parameter "option" should be the same to the
- * "option" parameter received via ctx::PlaceRecognitionProvider::read().
- */
- replyToRead(option, ERR_NONE, dataRead);
-
- return ERR_NONE;
-}
-
-int ctx::PlaceRecognitionProvider::write(ctx::Json data, ctx::Json* requestResult)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-bool ctx::PlaceRecognitionProvider::isSupported()
-{
- /* TODO: This function should be implemented properly */
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_H_
-#define _CONTEXT_PLACE_RECOGNITION_H_
-
-#include <ContextProvider.h>
-#include "place_recognition_types.h"
-#include "user_places/user_places.h"
-
-namespace ctx {
-
- class PlaceRecognitionProvider : public ContextProvider {
- public:
- PlaceRecognitionProvider() :
- ContextProvider(PLACE_SUBJ_RECOGNITION),
- __engine(PLACE_RECOG_HIGH_ACCURACY_MODE) {}
-
- ~PlaceRecognitionProvider() {}
-
- int subscribe(ctx::Json option, ctx::Json *requestResult);
- int unsubscribe(ctx::Json option);
- int read(ctx::Json option, ctx::Json *requestResult);
- int write(ctx::Json data, ctx::Json *requestResult);
-
- bool isSupported();
- void submitTriggerItem() {}
-
- private:
- UserPlaces __engine;
- }; /* class PlaceRecognitionProvider */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_TYPES_
-#define _CONTEXT_PLACE_RECOGNITION_TYPES_
-
-// Context Items
-#define PLACE_SUBJ_RECOGNITION "place/pattern/personal_poi"
-
-#define PLACE_PRIV_RECOGNITION "location"
-
-// Database
-#define VISIT_TABLE "place_status_user_place_visit"
-#define VISIT_COLUMN_START_TIME "start_time"
-#define VISIT_COLUMN_END_TIME "end_time"
-#define VISIT_COLUMN_WIFI_APS "wifi_aps"
-#define VISIT_COLUMN_CATEGORY "category"
-#ifdef TIZEN_ENGINEER_MODE
-#define VISIT_COLUMN_START_TIME_HUMAN "start_time_human" // only for debug: human readable time data:
-#define VISIT_COLUMN_END_TIME_HUMAN "end_time_human" // only for debug: human readable time data:
-#endif /* TIZEN_ENGINEER_MODE */
-#define VISIT_COLUMN_LOCATION_VALID "geo_valid"
-#define VISIT_COLUMN_LOCATION_LATITUDE "geo_latitude"
-#define VISIT_COLUMN_LOCATION_LONGITUDE "geo_longitude"
-#define VISIT_COLUMN_CATEG_HOME "categ_home"
-#define VISIT_COLUMN_CATEG_WORK "categ_work"
-#define VISIT_COLUMN_CATEG_OTHER "categ_other"
-
-#define PLACE_TABLE "place_status_user_place"
-#define PLACE_COLUMN_CATEG_ID "type_id" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
-#define PLACE_COLUMN_CATEG_CONFIDENCE "type_confidence"
-#define PLACE_COLUMN_NAME "name"
-#define PLACE_COLUMN_LOCATION_VALID "geo_valid"
-#define PLACE_COLUMN_LOCATION_LATITUDE "geo_latitude"
-#define PLACE_COLUMN_LOCATION_LONGITUDE "geo_longitude"
-#define PLACE_COLUMN_WIFI_APS "wifi_aps"
-#define PLACE_COLUMN_CREATE_DATE "create_date"
-
-#define WIFI_TABLE_NAME "place_status_user_place_wifi"
-#define WIFI_COLUMN_TIMESTAMP "timestamp"
-#define WIFI_COLUMN_BSSID "bssid"
-
-#define LOCATION_TABLE_NAME "place_status_user_place_location"
-#define LOCATION_COLUMN_LATITUDE "geo_latitude"
-#define LOCATION_COLUMN_LONGITUDE "geo_longitude"
-#define LOCATION_COLUMN_ACCURACY "accuracy"
-#define LOCATION_COLUMN_TIMESTAMP "timestamp"
-#ifdef TIZEN_ENGINEER_MODE
-#define LOCATION_COLUMN_TIMESTAMP_HUMAN "time_human" // only for debug: human readable time data:
-#define LOCATION_COLUMN_METHOD "method"
-#endif /* TIZEN_ENGINEER_MODE */
-
-// Data Key
-#define DATA_READ "PlacesList"
-#define PLACE_CATEG_ID "TypeId" // Name inconsistency: "cated_id" vs "type_id" TODO make it consistent
-#define PLACE_CATEG_CONFIDENCE "TypeConfidence"
-#define PLACE_NAME "Name"
-#define PLACE_GEO_LATITUDE "GeoLatitude"
-#define PLACE_GEO_LONGITUDE "GeoLongitude"
-#define PLACE_WIFI_APS "WifiAPs"
-#define PLACE_CREATE_DATE "CreateDate"
-
-// Data values
-enum PlaceCategId {
- PLACE_CATEG_ID_NONE = 0,
- PLACE_CATEG_ID_HOME = 1,
- PLACE_CATEG_ID_WORK = 2,
- PLACE_CATEG_ID_OTHER = 3
-};
-
-enum PlaceRecogMode {
- PLACE_RECOG_HIGH_ACCURACY_MODE = 0,
- PLACE_RECOG_LOW_POWER_MODE = 1
-};
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_TYPES_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "debug_utils.h"
-#include <Types.h>
-
-std::string ctx::DebugUtils::humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc)
-{
- struct tm * timeinfo;
- if (utc) {
- format += " UTC";
- size += 4;
- timeinfo = gmtime(×tamp);
- } else {
- timeinfo = localtime(×tamp);
- }
- char buffer[size];
- if (timeinfo) {
- strftime(buffer, size, format.c_str(), timeinfo);
- } else {
- snprintf(buffer, size, "NULL");
- }
- return std::string(buffer);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
-#define _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_
-
-#include <string>
-#include <ctime>
-
-namespace ctx {
-
- class DebugUtils {
-
- public:
- static std::string humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc = false);
-
- }; /* class DebugUtils */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_DEBUG_UTILS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "gmap.h"
-#include <iostream>
-#include <fstream>
-
-const std::string ctx::Gmap::__HTML_HEADER = R"(
-<!DOCTYPE html>
-<html>
- <head>
- <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
- <meta charset="utf-8">
- <title>Simple markers</title>
- <style>
- html, body, #map-canvas {
- height: 100%;
- margin: 0px;
- padding: 0px
- }
- </style>
- <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
- <script>
-function initialize() {
- var mapOptions = {
- zoom: 2,
- center: new google.maps.LatLng(20,60)
- }
- var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
-)";
-
-const std::string ctx::Gmap::__HTML_FOOTER = R"(
-}
-
-google.maps.event.addDomListener(window, 'load', initialize);
-
- </script>
- </head>
- <body>
- <div id="map-canvas"></div>
- </body>
-</html>
-)";
-
-std::string ctx::Gmap::__iconForCategId(PlaceCategId categId)
-{
- switch (categId) {
- case PLACE_CATEG_ID_HOME: return "markerH.png";
- case PLACE_CATEG_ID_WORK: return "markerW.png";
- case PLACE_CATEG_ID_OTHER: return "markerO.png";
- case PLACE_CATEG_ID_NONE: return "markerN.png";
- default: return "markerD.png";
- }
-}
-
-void ctx::Gmap::__placeMarker2Stream(const ctx::Place& place, std::ostream& out)
-{
- if (place.locationValid) {
- out << "new google.maps.Marker({" << std::endl;
- out << " position: new google.maps.LatLng(" << place.location.latitude << "," << place.location.longitude << ")," << std::endl;
- out << " map: map," << std::endl;
- out << " icon: \"http://maps.google.com/mapfiles/" << __iconForCategId(place.categId)<< "\"" << std::endl;
- out << "});" << std::endl;
- }
-}
-
-void ctx::Gmap::__html2Stream(const std::vector<std::shared_ptr<ctx::Place>>& places, std::ostream& out)
-{
- out << __HTML_HEADER;
- for (std::shared_ptr<ctx::Place> place : places) {
- __placeMarker2Stream(*place, out);
- }
- out << __HTML_FOOTER;
-}
-
-void ctx::Gmap::writeMap(const std::vector<std::shared_ptr<ctx::Place>>& places)
-{
- std::ofstream out(GMAP_FILE);
- __html2Stream(places, out);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_GMAP_H_
-#define _CONTEXT_PLACE_RECOGNITION_GMAP_H_
-
-#include "user_places_types.h"
-#include "../place_recognition_types.h"
-
-#define GMAP_FILE "/opt/usr/media/Others/user_places_map.html"
-
-namespace ctx {
-
- /*
- * Class for generating a HTML page with GoogleMaps with all user places.
- * This class is for test/demo purposes only. TODO: Remove this class from final solution.
- */
- class Gmap {
-
- private:
- static const std::string __HTML_HEADER;
- static const std::string __HTML_FOOTER;
- static std::string __iconForCategId(PlaceCategId categId);
- static void __placeMarker2Stream(const Place& place, std::ostream& out);
- static void __html2Stream(const std::vector<std::shared_ptr<Place>>& places, std::ostream& out);
-
- public:
- static void writeMap(const std::vector<std::shared_ptr<Place>>& places);
-
- }; /* class Gmap */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_GMAP_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <memory>
-#include <queue>
-#include "graph.h"
-
-std::shared_ptr<ctx::graph::Components> ctx::graph::connectedComponents(Graph &graph)
-{
- std::shared_ptr<Components> ccs = std::make_shared<Components>();
- std::set<int> fringe;
-
- for (Node i = 0; i < static_cast<Node>(graph.size()); i++) {
- if (!graph[i]) {
- continue;
- }
- // neighbourhood of node i exists (was not removed)
- std::shared_ptr<Component> c = std::make_shared<Component>();
- ccs->push_back(c);
- fringe.insert(i);
- while (!fringe.empty()) {
- Node currNode = *fringe.begin();
- fringe.erase(fringe.begin());
- c->insert(currNode);
-
- std::shared_ptr<NeighbourNodes> currNhood = graph[currNode];
- for (Node nhoodNode : *currNhood) {
- if (graph[nhoodNode] && fringe.find(nhoodNode) == fringe.end()) {
- fringe.insert(nhoodNode);
- }
- }
- graph[currNode].reset(); // removing current node
- }
- }
- return ccs;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
-#define _CONTEXT_PLACE_RECOGNITION_GRAPH_H_
-
-#include <memory>
-#include <vector>
-#include <set>
-
-namespace ctx {
-
-namespace graph {
-
- typedef int Node;
- typedef std::set<Node> NeighbourNodes;
- typedef std::vector<std::shared_ptr<NeighbourNodes>> Graph;
- typedef std::set<Node> Component;
- typedef std::vector<std::shared_ptr<Component>> Components;
-
- /*
- * make connected components of a given graph
- * caution: the graph will be changed (its nodes will be cleared)
- */
- std::shared_ptr<Components> connectedComponents(Graph &graph);
-
-} /* namespace graph */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_GRAPH_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
- class ILocationListener {
-
- public:
- virtual ~ILocationListener() {};
- virtual void onNewLocation(LocationEvent location) = 0;
-
- }; /* class ILocationListener */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LISTENER_IFACE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include <DatabaseManager.h>
-#include "../place_recognition_types.h"
-#include "user_places_params.h"
-#include "debug_utils.h"
-#include "location_logger.h"
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __LOCATION_CREATE_TABLE_COLUMNS \
- LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
- LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
- LOCATION_COLUMN_ACCURACY " REAL, "\
- LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
- LOCATION_COLUMN_TIMESTAMP_HUMAN " TEXT, "\
- LOCATION_COLUMN_METHOD " INTEGER "
-#else /* TIZEN_ENGINEER_MODE */
-#define __LOCATION_CREATE_TABLE_COLUMNS \
- LOCATION_COLUMN_LATITUDE " REAL NOT NULL, "\
- LOCATION_COLUMN_LONGITUDE " REAL NOT NULL, "\
- LOCATION_COLUMN_ACCURACY " REAL, "\
- LOCATION_COLUMN_TIMESTAMP " timestamp NOT NULL "
-#endif /* TIZEN_ENGINEER_MODE */
-
-#define __LOCATION_ERROR_LOG(error) { \
- if (error != LOCATIONS_ERROR_NONE) { \
- _E("ERROR == %s", __locationError2Str(error)); \
- } else { \
- _D("SUCCESS"); \
- } \
-}
-
-void ctx::LocationLogger::__locationServiceStateChangedCb(location_service_state_e state, void *userData)
-{
- ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
- locationLogger->__locationServiceState = state;
- if (state == LOCATIONS_SERVICE_ENABLED) {
- _D("LOCATIONS_SERVICE_ENABLED");
- switch (locationLogger->__timerPurpose) {
- case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
- _D("Waiting for location service start FINISHED");
- locationLogger->__timerStop();
- locationLogger->__locationRequest();
- break;
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
- case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
- case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
- default:
- // Do nothing
- break;
- }
- } else {
- _D("LOCATIONS_SERVICE_DISABLED");
-// locationLogger->__timerStop();
- }
-}
-
-void ctx::LocationLogger::__locationSettingChangedCb(location_method_e method, bool enable, void *userData)
-{
- ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
- locationLogger->__locationMethodState = enable;
- if (method == locationLogger->__locationMethod) {
- if (enable) {
- _D("Location method settings ON");
- switch (locationLogger->__timerPurpose) {
- case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
- _D("Waiting for location method settings on FINISHED");
- if (locationLogger->__locationServiceState == LOCATIONS_SERVICE_ENABLED) {
- locationLogger->__timerStop();
- locationLogger->__locationRequest();
- } else {
- locationLogger->__locationManagerStart();
- }
- break;
- case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
- case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
- default:
- // Do nothing
- break;
- }
- } else {
- _D("Location method settings OFF");
-// locationLogger->__timerStop();
- }
- }
-}
-
-void ctx::LocationLogger::__positionUpdatedCb(double latitude, double longitude,
- double altitude, time_t timestamp, void *userData)
-{
- _D("");
- ctx::LocationLogger* locationLogger = (ctx::LocationLogger *)userData;
- double horizontal = locationLogger->__locationManagerGetHorizontalAccuracy();
-#ifdef TIZEN_ENGINEER_MODE
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_REQUEST);
-#else /* TIZEN_ENGINEER_MODE */
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
- locationLogger->__broadcast(location);
- locationLogger->__onActiveRequestSucceeded();
-}
-
-void ctx::LocationLogger::__locationUpdatedCb(location_error_e error, double latitude, double longitude,
- double altitude, time_t timestamp, double speed, double direction, double climb, void *userData)
-{
- _D("");
- __positionUpdatedCb(latitude, longitude, altitude, timestamp, userData);
-}
-
-const char* ctx::LocationLogger::__locationError2Str(int error)
-{
- switch (error) {
- case LOCATIONS_ERROR_NONE:
- return "LOCATIONS_ERROR_NONE";
- case LOCATIONS_ERROR_OUT_OF_MEMORY:
- return "LOCATIONS_ERROR_OUT_OF_MEMORY";
- case LOCATIONS_ERROR_INVALID_PARAMETER:
- return "LOCATIONS_ERROR_INVALID_PARAMETER";
- case LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED:
- return "LOCATIONS_ERROR_ACCESSIBILITY_NOT_ALLOWED";
- case LOCATIONS_ERROR_NOT_SUPPORTED:
- return "LOCATIONS_ERROR_NOT_SUPPORTED";
- case LOCATIONS_ERROR_INCORRECT_METHOD:
- return "LOCATIONS_ERROR_INCORRECT_METHOD";
- case LOCATIONS_ERROR_NETWORK_FAILED:
- return "LOCATIONS_ERROR_NETWORK_FAILED";
- case LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE:
- return "LOCATIONS_ERROR_SERVICE_NOT_AVAILABLE";
- case LOCATIONS_ERROR_GPS_SETTING_OFF:
- return "LOCATIONS_ERROR_GPS_SETTING_OFF";
- case LOCATIONS_ERROR_SECURITY_RESTRICTED:
- return "LOCATIONS_ERROR_SECURITY_RESTRICTED";
- default:
- return "unknown location error code";
- }
-}
-
-
-void ctx::LocationLogger::__log(location_accessibility_state_e state)
-{
- switch (state) {
- case LOCATIONS_ACCESS_STATE_NONE : // Access state is not determined
- _D("LOCATIONS_ACCESS_STATE_NONE ");
- break;
- case LOCATIONS_ACCESS_STATE_DENIED: // Access denied
- _D("LOCATIONS_ACCESS_STATE_DENIED");
- break;
- case LOCATIONS_ACCESS_STATE_ALLOWED: // Access authorized
- _D("LOCATIONS_ACCESS_STATE_ALLOWED");
- break;
- default:
- break;
- }
-}
-
-int ctx::LocationLogger::__dbCreateTable()
-{
- ctx::DatabaseManager dbManager;
- bool ret = dbManager.createTable(0, LOCATION_TABLE_NAME, __LOCATION_CREATE_TABLE_COLUMNS, NULL, NULL);
- _D("%s -> Table Creation Request", ret ? "SUCCESS" : "FAIL");
- return 0;
-}
-
-int ctx::LocationLogger::__dbInsertLog(LocationEvent locationEvent)
-{
- Json data;
- data.set(NULL, LOCATION_COLUMN_LATITUDE, locationEvent.coordinates.latitude);
- data.set(NULL, LOCATION_COLUMN_LONGITUDE, locationEvent.coordinates.longitude);
- data.set(NULL, LOCATION_COLUMN_ACCURACY, locationEvent.coordinates.accuracy);
- data.set(NULL, LOCATION_COLUMN_TIMESTAMP, static_cast<int>(locationEvent.timestamp));
-#ifdef TIZEN_ENGINEER_MODE
- std::string timeHuman = DebugUtils::humanReadableDateTime(locationEvent.timestamp, "%F %T", 80);
- data.set(NULL, LOCATION_COLUMN_TIMESTAMP_HUMAN, timeHuman);
- data.set(NULL, LOCATION_COLUMN_METHOD, static_cast<int>(locationEvent.method));
-#endif /* TIZEN_ENGINEER_MODE */
-
- ctx::DatabaseManager dbManager;
- int64_t rowId;
- bool ret = dbManager.insertSync(LOCATION_TABLE_NAME, data, &rowId);
- _D("%s -> DB: location table insert result", ret ? "SUCCESS" : "FAIL");
- return ret;
-}
-
-ctx::LocationLogger::LocationLogger(ILocationListener *listener, bool testMode) :
- __listener(listener),
- __testMode(testMode),
- __activeRequestAttempts(0),
- __activeAttempts(0),
- __allAttempts(0),
- __locationCount(0),
- __activeRequestSucceeded(false),
- __activeLocationSucceeded(false),
- __timerId(-1),
- __timerTimestamp(0),
- __timerPurpose(LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL),
- __locationServiceState(LOCATIONS_SERVICE_DISABLED),
- __locationMethod(LOCATION_LOGGER_METHOD),
- __locationMethodState(false)
-{
- _D("CONSTRUCTOR");
-
- __locationManagerCreate();
-
- if (__testMode) {
- return;
- }
- if (LOCATION_LOGGER_DATABASE) {
- __dbCreateTable();
- }
-
- __locationManagerSetServiceStateChangedCb();
- __locationManagerSetSettingChangedCb();
- __locationMethodState = __locationManagerIsEnabledMethod(__locationMethod);
-}
-
-ctx::LocationLogger::~LocationLogger()
-{
- _D("DESTRUCTOR");
- __stopLogging();
- __locationManagerUnsetServiceStateChangedCb();
- __locationManagerUnsetSettingChangedCb();
- __locationManagerDestroy();
-}
-
-void ctx::LocationLogger::__locationManagerCreate()
-{
- int ret = location_manager_create(__locationMethod, &__locationManager);
- __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerDestroy()
-{
- int ret = location_manager_destroy(__locationManager);
- __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerSetServiceStateChangedCb()
-{
- int ret = location_manager_set_service_state_changed_cb(__locationManager, __locationServiceStateChangedCb, this);
- __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerUnsetServiceStateChangedCb()
-{
- int ret = location_manager_unset_service_state_changed_cb(__locationManager);
- __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerStart()
-{
- int ret = location_manager_start(__locationManager);
- __LOCATION_ERROR_LOG(ret);
- __startServiceTimerStart();
-}
-
-void ctx::LocationLogger::__locationManagerStop()
-{
- int ret = location_manager_stop(__locationManager);
- __LOCATION_ERROR_LOG(ret);
-}
-
-double ctx::LocationLogger::__locationManagerGetHorizontalAccuracy()
-{
- location_accuracy_level_e accuracyLevel;
- double horizontal, vertical;
- int ret = location_manager_get_accuracy(__locationManager, &accuracyLevel, &horizontal, &vertical);
- __LOCATION_ERROR_LOG(ret);
- return horizontal;
-}
-
-location_accessibility_state_e ctx::LocationLogger::__locationManagerGetAccessibilityState()
-{
- location_accessibility_state_e state;
- int ret = location_manager_get_accessibility_state(&state);
- __LOCATION_ERROR_LOG(ret);
- return state;
-}
-
-void ctx::LocationLogger::__locationManagerSetSettingChangedCb()
-{
- int ret = location_manager_set_setting_changed_cb(__locationMethod, __locationSettingChangedCb, this);
- __LOCATION_ERROR_LOG(ret);
-}
-
-void ctx::LocationLogger::__locationManagerUnsetSettingChangedCb()
-{
- int ret = location_manager_unset_setting_changed_cb(__locationMethod);
- __LOCATION_ERROR_LOG(ret);
-}
-
-bool ctx::LocationLogger::__locationManagerRequestSingleLocation()
-{
- int ret = location_manager_request_single_location(__locationManager,
- LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS, __locationUpdatedCb, this);
- _D("%s (seconds=%d) ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
- ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
- LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS,
- __activeRequestAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
- __activeAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
- __allAttempts,
- LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
- __locationCount,
- LOCATION_LOGGER_MAX_LOCATION_COUNT);
- __LOCATION_ERROR_LOG(ret);
- __activeRequestAttempts++;
- __activeAttempts++;
- __allAttempts++;
- if (ret == LOCATIONS_ERROR_NONE) {
- __activeRequestTimerStart();
- return true;
- } else {
- return false;
- }
-}
-
-bool ctx::LocationLogger::__locationManagerGetLocation()
-{
- double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
- location_accuracy_level_e level;
- time_t timestamp;
- int ret = location_manager_get_location(__locationManager, &altitude, &latitude, &longitude,
- &climb, &direction, &speed, &level, &horizontal, &vertical, ×tamp);
- _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
- ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
- __activeRequestAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
- __activeAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
- __allAttempts,
- LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
- __locationCount,
- LOCATION_LOGGER_MAX_LOCATION_COUNT);
- __LOCATION_ERROR_LOG(ret);
- __activeAttempts++;
- __allAttempts++;
- if (ret == LOCATIONS_ERROR_NONE) {
-#ifdef TIZEN_ENGINEER_MODE
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LOCATION);
-#else /* TIZEN_ENGINEER_MODE */
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
- __broadcast(location);
- __onActiveLocationSucceeded();
- return true;
- } else {
- return false;
- }
-}
-
-void ctx::LocationLogger::__locationManagerGetLastLocation()
-{
- double altitude, latitude, longitude, climb, direction, speed, horizontal, vertical;
- location_accuracy_level_e level;
- time_t timestamp;
- int ret = location_manager_get_last_location(__locationManager, &altitude, &latitude, &longitude,
- &climb, &direction, &speed, &level, &horizontal, &vertical, ×tamp);
- _D("%s ----- ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d]",
- ret == LOCATIONS_ERROR_NONE ? "SUCCESS" : "ERROR",
- __activeRequestAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
- __activeAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
- __allAttempts,
- LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
- __locationCount,
- LOCATION_LOGGER_MAX_LOCATION_COUNT);
- __LOCATION_ERROR_LOG(ret);
- __allAttempts++;
- if (ret == LOCATIONS_ERROR_NONE) {
-#ifdef TIZEN_ENGINEER_MODE
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp, LOCATION_METHOD_GET_LAST_LOCATION);
-#else /* TIZEN_ENGINEER_MODE */
- ctx::LocationEvent location(latitude, longitude, horizontal, timestamp);
-#endif /* TIZEN_ENGINEER_MODE */
- __broadcast(location);
- }
-}
-
-bool ctx::LocationLogger::__locationManagerIsEnabledMethod(location_method_e method)
-{
- bool enable;
- int ret = location_manager_is_enabled_method(method, &enable);
- __LOCATION_ERROR_LOG(ret);
- return enable;
-}
-
-bool ctx::LocationLogger::__checkGeneralLimits()
-{
- return (__locationCount < LOCATION_LOGGER_MAX_LOCATION_COUNT
- && __allAttempts < LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS);
-}
-
-bool ctx::LocationLogger::__checkActiveLimits()
-{
- return (!__activeLocationSucceeded
- && __activeAttempts < LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS);
-}
-
-bool ctx::LocationLogger::__checkActiveRequestLimits()
-{
- return (!__activeRequestSucceeded
- && __activeRequestAttempts < LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS);
-}
-
-void ctx::LocationLogger::__locationRequest()
-{
- _D("");
- bool requestSingleLocationRet = false;
- bool getLocationRet = false;
- if (__checkGeneralLimits() && __checkActiveLimits() && __checkActiveRequestLimits()) {
- requestSingleLocationRet = __locationManagerRequestSingleLocation();
- }
- if (__checkGeneralLimits() && __checkActiveLimits() && !requestSingleLocationRet) {
- getLocationRet = __locationManagerGetLocation();
- }
- if (__checkGeneralLimits() && !requestSingleLocationRet && !getLocationRet
- && __activeAttempts >= LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS) {
- __locationManagerGetLastLocation();
- }
- if (!requestSingleLocationRet) {
- __locationManagerStop();
- __setNextTimer();
- }
-}
-
-void ctx::LocationLogger::__setNextTimer()
-{
- _D("ATTEMPTS: REQ[%d/%d], ACT[%d/%d], ALL[%d/%d]; ----- LOCATIONS:[%d/%d])",
- __activeRequestAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS,
- __activeAttempts,
- LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS,
- __allAttempts,
- LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS,
- __locationCount,
- LOCATION_LOGGER_MAX_LOCATION_COUNT);
- if (__checkGeneralLimits()) {
- if (__checkActiveLimits()) {
- __activeIntervalTimerStart();
- } else {
- __passiveIntervalTimerStart();
- }
- }
-}
-
-void ctx::LocationLogger::__onActiveRequestSucceeded()
-{
- _D("");
- __locationManagerStop();
- __activeRequestSucceeded = true;
- __onActiveLocationSucceeded();
-}
-
-void ctx::LocationLogger::__onActiveLocationSucceeded()
-{
- _D("");
- __activeLocationSucceeded = true;
-}
-
-void ctx::LocationLogger::__broadcast(ctx::LocationEvent locationEvent)
-{
- _D("");
- __locationCount++;
- if (__listener) {
- __listener->onNewLocation(locationEvent);
- }
- if (LOCATION_LOGGER_DATABASE) {
- __dbInsertLog(locationEvent);
- }
-}
-
-bool ctx::LocationLogger::onTimerExpired(int id)
-{
- time_t now = time(nullptr);
- double seconds = difftime(now, __timerTimestamp);
-
- switch (__timerPurpose) {
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST:
- _D("Active request FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- __locationManagerStop();
- __setNextTimer();
- return false;
- case LOCATION_LOGGER_WAITING_FOR_SERVICE_START:
- _D("Service start in timeout time FAILED, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- // Waiting for service start FAILURE is also some kind of active request attempt
- __activeRequestAttempts++;
- __activeAttempts++;
- __allAttempts++;
- __locationManagerStop();
- __setNextTimer();
- return false;
- case LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON:
- _D("Still waiting for Location method settings on, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- // Do nothing
- return false;
- case LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL:
- _D("Active interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- break;
- case LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL:
- _D("Passive interval time expired, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- break;
- default:
- _D("Do nothing, timerId = %d[%d], from start = %.1fs", id, __timerId, seconds);
- return false;
- }
- if (__locationMethodState) {
- __locationManagerStart();
- } else {
- __timerPurpose = LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON;
- _D("LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON");
- }
- return false;
-}
-
-void ctx::LocationLogger::__activeRequestTimerStart()
-{
- int minutes = LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS / 60;
- if (LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS % 60) {
- minutes++;
- }
- __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST;
- _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST (minutes=%d)", minutes);
- __timerStart(minutes);
-}
-
-void ctx::LocationLogger::__startServiceTimerStart()
-{
- __timerPurpose = LOCATION_LOGGER_WAITING_FOR_SERVICE_START;
- _D("LOCATION_LOGGER_WAITING_FOR_SERVICE_START");
- __timerStart(LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES);
-}
-
-void ctx::LocationLogger::__activeIntervalTimerStart()
-{
- __timerPurpose = LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL;
- _D("LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL");
- __timerStart(LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES);
-}
-
-void ctx::LocationLogger::__passiveIntervalTimerStart()
-{
- __timerPurpose = LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL;
- _D("LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL");
- __timerStart(LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES);
-}
-
-void ctx::LocationLogger::__timerStart(time_t minutes)
-{
- __timerTimestamp = time(nullptr);
- __timerId = __timerManager.setFor(minutes, this);
- _D("%s (minutes=%d) timerId = %d", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes, __timerId);
-}
-
-void ctx::LocationLogger::__timerStop()
-{
- _D("");
- __timerManager.remove(__timerId);
-}
-
-void ctx::LocationLogger::__startLogging()
-{
- _D("");
- __activeRequestAttempts = 0;
- __activeAttempts = 0;
- __allAttempts = 0;
- __locationCount = 0;
- __activeRequestSucceeded = false;;
- __activeLocationSucceeded = false;
- __locationManagerStart();
-}
-
-void ctx::LocationLogger::__stopLogging()
-{
- _D("");
- __timerStop();
- __locationManagerStop();
-}
-
-void ctx::LocationLogger::onVisitStart()
-{
- _D("");
- if (!__testMode) {
- __startLogging();
- }
-}
-
-void ctx::LocationLogger::onVisitEnd()
-{
- _D("");
- if (!__testMode) {
- __stopLogging();
- }
-}
-
-#undef __LOCATION_ERROR_LOG
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_
-
-#include <locations.h>
-#include <TimerManager.h>
-#include "visit_listener_iface.h"
-#include "location_listener_iface.h"
-
-/* Database usage flag */
-#define LOCATION_LOGGER_DATABASE false // TODO: false in final solution
-
-/* Locations measure method */
-#define LOCATION_LOGGER_METHOD LOCATIONS_METHOD_HYBRID
-
-/* TIMEOUTS: Location active measure request timeout (in seconds). */
-#define LOCATION_LOGGER_ACTIVE_REQUEST_TIMEOUT_SECONDS 100
-
-/* TIMEOUTS: Location service start timeout (in minutes). */
-#define LOCATION_LOGGER_SERVICE_START_TIMEOUT_MINUTES 2
-
-/* FREQUENCIES/INTERVALS: "Active" measure attempts frequency (in minutes) */
-#define LOCATION_LOGGER_ACTIVE_INTERVAL_MINUTES 5
-
-/* FREQUENCIES/INTERVALS: "Passive" measure attempts frequency (in minutes) */
-#define LOCATION_LOGGER_PASSIVE_INTERVAL_MINUTES 30
-
-/* ATTEMTS LIMITS: "Active" request attempts limit (must be <= than active location attempts) */
-#define LOCATION_LOGGER_MAX_ACTIVE_REQUEST_ATTEMPTS 0
-
-/* ATTEMTS LIMITS: "Active" measures attempts limit (must be <= than all attempts limit) */
-#define LOCATION_LOGGER_MAX_ACTIVE_LOCATION_ATTEMPTS 2
-
-/* ATTEMTS LIMITS: All attempts ("active" + "passive") limit */
-#define LOCATION_LOGGER_MAX_LOCATION_ATTEMPTS 3
-
-/* LOCATION LIMIT: Location count limit per visit */
-#define LOCATION_LOGGER_MAX_LOCATION_COUNT 3
-
-namespace ctx {
-
- enum TimerPurpose {
- LOCATION_LOGGER_WAITING_FOR_ACTIVE_REQUEST = 0,
- LOCATION_LOGGER_WAITING_FOR_SERVICE_START = 1,
- LOCATION_LOGGER_WAITING_FOR_LOCATION_METHOD_SETTING_ON = 2,
- LOCATION_LOGGER_WAITING_FOR_ACTIVE_INTERVAL = 3,
- LOCATION_LOGGER_WAITING_FOR_PASSIVE_INTERVAL = 4
- };
-
- class LocationLogger : public ITimerListener, public IVisitListener {
-
- public:
- LocationLogger(ILocationListener *listener = nullptr, bool testMode = false);
- ~LocationLogger();
-
- private:
- /* INPUT */
- void onVisitStart();
- void onVisitEnd();
-
- /* OUTPUT */
- ILocationListener * const __listener;
- void __broadcast(LocationEvent locationEvent);
-
- /* INTERNAL */
- bool __testMode;
- void __startLogging();
- void __stopLogging();
- void __locationRequest();
- void __onActiveRequestSucceeded();
- void __onActiveLocationSucceeded();
-
- /* INTERNAL : COUNTERS (LIMITS) */
- int __activeRequestAttempts;
- int __activeAttempts;
- int __allAttempts;
- int __locationCount;
- bool __checkGeneralLimits();
- bool __checkActiveLimits();
- bool __checkActiveRequestLimits();
-
- /* INTERNAL : FLAGS */
- bool __activeRequestSucceeded;
- bool __activeLocationSucceeded;
-
- /* TIMER */
- int __timerId;
- time_t __timerTimestamp;
- TimerManager __timerManager;
- TimerPurpose __timerPurpose;
- void __setNextTimer();
- void __activeRequestTimerStart();
- void __startServiceTimerStart();
- void __activeIntervalTimerStart();
- void __passiveIntervalTimerStart();
- void __timerStart(time_t minutes);
- void __timerStop();
- bool onTimerExpired(int timerId);
-
- /* DATABASE */
- static int __dbCreateTable();
- int __dbInsertLog(LocationEvent locationEvent);
-
- /* DEBUG */
- static const char* __locationError2Str(int error);
- static void __log(location_accessibility_state_e state);
-
- /* LOCATION MANAGER */
- location_manager_h __locationManager;
- void __locationManagerCreate();
- void __locationManagerDestroy();
- void __locationManagerStart();
- void __locationManagerStop();
- location_accessibility_state_e __locationManagerGetAccessibilityState();
-
- /* LOCATION MANAGER : LOCATION SERVICE STATE */
- location_service_state_e __locationServiceState;
- static void __locationServiceStateChangedCb(location_service_state_e state, void *userData);
- void __locationManagerSetServiceStateChangedCb();
- void __locationManagerUnsetServiceStateChangedCb();
-
- /* LOCATION MANAGER : LOCATION METHOD SETTINGS */
- location_method_e __locationMethod;
- bool __locationMethodState;
- bool __locationManagerIsEnabledMethod(location_method_e method);
- static void __locationSettingChangedCb(location_method_e method, bool enable, void *userData);
- void __locationManagerSetSettingChangedCb();
- void __locationManagerUnsetSettingChangedCb();
-
- /* LOCATION MANAGER : LOCATION */
- double __locationManagerGetHorizontalAccuracy();
-
- /* LOCATION MANAGER : LOCATION : SYNCHRONOUS */
- bool __locationManagerGetLocation();
- void __locationManagerGetLastLocation();
-
- /* LOCATION MANAGER : LOCATION : ASYNCHRONOUS */
- static void __positionUpdatedCb(double latitude, double longitude,
- double altitude, time_t timestamp, void *userData);
- static void __locationUpdatedCb(location_error_e error, double latitude,
- double longitude, double altitude, time_t timestamp, double speed,
- double direction, double climb, void *userData);
- bool __locationManagerRequestSingleLocation();
-
- }; /* class LocationLogger */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_LOCATION_LOGGER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "mahal.h"
-#include <math.h>
-#include <Types.h>
-
-ctx::num_t ctx::MahalModel::distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m)
-{
- size_t n = v1.size();
- if (m.size() != n * n) {
- _E("m.size() != n * n");
- return 0.0; // this value does not make any sense
- }
-
- std::vector<num_t> diff(n);
- for (size_t i = 0; i < n; i++) {
- diff[i] = v2[i] - v1[i];
- }
-
- num_t dist2 = 0; // squared distance
- for (size_t j = 0; j < n; j++) {
- for (size_t i = 0; i < n; i++) {
- dist2 += m[i * n + j] * diff[i] * diff[j];
- }
- }
- return sqrt(dist2);
-}
-
-ctx::num_t ctx::MahalModel::distance(const std::vector<ctx::num_t> &v)
-{
- return distance(v, __mean, __sigma);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
-#define _CONTEXT_PLACE_RECOGNITION_MAHAL_H_
-
-#include <vector>
-#include "user_places_types.h"
-
-namespace ctx {
-
- /*
- * Class for Mahalanobis distance computation.
- */
- class MahalModel {
-
- private:
- std::vector<num_t> __mean;
- std::vector<num_t> __sigma; // represents square matrix row-wise
-
- public:
- static num_t distance(const std::vector<num_t> &v1, const std::vector<num_t> &v2, const std::vector<num_t> &m);
- MahalModel(std::vector<num_t> mean, std::vector<num_t> sigma) :
- __mean(mean),
- __sigma(sigma) { }
- num_t distance(const std::vector<num_t> &v);
-
- }; /* class MahalModel */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_MAHAL_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <algorithm>
-#include <Types.h>
-#include "median.h"
-
-ctx::num_t ctx::median(std::vector<ctx::num_t> &v)
-{
- if (v.empty()) {
- _E("Median of empty set");
- return 0; // this value does not make any sense
- }
- size_t n = v.size() / 2;
- std::nth_element(v.begin(), v.begin() + n, v.end());
- num_t vn = v[n];
- if (v.size() % 2 == 1) {
- return vn;
- } else {
- std::nth_element(v.begin(), v.begin() + n - 1, v.end());
- return 0.5 * (vn + v[n - 1]);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_MEDIAN_
-#define _CONTEXT_PLACE_RECOGNITION_MEDIAN_
-
-#include "user_places_types.h"
-#include <vector>
-#include "../place_recognition_types.h"
-
-namespace ctx {
-
- num_t median(std::vector<num_t> &values); // caution: the input vector will be sorted
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_MEDIAN_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "piecewise_lin.h"
-#include <Types.h>
-
-ctx::PiecewiseLin::PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs) :
- __xs(xs),
- __vs(vs),
- __n(xs.size())
-{
- if (xs.size() != vs.size()) {
- _E("Input arguments have different sizes");
- return;
- }
-}
-
-ctx::num_t ctx::PiecewiseLin::value(num_t x)
-{
- if (x <= __xs[0]) {
- return __vs[0];
- } else if (x >= __xs[__n-1]) {
- return __vs[__n - 1];
- } else {
- num_t xp = __xs[0];
- for (size_t i = 1; i < __n; i++) {
- num_t xn = __xs[i];
- if (x <= xn) {
- num_t d = xn - xp;
- num_t dxp = x - xp;
- num_t dxn = xn - x;
- return (dxn * __vs[i-1] + dxp * __vs[i]) / d;
- }
- xp = xn;
- }
- }
- _E("Function should return result earlier");
- return 0.0; // this value does not make any sense
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
-#define _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
- /*
- * Piecewise linear function. Used for approximation.
- */
- class PiecewiseLin {
-
- private:
- std::vector<num_t> __xs; // nodes
- std::vector<num_t> __vs; // values in nodes
- size_t __n;
-
- public:
- PiecewiseLin(std::vector<num_t> xs, std::vector<num_t> vs);
- num_t value(num_t x);
-
- }; /* PiecewiseLin */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PIECEWISE_LIN_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "place_categer.h"
-#include "median.h"
-#include "../place_recognition_types.h"
-#include "user_places_params.h"
-#include "user_places_types.h"
-#include <algorithm>
-#include <Types.h>
-
-void ctx::PlaceCateger::reduceOutliers(ctx::Visits &visits)
-{
- int size = visits.size();
- visits.erase(std::remove_if(
- visits.begin(),
- visits.end(),
- [](Visit v)->bool {
- return v.categs[PLACE_CATEG_ID_HOME] < PLACES_CATEGER_MIN_VISITS_SCORE
- && v.categs[PLACE_CATEG_ID_WORK] < PLACES_CATEGER_MIN_VISITS_SCORE
- && v.categs[PLACE_CATEG_ID_OTHER] < PLACES_CATEGER_MIN_VISITS_SCORE;
- }),
- visits.end());
- int newSize = visits.size();
- if (size != newSize) {
- _D("Visits number from %d to %d (visits min scores checking)", size, newSize);
- }
-}
-
-/*
- * Change category if home or work has to few visits
- */
-bool ctx::PlaceCateger::__reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits)
-{
- return (categId == PLACE_CATEG_ID_HOME && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_HOME)
- || (categId == PLACE_CATEG_ID_WORK && visits.size() < PLACES_CATEGER_MIN_VISITS_PER_WORK);
-}
-
-void ctx::PlaceCateger::categorize(ctx::Visits &visits, ctx::Place &place)
-{
- reduceOutliers(visits);
-
- place.categId = PLACE_CATEG_ID_NONE;
- place.categConfidence = 0.0;
-
- if (!visits.empty()) {
- const std::vector<PlaceCategId> categIds = {
- PLACE_CATEG_ID_HOME,
- PLACE_CATEG_ID_WORK,
- PLACE_CATEG_ID_OTHER
- };
- num_t sumScore = 0.0;
- num_t maxScore = 0.0;
- for (PlaceCategId categId : categIds) {
- std::vector<num_t> categVector = categVectorFromVisits(visits, categId);
- num_t score = median(categVector);
- sumScore += score;
- if (score > maxScore) {
- maxScore = score;
- place.categId = categId;
- }
- }
- if (sumScore > 0) {
- place.categConfidence = maxScore / sumScore;
- }
- if (__reduceCategory(place.categId, visits)) {
- place.categId = PLACE_CATEG_ID_OTHER;
- place.categConfidence = 0.0;
- }
- }
-
- place.name = categId2Name(place.categId);
-}
-
-std::vector<ctx::num_t> ctx::PlaceCateger::categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId)
-{
- std::vector<ctx::num_t> vec;
- for (auto &visit : visits) {
- auto search = visit.categs.find(categId);
- if (search != visit.categs.end()) {
- vec.push_back(search->second);
- }
- }
- return vec;
-}
-
-std::string ctx::PlaceCateger::categId2Name(PlaceCategId categId) {
- switch (categId) {
- case PLACE_CATEG_ID_HOME:
- return "home";
- case PLACE_CATEG_ID_WORK:
- return "work";
- case PLACE_CATEG_ID_OTHER:
- return "other";
- case PLACE_CATEG_ID_NONE:
- return "none";
- default:
- return "";
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
-#define _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_
-
-#include "user_places_types.h"
-#include <utility>
-#include <vector>
-#include <string>
-#include "../place_recognition_types.h"
-
-namespace ctx {
-
- class PlaceCateger {
-
- private:
- static bool __reduceCategory(const PlaceCategId &categId, const ctx::Visits &visits);
-
- public:
- static void reduceOutliers(Visits &visits); // TODO: move to private
- static std::vector<ctx::num_t> categVectorFromVisits(const ctx::Visits &visits, PlaceCategId categId); // TODO: move to private
- static void categorize(ctx::Visits &visits, ctx::Place &place);
- static std::string categId2Name(PlaceCategId categId); // TODO: move to private
-
- }; /* class PlaceCateger */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACE_CATEGER_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include "similarity.h"
-#include "places_detector.h"
-#include "place_categer.h"
-#include "graph.h"
-#include "median.h"
-#ifdef TIZEN_ENGINEER_MODE
-#include "gmap.h"
-#endif /* TIZEN_ENGINEER_MODE */
-#include "../place_recognition_types.h"
-#include <fstream>
-#include <algorithm>
-#include "user_places_params.h"
-
-#define __DELETE_PLACES_QUERY "DELETE FROM " PLACE_TABLE
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __USER_PLACES_FILE "/opt/usr/media/Others/user_places.txt" // TODO: Only for debug purposes -> Remove in final solution
-#endif /* TIZEN_ENGINEER_MODE */
-
-#define __GET_VISITS_QUERY "SELECT "\
- VISIT_COLUMN_END_TIME ", "\
- VISIT_COLUMN_START_TIME ", "\
- VISIT_COLUMN_WIFI_APS ", "\
- VISIT_COLUMN_LOCATION_VALID ", "\
- VISIT_COLUMN_LOCATION_LATITUDE ", "\
- VISIT_COLUMN_LOCATION_LONGITUDE ", " \
- VISIT_COLUMN_CATEG_HOME ", "\
- VISIT_COLUMN_CATEG_WORK ", "\
- VISIT_COLUMN_CATEG_OTHER \
- " FROM " VISIT_TABLE
-
-#define __GET_PLACES_QUERY "SELECT "\
- PLACE_COLUMN_CATEG_ID ", "\
- PLACE_COLUMN_CATEG_CONFIDENCE ", "\
- PLACE_COLUMN_NAME ", "\
- PLACE_COLUMN_LOCATION_VALID ", "\
- PLACE_COLUMN_LOCATION_LATITUDE ", "\
- PLACE_COLUMN_LOCATION_LONGITUDE ", " \
- PLACE_COLUMN_WIFI_APS ", "\
- PLACE_COLUMN_CREATE_DATE \
- " FROM " PLACE_TABLE
-
-#define __PLACE_TABLE_COLUMNS \
- PLACE_COLUMN_CATEG_ID " INTEGER, "\
- PLACE_COLUMN_CATEG_CONFIDENCE " REAL, "\
- PLACE_COLUMN_NAME " TEXT, "\
- PLACE_COLUMN_LOCATION_VALID " INTEGER, "\
- PLACE_COLUMN_LOCATION_LATITUDE " REAL, "\
- PLACE_COLUMN_LOCATION_LONGITUDE " REAL, "\
- PLACE_COLUMN_WIFI_APS " STRING, "\
- PLACE_COLUMN_CREATE_DATE " timestamp"
-
-bool ctx::PlacesDetector::onTimerExpired(int timerId)
-{
- _D("");
- __dbDeletePlaces();
- __dbDeleteOldVisits();
- std::vector<Json> records = __dbGetVisits();
- Visits visits = __visitsFromJsons(records);
- __processVisits(visits);
- return true;
-}
-
-std::vector<ctx::Json> ctx::PlacesDetector::__dbGetVisits()
-{
- std::vector<Json> records;
- bool ret = __dbManager.executeSync(__GET_VISITS_QUERY, &records);
- _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
- return records;
-}
-
-std::vector<ctx::Json> ctx::PlacesDetector::__dbGetPlaces()
-{
- std::vector<Json> records;
- bool ret = __dbManager.executeSync(__GET_PLACES_QUERY, &records);
- _D("load places execute query result: %s", ret ? "SUCCESS" : "FAIL");
- return records;
-}
-
-double ctx::PlacesDetector::__doubleValueFromJson(Json &row, const char* key)
-{
- double value;
- row.get(NULL, key, &value);
- _D("__doubleValueFromJson, key:%s, value: %lf", key, value);
- return value;
-}
-
-ctx::Categs ctx::PlacesDetector::__visitCategsFromJson(Json &row)
-{
- Categs categs;
- categs[PLACE_CATEG_ID_HOME] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_HOME);
- categs[PLACE_CATEG_ID_WORK] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_WORK);
- categs[PLACE_CATEG_ID_OTHER] = __doubleValueFromJson(row, VISIT_COLUMN_CATEG_OTHER);
- return categs;
-}
-
-ctx::Visit ctx::PlacesDetector::__visitFromJson(Json &row)
-{
- int startTime;
- int endTime;
- std::string str;
- row.get(NULL, VISIT_COLUMN_START_TIME, &startTime);
- row.get(NULL, VISIT_COLUMN_END_TIME, &endTime);
- row.get(NULL, VISIT_COLUMN_WIFI_APS, &str);
-
- std::stringstream ss;
- ss << str;
- std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
- ss >> *macSet;
-
- Interval interval(startTime, endTime);
- Categs categs = __visitCategsFromJson(row);
-
- Visit visit(interval, macSet, categs);
-
- { // location
- int locationValidInt;
- row.get(NULL, VISIT_COLUMN_LOCATION_VALID, &locationValidInt);
- visit.locationValid = (bool) locationValidInt;
- row.get(NULL, VISIT_COLUMN_LOCATION_LATITUDE, &(visit.location.latitude));
- row.get(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, &(visit.location.longitude));
- }
-
- return visit;
-}
-
-ctx::Visits ctx::PlacesDetector::__visitsFromJsons(std::vector<Json>& records)
-{
- Visits visits;
- _D("db_result: number of all visits: %d", records.size());
-
- for (Json &row : records) {
- Visit visit = __visitFromJson(row);
- visits.push_back(visit);
- }
- _D("number of all visits in vector: %d", visits.size());
- return visits;
-}
-
-std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromJson(Json &row)
-{
- std::shared_ptr<Place> place = std::make_shared<Place>();
- { // category
- int categId;
- row.get(NULL, PLACE_COLUMN_CATEG_ID, &categId);
- // This is due to the fact the JSON module API interface doesn't handle enum
- place->categId = static_cast<PlaceCategId>(categId);
- }
- row.get(NULL, PLACE_COLUMN_NAME, &(place->name));
- row.get(NULL, PLACE_COLUMN_WIFI_APS, &(place->wifiAps));
- { // location
- int locationValidInt;
- row.get(NULL, PLACE_COLUMN_LOCATION_VALID, &locationValidInt);
- place->locationValid = (bool) locationValidInt;
- row.get(NULL, PLACE_COLUMN_LOCATION_LATITUDE, &(place->location.latitude));
- row.get(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, &(place->location.longitude));
- }
- { // createDate
- int createDate;
- row.get(NULL, PLACE_COLUMN_CREATE_DATE, &(createDate));
- // This is due to the fact the JSON module API interface doesn't handle time_t
- place->createDate = static_cast<time_t>(createDate);
- }
- _D("db_result: categId: %d; place: name: %s; wifiAps: %s; locationValid: %d; latitude: %lf, longitude: %lf, createDate: %d", place->categId, place->name.c_str(), place->wifiAps.c_str(), place->locationValid, place->location.latitude, place->location.longitude, place->createDate);
- return place;
-}
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::__placesFromJsons(std::vector<Json>& records)
-{
- std::vector<std::shared_ptr<Place>> places;
- _D("db_result: number of all places: %d", records.size());
-
- for (Json &row : records) {
- std::shared_ptr<Place> place = __placeFromJson(row);
- places.push_back(place);
- }
- _D("number of all places in vector: %d", places.size());
- return places;
-}
-
-void ctx::PlacesDetector::reduceOutliers(ctx::Visits &visits)
-{
- int size = visits.size();
- visits.erase(std::remove_if(
- visits.begin(),
- visits.end(),
- [](Visit v)->bool {
- int minutes = (v.interval.end - v.interval.start) / 60;
- return (minutes < PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES)
- || (minutes > PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES);
- }),
- visits.end());
- int newSize = visits.size();
- if (size != newSize) {
- _D("Visits number from %d to %d (to short and to long reduction)", size, newSize);
- }
-}
-
-void ctx::PlacesDetector::__processVisits(ctx::Visits &visits)
-{
- reduceOutliers(visits);
-
- _D("__testMode = %d", __testMode);
- auto components = __mergeVisits(visits);
- std::vector<std::shared_ptr<Place>> newDetectedPlaces;
-#ifdef TIZEN_ENGINEER_MODE
- std::vector<Visits> placesVisits; // TODO: remove from final solution.
-#endif /* TIZEN_ENGINEER_MODE */
- for (std::shared_ptr<graph::Component> component : *components) {
- // Small places outliers reduction
- if (!__testMode && component->size() < PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE) {
- continue;
- }
-
- std::shared_ptr<Visits> merged = std::make_shared<Visits>();
- for (graph::Node i : *component) {
- merged->push_back(visits[i]);
- }
- std::shared_ptr<Place> place = __placeFromMergedVisits(*merged);
- if (place->categId == PLACE_CATEG_ID_NONE) {
- continue;
- }
- newDetectedPlaces.push_back(place);
- if (!__testMode) {
- __dbInsertPlace(*place);
- }
-
-#ifdef TIZEN_ENGINEER_MODE
- { // TODO: Only for debug -> remove in final solution
- Visits placeVisits;
- for (graph::Node i : *component) {
- placeVisits.push_back(visits[i]);
- }
- placesVisits.push_back(placeVisits);
- }
-#endif /* TIZEN_ENGINEER_MODE */
- }
-
- __detectedPlacesUpdate(newDetectedPlaces);
-
-#ifdef TIZEN_ENGINEER_MODE
- { // Print to file TODO: Only for debug -> remove in final solution
- std::ofstream out(__USER_PLACES_FILE);
- for (size_t i = 0; i < newDetectedPlaces.size(); i++) {
- newDetectedPlaces[i]->print2Stream(out);
- Visits placeVisits = placesVisits[i];
- for (Visit visit : placeVisits) {
- visit.printShort2Stream(out);
- }
- }
- out.close();
- Gmap::writeMap(newDetectedPlaces);
- }
-#endif /* TIZEN_ENGINEER_MODE */
-}
-
-/*
- * Replace old places by new ones.
- */
-void ctx::PlacesDetector::__detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces)
-{
- _D("");
- // XXX: In case of thread safety issues use std::mutex to protect places list.
- __detectedPlaces = newPlaces;
-}
-
-void ctx::PlacesDetector::__mergeLocation(const Visits &visits, Place &place)
-{
- place.locationValid = false;
- std::vector<double> latitudes;
- std::vector<double> longitudes;
- for (const Visit& visit : visits) {
- if (visit.locationValid) {
- latitudes.push_back(visit.location.latitude);
- longitudes.push_back(visit.location.longitude);
- place.locationValid = true;
- }
- }
- if (place.locationValid) {
- place.location.latitude = median(latitudes);
- place.location.longitude = median(longitudes);
- }
-}
-
-std::shared_ptr<ctx::Place> ctx::PlacesDetector::__placeFromMergedVisits(Visits &mergedVisits)
-{
- std::shared_ptr<Place> place = std::make_shared<Place>();
- place->createDate = std::time(nullptr);
- std::vector<std::shared_ptr<MacSet>> macSets;
- for (const Visit &visit : mergedVisits) {
- macSets.push_back(visit.macSet);
- }
- std::shared_ptr<MacSet> allMacs = macSetsUnion(macSets);
- std::stringstream ss;
- ss << *allMacs;
- place->wifiAps = ss.str();
-
- __mergeLocation(mergedVisits, *place);
-
- PlaceCateger::categorize(mergedVisits, *place);
-
- return place;
-}
-
-void ctx::PlacesDetector::reduceOutliers(std::shared_ptr<ctx::graph::Components> &cc)
-{
- int size = cc->size();
- cc->erase(std::remove_if(cc->begin(),
- cc->end(),
- [](std::shared_ptr<graph::Component> &c)->bool {
- return c->size() < PLACES_DETECTOR_MIN_VISITS_PER_PLACE;
- }),
- cc->end());
- int newSize = cc->size();
- if (size != newSize) {
- _D("Connected components from %d to %d (min visit per place)", size, newSize);
- }
-}
-
-std::shared_ptr<ctx::graph::Components> ctx::PlacesDetector::__mergeVisits(const std::vector<Visit> &visits)
-{
- auto graph = __graphFromVisits(visits);
- auto cc = graph::connectedComponents(*graph);
- reduceOutliers(cc);
- return cc;
-}
-
-std::shared_ptr<ctx::graph::Graph> ctx::PlacesDetector::__graphFromVisits(const std::vector<Visit> &visits)
-{
- std::shared_ptr<graph::Graph> graph = std::make_shared<graph::Graph>();
- graph->resize(visits.size());
- for (size_t i = 0; i < visits.size(); i++) {
- (*graph)[i] = std::make_shared<graph::NeighbourNodes>();
- for (size_t j = 0; j < i; j++) {
- if (similarity::isJoint(*visits[i].macSet, *visits[j].macSet)) {
- (*graph)[i]->insert(j);
- (*graph)[j]->insert(i);
- }
- }
- }
- return graph;
-}
-
-void ctx::PlacesDetector::__dbDeletePlaces()
-{
- std::vector<Json> records;
- bool ret = __dbManager.executeSync(__DELETE_PLACES_QUERY, &records);
- _D("delete places execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::PlacesDetector::__dbDeleteOldVisits()
-{
- time_t currentTime;
- time(¤tTime);
- time_t thresholdTime = currentTime - PLACES_DETECTOR_RETENTION_SECONDS;
- __dbDeleteOlderVisitsThan(thresholdTime);
-}
-
-void ctx::PlacesDetector::__dbDeleteOlderVisitsThan(time_t threshold)
-{
- _D("deleting vistits older than: %d", threshold);
- std::stringstream query;
- query << "DELETE FROM " << VISIT_TABLE;
- query << " WHERE " << VISIT_COLUMN_END_TIME << " < " << threshold;
- // query << " AND 0"; // XXX: Always false condition. Uncomment it for not deleting any visit during development.
- std::vector<Json> records;
- bool ret = __dbManager.executeSync(query.str().c_str(), &records);
- _D("delete old visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-ctx::PlacesDetector::PlacesDetector(bool testMode) :
- __testMode(testMode)
-{
- if (testMode) {
- return;
- }
- __dbCreateTable();
- std::vector<Json> records = __dbGetPlaces();
- std::vector<std::shared_ptr<Place>> dbPlaces = __placesFromJsons(records);
- __detectedPlacesUpdate(dbPlaces);
-}
-
-void ctx::PlacesDetector::__dbCreateTable()
-{
- bool ret = __dbManager.createTable(0, PLACE_TABLE, __PLACE_TABLE_COLUMNS);
- _D("db: place Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::PlacesDetector::__dbInsertPlace(const Place &place)
-{
- Json data;
- data.set(NULL, PLACE_COLUMN_CATEG_ID, place.categId);
- data.set(NULL, PLACE_COLUMN_CATEG_CONFIDENCE, place.categConfidence);
- data.set(NULL, PLACE_COLUMN_NAME, place.name);
-
- data.set(NULL, PLACE_COLUMN_LOCATION_VALID, place.locationValid);
- data.set(NULL, PLACE_COLUMN_LOCATION_LATITUDE, place.location.latitude);
- data.set(NULL, PLACE_COLUMN_LOCATION_LONGITUDE, place.location.longitude);
-
- data.set(NULL, PLACE_COLUMN_WIFI_APS, place.wifiAps);
- data.set(NULL, PLACE_COLUMN_CREATE_DATE, static_cast<int>(place.createDate));
-
- int64_t rowId;
- bool ret = __dbManager.insertSync(PLACE_TABLE, data, &rowId);
- _D("insert place execute query result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::PlacesDetector::getPlaces()
-{
- // XXX: In case of thread safety issues use std::mutex to protect places list.
- return __detectedPlaces;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
-#define _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_
-
-#include <vector>
-#include <cstdint>
-#include <ITimerListener.h>
-#include <DatabaseManager.h>
-#include "visit_detector.h"
-#include "user_places_types.h"
-
-namespace ctx {
-
- class PlacesDetector : public ITimerListener {
-
- private:
- bool __testMode;
- DatabaseManager __dbManager;
-
- double __doubleValueFromJson(Json &row, const char* key);
- Categs __visitCategsFromJson(Json &row);
- Visit __visitFromJson(Json &row);
- Visits __visitsFromJsons(std::vector<Json>& records);
- std::shared_ptr<ctx::Place> __placeFromJson(Json &row);
- std::vector<std::shared_ptr<Place>> __placesFromJsons(std::vector<Json>& records);
-
- std::shared_ptr<graph::Graph> __graphFromVisits(const std::vector<Visit> &visits);
-
- void __dbCreateTable();
- void __dbDeletePlaces();
- void __dbDeleteOldVisits();
- void __dbDeleteOlderVisitsThan(time_t threshold);
- std::vector<Json> __dbGetVisits();
- std::vector<Json> __dbGetPlaces();
- void __dbInsertPlace(const Place &place);
-
- std::shared_ptr<Place> __placeFromMergedVisits(Visits &mergedVisits);
- std::vector<std::shared_ptr<Place>> __detectedPlaces;
- void __detectedPlacesUpdate(std::vector<std::shared_ptr<Place>> &newPlaces);
- void __processVisits(Visits &visits);
- static void __mergeLocation(const Visits &mergedVisits, Place &place);
- std::shared_ptr<graph::Components> __mergeVisits(const std::vector<Visit> &visits);
-
- bool onTimerExpired(int timerId);
-
- public:
- PlacesDetector(bool testMode = false);
- static void reduceOutliers(Visits &visits); // TODO: move to private
- static void reduceOutliers(std::shared_ptr<graph::Components> &cc); // TODO: move to private
- std::vector<std::shared_ptr<Place>> getPlaces();
-
- }; /* class PlacesDetector */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_PLACES_DETECTOR_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
-#define _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_
-
-namespace ctx {
-
-namespace prob_features {
-
- /*
- * Probabilities for whole week <monday ÷ sunday> with minutes resolution
- * from beginning of the week (sunday -> monday midnight) <0, 10080).
- * Key is PlaceCategId:
- * PLACE_CATEG_ID_HOME
- * PLACE_CATEG_ID_WORK
- * PLACE_CATEG_ID_OTHER
- */
- std::map<PlaceCategId, std::vector<num_t>> weekModel {
- { PLACE_CATEG_ID_HOME,
- {
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9833333333333330,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9830508474576270,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9827586206896550,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9821428571428570,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9629629629629630,
- 0.9629629629629630,
- 0.9629629629629630,
- 0.9629629629629630,
- 0.9629629629629630,
- 0.9629629629629630,
- 0.9454545454545450,
- 0.9454545454545450,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9245283018867930,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9215686274509800,
- 0.9215686274509800,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8490566037735850,
- 0.8490566037735850,
- 0.8490566037735850,
- 0.8490566037735850,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8113207547169810,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7692307692307690,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7169811320754720,
- 0.7169811320754720,
- 0.7169811320754720,
- 0.7115384615384620,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.6875000000000000,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6666666666666670,
- 0.6400000000000000,
- 0.6274509803921570,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6078431372549020,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5769230769230770,
- 0.5769230769230770,
- 0.5600000000000000,
- 0.5490196078431370,
- 0.5208333333333330,
- 0.5208333333333330,
- 0.5208333333333330,
- 0.5208333333333330,
- 0.5208333333333330,
- 0.5102040816326530,
- 0.4893617021276600,
- 0.4893617021276600,
- 0.4893617021276600,
- 0.4893617021276600,
- 0.4444444444444440,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4255319148936170,
- 0.4130434782608700,
- 0.4130434782608700,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.2790697674418600,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2666666666666670,
- 0.2666666666666670,
- 0.2666666666666670,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2200000000000000,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1346153846153850,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1481481481481480,
- 0.1636363636363640,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1578947368421050,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1754385964912280,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1818181818181820,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1785714285714290,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1818181818181820,
- 0.1964285714285710,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1964285714285710,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.2105263157894740,
- 0.2142857142857140,
- 0.2321428571428570,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2500000000000000,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2592592592592590,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2592592592592590,
- 0.2592592592592590,
- 0.2592592592592590,
- 0.2777777777777780,
- 0.2777777777777780,
- 0.2641509433962260,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2745098039215690,
- 0.2830188679245280,
- 0.2884615384615380,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2884615384615380,
- 0.2941176470588230,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.3000000000000000,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3000000000000000,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3200000000000000,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3478260869565220,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.4130434782608700,
- 0.4130434782608700,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4489795918367350,
- 0.4888888888888890,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5116279069767440,
- 0.5116279069767440,
- 0.5116279069767440,
- 0.5238095238095240,
- 0.5238095238095240,
- 0.5365853658536590,
- 0.5365853658536590,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5227272727272730,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5227272727272730,
- 0.5227272727272730,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5111111111111110,
- 0.5111111111111110,
- 0.5227272727272730,
- 0.5227272727272730,
- 0.4893617021276600,
- 0.5000000000000000,
- 0.5102040816326530,
- 0.5102040816326530,
- 0.5200000000000000,
- 0.5306122448979590,
- 0.5200000000000000,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5192307692307690,
- 0.5094339622641510,
- 0.5094339622641510,
- 0.5094339622641510,
- 0.5294117647058820,
- 0.5384615384615380,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5636363636363640,
- 0.5535714285714290,
- 0.5535714285714290,
- 0.5535714285714290,
- 0.5636363636363640,
- 0.5714285714285710,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5818181818181820,
- 0.5925925925925930,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6956521739130430,
- 0.7111111111111110,
- 0.7111111111111110,
- 0.7111111111111110,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.7872340425531920,
- 0.7872340425531920,
- 0.7872340425531920,
- 0.7708333333333330,
- 0.7400000000000000,
- 0.7400000000000000,
- 0.7551020408163260,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7115384615384620,
- 0.7115384615384620,
- 0.7115384615384620,
- 0.7169811320754720,
- 0.7169811320754720,
- 0.7307692307692310,
- 0.7307692307692310,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7800000000000000,
- 0.7800000000000000,
- 0.7692307692307690,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7800000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8200000000000000,
- 0.8200000000000000,
- 0.8039215686274510,
- 0.8039215686274510,
- 0.8039215686274510,
- 0.8039215686274510,
- 0.8235294117647060,
- 0.8076923076923080,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7884615384615380,
- 0.8076923076923080,
- 0.8076923076923080,
- 0.8076923076923080,
- 0.8113207547169810,
- 0.8113207547169810,
- 0.8148148148148150,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8148148148148150,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8333333333333330,
- 0.8518518518518520,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8793103448275860,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8771929824561400,
- 0.8793103448275860,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8793103448275860,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.9000000000000000,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9016393442622950,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9062500000000000,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9508196721311470,
- 0.9508196721311470,
- 0.9508196721311470,
- 0.9508196721311470,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9836065573770490,
- 0.9836065573770490,
- 0.9836065573770490,
- 0.9836065573770490,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9838709677419350,
- 0.9841269841269840,
- 0.9841269841269840,
- 0.9841269841269840,
- 0.9841269841269840,
- 0.9841269841269840,
- 0.9841269841269840,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9848484848484850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9846153846153850,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 0.9843750000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 1.0000000000000000,
- 0.9661016949152540,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9473684210526320,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9137931034482760,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9107142857142860,
- 0.9272727272727270,
- 0.9107142857142860,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.8947368421052630,
- 0.9107142857142860,
- 0.9107142857142860,
- 0.9107142857142860,
- 0.9107142857142860,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8727272727272730,
- 0.8888888888888890,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8490566037735850,
- 0.8490566037735850,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8000000000000000,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7818181818181820,
- 0.7777777777777780,
- 0.7454545454545450,
- 0.7454545454545450,
- 0.7407407407407410,
- 0.7407407407407410,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7307692307692310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7058823529411760,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.6800000000000000,
- 0.6800000000000000,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6600000000000000,
- 0.6600000000000000,
- 0.6600000000000000,
- 0.6470588235294120,
- 0.6346153846153850,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.5769230769230770,
- 0.5576923076923080,
- 0.5576923076923080,
- 0.5576923076923080,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5471698113207550,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5200000000000000,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5200000000000000,
- 0.5200000000000000,
- 0.5200000000000000,
- 0.5200000000000000,
- 0.5200000000000000,
- 0.5200000000000000,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5000000000000000,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4509803921568630,
- 0.4600000000000000,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3541666666666670,
- 0.3333333333333330,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3061224489795920,
- 0.3000000000000000,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2391304347826090,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2045454545454550,
- 0.1956521739130430,
- 0.1914893617021280,
- 0.1875000000000000,
- 0.1632653061224490,
- 0.1632653061224490,
- 0.1600000000000000,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.1093750000000000,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0468750000000000,
- 0.0476190476190476,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0476190476190476,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0333333333333333,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0357142857142857,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0937500000000000,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.1000000000000000,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1311475409836070,
- 0.1333333333333330,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1290322580645160,
- 0.1269841269841270,
- 0.1406250000000000,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1562500000000000,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1718750000000000,
- 0.1846153846153850,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1904761904761900,
- 0.1774193548387100,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1864406779661020,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1929824561403510,
- 0.2000000000000000,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2115384615384620,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2181818181818180,
- 0.2181818181818180,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2280701754385960,
- 0.2321428571428570,
- 0.2363636363636360,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2407407407407410,
- 0.2592592592592590,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2884615384615380,
- 0.3000000000000000,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3400000000000000,
- 0.3400000000000000,
- 0.3400000000000000,
- 0.3400000000000000,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3400000000000000,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3653846153846150,
- 0.3888888888888890,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4385964912280700,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4464285714285710,
- 0.4545454545454550,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4705882352941180,
- 0.5000000000000000,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5192307692307690,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.4905660377358490,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4905660377358490,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.4909090909090910,
- 0.4909090909090910,
- 0.5192307692307690,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5576923076923080,
- 0.5576923076923080,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.6170212765957450,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6666666666666670,
- 0.6739130434782610,
- 0.6808510638297870,
- 0.6458333333333330,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6530612244897960,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6875000000000000,
- 0.6938775510204080,
- 0.7083333333333330,
- 0.7234042553191490,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6981132075471700,
- 0.7169811320754720,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7358490566037730,
- 0.7407407407407410,
- 0.7547169811320760,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7272727272727270,
- 0.7454545454545450,
- 0.7321428571428570,
- 0.7321428571428570,
- 0.7321428571428570,
- 0.7321428571428570,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7288135593220340,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7213114754098360,
- 0.7258064516129030,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7419354838709680,
- 0.7419354838709680,
- 0.7419354838709680,
- 0.7666666666666670,
- 0.7666666666666670,
- 0.7666666666666670,
- 0.7666666666666670,
- 0.7666666666666670,
- 0.7796610169491530,
- 0.8214285714285710,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7796610169491530,
- 0.7833333333333330,
- 0.7868852459016390,
- 0.8000000000000000,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7936507936507940,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.7968750000000000,
- 0.7968750000000000,
- 0.7968750000000000,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.7846153846153850,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8125000000000000,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8906250000000000,
- 0.8906250000000000,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8730158730158730,
- 0.8888888888888890,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9242424242424240,
- 0.9253731343283580,
- 0.9264705882352940,
- 0.9264705882352940,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9285714285714290,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9420289855072460,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9565217391304350,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9705882352941180,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9701492537313430,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9696969696969700,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9692307692307690,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9692307692307690,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9365079365079360,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9333333333333330,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9166666666666670,
- 0.9322033898305080,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8852459016393440,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8644067796610170,
- 0.8666666666666670,
- 0.8524590163934430,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8474576271186440,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8166666666666670,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8000000000000000,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7636363636363640,
- 0.7592592592592590,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7500000000000000,
- 0.7450980392156860,
- 0.7346938775510200,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7058823529411760,
- 0.7000000000000000,
- 0.6862745098039220,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6538461538461540,
- 0.6470588235294120,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6226415094339620,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5714285714285710,
- 0.5714285714285710,
- 0.5614035087719300,
- 0.5517241379310340,
- 0.5272727272727270,
- 0.5272727272727270,
- 0.5272727272727270,
- 0.5272727272727270,
- 0.5178571428571430,
- 0.5178571428571430,
- 0.4909090909090910,
- 0.4821428571428570,
- 0.4821428571428570,
- 0.4736842105263160,
- 0.4482758620689660,
- 0.4482758620689660,
- 0.4385964912280700,
- 0.4385964912280700,
- 0.4385964912280700,
- 0.4385964912280700,
- 0.4385964912280700,
- 0.4385964912280700,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3703703703703700,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3518518518518520,
- 0.3137254901960780,
- 0.2941176470588230,
- 0.2800000000000000,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2200000000000000,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1612903225806450,
- 0.1406250000000000,
- 0.1406250000000000,
- 0.1384615384615380,
- 0.1384615384615380,
- 0.1406250000000000,
- 0.1406250000000000,
- 0.1384615384615380,
- 0.1384615384615380,
- 0.1363636363636360,
- 0.1363636363636360,
- 0.1363636363636360,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1323529411764710,
- 0.1304347826086960,
- 0.1304347826086960,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1285714285714290,
- 0.1267605633802820,
- 0.1142857142857140,
- 0.1142857142857140,
- 0.1159420289855070,
- 0.1159420289855070,
- 0.1159420289855070,
- 0.1029411764705880,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0869565217391304,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0735294117647059,
- 0.0724637681159420,
- 0.0735294117647059,
- 0.0746268656716418,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0645161290322581,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0645161290322581,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0606060606060606,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0571428571428571,
- 0.0579710144927536,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0597014925373134,
- 0.0606060606060606,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0579710144927536,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0746268656716418,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0704225352112676,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0684931506849315,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0563380281690141,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0422535211267606,
- 0.0428571428571429,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0428571428571429,
- 0.0434782608695652,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0724637681159420,
- 0.0735294117647059,
- 0.0724637681159420,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0985915492957746,
- 0.0985915492957746,
- 0.1000000000000000,
- 0.1014492753623190,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1470588235294120,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1470588235294120,
- 0.1470588235294120,
- 0.1449275362318840,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1323529411764710,
- 0.1343283582089550,
- 0.1212121212121210,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1212121212121210,
- 0.1194029850746270,
- 0.1194029850746270,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1470588235294120,
- 0.1492537313432840,
- 0.1515151515151520,
- 0.1515151515151520,
- 0.1515151515151520,
- 0.1515151515151520,
- 0.1515151515151520,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1791044776119400,
- 0.1791044776119400,
- 0.1818181818181820,
- 0.1875000000000000,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1774193548387100,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1666666666666670,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.2131147540983610,
- 0.2166666666666670,
- 0.2166666666666670,
- 0.2131147540983610,
- 0.2258064516129030,
- 0.2258064516129030,
- 0.2258064516129030,
- 0.2258064516129030,
- 0.2258064516129030,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2372881355932200,
- 0.2456140350877190,
- 0.2363636363636360,
- 0.2631578947368420,
- 0.2631578947368420,
- 0.2586206896551720,
- 0.2631578947368420,
- 0.2631578947368420,
- 0.2678571428571430,
- 0.2727272727272730,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2909090909090910,
- 0.2962962962962960,
- 0.2830188679245280,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3877551020408160,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.4081632653061220,
- 0.4038461538461540,
- 0.4074074074074070,
- 0.4035087719298250,
- 0.3965517241379310,
- 0.3965517241379310,
- 0.4067796610169490,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4237288135593220,
- 0.4237288135593220,
- 0.4237288135593220,
- 0.4310344827586210,
- 0.4310344827586210,
- 0.4237288135593220,
- 0.4237288135593220,
- 0.4237288135593220,
- 0.4333333333333330,
- 0.4426229508196720,
- 0.4426229508196720,
- 0.4516129032258060,
- 0.4516129032258060,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4531250000000000,
- 0.4461538461538460,
- 0.4461538461538460,
- 0.4285714285714290,
- 0.4354838709677420,
- 0.4262295081967210,
- 0.4482758620689660,
- 0.4482758620689660,
- 0.4406779661016950,
- 0.4406779661016950,
- 0.4406779661016950,
- 0.4576271186440680,
- 0.4590163934426230,
- 0.4677419354838710,
- 0.4915254237288140,
- 0.4915254237288140,
- 0.4915254237288140,
- 0.5000000000000000,
- 0.5081967213114750,
- 0.5081967213114750,
- 0.5081967213114750,
- 0.5081967213114750,
- 0.5166666666666670,
- 0.5166666666666670,
- 0.5166666666666670,
- 0.5166666666666670,
- 0.5081967213114750,
- 0.5081967213114750,
- 0.5081967213114750,
- 0.5000000000000000,
- 0.5084745762711860,
- 0.5084745762711860,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5081967213114750,
- 0.5161290322580650,
- 0.5076923076923080,
- 0.5156250000000000,
- 0.5238095238095240,
- 0.5238095238095240,
- 0.5238095238095240,
- 0.5245901639344260,
- 0.5333333333333330,
- 0.5245901639344260,
- 0.5500000000000000,
- 0.5500000000000000,
- 0.5573770491803280,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5645161290322580,
- 0.5625000000000000,
- 0.5538461538461540,
- 0.5454545454545450,
- 0.5454545454545450,
- 0.5454545454545450,
- 0.5454545454545450,
- 0.5384615384615380,
- 0.5384615384615380,
- 0.5384615384615380,
- 0.5454545454545450,
- 0.5588235294117650,
- 0.5588235294117650,
- 0.5671641791044780,
- 0.5588235294117650,
- 0.5588235294117650,
- 0.5588235294117650,
- 0.5757575757575760,
- 0.5757575757575760,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6290322580645160,
- 0.6290322580645160,
- 0.6290322580645160,
- 0.6393442622950820,
- 0.6393442622950820,
- 0.6393442622950820,
- 0.6271186440677970,
- 0.6271186440677970,
- 0.6271186440677970,
- 0.6206896551724140,
- 0.6206896551724140,
- 0.6206896551724140,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6315789473684210,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6226415094339620,
- 0.6181818181818180,
- 0.6296296296296300,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6315789473684210,
- 0.6428571428571430,
- 0.6545454545454550,
- 0.6607142857142860,
- 0.6607142857142860,
- 0.6607142857142860,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6779661016949150,
- 0.6779661016949150,
- 0.6833333333333330,
- 0.6833333333333330,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7166666666666670,
- 0.7049180327868850,
- 0.7049180327868850,
- 0.7049180327868850,
- 0.7049180327868850,
- 0.6935483870967740,
- 0.6935483870967740,
- 0.6935483870967740,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6969696969696970,
- 0.6969696969696970,
- 0.7076923076923080,
- 0.7076923076923080,
- 0.6969696969696970,
- 0.6969696969696970,
- 0.6865671641791040,
- 0.6865671641791040,
- 0.6865671641791040,
- 0.6911764705882350,
- 0.6911764705882350,
- 0.6911764705882350,
- 0.6911764705882350,
- 0.7014925373134330,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7164179104477610,
- 0.7164179104477610,
- 0.7164179104477610,
- 0.7164179104477610,
- 0.7164179104477610,
- 0.7164179104477610,
- 0.7246376811594200,
- 0.7246376811594200,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7352941176470590,
- 0.7462686567164180,
- 0.7462686567164180,
- 0.7575757575757580,
- 0.7611940298507460,
- 0.7611940298507460,
- 0.7647058823529410,
- 0.7681159420289850,
- 0.7681159420289850,
- 0.7681159420289850,
- 0.7681159420289850,
- 0.7681159420289850,
- 0.7681159420289850,
- 0.7826086956521740,
- 0.7941176470588230,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8059701492537310,
- 0.8181818181818180,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8484848484848480,
- 0.8484848484848480,
- 0.8484848484848480,
- 0.8484848484848480,
- 0.8507462686567160,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8656716417910450,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8636363636363640,
- 0.8636363636363640,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8906250000000000,
- 0.8906250000000000,
- 0.8906250000000000,
- 0.8923076923076920,
- 0.8923076923076920,
- 0.8923076923076920,
- 0.8923076923076920,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9014084507042250,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9305555555555560,
- 0.9305555555555560,
- 0.9305555555555560,
- 0.9305555555555560,
- 0.9305555555555560,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9315068493150680,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9324324324324320,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9459459459459460,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9452054794520550,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9577464788732390,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9571428571428570,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9558823529411760,
- 0.9545454545454550,
- 0.9545454545454550,
- 0.9545454545454550,
- 0.9545454545454550,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9672131147540980,
- 0.9672131147540980,
- 0.9672131147540980,
- 0.9672131147540980,
- 0.9672131147540980,
- 0.9672131147540980,
- 0.9666666666666670,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9322033898305080,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.9137931034482760,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8965517241379310,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8793103448275860,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7704918032786880,
- 0.7704918032786880,
- 0.7704918032786880,
- 0.7704918032786880,
- 0.7704918032786880,
- 0.7580645161290320,
- 0.7540983606557380,
- 0.7419354838709680,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7288135593220340,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7068965517241380,
- 0.7068965517241380,
- 0.7017543859649120,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6842105263157900,
- 0.6842105263157900,
- 0.6842105263157900,
- 0.6842105263157900,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6666666666666670,
- 0.6551724137931030,
- 0.6379310344827590,
- 0.6271186440677970,
- 0.6206896551724140,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5789473684210530,
- 0.5689655172413790,
- 0.5689655172413790,
- 0.5689655172413790,
- 0.5689655172413790,
- 0.5689655172413790,
- 0.5593220338983050,
- 0.5593220338983050,
- 0.5593220338983050,
- 0.5593220338983050,
- 0.5500000000000000,
- 0.5423728813559320,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5333333333333330,
- 0.5423728813559320,
- 0.5423728813559320,
- 0.5333333333333330,
- 0.5166666666666670,
- 0.5333333333333330,
- 0.5254237288135590,
- 0.5254237288135590,
- 0.5254237288135590,
- 0.5333333333333330,
- 0.5245901639344260,
- 0.5081967213114750,
- 0.4736842105263160,
- 0.4655172413793100,
- 0.4576271186440680,
- 0.4482758620689660,
- 0.4406779661016950,
- 0.4406779661016950,
- 0.4310344827586210,
- 0.4310344827586210,
- 0.4310344827586210,
- 0.4310344827586210,
- 0.4137931034482760,
- 0.4137931034482760,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3396226415094340,
- 0.3333333333333330,
- 0.3272727272727270,
- 0.3272727272727270,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2830188679245280,
- 0.2549019607843140,
- 0.2600000000000000,
- 0.2448979591836730,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2264150943396230,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1639344262295080,
- 0.1451612903225810,
- 0.1451612903225810,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1029411764705880,
- 0.1044776119402990,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0597014925373134,
- 0.0606060606060606,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0746268656716418,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0746268656716418,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0869565217391304,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1029411764705880,
- 0.0909090909090909,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0937500000000000,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.0895522388059701,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0923076923076923,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0923076923076923,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1016949152542370,
- 0.0967741935483871,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.1111111111111110,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1076923076923080,
- 0.1093750000000000,
- 0.1111111111111110,
- 0.1093750000000000,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0806451612903226,
- 0.0819672131147541,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1186440677966100,
- 0.1147540983606560,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1269841269841270,
- 0.1269841269841270,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1269841269841270,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1311475409836070,
- 0.1311475409836070,
- 0.1290322580645160,
- 0.1311475409836070,
- 0.1451612903225810,
- 0.1333333333333330,
- 0.1311475409836070,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1500000000000000,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1774193548387100,
- 0.1904761904761900,
- 0.1935483870967740,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1833333333333330,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1896551724137930,
- 0.2033898305084750,
- 0.2000000000000000,
- 0.1967213114754100,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1724137931034480,
- 0.1864406779661020,
- 0.1896551724137930,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1694915254237290,
- 0.1833333333333330,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.2105263157894740,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2280701754385960,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2280701754385960,
- 0.2000000000000000,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1964285714285710,
- 0.2241379310344830,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2321428571428570,
- 0.2407407407407410,
- 0.2407407407407410,
- 0.2407407407407410,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2352941176470590,
- 0.2352941176470590,
- 0.2400000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2982456140350880,
- 0.2982456140350880,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3148148148148150,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3584905660377360,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4038461538461540,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4285714285714290,
- 0.4285714285714290,
- 0.4200000000000000,
- 0.4117647058823530,
- 0.4230769230769230,
- 0.4117647058823530,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4313725490196080,
- 0.4230769230769230,
- 0.4400000000000000,
- 0.4400000000000000,
- 0.4400000000000000,
- 0.4509803921568630,
- 0.4615384615384620,
- 0.4615384615384620,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4901960784313730,
- 0.4901960784313730,
- 0.5098039215686270,
- 0.5098039215686270,
- 0.5000000000000000,
- 0.5192307692307690,
- 0.5294117647058820,
- 0.5490196078431370,
- 0.5490196078431370,
- 0.5600000000000000,
- 0.5576923076923080,
- 0.5686274509803920,
- 0.5800000000000000,
- 0.5800000000000000,
- 0.5882352941176470,
- 0.6000000000000000,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6226415094339620,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6481481481481480,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6666666666666670,
- 0.6800000000000000,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6792452830188680,
- 0.6923076923076920,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.7115384615384620,
- 0.7115384615384620,
- 0.7254901960784310,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7090909090909090,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.6779661016949150,
- 0.6885245901639340,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.6984126984126980,
- 0.6885245901639340,
- 0.6885245901639340,
- 0.6885245901639340,
- 0.7000000000000000,
- 0.6774193548387100,
- 0.6774193548387100,
- 0.6774193548387100,
- 0.6774193548387100,
- 0.6721311475409840,
- 0.6557377049180330,
- 0.6557377049180330,
- 0.6666666666666670,
- 0.6779661016949150,
- 0.6779661016949150,
- 0.6779661016949150,
- 0.6779661016949150,
- 0.6779661016949150,
- 0.7272727272727270,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.7068965517241380,
- 0.7068965517241380,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7321428571428570,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7543859649122810,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7894736842105260,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7741935483870970,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8032786885245900,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8064516129032260,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8166666666666670,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8166666666666670,
- 0.8196721311475410,
- 0.8196721311475410,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8666666666666670,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8833333333333330,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8906250000000000,
- 0.8906250000000000,
- 0.8923076923076920,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8939393939393940,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.8955223880597010,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9016393442622950,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.8852459016393440,
- 0.8833333333333330,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8596491228070170,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.7962962962962960,
- 0.7924528301886790,
- 0.7884615384615380,
- 0.7843137254901960,
- 0.7843137254901960,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7407407407407410,
- 0.7407407407407410,
- 0.7272727272727270,
- 0.7222222222222220,
- 0.6842105263157900,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6724137931034480,
- 0.6607142857142860,
- 0.6545454545454550,
- 0.6481481481481480,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6603773584905660,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6111111111111110,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5849056603773580,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5660377358490570,
- 0.5660377358490570,
- 0.5555555555555560,
- 0.5471698113207550,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5370370370370370,
- 0.5272727272727270,
- 0.5272727272727270,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.4905660377358490,
- 0.4905660377358490,
- 0.4905660377358490,
- 0.4905660377358490,
- 0.4814814814814810,
- 0.4905660377358490,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4807692307692310,
- 0.4705882352941180,
- 0.4615384615384620,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4489795918367350,
- 0.4489795918367350,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4255319148936170,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4222222222222220,
- 0.4222222222222220,
- 0.4130434782608700,
- 0.4130434782608700,
- 0.4130434782608700,
- 0.4000000000000000,
- 0.3720930232558140,
- 0.3720930232558140,
- 0.3636363636363640,
- 0.3555555555555560,
- 0.3478260869565220,
- 0.3404255319148940,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.2954545454545450,
- 0.2888888888888890,
- 0.2888888888888890,
- 0.2888888888888890,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2444444444444440,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2200000000000000,
- 0.2040816326530610,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1818181818181820,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1578947368421050,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1052631578947370,
- 0.1071428571428570,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0740740740740741,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0740740740740741,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0784313725490196,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0816326530612245,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1041666666666670,
- 0.1224489795918370,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1538461538461540,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1346153846153850,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1636363636363640,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1896551724137930,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2352941176470590,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2352941176470590,
- 0.2352941176470590,
- 0.2352941176470590,
- 0.2500000000000000,
- 0.2549019607843140,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2800000000000000,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2916666666666670,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2916666666666670,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3200000000000000,
- 0.3200000000000000,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3061224489795920,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3617021276595740,
- 0.3750000000000000,
- 0.3829787234042550,
- 0.3913043478260870,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.4042553191489360,
- 0.4130434782608700,
- 0.4318181818181820,
- 0.4444444444444440,
- 0.4545454545454550,
- 0.4545454545454550,
- 0.4761904761904760,
- 0.4651162790697670,
- 0.4545454545454550,
- 0.4545454545454550,
- 0.4651162790697670,
- 0.4545454545454550,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4545454545454550,
- 0.4418604651162790,
- 0.4523809523809520,
- 0.4523809523809520,
- 0.4878048780487810,
- 0.4878048780487810,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5116279069767440,
- 0.5116279069767440,
- 0.5227272727272730,
- 0.5227272727272730,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5476190476190480,
- 0.5348837209302320,
- 0.5348837209302320,
- 0.5476190476190480,
- 0.5476190476190480,
- 0.5454545454545450,
- 0.5714285714285710,
- 0.5909090909090910,
- 0.5777777777777780,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6170212765957450,
- 0.6304347826086960,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5882352941176470,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6078431372549020,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.6037735849056600,
- 0.6153846153846150,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6326530612244900,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6600000000000000,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6734693877551020,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6600000000000000,
- 0.6470588235294120,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6603773584905660,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7254901960784310,
- 0.7307692307692310,
- 0.7307692307692310,
- 0.7307692307692310,
- 0.7307692307692310,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7272727272727270,
- 0.7142857142857140,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7090909090909090,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7307692307692310,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7358490566037730,
- 0.7407407407407410,
- 0.7407407407407410,
- 0.7407407407407410,
- 0.7407407407407410,
- 0.7547169811320760,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7647058823529410,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7777777777777780,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8909090909090910,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8775510204081630,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8800000000000000,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8800000000000000,
- 0.8627450980392160,
- 0.8571428571428570,
- 0.8541666666666670,
- 0.8541666666666670,
- 0.8510638297872340,
- 0.8478260869565220,
- 0.8478260869565220,
- 0.8478260869565220,
- 0.8297872340425530,
- 0.8125000000000000,
- 0.7959183673469390,
- 0.7916666666666670,
- 0.7916666666666670,
- 0.7916666666666670,
- 0.7916666666666670,
- 0.7916666666666670,
- 0.7872340425531920,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7659574468085110,
- 0.7659574468085110,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7555555555555560,
- 0.7727272727272730,
- 0.7906976744186050,
- 0.7954545454545450,
- 0.7954545454545450,
- 0.7954545454545450,
- 0.7954545454545450,
- 0.7954545454545450,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7446808510638300,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7608695652173910,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7555555555555560,
- 0.7608695652173910,
- 0.7659574468085110,
- 0.7659574468085110,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7346938775510200,
- 0.7291666666666670,
- 0.7234042553191490,
- 0.7291666666666670,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.6938775510204080,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.7111111111111110,
- 0.7173913043478260,
- 0.7111111111111110,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7209302325581400,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6808510638297870,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6808510638297870,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6734693877551020,
- 0.6666666666666670,
- 0.6530612244897960,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6530612244897960,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6734693877551020,
- 0.6938775510204080,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7083333333333330,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.7021276595744680,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.7083333333333330,
- 0.6938775510204080,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.6862745098039220,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6792452830188680,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6545454545454550,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6603773584905660,
- 0.6538461538461540,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6603773584905660,
- 0.6730769230769230,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6800000000000000,
- 0.6938775510204080,
- 0.6800000000000000,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6600000000000000,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6600000000000000,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6530612244897960,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6326530612244900,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5869565217391300,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5833333333333330,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5531914893617020,
- 0.5531914893617020,
- 0.5531914893617020,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5434782608695650,
- 0.5434782608695650,
- 0.5434782608695650,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5869565217391300,
- 0.5869565217391300,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5744680851063830,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5714285714285710,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5800000000000000,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.6000000000000000,
- 0.5882352941176470,
- 0.5961538461538460,
- 0.5849056603773580,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5961538461538460,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.6122448979591840,
- 0.6078431372549020,
- 0.6078431372549020,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6153846153846150,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.5961538461538460,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5925925925925930,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.6000000000000000,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6071428571428570,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6296296296296300,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6111111111111110,
- 0.6037735849056600,
- 0.5925925925925930,
- 0.5925925925925930,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.5925925925925930,
- 0.6000000000000000,
- 0.6037735849056600,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6226415094339620,
- 0.6226415094339620,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6226415094339620,
- 0.6226415094339620,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6481481481481480,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6481481481481480,
- 0.6545454545454550,
- 0.6545454545454550,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6491228070175440,
- 0.6491228070175440,
- 0.6491228070175440,
- 0.6491228070175440,
- 0.6607142857142860,
- 0.6666666666666670,
- 0.6603773584905660,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6470588235294120,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6666666666666670,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6200000000000000,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6326530612244900,
- 0.6530612244897960,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6530612244897960,
- 0.6600000000000000,
- 0.6600000000000000,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6530612244897960,
- 0.6400000000000000,
- 0.6274509803921570,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.5849056603773580,
- 0.6000000000000000,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6037735849056600,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6226415094339620,
- 0.6226415094339620,
- 0.6037735849056600,
- 0.6037735849056600,
- 0.6111111111111110,
- 0.6181818181818180,
- 0.6071428571428570,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5862068965517240,
- 0.5862068965517240,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5789473684210530,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5789473684210530,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.5892857142857140,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6862745098039220,
- 0.7000000000000000,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.6862745098039220,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7200000000000000,
- 0.7346938775510200,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.7058823529411760,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6909090909090910,
- 0.6909090909090910,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7090909090909090,
- 0.7222222222222220,
- 0.7358490566037730,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7272727272727270,
- 0.7142857142857140,
- 0.7192982456140350,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7241379310344830,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7413793103448280,
- 0.7543859649122810,
- 0.7543859649122810,
- 0.7543859649122810,
- 0.7543859649122810,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8070175438596490,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8035714285714290,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8103448275862070,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8363636363636360,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8431372549019610,
- 0.8431372549019610,
- 0.8431372549019610,
- 0.8431372549019610,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8936170212765960,
- 0.8936170212765960,
- 0.8936170212765960,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8222222222222220,
- 0.8043478260869560,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7755102040816330,
- 0.7755102040816330,
- 0.7755102040816330,
- 0.7755102040816330,
- 0.7755102040816330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7234042553191490,
- 0.7083333333333330,
- 0.7021276595744680,
- 0.6875000000000000,
- 0.6734693877551020,
- 0.6734693877551020,
- 0.6666666666666670,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6666666666666670,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6666666666666670,
- 0.6739130434782610,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7209302325581400,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7173913043478260,
- 0.7173913043478260,
- 0.7111111111111110,
- 0.7111111111111110,
- 0.7272727272727270,
- 0.7441860465116280,
- 0.7441860465116280,
- 0.7441860465116280,
- 0.7500000000000000,
- 0.7333333333333330,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7446808510638300,
- 0.7446808510638300,
- 0.7291666666666670,
- 0.7500000000000000,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7600000000000000,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7551020408163260,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7200000000000000,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7200000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7551020408163260,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7446808510638300,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7391304347826090,
- 0.7446808510638300,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7291666666666670,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7142857142857140,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7142857142857140,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7173913043478260,
- 0.7173913043478260,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7111111111111110,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6808510638297870,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6888888888888890,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6976744186046510,
- 0.6976744186046510,
- 0.7209302325581400,
- 0.7142857142857140,
- 0.6976744186046510,
- 0.6976744186046510,
- 0.6976744186046510,
- 0.6818181818181820,
- 0.6666666666666670,
- 0.6382978723404260,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.6000000000000000,
- 0.6122448979591840,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6200000000000000,
- 0.6200000000000000,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6458333333333330,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6595744680851060,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6956521739130430,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7272727272727270,
- 0.7111111111111110,
- 0.7111111111111110,
- 0.7173913043478260,
- 0.7111111111111110,
- 0.7111111111111110,
- 0.6956521739130430,
- 0.6808510638297870,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6444444444444440,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6521739130434780,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6521739130434780,
- 0.6521739130434780,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6458333333333330,
- 0.6458333333333330,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6458333333333330,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6400000000000000,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6200000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6304347826086960,
- 0.6382978723404260,
- 0.6304347826086960,
- 0.6444444444444440,
- 0.6590909090909090,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6222222222222220,
- 0.6136363636363640,
- 0.6046511627906980,
- 0.6046511627906980,
- 0.6046511627906980,
- 0.6046511627906980,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6136363636363640,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6363636363636360,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6222222222222220,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6585365853658540,
- 0.6829268292682930,
- 0.6904761904761900,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6904761904761900,
- 0.6904761904761900,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6904761904761900,
- 0.6904761904761900,
- 0.6904761904761900,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6904761904761900,
- 0.6904761904761900,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6590909090909090,
- 0.6590909090909090,
- 0.6511627906976740,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6170212765957450,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.6086956521739130,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6136363636363640,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6511627906976740,
- 0.6511627906976740,
- 0.6511627906976740,
- 0.6590909090909090,
- 0.6744186046511630,
- 0.6744186046511630,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6739130434782610,
- 0.6595744680851060,
- 0.6595744680851060,
- 0.6739130434782610,
- 0.6976744186046510,
- 0.6818181818181820,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6956521739130430,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6739130434782610,
- 0.6739130434782610,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6739130434782610,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.6739130434782610,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6808510638297870,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.6875000000000000,
- 0.7021276595744680,
- 0.7173913043478260,
- 0.7173913043478260,
- 0.7234042553191490,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7083333333333330,
- 0.7234042553191490,
- 0.7234042553191490,
- 0.7234042553191490,
- 0.7234042553191490,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7291666666666670,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7659574468085110,
- 0.7659574468085110,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.8043478260869560,
- 0.8043478260869560,
- 0.8043478260869560,
- 0.8043478260869560,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.8043478260869560,
- 0.8043478260869560,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7708333333333330,
- 0.7755102040816330,
- 0.7916666666666670,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8125000000000000,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8260869565217390,
- 0.8297872340425530,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8163265306122450,
- 0.8125000000000000,
- 0.8085106382978720,
- 0.8085106382978720,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8222222222222220,
- 0.8297872340425530,
- 0.8297872340425530,
- 0.8297872340425530,
- 0.8297872340425530,
- 0.8297872340425530,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8163265306122450,
- 0.8163265306122450,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8541666666666670,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8541666666666670,
- 0.8541666666666670,
- 0.8541666666666670,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8723404255319150,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8775510204081630,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8958333333333330,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.8979591836734690,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.8979591836734690,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9200000000000000,
- 0.9183673469387750,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9019607843137260,
- 0.9019607843137260,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9038461538461540,
- 0.9056603773584910,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9074074074074070,
- 0.9090909090909090,
- 0.9259259259259260,
- 0.9272727272727270,
- 0.9272727272727270,
- 0.9272727272727270,
- 0.9285714285714290,
- 0.9454545454545450,
- 0.9454545454545450,
- 0.9464285714285710,
- 0.9464285714285710,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9636363636363640,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9642857142857140,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9649122807017540,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9824561403508770,
- 0.9824561403508770,
- 0.9824561403508770
- }
- },
- { PLACE_CATEG_ID_WORK,
- {
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0377358490566038,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1698113207547170,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2115384615384620,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2641509433962260,
- 0.2641509433962260,
- 0.2641509433962260,
- 0.2692307692307690,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2916666666666670,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2916666666666670,
- 0.3200000000000000,
- 0.3333333333333330,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3529411764705880,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.4000000000000000,
- 0.4117647058823530,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4489795918367350,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.5111111111111110,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5319148936170210,
- 0.5434782608695650,
- 0.5434782608695650,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5652173913043480,
- 0.5777777777777780,
- 0.5777777777777780,
- 0.5777777777777780,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6086956521739130,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6444444444444440,
- 0.6444444444444440,
- 0.6744186046511630,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6818181818181820,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.6888888888888890,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7045454545454550,
- 0.7346938775510200,
- 0.7346938775510200,
- 0.7400000000000000,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8947368421052630,
- 0.8947368421052630,
- 0.8947368421052630,
- 0.8947368421052630,
- 0.8947368421052630,
- 0.8947368421052630,
- 0.8965517241379310,
- 0.8965517241379310,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8833333333333330,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8852459016393440,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.8870967741935480,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8983050847457630,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8360655737704920,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8644067796610170,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8524590163934430,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8688524590163930,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8833333333333330,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8793103448275860,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8214285714285710,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8000000000000000,
- 0.7962962962962960,
- 0.7818181818181820,
- 0.7777777777777780,
- 0.7735849056603770,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7735849056603770,
- 0.7735849056603770,
- 0.7692307692307690,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7592592592592590,
- 0.7454545454545450,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7192982456140350,
- 0.7068965517241380,
- 0.7068965517241380,
- 0.7017543859649120,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7272727272727270,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.6964285714285710,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7090909090909090,
- 0.6964285714285710,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.6964285714285710,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7017543859649120,
- 0.6785714285714290,
- 0.6607142857142860,
- 0.6491228070175440,
- 0.6491228070175440,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6363636363636360,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6111111111111110,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6226415094339620,
- 0.6153846153846150,
- 0.6153846153846150,
- 0.6274509803921570,
- 0.6037735849056600,
- 0.5961538461538460,
- 0.6078431372549020,
- 0.6078431372549020,
- 0.6078431372549020,
- 0.5961538461538460,
- 0.5882352941176470,
- 0.5769230769230770,
- 0.5769230769230770,
- 0.5600000000000000,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5400000000000000,
- 0.5102040816326530,
- 0.5102040816326530,
- 0.5102040816326530,
- 0.5102040816326530,
- 0.5102040816326530,
- 0.5000000000000000,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4680851063829790,
- 0.4565217391304350,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3469387755102040,
- 0.3111111111111110,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3170731707317070,
- 0.3170731707317070,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2727272727272730,
- 0.2558139534883720,
- 0.2558139534883720,
- 0.2558139534883720,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2444444444444440,
- 0.2444444444444440,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1702127659574470,
- 0.1666666666666670,
- 0.1632653061224490,
- 0.1632653061224490,
- 0.1600000000000000,
- 0.1428571428571430,
- 0.1400000000000000,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1538461538461540,
- 0.1698113207547170,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1372549019607840,
- 0.1346153846153850,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1272727272727270,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1090909090909090,
- 0.1071428571428570,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.1090909090909090,
- 0.0925925925925926,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.0869565217391304,
- 0.0888888888888889,
- 0.0888888888888889,
- 0.0888888888888889,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0888888888888889,
- 0.0888888888888889,
- 0.0888888888888889,
- 0.0888888888888889,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.1041666666666670,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0816326530612245,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1000000000000000,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0338983050847458,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1818181818181820,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2407407407407410,
- 0.2407407407407410,
- 0.2452830188679250,
- 0.2452830188679250,
- 0.2452830188679250,
- 0.2500000000000000,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2745098039215690,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3269230769230770,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3461538461538460,
- 0.3653846153846150,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4200000000000000,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4200000000000000,
- 0.4313725490196080,
- 0.4313725490196080,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4615384615384620,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.5098039215686270,
- 0.5200000000000000,
- 0.5306122448979590,
- 0.5306122448979590,
- 0.5306122448979590,
- 0.5306122448979590,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.5957446808510640,
- 0.6041666666666670,
- 0.6041666666666670,
- 0.6122448979591840,
- 0.6122448979591840,
- 0.6326530612244900,
- 0.6400000000000000,
- 0.6470588235294120,
- 0.6470588235294120,
- 0.6600000000000000,
- 0.6600000000000000,
- 0.6600000000000000,
- 0.7021276595744680,
- 0.7021276595744680,
- 0.7173913043478260,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7333333333333330,
- 0.7727272727272730,
- 0.7826086956521740,
- 0.7872340425531920,
- 0.7916666666666670,
- 0.8163265306122450,
- 0.8163265306122450,
- 0.8200000000000000,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8148148148148150,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8275862068965520,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8709677419354840,
- 0.8709677419354840,
- 0.8593750000000000,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8769230769230770,
- 0.8769230769230770,
- 0.8906250000000000,
- 0.8906250000000000,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9166666666666670,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9152542372881350,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9166666666666670,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.9016393442622950,
- 0.9032258064516130,
- 0.9047619047619050,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9062500000000000,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9076923076923080,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9230769230769230,
- 0.9218750000000000,
- 0.9206349206349210,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9218750000000000,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9365079365079360,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9508196721311470,
- 0.9508196721311470,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9354838709677420,
- 0.9333333333333330,
- 0.9310344827586210,
- 0.9298245614035090,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9122807017543860,
- 0.9107142857142860,
- 0.9090909090909090,
- 0.9259259259259260,
- 0.9259259259259260,
- 0.9259259259259260,
- 0.9259259259259260,
- 0.9272727272727270,
- 0.9259259259259260,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9298245614035090,
- 0.9310344827586210,
- 0.9310344827586210,
- 0.9333333333333330,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9344262295081970,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9333333333333330,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9322033898305080,
- 0.9482758620689660,
- 0.9482758620689660,
- 0.9473684210526320,
- 0.9482758620689660,
- 0.9482758620689660,
- 0.9473684210526320,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9482758620689660,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9508196721311470,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9491525423728810,
- 0.9491525423728810,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9508196721311470,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9661016949152540,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9655172413793100,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9661016949152540,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9500000000000000,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9516129032258060,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9687500000000000,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9677419354838710,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9682539682539680,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9531250000000000,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9393939393939390,
- 0.9393939393939390,
- 0.9393939393939390,
- 0.9393939393939390,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9538461538461540,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9516129032258060,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9523809523809520,
- 0.9516129032258060,
- 0.9365079365079360,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9206349206349210,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9193548387096770,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9180327868852460,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.9032258064516130,
- 0.8870967741935480,
- 0.8593750000000000,
- 0.8571428571428570,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8500000000000000,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8360655737704920,
- 0.8333333333333330,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8064516129032260,
- 0.7936507936507940,
- 0.7812500000000000,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7656250000000000,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7692307692307690,
- 0.7656250000000000,
- 0.7656250000000000,
- 0.7619047619047620,
- 0.7619047619047620,
- 0.7619047619047620,
- 0.7619047619047620,
- 0.7619047619047620,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7343750000000000,
- 0.7230769230769230,
- 0.7187500000000000,
- 0.7187500000000000,
- 0.7187500000000000,
- 0.7230769230769230,
- 0.7230769230769230,
- 0.7230769230769230,
- 0.7142857142857140,
- 0.7258064516129030,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7288135593220340,
- 0.7321428571428570,
- 0.7321428571428570,
- 0.7321428571428570,
- 0.7192982456140350,
- 0.7272727272727270,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7090909090909090,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7222222222222220,
- 0.7307692307692310,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.6909090909090910,
- 0.6909090909090910,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6785714285714290,
- 0.6551724137931030,
- 0.6551724137931030,
- 0.6491228070175440,
- 0.6428571428571430,
- 0.6545454545454550,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6481481481481480,
- 0.6296296296296300,
- 0.6274509803921570,
- 0.6274509803921570,
- 0.6153846153846150,
- 0.6000000000000000,
- 0.5918367346938780,
- 0.5918367346938780,
- 0.5800000000000000,
- 0.5800000000000000,
- 0.5800000000000000,
- 0.5800000000000000,
- 0.5686274509803920,
- 0.5686274509803920,
- 0.5714285714285710,
- 0.5714285714285710,
- 0.5714285714285710,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5600000000000000,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5510204081632650,
- 0.5192307692307690,
- 0.5000000000000000,
- 0.4821428571428570,
- 0.4821428571428570,
- 0.4821428571428570,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4727272727272730,
- 0.4561403508771930,
- 0.4642857142857140,
- 0.4642857142857140,
- 0.4642857142857140,
- 0.4642857142857140,
- 0.4642857142857140,
- 0.4464285714285710,
- 0.4545454545454550,
- 0.4629629629629630,
- 0.4629629629629630,
- 0.4629629629629630,
- 0.4509803921568630,
- 0.4230769230769230,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4038461538461540,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3269230769230770,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2553191489361700,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2444444444444440,
- 0.2391304347826090,
- 0.2340425531914890,
- 0.2500000000000000,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2244897959183670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2083333333333330,
- 0.2040816326530610,
- 0.1875000000000000,
- 0.1702127659574470,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.2040816326530610,
- 0.2040816326530610,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1886792452830190,
- 0.1698113207547170,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0847457627118644,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0468750000000000,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0149253731343284,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1186440677966100,
- 0.1166666666666670,
- 0.1311475409836070,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1355932203389830,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1666666666666670,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1818181818181820,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.2181818181818180,
- 0.2222222222222220,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2307692307692310,
- 0.2352941176470590,
- 0.2448979591836730,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2549019607843140,
- 0.2600000000000000,
- 0.2745098039215690,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2884615384615380,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.3076923076923080,
- 0.3137254901960780,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3207547169811320,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3859649122807020,
- 0.3965517241379310,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4363636363636360,
- 0.4363636363636360,
- 0.4464285714285710,
- 0.4464285714285710,
- 0.4727272727272730,
- 0.4821428571428570,
- 0.4821428571428570,
- 0.4912280701754390,
- 0.5172413793103450,
- 0.5172413793103450,
- 0.5263157894736840,
- 0.5263157894736840,
- 0.5263157894736840,
- 0.5263157894736840,
- 0.5263157894736840,
- 0.5263157894736840,
- 0.5660377358490570,
- 0.5660377358490570,
- 0.5660377358490570,
- 0.5660377358490570,
- 0.5660377358490570,
- 0.5740740740740740,
- 0.5818181818181820,
- 0.5818181818181820,
- 0.5925925925925930,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6470588235294120,
- 0.6666666666666670,
- 0.6800000000000000,
- 0.6938775510204080,
- 0.6938775510204080,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7200000000000000,
- 0.7200000000000000,
- 0.7400000000000000,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7358490566037730,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7547169811320760,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8064516129032260,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8382352941176470,
- 0.8405797101449270,
- 0.8405797101449270,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8428571428571430,
- 0.8450704225352110,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8676470588235290,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8787878787878790,
- 0.8787878787878790,
- 0.8787878787878790,
- 0.8787878787878790,
- 0.8787878787878790,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8840579710144930,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8985507246376810,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9130434782608700,
- 0.9117647058823530,
- 0.9130434782608700,
- 0.9117647058823530,
- 0.9104477611940300,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9090909090909090,
- 0.9062500000000000,
- 0.9076923076923080,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.9047619047619050,
- 0.8769230769230770,
- 0.8750000000000000,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8730158730158730,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8615384615384620,
- 0.8615384615384620,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8548387096774190,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8666666666666670,
- 0.8709677419354840,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8593750000000000,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8636363636363640,
- 0.8695652173913040,
- 0.8695652173913040,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8714285714285710,
- 0.8732394366197180,
- 0.8732394366197180,
- 0.8857142857142860,
- 0.8840579710144930,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8955223880597010,
- 0.8939393939393940,
- 0.8955223880597010,
- 0.8970588235294120,
- 0.8985507246376810,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.8985507246376810,
- 0.8985507246376810,
- 0.8985507246376810,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8955223880597010,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8970588235294120,
- 0.8985507246376810,
- 0.8985507246376810,
- 0.9000000000000000,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9154929577464790,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9178082191780820,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9166666666666670,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9295774647887320,
- 0.9305555555555560,
- 0.9305555555555560,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9436619718309860,
- 0.9444444444444440,
- 0.9444444444444440,
- 0.9436619718309860,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9428571428571430,
- 0.9295774647887320,
- 0.9285714285714290,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9275362318840580,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9142857142857140,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9154929577464790,
- 0.9285714285714290,
- 0.9275362318840580,
- 0.9264705882352940,
- 0.9264705882352940,
- 0.9264705882352940,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9253731343283580,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9104477611940300,
- 0.9117647058823530,
- 0.9117647058823530,
- 0.9130434782608700,
- 0.9117647058823530,
- 0.9130434782608700,
- 0.9000000000000000,
- 0.9000000000000000,
- 0.8873239436619720,
- 0.8873239436619720,
- 0.8857142857142860,
- 0.8840579710144930,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8823529411764710,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8656716417910450,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8382352941176470,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8260869565217390,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8260869565217390,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8382352941176470,
- 0.8358208955223880,
- 0.8484848484848480,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8333333333333330,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8088235294117650,
- 0.8059701492537310,
- 0.8030303030303030,
- 0.8030303030303030,
- 0.8030303030303030,
- 0.8030303030303030,
- 0.8030303030303030,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.7878787878787880,
- 0.7878787878787880,
- 0.7761194029850750,
- 0.7761194029850750,
- 0.7727272727272730,
- 0.7656250000000000,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7903225806451610,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8032786885245900,
- 0.8000000000000000,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7833333333333330,
- 0.7833333333333330,
- 0.7540983606557380,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7377049180327870,
- 0.7258064516129030,
- 0.7258064516129030,
- 0.7258064516129030,
- 0.7258064516129030,
- 0.7258064516129030,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7166666666666670,
- 0.7118644067796610,
- 0.7017543859649120,
- 0.7090909090909090,
- 0.6842105263157900,
- 0.6842105263157900,
- 0.6724137931034480,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6607142857142860,
- 0.6545454545454550,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6545454545454550,
- 0.6481481481481480,
- 0.6603773584905660,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.6415094339622640,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5833333333333330,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5510204081632650,
- 0.5416666666666670,
- 0.5416666666666670,
- 0.5306122448979590,
- 0.5000000000000000,
- 0.4814814814814810,
- 0.4385964912280700,
- 0.4482758620689660,
- 0.4310344827586210,
- 0.4237288135593220,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.3833333333333330,
- 0.3898305084745760,
- 0.3898305084745760,
- 0.3898305084745760,
- 0.3793103448275860,
- 0.3793103448275860,
- 0.3728813559322030,
- 0.3728813559322030,
- 0.3728813559322030,
- 0.3666666666666670,
- 0.3606557377049180,
- 0.3606557377049180,
- 0.3548387096774190,
- 0.3548387096774190,
- 0.3437500000000000,
- 0.3437500000000000,
- 0.3437500000000000,
- 0.3437500000000000,
- 0.3281250000000000,
- 0.3230769230769230,
- 0.3230769230769230,
- 0.3333333333333330,
- 0.3225806451612900,
- 0.3278688524590160,
- 0.2931034482758620,
- 0.2931034482758620,
- 0.2881355932203390,
- 0.2881355932203390,
- 0.2881355932203390,
- 0.2711864406779660,
- 0.2786885245901640,
- 0.2741935483870970,
- 0.2542372881355930,
- 0.2542372881355930,
- 0.2542372881355930,
- 0.2500000000000000,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2333333333333330,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2333333333333330,
- 0.2203389830508470,
- 0.2203389830508470,
- 0.2166666666666670,
- 0.2166666666666670,
- 0.2131147540983610,
- 0.2096774193548390,
- 0.2307692307692310,
- 0.2187500000000000,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2131147540983610,
- 0.2000000000000000,
- 0.2131147540983610,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1967213114754100,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1875000000000000,
- 0.1846153846153850,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1818181818181820,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1791044776119400,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.2033898305084750,
- 0.2033898305084750,
- 0.2033898305084750,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2105263157894740,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2181818181818180,
- 0.2181818181818180,
- 0.2181818181818180,
- 0.2181818181818180,
- 0.2181818181818180,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2075471698113210,
- 0.2037037037037040,
- 0.2075471698113210,
- 0.1886792452830190,
- 0.1818181818181820,
- 0.1666666666666670,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1754385964912280,
- 0.1785714285714290,
- 0.1636363636363640,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1551724137931030,
- 0.1551724137931030,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1355932203389830,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1166666666666670,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0882352941176471,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0882352941176471,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0869565217391304,
- 0.0735294117647059,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0606060606060606,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0298507462686567,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0298507462686567,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0135135135135135,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0862068965517241,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1034482758620690,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.2096774193548390,
- 0.2131147540983610,
- 0.2258064516129030,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2372881355932200,
- 0.2542372881355930,
- 0.2542372881355930,
- 0.2586206896551720,
- 0.2586206896551720,
- 0.2631578947368420,
- 0.2678571428571430,
- 0.2678571428571430,
- 0.2807017543859650,
- 0.2807017543859650,
- 0.2807017543859650,
- 0.2807017543859650,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2982456140350880,
- 0.3103448275862070,
- 0.3275862068965520,
- 0.3389830508474580,
- 0.3448275862068970,
- 0.3684210526315790,
- 0.3684210526315790,
- 0.3859649122807020,
- 0.3965517241379310,
- 0.3965517241379310,
- 0.3965517241379310,
- 0.3965517241379310,
- 0.3965517241379310,
- 0.3898305084745760,
- 0.3898305084745760,
- 0.3898305084745760,
- 0.3898305084745760,
- 0.4000000000000000,
- 0.4067796610169490,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4067796610169490,
- 0.4067796610169490,
- 0.4166666666666670,
- 0.4333333333333330,
- 0.4333333333333330,
- 0.4406779661016950,
- 0.4406779661016950,
- 0.4406779661016950,
- 0.4333333333333330,
- 0.4262295081967210,
- 0.4426229508196720,
- 0.4736842105263160,
- 0.4827586206896550,
- 0.4915254237288140,
- 0.5000000000000000,
- 0.5084745762711860,
- 0.5084745762711860,
- 0.5172413793103450,
- 0.5172413793103450,
- 0.5172413793103450,
- 0.5172413793103450,
- 0.5344827586206900,
- 0.5344827586206900,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.6037735849056600,
- 0.6111111111111110,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6111111111111110,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6181818181818180,
- 0.6296296296296300,
- 0.6296296296296300,
- 0.6415094339622640,
- 0.6666666666666670,
- 0.6800000000000000,
- 0.6938775510204080,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.7115384615384620,
- 0.7115384615384620,
- 0.7115384615384620,
- 0.7169811320754720,
- 0.7413793103448280,
- 0.7413793103448280,
- 0.7413793103448280,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7627118644067800,
- 0.7627118644067800,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7868852459016390,
- 0.7903225806451610,
- 0.7903225806451610,
- 0.7936507936507940,
- 0.7936507936507940,
- 0.7936507936507940,
- 0.7936507936507940,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8125000000000000,
- 0.8153846153846150,
- 0.8153846153846150,
- 0.8153846153846150,
- 0.8153846153846150,
- 0.8153846153846150,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8358208955223880,
- 0.8382352941176470,
- 0.8358208955223880,
- 0.8507462686567160,
- 0.8507462686567160,
- 0.8507462686567160,
- 0.8507462686567160,
- 0.8507462686567160,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8805970149253730,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8805970149253730,
- 0.8939393939393940,
- 0.8923076923076920,
- 0.8923076923076920,
- 0.8923076923076920,
- 0.8787878787878790,
- 0.8787878787878790,
- 0.8656716417910450,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8550724637681160,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8529411764705880,
- 0.8656716417910450,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8676470588235290,
- 0.8550724637681160,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8428571428571430,
- 0.8405797101449270,
- 0.8405797101449270,
- 0.8405797101449270,
- 0.8285714285714290,
- 0.8285714285714290,
- 0.8285714285714290,
- 0.8285714285714290,
- 0.8285714285714290,
- 0.8285714285714290,
- 0.8235294117647060,
- 0.8484848484848480,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8461538461538460,
- 0.8437500000000000,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8208955223880600,
- 0.8208955223880600,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.8088235294117650,
- 0.7971014492753620,
- 0.7826086956521740,
- 0.7826086956521740,
- 0.7794117647058820,
- 0.7794117647058820,
- 0.7910447761194030,
- 0.8030303030303030,
- 0.8030303030303030,
- 0.8000000000000000,
- 0.7878787878787880,
- 0.7878787878787880,
- 0.8000000000000000,
- 0.7936507936507940,
- 0.7777777777777780,
- 0.7580645161290320,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7457627118644070,
- 0.7096774193548390,
- 0.7166666666666670,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7213114754098360,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.6984126984126980,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7076923076923080,
- 0.7076923076923080,
- 0.7076923076923080,
- 0.7076923076923080,
- 0.7076923076923080,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.7031250000000000,
- 0.6923076923076920,
- 0.7031250000000000,
- 0.6984126984126980,
- 0.7031250000000000,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.7096774193548390,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6984126984126980,
- 0.6935483870967740,
- 0.6825396825396830,
- 0.6825396825396830,
- 0.6984126984126980,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7096774193548390,
- 0.7213114754098360,
- 0.7540983606557380,
- 0.7540983606557380,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7758620689655170,
- 0.7931034482758620,
- 0.8000000000000000,
- 0.8000000000000000,
- 0.8064516129032260,
- 0.8196721311475410,
- 0.8253968253968250,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8412698412698410,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8500000000000000,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8500000000000000,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8524590163934430,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8548387096774190,
- 0.8412698412698410,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8437500000000000,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8307692307692310,
- 0.8181818181818180,
- 0.8181818181818180,
- 0.8153846153846150,
- 0.8153846153846150,
- 0.8281250000000000,
- 0.8281250000000000,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8095238095238100,
- 0.8095238095238100,
- 0.8225806451612900,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8360655737704920,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8474576271186440,
- 0.8500000000000000,
- 0.8500000000000000,
- 0.8333333333333330,
- 0.8333333333333330,
- 0.8500000000000000,
- 0.8524590163934430,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8387096774193550,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8412698412698410,
- 0.8387096774193550,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8225806451612900,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8253968253968250,
- 0.8095238095238100,
- 0.8225806451612900,
- 0.8196721311475410,
- 0.8166666666666670,
- 0.8166666666666670,
- 0.8166666666666670,
- 0.8166666666666670,
- 0.8166666666666670,
- 0.8135593220338980,
- 0.8135593220338980,
- 0.7966101694915250,
- 0.7868852459016390,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7777777777777780,
- 0.7741935483870970,
- 0.7741935483870970,
- 0.7868852459016390,
- 0.7868852459016390,
- 0.7741935483870970,
- 0.7704918032786880,
- 0.7580645161290320,
- 0.7666666666666670,
- 0.7540983606557380,
- 0.7540983606557380,
- 0.7540983606557380,
- 0.7500000000000000,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7377049180327870,
- 0.7258064516129030,
- 0.7142857142857140,
- 0.7096774193548390,
- 0.7049180327868850,
- 0.7049180327868850,
- 0.7166666666666670,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7118644067796610,
- 0.7241379310344830,
- 0.7118644067796610,
- 0.7000000000000000,
- 0.6885245901639340,
- 0.7000000000000000,
- 0.7000000000000000,
- 0.6949152542372880,
- 0.6949152542372880,
- 0.6949152542372880,
- 0.6949152542372880,
- 0.7068965517241380,
- 0.6949152542372880,
- 0.6896551724137930,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.7017543859649120,
- 0.6779661016949150,
- 0.6666666666666670,
- 0.6610169491525420,
- 0.6610169491525420,
- 0.6610169491525420,
- 0.6610169491525420,
- 0.6500000000000000,
- 0.6500000000000000,
- 0.6440677966101690,
- 0.6440677966101690,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6428571428571430,
- 0.6315789473684210,
- 0.6206896551724140,
- 0.6206896551724140,
- 0.6034482758620690,
- 0.6034482758620690,
- 0.6034482758620690,
- 0.6034482758620690,
- 0.6034482758620690,
- 0.6140350877192980,
- 0.6140350877192980,
- 0.6071428571428570,
- 0.6071428571428570,
- 0.6071428571428570,
- 0.5964912280701750,
- 0.5862068965517240,
- 0.5862068965517240,
- 0.5862068965517240,
- 0.5862068965517240,
- 0.5964912280701750,
- 0.6181818181818180,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5964912280701750,
- 0.5892857142857140,
- 0.5689655172413790,
- 0.5614035087719300,
- 0.5614035087719300,
- 0.5535714285714290,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5555555555555560,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.5636363636363640,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5740740740740740,
- 0.5576923076923080,
- 0.5576923076923080,
- 0.5490196078431370,
- 0.5490196078431370,
- 0.5600000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5400000000000000,
- 0.5192307692307690,
- 0.5192307692307690,
- 0.5192307692307690,
- 0.4905660377358490,
- 0.4905660377358490,
- 0.4905660377358490,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4814814814814810,
- 0.4561403508771930,
- 0.4561403508771930,
- 0.4363636363636360,
- 0.4363636363636360,
- 0.4363636363636360,
- 0.4259259259259260,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3921568627450980,
- 0.3921568627450980,
- 0.3773584905660380,
- 0.3333333333333330,
- 0.3148148148148150,
- 0.3018867924528300,
- 0.2962962962962960,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.3076923076923080,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2800000000000000,
- 0.2745098039215690,
- 0.2692307692307690,
- 0.2745098039215690,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2549019607843140,
- 0.2500000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1960784313725490,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.2000000000000000,
- 0.1923076923076920,
- 0.1960784313725490,
- 0.1800000000000000,
- 0.1800000000000000,
- 0.1764705882352940,
- 0.1800000000000000,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1698113207547170,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1886792452830190,
- 0.1851851851851850,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1764705882352940,
- 0.1600000000000000,
- 0.1538461538461540,
- 0.1481481481481480,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1509433962264150,
- 0.1346153846153850,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1176470588235290,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0847457627118644,
- 0.0819672131147541,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0727272727272727,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1818181818181820,
- 0.1851851851851850,
- 0.2280701754385960,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2413793103448280,
- 0.2500000000000000,
- 0.2545454545454540,
- 0.2592592592592590,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2452830188679250,
- 0.2592592592592590,
- 0.2592592592592590,
- 0.2592592592592590,
- 0.2592592592592590,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2909090909090910,
- 0.2909090909090910,
- 0.2962962962962960,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3207547169811320,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3518518518518520,
- 0.3584905660377360,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4259259259259260,
- 0.4150943396226420,
- 0.4230769230769230,
- 0.4230769230769230,
- 0.4230769230769230,
- 0.4230769230769230,
- 0.4313725490196080,
- 0.4423076923076920,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4509803921568630,
- 0.4693877551020410,
- 0.4693877551020410,
- 0.4791666666666670,
- 0.4791666666666670,
- 0.4791666666666670,
- 0.4893617021276600,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.5111111111111110,
- 0.5111111111111110,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5217391304347830,
- 0.5333333333333330,
- 0.5581395348837210,
- 0.5581395348837210,
- 0.5681818181818180,
- 0.5777777777777780,
- 0.5652173913043480,
- 0.5531914893617020,
- 0.5777777777777780,
- 0.5777777777777780,
- 0.5909090909090910,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.6250000000000000,
- 0.6250000000000000,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6382978723404260,
- 0.6521739130434780,
- 0.6739130434782610,
- 0.6888888888888890,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7083333333333330,
- 0.7200000000000000,
- 0.7346938775510200,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7450980392156860,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7454545454545450,
- 0.7592592592592590,
- 0.7592592592592590,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7678571428571430,
- 0.7543859649122810,
- 0.7719298245614030,
- 0.7719298245614030,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7796610169491530,
- 0.7758620689655170,
- 0.7758620689655170,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7894736842105260,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.7931034482758620,
- 0.8070175438596490,
- 0.8214285714285710,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8245614035087720,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8392857142857140,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8363636363636360,
- 0.8545454545454550,
- 0.8571428571428570,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8571428571428570,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8793103448275860,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8813559322033900,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8448275862068960,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8392857142857140,
- 0.8333333333333330,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8301886792452830,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8269230769230770,
- 0.8269230769230770,
- 0.8431372549019610,
- 0.8431372549019610,
- 0.8490566037735850,
- 0.8490566037735850,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8571428571428570,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8545454545454550,
- 0.8545454545454550,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8545454545454550,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8596491228070170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8666666666666670,
- 0.8813559322033900,
- 0.8793103448275860,
- 0.8793103448275860,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8793103448275860,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8620689655172410,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8644067796610170,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8750000000000000,
- 0.8771929824561400,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8750000000000000,
- 0.8771929824561400,
- 0.8771929824561400,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8620689655172410,
- 0.8474576271186440,
- 0.8474576271186440,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8421052631578950,
- 0.8448275862068960,
- 0.8448275862068960,
- 0.8571428571428570,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8727272727272730,
- 0.8703703703703700,
- 0.8867924528301890,
- 0.8867924528301890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8888888888888890,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8703703703703700,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8703703703703700,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8518518518518520,
- 0.8679245283018870,
- 0.8679245283018870,
- 0.8653846153846150,
- 0.8653846153846150,
- 0.8627450980392160,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8571428571428570,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8600000000000000,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8627450980392160,
- 0.8600000000000000,
- 0.8775510204081630,
- 0.8750000000000000,
- 0.8571428571428570,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8400000000000000,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8235294117647060,
- 0.8076923076923080,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7818181818181820,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7857142857142860,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.8076923076923080,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.7962962962962960,
- 0.8113207547169810,
- 0.7924528301886790,
- 0.7924528301886790,
- 0.7777777777777780,
- 0.7777777777777780,
- 0.7636363636363640,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7500000000000000,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7368421052631580,
- 0.7241379310344830,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7192982456140350,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7142857142857140,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7090909090909090,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.6851851851851850,
- 0.6909090909090910,
- 0.6909090909090910,
- 0.6909090909090910,
- 0.6909090909090910,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.7037037037037040,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.6981132075471700,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6923076923076920,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6792452830188680,
- 0.6730769230769230,
- 0.6730769230769230,
- 0.6666666666666670,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6538461538461540,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6666666666666670,
- 0.6538461538461540,
- 0.6470588235294120,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6346153846153850,
- 0.6400000000000000,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6250000000000000,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6326530612244900,
- 0.6250000000000000,
- 0.6000000000000000,
- 0.6000000000000000,
- 0.5882352941176470,
- 0.5882352941176470,
- 0.5800000000000000,
- 0.5600000000000000,
- 0.5714285714285710,
- 0.5714285714285710,
- 0.5714285714285710,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5625000000000000,
- 0.5510204081632650,
- 0.5294117647058820,
- 0.5294117647058820,
- 0.5384615384615380,
- 0.5384615384615380,
- 0.5384615384615380,
- 0.5384615384615380,
- 0.5000000000000000,
- 0.5000000000000000,
- 0.4893617021276600,
- 0.4791666666666670,
- 0.4680851063829790,
- 0.4782608695652170,
- 0.4666666666666670,
- 0.4666666666666670,
- 0.4666666666666670,
- 0.4666666666666670,
- 0.4565217391304350,
- 0.4565217391304350,
- 0.4255319148936170,
- 0.4130434782608700,
- 0.3863636363636360,
- 0.3777777777777780,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3333333333333330,
- 0.3488372093023260,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3488372093023260,
- 0.3409090909090910,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3181818181818180,
- 0.3255813953488370,
- 0.3095238095238100,
- 0.3095238095238100,
- 0.2926829268292680,
- 0.2926829268292680,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2790697674418600,
- 0.2619047619047620,
- 0.2558139534883720,
- 0.2558139534883720,
- 0.2380952380952380,
- 0.2380952380952380,
- 0.2272727272727270,
- 0.2142857142857140,
- 0.2045454545454550,
- 0.2000000000000000,
- 0.1777777777777780,
- 0.1777777777777780,
- 0.1702127659574470,
- 0.1521739130434780,
- 0.1458333333333330,
- 0.1458333333333330,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1568627450980390,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1372549019607840,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1020408163265310,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.0851063829787234,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0800000000000000,
- 0.0784313725490196,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0363636363636364,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0384615384615385,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0377358490566038,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0377358490566038,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0185185185185185,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000
- }
- },
- { PLACE_CATEG_ID_OTHER,
- {
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0377358490566038,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0192307692307692,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0188679245283019,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0192307692307692,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0192307692307692,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0208333333333333,
- 0.0212765957446808,
- 0.0212765957446808,
- 0.0212765957446808,
- 0.0212765957446808,
- 0.0416666666666667,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0408163265306122,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0444444444444444,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0425531914893617,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0465116279069768,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1228070175438600,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1228070175438600,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1052631578947370,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1250000000000000,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.1090909090909090,
- 0.1071428571428570,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1071428571428570,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0877192982456140,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1071428571428570,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1296296296296300,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.0980392156862745,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1153846153846150,
- 0.1176470588235290,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1400000000000000,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1600000000000000,
- 0.1836734693877550,
- 0.1836734693877550,
- 0.1836734693877550,
- 0.1632653061224490,
- 0.1632653061224490,
- 0.1800000000000000,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.2173913043478260,
- 0.2173913043478260,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2040816326530610,
- 0.2000000000000000,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1627906976744190,
- 0.1627906976744190,
- 0.1627906976744190,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1463414634146340,
- 0.1463414634146340,
- 0.1860465116279070,
- 0.1860465116279070,
- 0.2045454545454550,
- 0.2093023255813950,
- 0.2093023255813950,
- 0.2093023255813950,
- 0.2272727272727270,
- 0.2272727272727270,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2444444444444440,
- 0.2444444444444440,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.3404255319148940,
- 0.3333333333333330,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3200000000000000,
- 0.3265306122448980,
- 0.3400000000000000,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3269230769230770,
- 0.3207547169811320,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3333333333333330,
- 0.3269230769230770,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3090909090909090,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3272727272727270,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3214285714285710,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3148148148148150,
- 0.3090909090909090,
- 0.3148148148148150,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2173913043478260,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1777777777777780,
- 0.1777777777777780,
- 0.1777777777777780,
- 0.1777777777777780,
- 0.1521739130434780,
- 0.1521739130434780,
- 0.1521739130434780,
- 0.1304347826086960,
- 0.1304347826086960,
- 0.1304347826086960,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1250000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1632653061224490,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1800000000000000,
- 0.1800000000000000,
- 0.1800000000000000,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1886792452830190,
- 0.1886792452830190,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1346153846153850,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1200000000000000,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0784313725490196,
- 0.0961538461538462,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0625000000000000,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0172413793103448,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0178571428571429,
- 0.0181818181818182,
- 0.0357142857142857,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0350877192982456,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0181818181818182,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0181818181818182,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0181818181818182,
- 0.0185185185185185,
- 0.0181818181818182,
- 0.0181818181818182,
- 0.0185185185185185,
- 0.0185185185185185,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0192307692307692,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0392156862745098,
- 0.0200000000000000,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0425531914893617,
- 0.0416666666666667,
- 0.0625000000000000,
- 0.0612244897959184,
- 0.0612244897959184,
- 0.0612244897959184,
- 0.0600000000000000,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0638297872340425,
- 0.0638297872340425,
- 0.0434782608695652,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0444444444444444,
- 0.0227272727272727,
- 0.0217391304347826,
- 0.0212765957446808,
- 0.0208333333333333,
- 0.0204081632653061,
- 0.0204081632653061,
- 0.0200000000000000,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0196078431372549,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0166666666666667,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0333333333333333,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0545454545454545,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0333333333333333,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0175438596491228,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0175438596491228,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0161290322580645,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0322580645161290,
- 0.0483870967741936,
- 0.0468750000000000,
- 0.0476190476190476,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0645161290322581,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0847457627118644,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0877192982456140,
- 0.0727272727272727,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0576923076923077,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1206896551724140,
- 0.1206896551724140,
- 0.1228070175438600,
- 0.1250000000000000,
- 0.1090909090909090,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.1000000000000000,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1153846153846150,
- 0.1111111111111110,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1052631578947370,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.1071428571428570,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0784313725490196,
- 0.0769230769230769,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0769230769230769,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.1132075471698110,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1132075471698110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1538461538461540,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1276595744680850,
- 0.1304347826086960,
- 0.1304347826086960,
- 0.0888888888888889,
- 0.0869565217391304,
- 0.0851063829787234,
- 0.1041666666666670,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1224489795918370,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1020408163265310,
- 0.1041666666666670,
- 0.1063829787234040,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1698113207547170,
- 0.1666666666666670,
- 0.1509433962264150,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1818181818181820,
- 0.1636363636363640,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1864406779661020,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1833333333333330,
- 0.1967213114754100,
- 0.1935483870967740,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1666666666666670,
- 0.1525423728813560,
- 0.1071428571428570,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1403508771929820,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1694915254237290,
- 0.1666666666666670,
- 0.1639344262295080,
- 0.1500000000000000,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1587301587301590,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1562500000000000,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1692307692307690,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1406250000000000,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0952380952380952,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0153846153846154,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0169491525423729,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0161290322580645,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0169491525423729,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0169491525423729,
- 0.0166666666666667,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0166666666666667,
- 0.0169491525423729,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0163934426229508,
- 0.0166666666666667,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0172413793103448,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0181818181818182,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0178571428571429,
- 0.0181818181818182,
- 0.0185185185185185,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0188679245283019,
- 0.0192307692307692,
- 0.0196078431372549,
- 0.0204081632653061,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0392156862745098,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0566037735849057,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0363636363636364,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0370370370370370,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0370370370370370,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0312500000000000,
- 0.0312500000000000,
- 0.0307692307692308,
- 0.0307692307692308,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0294117647058823,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0285714285714286,
- 0.0281690140845070,
- 0.0285714285714286,
- 0.0285714285714286,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0303030303030303,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0149253731343284,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0151515151515152,
- 0.0156250000000000,
- 0.0153846153846154,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0158730158730159,
- 0.0461538461538462,
- 0.0468750000000000,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.1093750000000000,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0666666666666667,
- 0.0645161290322581,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0757575757575758,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0571428571428571,
- 0.0579710144927536,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0447761194029851,
- 0.0454545454545455,
- 0.0447761194029851,
- 0.0441176470588235,
- 0.0434782608695652,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0434782608695652,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0298507462686567,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0285714285714286,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0140845070422535,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0136986301369863,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0138888888888889,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0000000000000000,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0281690140845070,
- 0.0285714285714286,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0285714285714286,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0298507462686567,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0144927536231884,
- 0.0142857142857143,
- 0.0142857142857143,
- 0.0140845070422535,
- 0.0140845070422535,
- 0.0142857142857143,
- 0.0144927536231884,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0149253731343284,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0147058823529412,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0289855072463768,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0294117647058823,
- 0.0298507462686567,
- 0.0303030303030303,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0454545454545455,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0441176470588235,
- 0.0447761194029851,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0454545454545455,
- 0.0468750000000000,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0476190476190476,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0491803278688525,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0526315789473684,
- 0.0545454545454545,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0545454545454545,
- 0.0555555555555556,
- 0.0566037735849057,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0384615384615385,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0612244897959184,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0612244897959184,
- 0.0961538461538462,
- 0.1111111111111110,
- 0.1578947368421050,
- 0.1551724137931030,
- 0.1724137931034480,
- 0.1694915254237290,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.2000000000000000,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1864406779661020,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.2033898305084750,
- 0.2033898305084750,
- 0.2033898305084750,
- 0.2000000000000000,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.2187500000000000,
- 0.2187500000000000,
- 0.2187500000000000,
- 0.2187500000000000,
- 0.2187500000000000,
- 0.2307692307692310,
- 0.2307692307692310,
- 0.2380952380952380,
- 0.2419354838709680,
- 0.2459016393442620,
- 0.2586206896551720,
- 0.2586206896551720,
- 0.2711864406779660,
- 0.2711864406779660,
- 0.2711864406779660,
- 0.2711864406779660,
- 0.2622950819672130,
- 0.2580645161290320,
- 0.2542372881355930,
- 0.2542372881355930,
- 0.2542372881355930,
- 0.2500000000000000,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2459016393442620,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2622950819672130,
- 0.2622950819672130,
- 0.2622950819672130,
- 0.2666666666666670,
- 0.2711864406779660,
- 0.2711864406779660,
- 0.2833333333333330,
- 0.2833333333333330,
- 0.2786885245901640,
- 0.2741935483870970,
- 0.2615384615384620,
- 0.2656250000000000,
- 0.2539682539682540,
- 0.2539682539682540,
- 0.2539682539682540,
- 0.2622950819672130,
- 0.2666666666666670,
- 0.2622950819672130,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2459016393442620,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2500000000000000,
- 0.2615384615384620,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2769230769230770,
- 0.2769230769230770,
- 0.2769230769230770,
- 0.2727272727272730,
- 0.2647058823529410,
- 0.2647058823529410,
- 0.2537313432835820,
- 0.2647058823529410,
- 0.2647058823529410,
- 0.2647058823529410,
- 0.2424242424242420,
- 0.2424242424242420,
- 0.2153846153846150,
- 0.2153846153846150,
- 0.2153846153846150,
- 0.2153846153846150,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1578947368421050,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1509433962264150,
- 0.1666666666666670,
- 0.1509433962264150,
- 0.1886792452830190,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1929824561403510,
- 0.1785714285714290,
- 0.1818181818181820,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1666666666666670,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1803278688524590,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1969696969696970,
- 0.1969696969696970,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2121212121212120,
- 0.2121212121212120,
- 0.2238805970149250,
- 0.2238805970149250,
- 0.2238805970149250,
- 0.2205882352941180,
- 0.2205882352941180,
- 0.2205882352941180,
- 0.2205882352941180,
- 0.2089552238805970,
- 0.2058823529411760,
- 0.2058823529411760,
- 0.1940298507462690,
- 0.1940298507462690,
- 0.1940298507462690,
- 0.1940298507462690,
- 0.1940298507462690,
- 0.1940298507462690,
- 0.1884057971014490,
- 0.1884057971014490,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1641791044776120,
- 0.1641791044776120,
- 0.1515151515151520,
- 0.1492537313432840,
- 0.1492537313432840,
- 0.1470588235294120,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1449275362318840,
- 0.1304347826086960,
- 0.1323529411764710,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1343283582089550,
- 0.1212121212121210,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1230769230769230,
- 0.1230769230769230,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1194029850746270,
- 0.1142857142857140,
- 0.1142857142857140,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1044776119402990,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1044776119402990,
- 0.1044776119402990,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1014492753623190,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0857142857142857,
- 0.0857142857142857,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0845070422535211,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0704225352112676,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0694444444444444,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0563380281690141,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0547945205479452,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0540540540540541,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0405405405405405,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0410958904109589,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0416666666666667,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0422535211267606,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0428571428571429,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0454545454545455,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0468750000000000,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0317460317460317,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0333333333333333,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0322580645161290,
- 0.0327868852459016,
- 0.0327868852459016,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0338983050847458,
- 0.0344827586206897,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0333333333333333,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0338983050847458,
- 0.0333333333333333,
- 0.0491803278688525,
- 0.0491803278688525,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0566037735849057,
- 0.0555555555555556,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0754716981132075,
- 0.0784313725490196,
- 0.0600000000000000,
- 0.0612244897959184,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0566037735849057,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0483870967741936,
- 0.0491803278688525,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0634920634920635,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0441176470588235,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0447761194029851,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0597014925373134,
- 0.0454545454545455,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0461538461538462,
- 0.0606060606060606,
- 0.0606060606060606,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0724637681159420,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0735294117647059,
- 0.0597014925373134,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0579710144927536,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0571428571428571,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0579710144927536,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0735294117647059,
- 0.0606060606060606,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0615384615384615,
- 0.0625000000000000,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1029411764705880,
- 0.1014492753623190,
- 0.1159420289855070,
- 0.1159420289855070,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1194029850746270,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1076923076923080,
- 0.1212121212121210,
- 0.1212121212121210,
- 0.1076923076923080,
- 0.1111111111111110,
- 0.1269841269841270,
- 0.1451612903225810,
- 0.1500000000000000,
- 0.1500000000000000,
- 0.1525423728813560,
- 0.1935483870967740,
- 0.2000000000000000,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1967213114754100,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1904761904761900,
- 0.1904761904761900,
- 0.1904761904761900,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1846153846153850,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.2000000000000000,
- 0.1875000000000000,
- 0.1904761904761900,
- 0.1875000000000000,
- 0.1904761904761900,
- 0.1904761904761900,
- 0.1935483870967740,
- 0.2063492063492060,
- 0.2063492063492060,
- 0.2063492063492060,
- 0.2063492063492060,
- 0.2096774193548390,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2063492063492060,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1935483870967740,
- 0.1803278688524590,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1379310344827590,
- 0.1206896551724140,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1129032258064520,
- 0.0983606557377049,
- 0.0952380952380952,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0645161290322581,
- 0.0793650793650794,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0781250000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.0923076923076923,
- 0.1060606060606060,
- 0.1060606060606060,
- 0.1076923076923080,
- 0.1076923076923080,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0833333333333333,
- 0.0819672131147541,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0806451612903226,
- 0.0819672131147541,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0983606557377049,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0819672131147541,
- 0.0819672131147541,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0967741935483871,
- 0.1000000000000000,
- 0.1147540983606560,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.1000000000000000,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0967741935483871,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.1000000000000000,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.1016949152542370,
- 0.0862068965517241,
- 0.0847457627118644,
- 0.1000000000000000,
- 0.1147540983606560,
- 0.1166666666666670,
- 0.1166666666666670,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1186440677966100,
- 0.1206896551724140,
- 0.1186440677966100,
- 0.1206896551724140,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1228070175438600,
- 0.1525423728813560,
- 0.1500000000000000,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1525423728813560,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1578947368421050,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1754385964912280,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1754385964912280,
- 0.1818181818181820,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2142857142857140,
- 0.2068965517241380,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2142857142857140,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1800000000000000,
- 0.1800000000000000,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.1923076923076920,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2456140350877190,
- 0.2456140350877190,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2592592592592590,
- 0.2641509433962260,
- 0.2641509433962260,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2641509433962260,
- 0.2777777777777780,
- 0.2962962962962960,
- 0.3018867924528300,
- 0.3148148148148150,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.3018867924528300,
- 0.2884615384615380,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3076923076923080,
- 0.3137254901960780,
- 0.3200000000000000,
- 0.3200000000000000,
- 0.3200000000000000,
- 0.3200000000000000,
- 0.3137254901960780,
- 0.3269230769230770,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3529411764705880,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3076923076923080,
- 0.2884615384615380,
- 0.2745098039215690,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2400000000000000,
- 0.2500000000000000,
- 0.2352941176470590,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2352941176470590,
- 0.2200000000000000,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2075471698113210,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1698113207547170,
- 0.1666666666666670,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1509433962264150,
- 0.1509433962264150,
- 0.1568627450980390,
- 0.1600000000000000,
- 0.1730769230769230,
- 0.1851851851851850,
- 0.1538461538461540,
- 0.1538461538461540,
- 0.1698113207547170,
- 0.1730769230769230,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.2000000000000000,
- 0.1851851851851850,
- 0.1851851851851850,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2372881355932200,
- 0.2295081967213110,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2096774193548390,
- 0.2096774193548390,
- 0.2096774193548390,
- 0.2063492063492060,
- 0.2063492063492060,
- 0.2096774193548390,
- 0.2096774193548390,
- 0.2222222222222220,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2295081967213110,
- 0.2166666666666670,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2419354838709680,
- 0.2459016393442620,
- 0.2622950819672130,
- 0.2622950819672130,
- 0.2500000000000000,
- 0.2372881355932200,
- 0.2372881355932200,
- 0.2372881355932200,
- 0.2372881355932200,
- 0.2372881355932200,
- 0.2000000000000000,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2105263157894740,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1964285714285710,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1754385964912280,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1403508771929820,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1379310344827590,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1694915254237290,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1774193548387100,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1746031746031750,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1774193548387100,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1639344262295080,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1587301587301590,
- 0.1639344262295080,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1612903225806450,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1500000000000000,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1500000000000000,
- 0.1475409836065570,
- 0.1475409836065570,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1311475409836070,
- 0.1311475409836070,
- 0.1311475409836070,
- 0.1311475409836070,
- 0.1311475409836070,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1166666666666670,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1129032258064520,
- 0.1129032258064520,
- 0.1269841269841270,
- 0.1269841269841270,
- 0.1269841269841270,
- 0.1269841269841270,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1290322580645160,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1147540983606560,
- 0.1000000000000000,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0983606557377049,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0967741935483871,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0952380952380952,
- 0.0937500000000000,
- 0.0937500000000000,
- 0.0923076923076923,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0895522388059701,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0746268656716418,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0757575757575758,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0769230769230769,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0793650793650794,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0806451612903226,
- 0.0645161290322581,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0655737704918033,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0833333333333333,
- 0.0851063829787234,
- 0.0652173913043478,
- 0.0652173913043478,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0652173913043478,
- 0.0652173913043478,
- 0.0652173913043478,
- 0.0666666666666667,
- 0.0697674418604651,
- 0.0697674418604651,
- 0.0681818181818182,
- 0.0666666666666667,
- 0.0869565217391304,
- 0.1063829787234040,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1136363636363640,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1086956521739130,
- 0.0869565217391304,
- 0.0666666666666667,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0625000000000000,
- 0.0600000000000000,
- 0.0612244897959184,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0588235294117647,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0727272727272727,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0666666666666667,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0892857142857143,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0784313725490196,
- 0.0784313725490196,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0545454545454545,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0508474576271187,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0500000000000000,
- 0.0508474576271187,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0689655172413793,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0714285714285714,
- 0.0701754385964912,
- 0.0862068965517241,
- 0.0862068965517241,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0847457627118644,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0526315789473684,
- 0.0526315789473684,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0517241379310345,
- 0.0677966101694915,
- 0.0677966101694915,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0701754385964912,
- 0.0689655172413793,
- 0.0689655172413793,
- 0.0714285714285714,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0555555555555556,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0370370370370370,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0555555555555556,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0576923076923077,
- 0.0576923076923077,
- 0.0588235294117647,
- 0.0600000000000000,
- 0.0600000000000000,
- 0.0612244897959184,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0408163265306122,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0400000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0400000000000000,
- 0.0204081632653061,
- 0.0208333333333333,
- 0.0204081632653061,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0200000000000000,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0392156862745098,
- 0.0384615384615385,
- 0.0377358490566038,
- 0.0377358490566038,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0576923076923077,
- 0.0566037735849057,
- 0.0566037735849057,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0555555555555556,
- 0.0566037735849057,
- 0.0754716981132075,
- 0.0754716981132075,
- 0.0740740740740741,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0714285714285714,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0862068965517241,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0877192982456140,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0892857142857143,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0943396226415094,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.1153846153846150,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0800000000000000,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0833333333333333,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0816326530612245,
- 0.0833333333333333,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1000000000000000,
- 0.1200000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1428571428571430,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1458333333333330,
- 0.1458333333333330,
- 0.1489361702127660,
- 0.1458333333333330,
- 0.1489361702127660,
- 0.1304347826086960,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1521739130434780,
- 0.1521739130434780,
- 0.1702127659574470,
- 0.1739130434782610,
- 0.1818181818181820,
- 0.1777777777777780,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1904761904761900,
- 0.1860465116279070,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1860465116279070,
- 0.2045454545454550,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2272727272727270,
- 0.2325581395348840,
- 0.2380952380952380,
- 0.2380952380952380,
- 0.2195121951219510,
- 0.2195121951219510,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2093023255813950,
- 0.2093023255813950,
- 0.2045454545454550,
- 0.2045454545454550,
- 0.1860465116279070,
- 0.1860465116279070,
- 0.1860465116279070,
- 0.1860465116279070,
- 0.1860465116279070,
- 0.1904761904761900,
- 0.2093023255813950,
- 0.2093023255813950,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2272727272727270,
- 0.2142857142857140,
- 0.2045454545454550,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2127659574468080,
- 0.2173913043478260,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2549019607843140,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2549019607843140,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2692307692307690,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2745098039215690,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2653061224489800,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2600000000000000,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2400000000000000,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2244897959183670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2127659574468080,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2600000000000000,
- 0.2745098039215690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2641509433962260,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2830188679245280,
- 0.2641509433962260,
- 0.2641509433962260,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2692307692307690,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2352941176470590,
- 0.2352941176470590,
- 0.2200000000000000,
- 0.2200000000000000,
- 0.2200000000000000,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2115384615384620,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2181818181818180,
- 0.2321428571428570,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2363636363636360,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2545454545454540,
- 0.2678571428571430,
- 0.2678571428571430,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2545454545454540,
- 0.2407407407407410,
- 0.2407407407407410,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2264150943396230,
- 0.2307692307692310,
- 0.2156862745098040,
- 0.2156862745098040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.2264150943396230,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2075471698113210,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.1960784313725490,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2037037037037040,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2075471698113210,
- 0.2037037037037040,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1481481481481480,
- 0.1481481481481480,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1454545454545450,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1090909090909090,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1132075471698110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1111111111111110,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1272727272727270,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1296296296296300,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1320754716981130,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1176470588235290,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1346153846153850,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1372549019607840,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1224489795918370,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1200000000000000,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1200000000000000,
- 0.1372549019607840,
- 0.1428571428571430,
- 0.1458333333333330,
- 0.1458333333333330,
- 0.1489361702127660,
- 0.1521739130434780,
- 0.1521739130434780,
- 0.1521739130434780,
- 0.1702127659574470,
- 0.1875000000000000,
- 0.2040816326530610,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2083333333333330,
- 0.2127659574468080,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2444444444444440,
- 0.2272727272727270,
- 0.2093023255813950,
- 0.2045454545454550,
- 0.2045454545454550,
- 0.2045454545454550,
- 0.2045454545454550,
- 0.2045454545454550,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2222222222222220,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2553191489361700,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2391304347826090,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2444444444444440,
- 0.2391304347826090,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2653061224489800,
- 0.2708333333333330,
- 0.2765957446808510,
- 0.2708333333333330,
- 0.2857142857142860,
- 0.2857142857142860,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.3061224489795920,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.2888888888888890,
- 0.2826086956521740,
- 0.2888888888888890,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2790697674418600,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3191489361702130,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3191489361702130,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3265306122448980,
- 0.3333333333333330,
- 0.3469387755102040,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3469387755102040,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3265306122448980,
- 0.3061224489795920,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.2916666666666670,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.2978723404255320,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.2916666666666670,
- 0.3061224489795920,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3269230769230770,
- 0.3333333333333330,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3207547169811320,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3454545454545450,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3396226415094340,
- 0.3461538461538460,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3518518518518520,
- 0.3518518518518520,
- 0.3518518518518520,
- 0.3396226415094340,
- 0.3269230769230770,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3200000000000000,
- 0.3061224489795920,
- 0.3200000000000000,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3269230769230770,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3400000000000000,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3400000000000000,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3469387755102040,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3673469387755100,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.3958333333333330,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4130434782608700,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4166666666666670,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4375000000000000,
- 0.4468085106382980,
- 0.4468085106382980,
- 0.4468085106382980,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4565217391304350,
- 0.4565217391304350,
- 0.4565217391304350,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4444444444444440,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4347826086956520,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4130434782608700,
- 0.4130434782608700,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4255319148936170,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4285714285714290,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4166666666666670,
- 0.4200000000000000,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4081632653061220,
- 0.4000000000000000,
- 0.4117647058823530,
- 0.4038461538461540,
- 0.4150943396226420,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4038461538461540,
- 0.3962264150943400,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.3877551020408160,
- 0.3921568627450980,
- 0.3921568627450980,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3846153846153850,
- 0.3962264150943400,
- 0.4038461538461540,
- 0.4038461538461540,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4181818181818180,
- 0.4074074074074070,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4000000000000000,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3928571428571430,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3703703703703700,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3888888888888890,
- 0.3962264150943400,
- 0.4074074074074070,
- 0.4074074074074070,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3888888888888890,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4074074074074070,
- 0.4000000000000000,
- 0.3962264150943400,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3773584905660380,
- 0.3773584905660380,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3584905660377360,
- 0.3773584905660380,
- 0.3773584905660380,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3518518518518520,
- 0.3518518518518520,
- 0.3518518518518520,
- 0.3518518518518520,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3518518518518520,
- 0.3454545454545450,
- 0.3454545454545450,
- 0.3571428571428570,
- 0.3571428571428570,
- 0.3571428571428570,
- 0.3571428571428570,
- 0.3508771929824560,
- 0.3508771929824560,
- 0.3508771929824560,
- 0.3508771929824560,
- 0.3392857142857140,
- 0.3333333333333330,
- 0.3396226415094340,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3529411764705880,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3333333333333330,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3800000000000000,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3653846153846150,
- 0.3653846153846150,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3673469387755100,
- 0.3469387755102040,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3469387755102040,
- 0.3400000000000000,
- 0.3400000000000000,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3529411764705880,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3469387755102040,
- 0.3600000000000000,
- 0.3725490196078430,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3846153846153850,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4038461538461540,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.4038461538461540,
- 0.4259259259259260,
- 0.4259259259259260,
- 0.4259259259259260,
- 0.4259259259259260,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4150943396226420,
- 0.4000000000000000,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.3888888888888890,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3888888888888890,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3703703703703700,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3773584905660380,
- 0.3773584905660380,
- 0.3962264150943400,
- 0.3962264150943400,
- 0.3888888888888890,
- 0.3818181818181820,
- 0.3928571428571430,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4035087719298250,
- 0.4137931034482760,
- 0.4137931034482760,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4210526315789470,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4210526315789470,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4107142857142860,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3888888888888890,
- 0.3818181818181820,
- 0.3818181818181820,
- 0.3584905660377360,
- 0.3584905660377360,
- 0.3461538461538460,
- 0.3461538461538460,
- 0.3137254901960780,
- 0.3000000000000000,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3137254901960780,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.3000000000000000,
- 0.2800000000000000,
- 0.2653061224489800,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.3076923076923080,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.2941176470588230,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3207547169811320,
- 0.3090909090909090,
- 0.3090909090909090,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2962962962962960,
- 0.2909090909090910,
- 0.2777777777777780,
- 0.2641509433962260,
- 0.2777777777777780,
- 0.2777777777777780,
- 0.2727272727272730,
- 0.2857142857142860,
- 0.2807017543859650,
- 0.2758620689655170,
- 0.2758620689655170,
- 0.2758620689655170,
- 0.2758620689655170,
- 0.2758620689655170,
- 0.2631578947368420,
- 0.2631578947368420,
- 0.2631578947368420,
- 0.2586206896551720,
- 0.2456140350877190,
- 0.2456140350877190,
- 0.2456140350877190,
- 0.2456140350877190,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2321428571428570,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2241379310344830,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2280701754385960,
- 0.2142857142857140,
- 0.2142857142857140,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.2068965517241380,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1929824561403510,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1964285714285710,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1818181818181820,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1785714285714290,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1896551724137930,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1754385964912280,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1724137931034480,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1578947368421050,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1607142857142860,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1636363636363640,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1698113207547170,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1730769230769230,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1764705882352940,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1600000000000000,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1568627450980390,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1063829787234040,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1400000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1333333333333330,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1777777777777780,
- 0.1956521739130430,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2244897959183670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2765957446808510,
- 0.2916666666666670,
- 0.2978723404255320,
- 0.3125000000000000,
- 0.3265306122448980,
- 0.3265306122448980,
- 0.3333333333333330,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3333333333333330,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3333333333333330,
- 0.3260869565217390,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.2790697674418600,
- 0.2666666666666670,
- 0.2666666666666670,
- 0.2826086956521740,
- 0.2826086956521740,
- 0.2888888888888890,
- 0.2888888888888890,
- 0.2727272727272730,
- 0.2558139534883720,
- 0.2558139534883720,
- 0.2558139534883720,
- 0.2500000000000000,
- 0.2666666666666670,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2553191489361700,
- 0.2553191489361700,
- 0.2708333333333330,
- 0.2500000000000000,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2549019607843140,
- 0.2549019607843140,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2400000000000000,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2448979591836730,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2800000000000000,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2800000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2448979591836730,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2553191489361700,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2608695652173910,
- 0.2553191489361700,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2708333333333330,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2653061224489800,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2800000000000000,
- 0.2857142857142860,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2857142857142860,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2826086956521740,
- 0.2826086956521740,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2888888888888890,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3191489361702130,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3111111111111110,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3023255813953490,
- 0.3023255813953490,
- 0.2790697674418600,
- 0.2857142857142860,
- 0.3023255813953490,
- 0.3023255813953490,
- 0.3023255813953490,
- 0.3181818181818180,
- 0.3333333333333330,
- 0.3617021276595740,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4117647058823530,
- 0.4000000000000000,
- 0.3877551020408160,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.3800000000000000,
- 0.3800000000000000,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3673469387755100,
- 0.3541666666666670,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3404255319148940,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3043478260869570,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2727272727272730,
- 0.2888888888888890,
- 0.2888888888888890,
- 0.2826086956521740,
- 0.2888888888888890,
- 0.2888888888888890,
- 0.3043478260869570,
- 0.3191489361702130,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3333333333333330,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3555555555555560,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3478260869565220,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3478260869565220,
- 0.3478260869565220,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3541666666666670,
- 0.3541666666666670,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3617021276595740,
- 0.3541666666666670,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3600000000000000,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3725490196078430,
- 0.3800000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3877551020408160,
- 0.3877551020408160,
- 0.3750000000000000,
- 0.3750000000000000,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3695652173913040,
- 0.3617021276595740,
- 0.3695652173913040,
- 0.3555555555555560,
- 0.3409090909090910,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3777777777777780,
- 0.3863636363636360,
- 0.3953488372093020,
- 0.3953488372093020,
- 0.3953488372093020,
- 0.3953488372093020,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3863636363636360,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3636363636363640,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3777777777777780,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3414634146341460,
- 0.3170731707317070,
- 0.3095238095238100,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3095238095238100,
- 0.3095238095238100,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3095238095238100,
- 0.3095238095238100,
- 0.3095238095238100,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3095238095238100,
- 0.3095238095238100,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3555555555555560,
- 0.3409090909090910,
- 0.3409090909090910,
- 0.3488372093023260,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3829787234042550,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.3913043478260870,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.4042553191489360,
- 0.3913043478260870,
- 0.4000000000000000,
- 0.4000000000000000,
- 0.3863636363636360,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3636363636363640,
- 0.3488372093023260,
- 0.3488372093023260,
- 0.3488372093023260,
- 0.3409090909090910,
- 0.3255813953488370,
- 0.3255813953488370,
- 0.3181818181818180,
- 0.3181818181818180,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3260869565217390,
- 0.3404255319148940,
- 0.3404255319148940,
- 0.3260869565217390,
- 0.3023255813953490,
- 0.3181818181818180,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3043478260869570,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3260869565217390,
- 0.3260869565217390,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.3260869565217390,
- 0.3111111111111110,
- 0.3111111111111110,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.2954545454545450,
- 0.3260869565217390,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3191489361702130,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.3125000000000000,
- 0.2978723404255320,
- 0.2826086956521740,
- 0.2826086956521740,
- 0.2765957446808510,
- 0.2978723404255320,
- 0.2978723404255320,
- 0.2916666666666670,
- 0.2765957446808510,
- 0.2765957446808510,
- 0.2765957446808510,
- 0.2765957446808510,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.3061224489795920,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2916666666666670,
- 0.2708333333333330,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2500000000000000,
- 0.2340425531914890,
- 0.2340425531914890,
- 0.2173913043478260,
- 0.2173913043478260,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.2173913043478260,
- 0.2173913043478260,
- 0.2000000000000000,
- 0.2000000000000000,
- 0.2173913043478260,
- 0.2173913043478260,
- 0.1956521739130430,
- 0.1956521739130430,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2291666666666670,
- 0.2244897959183670,
- 0.2083333333333330,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1875000000000000,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1739130434782610,
- 0.1702127659574470,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1836734693877550,
- 0.1875000000000000,
- 0.1914893617021280,
- 0.1914893617021280,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1739130434782610,
- 0.1777777777777780,
- 0.1702127659574470,
- 0.1702127659574470,
- 0.1702127659574470,
- 0.1702127659574470,
- 0.1702127659574470,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1875000000000000,
- 0.1836734693877550,
- 0.1836734693877550,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1666666666666670,
- 0.1458333333333330,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1428571428571430,
- 0.1458333333333330,
- 0.1458333333333330,
- 0.1458333333333330,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1276595744680850,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1250000000000000,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1224489795918370,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1041666666666670,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1020408163265310,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0800000000000000,
- 0.0816326530612245,
- 0.1000000000000000,
- 0.1000000000000000,
- 0.0980392156862745,
- 0.0980392156862745,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0961538461538462,
- 0.0943396226415094,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0909090909090909,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0925925925925926,
- 0.0909090909090909,
- 0.0740740740740741,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0727272727272727,
- 0.0714285714285714,
- 0.0545454545454545,
- 0.0545454545454545,
- 0.0535714285714286,
- 0.0535714285714286,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0363636363636364,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0357142857142857,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0350877192982456,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0344827586206897,
- 0.0175438596491228,
- 0.0175438596491228,
- 0.0175438596491228
- }
- }
- };
-
-} /* namespace prob_features */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_FEATURES_MODEL_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
-#define _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
-namespace similarity {
-
- template <class T> ctx::share_t overlap1stOver2nd(const T &s1, const T &s2)
- {
- if (s2.empty()) {
- return 0;
- }
- int count = 0;
- for (auto e : s2) {
- if (s1.find(e) != s1.end()) {
- count++;
- }
- }
- return (ctx::share_t) count / s2.size();
- }
-
- template <class T> ctx::share_t overlapBiggerOverSmaller(const T &s1, const T &s2)
- {
- if (s1.size() > s2.size()) {
- return similarity::overlap1stOver2nd(s1, s2);
- } else {
- return similarity::overlap1stOver2nd(s2, s1);
- }
- }
-
- template <class T> bool isJoint(const T &s1, const T &s2)
- {
- for (auto e : s2) {
- if (s1.find(e) != s1.end()) {
- return true;
- }
- }
- return false;
- }
-
-} /* namespace similarity */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_SIMILAR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctime>
-#include <memory>
-#include <Types.h>
-#include "user_places.h"
-#include "places_detector.h"
-#include "../place_recognition_types.h"
-
-ctx::UserPlaces::UserPlaces(PlaceRecogMode energyMode):
- __visitDetector(nullptr),
- __placesDetector(nullptr),
- __placesDetectorTimerId(-1)
-{
- time_t now = std::time(nullptr);
- __visitDetector = new(std::nothrow) VisitDetector(now, energyMode);
- if (__visitDetector == nullptr) {
- _E("Cannot initialize __visitDetector");
- return;
- }
-
- __placesDetector = new(std::nothrow) PlacesDetector();
- if (__placesDetector == nullptr) {
- _E("Cannot initialize __placesDetector");
- return;
- }
-
- __placesDetectorTimerId = __timerManager.setAt( // execute once every night
- PLACES_DETECTOR_TASK_START_HOUR,
- PLACES_DETECTOR_TASK_START_MINUTE,
- DayOfWeek::EVERYDAY,
- __placesDetector);
- if (__placesDetectorTimerId < 0) {
- _E("PlacesDetector timer set FAIL");
- return;
- } else {
- _D("PlacesDetector timer set SUCCESS");
- }
-}
-
-ctx::UserPlaces::~UserPlaces()
-{
- if (__placesDetectorTimerId >= 0) {
- __timerManager.remove(__placesDetectorTimerId);
- _D("PlacesDetector timer removed");
- }
-
- if (__visitDetector) {
- delete __visitDetector;
- }
-
- if (__placesDetector) {
- delete __placesDetector;
- }
-};
-
-std::vector<std::shared_ptr<ctx::Place>> ctx::UserPlaces::getPlaces()
-{
- if (__placesDetector) {
- return __placesDetector->getPlaces();
- } else {
- return std::vector<std::shared_ptr<ctx::Place>>();
- }
-}
-
-/*
- * Example JSON output:
- * ------------------------------------------------
- * {
- * "PlacesList": [
- * {
- * "TypeId": 2,
- * "Name": "Work",
- * "GeoLatitude": 10.94433,
- * "GeoLongitude": 50.85504,
- * "WifiAPs": "00:1f:f3:5b:2b:1f,15:34:56:78:9a:ba,13:34:56:78:9a:ba",
- * "CreateDate": 12132567
- * },
- * {
- * "TypeId": 1,
- * "Name": "Home",
- * "GeoLatitude": 10.96233,
- * "GeoLongitude": 50.84304,
- * "WifiAPs": "aa:bb:cc:dd:ee:ff,10:34:56:78:9a:bc",
- * "CreateDate": 12132889
- * },
- * {
- * "TypeId": 3,
- * "Name": "Other",
- * "GeoLatitude": 10.96553,
- * "GeoLongitude": 50.80404,
- * "WifiAPs": "12:34:56:78:9a:ba",
- * "CreateDate": 12132346
- * }
- * ]
- * }
- */
-ctx::Json ctx::UserPlaces::composeJson(std::vector<std::shared_ptr<Place>> places)
-{
- ctx::Json data;
- for (std::shared_ptr<ctx::Place> place : places) {
- ctx::Json placeJson;
- placeJson.set(NULL, PLACE_CATEG_ID, place->categId);
- placeJson.set(NULL, PLACE_CATEG_CONFIDENCE, place->categConfidence);
- placeJson.set(NULL, PLACE_NAME, place->name);
- if (place->locationValid) {
- placeJson.set(NULL, PLACE_GEO_LATITUDE, place->location.latitude);
- placeJson.set(NULL, PLACE_GEO_LONGITUDE, place->location.longitude);
- }
- placeJson.set(NULL, PLACE_WIFI_APS, place->wifiAps);
- placeJson.set(NULL, PLACE_CREATE_DATE, static_cast<int>(place->createDate));
- data.append(NULL, DATA_READ, placeJson);
- }
- return data;
-}
-
-void ctx::UserPlaces::setMode(PlaceRecogMode energyMode)
-{
- if (__visitDetector) {
- __visitDetector->setMode(energyMode);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_
-
-#include <vector>
-#include <Json.h>
-#include <TimerManager.h>
-#include "visit_detector.h"
-#include "places_detector.h"
-#include "user_places_types.h"
-
-namespace ctx {
-
- class UserPlaces {
-
- private:
- VisitDetector *__visitDetector;
- PlacesDetector *__placesDetector;
- int __placesDetectorTimerId;
- TimerManager __timerManager;
-
- public:
- UserPlaces(PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE);
- ~UserPlaces();
-
- void setMode(PlaceRecogMode energyMode);
- std::vector<std::shared_ptr<Place>> getPlaces();
- static Json composeJson(std::vector<std::shared_ptr<Place>> places);
-
- }; /* class UserPlaces */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_
-
-/*
- * WiFi scanning frequency (in minutes) in PLACE_RECOG_HIGH_ACCURACY_MODE.
- */
-#define WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY 3
-
-/*
- * WiFi scanning frequency (in minutes) in PLACE_RECOG_LOW_POWER_MODE.
- */
-#define WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER 60
-
-/*
- * Time window taken into consideration (in seconds) in PLACE_RECOG_HIGH_ACCURACY_MODE.
- */
-#define VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY 360
-
-/*
- * Time window taken into consideration (in seconds) in PLACE_RECOG_LOW_POWER_MODE.
- */
-#define VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER 3600
-
-/*
- * Overlap threshold between two sets of mac addresses (overlap
- * coefficient for two sets should be higher than this threshold
- * in order to detect stable radio environment); =< 1.0
- * New parameter in algorithm compared to original version of PlaceSense!
- */
-#define VISIT_DETECTOR_OVERLAP 0.8f
-
-/*
- * Specifies how many stable intervals must be seen to
- * indicate an entrance to a place; >= 1
- */
-#define VISIT_DETECTOR_STABLE_DEPTH 1
-
-/*
- * Representatives threshold (representatnive beacon
- * response rate should be higher than this threshold); =< 1.0
- */
-#define VISIT_DETECTOR_REP_THRESHOLD 0.9f
-
-/*
- * Specifies how long scans must be unstable to indicate a leave form a place; >= 1
- */
-#define VISIT_DETECTOR_TOLERANCE_DEPTH 3
-
-#define PLACES_DETECTOR_TASK_START_HOUR 3
-#define PLACES_DETECTOR_TASK_START_MINUTE 11
-#define PLACES_DETECTOR_RETENTION_DAYS 30
-#define PLACES_DETECTOR_RETENTION_SECONDS 24 * 60 * 60 * PLACES_DETECTOR_RETENTION_DAYS
-
-/*
- * Number of digits after decimal point used in geo coordinates.
- */
-#define GEO_LOCATION_PRECISION 7
-
-/*
- * Minimal duration of visit (in minutes) taking into account for place detection
- */
-#define PLACES_DETECTOR_MIN_VISIT_DURATION_MINUTES 15
-
-/*
- * Maximum duration of visit (in minutes) taking into account for place detection
- */
-#define PLACES_DETECTOR_MAX_VISIT_DURATION_MINUTES 5 * 24 * 60
-
-/*
- * Minimum visits number per place
- */
-#define PLACES_DETECTOR_MIN_VISITS_PER_PLACE 1
-
-/*
- * Minimum visits number per big place
- */
-#define PLACES_DETECTOR_MIN_VISITS_PER_BIG_PLACE 4
-
-/*
- * Minimal visit category score for taking this visit into consideration during
- * place categorization
- */
-#define PLACES_CATEGER_MIN_VISITS_SCORE 0.1
-
-/*
- * Minimum visits number per home
- */
-#define PLACES_CATEGER_MIN_VISITS_PER_HOME 3
-
-/*
- * Minimum visits number per work
- */
-#define PLACES_CATEGER_MIN_VISITS_PER_WORK 2
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_PARAMS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <set>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <algorithm>
-#include <Types.h>
-#include "user_places_types.h"
-#include "user_places_params.h"
-#include "debug_utils.h"
-
-#define __MAC_STRING_COMPONENTS_SEPARATOR ':'
-#define __MAC_SET_STRING_DELIMITER ','
-
-ctx::Mac::Mac(const std::string& str)
-{
- std::stringstream ss(str);
- try {
- ss >> *this;
- } catch (std::runtime_error &e) {
- _E("%s", e.what());
- }
-}
-
-ctx::Mac::Mac(const char *str)
-{
- std::stringstream ss(str);
- try {
- ss >> *this;
- } catch (std::runtime_error &e) {
- _E("%s", e.what());
- }
-}
-
-std::istream& ctx::operator>>(std::istream &input, ctx::Mac &mac)
-{
- int h;
- char colon;
- for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
- input >> std::hex;
- input >> h;
- mac.c[i] = h;
- if (i + 1 >= ctx::Mac::MAC_SIZE) {
- break;
- }
- input >> colon;
- if (colon != __MAC_STRING_COMPONENTS_SEPARATOR) {
- throw std::runtime_error("Invalid MAC format");
- }
- }
- input >> std::dec;
- return input;
-}
-
-std::ostream& ctx::operator<<(std::ostream &output, const ctx::Mac &mac)
-{
- size_t i = 0;
- while (true) {
- output << std::hex << std::setfill('0') << std::setw(2);
- output << static_cast<int>(mac.c[i]);
- i++;
- if (i >= Mac::MAC_SIZE) {
- break;
- }
- output << __MAC_STRING_COMPONENTS_SEPARATOR;
- }
- output << std::dec;
- return output;
-}
-
-ctx::Mac::operator std::string() const
-{
- std::stringstream ss;
- ss << *this;
- return ss.str();
-}
-
-bool ctx::operator==(const Mac &m1, const Mac &m2)
-{
- for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
- if (m1.c[i] != m2.c[i]) {
- return false;
- }
- }
- return true;
-}
-
-bool ctx::operator!=(const Mac &m1, const Mac &m2)
-{
- return !(m1 == m2);
-}
-
-bool ctx::operator<(const Mac &m1, const Mac &m2)
-{
- unsigned char c1, c2;
- for (size_t i = 0; i < Mac::MAC_SIZE; i++) {
- c1 = m1.c[i];
- c2 = m2.c[i];
- if (c1 < c2) {
- return true;
- }
- if (c1 > c2) {
- return false;
- }
- }
- return false; // they are equal
-}
-
-std::istream& ctx::operator>>(std::istream &input, ctx::MacSet &macSet)
-{
- Mac mac;
- char delimeter;
- while (!input.eof()) {
- try {
- input >> mac;
- } catch (std::runtime_error &e) {
- _E("Cannot read macSet. Exception: %s", e.what());
- break;
- }
- macSet.insert(mac);
- if (input.eof()) {
- break;
- }
- delimeter = input.get();
- if (delimeter != __MAC_SET_STRING_DELIMITER) {
- input.unget();
- break;
- }
- }
- return input;
-}
-
-std::ostream& ctx::operator<<(std::ostream &output, const ctx::MacSet &macSet)
-{
- std::vector<Mac> macVec(macSet.size());
- std::copy(macSet.begin(), macSet.end(), macVec.begin());
- std::sort(macVec.begin(), macVec.end());
-
- bool first = true;
- for (auto &mac: macVec) {
- if (first) {
- first = false;
- } else {
- output << __MAC_SET_STRING_DELIMITER;
- }
- output << mac;
- }
- return output;
-}
-
-void ctx::LocationEvent::log()
-{
- std::string time_str = DebugUtils::humanReadableDateTime(timestamp, "%T", 9);
-#ifdef TIZEN_ENGINEER_MODE
- _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s, method=%d",
- coordinates.latitude,
- coordinates.longitude,
- coordinates.accuracy,
- time_str.c_str(),
- method);
-#else /* TIZEN_ENGINEER_MODE */
- _D("location lat=%.8f, lon=%.8f, acc=%.2f[m], time=%s",
- coordinates.latitude,
- coordinates.longitude,
- coordinates.accuracy,
- time_str.c_str());
-#endif /* TIZEN_ENGINEER_MODE */
-}
-
-void ctx::Visit::setLocation(Location location_)
-{
- locationValid = true;
- location = location_;
-}
-
-void ctx::Visit::printShort2Stream(std::ostream &out) const
-{
- // print only valid visits
- if (interval.end != 0) {
- float duration = ((float) (interval.end - interval.start)) / 3600; // [h]
- out << "__VISIT " << duration << "h: ";
- out << DebugUtils::humanReadableDateTime(interval.start, "%m/%d %H:%M", 15) << " ÷ ";
- out << DebugUtils::humanReadableDateTime(interval.end, "%m/%d %H:%M", 15) << std::endl;
- }
-}
-
-bool ctx::operator==(const ctx::Visit &v1, const ctx::Visit &v2)
-{
- return v1.interval.start == v2.interval.start
- && v1.interval.end == v2.interval.end
- && v1.categs == v2.categs
- && v1.location.latitude == v2.location.latitude
- && v1.location.longitude == v2.location.longitude
- && v1.location.accuracy == v2.location.accuracy
- && v1.locationValid == v2.locationValid
- && v1.macSet == v2.macSet;
-}
-
-ctx::MacSet ctx::macSetFromString(const std::string &str)
-{
- MacSet macSet;
- std::stringstream ss;
- ss << str;
- ss >> macSet;
- return macSet;
-}
-
-bool ctx::operator>(const Mac &m1, const Mac &m2)
-{
- return m2 < m1;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::macSetFromMacs2Counts(const Macs2Counts &macs2Counts)
-{
- std::shared_ptr<MacSet> macSet(std::make_shared<MacSet>());
- for (auto &macCount: macs2Counts) {
- macSet->insert(macCount.first);
- }
- return macSet;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets)
-{
- std::shared_ptr<MacSet> unionSet = std::make_shared<MacSet>();
- for (std::shared_ptr<MacSet> macSet : macSets) {
- unionSet->insert(macSet->begin(), macSet->end());
- }
- return unionSet;
-}
-
-ctx::Interval::Interval(time_t start_, time_t end_) : start(start_), end(end_) {
- if (end_ < start_) {
- _E("Negative interval, start=%d, end=%d", start_, end_);
- }
-}
-
-void ctx::Place::print2Stream(std::ostream &out) const
-{
- out << "PLACE:" << std::endl;
- out << "__CATEGORY: " << name << std::endl;
- if (locationValid) {
- out << "__LOCATION: lat=" << std::setprecision(GEO_LOCATION_PRECISION + 2) << location.latitude;
- out << ", lon=" << location.longitude << std::setprecision(5) << std::endl;
- }
- out << "__WIFI:" << wifiAps << std::endl;
- out << "__CREATE_DATE: " << DebugUtils::humanReadableDateTime(createDate, "%F %T", 80) << std::endl;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
-#define _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_
-
-#include <memory>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <unordered_set>
-#include "graph.h"
-#include "../place_recognition_types.h"
-#include <string>
-#include <ctime>
-
-namespace ctx {
-
- /*
- * type for numerical computations
- */
- typedef double num_t;
-
- /*
- * mac address
- */
- class Mac {
-
- public:
- const static size_t MAC_SIZE = 6; // number of bytes for mac address.
- unsigned char c[MAC_SIZE];
-
- Mac() {};
- Mac(const std::string &str);
- Mac(const char *str);
- operator std::string() const;
-
- }; /* class Mac */
-
- std::istream &operator>>(std::istream &input, ctx::Mac &mac);
- std::ostream &operator<<(std::ostream &output, const ctx::Mac &mac);
- bool operator==(const ctx::Mac &m1, const ctx::Mac &m2);
- bool operator!=(const ctx::Mac &m1, const ctx::Mac &m2);
- bool operator<(const ctx::Mac &m1, const ctx::Mac &m2);
- bool operator>(const ctx::Mac &m1, const ctx::Mac &m2);
-
-} /* namespace ctx */
-
-namespace std {
-
- template <> struct hash<ctx::Mac> {
- size_t operator()(const ctx::Mac & m) const {
- size_t h = 1;
- for (size_t i = 0; i < ctx::Mac::MAC_SIZE; i++) {
- h = h * 37 + m.c[i];
- }
- return h;
- }
- };
-
-} /* namespace std */
-
-namespace ctx {
-
- typedef float share_t;
- typedef int count_t;
-
- typedef std::unordered_map<ctx::Mac, ctx::count_t> Macs2Counts;
- typedef std::unordered_map<ctx::Mac, ctx::share_t> Macs2Shares;
-
- typedef std::unordered_set<ctx::Mac> MacSet;
-
- std::istream &operator>>(std::istream &input, ctx::MacSet &macSet);
- std::ostream &operator<<(std::ostream &output, const ctx::MacSet &macSet);
- ctx::MacSet macSetFromString(const std::string &str);
-
- std::shared_ptr<MacSet> macSetsUnion(const std::vector<std::shared_ptr<MacSet>> &macSets);
-
- struct Interval {
- time_t start;
- time_t end;
-
- Interval(time_t start, time_t end);
- };
-
-} /* namespace ctx */
-
-namespace std {
-
- template <> struct hash<ctx::Interval> {
- size_t operator()(const ctx::Interval & interval) const {
- return interval.end * interval.start;
- }
- };
-
-} /* namespace std */
-
-namespace ctx {
-
- /*
- * fully describes interval data after the interval is finished
- */
- struct Frame {
- Interval interval;
- count_t numberOfTimestamps;
- Macs2Counts macs2Counts;
-
- Frame(Interval interval_) : interval(interval_), numberOfTimestamps(0) {};
- };
-
- /*
- * mac address + its timestamp
- */
- struct MacEvent {
- time_t timestamp;
- Mac mac;
-
- MacEvent(time_t timestamp_, Mac mac_) : timestamp(timestamp_), mac(mac_) {}
- };
-
- typedef std::map<int, num_t> Categs; // scores of categories
-
- struct Location {
- double latitude;
- double longitude;
- double accuracy; // [m]
-
- Location(double latitude_ = 0.0, double longitude_ = 0.0, double accuracy_ = -1.0)
- : latitude(latitude_), longitude(longitude_), accuracy(accuracy_) {}
-
- }; /* struct Location */
-
-#ifdef TIZEN_ENGINEER_MODE
- enum LocationSource {
- LOCATION_METHOD_REQUEST = 0,
- LOCATION_METHOD_GET_LOCATION = 1,
- LOCATION_METHOD_GET_LAST_LOCATION = 2
- };
-#endif /* TIZEN_ENGINEER_MODE */
-
- /*
- * location + timestamp + method
- */
- struct LocationEvent {
- Location coordinates;
- time_t timestamp;
-
-#ifdef TIZEN_ENGINEER_MODE
- LocationSource method;
-
- LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_, LocationSource method_) :
- coordinates(latitude_, longitude_, accuracy_),
- timestamp(timestamp_), method(method_) {}
-#else /* TIZEN_ENGINEER_MODE */
- LocationEvent(double latitude_, double longitude_, double accuracy_, time_t timestamp_) :
- coordinates(latitude_, longitude_, accuracy_),
- timestamp(timestamp_) {}
-#endif /* TIZEN_ENGINEER_MODE */
-
- void log();
-
- }; /* struct LocationEvent */
-
- struct Visit {
- Interval interval;
- std::shared_ptr<MacSet> macSet;
- Categs categs;
- bool locationValid;
- Location location; // makes sense if locationValid == true;
-
- Visit(Interval interval_, std::shared_ptr<MacSet> macSet_ = std::make_shared<MacSet>(), Categs categs_ = Categs()) :
- interval(interval_),
- macSet(macSet_),
- categs(categs_),
- locationValid(false) {}
- void setLocation(Location location);
- void printShort2Stream(std::ostream &out) const;
-
- }; /* struct Visit */
-
- bool operator==(const Visit &v1, const Visit &v2);
- typedef std::vector<Visit> Visits;
- typedef std::vector<MacEvent> MacEvents; // used to store current interval logs
-
- std::shared_ptr<MacSet> macSetFromMacs2Counts(const Macs2Counts &macs2Counts);
-
- typedef float confidence_t;
-
- class Place {
-
- public:
- PlaceCategId categId; // category of a place (work/home/other)
- confidence_t categConfidence; // confidence of the above category - between [0,1]
- std::string name; // for now: "work"/"home"/"other"
- bool locationValid;
- Location location; // makes sense if locationValid == true;
- std::string wifiAps; // WiFi APs MAC addresses separated by ","
- time_t createDate; // The last update time of this place
-
- void print2Stream(std::ostream &out) const;
-
- }; /* class Place */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_USER_PLACES_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "visit_categer.h"
-#include "mahal.h"
-#include <time.h>
-#include "../place_recognition_types.h"
-#include "prob_features_model.h"
-#include <Types.h>
-
-// categorizer model parameters trained offline (implemented in python):
-const std::map<int, ctx::MahalModel> ctx::VisitCateger::__models({
-{
- PLACE_CATEG_ID_HOME,
- ctx::MahalModel(
- {
- 0.588408417316, 0.475154840361, -0.564085141865, 0.077711893790, 0.782630398597, -0.650926403250, -0.101943950378
- },
- {
- 0.797977863370, -0.133179879257, 0.242803062646, -0.059448581046, -0.117039646748, 0.097645535057, 0.014250290052,
- -0.133179879257, 1.028900241400, -0.252245407243, 0.058455883835, -0.283950879851, 0.172204076583, 0.247906065767,
- 0.242803062646, -0.252245407243, 1.832134785177, 0.327188225606, 0.874905851092, -0.371088938012, -1.289816938938,
- -0.059448581046, 0.058455883835, 0.327188225606, 1.455090164348, 0.138363721074, 0.216985279422, -1.113021128017,
- -0.117039646748, -0.283950879851, 0.874905851092, 0.138363721074, 1.379674755873, -0.977922749615, -0.738895486376,
- 0.097645535057, 0.172204076583, -0.371088938012, 0.216985279422, -0.977922749615, 0.899928922718, -0.158101631251,
- 0.014250290052, 0.247906065767, -1.289816938938, -1.113021128017, -0.738895486376, -0.158101631251, 2.644105309746
- })
-},
-{
- PLACE_CATEG_ID_WORK,
- ctx::MahalModel(
- {
- -0.128092670982, -0.762177819157, 0.262924477521, -0.412038966097, -1.049141893517, 1.104760800499, -0.628939955525
- },
- {
- 15.751249839350, 11.389025401325, -9.885346240379, -0.010809392387, -1.308837060762, 0.970778241189, 0.558946631235,
- 11.389025401325, 12.830223040140, -8.517695939156, 0.293693134532, -0.845784968295, 1.418175236596, -2.246658259974,
- -9.885346240379, -8.517695939156, 10.222750966685, 0.390448668966, 1.095218945062, -0.403733435617, -1.815103304859,
- -0.010809392387, 0.293693134532, 0.390448668966, 2.256864603458, 0.632080300647, -0.019551779384, -1.751417951792,
- -1.308837060762, -0.845784968295, 1.095218945062, 0.632080300647, 3.132753467561, -1.427748733399, -4.291958669471,
- 0.970778241189, 1.418175236596, -0.403733435617, -0.019551779384, -1.427748733399, 1.183055586213, 0.200571452172,
- 0.558946631235, -2.246658259974, -1.815103304859, -1.751417951792, -4.291958669471, 0.200571452172, 11.668888615934
- })
-},
-{
- PLACE_CATEG_ID_OTHER,
- ctx::MahalModel(
- {
- -0.542340098504, 0.184789511765, 0.387451546413, 0.301902661472, 0.109392397093, -0.310468874039, 0.709513920221
- },
- {
- 2.153884992301, -0.129488409324, 0.136236052776, -0.138043678532, -0.227492557156, 0.117810812390, 0.265072329266,
- -0.129488409324, 3.165213522741, -1.751520714507, 0.467831090302, -0.483916138161, 0.376293684450, 0.149387541935,
- 0.136236052776, -1.751520714507, 2.483475248800, 0.384085303028, 0.338642175318, -0.052000492068, -0.801404345627,
- -0.138043678532, 0.467831090302, 0.384085303028, 1.972390458477, -0.025332052563, 0.393845805027, -1.225948397955,
- -0.227492557156, -0.483916138161, 0.338642175318, -0.025332052563, 0.890301343360, -0.549163112351, -0.746838701215,
- 0.117810812390, 0.376293684450, -0.052000492068, 0.393845805027, -0.549163112351, 0.474674836872, 0.012417969474,
- 0.265072329266, 0.149387541935, -0.801404345627, -1.225948397955, -0.746838701215, 0.012417969474, 2.104629121515
- })
-}});
-
-ctx::PiecewiseLin ctx::VisitCateger::__chiApprox(
-{
- 0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08,
- 0.09, 0.1 , 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17,
- 0.18, 0.19, 0.2 , 0.21, 0.22, 0.23, 0.24, 0.25, 0.26,
- 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32, 0.33, 0.34, 0.35,
- 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43, 0.44,
- 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53,
- 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62,
- 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7 , 0.71,
- 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8 ,
- 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89,
- 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
- 0.99, 1. , 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07,
- 1.08, 1.09, 1.1 , 1.11, 1.12, 1.13, 1.14, 1.15, 1.16,
- 1.17, 1.18, 1.19, 1.2 , 1.21, 1.22, 1.23, 1.24, 1.25,
- 1.26, 1.27, 1.28, 1.29, 1.3 , 1.31, 1.32, 1.33, 1.34,
- 1.35, 1.36, 1.37, 1.38, 1.39, 1.4 , 1.41, 1.42, 1.43,
- 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.5 , 1.51, 1.52,
- 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.59, 1.6 , 1.61,
- 1.62, 1.63, 1.64, 1.65, 1.66, 1.67, 1.68, 1.69, 1.7 ,
- 1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79,
- 1.8 , 1.81, 1.82, 1.83, 1.84, 1.85, 1.86, 1.87, 1.88,
- 1.89, 1.9 , 1.91, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97,
- 1.98, 1.99, 2. , 2.01, 2.02, 2.03, 2.04, 2.05, 2.06,
- 2.07, 2.08, 2.09, 2.1 , 2.11, 2.12, 2.13, 2.14, 2.15,
- 2.16, 2.17, 2.18, 2.19, 2.2 , 2.21, 2.22, 2.23, 2.24,
- 2.25, 2.26, 2.27, 2.28, 2.29, 2.3 , 2.31, 2.32, 2.33,
- 2.34, 2.35, 2.36, 2.37, 2.38, 2.39, 2.4 , 2.41, 2.42,
- 2.43, 2.44, 2.45, 2.46, 2.47, 2.48, 2.49, 2.5 , 2.51,
- 2.52, 2.53, 2.54, 2.55, 2.56, 2.57, 2.58, 2.59, 2.6 ,
- 2.61, 2.62, 2.63, 2.64, 2.65, 2.66, 2.67, 2.68, 2.69,
- 2.7 , 2.71, 2.72, 2.73, 2.74, 2.75, 2.76, 2.77, 2.78,
- 2.79, 2.8 , 2.81, 2.82, 2.83, 2.84, 2.85, 2.86, 2.87,
- 2.88, 2.89, 2.9 , 2.91, 2.92, 2.93, 2.94, 2.95, 2.96,
- 2.97, 2.98, 2.99, 3. , 3.01, 3.02, 3.03, 3.04, 3.05,
- 3.06, 3.07, 3.08, 3.09, 3.1 , 3.11, 3.12, 3.13, 3.14,
- 3.15, 3.16, 3.17, 3.18, 3.19, 3.2 , 3.21, 3.22, 3.23,
- 3.24, 3.25, 3.26, 3.27, 3.28, 3.29, 3.3 , 3.31, 3.32,
- 3.33, 3.34, 3.35, 3.36, 3.37, 3.38, 3.39, 3.4 , 3.41,
- 3.42, 3.43, 3.44, 3.45, 3.46, 3.47, 3.48, 3.49, 3.5 ,
- 3.51, 3.52, 3.53, 3.54, 3.55, 3.56, 3.57, 3.58, 3.59,
- 3.6 , 3.61, 3.62, 3.63, 3.64, 3.65, 3.66, 3.67, 3.68,
- 3.69, 3.7 , 3.71, 3.72, 3.73, 3.74, 3.75, 3.76, 3.77,
- 3.78, 3.79, 3.8 , 3.81, 3.82, 3.83, 3.84, 3.85, 3.86,
- 3.87, 3.88, 3.89, 3.9 , 3.91, 3.92, 3.93, 3.94, 3.95,
- 3.96, 3.97, 3.98, 3.99, 4. , 4.01, 4.02, 4.03, 4.04,
- 4.05, 4.06, 4.07, 4.08, 4.09, 4.1 , 4.11, 4.12, 4.13,
- 4.14, 4.15, 4.16, 4.17, 4.18, 4.19, 4.2 , 4.21, 4.22,
- 4.23, 4.24, 4.25, 4.26, 4.27, 4.28, 4.29, 4.3 , 4.31,
- 4.32, 4.33, 4.34, 4.35, 4.36, 4.37, 4.38, 4.39, 4.4 ,
- 4.41, 4.42, 4.43, 4.44, 4.45, 4.46, 4.47, 4.48, 4.49,
- 4.5 , 4.51, 4.52, 4.53, 4.54, 4.55, 4.56, 4.57, 4.58,
- 4.59, 4.6 , 4.61, 4.62, 4.63, 4.64, 4.65, 4.66, 4.67,
- 4.68, 4.69, 4.7 , 4.71, 4.72, 4.73, 4.74, 4.75, 4.76,
- 4.77, 4.78, 4.79, 4.8 , 4.81, 4.82, 4.83, 4.84, 4.85,
- 4.86, 4.87, 4.88, 4.89, 4.9 , 4.91, 4.92, 4.93, 4.94,
- 4.95, 4.96, 4.97, 4.98, 4.99, 5. , 5.01, 5.02, 5.03,
- 5.04, 5.05, 5.06, 5.07, 5.08, 5.09, 5.1 , 5.11, 5.12,
- 5.13, 5.14, 5.15, 5.16, 5.17, 5.18, 5.19, 5.2 , 5.21,
- 5.22, 5.23, 5.24, 5.25, 5.26, 5.27, 5.28, 5.29, 5.3 ,
- 5.31, 5.32, 5.33, 5.34, 5.35, 5.36, 5.37, 5.38, 5.39,
- 5.4 , 5.41, 5.42, 5.43, 5.44, 5.45, 5.46, 5.47, 5.48,
- 5.49, 5.5 , 5.51, 5.52, 5.53, 5.54, 5.55, 5.56, 5.57,
- 5.58, 5.59, 5.6 , 5.61, 5.62, 5.63, 5.64, 5.65, 5.66,
- 5.67, 5.68, 5.69, 5.7 , 5.71, 5.72, 5.73, 5.74, 5.75,
- 5.76, 5.77, 5.78, 5.79, 5.8 , 5.81, 5.82, 5.83, 5.84,
- 5.85, 5.86, 5.87, 5.88, 5.89, 5.9 , 5.91, 5.92, 5.93,
- 5.94, 5.95, 5.96, 5.97, 5.98, 5.99, 6. , 6.01, 6.02,
- 6.03, 6.04, 6.05, 6.06, 6.07, 6.08, 6.09, 6.1 , 6.11,
- 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19, 6.2 ,
- 6.21, 6.22, 6.23, 6.24, 6.25, 6.26, 6.27, 6.28, 6.29,
- 6.3 , 6.31, 6.32, 6.33, 6.34, 6.35, 6.36, 6.37, 6.38,
- 6.39, 6.4 , 6.41, 6.42, 6.43, 6.44, 6.45, 6.46, 6.47,
- 6.48, 6.49, 6.5 , 6.51, 6.52, 6.53, 6.54, 6.55, 6.56,
- 6.57, 6.58, 6.59, 6.6 , 6.61, 6.62, 6.63, 6.64, 6.65,
- 6.66, 6.67, 6.68, 6.69, 6.7 , 6.71, 6.72, 6.73, 6.74,
- 6.75, 6.76, 6.77, 6.78, 6.79, 6.8 , 6.81, 6.82, 6.83,
- 6.84, 6.85, 6.86, 6.87, 6.88, 6.89, 6.9 , 6.91, 6.92,
- 6.93, 6.94, 6.95, 6.96, 6.97, 6.98, 6.99, 7.
-},
-{
- 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0. , 0. , 0. , 0. ,
- 0. , 0. , 0.000001, 0.000001, 0.000001, 0.000001,
- 0.000002, 0.000002, 0.000003, 0.000003, 0.000004, 0.000005,
- 0.000006, 0.000007, 0.000008, 0.00001 , 0.000012, 0.000014,
- 0.000016, 0.000019, 0.000023, 0.000026, 0.000031, 0.000035,
- 0.000041, 0.000047, 0.000054, 0.000062, 0.00007 , 0.00008 ,
- 0.000091, 0.000103, 0.000116, 0.000131, 0.000147, 0.000165,
- 0.000185, 0.000207, 0.000231, 0.000257, 0.000285, 0.000316,
- 0.00035 , 0.000387, 0.000427, 0.000471, 0.000518, 0.000569,
- 0.000624, 0.000683, 0.000747, 0.000816, 0.00089 , 0.00097 ,
- 0.001055, 0.001147, 0.001245, 0.001349, 0.001461, 0.00158 ,
- 0.001708, 0.001843, 0.001987, 0.002141, 0.002303, 0.002476,
- 0.002659, 0.002854, 0.003059, 0.003276, 0.003506, 0.003748,
- 0.004004, 0.004274, 0.004558, 0.004857, 0.005171, 0.005502,
- 0.00585 , 0.006215, 0.006597, 0.006999, 0.007419, 0.007859,
- 0.00832 , 0.008802, 0.009305, 0.009831, 0.01038 , 0.010953,
- 0.01155 , 0.012172, 0.01282 , 0.013495, 0.014197, 0.014927,
- 0.015686, 0.016473, 0.017291, 0.01814 , 0.019021, 0.019933,
- 0.020879, 0.021858, 0.022872, 0.023921, 0.025006, 0.026127,
- 0.027285, 0.028482, 0.029717, 0.030992, 0.032306, 0.033662,
- 0.035059, 0.036497, 0.037979, 0.039504, 0.041073, 0.042687,
- 0.044345, 0.04605 , 0.047801, 0.049599, 0.051445, 0.053339,
- 0.055282, 0.057273, 0.059315, 0.061406, 0.063548, 0.065742,
- 0.067986, 0.070283, 0.072632, 0.075034, 0.077488, 0.079996,
- 0.082558, 0.085174, 0.087843, 0.090568, 0.093346, 0.09618 ,
- 0.099069, 0.102013, 0.105012, 0.108066, 0.111176, 0.114342,
- 0.117563, 0.120839, 0.124171, 0.127558, 0.131001, 0.134499,
- 0.138052, 0.141659, 0.145322, 0.149039, 0.15281 , 0.156635,
- 0.160514, 0.164446, 0.168431, 0.172469, 0.176559, 0.180701,
- 0.184894, 0.189138, 0.193432, 0.197776, 0.202169, 0.206611,
- 0.211101, 0.215639, 0.220223, 0.224853, 0.229528, 0.234248,
- 0.239012, 0.24382 , 0.248669, 0.25356 , 0.258492, 0.263464,
- 0.268474, 0.273523, 0.278608, 0.283731, 0.288888, 0.29408 ,
- 0.299305, 0.304562, 0.309851, 0.31517 , 0.320519, 0.325895,
- 0.331299, 0.336729, 0.342185, 0.347664, 0.353166, 0.35869 ,
- 0.364234, 0.369798, 0.375381, 0.38098 , 0.386596, 0.392227,
- 0.397871, 0.403529, 0.409197, 0.414876, 0.420565, 0.426261,
- 0.431964, 0.437673, 0.443387, 0.449103, 0.454822, 0.460543,
- 0.466263, 0.471981, 0.477698, 0.483411, 0.48912 , 0.494822,
- 0.500518, 0.506206, 0.511886, 0.517554, 0.523212, 0.528858,
- 0.53449 , 0.540108, 0.545711, 0.551297, 0.556866, 0.562417,
- 0.567948, 0.573459, 0.578949, 0.584417, 0.589861, 0.595282,
- 0.600677, 0.606048, 0.611391, 0.616707, 0.621995, 0.627254,
- 0.632483, 0.637681, 0.642848, 0.647984, 0.653086, 0.658155,
- 0.66319 , 0.66819 , 0.673155, 0.678084, 0.682976, 0.687831,
- 0.692649, 0.697428, 0.702168, 0.70687 , 0.711531, 0.716153,
- 0.720733, 0.725273, 0.729772, 0.734228, 0.738643, 0.743015,
- 0.747344, 0.75163 , 0.755873, 0.760072, 0.764227, 0.768339,
- 0.772406, 0.776428, 0.780406, 0.784339, 0.788228, 0.792071,
- 0.795869, 0.799622, 0.80333 , 0.806992, 0.810609, 0.814181,
- 0.817707, 0.821188, 0.824624, 0.828015, 0.83136 , 0.83466 ,
- 0.837916, 0.841126, 0.844292, 0.847413, 0.85049 , 0.853522,
- 0.85651 , 0.859455, 0.862355, 0.865212, 0.868026, 0.870796,
- 0.873524, 0.876209, 0.878852, 0.881452, 0.884011, 0.886528,
- 0.889005, 0.89144 , 0.893834, 0.896189, 0.898503, 0.900778,
- 0.903014, 0.90521 , 0.907369, 0.909488, 0.911571, 0.913615,
- 0.915623, 0.917594, 0.919528, 0.921427, 0.92329 , 0.925118,
- 0.926911, 0.92867 , 0.930395, 0.932086, 0.933745, 0.93537 ,
- 0.936963, 0.938525, 0.940055, 0.941554, 0.943022, 0.94446 ,
- 0.945869, 0.947248, 0.948598, 0.949919, 0.951213, 0.952478,
- 0.953717, 0.954928, 0.956113, 0.957273, 0.958406, 0.959514,
- 0.960598, 0.961657, 0.962692, 0.963703, 0.964692, 0.965657,
- 0.9666 , 0.967521, 0.968421, 0.969299, 0.970156, 0.970993,
- 0.97181 , 0.972607, 0.973385, 0.974144, 0.974884, 0.975605,
- 0.976309, 0.976996, 0.977665, 0.978317, 0.978953, 0.979572,
- 0.980176, 0.980764, 0.981337, 0.981895, 0.982438, 0.982967,
- 0.983482, 0.983984, 0.984472, 0.984947, 0.985409, 0.985858,
- 0.986296, 0.986721, 0.987135, 0.987537, 0.987929, 0.988309,
- 0.988678, 0.989038, 0.989387, 0.989726, 0.990056, 0.990376,
- 0.990687, 0.990989, 0.991282, 0.991566, 0.991843, 0.992111,
- 0.992371, 0.992624, 0.992869, 0.993106, 0.993337, 0.99356 ,
- 0.993777, 0.993988, 0.994191, 0.994389, 0.99458 , 0.994766,
- 0.994946, 0.99512 , 0.995289, 0.995452, 0.99561 , 0.995764,
- 0.995912, 0.996056, 0.996195, 0.996329, 0.99646 , 0.996586,
- 0.996708, 0.996825, 0.996939, 0.99705 , 0.997156, 0.99726 ,
- 0.997359, 0.997456, 0.997549, 0.997639, 0.997726, 0.99781 ,
- 0.997891, 0.997969, 0.998045, 0.998118, 0.998189, 0.998257,
- 0.998323, 0.998386, 0.998447, 0.998506, 0.998563, 0.998618,
- 0.998671, 0.998723, 0.998772, 0.998819, 0.998865, 0.998909,
- 0.998952, 0.998993, 0.999033, 0.999071, 0.999107, 0.999143,
- 0.999177, 0.99921 , 0.999241, 0.999272, 0.999301, 0.999329,
- 0.999356, 0.999382, 0.999407, 0.999431, 0.999455, 0.999477,
- 0.999498, 0.999519, 0.999539, 0.999558, 0.999576, 0.999594,
- 0.999611, 0.999627, 0.999643, 0.999658, 0.999672, 0.999686,
- 0.999699, 0.999712, 0.999724, 0.999736, 0.999747, 0.999758,
- 0.999769, 0.999779, 0.999788, 0.999797, 0.999806, 0.999815,
- 0.999823, 0.99983 , 0.999838, 0.999845, 0.999852, 0.999858,
- 0.999865, 0.999871, 0.999876, 0.999882, 0.999887, 0.999892,
- 0.999897, 0.999902, 0.999906, 0.99991 , 0.999915, 0.999918,
- 0.999922, 0.999926, 0.999929, 0.999932, 0.999936, 0.999938,
- 0.999941, 0.999944, 0.999947, 0.999949, 0.999952, 0.999954,
- 0.999956, 0.999958, 0.99996 , 0.999962, 0.999964, 0.999965,
- 0.999967, 0.999969, 0.99997 , 0.999972, 0.999973, 0.999974,
- 0.999975, 0.999977, 0.999978, 0.999979, 0.99998 , 0.999981,
- 0.999982, 0.999983, 0.999984, 0.999984, 0.999985, 0.999986,
- 0.999987, 0.999987, 0.999988, 0.999988, 0.999989, 0.99999 ,
- 0.99999 , 0.999991, 0.999991, 0.999992, 0.999992, 0.999992,
- 0.999993, 0.999993, 0.999993, 0.999994, 0.999994, 0.999994,
- 0.999995, 0.999995, 0.999995, 0.999995, 0.999996, 0.999996,
- 0.999996, 0.999996, 0.999997, 0.999997, 0.999997, 0.999997,
- 0.999997, 0.999997, 0.999998, 0.999998, 0.999998, 0.999998,
- 0.999998, 0.999998, 0.999998, 0.999998, 0.999998, 0.999998,
- 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
- 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
- 0.999999, 0.999999, 0.999999, 0.999999, 0.999999, 0.999999,
- 0.999999, 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1. , 1. ,
- 1. , 1. , 1. , 1. , 1.
-} // this is chi cdf for 7 degrees of freedom (because we have 7 features)
-);
-
-const std::vector<ctx::num_t> ctx::VisitCateger::__featuresMean(
-{
- 344.542975696503,
- 894.178423236515,
- 868.300533491405,
- 2.820391227030,
- 0.511747454052,
- 0.348669092762,
- 0.139583453187
-});
-
-const std::vector<ctx::num_t> ctx::VisitCateger::__featuresStd(
-{
- 416.061437196941,
- 301.401812101781,
- 300.774466281622,
- 1.916233112930,
- 0.314254748759,
- 0.360707461975,
- 0.109386661911
-});
-
-ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
-{
- struct tm *timeinfo = localtime(&time);
- if (timeinfo == NULL) {
- return {0, 0, 0, false};
- }
- int minutesSinceMidnight = 60 * timeinfo->tm_hour + timeinfo->tm_min;
- int weekday = (timeinfo->tm_wday + 6) % 7; // Monday is 0, Sunday is 6
- bool weekend = weekday > 4;
- int minutesSinceBeginingOfTheWeek = 24 * 60 * weekday + minutesSinceMidnight;
- return {
- minutesSinceMidnight,
- minutesSinceBeginingOfTheWeek,
- weekday,
- weekend
- };
-}
-
-int ctx::VisitCateger::weeksScope(const TimeFeatures &startF, const Interval &interval)
-{
- int durationMinutes = (interval.end - interval.start) / 60;
- int scopeMinutes = startF.minutesSinceBeginingOfTheWeek + durationMinutes;
- int weeksScope = scopeMinutes / __MINUTES_IN_WEEK;
- if (scopeMinutes % __MINUTES_IN_WEEK > 0) {
- weeksScope++;
- }
- return weeksScope;
-}
-
-ctx::num_t ctx::VisitCateger::__sum(const std::vector<num_t> model, const size_t &from, const size_t &to)
-{
- size_t toSecure = to;
- if (to >= model.size()) {
- _E("'to' exceeds model size");
- toSecure = model.size() - 1;
- }
-
- if (from > to) {
- _E("'from' greater than 'to'");
- }
-
- num_t result = 0.0;
- for (size_t i = from; i <= toSecure; i++) {
- result += model[i];
- }
-
- return result;
-}
-
-ctx::num_t ctx::VisitCateger::__weekModelMeanValue(PlaceCategId categ, const Interval &interval,
- const TimeFeatures &startF, const TimeFeatures &endF)
-{
- num_t ret = 0.0;
- int minutes = 0;
- int ws = weeksScope(startF, interval);
- for (int week = 1; week <= ws; week++) {
- size_t startIndex = (week == 1)
- ? startF.minutesSinceBeginingOfTheWeek
- : 0;
- size_t endIndex = (week == ws)
- ? endF.minutesSinceBeginingOfTheWeek
- : __MINUTES_IN_WEEK - 1;
- ret += __sum(prob_features::weekModel[categ], startIndex, endIndex);
- minutes += endIndex - startIndex + 1;
- }
- if (minutes > 0) {
- return ret / minutes;
- }
- return ret;
-}
-
-ctx::Categs ctx::VisitCateger::weekModelFeatures(const Interval &interval, const TimeFeatures &startF, const TimeFeatures &endF)
-{
- ctx::Categs categs;
- for (const auto &item : prob_features::weekModel) {
- categs[item.first] = __weekModelMeanValue(item.first, interval, startF, endF);
- }
- _D("categs: H=%.12f, W=%.12f, O=%.12f",
- categs[PLACE_CATEG_ID_HOME],
- categs[PLACE_CATEG_ID_WORK],
- categs[PLACE_CATEG_ID_OTHER]);
- return categs;
-}
-
-ctx::IntervalFeatures ctx::VisitCateger::intervalFeatures(const Interval &interval)
-{
- num_t durationMinutes = 1.0 * (interval.end - interval.start) / 60;
- TimeFeatures startFeatures = timeFeatures(interval.start);
- TimeFeatures endFeatures = timeFeatures(interval.end);
- Categs weekFeatures = weekModelFeatures(interval, startFeatures, endFeatures);
- return {
- durationMinutes,
- (num_t) startFeatures.minutesSinceMidnight,
- (num_t) endFeatures.minutesSinceMidnight,
- (num_t) startFeatures.weekday,
- weekFeatures[PLACE_CATEG_ID_HOME],
- weekFeatures[PLACE_CATEG_ID_WORK],
- weekFeatures[PLACE_CATEG_ID_OTHER]
- };
-}
-
-void ctx::VisitCateger::__normalize(std::vector<ctx::num_t> &features)
-{
- size_t n = features.size();
- for (size_t i = 0; i < n; i++) {
- features[i] -= __featuresMean[i];
- features[i] /= __featuresStd[i];
- }
-}
-
-void ctx::VisitCateger::categorize(ctx::Visit &visit)
-{
- IntervalFeatures features = intervalFeatures(visit.interval);
- __normalize(features);
-
- for (auto &modelPair : __models) {
- int categId = modelPair.first;
- MahalModel model = modelPair.second;
-
- num_t distance = model.distance(features);
- num_t probability = 1 - __chiApprox.value(distance); // sth like probability but not exactly
- visit.categs[categId] = probability;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_
-
-#include "user_places_types.h"
-#include "mahal.h"
-#include "piecewise_lin.h"
-#include <map>
-
-namespace ctx {
-
- struct TimeFeatures {
- int minutesSinceMidnight;
- int minutesSinceBeginingOfTheWeek;
- int weekday;
- bool weekend;
- };
-
- typedef std::vector<num_t> IntervalFeatures;
-
- /*
- * visit categorizer class
- */
- class VisitCateger {
-
- private:
- static const int __MINUTES_IN_WEEK = 60 * 24 * 7;
- static const std::map<int, MahalModel> __models;
- static const std::vector<num_t> __featuresMean;
- static const std::vector<num_t> __featuresStd;
- static num_t __sum(const std::vector<num_t> model, const size_t &from, const size_t &to);
- static num_t __weekModelMeanValue(PlaceCategId categ, const Interval &interval,
- const TimeFeatures &startF, const TimeFeatures &endF);
- static void __normalize(std::vector<num_t> &features);
- static PiecewiseLin __chiApprox; // tabled chi function approximator
-
- public:
- /**
- * Function interpret time in timestamp input argument,
- *
- * @param time timestamp
- * @return TimeFeatures structure with interpretations of timestamp
- */
- static TimeFeatures timeFeatures(const time_t &time);
-
- static int weeksScope(const TimeFeatures &startF, const Interval &interval);
-
- /**
- * Function interpret time interval input argument and calculates scores
- * that argument interval is home, work or other based on whole week model.
- *
- * @param interval time interval
- * @param startF start time features
- * @param endF end time features
- * @return Categs score that argument interval is home, work or other
- */
- static Categs weekModelFeatures(const Interval &interval, const TimeFeatures &startF,
- const TimeFeatures &endF);
-
- /**
- * Function interpret time interval input argument,
- *
- * @param interval time interval
- * @return IntervalFeatures vector with interpretations of input time interval
- */
- static IntervalFeatures intervalFeatures(const Interval &interval);
-
- /**
- * Function categorize visit based on visits time interval and fill its categories values.
- */
- static void categorize(ctx::Visit &visit);
-
- }; /* class VisitCateger */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_CATEGER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <set>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-#include <Types.h>
-#include <Json.h>
-#include "../place_recognition_types.h"
-#include "visit_detector.h"
-#include "user_places_params.h"
-#include "visit_categer.h"
-#include "similarity.h"
-#include "median.h"
-#include "debug_utils.h"
-
-#ifdef TIZEN_ENGINEER_MODE
-#define __VISIT_TABLE_COLUMNS \
- VISIT_COLUMN_WIFI_APS " TEXT, "\
- VISIT_COLUMN_START_TIME " timestamp, "\
- VISIT_COLUMN_END_TIME " timestamp, "\
- VISIT_COLUMN_START_TIME_HUMAN " TEXT, "\
- VISIT_COLUMN_END_TIME_HUMAN " TEXT, "\
- VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
- VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
- VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
- VISIT_COLUMN_CATEG_HOME " REAL, "\
- VISIT_COLUMN_CATEG_WORK " REAL, "\
- VISIT_COLUMN_CATEG_OTHER " REAL"
-#else /* TIZEN_ENGINEER_MODE */
-#define __VISIT_TABLE_COLUMNS \
- VISIT_COLUMN_WIFI_APS " TEXT, "\
- VISIT_COLUMN_START_TIME " timestamp, "\
- VISIT_COLUMN_END_TIME " timestamp, "\
- VISIT_COLUMN_LOCATION_VALID " INTEGER, "\
- VISIT_COLUMN_LOCATION_LATITUDE " REAL, "\
- VISIT_COLUMN_LOCATION_LONGITUDE " REAL, "\
- VISIT_COLUMN_CATEG_HOME " REAL, "\
- VISIT_COLUMN_CATEG_WORK " REAL, "\
- VISIT_COLUMN_CATEG_OTHER " REAL"
-#endif /* TIZEN_ENGINEER_MODE */
-
-ctx::VisitDetector::VisitDetector(time_t startScan, PlaceRecogMode energyMode, bool testMode) :
- __testMode(testMode),
- __locationLogger(this, testMode),
- __wifiLogger(this, energyMode, testMode),
- __currentInterval(startScan, startScan + VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
- __stableCounter(0),
- __tolerance(VISIT_DETECTOR_TOLERANCE_DEPTH),
- __entranceToPlace(false),
- __periodSeconds(VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY),
- __entranceTime(0),
- __departureTime(0)
-{
- __setPeriod(energyMode);
- __currentInterval = Interval(startScan, startScan + __periodSeconds);
- __currentMacEvents = std::make_shared<MacEvents>();
- __stayMacs = std::make_shared<MacSet>();
-
- if (__testMode) {
- __detectedVisits = std::make_shared<ctx::Visits>();
- return;
- }
-
- __listeners.push_back(&__locationLogger);
- __listeners.push_back(&__wifiLogger);
- __dbCreateTable();
- __wifiLogger.startLogging();
-}
-
-ctx::VisitDetector::~VisitDetector()
-{
-}
-
-bool ctx::VisitDetector::__isValid(const ctx::Mac &mac)
-{
- return mac != "00:00:00:00:00:00";
-}
-
-void ctx::VisitDetector::onWifiScan(ctx::MacEvent e)
-{
- _D("timestamp=%d, curent_interval.end=%d, mac=%s", e.timestamp, __currentInterval.end, std::string(e.mac).c_str());
- if (__isValid(e.mac)) {
- while (e.timestamp > __currentInterval.end) {
- __processCurrentLogger();
- __shiftCurrentInterval();
- }
- __currentMacEvents->push_back(e);
- }
-}
-
-void ctx::VisitDetector::__processCurrentLogger()
-{
- _D("");
- std::shared_ptr<ctx::Frame> frame = __makeFrame(__currentMacEvents, __currentInterval);
- __detectEntranceOrDeparture(frame);
- __currentMacEvents->clear();
-}
-
-std::shared_ptr<ctx::Frame> ctx::VisitDetector::__makeFrame(std::shared_ptr<ctx::MacEvents> logger, ctx::Interval interval)
-{
- std::set<time_t> timestamps;
- std::shared_ptr<Frame> frame = std::make_shared<Frame>(interval);
- for (auto log : *logger) {
- timestamps.insert(log.timestamp);
- if (frame->macs2Counts.find(log.mac) == frame->macs2Counts.end()) {
- frame->macs2Counts[log.mac] = 1;
- } else {
- frame->macs2Counts[log.mac] += 1;
- }
- }
- frame->numberOfTimestamps = timestamps.size();
- return frame;
-}
-
-void ctx::VisitDetector::__shiftCurrentInterval()
-{
- __currentInterval.end += __periodSeconds;
- __currentInterval.start += __periodSeconds;
-}
-
-void ctx::VisitDetector::__detectEntranceOrDeparture(std::shared_ptr<ctx::Frame> frame)
-{
- __entranceToPlace ? __detectDeparture(frame) : __detectEntrance(frame);
-}
-
-bool ctx::VisitDetector::__isDisjoint(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
-{
- for (auto &mac : macSet) {
- if (macs2Counts.find(mac) != macs2Counts.end()) {
- return false;
- }
- }
- return true;
-}
-
-bool ctx::VisitDetector::__protrudesFrom(const ctx::Macs2Counts &macs2Counts, const ctx::MacSet &macSet)
-{
- for (auto &macCount : macs2Counts) {
- if (macSet.find(macCount.first) == macSet.end()) {
- return true;
- }
- }
- return false;
-}
-
-void ctx::VisitDetector::__detectDeparture(std::shared_ptr<ctx::Frame> frame)
-{
- if (__tolerance == VISIT_DETECTOR_TOLERANCE_DEPTH) {
- __departureTime = frame->interval.start;
- __bufferedFrames.clear();
- } else { // __tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH
- __bufferedFrames.push_back(frame);
- }
- if (__isDisjoint(frame->macs2Counts, *__representativesMacs)) {
- if (frame->macs2Counts.empty() || __protrudesFrom(frame->macs2Counts, *__stayMacs)) {
- __tolerance--;
- } else { // no new macs
- __bufferedFrames.clear();
- }
- if (__tolerance == 0) { // departure detected
- __visitEndDetected();
- __processBuffer(frame);
- }
- } else if (__tolerance < VISIT_DETECTOR_TOLERANCE_DEPTH) {
- __tolerance++;
- }
-}
-
-void ctx::VisitDetector::__visitStartDetected()
-{
- __entranceToPlace = true;
-
- __locationEvents.clear();
- if (!__testMode) {
- for (IVisitListener* listener : __listeners) {
- listener->onVisitStart();
- }
- }
- __representativesMacs = __selectRepresentatives(__historyFrames);
- __entranceTime = __historyFrames[0]->interval.start;
- _I("Entrance detected, timestamp: %d", __entranceTime);
- __resetHistory();
-}
-
-void ctx::VisitDetector::__visitEndDetected()
-{
- if (!__testMode) {
- for (IVisitListener* listener : __listeners) {
- listener->onVisitEnd();
- }
- }
- _I("Departure detected, timestamp: %d", __departureTime);
-
- Interval interval(__entranceTime, __departureTime);
- Visit visit(interval, __representativesMacs);
- VisitCateger::categorize(visit);
-
- __putLocationToVisit(visit);
-
- if (__testMode) {
- __detectedVisits->push_back(visit);
- } else {
- __dbInsertVisit(visit);
- }
-
- // cleaning
- __entranceToPlace = false;
- __representativesMacs.reset();
- __tolerance = VISIT_DETECTOR_TOLERANCE_DEPTH;
-}
-
-void ctx::VisitDetector::__putLocationToVisit(ctx::Visit &visit)
-{
- // TODO: remove small accuracy locations from vectors?
- std::vector<double> latitudes;
- std::vector<double> longitudes;
- visit.locationValid = false;
- for (LocationEvent location : __locationEvents) {
- if (location.timestamp >= __entranceTime && location.timestamp <= __departureTime) {
- latitudes.push_back(location.coordinates.latitude);
- longitudes.push_back(location.coordinates.longitude);
- visit.locationValid = true;
- }
- }
- if (visit.locationValid) {
- visit.location.latitude = median(latitudes);
- visit.location.longitude = median(longitudes);
- _D("visit location set: lat=%.8f, lon=%.8f", visit.location.latitude, visit.location.longitude);
- } else {
- _D("visit location not set");
- }
-}
-
-void ctx::VisitDetector::__processBuffer(std::shared_ptr<ctx::Frame> frame)
-{
- if (__bufferedFrames.empty()) {
- __historyFrames.push_back(frame);
- } else {
- __historyFrames.push_back(__bufferedFrames[0]);
- for (size_t i = 1; i < __bufferedFrames.size(); i++) {
- __detectEntrance(__bufferedFrames[i]);
- if (__entranceToPlace) {
- break;
- }
- }
- }
-}
-
-void ctx::VisitDetector::__detectEntrance(std::shared_ptr<ctx::Frame> currentFrame)
-{
- if (currentFrame->macs2Counts.empty() || __historyFrames.empty()) {
- __resetHistory(currentFrame);
- return;
- }
-
- if (__stableCounter == 0) {
- std::shared_ptr<Frame> oldestHistoryFrame = __historyFrames[0];
- __stayMacs = macSetFromMacs2Counts(oldestHistoryFrame->macs2Counts);
- }
-
- std::shared_ptr<MacSet> currentBeacons = macSetFromMacs2Counts(currentFrame->macs2Counts);
-
- if (similarity::overlapBiggerOverSmaller(*currentBeacons, *__stayMacs) > VISIT_DETECTOR_OVERLAP) {
- __stableCounter++;
- __historyFrames.push_back(currentFrame);
-
- if (__stableCounter == VISIT_DETECTOR_STABLE_DEPTH) { // entrance detected
- __visitStartDetected();
- }
- } else {
- __resetHistory(currentFrame);
- }
- return;
-}
-
-void ctx::VisitDetector::__resetHistory()
-{
- __stableCounter = 0;
- __historyFrames.clear();
-}
-
-void ctx::VisitDetector::__resetHistory(std::shared_ptr<Frame> frame)
-{
- __resetHistory();
- __historyFrames.push_back(frame);
-}
-
-std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames)
-{
- Macs2Counts reprs2Counts;
- count_t allCount = 0;
-
- for (auto frame : frames) {
- allCount += frame->numberOfTimestamps;
- for (auto &c : frame->macs2Counts) {
- reprs2Counts[c.first] += c.second;
- }
- }
-
- std::shared_ptr<Macs2Shares> reprs2Shares = __macSharesFromCounts(reprs2Counts, allCount);
-
- share_t maxShare = __calcMaxShare(*reprs2Shares);
- share_t threshold = maxShare < VISIT_DETECTOR_REP_THRESHOLD ? maxShare : VISIT_DETECTOR_REP_THRESHOLD;
-
- std::shared_ptr<MacSet> reprsMacSet = __macSetOfGreaterOrEqualShare(*reprs2Shares, threshold);
-
- return reprsMacSet;
-}
-
-ctx::share_t ctx::VisitDetector::__calcMaxShare(const ctx::Macs2Shares &macs2Shares)
-{
- ctx::share_t maxShare = 0.0;
- for (auto &macShare : macs2Shares) {
- if (macShare.second > maxShare) {
- maxShare = macShare.second;
- }
- }
- return maxShare;
-}
-
-std::shared_ptr<ctx::MacSet> ctx::VisitDetector::__macSetOfGreaterOrEqualShare(const ctx::Macs2Shares &macs2Shares, ctx::share_t threshold)
-{
- std::shared_ptr<MacSet> macSet = std::make_shared<MacSet>();
- for (auto &macShare : macs2Shares) {
- if (macShare.second >= threshold) {
- macSet->insert(macShare.first);
- }
- }
- return macSet;
-}
-
-std::shared_ptr<ctx::Macs2Shares> ctx::VisitDetector::__macSharesFromCounts(ctx::Macs2Counts const &macs2Counts, ctx::count_t denominator)
-{
- std::shared_ptr<Macs2Shares> macs2Shares(std::make_shared<Macs2Shares>());
- for (auto macCount : macs2Counts) {
- (*macs2Shares)[macCount.first] = (share_t) macCount.second / denominator;
- }
- return macs2Shares;
-}
-
-std::shared_ptr<ctx::Visits> ctx::VisitDetector::getVisits()
-{
- return __detectedVisits;
-}
-
-void ctx::VisitDetector::__dbCreateTable()
-{
- bool ret = __dbManager.createTable(0, VISIT_TABLE, __VISIT_TABLE_COLUMNS);
- _D("db: visit Table Creation Result: %s", ret ? "SUCCESS" : "FAIL");
-}
-
-void ctx::VisitDetector::__putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data)
-{
- auto categ = categs.find(categType);
- if (categ == categs.end()) {
- _E("json_put_visit no type %d in categs", categType);
- } else {
- data.set(NULL, key, categ->second);
- }
-}
-
-void ctx::VisitDetector::__putVisitCategsToJson(const Categs &categs, Json &data)
-{
- __putVisitCategToJson(VISIT_COLUMN_CATEG_HOME, categs, PLACE_CATEG_ID_HOME, data);
- __putVisitCategToJson(VISIT_COLUMN_CATEG_WORK, categs, PLACE_CATEG_ID_WORK, data);
- __putVisitCategToJson(VISIT_COLUMN_CATEG_OTHER, categs, PLACE_CATEG_ID_OTHER, data);
-}
-
-int ctx::VisitDetector::__dbInsertVisit(Visit visit)
-{
- std::stringstream ss;
- ss << *visit.macSet;
-
- Json data;
- data.set(NULL, VISIT_COLUMN_WIFI_APS, ss.str().c_str());
-
- data.set(NULL, VISIT_COLUMN_LOCATION_VALID, visit.locationValid);
- data.set(NULL, VISIT_COLUMN_LOCATION_LATITUDE, visit.location.latitude);
- data.set(NULL, VISIT_COLUMN_LOCATION_LONGITUDE, visit.location.longitude);
-
- data.set(NULL, VISIT_COLUMN_START_TIME, static_cast<int>(visit.interval.start));
- data.set(NULL, VISIT_COLUMN_END_TIME, static_cast<int>(visit.interval.end));
-
-#ifdef TIZEN_ENGINEER_MODE
- std::string startTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.start, "%F %T", 80);
- std::string endTimeHuman = DebugUtils::humanReadableDateTime(visit.interval.end, "%F %T", 80);
- data.set(NULL, VISIT_COLUMN_START_TIME_HUMAN, startTimeHuman.c_str());
- data.set(NULL, VISIT_COLUMN_END_TIME_HUMAN, endTimeHuman.c_str());
- _D("db: visit table insert interval: (%d, %d): (%s, %s)",
- visit.interval.start, visit.interval.end, startTimeHuman.c_str(), endTimeHuman.c_str());
-#else
- _D("db: visit table insert interval: (%d, %d)", visit.interval.start, visit.interval.end);
-#endif /* TIZEN_ENGINEER_MODE */
-
- __putVisitCategsToJson(visit.categs, data);
-
- int64_t rowId;
- bool ret = __dbManager.insertSync(VISIT_TABLE, data, &rowId);
- _D("db: visit table insert result: %s", ret ? "SUCCESS" : "FAIL");
- return ret;
-}
-
-void ctx::VisitDetector::onNewLocation(LocationEvent locationEvent)
-{
- _D("");
- locationEvent.log();
- __locationEvents.push_back(locationEvent);
-};
-
-void ctx::VisitDetector::__setPeriod(PlaceRecogMode energyMode)
-{
- switch (energyMode) {
- case PLACE_RECOG_LOW_POWER_MODE:
- __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_LOW_POWER;
- break;
- case PLACE_RECOG_HIGH_ACCURACY_MODE:
- __periodSeconds = VISIT_DETECTOR_PERIOD_SECONDS_HIGH_ACCURACY;
- break;
- default:
- _E("Incorrect energy mode");
- }
-}
-
-void ctx::VisitDetector::setMode(PlaceRecogMode energyMode)
-{
- _D("");
- __setPeriod(energyMode);
- __wifiLogger.setMode(energyMode);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_
-
-#include <memory>
-#include <vector>
-#include <map>
-#include <unordered_map>
-#include <unordered_set>
-#include "user_places_types.h"
-#include <Json.h>
-#include <DatabaseManager.h>
-#include "visit_listener_iface.h"
-#include "location_logger.h"
-#include "location_listener_iface.h"
-#include "wifi_listener_iface.h"
-#include "wifi_logger.h"
-
-namespace ctx {
-
- class VisitDetector : public IWifiListener, ILocationListener {
-
- private:
- bool __testMode;
- std::shared_ptr<Visits> __detectedVisits; // only used in test mode
- LocationLogger __locationLogger;
- WifiLogger __wifiLogger;
- std::vector<IVisitListener*> __listeners;
- std::shared_ptr<MacEvents> __currentMacEvents;
- Interval __currentInterval;
- std::vector<LocationEvent> __locationEvents;
- std::vector<std::shared_ptr<Frame>> __historyFrames; // python: history_scans + history_times
- std::vector<std::shared_ptr<Frame>> __bufferedFrames; // python: buffered_scans + buffered_times
- int __stableCounter;
- int __tolerance;
- bool __entranceToPlace;
- int __periodSeconds;
- DatabaseManager __dbManager;
-
- // fields that are used only in case of entrance detection
- std::shared_ptr<MacSet> __representativesMacs; // macs that represent the current place
- std::shared_ptr<MacSet> __stayMacs; // macs that can appear in the current place
- time_t __entranceTime;
- time_t __departureTime;
-
- bool __isValid(const Mac &mac);
- void __shiftCurrentInterval();
- void __detectEntranceOrDeparture(std::shared_ptr<Frame> frame);
- void __detectEntrance(std::shared_ptr<Frame> frame);
- void __detectDeparture(std::shared_ptr<Frame> frame);
- void __processBuffer(std::shared_ptr<Frame> frame); // python: buffer_analysing
- std::shared_ptr<Frame> __makeFrame(std::shared_ptr<MacEvents> macEvents, Interval interval); // python: scans2fingerprint
- void __resetHistory();
- void __resetHistory(std::shared_ptr<Frame> frame);
- void __visitStartDetected();
- void __visitEndDetected();
- void __putLocationToVisit(Visit &visit);
- std::shared_ptr<MacSet> __selectRepresentatives(const std::vector<std::shared_ptr<Frame>> &frames);
- std::shared_ptr<MacSet> __macSetOfGreaterOrEqualShare(const Macs2Shares &macs2Shares, share_t threshold);
- std::shared_ptr<Macs2Shares> __macSharesFromCounts(Macs2Counts const &macs2Counts, count_t denominator); // python: response_rate
- share_t __calcMaxShare(const Macs2Shares &macs2Shares);
- bool __isDisjoint(const Macs2Counts &macs2Counts, const MacSet &macSet);
- bool __protrudesFrom(const Macs2Counts &macs2Counts, const MacSet &macSet);
- void __setPeriod(PlaceRecogMode mode);
- void __processCurrentLogger();
-
- /* DATABASE */
- void __dbCreateTable();
- int __dbInsertVisit(Visit visit);
- void __putVisitCategToJson(const char* key, const Categs &categs, int categType, Json &data);
- void __putVisitCategsToJson(const Categs &categs, Json &data);
-
- /* INPUT */
- void onWifiScan(MacEvent event);
- void onNewLocation(LocationEvent location);
-
- public:
- VisitDetector(time_t startScan, PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE, bool testMode = false);
- ~VisitDetector();
-
- std::shared_ptr<Visits> getVisits(); // only used in test mode
- void setMode(PlaceRecogMode energyMode);
-
- }; /* class VisitDetector */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_DETECTOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_
-
-namespace ctx {
-
- class IVisitListener {
-
- public:
- virtual ~IVisitListener() {};
- virtual void onVisitStart() = 0;
- virtual void onVisitEnd() = 0;
-
- }; /* class IVisitListener */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_VISIT_LISTENER_IFACE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
-#define _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_
-
-#include "user_places_types.h"
-
-namespace ctx {
-
- class IWifiListener {
-
- public:
- virtual ~IWifiListener() {};
- virtual void onWifiScan(ctx::MacEvent macEvent) = 0;
-
- }; /* IWifiListener */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LISTENER_IFACE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include <DatabaseManager.h>
-#include "../place_recognition_types.h"
-#include "debug_utils.h"
-#include "wifi_logger.h"
-
-#define __WIFI_CREATE_TABLE_COLUMNS \
- WIFI_COLUMN_TIMESTAMP " timestamp NOT NULL, "\
- WIFI_COLUMN_BSSID " TEXT NOT NULL"
-
-#define __WIFI_ERROR_LOG(error) { \
- if (error != WIFI_ERROR_NONE) { \
- _E("ERROR == %s", __wifiError2Str(error)); \
- } else { \
- _D("SUCCESS"); \
- } \
-}
-
-int ctx::WifiLogger::__dbCreateTable()
-{
- ctx::DatabaseManager dbManager;
- bool ret = dbManager.createTable(0, WIFI_TABLE_NAME, __WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
- _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
- return ret;
-}
-
-int ctx::WifiLogger::__dbInsertLogs()
-{
- if (__logs.size() > 0) {
- ctx::DatabaseManager dbManager;
- std::stringstream query;
- const char* separator = " ";
- query << "BEGIN TRANSACTION; \
- INSERT INTO " WIFI_TABLE_NAME " \
- ( " WIFI_COLUMN_BSSID ", " WIFI_COLUMN_TIMESTAMP " ) \
- VALUES";
- for (MacEvent mac_event : __logs) {
- query << separator << "( '" << mac_event.mac << "', '" << mac_event.timestamp << "' )";
- separator = ", ";
- }
- __logs.clear();
- query << "; \
- END TRANSACTION;";
- bool ret = dbManager.execute(0, query.str().c_str(), NULL);
- _D("DB insert request: %s", ret ? "SUCCESS" : "FAIL");
- return ret;
- }
- _D("__logs vector empty -> nothing to insert");
- return 0;
-}
-
-ctx::WifiLogger::WifiLogger(IWifiListener * listener, PlaceRecogMode energyMode, bool testMode) :
- __timerOn(false),
- __intervalMinutes(WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY),
- __testMode(testMode),
- __listener(listener),
- __lastScanTime(time_t(0)),
- __lasTimerCallbackTime(time_t(0)),
- __duringVisit(false),
- __connectedToWifiAp(false),
- __started(false),
- __running(false)
-{
- _D("CONSTRUCTOR");
- if (testMode) {
- return;
- }
- __setInterval(energyMode);
-
- if (WIFI_LOGGER_DATABASE) {
- __dbCreateTable();
- }
-
- __logs = std::vector<MacEvent>();
-
- __wifiInitializeRequest();
- __wifiSetDeviceStateChangedCbRequest();
- if (WIFI_LOGGER_LOW_POWER_MODE) {
- __wifiSetConnectionStateChangedCbRequest();
- }
- wifi_connection_state_e state = __wifiGetConnectionStateRequest();
- __connectedToWifiAp = (state == WIFI_CONNECTION_STATE_CONNECTED);
- _D("__connectedToWifiAp = %d, __duringVisit = %d IN CONSTRUCTOR",
- static_cast<int>(__connectedToWifiAp),
- static_cast<int>(__duringVisit));
-}
-
-ctx::WifiLogger::~WifiLogger()
-{
- _D("DESTRUCTOR");
- stopLogging();
- __wifiDeinitializeRequest();
-}
-
-void ctx::WifiLogger::__wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData)
-{
- ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
- switch (state) {
- case WIFI_DEVICE_STATE_DEACTIVATED:
- _D("WIFI setting OFF");
- if (wifiLogger->__started) {
- wifiLogger->__stopLogging();
- }
- break;
- case WIFI_DEVICE_STATE_ACTIVATED:
- _D("WIFI setting ON");
- if (wifiLogger->__started) {
- wifiLogger->__startLogging();
- }
- break;
- default:
- break;
- }
-}
-
-void ctx::WifiLogger::__wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
-{
- ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
- switch (state) {
- case WIFI_CONNECTION_STATE_CONNECTED:
- _D("connected to AP");
- wifiLogger->__connectedToWifiAp = true;
- break;
- default:
- _D("disconnected from AP -> __lastScansPool.clear()");
- wifiLogger->__connectedToWifiAp = false;
- wifiLogger->__lastScansPool.clear();
- break;
- }
- // TODO: Check if AP bssid (MAC Address) will be helpful somehow in LOW_POWER mode
-}
-
-bool ctx::WifiLogger::__wifiFoundApCb(wifi_ap_h ap, void *userData)
-{
- ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-
- char *bssid = NULL;
- int ret = __wifiApGetBssidRequest(ap, &bssid);
- if (ret != WIFI_ERROR_NONE) {
- return false;
- }
-
- Mac mac;
- try {
- mac = Mac(bssid);
- } catch (std::runtime_error &e) {
- _E("Cannot create mac_event. Exception: %s", e.what());
- return false;
- }
-
- MacEvent log(wifiLogger->__lastScanTime, mac);
- if (wifiLogger->__listener) {
- wifiLogger->__listener->onWifiScan(log);
- if (WIFI_LOGGER_LOW_POWER_MODE
- && (wifiLogger->__connectedToWifiAp || wifiLogger->__duringVisit) ) {
- // Add to last scans AP's set
- wifiLogger->__lastScansPool.insert(std::string(bssid));
- }
- }
- if (WIFI_LOGGER_DATABASE) {
- wifiLogger->__logs.push_back(log);
- }
-
- return true;
-}
-
-const char* ctx::WifiLogger::__wifiError2Str(int error)
-{
- switch (error) {
- case WIFI_ERROR_INVALID_PARAMETER:
- return "WIFI_ERROR_INVALID_PARAMETER";
- case WIFI_ERROR_OUT_OF_MEMORY:
- return "WIFI_ERROR_OUT_OF_MEMORY";
- case WIFI_ERROR_INVALID_OPERATION:
- return "WIFI_ERROR_INVALID_OPERATION";
- case WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED:
- return "WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED";
- case WIFI_ERROR_OPERATION_FAILED:
- return "WIFI_ERROR_OPERATION_FAILED";
- case WIFI_ERROR_NO_CONNECTION:
- return "WIFI_ERROR_NO_CONNECTION";
- case WIFI_ERROR_NOW_IN_PROGRESS:
- return "WIFI_ERROR_NOW_IN_PROGRESS";
- case WIFI_ERROR_ALREADY_EXISTS:
- return "WIFI_ERROR_ALREADY_EXISTS";
- case WIFI_ERROR_OPERATION_ABORTED:
- return "WIFI_ERROR_OPERATION_ABORTED";
- case WIFI_ERROR_DHCP_FAILED:
- return "WIFI_ERROR_DHCP_FAILED";
- case WIFI_ERROR_INVALID_KEY:
- return "WIFI_ERROR_INVALID_KEY";
- case WIFI_ERROR_NO_REPLY:
- return "WIFI_ERROR_NO_REPLY";
- case WIFI_ERROR_SECURITY_RESTRICTED:
- return "WIFI_ERROR_SECURITY_RESTRICTED";
- case WIFI_ERROR_PERMISSION_DENIED:
- return "WIFI_ERROR_PERMISSION_DENIED";
- default:
- return "unknown wifi error code";
- }
-}
-
-void ctx::WifiLogger::__wifiScanFinishedCb(wifi_error_e errorCode, void *userData)
-{
- ctx::WifiLogger* wifiLogger = (ctx::WifiLogger *)userData;
-
- time_t now = time(nullptr);
-#ifdef TIZEN_ENGINEER_MODE
- double seconds = 0;
- if (wifiLogger->__lastScanTime > 0) {
- seconds = difftime(now, wifiLogger->__lastScanTime);
- }
- std::string timeStr = DebugUtils::humanReadableDateTime(now, "%T", 9);
- _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d -> scan %s (from last : %.1fs)",
- static_cast<int>(wifiLogger->__connectedToWifiAp),
- static_cast<int>(wifiLogger->__duringVisit),
- wifiLogger->__lastScansPool.size(),
- timeStr.c_str(),
- seconds);
-#endif /* TIZEN_ENGINEER_MODE */
- wifiLogger->__lastScanTime = now;
-
- int ret = __wifiForeachFoundApsRequest(userData);
- if (ret != WIFI_ERROR_NONE) {
- return;
- }
- if (WIFI_LOGGER_DATABASE) {
- wifiLogger->__dbInsertLogs();
- }
-}
-
-bool ctx::WifiLogger::__checkWifiIsActivated()
-{
- bool wifiActivated = true;
- int ret = wifi_is_activated(&wifiActivated);
- __WIFI_ERROR_LOG(ret);
- _D("Wi-Fi is %s", wifiActivated ? "ON" : "OFF");
- return wifiActivated;
-}
-
-void ctx::WifiLogger::__wifiScanRequest()
-{
- int ret = wifi_scan(__wifiScanFinishedCb, this);
- __WIFI_ERROR_LOG(ret);
-}
-
-int ctx::WifiLogger::__wifiForeachFoundApsRequest(void *userData)
-{
- int ret = wifi_foreach_found_aps(__wifiFoundApCb, userData);
- __WIFI_ERROR_LOG(ret);
- return ret;
-}
-
-wifi_connection_state_e ctx::WifiLogger::__wifiGetConnectionStateRequest()
-{
- wifi_connection_state_e connectionState;
- int ret = wifi_get_connection_state(&connectionState);
- __WIFI_ERROR_LOG(ret);
- return connectionState;
-}
-
-void ctx::WifiLogger::__wifiSetBackgroundScanCbRequest()
-{
- int ret = wifi_set_background_scan_cb(__wifiScanFinishedCb, this);
- __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiSetDeviceStateChangedCbRequest()
-{
- int ret = wifi_set_device_state_changed_cb(__wifiDeviceStateChangedCb, this);
- __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiSetConnectionStateChangedCbRequest()
-{
- int ret = wifi_set_connection_state_changed_cb(__wifiConnectionStateChangedCb, this);
- __WIFI_ERROR_LOG(ret);
-}
-
-int ctx::WifiLogger::__wifiApGetBssidRequest(wifi_ap_h ap, char **bssid)
-{
- int ret = wifi_ap_get_bssid(ap, bssid);
- __WIFI_ERROR_LOG(ret);
- return ret;
-}
-
-void ctx::WifiLogger::__wifiInitializeRequest()
-{
- int ret = wifi_initialize();
- __WIFI_ERROR_LOG(ret);
-}
-
-void ctx::WifiLogger::__wifiDeinitializeRequest()
-{
- int ret = wifi_deinitialize();
- __WIFI_ERROR_LOG(ret);
-}
-
-bool ctx::WifiLogger::__checkTimerId(int id)
-{
- _D("id == %d, __timerId == %d", id, __timerId);
- return id == __timerId;
-}
-
-/*
- * Accepted time from last callback is >= than minimum interval
- */
-bool ctx::WifiLogger::__checkTimerTime(time_t now)
-{
- double seconds = 0;
- if (__lasTimerCallbackTime > 0) {
- seconds = difftime(now, __lasTimerCallbackTime);
- if (seconds < WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL) {
- _D("last == %d, now == %d, diff = %.1fs -> Incorrect timer callback", __lasTimerCallbackTime, now, seconds);
- return false;
- } else {
- _D("last == %d, now == %d, diff = %.1fs -> Correct timer callback", __lasTimerCallbackTime, now, seconds);
- }
- } else {
- _D("last == %d, now == %d -> First callback", __lasTimerCallbackTime, now);
- }
- __lasTimerCallbackTime = now;
- return true;
-}
-
-bool ctx::WifiLogger::onTimerExpired(int id)
-{
- time_t now = time(nullptr);
- _D("");
- if (__checkTimerId(id) == false) {
- // Incorrect callback call
- return false;
- }
- if (__checkTimerTime(now) == false) {
- // Prevention from double callback call bug
- return __timerOn;
- }
- _D("__connectedToWifiAp = %d, __duringVisit = %d, __lastScansPool.size() = %d",
- static_cast<int>(__connectedToWifiAp),
- static_cast<int>(__duringVisit),
- __lastScansPool.size());
- if (WIFI_LOGGER_LOW_POWER_MODE
- && __duringVisit
- && __connectedToWifiAp
- && __lastScansPool.size() > 0) {
- _D("trying to send fake scan");
- if (__listener) {
- _D("__listener != false -> CORRECT");
- for (std::string bssid : __lastScansPool) {
- Mac mac(bssid);
- MacEvent scan(now, mac);
- _D("send fake scan (%s)", bssid.c_str());
- __listener->onWifiScan(scan);
- }
- }
- } else {
- __wifiScanRequest();
- }
- return __timerOn;
-}
-
-void ctx::WifiLogger::startLogging()
-{
- _D("");
- __started = true;
- __startLogging();
-}
-
-void ctx::WifiLogger::__startLogging()
-{
- _D("");
- if (!__checkWifiIsActivated() || __running) {
- return;
- }
- __running = true;
-
- if (WIFI_LOGGER_ACTIVE_SCANNING) {
- __timerStart(__intervalMinutes);
- __wifiScanRequest();
- }
- if (WIFI_LOGGER_PASSIVE_SCANNING) {
- __wifiSetBackgroundScanCbRequest();
- }
-}
-
-void ctx::WifiLogger::stopLogging()
-{
- _D("");
- __started = false;
- __stopLogging();
-}
-
-void ctx::WifiLogger::__stopLogging()
-{
- _D("");
- if (!__running) {
- return;
- }
- if (WIFI_LOGGER_ACTIVE_SCANNING) {
- // Unset timer
- __timerOn = false;
- // Remove timer
- __timerManager.remove(__timerId);
- }
- if (WIFI_LOGGER_PASSIVE_SCANNING) {
- wifi_unset_background_scan_cb();
- }
- __running = false;
-}
-
-void ctx::WifiLogger::__timerStart(time_t minutes)
-{
- __timerOn = true;
- __timerId = __timerManager.setFor(minutes, this);
- _D("%s (minutes=%d)", __timerId >= 0 ? "SUCCESS" : "ERROR", minutes);
-}
-
-void ctx::WifiLogger::onVisitStart()
-{
- _D("");
- __duringVisit = true;
-}
-
-void ctx::WifiLogger::onVisitEnd()
-{
- _D("__lastScansPool.clear()");
- __duringVisit = false;
- __lastScansPool.clear();
-}
-
-void ctx::WifiLogger::__setInterval(PlaceRecogMode energyMode)
-{
- switch (energyMode) {
- case PLACE_RECOG_LOW_POWER_MODE:
- __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_LOW_POWER;
- break;
- case PLACE_RECOG_HIGH_ACCURACY_MODE:
- __intervalMinutes = WIFI_LOGGER_INTERVAL_MINUTES_HIGH_ACCURACY;
- break;
- default:
- _E("Incorrect energy mode");
- }
-}
-
-void ctx::WifiLogger::__timerRestart()
-{
- __timerManager.remove(__timerId);
- __timerStart(__intervalMinutes);
-}
-
-void ctx::WifiLogger::setMode(PlaceRecogMode energyMode)
-{
- _D("");
- __setInterval(energyMode);
- if (WIFI_LOGGER_ACTIVE_SCANNING && __timerOn) {
- __timerRestart();
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
-#define _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_
-
-#include <wifi.h>
-#include <time.h>
-#include <vector>
-#include <set>
-#include <TimerManager.h>
-#include "wifi_listener_iface.h"
-#include "visit_listener_iface.h"
-#include "user_places_params.h"
-
-/* Database usage flag */
-#define WIFI_LOGGER_DATABASE false
-
-/* Active scanning usage flag */
-#define WIFI_LOGGER_ACTIVE_SCANNING true
-
-/* Passive scanning usage flag */
-#define WIFI_LOGGER_PASSIVE_SCANNING true
-
-/* Active scanning minimum interval in seconds */
-#define WIFI_LOGGER_ACTIVE_SCANNING_MIN_INTERVAL 10
-
-/*
- * Low power scanning usage flag
- * (When phone is connected to some WiFi Access Point
- * last scan data is returned instead of new scan triggering)
- */
-#define WIFI_LOGGER_LOW_POWER_MODE false
-
-namespace ctx {
-
- class WifiLogger : public ITimerListener, public IVisitListener {
-
- public:
- WifiLogger(IWifiListener * listener = nullptr,
- PlaceRecogMode energyMode = PLACE_RECOG_HIGH_ACCURACY_MODE,
- bool testMode = false);
- ~WifiLogger();
-
- void startLogging();
- void stopLogging();
- void setMode(PlaceRecogMode energyMode);
-
- private:
- /* INPUT */
- void onVisitStart();
- void onVisitEnd();
-
- bool onTimerExpired(int timerId);
-
- /* TIMER */
- bool __timerOn;
- int __timerId;
- int __intervalMinutes;
- TimerManager __timerManager;
- void __setInterval(PlaceRecogMode energyMode);
- bool __checkTimerId(int id);
- bool __checkTimerTime(time_t now);
- void __timerStart(time_t minutes);
- void __timerRestart();
-
- /* DATABASE */
- static int __dbCreateTable();
- int __dbInsertLogs();
-
- /* SYSTEM CAPI WRAPPERS */
- void __wifiSetBackgroundScanCbRequest();
- void __wifiSetDeviceStateChangedCbRequest();
- void __wifiSetConnectionStateChangedCbRequest();
- static bool __checkWifiIsActivated();
- void __wifiScanRequest();
- static int __wifiForeachFoundApsRequest(void *userData);
- static wifi_connection_state_e __wifiGetConnectionStateRequest();
- static int __wifiApGetBssidRequest(wifi_ap_h ap, char **bssid);
- void __wifiInitializeRequest();
- void __wifiDeinitializeRequest();
-
- /* SYSTEM CAPI CALLBACKS */
- static void __wifiDeviceStateChangedCb(wifi_device_state_e state, void *userData);
- static void __wifiConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
- static bool __wifiFoundApCb(wifi_ap_h ap, void *userData);
- static void __wifiScanFinishedCb(wifi_error_e errorCode, void *userData);
-
- bool __testMode;
- IWifiListener * const __listener;
- std::vector<MacEvent> __logs;
- std::set<std::string> __lastScansPool;
- time_t __lastScanTime;
- time_t __lasTimerCallbackTime;
- bool __duringVisit;
- bool __connectedToWifiAp;
- bool __started;
- bool __running;
-
- void __startLogging();
- void __stopLogging();
- static const char* __wifiError2Str(int error);
-
- }; /* class WifiLogger */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_PLACE_RECOGNITION_WIFI_LOGGER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule.h"
+
+std::ostream& ctx::operator<<(std::ostream &out, const ctx::AssocRule &rule)
+{
+ return out << rule.antecedent << " => " << rule.consequent
+ << "; support:" << rule.support << "; confidence:" << rule.confidence;
+}
+
+bool ctx::operator==(const ctx::AssocRule& left, const ctx::AssocRule& right)
+{
+ return left.antecedent == right.antecedent &&
+ left.consequent == right.consequent &&
+ left.support == right.support &&
+ left.confidence == right.confidence;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_H_
+#define _PREDICTION_ASSOC_RULE_H_
+
+#include "item_set.h"
+#include <iostream>
+
+namespace ctx {
+
+ struct AssocRule {
+ ItemSet antecedent;
+ ItemSet consequent;
+ double support;
+ double confidence;
+
+ AssocRule(const ItemSet& antecedent_,
+ const ItemSet& consequent_,
+ const double& support_,
+ const double& confidence_)
+ : antecedent(antecedent_)
+ , consequent(consequent_)
+ , support(support_)
+ , confidence(confidence_) {}
+ };
+
+ bool operator==(const AssocRule& left, const AssocRule& right);
+
+ std::ostream& operator<<(std::ostream &out, const AssocRule &rule);
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule_miner.h"
+#include "single_category_item_id_filter.h"
+#include "basket_filter.h"
+#include "basket_compressor.h"
+#include "baskets_agregator.h"
+#include "assoc_rule_producer.h"
+#include "weight_apriori.h"
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_baskets(
+ std::list<ctx::Basket>& initBaskets,
+ ctx::ItemCatalogue& itemCatalogue,
+ double minSupport,
+ double minConfidence,
+ std::string consequentCategory)
+{
+ SingleCategoryItemIdFilter itemIdFilter(consequentCategory, itemCatalogue);
+ BasketFilter::filter_in_place(initBaskets,itemIdFilter);
+
+ std::list<Basket> compressedBaskets = BasketCompressor::compress(initBaskets);
+
+ BasketsAgregator basketsAgregator(compressedBaskets);
+ basketsAgregator.generate_bitsets(itemCatalogue.maxId());
+ auto freqItemSets = WeightApriori::find_frequent_itemid_sets(basketsAgregator, minSupport);
+ auto rulesOfIds = AssocRuleProducer::generate_rules(freqItemSets, itemIdFilter, minConfidence);
+ return remove_assoc_rule_ids(rulesOfIds, itemCatalogue);
+}
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_events(
+ const ctx::EventSet& events,
+ double minSupport,
+ double minConfidence,
+ std::string consequentCategory)
+{
+ ItemCatalogue itemCatalogue;
+
+ BasketProducer basketProducer(itemCatalogue);
+ for (auto& event : events) {
+ basketProducer.put_event(event);
+ }
+
+ std::list<Basket> initBaskets = basketProducer.make_baskets();
+
+ return mine_from_baskets(initBaskets, itemCatalogue, minSupport, minConfidence, consequentCategory);
+}
+
+std::list<ctx::AssocRule> ctx::AssocRuleMiner::remove_assoc_rule_ids(
+ const std::list<ctx::AssocRuleOfIds>& rulesOfIds,
+ const ctx::ItemCatalogue& itemCatalogue)
+{
+ std::list<AssocRule> result;
+ for (const AssocRuleOfIds ruleOfIds : rulesOfIds) {
+ AssocRule rule(remove_assoc_rule_ids(ruleOfIds.antecedent, itemCatalogue),
+ remove_assoc_rule_ids(ruleOfIds.consequent, itemCatalogue),
+ ruleOfIds.support,
+ ruleOfIds.confidence);
+ result.push_back(rule);
+ }
+ return result;
+}
+
+ctx::ItemSet ctx::AssocRuleMiner::remove_assoc_rule_ids(const ctx::ItemIdSet& itemIdSet, const ctx::ItemCatalogue& itemCatalogue)
+{
+ ItemSet itemSet;
+ for (int id : itemIdSet) {
+ itemSet.push_back(itemCatalogue.item_of_id(id));
+ }
+ return itemSet;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_MINER_H_
+#define _PREDICTION_ASSOC_RULE_MINER_H_
+
+#include <list>
+#include <string>
+#include "event_set.h"
+#include "assoc_rule.h"
+#include "assoc_rule_of_ids.h"
+#include "basket_producer.h"
+#include "i_item_id_filter.h"
+
+namespace ctx {
+
+ class AssocRuleMiner {
+
+ public:
+ static std::list<AssocRule> mine_from_events(
+ const EventSet& events,
+ double minSupport,
+ double minConfidence,
+ std::string consequentCategory);
+ static std::list<AssocRule> mine_from_baskets(
+ std::list<Basket>& initBaskets,
+ ItemCatalogue& itemCatalogue,
+ double minSupport,
+ double minConfidence,
+ std::string consequentCategory);
+ private:
+ static std::list<AssocRule> remove_assoc_rule_ids(const std::list<AssocRuleOfIds>& rulesOfIds, const ItemCatalogue& itemCatalogue);
+ static ItemSet remove_assoc_rule_ids(const ItemIdSet& itemIdSet, const ItemCatalogue& itemCatalogue);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_MINER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_OF_IDS_H_
+#define _PREDICTION_ASSOC_RULE_OF_IDS_H_
+
+#include "item_id_set.h"
+
+namespace ctx {
+
+ /* rule of the form antecedent => consequent */
+ class AssocRuleOfIds {
+
+ public:
+ ItemIdSet antecedent;
+ ItemIdSet consequent;
+ double support;
+ double confidence;
+ };
+
+ inline bool operator==(const AssocRuleOfIds& left, const AssocRuleOfIds& right)
+ {
+ return left.support == right.support
+ && left.confidence == right.confidence
+ && left.antecedent == right.antecedent
+ && left.consequent == right.consequent;
+ }
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_OF_IDS_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "assoc_rule_producer.h"
+
+ctx::AssocRuleOfIds ctx::AssocRuleProducer::rule_template(const ctx::ItemIdSet& sourceItemIdSet,
+ const ctx::IItemIdFilter& itemIdFilter)
+{
+ AssocRuleOfIds ruleTempl;
+ for (int itemId : sourceItemIdSet) {
+ ItemIdSet &destination = itemIdFilter.pass(itemId)
+ ? ruleTempl.consequent
+ : ruleTempl.antecedent;
+ destination.push_back(itemId);
+ }
+ return ruleTempl;
+}
+
+std::list<ctx::AssocRuleOfIds> ctx::AssocRuleProducer::generate_rules(
+ const std::list<std::pair<ctx::ItemIdSet, double>>& freqItemIdSets,
+ const ctx::IItemIdFilter& itemIdFilter, double minConfidence)
+{
+ std::list<AssocRuleOfIds> rules;
+
+ for (auto & pair : freqItemIdSets) {
+ ItemIdSet freqItemIdSet = pair.first;
+ double support = pair.second;
+ AssocRuleOfIds rule = AssocRuleProducer::rule_template(freqItemIdSet, itemIdFilter);
+ if (rule.antecedent.size() > 0 && rule.consequent.size() > 0) {
+ rule.support = support;
+ double antecedentSupport = AssocRuleProducer::supportOf(freqItemIdSets, rule.antecedent);
+ rule.confidence = support / antecedentSupport;
+ if (rule.confidence >= minConfidence) {
+ rules.push_back(rule);
+ }
+ }
+ }
+ return rules;
+}
+
+double ctx::AssocRuleProducer::supportOf(
+ const std::list<std::pair<ctx::ItemIdSet, double>> &allFreqItemIdSets, const ctx::ItemIdSet &wanted)
+{
+ for (auto & pair : allFreqItemIdSets) {
+ if (pair.first == wanted) {
+ return pair.second;
+ }
+ }
+ return 0.0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ASSOC_RULE_PRODUCER_H_
+#define _PREDICTION_ASSOC_RULE_PRODUCER_H_
+
+#include "assoc_rule_of_ids.h"
+#include "basket.h"
+#include "i_item_id_filter.h"
+#include <list>
+
+namespace ctx {
+
+ class AssocRuleProducer {
+
+ public:
+ static std::list<AssocRuleOfIds> generate_rules(
+ const std::list<std::pair<ItemIdSet,double>> &freqItemIdSets,
+ const IItemIdFilter &itemIdFilter,
+ double minConfidence);
+
+ static AssocRuleOfIds rule_template(const ItemIdSet &sourceItemIdSet, const IItemIdFilter &antecedentItemIdFilter);
+
+ private:
+ static double supportOf(const std::list<std::pair<ItemIdSet,double>> &allFreqItemIdSets, const ItemIdSet &wanted);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ASSOC_RULE_PRODUCER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket.h"
+
+void ctx::Basket::compute_bitset(int maxId)
+{
+ mBitSet.resize(maxId+1, false);
+ for (int itemId : itemIdSet) {
+ mBitSet[itemId] = true;
+ }
+}
+
+bool ctx::Basket::includes(const ctx::ItemIdSet& potentialSubset)
+{
+ for (int itemId : potentialSubset) {
+ if (!mBitSet[itemId]) {
+ return false;
+ }
+ }
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_H_
+#define _PREDICTION_BASKET_H_
+
+#include "item_id_set.h"
+#include <vector>
+
+namespace ctx {
+
+ class Basket {
+
+ public:
+ ItemIdSet itemIdSet;
+ int weight;
+
+ Basket(const ItemIdSet& itemIdSet_, const int& weight_) : itemIdSet(itemIdSet_), weight(weight_) {};
+ void compute_bitset(int maxId);
+ bool includes(const ItemIdSet& potentialSubset); // compute_bitset() should be invoked first
+
+ private:
+ std::vector<bool> mBitSet;
+
+ };
+
+ // TODO If there is no "inline" below the project does not compile.
+ inline bool operator==(const Basket& left, const Basket& right)
+ {
+ return left.weight == right.weight && left.itemIdSet == right.itemIdSet;
+ }
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_compressor.h"
+#include <sstream>
+#include <map>
+
+std::string ctx::BasketCompressor::itemset_string(const ctx::ItemIdSet& itemIdSet)
+{
+ std::stringstream ss;
+ for (int itemId : itemIdSet) {
+ ss << itemId << ',';
+ }
+ return ss.str();
+}
+
+std::list<ctx::Basket> ctx::BasketCompressor::compress(const std::list<ctx::Basket>& inputBaskets)
+{
+ std::map<std::string,Basket> basketsMap;
+ // TODO: maybe it is worth to resign from string keys and use std::map<ItemSet,weight> instead.
+
+ for (const Basket& basket : inputBaskets) {
+ std::string itemSetStr = itemset_string(basket.itemIdSet);
+
+ auto findResult = basketsMap.find(itemSetStr);
+ if (findResult == basketsMap.end()) {
+ basketsMap.insert(std::pair<std::string,Basket>(itemSetStr, basket));
+ } else {
+ Basket& compressedBasket = findResult->second;
+ compressedBasket.weight += basket.weight;
+ }
+ }
+
+ std::list<Basket> compressedBaskets;
+ for (auto pair : basketsMap) {
+ compressedBaskets.push_back(pair.second);
+ }
+ return compressedBaskets;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_COMPRESSOR_H_
+#define _PREDICTION_BASKET_COMPRESSOR_H_
+
+#include <list>
+#include <string>
+#include "basket.h"
+
+namespace ctx {
+
+ class BasketCompressor {
+
+ public:
+ static std::list<Basket> compress(const std::list<Basket> &inputBaskets);
+
+ private:
+ static std::string itemset_string(const ItemIdSet &itemIdSet);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_COMPRESSOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_filter.h"
+
+void ctx::BasketFilter::filter_in_place(std::list<ctx::Basket>& baskets, const ctx::IItemIdFilter& itemIdFilter)
+{
+ baskets.remove_if([&itemIdFilter] (Basket &basket) -> bool { return !BasketPass(basket, itemIdFilter); });
+}
+
+bool ctx::BasketFilter::BasketPass(const ctx::Basket& basket, const ctx::IItemIdFilter& itemIdFilter)
+{
+ for (int itemId : basket.itemIdSet) {
+ if (itemIdFilter.pass(itemId)) {
+ return true;
+ }
+ }
+ return false;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_FILTER_H_
+#define _PREDICTION_BASKET_FILTER_H_
+
+#include "basket.h"
+#include "i_item_id_filter.h"
+#include <list>
+
+namespace ctx {
+
+ class BasketFilter {
+
+ public:
+ static void filter_in_place(std::list<Basket> &inputBaskets, const IItemIdFilter &itemIdFilter);
+
+ private:
+ static bool BasketPass(const Basket &basket, const IItemIdFilter &itemIdFilter);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_FILTER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "basket_producer.h"
+#include <set>
+
+void ctx::BasketProducer::put_event(const ctx::Event& event)
+{
+ int iid = mItemCatalogue.id_of(event.item);
+ put_change(event.interval.start, iid); // positive value indicates start
+ put_change(event.interval.end, -iid); // negative value indicates end
+}
+
+std::list<ctx::Basket> ctx::BasketProducer::make_baskets()
+{
+ std::list<Basket> baskets;
+
+ time_t intervalStart;
+ std::set<int> currentItemIds;
+
+ bool first = true;
+ for (auto changePair : mChanges) {
+ if (first) {
+ first = false;
+ } else {
+ time_t intervalEnd = changePair.first;
+ int weight = intervalEnd - intervalStart;
+ ItemIdSet itemIdSet;
+ for (int itemId : currentItemIds) {
+ itemIdSet.push_back(itemId);
+ }
+ baskets.push_back(Basket(itemIdSet, weight));
+ }
+
+ for (int itemId : changePair.second) {
+ if (itemId > 0) { // item with itemId starts now
+ currentItemIds.insert(itemId);
+ } else { // item with -itemId ends now
+ currentItemIds.erase(-itemId);
+ }
+ }
+
+ intervalStart = changePair.first;
+ }
+
+ return baskets;
+}
+
+void ctx::BasketProducer::put_change(time_t time, int value)
+{
+ if (mChanges.find(time) == mChanges.end()) {
+ mChanges[time] = std::list<int>();
+ }
+ mChanges[time].push_back(value);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKET_PRODUCER_H_
+#define _PREDICTION_BASKET_PRODUCER_H_
+
+#include "event.h"
+#include "basket.h"
+#include "item_catalogue.h"
+#include <list>
+
+namespace ctx {
+
+ class BasketProducer {
+
+ public:
+ BasketProducer(ItemCatalogue& itemCatalogue) : mItemCatalogue(itemCatalogue) {};
+ void put_event(const Event& e);
+ std::list<Basket> make_baskets();
+
+ private:
+ void put_change(time_t time, int value);
+
+ ItemCatalogue& mItemCatalogue;
+
+ /*
+ * Changes in timestamps.
+ * If an item starts than its id is stored.
+ * If an item ends than its negated id is stored.
+ */
+ std::map<time_t, std::list<int>> mChanges;
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_BASKET_PRODUCER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "baskets_agregator.h"
+
+ctx::BasketsAgregator::BasketsAgregator(std::list<ctx::Basket>& baskets) : mBaskets(baskets)
+{
+}
+
+ctx::ItemIdSet ctx::BasketsAgregator::unique_item_ids()
+{
+ ItemIdSet allItemIds;
+ for (const Basket& basket : mBaskets) {
+ for (int itemId : basket.itemIdSet) {
+ allItemIds.push_back(itemId);
+ }
+ }
+ allItemIds.sort();
+ allItemIds.unique();
+ return allItemIds;
+}
+
+void ctx::BasketsAgregator::generate_bitsets(int maxId)
+{
+ for (Basket& basket : mBaskets) {
+ basket.compute_bitset(maxId);
+ }
+}
+
+double ctx::BasketsAgregator::supportOf(const ctx::ItemIdSet& itemIdSet)
+{
+ int matchedCount = 0;
+ int unmatchedCount = 0;
+ for (Basket& basket : mBaskets) {
+ if (basket.includes(itemIdSet)) {
+ matchedCount += basket.weight;
+ } else {
+ unmatchedCount += basket.weight;
+ }
+ }
+ return (double) matchedCount / (double) (matchedCount + unmatchedCount);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_BASKETS_AGREGATOR_H_
+#define _PREDICTION_BASKETS_AGREGATOR_H_
+
+#include <list>
+#include <memory>
+#include "basket.h"
+
+namespace ctx {
+
+ class BasketsAgregator {
+
+ public:
+ BasketsAgregator(std::list<Basket>& baskets);
+ void generate_bitsets(int maxId);
+ ItemIdSet unique_item_ids();
+ double supportOf(const ItemIdSet &itemIdSet);
+
+ private:
+ std::list<Basket>& mBaskets;
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_BASKETS_AGREGATOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "event.h"
+
+bool ctx::operator==(const ctx::Event& left, const ctx::Event& right)
+{
+ return left.item == right.item && left.interval == right.interval;
+}
+
+bool ctx::operator!=(const ctx::Event& left, const ctx::Event& right)
+{
+ return !(left == right);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_EVENT_H_
+#define _PREDICTION_EVENT_H_
+
+#include "item.h"
+#include "interval.h"
+
+namespace ctx {
+
+ struct Event {
+ Item item;
+ Interval interval;
+
+ /* long time event */
+ Event(const Item& item_, const Interval& interval_) : item(item_), interval(interval_) {}
+
+ /* instant event */
+ Event(const Item& item_, const time_t& start_time_) : item(item_), interval(start_time_, start_time_ + 1) {}
+ };
+
+ bool operator==(const Event& left, const Event& right);
+ bool operator!=(const Event& left, const Event& right);
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_EVENT_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_EVENT_SET_H_
+#define _PREDICTION_EVENT_SET_H_
+
+#include "event.h"
+
+namespace ctx {
+
+ typedef std::list<Event> EventSet;
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_EVENT_SET_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_I_ITEM_ID_FILTER_H_
+#define _PREDICTION_I_ITEM_ID_FILTER_H_
+
+namespace ctx {
+
+ class IItemIdFilter {
+
+ public:
+ virtual ~IItemIdFilter() {}
+ virtual bool pass(int itemId) const = 0;
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_I_ITEM_ID_FILTER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "interval.h"
+
+bool ctx::operator==(const Interval& left, const Interval& right)
+{
+ return left.start == right.start && left.end == right.end;
+}
+
+bool ctx::operator!=(const Interval& left, const Interval& right)
+{
+ return !(left == right);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_INTERVAL_H_
+#define _PREDICTION_INTERVAL_H_
+
+#include <ctime>
+
+namespace ctx {
+
+ struct Interval {
+ time_t start;
+ time_t end;
+
+ Interval(time_t start_, time_t end_) : start(start_), end(end_) {}
+ };
+
+ bool operator==(const Interval& left, const Interval& right);
+ bool operator!=(const Interval& left, const Interval& right);
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_INTERVAL_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item.h"
+
+ctx::Item::Item(const std::string &s)
+{
+ size_t leftBracket = s.find('[');
+ size_t rightBracket = s.find(']', leftBracket);
+ category = s.substr(leftBracket + 1, rightBracket - 1);
+ value = s.substr(rightBracket + 1);
+ return;
+}
+
+bool ctx::Item::operator==(const ctx::Item& other) const
+{
+ return other.category == category && other.value == value;
+}
+
+bool ctx::Item::operator!=(const ctx::Item& other) const
+{
+ return !operator==(other);
+}
+
+std::ostream& ctx::operator<<(std::ostream& out, const ctx::Item& item)
+{
+ return out << '[' << item.category << ']' << item.value;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_H_
+#define _PREDICTION_ITEM_H_
+
+#include <string>
+#include <iostream>
+
+namespace ctx {
+
+ struct Item {
+ std::string category;
+ std::string value;
+
+ Item(const std::string &category_, const std::string &value_) : category(category_), value(value_) {}
+ Item(const std::string &s); // in the form of "[Category]Value"
+
+ bool operator==(const Item& other) const;
+ bool operator!=(const Item& other) const;
+ };
+
+ std::ostream& operator<<(std::ostream& out, const Item& item);
+
+} /* namespace ctx */
+
+namespace std {
+
+ template <> struct hash<ctx::Item> {
+ size_t operator()(const ctx::Item &item) const {
+ hash<std::string> hasher;
+ return hasher(item.category + ":" + item.value);
+ }
+ };
+
+}
+
+#endif /* _PREDICTION_ITEM_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_catalogue.h"
+#include "item_string_converter.h"
+
+int ctx::ItemCatalogue::id_of(const ctx::Item& item)
+{
+ std::string s = ItemStringConverter::item_to_string(item);
+ std::map<std::string,int>::iterator it = mItemIdsOfStrings.find(s);
+ if (it == mItemIdsOfStrings.end()) { // new item
+ mMaxId++;
+ mItemIdsOfStrings[s] = mMaxId;
+ mItemStrings.push_back(s);
+ extendCategoryItemIds(item.category, mMaxId);
+ return mMaxId;
+ } else { // existing item
+ return mItemIdsOfStrings[s];
+ }
+}
+
+bool ctx::ItemCatalogue::exists_item_of_id(int id) const
+{
+ return id > 0 && id <= mMaxId;
+}
+
+ctx::Item ctx::ItemCatalogue::item_of_id(int id) const
+{
+ return ItemStringConverter::string_to_item(mItemStrings[id]);
+}
+
+std::set<int> ctx::ItemCatalogue::category_item_ids(std::string category) const
+{
+ auto it = mCategoryItemIds.find(category);
+ if (it == mCategoryItemIds.end()) {
+ return std::set<int>();
+ } else {
+ return it->second;
+ }
+}
+
+void ctx::ItemCatalogue::extendCategoryItemIds(std::string category, int itemId)
+{
+ if (mCategoryItemIds.find(category) == mCategoryItemIds.end()) {
+ mCategoryItemIds[category] = std::set<int>();
+ }
+ mCategoryItemIds[category].insert(itemId);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_CATALOGUE_H_
+#define _PREDICTION_ITEM_CATALOGUE_H_
+
+#include "item.h"
+#include <map>
+#include <set>
+#include <vector>
+
+namespace ctx {
+
+ class ItemCatalogue {
+
+ public:
+ ItemCatalogue() : mMaxId(0) {
+ mItemStrings.push_back(std::string(""));
+ }
+
+ int id_of(Item const &item);
+
+ bool exists_item_of_id(int id) const;
+ Item item_of_id(int id) const;
+ std::set<int> category_item_ids(std::string category) const;
+ int maxId() const {return mMaxId;};
+
+ private:
+ /* Translates item string to its id */
+ std::map<std::string,int> mItemIdsOfStrings;
+
+ /* Translating category string to int */
+ std::map<std::string,std::set<int>> mCategoryItemIds;
+
+ /* Stores item strings (index is item's id) */
+ std::vector<std::string> mItemStrings;
+
+ /* Preserves maximal item's id */
+ int mMaxId;
+
+ void extendCategoryItemIds(std::string category, int itemId);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_CATALOGUE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_ID_SET_H_
+#define _PREDICTION_ITEM_ID_SET_H_
+
+#include <list>
+
+namespace ctx {
+
+ /* A set storing item ids */
+ typedef std::list<int> ItemIdSet;
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_ID_SET_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_set.h"
+#include <algorithm>
+
+std::ostream& ctx::operator<<(std::ostream& out, const ctx::ItemSet& itemSet)
+{
+ bool first = true;
+ for (auto& item : itemSet) {
+ if (first) {
+ first = false;
+ } else {
+ out << ", ";
+ }
+ out << item;
+ }
+ return out;
+}
+
+bool ctx::itemset_includes_in(const ctx::ItemSet& small, const ctx::ItemSet& big)
+{
+ for (const Item& s : small) {
+ if (std::find(big.begin(), big.end(), s) == big.end())
+ return false;
+ }
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_SET_H_
+#define _PREDICTION_ITEM_SET_H_
+
+#include <list>
+#include "item.h"
+
+namespace ctx {
+
+ /* A set storing item ids */
+ typedef std::list<Item> ItemSet;
+
+ std::ostream& operator<<(std::ostream& out, const ItemSet& itemSet);
+
+ bool itemset_includes_in(const ItemSet& small, const ItemSet& big);
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_SET_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "item_string_converter.h"
+#include <string>
+
+std::string ctx::ItemStringConverter::item_to_string(const ctx::Item &item)
+{
+ return item.category + SEPARATOR + item.value;
+}
+
+ctx::Item ctx::ItemStringConverter::string_to_item(const std::string& s)
+{
+ size_t pos = s.find(SEPARATOR);
+ //assert(pos != std::string::npos);
+ return Item(s.substr(0, pos), s.substr(pos + 1));
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_ITEM_STRING_CONVERTER_H_
+#define _PREDICTION_ITEM_STRING_CONVERTER_H_
+
+#include "item.h"
+
+namespace ctx {
+
+ class ItemStringConverter {
+
+ public:
+ static const char SEPARATOR = ':';
+ static std::string item_to_string(const Item &item);
+ static Item string_to_item(const std::string& s);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_ITEM_STRING_CONVERTER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "single_category_item_id_filter.h"
+
+ctx::SingleCategoryItemIdFilter::SingleCategoryItemIdFilter(std::string category, const ctx::ItemCatalogue &itemCatalogue)
+{
+ mAcceptedItemIds = itemCatalogue.category_item_ids(category);
+}
+
+bool ctx::SingleCategoryItemIdFilter::pass(int itemId) const
+{
+ return mAcceptedItemIds.find(itemId) != mAcceptedItemIds.end();
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
+#define _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
+
+#include "i_item_id_filter.h"
+#include "item_catalogue.h"
+
+namespace ctx {
+
+ class SingleCategoryItemIdFilter : public IItemIdFilter {
+
+ public:
+ SingleCategoryItemIdFilter(std::string category, const ItemCatalogue& itemCatalogue);
+ bool pass(int itemId) const override;
+
+ private:
+ std::set<int> mAcceptedItemIds;
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "weight_apriori.h"
+#include <algorithm>
+#include <iostream>
+
+std::list<ctx::ItemIdSet> ctx::WeightApriori::find_wider_candidates(const std::list<ctx::ItemIdSet> &narrowFreqSets, int widerSize)
+{
+ std::list<ItemIdSet> candidates;
+ for (auto iter1 = narrowFreqSets.begin(); iter1 != narrowFreqSets.end(); ++iter1) {
+ auto iter2 = iter1; ++iter2;
+ for (;iter2 != narrowFreqSets.end(); ++iter2) {
+ ItemIdSet itemIdSet1 = *iter1;
+ ItemIdSet itemIdSet2 = *iter2;
+ itemIdSet1.merge(itemIdSet2);
+ itemIdSet1.unique();
+ if (int(itemIdSet1.size()) == widerSize) {
+ candidates.push_back(itemIdSet1);
+ }
+ }
+ }
+ candidates.sort();
+ candidates.unique();
+ return candidates;
+}
+
+void ctx::WeightApriori::prune_wider_candidates(std::list<ctx::ItemIdSet>& widerCandidates, const std::list<ctx::ItemIdSet>& narrowFreqSets)
+{
+ std::list<ItemIdSet> pruned;
+ for (auto iter = widerCandidates.begin(); iter != widerCandidates.end();) {
+ if (survives_prunning(*iter, narrowFreqSets)) {
+ ++iter;
+ } else {
+ iter = widerCandidates.erase(iter);
+ }
+ }
+}
+
+bool ctx::WeightApriori::survives_prunning(ctx::ItemIdSet& widerCandidate, const std::list<ctx::ItemIdSet>& narrowFreqSets)
+{
+ int removedItemId = widerCandidate.front();
+ widerCandidate.pop_front();
+ for (auto iter = widerCandidate.begin();; ++iter) {
+ if (std::find(narrowFreqSets.begin(), narrowFreqSets.end(), widerCandidate) == narrowFreqSets.end()) {
+ return false; // Caution: In this case the original contents of widerCandidate is not preserved.
+ }
+ if (iter == widerCandidate.end()) {
+ widerCandidate.push_back(removedItemId); // Restoring original contents of widerCandidate.
+ return true;
+ }
+ int newRemovedItemId = *iter;
+ *iter = removedItemId;
+ removedItemId = newRemovedItemId;
+ }
+}
+
+std::list<std::pair<ctx::ItemIdSet, double>> ctx::WeightApriori::find_frequent_itemid_sets(ctx::BasketsAgregator &basketAgregator, double supportThreshold)
+{
+ std::list<std::pair<ItemIdSet, double>> allFreqItemsets;
+ std::list<ItemIdSet> freqItemsetsOfCurrSize;
+ std::list<ItemIdSet> candidates;
+
+ int candidateSize = 1;
+ candidates = single_size_candidates(basketAgregator);
+
+ while (!candidates.empty()) {
+ for (ItemIdSet candidate : candidates) {
+ double support = basketAgregator.supportOf(candidate);
+ if (support >= supportThreshold) {
+ freqItemsetsOfCurrSize.push_back(candidate);
+ allFreqItemsets.push_back(std::make_pair(candidate,support));
+ }
+ }
+ candidates = find_wider_candidates(freqItemsetsOfCurrSize, ++candidateSize);
+ freqItemsetsOfCurrSize.clear();
+ }
+ return allFreqItemsets;
+}
+
+std::list<ctx::ItemIdSet> ctx::WeightApriori::single_size_candidates(ctx::BasketsAgregator& basketAgregator)
+{
+ std::list<ItemIdSet> candidates;
+ for (int itemId : basketAgregator.unique_item_ids()) {
+ candidates.push_back({itemId});
+ }
+ return candidates;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PREDICTION_WEIGHT_APRIORI_H_
+#define _PREDICTION_WEIGHT_APRIORI_H_
+
+#include "baskets_agregator.h"
+#include <list>
+#include <utility>
+
+namespace ctx {
+
+ class WeightApriori {
+
+ public:
+ static std::list<ItemIdSet> find_wider_candidates(const std::list<ItemIdSet> &narrowFreqSets, int widerSize);
+ static void prune_wider_candidates(std::list<ItemIdSet> &widerCandidates, const std::list<ItemIdSet> &narrowFreqSets);
+
+ static bool survives_prunning(ItemIdSet &widerCandidate, const std::list<ItemIdSet> &narrowFreqSets);
+
+ /* Find frequent itemsets along with its support value. */
+ static std::list<std::pair<ItemIdSet,double>> find_frequent_itemid_sets(BasketsAgregator &basketAgregator, double supportThreshold);
+
+ private:
+ static std::list<ItemIdSet> single_size_candidates(BasketsAgregator &basketAgregator);
+
+ };
+
+} /* namespace ctx */
+
+#endif /* _PREDICTION_WEIGHT_APRIORI_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_COMMON_TYPES_H_
+#define _CONTEXT_STATS_COMMON_TYPES_H_
+
+#define LOG_RETENTION_PERIOD 7776000 /* 90 days in secs */
+
+#define DEFAULT_TIMESPAN 30
+#define DEFAULT_LIMIT 10
+
+#define STATS_QUERY_RESULT "QueryResult"
+#define STATS_RESULT_SIZE "ResultSize"
+#define STATS_COL_ROW_ID "rowId"
+
+#define STATS_TIMESPAN "TimeSpan"
+#define STATS_START_TIME "StartTime"
+#define STATS_END_TIME "EndTime"
+#define STATS_LAST_TIME "LastTime"
+#define STATS_TOTAL_COUNT "TotalCount"
+#define STATS_AVERAGE_COUNT "AvgCount"
+#define STATS_DURATION "Duration"
+#define STATS_TOTAL_DURATION "TotalDuration"
+#define STATS_DAY_OF_WEEK "DayOfWeek"
+#define STATS_HOUR_OF_DAY "HourOfDay"
+#define STATS_TIME_OF_DAY "TimeOfDay"
+#define STATS_TOTAL_COUNT "TotalCount"
+#define STATS_APP_ID "AppId"
+#define STATS_PKG_ID "PkgId"
+#define STATS_AUDIO_JACK "AudioJack"
+#define STATS_SYSTEM_VOLUME "SystemVolume"
+#define STATS_MEDIA_VOLUME "MediaVolume"
+#define STATS_BSSID "BSSID"
+#define STATS_UNIV_TIME "UTC"
+#define STATS_LOCAL_TIME "LocalTime"
+#define STATS_RANK "Rank"
+
+#define STATS_SUN "Sun"
+#define STATS_MON "Mon"
+#define STATS_TUE "Tue"
+#define STATS_WED "Wed"
+#define STATS_THU "Thu"
+#define STATS_FRI "Fri"
+#define STATS_SAT "Sat"
+#define STATS_WEEKDAY "Weekday"
+#define STATS_WEEKEND "Weekend"
+
+enum StatsDayOfWeek_e {
+ STATS_DAY_OF_WEEK_WEEKDAY = 1,
+ STATS_DAY_OF_WEEK_WEEKEND,
+ STATS_DAY_OF_WEEK_ALL,
+ STATS_DAY_OF_WEEK_SUN,
+ STATS_DAY_OF_WEEK_MON,
+ STATS_DAY_OF_WEEK_TUE,
+ STATS_DAY_OF_WEEK_WED,
+ STATS_DAY_OF_WEEK_THU,
+ STATS_DAY_OF_WEEK_FRI,
+ STATS_DAY_OF_WEEK_SAT,
+};
+
+#define TRIG_DEF_RANK "\"Rank\":{\"type\":\"integer\",\"min\":1}"
+#define TRIG_DEF_TOTAL_COUNT "\"TotalCount\":{\"type\":\"integer\",\"min\":0}"
+#define TRIG_DEF_TIME_OF_DAY "\"TimeOfDay\":{\"type\":\"string\"}"
+#define TRIG_DEF_DAY_OF_WEEK "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
+
+#endif /* End of _CONTEXT_STATS_COMMMON_TYPES_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Types.h>
+#include "CommonTypes.h"
+#include "DbHandleBase.h"
+
+#define DAY_OF_WEEK(SECOND) "CAST(strftime('%w', " SECOND ", 'unixepoch') AS INTEGER)"
+#define HOUR_OF_DAY(SECOND) "CAST(strftime('%H', " SECOND ", 'unixepoch') AS INTEGER)"
+
+using namespace ctx;
+
+StatsDbHandleBase::StatsDbHandleBase(ContextProvider *provider) :
+ isTriggerItem(false),
+ reqProvider(provider)
+{
+}
+
+StatsDbHandleBase::~StatsDbHandleBase()
+{
+}
+
+int StatsDbHandleBase::generateQid()
+{
+ static int qid = 0;
+
+ if (qid++ < 0) qid = 1;
+ return qid;
+}
+
+bool StatsDbHandleBase::executeQuery(Json filter, const char* query)
+{
+ bool ret = __dbManager.execute(generateQid(), query, this);
+ IF_FAIL_RETURN(ret, false);
+
+ reqFilter = filter;
+
+ return true;
+}
+
+std::string StatsDbHandleBase::createWhereClause(Json filter)
+{
+ std::stringstream whereClause;
+ int week = 0;
+ int start = 0;
+ int end = 0;
+ int timespan = DEFAULT_TIMESPAN;
+ std::string appId;
+ std::string weekStr;
+ std::string timeOfDay;
+
+ if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr)) {
+ // In case of string (from Trigger)
+ if (weekStr == STATS_WEEKDAY) {
+ week = STATS_DAY_OF_WEEK_WEEKDAY;
+
+ } else if (weekStr == STATS_WEEKEND) {
+ week = STATS_DAY_OF_WEEK_WEEKEND;
+
+ } else if (weekStr == STATS_SUN) {
+ week = STATS_DAY_OF_WEEK_SUN;
+
+ } else if (weekStr == STATS_MON) {
+ week = STATS_DAY_OF_WEEK_MON;
+
+ } else if (weekStr == STATS_TUE) {
+ week = STATS_DAY_OF_WEEK_TUE;
+
+ } else if (weekStr == STATS_WED) {
+ week = STATS_DAY_OF_WEEK_WED;
+
+ } else if (weekStr == STATS_THU) {
+ week = STATS_DAY_OF_WEEK_THU;
+
+ } else if (weekStr == STATS_FRI) {
+ week = STATS_DAY_OF_WEEK_FRI;
+
+ } else if (weekStr == STATS_SAT) {
+ week = STATS_DAY_OF_WEEK_SAT;
+ }
+ } else {
+ // In case of integer (from History)
+ filter.get(NULL, STATS_DAY_OF_WEEK, &week);
+ }
+
+ switch(week) {
+ case STATS_DAY_OF_WEEK_WEEKDAY:
+ whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " > 0 AND " DAY_OF_WEEK(STATS_LOCAL_TIME) " < 6) AND ";
+ break;
+ case STATS_DAY_OF_WEEK_WEEKEND:
+ whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " = 0 OR " DAY_OF_WEEK(STATS_LOCAL_TIME) " = 6) AND ";
+ break;
+ case STATS_DAY_OF_WEEK_SUN:
+ case STATS_DAY_OF_WEEK_MON:
+ case STATS_DAY_OF_WEEK_TUE:
+ case STATS_DAY_OF_WEEK_WED:
+ case STATS_DAY_OF_WEEK_THU:
+ case STATS_DAY_OF_WEEK_FRI:
+ case STATS_DAY_OF_WEEK_SAT:
+ whereClause << DAY_OF_WEEK(STATS_LOCAL_TIME) " = " << week - STATS_DAY_OF_WEEK_SUN << " AND ";
+ break;
+ default:
+ break;
+ }
+
+ if (filter.get(NULL, STATS_APP_ID, &appId))
+ whereClause << STATS_APP_ID " = '" << appId << "' AND ";
+
+ if (filter.get(NULL, STATS_START_TIME, &start))
+ whereClause << STATS_UNIV_TIME " >= " << start << " AND ";
+
+ if (filter.get(NULL, STATS_END_TIME, &end))
+ whereClause << STATS_UNIV_TIME " <= " << end << " AND ";
+
+ if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay)) {
+ size_t pivot = timeOfDay.find('-');
+ if (pivot != std::string::npos) {
+ std::string from = timeOfDay.substr(0, pivot);
+ std::string to = timeOfDay.substr(pivot + 1);
+ whereClause << "(" HOUR_OF_DAY(STATS_LOCAL_TIME) " >= " << from \
+ << " AND " HOUR_OF_DAY(STATS_LOCAL_TIME) " < " << to << ") AND ";
+ }
+ }
+
+ filter.get(NULL, STATS_TIMESPAN, ×pan);
+ whereClause << STATS_UNIV_TIME " > strftime('%s', 'now', '-" << timespan <<" day')";
+
+ return whereClause.str();
+}
+
+std::string StatsDbHandleBase::createSqlPeakTime(Json filter, const char* tableName, std::string whereClause)
+{
+ std::stringstream query;
+ int limit = DEFAULT_LIMIT;
+
+ filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+ query <<
+ "SELECT " \
+ HOUR_OF_DAY(STATS_LOCAL_TIME) " AS " STATS_HOUR_OF_DAY ", COUNT(*) AS " STATS_TOTAL_COUNT \
+ " FROM " << tableName << \
+ " WHERE " << whereClause << \
+ " GROUP BY " HOUR_OF_DAY(STATS_LOCAL_TIME) \
+ " ORDER BY " STATS_TOTAL_COUNT " DESC" \
+ " LIMIT " << limit;
+
+ return query.str();
+}
+
+std::string StatsDbHandleBase::createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause)
+{
+ std::stringstream query;
+
+ query <<
+ "SELECT ( SELECT " STATS_AUDIO_JACK \
+ " FROM " << tableName << \
+ " WHERE " << whereClause << \
+ " GROUP BY " STATS_AUDIO_JACK \
+ " ORDER BY count(" STATS_AUDIO_JACK ") DESC" \
+ " LIMIT 1 ) AS " STATS_AUDIO_JACK \
+ ", ( SELECT " STATS_SYSTEM_VOLUME \
+ " FROM " << tableName << \
+ " WHERE " << whereClause << \
+ " GROUP BY " STATS_SYSTEM_VOLUME \
+ " ORDER BY count(" STATS_SYSTEM_VOLUME ") DESC" \
+ " LIMIT 1 ) AS " STATS_SYSTEM_VOLUME \
+ ", ( SELECT " STATS_MEDIA_VOLUME \
+ " FROM " << tableName << \
+ " WHERE " << whereClause << \
+ " GROUP BY " STATS_MEDIA_VOLUME \
+ " ORDER BY count(" STATS_MEDIA_VOLUME ") DESC" \
+ " LIMIT 1 ) AS " STATS_MEDIA_VOLUME;
+
+ return query.str();
+}
+
+void StatsDbHandleBase::onTableCreated(unsigned int queryId, int error)
+{
+}
+
+void StatsDbHandleBase::onInserted(unsigned int queryId, int error, int64_t rowId)
+{
+ delete this;
+}
+
+void StatsDbHandleBase::__jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult)
+{
+ std::vector<Json>::iterator vecJsonEnd = vecJson.end();
+
+ for(auto vecJsonPos = vecJson.begin(); vecJsonPos != vecJsonEnd; ++vecJsonPos) {
+ Json originJson = *vecJsonPos;
+ jsonResult.append(NULL, STATS_QUERY_RESULT, originJson);
+ }
+}
+
+void StatsDbHandleBase::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+ if (isTriggerItem) {
+ if (records.size() == 1) {
+ replyTriggerItem(error, records[0]);
+ } else {
+ _E("Invalid query result");
+ Json dummy;
+ reqProvider->replyToRead(reqFilter, ERR_OPERATION_FAILED, dummy);
+ }
+ } else {
+ Json results = "{\"" STATS_QUERY_RESULT "\":[]}";
+ __jsonVectorToArray(records, results);
+ reqProvider->replyToRead(reqFilter, error, results);
+ }
+
+ delete this;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_DB_HANDLE_BASE_H_
+#define _CONTEXT_STATS_DB_HANDLE_BASE_H_
+
+#include <string>
+#include <ContextProvider.h>
+#include <DatabaseManager.h>
+
+namespace ctx {
+ class StatsDbHandleBase : public IDatabaseListener {
+ protected:
+ bool isTriggerItem;
+ ContextProvider *reqProvider;
+ Json reqFilter;
+
+ StatsDbHandleBase(ContextProvider *provider);
+ ~StatsDbHandleBase();
+
+ std::string createWhereClause(Json filter);
+ std::string createSqlPeakTime(Json filter, const char* tableName, std::string whereClause);
+ std::string createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause);
+
+ bool executeQuery(Json filter, const char* query);
+ virtual void replyTriggerItem(int error, Json &jsonResult) = 0;
+ static int generateQid();
+
+ private:
+ void __jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult);
+
+ void onTableCreated(unsigned int queryId, int error);
+ void onInserted(unsigned int queryId, int error, int64_t rowId);
+ void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+
+ DatabaseManager __dbManager;
+ };
+}
+
+#endif /* End of _CONTEXT_STATS_DB_HANDLE_BASE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <DeviceContextProvider.h>
+
+#include "../time/Alarm.h"
+#include "../time/Time.h"
+#include "../activity/Activity.h"
+#include "../headphone/Headphone.h"
+#include "../system/Battery.h"
+#include "../system/Charger.h"
+#include "../system/Gps.h"
+#include "../system/Psmode.h"
+#include "../system/Usb.h"
+#include "../wifi/Wifi.h"
+
+#ifdef _MOBILE_
+#include "../call/Call.h"
+#include "../contacts/Contacts.h"
+#include "../email/Email.h"
+#include "../message/Message.h"
+#endif
+
+#define PRIV_NETWORK "network.get"
+#define PRIV_TELEPHONY "telephony"
+#define PRIV_MESSAGE "message.read"
+#define PRIV_CONTACT "contact.read"
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+ Provider *provider = new(std::nothrow) Provider();
+ IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+ if (!provider->isSupported()) {
+ delete provider;
+ return;
+ }
+
+ provider->registerProvider(privilege, provider);
+ provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initDeviceContextProvider()
+{
+ registerProvider<DeviceStatusAlarm>(DEVICE_ST_SUBJ_ALARM, NULL);
+ registerProvider<DeviceStatusTime>(DEVICE_ST_SUBJ_TIME, NULL);
+
+ registerProvider<DeviceStatusWifi>(DEVICE_ST_SUBJ_WIFI, PRIV_NETWORK);
+ registerProvider<DeviceStatusHeadphone>(DEVICE_ST_SUBJ_HEADPHONE, NULL);
+
+ registerProvider<DeviceStatusCharger>(DEVICE_ST_SUBJ_CHARGER, NULL);
+ registerProvider<DeviceStatusGps>(DEVICE_ST_SUBJ_GPS, NULL);
+ registerProvider<DeviceStatusUsb>(DEVICE_ST_SUBJ_USB, NULL);
+ registerProvider<DeviceStatusBattery>(DEVICE_ST_SUBJ_BATTERY, NULL);
+ registerProvider<DeviceStatusPsmode>(DEVICE_ST_SUBJ_PSMODE, NULL);
+
+ registerProvider<UserActivityStationary>(USER_ACT_SUBJ_STATIONARY, NULL);
+ registerProvider<UserActivityWalking>(USER_ACT_SUBJ_WALKING, NULL);
+ registerProvider<UserActivityRunning>(USER_ACT_SUBJ_RUNNING, NULL);
+ registerProvider<UserActivityInVehicle>(USER_ACT_SUBJ_IN_VEHICLE, NULL);
+
+#ifdef _MOBILE_
+ registerProvider<SocialStatusCall>(SOCIAL_ST_SUBJ_CALL, PRIV_TELEPHONY);
+ registerProvider<SocialStatusEmail>(SOCIAL_ST_SUBJ_EMAIL, NULL);
+ registerProvider<SocialStatusMessage>(SOCIAL_ST_SUBJ_MESSAGE, PRIV_MESSAGE);
+ registerProvider<SocialStatusContacts>(SOCIAL_ST_SUBJ_CONTACTS, PRIV_CONTACT);
+
+ /* Create context providers, which need to be initiated before being subscribed */
+ /*
+ if (DeviceStatusWifi::isSupported())
+ DeviceStatusWifi::create(NULL);
+ */
+#endif
+
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_info.h>
+#include "DeviceProviderBase.h"
+
+using namespace ctx;
+
+DeviceProviderBase::DeviceProviderBase(const char *subject) :
+ ContextProvider(subject),
+ __beingSubscribed(false)
+{
+}
+
+bool DeviceProviderBase::isSupported()
+{
+ return true;
+}
+
+void DeviceProviderBase::submitTriggerItem()
+{
+}
+
+int DeviceProviderBase::subscribe(Json option, Json *requestResult)
+{
+ IF_FAIL_RETURN(!__beingSubscribed, ERR_NONE);
+
+ int ret = subscribe();
+
+ if (ret == ERR_NONE)
+ __beingSubscribed = true;
+
+ return ret;
+}
+
+int DeviceProviderBase::unsubscribe(Json option)
+{
+ int ret = ERR_NONE;
+
+ if (__beingSubscribed)
+ ret = unsubscribe();
+
+ return ret;
+}
+
+int DeviceProviderBase::read(Json option, Json *requestResult)
+{
+ return read();
+}
+
+int DeviceProviderBase::write(Json data, Json *requestResult)
+{
+ return write();
+}
+
+int DeviceProviderBase::subscribe()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::unsubscribe()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::read()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int DeviceProviderBase::write()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+bool DeviceProviderBase::getSystemInfoBool(const char *key)
+{
+ bool supported = false;
+ int ret = system_info_get_platform_bool(key, &supported);
+ IF_FAIL_RETURN_TAG(ret == SYSTEM_INFO_ERROR_NONE, false, _E, "system_info_get_platform_bool() failed");
+ return supported;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_DEVICE_PROVIDER_BASE_H_
+#define _CONTEXT_DEVICE_PROVIDER_BASE_H_
+
+#include <ContextProvider.h>
+
+namespace ctx {
+
+ class DeviceProviderBase : public ContextProvider {
+ public:
+ int subscribe(Json option, Json *requestResult);
+ int unsubscribe(Json option);
+ int read(Json option, Json *requestResult);
+ int write(Json data, Json *requestResult);
+
+ virtual bool isSupported();
+ virtual void submitTriggerItem();
+
+ protected:
+ bool __beingSubscribed;
+
+ DeviceProviderBase(const char *subject);
+ virtual ~DeviceProviderBase() {}
+
+ virtual int subscribe();
+ virtual int unsubscribe();
+ virtual int read();
+ virtual int write();
+
+ static bool getSystemInfoBool(const char *key);
+ };
+}
+
+#endif // _CONTEXT_DEVICE_PROVIDER_BASE_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <Types.h>
+#include <PlaceContextProvider.h>
+
+#ifdef _MOBILE_
+#include "../geofence/PlaceGeofenceProvider.h"
+#include "../my-place/place_recognition.h"
+#endif /* _MOBILE_ */
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+ Provider *provider = new(std::nothrow) Provider();
+ IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+ if (!provider->isSupported()) {
+ delete provider;
+ return;
+ }
+
+ provider->registerProvider(privilege, provider);
+ provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initPlaceContextProvider()
+{
+#ifdef _MOBILE_
+ registerProvider<PlaceGeofenceProvider>(PLACE_SUBJ_GEOFENCE, PLACE_PRIV_GEOFENCE);
+
+ /*
+ registerProvider<PlaceRecognitionProvider>(PLACE_SUBJ_RECOGNITION, PLACE_PRIV_RECOGNITION);
+ */
+
+#endif /* _MOBILE_ */
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATUS_TYPES_H_
+#define _CONTEXT_SOCIAL_STATUS_TYPES_H_
+
+// Subject
+#define SOCIAL_ST_SUBJ_CALL "social/call"
+#define SOCIAL_ST_SUBJ_EMAIL "social/email"
+#define SOCIAL_ST_SUBJ_MESSAGE "social/message"
+#define SOCIAL_ST_SUBJ_CONTACTS "social/contacts"
+
+// Data Key
+#define SOCIAL_ST_STATE "State"
+#define SOCIAL_ST_EVENT "Event"
+#define SOCIAL_ST_TYPE "Type"
+#define SOCIAL_ST_MEDIUM "Medium"
+#define SOCIAL_ST_ADDRESS "Address"
+
+// Data Values
+#define SOCIAL_ST_IDLE "Idle"
+#define SOCIAL_ST_CONNECTING "Connecting"
+#define SOCIAL_ST_CONNECTED "Connected"
+#define SOCIAL_ST_ACTIVE SOCIAL_ST_CONNECTED
+#define SOCIAL_ST_HELD "Held"
+#define SOCIAL_ST_DIALING "Dialing"
+#define SOCIAL_ST_ALERTING SOCIAL_ST_CONNECTING
+#define SOCIAL_ST_INCOMING SOCIAL_ST_CONNECTING
+#define SOCIAL_ST_VOICE "Voice"
+#define SOCIAL_ST_VIDEO "Video"
+#define SOCIAL_ST_SENT "Sent"
+#define SOCIAL_ST_RECEIVED "Received"
+#define SOCIAL_ST_SMS "SMS"
+#define SOCIAL_ST_MMS "MMS"
+#define SOCIAL_ST_MY_PROFILE "MyProfile"
+#define SOCIAL_ST_PERSON "Person"
+#define SOCIAL_ST_CHANGED "Changed"
+
+#endif //_CONTEXT_SOCIAL_STATUS_TYPES_H
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd. *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <new>
+#include <StatisticsContextProvider.h>
+
+#include "../app-stats/AppStatsProvider.h"
+#include "../app-stats/AppStatsLogger.h"
+
+#ifdef _MOBILE_
+#include "../media-stats/MediaStatsProvider.h"
+#include "../media-stats/MediaStatsLogger.h"
+#include "../social-stats/SocialStatsProvider.h"
+#include "../social-stats/SocialStatsLogger.h"
+#endif
+
+template<typename Provider>
+void registerProvider(const char *subject, const char *privilege)
+{
+ Provider *provider = new(std::nothrow) Provider();
+ IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
+
+ if (!provider->isSupported()) {
+ delete provider;
+ return;
+ }
+
+ provider->registerProvider(privilege, provider);
+ provider->submitTriggerItem();
+}
+
+SO_EXPORT bool ctx::initStatisticsContextProvider()
+{
+ registerProvider<AppStatsLogger>(APP_SUBJ_LOGGER, APP_HISTORY_PRIV);
+ registerProvider<RecentAppProvider>(APP_SUBJ_RECENTLY_USED, APP_HISTORY_PRIV);
+ registerProvider<FrequentAppProvider>(APP_SUBJ_FREQUENTLY_USED, APP_HISTORY_PRIV);
+ registerProvider<RareAppProvider>(APP_SUBJ_RARELY_USED, APP_HISTORY_PRIV);
+ registerProvider<AppPeakTimeProvider>(APP_SUBJ_PEAK_TIME, APP_HISTORY_PRIV);
+ registerProvider<AppSettingProvider>(APP_SUBJ_COMMON_SETTING, APP_HISTORY_PRIV);
+ registerProvider<AppFreqProvider>(APP_SUBJ_FREQUENCY, APP_HISTORY_PRIV);
+
+#ifdef _MOBILE_
+ registerProvider<MediaStatsLogger>(MEDIA_SUBJ_LOGGER, MEDIA_HISTORY_PRIV);
+ registerProvider<MusicPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC, MEDIA_HISTORY_PRIV);
+ registerProvider<VideoPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO, MEDIA_HISTORY_PRIV);
+ registerProvider<MusicSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC, MEDIA_HISTORY_PRIV);
+ registerProvider<VideoSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO, MEDIA_HISTORY_PRIV);
+ registerProvider<MusicFreqProvider>(MEDIA_SUBJ_MUSIC_FREQUENCY, MEDIA_HISTORY_PRIV);
+ registerProvider<VideoFreqProvider>(MEDIA_SUBJ_VIDEO_FREQUENCY, MEDIA_HISTORY_PRIV);
+
+ registerProvider<SocialStatsLogger>(SOCIAL_SUBJ_LOGGER, SOCIAL_HISTORY_PRIV);
+ registerProvider<ContactFreqProvider>(SOCIAL_SUBJ_FREQUENCY, SOCIAL_HISTORY_PRIV);
+ registerProvider<TopContactsProvider>(SOCIAL_SUBJ_FREQ_ADDRESS, SOCIAL_HISTORY_PRIV);
+#endif
+
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <runtime_info.h>
+#include <sound_manager.h>
+#include <Types.h>
+#include <SharedVars.h>
+#include "SystemInfo.h"
+
+#define CONNECTED 1
+#define NOT_CONNECTED 0
+
+using namespace ctx;
+
+bool system_info::getAudioJackState(int* state)
+{
+ int value = NOT_CONNECTED;
+ int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value);
+ IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+ *state = (value == NOT_CONNECTED ? NOT_CONNECTED : CONNECTED);
+
+ return true;
+}
+
+bool system_info::getVolume(int* systemVolume, int* mediaVolume)
+{
+ int err;
+
+ err = sound_manager_get_volume(SOUND_TYPE_SYSTEM, systemVolume);
+ IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+ err = sound_manager_get_volume(SOUND_TYPE_MEDIA, mediaVolume);
+ IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
+
+ return true;
+}
+
+bool system_info::getWifiBssid(std::string& bssid)
+{
+#if 0
+ /* NOTE: This routine does not work, because the wifi API does not support multi-sessions in one process */
+ int err;
+ char *strBuf = NULL;
+ wifi_ap_h ap = NULL;
+
+ err = wifi_initialize();
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _W, "wifi_initialize() failed (%d)", err);
+
+ err = wifi_get_connected_ap(&ap);
+ if (err != WIFI_ERROR_NONE) {
+ _D("wifi_get_connected_ap() failed (%d)", err);
+ wifi_deinitialize();
+ return false;
+ }
+
+ wifi_ap_get_bssid(ap, &strBuf);
+ bssid = (strBuf != NULL ? strBuf : "");
+ g_free(strBuf);
+
+ wifi_ap_destroy(ap);
+ wifi_deinitialize();
+
+ return !bssid.empty();
+#endif
+ bssid = SharedVars().get(SharedVars::WIFI_BSSID);
+ return true;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SYSTEM_INFO_READER_H_
+#define _CONTEXT_STATS_SYSTEM_INFO_READER_H_
+
+#include <string>
+
+namespace ctx {
+ namespace system_info {
+ bool getAudioJackState(int* state);
+ bool getVolume(int* systemVolume, int* mediaVolume);
+ bool getWifiBssid(std::string& bssid);
+ }
+}
+
+#endif /* End of _CONTEXT_STATS_SYSTEM_INFO_READER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_TYPES_H_
+#define _DEVICE_SYSTEM_STATUS_TYPES_H_
+
+// Subject
+#define DEVICE_ST_SUBJ_BATTERY "system/battery"
+#define DEVICE_ST_SUBJ_CHARGER "system/charger"
+#define DEVICE_ST_SUBJ_HEADPHONE "system/headphone"
+#define DEVICE_ST_SUBJ_WIFI "system/wifi"
+#define DEVICE_ST_SUBJ_USB "system/usb"
+#define DEVICE_ST_SUBJ_GPS "system/gps"
+#define DEVICE_ST_SUBJ_PSMODE "system/psmode"
+#define DEVICE_ST_SUBJ_ALARM "device/alarm"
+#define DEVICE_ST_SUBJ_TIME "device/time"
+
+// Data Key
+#define DEVICE_ST_EVENT "Event"
+#define DEVICE_ST_STATE "State"
+#define DEVICE_ST_TYPE "Type"
+#define DEVICE_ST_LEVEL "Level"
+#define DEVICE_ST_BSSID "BSSID"
+#define DEVICE_ST_IS_CONNECTED "IsConnected"
+#define DEVICE_ST_IS_ENABLED "IsEnabled"
+#define DEVICE_ST_IS_CHARGING "IsCharging"
+#define DEVICE_ST_DETECTED "Detected"
+#define DEVICE_ST_TIME_OF_DAY "TimeOfDay"
+#define DEVICE_ST_DAY_OF_WEEK "DayOfWeek"
+#define DEVICE_ST_DAY_OF_MONTH "DayOfMonth"
+
+// Data Value
+#define DEVICE_ST_TRUE 1
+#define DEVICE_ST_FALSE 0
+#define DEVICE_ST_ENTER "Enter"
+#define DEVICE_ST_EXIT "Exit"
+#define DEVICE_ST_DISABLED "Disabled"
+#define DEVICE_ST_CONNECTED "Connected"
+#define DEVICE_ST_UNCONNECTED "Unconnected"
+#define DEVICE_ST_SEARCHING "Searching"
+#define DEVICE_ST_EMPTY "Empty"
+#define DEVICE_ST_CRITICAL "Critical"
+#define DEVICE_ST_LOW "Low"
+#define DEVICE_ST_NORMAL "Normal"
+#define DEVICE_ST_HIGH "High"
+#define DEVICE_ST_FULL "Full"
+#define DEVICE_ST_HEADSET "Headset"
+#define DEVICE_ST_BLUETOOTH "Bluetooth"
+
+#define TRIG_BOOL_ITEM_DEF(sbj) "\"" sbj "\":{\"type\":\"integer\",\"min\":0,\"max\":1}"
+
+#endif //_DEVICE_SYSTEM_STATUS_TYPES_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <contacts.h>
+#include <Types.h>
+#include "SocialStatisticsTypes.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+SocialDbHandle::SocialDbHandle(ContextProvider *provider) :
+ StatsDbHandleBase(provider)
+{
+}
+
+SocialDbHandle::~SocialDbHandle()
+{
+}
+
+int SocialDbHandle::read(Json filter)
+{
+ std::string query;
+ const char *subject = reqProvider->getSubject();
+
+ if (STR_EQ(subject, SOCIAL_SUBJ_FREQ_ADDRESS)) {
+ query = createSqlFreqAddress(filter);
+
+ } else if (STR_EQ(subject, SOCIAL_SUBJ_FREQUENCY)) {
+ isTriggerItem = true;
+ query = createSqlFrequency(filter);
+ }
+
+ IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
+
+ bool ret = executeQuery(filter, query.c_str());
+ IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
+
+ return ERR_NONE;
+}
+
+std::string SocialDbHandle::createWhereClause(Json filter)
+{
+ std::stringstream whereClause;
+ int commType = -1;
+
+ whereClause << StatsDbHandleBase::createWhereClause(filter);
+
+ filter.get(NULL, SOCIAL_COMMUNICATION_TYPE, &commType);
+
+ switch(commType) {
+ case SOCIAL_COMMUNICATION_TYPE_CALL:
+ whereClause <<
+ " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_VOICE_INCOMING <<
+ " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
+ break;
+ case SOCIAL_COMMUNICATION_TYPE_MESSAGE:
+ whereClause <<
+ " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_MMS_INCOMING <<
+ " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_MMS_BLOCKED;
+ break;
+ default:
+ break;
+ }
+
+ return whereClause.str();
+}
+
+std::string SocialDbHandle::createSqlFreqAddress(Json filter)
+{
+ std::stringstream query;
+ int limit = DEFAULT_LIMIT;
+
+ filter.get(NULL, STATS_RESULT_SIZE, &limit);
+
+ query <<
+ "SELECT " SOCIAL_ADDRESS ", " \
+ "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
+ "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
+ "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
+ " FROM " SOCIAL_TABLE_CONTACT_LOG \
+ " WHERE " << createWhereClause(filter) <<
+ " GROUP BY " SOCIAL_ADDRESS \
+ " ORDER BY COUNT(*) DESC" \
+ " LIMIT " << limit;
+
+ return query.str();
+}
+
+std::string SocialDbHandle::createSqlFrequency(Json filter)
+{
+ Json filterCleaned;
+ std::string weekStr;
+ std::string timeOfDay;
+ std::string address;
+
+ if (!filter.get(NULL, SOCIAL_ADDRESS, &address)) {
+ _E("Invalid parameter");
+ return "";
+ }
+
+ if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
+ filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
+
+ if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
+ filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
+
+ std::stringstream query;
+
+ query <<
+ "DELETE FROM " SOCIAL_TEMP_CONTACT_FREQ ";";
+
+ query <<
+ "INSERT INTO " SOCIAL_TEMP_CONTACT_FREQ \
+ " SELECT " SOCIAL_ADDRESS ", COUNT(*) AS " STATS_TOTAL_COUNT \
+ " FROM " SOCIAL_TABLE_CONTACT_LOG \
+ " WHERE " << createWhereClause(filterCleaned) <<
+ " GROUP BY " SOCIAL_ADDRESS ";";
+
+ query <<
+ "INSERT OR IGNORE INTO " SOCIAL_TEMP_CONTACT_FREQ " (" SOCIAL_ADDRESS ")" \
+ " VALUES ('" << address << "');";
+
+ query <<
+ "SELECT S." SOCIAL_ADDRESS ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
+ " FROM " SOCIAL_TEMP_CONTACT_FREQ " AS S" \
+ " LEFT JOIN " SOCIAL_TEMP_CONTACT_FREQ " AS lesser" \
+ " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
+ " WHERE S." SOCIAL_ADDRESS " = '" << address << "'";
+
+
+ return query.str();
+}
+
+void SocialDbHandle::replyTriggerItem(int error, Json &jsonResult)
+{
+ IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), SOCIAL_SUBJ_FREQUENCY), _E, "Invalid subject");
+
+ Json results;
+ std::string valStr;
+ int val;
+
+ jsonResult.get(NULL, SOCIAL_ADDRESS, &valStr);
+ results.set(NULL, SOCIAL_ADDRESS, valStr);
+ jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
+ results.set(NULL, STATS_TOTAL_COUNT, val);
+ jsonResult.get(NULL, STATS_RANK, &val);
+ results.set(NULL, STATS_RANK, val);
+
+ reqProvider->replyToRead(reqFilter, error, results);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
+#define _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
+
+#include <string>
+#include <Json.h>
+#include "../shared/DbHandleBase.h"
+
+namespace ctx {
+ class SocialDbHandle : public StatsDbHandleBase {
+ public:
+ SocialDbHandle(ContextProvider *provider);
+ ~SocialDbHandle();
+
+ int read(Json filter);
+
+ protected:
+ std::string createWhereClause(Json filter);
+ std::string createSqlFreqAddress(Json filter);
+ std::string createSqlFrequency(Json filter);
+ void replyTriggerItem(int error, Json &jsonResult);
+ };
+}
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sstream>
+#include <Json.h>
+#include <Types.h>
+#include "SocialStatisticsTypes.h"
+#include "LogAggregator.h"
+
+ctx::ContactLogAggregator::ContactLogAggregator() :
+ __timerId(-1),
+ __timeDiff(0)
+{
+ __createTable();
+ __timerId = __timerManager.setAt(3, 0, DayOfWeek::EVERYDAY, this);
+}
+
+ctx::ContactLogAggregator::~ContactLogAggregator()
+{
+ __timerManager.remove(__timerId);
+}
+
+void ctx::ContactLogAggregator::__createTable()
+{
+ static bool done = false;
+ IF_FAIL_VOID(!done);
+
+ __dbManager.createTable(0, SOCIAL_TABLE_CONTACT_LOG, SOCIAL_TABLE_CONTACT_LOG_COLUMNS, NULL, NULL);
+ __dbManager.execute(0, SOCIAL_TEMP_CONTACT_FREQ_SQL, NULL);
+
+ done = true;
+}
+
+bool ctx::ContactLogAggregator::onTimerExpired(int timerId)
+{
+ aggregateContactLog();
+ return true;
+}
+
+void ctx::ContactLogAggregator::aggregateContactLog()
+{
+ __dbManager.execute(0,
+ "SELECT IFNULL(MAX(" STATS_UNIV_TIME "),0) AS " STATS_LAST_TIME \
+ ", (strftime('%s', 'now', 'localtime')) - (strftime('%s', 'now')) AS " TIME_DIFFERENCE \
+ " FROM " SOCIAL_TABLE_CONTACT_LOG, this);
+}
+
+void ctx::ContactLogAggregator::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
+{
+ IF_FAIL_VOID_TAG(!records.empty(), _E, "Invalid query result");
+
+ int lastTime = 0;
+ records[0].get(NULL, STATS_LAST_TIME, &lastTime);
+ records[0].get(NULL, TIME_DIFFERENCE, &__timeDiff);
+
+ _D("Last Time: %d / Local - UTC: %d", lastTime, __timeDiff);
+
+ contacts_list_h list = NULL;
+
+ __getUpdatedContactLogList(lastTime, &list);
+ IF_FAIL_VOID(list);
+
+ __removeExpiredLog();
+ __insertContactLogList(list);
+ __destroyContactLogList(list);
+}
+
+void ctx::ContactLogAggregator::__getUpdatedContactLogList(int lastTime, contacts_list_h *list)
+{
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+
+ int err = contacts_connect();
+ IF_FAIL_VOID_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_connect() failed");
+
+ err = contacts_filter_create(_contacts_phone_log._uri, &filter);
+ IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_filter_create() failed");
+
+ contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMING);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+ contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_MMS_BLOCKED);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+ contacts_filter_add_int(filter, _contacts_phone_log.log_time , CONTACTS_MATCH_GREATER_THAN, lastTime);
+ contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
+
+ err = contacts_query_create(_contacts_phone_log._uri, &query);
+ IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_query_create() failed");
+
+ contacts_query_set_filter(query, filter);
+ contacts_query_set_sort(query, _contacts_phone_log.log_time, true);
+
+ err = contacts_db_get_records_with_query(query, 0, 0, list);
+ IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_db_get_records_with_query() failed");
+
+CATCH:
+ if (filter)
+ contacts_filter_destroy(filter);
+ if (query)
+ contacts_query_destroy(query);
+}
+
+void ctx::ContactLogAggregator::__destroyContactLogList(contacts_list_h list)
+{
+ if (list)
+ contacts_list_destroy(list, true);
+
+ contacts_disconnect();
+}
+
+void ctx::ContactLogAggregator::__insertContactLogList(contacts_list_h list)
+{
+ IF_FAIL_VOID(contacts_list_first(list) == CONTACTS_ERROR_NONE);
+
+ do {
+ contacts_record_h record = NULL;
+ contacts_list_get_current_record_p(list, &record);
+ if (record == NULL) break;
+
+ ctx::Json data;
+
+ char* address = NULL;
+ int logType;
+ int duration = 0;
+ int accessTime = 0;
+
+ contacts_record_get_str_p(record, _contacts_phone_log.address, &address);
+
+ if (!address) {
+ _W("Getting address failed");
+ continue;
+ }
+
+ contacts_record_get_int(record, _contacts_phone_log.log_type, &logType);
+ contacts_record_get_int(record, _contacts_phone_log.extra_data1, &duration);
+ contacts_record_get_int(record, _contacts_phone_log.log_time, &accessTime);
+
+ data.set(NULL, SOCIAL_ADDRESS, address);
+ data.set(NULL, SOCIAL_PHONE_LOG_TYPE, logType);
+ data.set(NULL, STATS_DURATION, duration);
+ data.set(NULL, STATS_UNIV_TIME, accessTime);
+ data.set(NULL, STATS_LOCAL_TIME, accessTime + __timeDiff);
+
+ __dbManager.insert(0, SOCIAL_TABLE_CONTACT_LOG, data, NULL);
+
+ } while(contacts_list_next(list) == CONTACTS_ERROR_NONE);
+}
+
+void ctx::ContactLogAggregator::__removeExpiredLog()
+{
+ std::stringstream query;
+ query << "DELETE FROM " SOCIAL_TABLE_CONTACT_LOG " WHERE " \
+ STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
+ __dbManager.execute(0, query.str().c_str(), NULL);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
+#define _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
+
+#include <contacts.h>
+#include <DatabaseManager.h>
+#include <TimerManager.h>
+
+namespace ctx {
+
+ class ContactLogAggregator : public IDatabaseListener, public ITimerListener {
+ private:
+ int __timerId;
+ int __timeDiff;
+ TimerManager __timerManager;
+ DatabaseManager __dbManager;
+
+ void __createTable();
+ void __getUpdatedContactLogList(int last_time, contacts_list_h *list);
+ void __insertContactLogList(contacts_list_h list);
+ void __destroyContactLogList(contacts_list_h list);
+ void __removeExpiredLog();
+
+ public:
+ ContactLogAggregator();
+ ~ContactLogAggregator();
+
+ void aggregateContactLog();
+
+ void onTableCreated(unsigned int queryId, int error) {}
+ void onInserted(unsigned int queryId, int error, int64_t rowId) {}
+ void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
+ bool onTimerExpired(int timerId);
+
+ }; /* class ContactLogAggregator */
+
+} /* namespace ctx */
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGTOR_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_STATS_SOCIAL_TYPES_H_
+#define _CONTEXT_STATS_SOCIAL_TYPES_H_
+
+#include "../shared/CommonTypes.h"
+
+#define SOCIAL_HISTORY_PRIV "callhistory.read"
+#define SOCIAL_SUBJ_LOGGER "stats/contact/logger"
+#define SOCIAL_SUBJ_FREQ_ADDRESS "stats/contact/often"
+#define SOCIAL_SUBJ_FREQUENCY "stats/contact/frequency"
+
+#define SOCIAL_TABLE_CONTACT_LOG "Log_Contact"
+#define SOCIAL_TABLE_CONTACT_LOG_COLUMNS \
+ "Address TEXT NOT NULL, PLogType INTEGER NOT NULL, " \
+ "Duration INTEGER NOT NULL DEFAULT 0, " \
+ "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
+ "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
+
+#define SOCIAL_TEMP_CONTACT_FREQ "Temp_ContactFreq"
+#define SOCIAL_TEMP_CONTACT_FREQ_SQL \
+ "CREATE TABLE IF NOT EXISTS " SOCIAL_TEMP_CONTACT_FREQ \
+ " (Address TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
+
+#define SOCIAL_COMMUNICATION_TYPE "CommunicationType"
+#define SOCIAL_ADDRESS "Address"
+#define SOCIAL_PHONE_LOG_TYPE "PLogType"
+#define TIME_DIFFERENCE "TimeDIff"
+
+enum SocialCommType {
+ SOCIAL_COMMUNICATION_TYPE_CALL = 1,
+ SOCIAL_COMMUNICATION_TYPE_MESSAGE,
+ SOCIAL_COMMUNICATION_TYPE_ALL
+};
+
+#endif /* End of _CONTEXT_STATS_SOCIAL_TYPES_ */
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SocialStatisticsTypes.h"
+#include "SocialStatsLogger.h"
+
+using namespace ctx;
+
+SocialStatsLogger::SocialStatsLogger() :
+ ContextProvider(SOCIAL_SUBJ_LOGGER)
+{
+}
+
+SocialStatsLogger::~SocialStatsLogger()
+{
+}
+
+int SocialStatsLogger::subscribe(Json option, Json* requestResult)
+{
+ return ERR_NONE;
+}
+
+int SocialStatsLogger::unsubscribe(Json option)
+{
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATS_LOGGER_H_
+#define _CONTEXT_SOCIAL_STATS_LOGGER_H_
+
+#include <ContextProvider.h>
+#include "LogAggregator.h"
+
+namespace ctx {
+
+ class SocialStatsLogger : public ContextProvider {
+ public:
+ SocialStatsLogger();
+ ~SocialStatsLogger();
+
+ int subscribe(Json option, Json* requestResult);
+ int unsubscribe(Json option);
+
+ void submitTriggerItem() {}
+
+ private:
+ ContactLogAggregator __aggregator;
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_SOCIAL_STATS_LOGGER_H_ */
+
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "SocialStatsProvider.h"
+#include "DbHandle.h"
+
+using namespace ctx;
+
+SocialStatsProvider::SocialStatsProvider(const char *subject) :
+ ContextProvider(subject)
+{
+}
+
+SocialStatsProvider::~SocialStatsProvider()
+{
+}
+
+bool SocialStatsProvider::isSupported()
+{
+ /* TODO */
+ return true;
+}
+
+void SocialStatsProvider::submitTriggerItem()
+{
+}
+
+int SocialStatsProvider::read(Json option, Json* requestResult)
+{
+ SocialDbHandle *handle = new(std::nothrow) SocialDbHandle(this);
+ IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
+
+ int err = handle->read(option);
+ if (err != ERR_NONE) {
+ delete handle;
+ return err;
+ }
+
+ return ERR_NONE;
+}
+
+void ContactFreqProvider::submitTriggerItem()
+{
+ registerTriggerItem(OPS_READ,
+ "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
+ "{"
+ "\"Address\":{\"type\":\"string\"},"
+ TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
+ "}");
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _CONTEXT_SOCIAL_STATS_PROVIDER_H_
+#define _CONTEXT_SOCIAL_STATS_PROVIDER_H_
+
+#include <ContextProvider.h>
+#include "SocialStatisticsTypes.h"
+
+namespace ctx {
+
+ class SocialStatsProvider : public ContextProvider {
+ public:
+ int read(Json option, Json* requestResult);
+
+ bool isSupported();
+ virtual void submitTriggerItem();
+
+ protected:
+ SocialStatsProvider(const char *subject);
+ virtual ~SocialStatsProvider();
+ };
+
+
+ class ContactFreqProvider: public SocialStatsProvider {
+ public:
+ ContactFreqProvider() :
+ SocialStatsProvider(SOCIAL_SUBJ_FREQUENCY) {}
+
+ void submitTriggerItem();
+ };
+
+
+ class TopContactsProvider: public SocialStatsProvider {
+ public:
+ TopContactsProvider() :
+ SocialStatsProvider(SOCIAL_SUBJ_FREQ_ADDRESS) {}
+ };
+
+} /* namespace ctx */
+
+#endif /* _CONTEXT_SOCIAL_STATS_PROVIDER_H_ */
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-# prvd_cdef, prvd_deps, and prvd_srcs need to be set properly
-
-# Build flag for the prediction engine.
-# Set this to "yes" to enable the engine.
-SET(enable_prediction_engine "no")
-
-# Common Profile
-FILE(GLOB prvd_srcs ./*.cpp)
-FILE(GLOB prvd_srcs ${prvd_srcs} shared/*.cpp)
-FILE(GLOB prvd_srcs ${prvd_srcs} app/*.cpp)
-IF("${enable_prediction_engine}" STREQUAL "yes")
- FILE(GLOB prvd_srcs ${prvd_srcs} prediction/*.cpp)
-ELSE("${enable_prediction_engine}" STREQUAL "yes")
- SET(prvd_cdef ${prvd_cdef} _DISABLE_PREDICTION_ENGINE_)
-ENDIF("${enable_prediction_engine}" STREQUAL "yes")
-
-SET(prvd_deps capi-system-runtime-info pkgmgr pkgmgr-info capi-appfw-package-manager)
-SET(prvd_deps ${prvd_deps} capi-appfw-application capi-appfw-app-manager)
-SET(prvd_deps ${prvd_deps} capi-media-sound-manager)
-
-# Mobile Profile
-IF("${PROFILE}" STREQUAL "mobile")
- FILE(GLOB prvd_srcs ${prvd_srcs} media/*.cpp)
- FILE(GLOB prvd_srcs ${prvd_srcs} social/*.cpp)
- SET(prvd_deps ${prvd_deps} contacts-service2 capi-content-media-content)
-ENDIF("${PROFILE}" STREQUAL "mobile")
-
-# Wearable Profile
-#IF("${PROFILE}" STREQUAL "wearable")
-#ENDIF("${PROFILE}" STREQUAL "wearable")
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd. *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextProvider.h>
-#include <StatisticsContextProvider.h>
-
-#include "app/AppStatsProvider.h"
-#include "app/AppStatsLogger.h"
-
-#ifndef _DISABLE_PREDICTION_ENGINE_
-// include prediction engine header files here
-#endif
-
-#ifdef _MOBILE_
-#include "media/MediaStatsProvider.h"
-#include "media/MediaStatsLogger.h"
-#include "social/SocialStatsProvider.h"
-#include "social/SocialStatsLogger.h"
-#endif
-
-template<typename Provider>
-void registerProvider(const char *subject, const char *privilege)
-{
- Provider *provider = new(std::nothrow) Provider();
- IF_FAIL_VOID_TAG(provider, _E, "Memory allocation failed");
-
- if (!provider->isSupported()) {
- delete provider;
- return;
- }
-
- provider->registerProvider(privilege, provider);
- provider->submitTriggerItem();
-}
-
-SO_EXPORT bool ctx::initStatisticsContextProvider()
-{
- registerProvider<AppStatsLogger>(APP_SUBJ_LOGGER, APP_HISTORY_PRIV);
- registerProvider<RecentAppProvider>(APP_SUBJ_RECENTLY_USED, APP_HISTORY_PRIV);
- registerProvider<FrequentAppProvider>(APP_SUBJ_FREQUENTLY_USED, APP_HISTORY_PRIV);
- registerProvider<RareAppProvider>(APP_SUBJ_RARELY_USED, APP_HISTORY_PRIV);
- registerProvider<AppPeakTimeProvider>(APP_SUBJ_PEAK_TIME, APP_HISTORY_PRIV);
- registerProvider<AppSettingProvider>(APP_SUBJ_COMMON_SETTING, APP_HISTORY_PRIV);
- registerProvider<AppFreqProvider>(APP_SUBJ_FREQUENCY, APP_HISTORY_PRIV);
-
-#ifndef _DISABLE_PREDICTION_ENGINE_
-// initialize the prediction engine here
-#endif
-
-#ifdef _MOBILE_
- registerProvider<MediaStatsLogger>(MEDIA_SUBJ_LOGGER, MEDIA_HISTORY_PRIV);
- registerProvider<MusicPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC, MEDIA_HISTORY_PRIV);
- registerProvider<VideoPeakTimeProvider>(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO, MEDIA_HISTORY_PRIV);
- registerProvider<MusicSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC, MEDIA_HISTORY_PRIV);
- registerProvider<VideoSettingProvider>(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO, MEDIA_HISTORY_PRIV);
- registerProvider<MusicFreqProvider>(MEDIA_SUBJ_MUSIC_FREQUENCY, MEDIA_HISTORY_PRIV);
- registerProvider<VideoFreqProvider>(MEDIA_SUBJ_VIDEO_FREQUENCY, MEDIA_HISTORY_PRIV);
-
- registerProvider<SocialStatsLogger>(SOCIAL_SUBJ_LOGGER, SOCIAL_HISTORY_PRIV);
- registerProvider<ContactFreqProvider>(SOCIAL_SUBJ_FREQUENCY, SOCIAL_HISTORY_PRIV);
- registerProvider<TopContactsProvider>(SOCIAL_SUBJ_FREQ_ADDRESS, SOCIAL_HISTORY_PRIV);
-#endif
-
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-#include <time.h>
-#include <app_manager.h>
-
-#include <Json.h>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "AppStatisticsTypes.h"
-#include "ActiveWindowMonitor.h"
-
-/* Active window changes frequently.
- * We thus consider the apps being foregrounded at least 3 secs */
-#define ONE_DAY_IN_SEC 86400
-
-ctx::AppUseMonitor::AppUseMonitor() :
- __signalId(-1),
- __lastCleanupTime(0),
- __dbusWatcher(DBusType::SYSTEM)
-{
- __startLogging();
-}
-
-ctx::AppUseMonitor::~AppUseMonitor()
-{
- __stopLogging();
-}
-
-bool ctx::AppUseMonitor::__startLogging()
-{
- __signalId = __dbusWatcher.watch(NULL, "/Org/Tizen/Aul/AppStatus", "org.tizen.aul.AppStatus", "AppStatusChange", this);
- _D("Active window monitoring started (%lld)", __signalId);
- return (__signalId > 0);
-}
-
-void ctx::AppUseMonitor::__stopLogging()
-{
- if (__signalId > 0) {
- __dbusWatcher.unwatch(__signalId);
- _D("Active window monitoring stopped");
- }
-}
-
-void ctx::AppUseMonitor::onSignal(const char* sender, const char* path, const char* iface, const char* name, GVariant* param)
-{
- gint pid = 0;
- const gchar *appId = NULL;
- const gchar *pkgId = NULL;
- const gchar *status = NULL;
- const gchar *type = NULL;
-
- g_variant_get(param, "(i&s&s&s&s)", &pid, &appId, &pkgId, &status, &type);
- _D("AppEvent: %s, %s, %s", appId, status, type);
-
- IF_FAIL_VOID(appId && status && type);
- IF_FAIL_VOID(STR_EQ(type, "uiapp") && !__isSkippable(appId));
-
- if (STR_EQ(status, "fg")) {
- __createRecord(appId);
- } else if (STR_EQ(status, "bg")) {
- __finishRecord(appId);
- __removeExpired();
- }
-}
-
-void ctx::AppUseMonitor::__createRecord(std::string appId)
-{
- int audioJack;
- int systemVolume;
- int mediaVolume;
- std::string bssid;
- Json data;
- data.set(NULL, STATS_APP_ID, appId);
-
- if (ctx::system_info::getAudioJackState(&audioJack))
- data.set(NULL, STATS_AUDIO_JACK, audioJack);
-
- if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
- data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
- data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
- }
-
- if (ctx::system_info::getWifiBssid(bssid))
- data.set(NULL, STATS_BSSID, bssid);
-
- __dbManager.insert(0, APP_TABLE_USAGE_LOG, data, NULL);
-}
-
-void ctx::AppUseMonitor::__finishRecord(std::string appId)
-{
- /* TODO: It might be necessary to update system status here */
- std::stringstream query;
- query <<
- "UPDATE " APP_TABLE_USAGE_LOG \
- " SET " STATS_DURATION " = strftime('%s', 'now') - " STATS_UNIV_TIME \
- " WHERE " STATS_COL_ROW_ID " = (" \
- "SELECT MAX(" STATS_COL_ROW_ID ") FROM " APP_TABLE_USAGE_LOG \
- " WHERE " STATS_APP_ID " = '" << appId << "'" \
- " AND " STATS_DURATION " = 0)";
- __dbManager.execute(0, query.str().c_str(), NULL);
-}
-
-bool ctx::AppUseMonitor::__isSkippable(std::string appId)
-{
- /* TODO: circular cache */
- app_info_h appInfo = NULL;
- int err = app_manager_get_app_info(appId.c_str(), &appInfo);
- IF_FAIL_RETURN_TAG(err == APP_MANAGER_ERROR_NONE && appInfo, true, _E, "app_manager_get_app_info() failed");
-
- bool nodisp = false;
- err = app_info_is_nodisplay(appInfo, &nodisp);
- if (err != APP_MANAGER_ERROR_NONE) {
- app_info_destroy(appInfo);
- _E("app_info_is_nodisplay() failed");
- return true;
- }
-
- app_info_destroy(appInfo);
- return nodisp;
-}
-
-void ctx::AppUseMonitor::__removeExpired()
-{
- int timestamp = static_cast<int>(time(NULL));
- IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
-
- __lastCleanupTime = timestamp;
-
- std::stringstream query;
- query << "DELETE FROM " APP_TABLE_USAGE_LOG " WHERE " \
- STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
- __dbManager.execute(0, query.str().c_str(), NULL);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_USE_MONITOR_H_
-#define _CONTEXT_STATS_APP_USE_MONITOR_H_
-
-#include <string>
-#include <sstream>
-#include <DBusSignalWatcher.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
- class AppUseMonitor : public IDBusSignalListener {
- private:
- int64_t __signalId;
- int __lastCleanupTime;
- DBusSignalWatcher __dbusWatcher;
- DatabaseManager __dbManager;
-
- bool __startLogging(void);
- void __stopLogging(void);
-
- bool __isSkippable(std::string appId);
- void __createRecord(std::string appId);
- void __finishRecord(std::string appId);
- void __removeExpired();
- void onSignal(const char *sender, const char *path, const char *iface, const char *name, GVariant *param);
-
- public:
- AppUseMonitor();
- ~AppUseMonitor();
- }; /* class AppUseMonitor */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_USE_MONITOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_TYPES_H_
-#define _CONTEXT_STATS_APP_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define APP_HISTORY_PRIV "apphistory.read"
-#define APP_SUBJ_LOGGER "stats/app/logger"
-#define APP_SUBJ_RECENTLY_USED "stats/app/recently"
-#define APP_SUBJ_FREQUENTLY_USED "stats/app/often"
-#define APP_SUBJ_RARELY_USED "stats/app/rarely"
-#define APP_SUBJ_PEAK_TIME "stats/app/peak_time"
-#define APP_SUBJ_COMMON_SETTING "stats/app/setting"
-#define APP_SUBJ_FREQUENCY "stats/app/frequency"
-
-#define APP_TABLE_REMOVABLE_APP "Log_RemovableApp"
-#define APP_TABLE_REMOVABLE_APP_COLUMNS \
- "AppId TEXT NOT NULL UNIQUE"
-
-#define APP_TABLE_USAGE_LOG "Log_AppLaunch"
-#define APP_TABLE_USAGE_LOG_COLUMNS \
- "AppId TEXT NOT NULL, Duration INTEGER NOT NULL DEFAULT 0, " \
- "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
- "BSSID TEXT, " \
- "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
- "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define APP_TEMP_USAGE_FREQ "Temp_AppLaunchFreq"
-#define APP_TEMP_USAGE_FREQ_SQL \
- "CREATE TABLE IF NOT EXISTS " APP_TEMP_USAGE_FREQ \
- " (AppId TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
-
-#endif /* End of _CONTEXT_STATS_APP_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "AppStatisticsTypes.h"
-#include "AppStatsLogger.h"
-
-using namespace ctx;
-
-AppStatsLogger::AppStatsLogger() :
- ContextProvider(APP_SUBJ_LOGGER),
- __initializer(NULL),
- __installMon(NULL),
- __launchMon(NULL)
-{
- __initializer = new(std::nothrow) AppDbInitializer();
- IF_FAIL_VOID_TAG(__initializer, _E, "Memory allocation failed");
-
- __installMon = new(std::nothrow) AppInstallMonitor();
- __launchMon = new(std::nothrow) AppUseMonitor();
- IF_FAIL_CATCH_TAG(__installMon && __launchMon, _E, "Memory allocation failed");
- return;
-
-CATCH:
- delete __installMon;
- delete __launchMon;
- __installMon = NULL;
- __launchMon = NULL;
-}
-
-AppStatsLogger::~AppStatsLogger()
-{
- delete __installMon;
- delete __launchMon;
-}
-
-int AppStatsLogger::subscribe(Json option, Json* requestResult)
-{
- return ERR_NONE;
-}
-
-int AppStatsLogger::unsubscribe(Json option)
-{
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_APP_STATS_LOGGER_H_
-#define _CONTEXT_APP_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "DbInit.h"
-#include "InstallMonitor.h"
-#include "ActiveWindowMonitor.h"
-
-namespace ctx {
-
- class AppStatsLogger : public ContextProvider {
- public:
- AppStatsLogger();
- ~AppStatsLogger();
-
- int subscribe(Json option, Json *requestResult);
- int unsubscribe(Json option);
-
- void submitTriggerItem() {}
-
- private:
- AppDbInitializer *__initializer;
- AppInstallMonitor *__installMon;
- AppUseMonitor *__launchMon;
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_APP_STATS_LOGGER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "AppStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-AppStatsProvider::AppStatsProvider(const char *subject) :
- ContextProvider(subject)
-{
-}
-
-AppStatsProvider::~AppStatsProvider()
-{
-}
-
-void AppStatsProvider::submitTriggerItem()
-{
-}
-
-int AppStatsProvider::read(Json option, Json *requestResult)
-{
- AppDbHandle *handle = new(std::nothrow) AppDbHandle(this);
- IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
- int err = handle->read(option);
- if (err != ERR_NONE) {
- delete handle;
- return err;
- }
-
- return ERR_NONE;
-}
-
-void AppFreqProvider::submitTriggerItem()
-{
- registerTriggerItem(OPS_READ,
- "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
- "{"
- "\"AppId\":{\"type\":\"string\"},"
- TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
- "}");
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_APP_STATS_PROVIDER_H_
-#define _CONTEXT_APP_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "AppStatisticsTypes.h"
-
-namespace ctx {
-
- class AppStatsProvider : public ContextProvider {
- public:
- int read(Json option, Json *requestResult);
- virtual void submitTriggerItem();
-
- protected:
- AppStatsProvider(const char *subject);
- virtual ~AppStatsProvider();
- };
-
-
- class RecentAppProvider : public AppStatsProvider {
- public:
- RecentAppProvider() :
- AppStatsProvider(APP_SUBJ_RECENTLY_USED) {}
- };
-
-
- class FrequentAppProvider : public AppStatsProvider {
- public:
- FrequentAppProvider() :
- AppStatsProvider(APP_SUBJ_FREQUENTLY_USED) {}
- };
-
-
- class RareAppProvider : public AppStatsProvider {
- public:
- RareAppProvider() :
- AppStatsProvider(APP_SUBJ_RARELY_USED) {}
- };
-
-
- class AppPeakTimeProvider : public AppStatsProvider {
- public:
- AppPeakTimeProvider() :
- AppStatsProvider(APP_SUBJ_PEAK_TIME) {}
- };
-
-
- class AppSettingProvider : public AppStatsProvider {
- public:
- AppSettingProvider() :
- AppStatsProvider(APP_SUBJ_COMMON_SETTING) {}
- };
-
-
- class AppFreqProvider : public AppStatsProvider {
- public:
- AppFreqProvider() :
- AppStatsProvider(APP_SUBJ_FREQUENCY) {}
-
- void submitTriggerItem();
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_APP_STATS_PROVIDER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "AppStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-AppDbHandle::AppDbHandle(ContextProvider *provider) :
- StatsDbHandleBase(provider)
-{
-}
-
-AppDbHandle::~AppDbHandle()
-{
-}
-
-int AppDbHandle::read(Json filter)
-{
- std::string query;
- const char *subject = reqProvider->getSubject();
-
- if (STR_EQ(subject, APP_SUBJ_RECENTLY_USED)) {
- query = createSqlRecentlyUsed(filter);
-
- } else if (STR_EQ(subject, APP_SUBJ_FREQUENTLY_USED)) {
- query = createSqlFrequentlyUsed(filter);
-
- } else if (STR_EQ(subject, APP_SUBJ_RARELY_USED)) {
- query = createSqlRarelyUsed(filter);
-
- } else if (STR_EQ(subject, APP_SUBJ_PEAK_TIME)) {
- query = createSqlPeakTime(filter);
-
- } else if (STR_EQ(subject, APP_SUBJ_COMMON_SETTING)) {
- query = createSqlCommonSetting(filter);
-
- } else if (STR_EQ(subject, APP_SUBJ_FREQUENCY)) {
- isTriggerItem = true;
- query = createSqlFrequency(filter);
- }
-
- IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
- bool ret = executeQuery(filter, query.c_str());
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
- return ERR_NONE;
-}
-
-std::string AppDbHandle::createWhereClauseWithDeviceStatus(Json filter)
-{
- std::stringstream whereClause;
- std::string bssid;
- int audioJack;
-
- whereClause << StatsDbHandleBase::createWhereClause(filter);
-
- if (filter.get(NULL, STATS_BSSID, &bssid))
- whereClause << " AND " STATS_BSSID " = '" << bssid << "'";
-
- if (filter.get(NULL, STATS_AUDIO_JACK, &audioJack))
- whereClause << " AND " STATS_AUDIO_JACK " = " << audioJack;
-
- return whereClause.str();
-}
-
-std::string AppDbHandle::createSqlPeakTime(Json filter)
-{
- return StatsDbHandleBase::createSqlPeakTime(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
-}
-
-std::string AppDbHandle::createSqlCommonSetting(Json filter)
-{
- return StatsDbHandleBase::createSqlCommonSetting(filter, APP_TABLE_USAGE_LOG, createWhereClause(filter));
-}
-
-std::string AppDbHandle::createSqlFrequency(Json filter)
-{
- Json filterCleaned;
- std::string weekStr;
- std::string timeOfDay;
- std::string appId;
-
- if (!filter.get(NULL, STATS_APP_ID, &appId)) {
- _E("Invalid parameter");
- return "";
- }
-
- if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
- filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
- if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
- filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
- std::string whereClause = createWhereClause(filterCleaned);
-
- std::stringstream query;
-
- query <<
- "DELETE FROM " APP_TEMP_USAGE_FREQ ";";
-
- query <<
- "INSERT INTO " APP_TEMP_USAGE_FREQ \
- " SELECT " STATS_APP_ID ", COUNT(*) AS " STATS_TOTAL_COUNT \
- " FROM " APP_TABLE_USAGE_LOG \
- " WHERE " << whereClause <<
- " GROUP BY " STATS_APP_ID ";";
-
- query <<
- "INSERT OR IGNORE INTO " APP_TEMP_USAGE_FREQ " (" STATS_APP_ID ")" \
- " VALUES ('" << appId << "');";
-
- query <<
- "SELECT S." STATS_APP_ID ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
- " FROM " APP_TEMP_USAGE_FREQ " AS S" \
- " LEFT JOIN " APP_TEMP_USAGE_FREQ " AS lesser" \
- " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
- " WHERE S." STATS_APP_ID " = '" << appId << "'";
-
- return query.str();
-}
-
-std::string AppDbHandle::createSqlRecentlyUsed(Json filter)
-{
- std::stringstream query;
- int limit = DEFAULT_LIMIT;
-
- filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
- query <<
- "SELECT " STATS_APP_ID ", " \
- "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
- "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
- "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
- " FROM " APP_TABLE_USAGE_LOG \
- " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
- " GROUP BY " STATS_APP_ID \
- " ORDER BY MAX(" STATS_UNIV_TIME ") DESC" \
- " LIMIT " << limit;
-
- return query.str();
-}
-
-std::string AppDbHandle::createSqlFrequentlyUsed(Json filter)
-{
- std::stringstream query;
- int limit = DEFAULT_LIMIT;
-
- filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
- query <<
- "SELECT " STATS_APP_ID ", " \
- "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
- "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
- "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
- " FROM " APP_TABLE_USAGE_LOG \
- " WHERE " << createWhereClauseWithDeviceStatus(filter) <<
- " GROUP BY " STATS_APP_ID \
- " ORDER BY COUNT(*) DESC" \
- " LIMIT " << limit;
-
- return query.str();
-}
-
-std::string AppDbHandle::createSqlRarelyUsed(Json filter)
-{
- std::stringstream query;
- int limit = DEFAULT_LIMIT;
-
- filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
- query <<
- "SELECT i." STATS_APP_ID ", " \
- "COUNT(u." STATS_DURATION ") AS " STATS_TOTAL_COUNT ", " \
- "IFNULL(SUM(u." STATS_DURATION "),0) AS " STATS_TOTAL_DURATION ", " \
- "IFNULL(MAX(u." STATS_UNIV_TIME "),-1) AS " STATS_LAST_TIME \
- " FROM " APP_TABLE_REMOVABLE_APP " i LEFT OUTER JOIN (" \
- " SELECT * FROM " APP_TABLE_USAGE_LOG \
- " WHERE " << createWhereClauseWithDeviceStatus(filter) << ") u" \
- " ON i." STATS_APP_ID " = u." STATS_APP_ID \
- " GROUP BY i." STATS_APP_ID \
- " ORDER BY " STATS_TOTAL_COUNT " ASC" \
- " LIMIT " << limit;
-
- return query.str();
-}
-
-void AppDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
- IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), APP_SUBJ_FREQUENCY), _E, "Invalid subject");
-
- Json results;
- std::string valStr;
- int val;
-
- jsonResult.get(NULL, STATS_APP_ID, &valStr);
- results.set(NULL, STATS_APP_ID, valStr);
- jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
- results.set(NULL, STATS_TOTAL_COUNT, val);
- jsonResult.get(NULL, STATS_RANK, &val);
- results.set(NULL, STATS_RANK, val);
-
- reqProvider->replyToRead(reqFilter, error, results);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_DB_HANDLE_H_
-#define _CONTEXT_STATS_APP_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
- class AppDbHandle : public StatsDbHandleBase {
- public:
- AppDbHandle(ContextProvider *provider);
- ~AppDbHandle();
-
- int read(Json filter);
-
- protected:
- std::string createWhereClauseWithDeviceStatus(Json filter);
- std::string createSqlRecentlyUsed(Json filter);
- std::string createSqlFrequentlyUsed(Json filter);
- std::string createSqlRarelyUsed(Json filter);
- std::string createSqlPeakTime(Json filter);
- std::string createSqlCommonSetting(Json filter);
- std::string createSqlFrequency(Json filter);
- void replyTriggerItem(int error, Json &jsonResult);
- };
-}
-
-#endif /* End of _CONTEXT_STATS_APP_DB_HANDLE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Json.h>
-#include <Types.h>
-#include "AppStatisticsTypes.h"
-#include "DbInit.h"
-
-#define EMPTY_CHECKER_QID 999
-
-ctx::AppDbInitializer::AppDbInitializer()
-{
- __createTable();
- __checkAppList();
-}
-
-ctx::AppDbInitializer::~AppDbInitializer()
-{
-}
-
-void ctx::AppDbInitializer::__createTable()
-{
- static bool done = false;
- IF_FAIL_VOID(!done);
-
- __dbManager.createTable(0, APP_TABLE_USAGE_LOG, APP_TABLE_USAGE_LOG_COLUMNS, NULL, NULL);
- __dbManager.createTable(0, APP_TABLE_REMOVABLE_APP, APP_TABLE_REMOVABLE_APP_COLUMNS, NULL, NULL);
- __dbManager.execute(0, APP_TEMP_USAGE_FREQ_SQL, NULL);
-
- done = true;
-}
-
-void ctx::AppDbInitializer::__checkAppList()
-{
- __dbManager.execute(EMPTY_CHECKER_QID, "SELECT * FROM " APP_TABLE_REMOVABLE_APP " LIMIT 1", this);
-}
-
-void ctx::AppDbInitializer::__duplicateAppList()
-{
- int err;
- package_manager_filter_h filter;
-
- err = package_manager_filter_create(&filter);
- IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_create() failed");
-
- err = package_manager_filter_add_bool(filter, PACKAGE_MANAGER_PKGINFO_PROP_REMOVABLE, true);
- IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_add_bool() failed");
-
- err = package_manager_filter_foreach_package_info(filter, __packageInfoCb, this);
- IF_FAIL_CATCH_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_filter_foreach_package_info() failed");
-
-CATCH:
- if (filter)
- package_manager_filter_destroy(filter);
-}
-
-bool ctx::AppDbInitializer::__packageInfoCb(package_info_h packageInfo, void *userData)
-{
- int err = package_info_foreach_app_from_package(packageInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
- IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_info_foreach_app_from_package() failed");
- return true;
-}
-
-bool ctx::AppDbInitializer::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
-{
- Json data;
- DatabaseManager dbManager;
-
- data.set(NULL, STATS_APP_ID, appId);
- return dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
-}
-
-void ctx::AppDbInitializer::onTableCreated(unsigned int queryId, int error)
-{
-}
-
-void ctx::AppDbInitializer::onInserted(unsigned int queryId, int error, int64_t rowId)
-{
-}
-
-void ctx::AppDbInitializer::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
- if (queryId != EMPTY_CHECKER_QID) {
- _E("Unknown Query ID: %d", queryId);
- delete this;
- return;
- }
-
- if (records.empty())
- __duplicateAppList();
-
- delete this;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_DB_INITIALIZER_H_
-#define _CONTEXT_STATS_APP_DB_INITIALIZER_H_
-
-#include <package_manager.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
- class AppDbInitializer : public IDatabaseListener {
- private:
- void __createTable();
- void __checkAppList();
- void __duplicateAppList();
-
- void onTableCreated(unsigned int queryId, int error);
- void onInserted(unsigned int queryId, int error, int64_t rowId);
- void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
- static bool __packageInfoCb(package_info_h packageInfo, void *userData);
- static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
-
- DatabaseManager __dbManager;
-
- public:
- AppDbInitializer();
- ~AppDbInitializer();
- };
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_DB_INITIALIZER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <glib.h>
-#include <Json.h>
-#include <Types.h>
-#include <DatabaseManager.h>
-#include "AppStatisticsTypes.h"
-#include "InstallMonitor.h"
-
-static package_manager_event_type_e __lastEventType;
-
-ctx::AppInstallMonitor::AppInstallMonitor() :
- __pkgmgrHandle(NULL)
-{
- __startMonitoring();
-}
-
-ctx::AppInstallMonitor::~AppInstallMonitor()
-{
- __stopMonitoring();
-}
-
-bool ctx::AppInstallMonitor::__startMonitoring()
-{
- int err = package_manager_create(&__pkgmgrHandle);
- IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_create() failed");
-
- err = package_manager_set_event_cb(__pkgmgrHandle, __packageEventCb, this);
- IF_FAIL_RETURN_TAG(err == PACKAGE_MANAGER_ERROR_NONE, false, _E, "package_manager_set_event_cb() failed");
-
- return true;
-}
-
-void ctx::AppInstallMonitor::__stopMonitoring()
-{
- if(__pkgmgrHandle) {
- package_manager_unset_event_cb(__pkgmgrHandle);
- package_manager_destroy(__pkgmgrHandle);
- __pkgmgrHandle = NULL;
- }
-}
-
-void ctx::AppInstallMonitor::__packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData)
-{
- IF_FAIL_VOID_TAG(error == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager error: %d", error);
-
- if (!(eventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) &&
- !(eventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL && eventState == PACKAGE_MANAGER_EVENT_STATE_STARTED)) {
- _D("Skipping event type-%d / state-%d", eventType, eventState);
- return;
- }
-
- package_info_h pkgInfo;
- int err = package_manager_get_package_info(package, &pkgInfo);
- IF_FAIL_VOID_TAG(err == PACKAGE_MANAGER_ERROR_NONE, _E, "package_manager_get_package_info() failed");
-
- __lastEventType = eventType;
-
- err = package_info_foreach_app_from_package(pkgInfo, PACKAGE_INFO_UIAPP, __appInfoCb, userData);
- if (err != PACKAGE_MANAGER_ERROR_NONE)
- _E("package_info_foreach_app_from_package() failed");
-
- package_info_destroy(pkgInfo);
-}
-
-bool ctx::AppInstallMonitor::__appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData)
-{
- DatabaseManager dbManager;
-
- if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_INSTALL) {
- Json data;
- data.set(NULL, STATS_APP_ID, appId);
- dbManager.insert(0, APP_TABLE_REMOVABLE_APP, data, NULL);
- } else if (__lastEventType == PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL) {
- dbManager.execute(0, __createDeletionQuery(APP_TABLE_REMOVABLE_APP, appId).c_str(), NULL);
- dbManager.execute(0, __createDeletionQuery(APP_TABLE_USAGE_LOG, appId).c_str(), NULL);
- }
-
- return true;
-}
-
-std::string ctx::AppInstallMonitor::__createDeletionQuery(const char* tableName, const char* appId)
-{
- std::stringstream query;
- query << "DELETE FROM " << tableName;
- query << " WHERE " STATS_APP_ID " = '" << appId << "'";
- return query.str();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
-#define _CONTEXT_STATS_APP_INSTALL_MONITOR_H_
-
-#include <package_manager.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
- class AppInstallMonitor : public IDatabaseListener {
- private:
- package_manager_h __pkgmgrHandle;
-
- bool __startMonitoring();
- void __stopMonitoring();
-
- static std::string __createDeletionQuery(const char* tableName, const char* appId);
- static void __packageEventCb(const char *type, const char *package, package_manager_event_type_e eventType, package_manager_event_state_e eventState, int progress, package_manager_error_e error, void *userData);
- static bool __appInfoCb(package_info_app_component_type_e compType, const char *appId, void *userData);
-
- void onTableCreated(unsigned int queryId, int error) {}
- void onInserted(unsigned int queryId, int error, int64_t rowId) {}
- void onExecuted(unsigned int queryId, int error, std::vector<Json>& records) {}
-
- public:
- AppInstallMonitor();
- ~AppInstallMonitor();
- };
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_APP_INSTALL_MONITOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include <ContextManager.h>
-#include <Json.h>
-#include "AppInactiveDetector.h"
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetector.h"
-
-
-ctx::app_inactive_detector_provider *ctx::app_inactive_detector_provider::__instance = NULL;
-
-ctx::app_inactive_detector_provider::app_inactive_detector_provider()
-{
-}
-
-ctx::app_inactive_detector_provider::~app_inactive_detector_provider()
-{
-}
-
-ctx::ContextProvider *ctx::app_inactive_detector_provider::create(void *data)
-{
- IF_FAIL_RETURN(!__instance, __instance);
- __instance = new(std::nothrow) app_inactive_detector_provider();
- IF_FAIL_RETURN_TAG(__instance, NULL, _E, "Memory allocation failed");
- _I(BLUE("Created"));
- return __instance;
-}
-
-void ctx::app_inactive_detector_provider::destroy(void *data)
-{
- IF_FAIL_VOID(__instance);
- delete __instance;
- __instance = NULL;
- _I(BLUE("Destroyed"));
-}
-
-int ctx::app_inactive_detector_provider::subscribe(const char *subject, ctx::Json option, ctx::Json* request_result)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int ctx::app_inactive_detector_provider::unsubscribe(const char *subject, ctx::Json option)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-int ctx::app_inactive_detector_provider::read(const char *subject, ctx::Json option, ctx::Json* request_result)
-{
- _I(BLUE("Read"));
- _J("Option", option);
-
- int error = engine->read(subject, option);
- return error == ERR_NONE ? ERR_NONE : error;
-}
-
-int ctx::app_inactive_detector_provider::write(const char *subject, ctx::Json data, ctx::Json* request_result)
-{
- return ERR_NOT_SUPPORTED;
-}
-
-bool ctx::app_inactive_detector_provider::is_supported()
-{
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_H__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_H__
-
-#include <ContextProvider.h>
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetector.h"
-
-namespace ctx {
-
- class app_inactive_detector_provider : public ContextProvider {
-
- public:
- static ContextProvider *create(void *data);
- static void destroy(void *data);
- static bool is_supported();
-
- int subscribe(const char *subject, ctx::Json option, ctx::Json *request_result);
- int unsubscribe(const char *subject, ctx::Json option);
- int read(const char *subject, ctx::Json option, ctx::Json *request_result);
- int write(const char *subject, ctx::Json data, ctx::Json *request_result);
-
- private:
- static app_inactive_detector_provider *__instance;
- inactive_detector *engine;
-
- app_inactive_detector_provider();
- ~app_inactive_detector_provider();
-
- }; /* class app_inactive_detector_provider */
-
-} /* namespace ctx */
-
-#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_H__ */
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__
-
-#include <string>
-
-// Context Items
-//#define APP_INACTIVE_SUBJ_RECALCULATE "app/recalculate"
-#define APP_INACTIVE_SUBJ_GET_APPS_INACTIVE "app/inactive"
-#define APP_INACTIVE_SUBJ_GET_APPS_ACTIVE "app/active"
-#define APP_INACTIVE_SUBJ_GET_APPS_WEIGHT "app/weight"
-#define APP_INACTIVE_SUBJ_UPDATE_CLUSTERS "app/update"
-
-enum {
- APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT = 1,
- APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE = 2,
- APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE = 3,
- APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS = 4
-};
-
-// Database
-#define APP_INACTIVE_DETECTOR_APPINFO_TABLE "context_app_info"
-#define APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "app_info"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID "_id"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "package_name"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE "package_type"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY "is_nodisplay"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED "is_enabled"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT "is_atboot"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED "is_preloaded"
-#define APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP "timestamp"
-
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE "context_app_launch_log"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "app_launch_log"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_ID "_id"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION "duration"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_SYSTEM_VOLUME "system_volume"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_BSSID "bssid"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP "timestamp"
-#define APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP_UTC "timestamp_utc"
-
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE "context_app_activity_classified"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "app_activity_classified"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ID "_id"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID "context_app_info_id"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE "activity_rate"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME "timeframe"
-#define APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "is_active"
-
-
-#define APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "virtual_app_history"
-#define APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT "weight"
-
-// Output Data Key
-#define APP_INACTIVE_DETECTOR_DATA_READ "AppsList"
-#define APP_INACTIVE_DETECTOR_DATA_TIMESTAMP_FROM "timestamp_from"
-#define APP_INACTIVE_DETECTOR_ACTIVITY_RATE "activity_rate"
-#define APP_INACTIVE_DETECTOR_DATA_TIMEFRAME "timeframe"
-#define APP_INACTIVE_DETECTOR_DATA_ISACTIVE "is_active"
-
-//Other
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP "$timestamp"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER "$cluster"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME "$timeframe"
-#define APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES "$values"
-
-// Objects
-struct app_t {
- int id;
- std::string package_name;
- int is_nodisplay;
- int is_enabled;
- int is_atboot;
- int is_preloaded;
- double timestamp;
- int weight;
- int is_active;
- int timeframe;
-};
-
-
-#define APP_TYPE_INACTIVE_INACTIVE 1
-#define APP_TYPE_INACTIVE_ACTIVE 2
-
-
-#define APP_INACTIVE_TASK_START_HOUR 3
-#define APP_INACTIVE_TASK_START_MINUTE 0
-
-
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY 60*60*24
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS 60*60*24*3
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK 60*60*24*7
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS 60*60*24*14
-#define CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH 60*60*24*31
-
-
-
-#endif /* __CONTEXT_APP_INACTIVE_DETECTOR_TYPES__ */
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <ctime>
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "InactiveDetectorWeight.h"
-#include "InactiveDetectorStorage.h"
-#include "InactiveDetectorClassificator.h"
-#include "TimerManager.h"
-
-ctx::inactive_detector::inactive_detector()
-{
- timer_id = timer_mgr.setAt( // execute once every night
- APP_INACTIVE_TASK_START_HOUR,
- APP_INACTIVE_TASK_START_MINUTE,
- DayOfWeek::EVERYDAY,
- this);
- if (timer_id < 0) {
- _E("inactive_detector timer set FAIL");
- return;
- } else {
- update_clusters();
- _D("inactive_detector timer set SUCCESS");
- }
-
-}
-
-ctx::inactive_detector::~inactive_detector()
-{
- if (timer_id >= 0) {
- timer_mgr.remove(timer_id);
- _D("inactive_detejctor timer removed");
- }
-
-}
-
-bool ctx::inactive_detector::onTimerExpired(int timerId)
-{
- update_clusters();
- return true;
-}
-
-int ctx::inactive_detector::update_clusters()
-{
- // define timeframes stack
- std::vector<int> timeframes;
- timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEDAY);
- timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_THREEDAYS);
- timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEWEEK);
- timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_TWOWEEKS);
- timeframes.push_back(CONTEXT_HISTORY_FILTER_TIME_INTERVAL_ONEMONTH);
-
- // recalculate weights
- // foreach timeframe
- for(std::vector<int>::iterator timeframe = timeframes.begin();
- timeframe != timeframes.end(); timeframe++)
- {
- inactive_detector_weight i_detector_weight;
- int error = i_detector_weight.request_weights(*timeframe);
- _E("update_clusters request_weights:%d, error:%d", *timeframe, error);
- }
-
- return ERR_NONE;
-}
-
-void ctx::inactive_detector::on_cluster_update_finished(std::vector<app_t> *apps_with_weight, int error)
-{
- if (error == ERR_NONE) {
- _I("on_cluster_update_finished success");
- }
- // clean memory
- delete apps_with_weight;
-}
-
-int ctx::inactive_detector::read(
- const char *subject,
- ctx::Json option)
-{
- ctx::inactive_detector_storage *handle = new(std::nothrow) ctx::inactive_detector_storage();
- IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
- int err = handle->read(subject, option);
- if (err != ERR_NONE) {
- delete handle;
- return err;
- }
-
- return ERR_NONE;
-}
-
-ctx::Json ctx::inactive_detector::to_json(std::vector<app_t> *app_infos)
-{
- ctx::Json data;
-
- for(std::vector<app_t>::iterator app_info = app_infos->begin();
- app_info != app_infos->end(); app_info++)
- {
- ctx::Json app_j;
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME, app_info->package_name);
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY, app_info->is_nodisplay);
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED, app_info->is_enabled);
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT, app_info->is_atboot);
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED, app_info->is_preloaded);
- app_j.set(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP, app_info->timestamp);
- }
- return data;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_H__
-#define __CONTEXT_INACTIVE_DETECTOR_H__
-
-#include <string>
-#include <Json.h>
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <TimerManager.h>
-
-namespace ctx {
-
- class inactive_detector : public ITimerListener {
- private:
- int timer_id;
- TimerManager timer_mgr;
- public:
- inactive_detector();
- ~inactive_detector();
-
- int read(const char *subject,
- ctx::Json option);
-
- int update_clusters();
- void on_cluster_update_finished(
- std::vector<app_t> *apps_classified,
- int error);
- ctx::Json to_json(std::vector<app_t> *apps);
-
- bool onTimerExpired(int timerId);
- }; /* class inactive_detector */
-
-} /* namespace ctx */
-
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetectorClassificator.h"
-#include "InactiveDetectorClassificatorKmeans.h"
-
-int ctx::inactive_detector_classificator::classify(std::vector<app_t> *apps_with_weights)
-{
- inactive_detector_classificator_kmeans kmeans;
- int error = kmeans.classify(apps_with_weights);
-
- return error;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
-#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <Json.h>
-
-namespace ctx {
-
- class inactive_detector_classificator
- {
- public:
- inactive_detector_classificator();
- ~inactive_detector_classificator();
-
- int classify(std::vector<app_t> *apps_with_weights);
- }; /* class inactive_detector_classificator */
-
-} /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Types.h>
-#include "AppInactiveDetectorTypes.h"
-#include "InactiveDetectorClassificatorKmeans.h"
-#include "InactiveDetectorClassificatorKmeansTypes.h"
-#include <math.h>
-#include <stdlib.h>
-
-double ctx::inactive_detector_classificator_kmeans::randomf(double x)
-{
- return x * rand() / (RAND_MAX - 1.);
-}
-
-double ctx::inactive_detector_classificator_kmeans::glide_function(double x)
-{
- double value = sqrt(log(x) + 1);
- return (value > 0 ? value : 0);
-}
-
-point_s *ctx::inactive_detector_classificator_kmeans::reproject_to_2d(std::vector<app_t> *apps_with_weights)
-{
- int distr_size = apps_with_weights->size();
- point_s *p = new point_s[distr_size];
-
- int i=0;
- for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
- apps_with_weight != apps_with_weights->end(); apps_with_weight++)
- {
- point_s the_point;
-
- the_point.x = glide_function(apps_with_weight->weight); // normalize weight values
- the_point.y = 0; //remove 3rd dimension of the data
- the_point.origin_id = apps_with_weight->package_name;
-
- p[i] = the_point;
- i++;
- }
-
- return p;
-}
-
-bool ctx::inactive_detector_classificator_kmeans::annotate_data(std::vector<app_t> *apps_with_weights, point_s *c)
-{
- int i=0, max_group=-1;
-
- for(std::vector<app_t>::iterator apps_with_weight = apps_with_weights->begin();
- apps_with_weight != apps_with_weights->end(); apps_with_weight++)
- {
- apps_with_weight->is_active = c[i].group;
- i++;
- max_group = c[i].group > max_group ? c[i].group : max_group;
- }
-
- return max_group == APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT;
-}
-
-double ctx::inactive_detector_classificator_kmeans::distance_to(point_s *p_from,
- point_s *p_to)
-{
- double x = p_from->x - p_to->x, y = p_from->y - p_to->y;
- return x*x + y*y;
-}
-
-int ctx::inactive_detector_classificator_kmeans::nearest(point_s *pt,
- point_s *centers,
- int cluster_number,
- double *distance)
-{
- int i;
- int min_i = pt->group;
- point_s *c;
-
- double d;
- double min_d = HUGE_VAL;
-
- for_n {
- if (min_d >(d = distance_to(c, pt))) {
- min_d = d; min_i = i;
- }
- }
-
- if (distance) *distance = min_d;
- return min_i;
-}
-
-void ctx::inactive_detector_classificator_kmeans::kpp(point_s *points, int length, point_s *centers, int cluster_number)
-{
- int j;
- int n_cluster;
- double sum;
- double *d = new double[length];
-
- point_s *p;
- centers[0] = points[rand() % length];
- for (n_cluster = 1; n_cluster < cluster_number; n_cluster++) {
- sum = 0;
- for_len{
- nearest(p, centers, n_cluster, d + j);
- sum += d[j];
- }
- sum = randomf(sum);
- for_len{
- if ((sum -= d[j]) > 0) continue;
- centers[n_cluster] = points[j];
- break;
- }
- }
- for_len p->group = nearest(p, centers, n_cluster, 0);
-
- delete d;
-}
-
-point_s *ctx::inactive_detector_classificator_kmeans::lloyd(point_s *points, int length, int cluster_number)
-{
- int i, j, min_i;
- int changed;
-
- point_s *centers = new point_s;
- point_s *p, *c;
-
- /* k++ init */
- kpp(points, length, centers, cluster_number);
-
- do {
- /* group element for centroids are used as counters */
- for_n{ c->group = 0; c->x = c->y = 0; }
- for_len{
- c = centers + p->group;
- c->group++;
- c->x += p->x; c->y += p->y;
- }
- for_n{ c->x /= c->group; c->y /= c->group; }
-
- changed = 0;
- /* find closest centroid of each point */
- for_len{
- min_i = nearest(p, centers, cluster_number, 0);
- if (min_i != p->group) {
- changed++;
- p->group = min_i;
- }
- }
- } while (changed > (length >> 10)); /* stop when 99.9% of points are good */
-
- for_n{ c->group = i; }
-
- return centers;
-}
-
-int ctx::inactive_detector_classificator_kmeans::classify(std::vector<app_t> *apps_with_weights)
-{
- //array of generated points
- point_s *v = reproject_to_2d(apps_with_weights);
- //mark cluster for each point, output centers
- point_s *c = lloyd(v, apps_with_weights->size(), APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT);
- //append the result to input data
- bool classification_is_success = annotate_data(apps_with_weights, c);
-
- return classification_is_success ? ERR_NONE : ERR_OPERATION_FAILED;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
-#define __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__
-
-#include <vector>
-#include "InactiveDetectorClassificatorKmeansTypes.h"
-#include <Json.h>
-
-namespace ctx {
-
- #define for_n for (c = centers, i = 0; i < cluster_number; i++, c++)
- #define for_len for (j = 0, p = points; j < length; j++, p++)
-
- class inactive_detector_classificator_kmeans
- {
- private:
- double randomf(double x);
- double glide_function(double x);
- point_s *reproject_to_2d(std::vector<app_t> *apps_with_weights);
- bool annotate_data(std::vector<app_t> *apps_with_weights, point_s *c);
-
- double distance_to(point_s *p_from, point_s *p_to);
- int nearest(point_s *pt, point_s *centers, int cluster_number, double *distance);
- void kpp(point_s *points, int length, point_s *centers, int centers_count);
- point_s *lloyd(point_s *points, int length, int cluster_number);
- public:
- inactive_detector_classificator_kmeans();
- ~inactive_detector_classificator_kmeans();
-
- int classify(std::vector<app_t> *apps_with_weights);
- }; /* class inactive_detector_classificator_kmeans */
-} /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
-#define __CONTEXT_APP_INACTIVE_DETECTOR_CLASSIFICATOR_KMEANS_TYPES__
-
-#define APP_INACTIVE_DETECTOR_KMEANS_CLUSTER_COUNT 2
-
-typedef struct {
- std::string origin_id;
- double x;
- double y;
- int group;
-} point_s;
-
-#endif
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <ctime>
-#include <string>
-#include <memory>
-#include <Types.h>
-#include "InactiveDetector.h"
-#include "InactiveDetectorStorage.h"
-#include "InactiveDetectorStorageQueries.h"
-#include "InactiveDetectorClassificator.h"
-#include "AppInactiveDetectorTypes.h"
-
-/*int ctx::inactive_detector_storage::create_table()
-{
- bool ret = __dbManager.createTable(0, WIFI_TABLE_NAME, WIFI_CREATE_TABLE_COLUMNS, NULL, NULL);
- _D("Table Creation Request: %s", ret ? "SUCCESS" : "FAIL");
- return ret;
-}*/
-
-
-
-// expected Json format example: {timeframe: 1; is_active: 0}
-int ctx::inactive_detector_storage::read(
- const char *subject,
- ctx::Json filter)
-{
- std::string query;
- query = query_get_apps(subject, filter);
-
- IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
- bool ret = __dbManager.execute(
- STR_EQ(subject, APP_INACTIVE_SUBJ_GET_APPS_INACTIVE) ?
- APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE :
- APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE,
- query.c_str(),
- this);
-
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
- return ERR_NONE;
-}
-
-std::string ctx::inactive_detector_storage::query_get_apps(const char *subject, ctx::Json filter)
-{
- double timeframe;
- int is_active;
-
- std::string query(GET_APP_INFO_INACTIVE_QUERY);
- std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
- std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
-
- filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_TIMEFRAME, &timeframe);
- filter.get(NULL, APP_INACTIVE_DETECTOR_DATA_ISACTIVE, &is_active);
-
- std::stringstream timeframe_stream;
- timeframe_stream << timeframe;
-
- std::stringstream is_active_stream;
- is_active_stream << is_active;
-
- inject_params(query, placeholder_timeframe, timeframe_stream.str());
- inject_params(query, placeholder_is_active, is_active_stream.str());
-
- return query;
-}
-
-std::string ctx::inactive_detector_storage::query_update_apps(std::vector<app_t> *apps_with_weights)
-{
- std::string delete_query(DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME);
- std::string insert_query(INSERT_APP_ACTIVITY_CLASSIFIED);
- std::string placeholder_timeframe(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME);
- std::string placeholder_values(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES);
- std::string placeholder_is_active(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER);
-
- std::stringstream timeframe_stream;
- timeframe_stream << apps_with_weights->front().timeframe;
-
- inject_params(delete_query, placeholder_timeframe, timeframe_stream.str());
- inject_params(insert_query, placeholder_values, subquery_form_values(apps_with_weights));
-
- std::stringstream result;
- result << delete_query << insert_query;
- return result.str();
-}
-
-// foreach app_info id+cluster -> select for insert
-std::string ctx::inactive_detector_storage::subquery_form_values(std::vector<app_t> *apps_with_weights)
-{
- std::stringstream select_elements;
-
- for(std::vector<app_t>::iterator row = apps_with_weights->begin();
- row != apps_with_weights->end(); row++)
- {
- //SELECT 1 as is_active, 1 as timeframe, 3964 as context_app_info_id
- std::stringstream select_element;
- select_element << " SELECT " << row->is_active << " as ";
- select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE;
- select_element << ", " << row->timeframe << " as ";
- select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME;
- select_element << ", " << row->id << " as ";
- select_element << APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID;
-
- if ((row != apps_with_weights->end()) && (row == --apps_with_weights->end()))
- select_element << " UNION ";
-
- select_elements << select_element;
- }
-
- return select_elements.str();
-}
-
-void ctx::inactive_detector_storage::json_to_object(std::vector<Json>& records,
- std::vector<app_t> *apps_with_weights, bool result_mode)
-{
- for(std::vector<Json>::iterator row = records.begin();
- row != records.end(); row++)
- {
- app_t app_with_weight;
- if (result_mode)
- {
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME,
- &app_with_weight.package_name);
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY,
- &app_with_weight.is_nodisplay);
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED,
- &app_with_weight.is_enabled);
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT,
- &app_with_weight.is_atboot);
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED,
- &app_with_weight.is_preloaded);
- row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
- &app_with_weight.weight);
- }
- else
- {
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID,
- &app_with_weight.id);
- row->get(NULL, APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP,
- &app_with_weight.timestamp);
- row->get(NULL, APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT,
- &app_with_weight.weight);
- row->get(NULL, APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE,
- &app_with_weight.is_active);
- }
-
- apps_with_weights->push_back(app_with_weight);
- }
-}
-
-void ctx::inactive_detector_storage::onExecuted(unsigned int query_id,
- int error,
- std::vector<Json>& records)
-{
- if (error != ERR_NONE) {
- _E("query_id:%d, error:%d", query_id, error);
- return;
- }
-
- std::vector<app_t> *apps_with_weights = NULL;
- if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_INACTIVE ||
- query_id == APP_INACTIVE_QUERY_ID_GET_APPS_ACTIVE)
- {
- json_to_object(records, apps_with_weights, TRUE);
- }
- else if (query_id == APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT) {
-
- json_to_object(records, apps_with_weights, FALSE);
-
- if (apps_with_weights->size() > 0) {
- inactive_detector_classificator i_detector_classificator;
- int _error = i_detector_classificator.classify(apps_with_weights);
-
- if(_error == ERR_NONE)
- {
- std::string query;
- query = query_update_apps(apps_with_weights);
- bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS,
- query.c_str(),
- this);
- _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
- }
- else
- {
- _E("classification query_id:%d, error:%d",
- query_id, _error);
- }
- }
- }
- else if (query_id == APP_INACTIVE_QUERY_ID_UPDATE_CLUSTERS) {
- _D("UPDATE_CLUSTERS execute query id: %d", query_id);
- }
- else {
- _E("unknown query_id:%d", query_id);
- }
-}
-
-void ctx::inactive_detector_storage::inject_params(std::string& str, const std::string& from, const std::string& to)
-{
- if(from.empty())
- return;
- size_t start_pos = 0;
- while((start_pos = str.find(from, start_pos)) != std::string::npos) {
- str.replace(start_pos, from.length(), to);
- start_pos += to.length();
- }
-}
-
-// normalzie weights
-int ctx::inactive_detector_storage::update_ranks()
-{
- return ERR_NONE;
-}
-
-int ctx::inactive_detector_storage::get_apps_info_w_weights(
- double timestamp_from)
-{
- std::stringstream timestamp_stream;
- timestamp_stream << timestamp_from;
- std::string timestamp_str = timestamp_stream.str();
-
- std::string query(GET_APP_INFO_W_WEIGHT_QUERY);
- std::string placeholder(APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP);
-
- inject_params(query, placeholder, timestamp_str);
-
- bool ret = __dbManager.execute(APP_INACTIVE_QUERY_ID_GET_APPS_WEIGHT,
- query.c_str(),
- this);
- _D("load visits execute query result: %s", ret ? "SUCCESS" : "FAIL");
-
- return ERR_NONE ;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
-#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-#include <Json.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
- class inactive_detector_storage : public IDatabaseListener
- {
- private:
- //int type; //TODO: enum
- void inject_params(std::string& str,
- const std::string& from,
- const std::string& to);
-
- void json_to_object(std::vector<Json>& records,
- std::vector<app_t> *apps_with_weights, bool result_mode);
-
- std::string query_get_apps(const char *subject,
- ctx::Json filter);
-
- std::string query_update_apps(std::vector<app_t> *apps_with_weights);
-
- std::string subquery_form_values(std::vector<app_t> *apps_with_weights);
-
- void onTableCreated(unsigned int query_id, int error) {}
- void onInserted(unsigned int query_id, int error, int64_t row_id) {}
- void onExecuted(unsigned int query_id, int error, std::vector<Json>& records);
-
- DatabaseManager __dbManager;
-
- public:
- inactive_detector_storage();
- ~inactive_detector_storage();
-
- int read(const char *subject,
- ctx::Json filter);
-
- int update_ranks();
- int get_apps_info_w_weights(double timestamp_from);
- }; /* class inactive_detector_storage */
-
-} /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
-#define __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__
-
-#include <vector>
-#include "AppInactiveDetectorTypes.h"
-
-/*
-
---1 calculate weights
-SELECT
- app_info._id,
- app_info.package_name,
- app_info.is_nodisplay,
- app_info.is_enabled,
- app_info.is_atboot,
- app_info.is_preloaded,
- app_info.timestamp,
-
- app_hist_g.weight as weight
-FROM
- context_app_info app_info
-
-INNER JOIN
-
- (SELECT
- distinct package_name ,
- IFNULL((select count(package_name) from context_app_launch_log
- where package_name == app_hist.package_name AND timestamp> 8640412900), 0 )
- *
- IFNULL((select sum(duration) from context_app_launch_log
- where package_name == app_hist.package_name AND timestamp> 8640412900) , 0)
- as weight
-
- FROM context_app_launch_log app_hist
-)app_hist_g
-
-ON app_hist_g.package_name
-=
-app_info.package_name
-
-ORDER BY app_hist_g.weight
-
-*/
-
-#define GET_APP_INFO_W_WEIGHT_QUERY "SELECT "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_TYPE ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_TIMESTAMP ", "\
- ""\
- " " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
- ""\
- " FROM " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS \
- ""\
- " INNER JOIN " \
- " (SELECT "\
- " DISTINCT " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "," \
- " IFNULL((SELECT COUNT(" APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ")" \
- " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
- " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
- " AND " \
- " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
- "), 0) " \
- " * " \
- " IFNULL((SELECT SUM(" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_DURATION ")" \
- " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE \
- " WHERE " APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME "==" APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
- " AND " \
- " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_COLUMN_TIMESTAMP " >= " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMESTAMP \
- ""\
- "), 0) " \
- " as " APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT \
- " FROM " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE " " APP_INACTIVE_DETECTOR_APPLAUNCH_LOG_TABLE_ALIAS \
- ") " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS \
- " ON " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
- " = " \
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME \
- " ORDER BY " APP_INACTIVE_DETECTOR_VIRTUAL_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_VIRTUAL_COLUMN_WEIGHT
-
-/*
---2 select inner join context_app_info
-SELECT
- app_info.package_name,
- app_info.is_nodisplay,
- app_info.is_enabled,
- app_info.is_atboot,
- app_info.is_preloaded,
-
- activity_classified.activity_rate
-
-FROM
- context_activity_classified activity_classified
-INNER JOIN
- context_app_info app_info
-ON activity_classified.context_app_info_id = app_info._id
-
-WHERE
- activity_classified.is_active = 1
- AND
- activity_classified.timeframe = 1
-*/
-
-#define GET_APP_INFO_INACTIVE_QUERY "SELECT "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_PACKAGE_NAME ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_NODISPLAY ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ENABLED ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_ATBOOT ", "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_IS_PRELOADED ", "\
- " "\
- " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_ACTIVITY_RATE " "\
- " FROM "\
- " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS " "\
- " INNER JOIN "\
- " " APP_INACTIVE_DETECTOR_APPINFO_TABLE " " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS " "\
- " ON " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ""\
- " = " APP_INACTIVE_DETECTOR_APPINFO_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_APPINFO_COLUMN_ID " "\
- " WHERE "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ""\
- " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_CLUSTER ""\
- " AND "\
- " " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE_ALIAS "." APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ""\
- " = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME ""
-
-/*
---3 update ranks and clusters for each timeframe: delete all for each time frame, add new calculations for apps
-DELETE FROM
- context_activity_classified
-WHERE
- timeframe = 1
-*/
-
-#define DELETE_APP_ACTIVITY_CLASSIFIED_BY_TIMEFRAME "DELETE FROM "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
- " WHERE "\
- " timeframe = " APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_TIMEFRAME
-
-
-/*INSERT INTO
- context_activity_classified
- (is_active,
- timeframe,
- context_app_info_id)
-SELECT
- is_active,
- timeframe,
- context_app_info_id
-FROM --make loop
- (
- SELECT 1 as is_active, 1 as timeframe, 3964 as context_app_info_id
- UNION
- SELECT 0 as is_active, 1 as timeframe, 3964 as context_app_info_id
- ) q
-*/
-
-#define INSERT_APP_ACTIVITY_CLASSIFIED " INSERT INTO "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_TABLE \
- "( " APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE ", "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID ")" \
-"SELECT " \
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_IS_ACTIVE "," \
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_TIMEFRAME ", "\
- APP_INACTIVE_DETECTOR_ACTIVITYCLASSIFIED_COLUMN_CONTEXT_APP_INFO_ID \
-"FROM"\
- "(" \
- APP_INACTIVE_DETECTOR_VALUE_PLACEHOLDER_VALUES \
- ") q"
-
-
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_STORAGE_QUERIES_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Types.h>
-#include "InactiveDetectorWeight.h"
-#include "InactiveDetectorStorage.h"
-
-int ctx::inactive_detector_weight::request_weights(
- double timestamp_from)
-{
- inactive_detector_storage ids;
- // query the database for the result
- int error = ids.get_apps_info_w_weights(timestamp_from);
-
- return error;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
-#define __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__
-
-// #include <string>
-// #include <sstream>
-
-namespace ctx {
-
- class inactive_detector_weight {
- public:
- inactive_detector_weight() {};
- ~inactive_detector_weight() {};
- int request_weights(double timestamp_from);// {};
- }; /* class inactive_detector_weight */
-
-} /* namespace ctx */
-
-#endif /* __CONTEXT_INACTIVE_DETECTOR_WEIGHT_H__ */
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "MediaStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-MediaDbHandle::MediaDbHandle(ContextProvider *provider) :
- StatsDbHandleBase(provider)
-{
-}
-
-MediaDbHandle::~MediaDbHandle()
-{
-}
-
-int MediaDbHandle::read(Json filter)
-{
- //TODO: filter validation (in the API side?)
- std::string query;
- const char *subject = reqProvider->getSubject();
-
- if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC)) {
- query = createSqlPeakTime(MEDIA_TYPE_MUSIC, filter);
-
- } else if (STR_EQ(subject, MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO)) {
- query = createSqlPeakTime(MEDIA_TYPE_VIDEO, filter);
-
- } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC)) {
- query = createSqlCommonSetting(MEDIA_TYPE_MUSIC, filter);
-
- } else if (STR_EQ(subject, MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO)) {
- query = createSqlCommonSetting(MEDIA_TYPE_VIDEO, filter);
-
- } else if (STR_EQ(subject, MEDIA_SUBJ_MUSIC_FREQUENCY)) {
- isTriggerItem = true;
- query = createSqlFrequency(MEDIA_TYPE_MUSIC, filter);
-
- } else if (STR_EQ(subject, MEDIA_SUBJ_VIDEO_FREQUENCY)) {
- isTriggerItem = true;
- query = createSqlFrequency(MEDIA_TYPE_VIDEO, filter);
- }
-
- IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
- bool ret = executeQuery(filter, query.c_str());
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
- return ERR_NONE;
-}
-
-std::string MediaDbHandle::createWhereClause(int mediaType, Json filter)
-{
- std::stringstream whereClause;
-
- whereClause << CX_MEDIA_TYPE " = " << mediaType << " AND ";
- whereClause << StatsDbHandleBase::createWhereClause(filter);
-
- return whereClause.str();
-}
-
-std::string MediaDbHandle::createSqlPeakTime(int mediaType, Json filter)
-{
- std::string where = createWhereClause(mediaType, filter);
- return StatsDbHandleBase::createSqlPeakTime(filter, MEDIA_TABLE_NAME, where);
-}
-
-std::string MediaDbHandle::createSqlCommonSetting(int mediaType, Json filter)
-{
- std::string where = createWhereClause(mediaType, filter);
- return StatsDbHandleBase::createSqlCommonSetting(filter, MEDIA_TABLE_NAME, where);
-}
-
-std::string MediaDbHandle::createSqlFrequency(int mediaType, Json filter)
-{
- Json filterCleaned;
- std::string weekStr;
- std::string timeOfDay;
-
- if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
- filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
- if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
- filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
- std::string whereClause = createWhereClause(mediaType, filterCleaned);
-
- std::stringstream query;
- query <<
- "SELECT IFNULL(COUNT(*),0) AS " STATS_TOTAL_COUNT \
- " FROM " MEDIA_TABLE_NAME \
- " WHERE " << whereClause;
-
- return query.str();
-}
-
-void MediaDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
- IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_MUSIC_FREQUENCY) ||
- STR_EQ(reqProvider->getSubject(), MEDIA_SUBJ_VIDEO_FREQUENCY), _E, "Invalid subject");
-
- Json results;
- int val;
-
- jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
- results.set(NULL, STATS_TOTAL_COUNT, val);
-
- reqProvider->replyToRead(reqFilter, error, results);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
-#define _CONTEXT_STATS_MEDIA_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
- class MediaDbHandle : public StatsDbHandleBase {
- public:
- MediaDbHandle(ContextProvider *provider);
- ~MediaDbHandle();
-
- int read(Json filter);
-
- protected:
- std::string createWhereClause(int mediaType, Json filter);
- std::string createSqlPeakTime(int mediaType, Json filter);
- std::string createSqlCommonSetting(int mediaType, Json filter);
- std::string createSqlFrequency(int mediaType, Json filter);
- void replyTriggerItem(int error, Json &jsonResult);
- };
-}
-
-#endif /* End of _CONTEXT_STATS_MEDIA_DB_HANDLE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <time.h>
-#include <Types.h>
-#include "../shared/SystemInfo.h"
-#include "MediaStatisticsTypes.h"
-#include "DbHandle.h"
-#include "MediaContentMonitor.h"
-
-#define PLAYCOUNT_RETENTION_PERIOD 259200 /* 1 month in secs */
-#define ONE_DAY_IN_SEC 86400
-
-ctx::MediaContentMonitor::MediaContentMonitor() :
- __started(false),
- __lastCleanupTime(0)
-{
- __dbManager.createTable(0, MEDIA_TABLE_NAME, MEDIA_TABLE_COLUMNS, NULL, NULL);
- __dbManager.execute(0, MEDIA_PLAYCOUNT_TABLE_SCHEMA, NULL);
-
- __started = __startMonitoring();
-}
-
-ctx::MediaContentMonitor::~MediaContentMonitor()
-{
- if (__started)
- __stopMonitoring();
-}
-
-bool ctx::MediaContentMonitor::__startMonitoring()
-{
- int err;
- err = media_content_connect();
- IF_FAIL_RETURN_TAG(err == MEDIA_CONTENT_ERROR_NONE, false, _E, "media_content_connect() failed");
-
- err = media_content_set_db_updated_cb(__onMediaContentDbUpdated, this);
- if (err != MEDIA_CONTENT_ERROR_NONE) {
- media_content_disconnect();
- _E("media_content_set_db_updated_cb() failed");
- return false;
- }
-
- return true;
-}
-
-void ctx::MediaContentMonitor::__stopMonitoring()
-{
- media_content_unset_db_updated_cb();
- media_content_disconnect();
-}
-
-void ctx::MediaContentMonitor::__onMediaContentDbUpdated(
- media_content_error_e error, int pid,
- media_content_db_update_item_type_e updateItem,
- media_content_db_update_type_e updateType,
- media_content_type_e mediaType,
- char *uuid, char *path, char *mimeType, void *userData)
-{
- IF_FAIL_VOID(error == MEDIA_CONTENT_ERROR_NONE && uuid != NULL);
- IF_FAIL_VOID(updateItem == MEDIA_ITEM_FILE && updateType == MEDIA_CONTENT_UPDATE);
- IF_FAIL_VOID(mediaType == MEDIA_CONTENT_TYPE_MUSIC || mediaType == MEDIA_CONTENT_TYPE_VIDEO);
-
- media_info_h media = NULL;
- media_info_get_media_from_db(uuid, &media);
- IF_FAIL_VOID_TAG(media, _E, "media_info_get_media_from_db() failed");
-
- int cnt = -1;
- media_info_get_played_count(media, &cnt);
- media_info_destroy(media);
- IF_FAIL_VOID_TAG(cnt >= 0, _E, "Invalid play count");
-
- MediaContentMonitor *instance = static_cast<MediaContentMonitor*>(userData);
- instance->__updatePlayCount(uuid,
- (mediaType == MEDIA_CONTENT_TYPE_MUSIC) ? MEDIA_TYPE_MUSIC : MEDIA_TYPE_VIDEO,
- cnt);
-}
-
-void ctx::MediaContentMonitor::__appendCleanupQuery(std::stringstream &query)
-{
- int timestamp = static_cast<int>(time(NULL));
- IF_FAIL_VOID(timestamp - __lastCleanupTime >= ONE_DAY_IN_SEC);
-
- __lastCleanupTime = timestamp;
-
- query <<
- "DELETE FROM Log_MediaPlayCount WHERE UTC < strftime('%s', 'now') - " << PLAYCOUNT_RETENTION_PERIOD << ";" \
- "DELETE FROM " MEDIA_TABLE_NAME " WHERE UTC < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD << ";";
-}
-
-void ctx::MediaContentMonitor::__updatePlayCount(const char *uuid, int type, int count)
-{
- std::stringstream query;
- query <<
- /* Inserting the media record to the play count table, if not exist */
- "INSERT OR IGNORE INTO Log_MediaPlayCount" \
- " (UUID, MediaType) VALUES ('" << uuid << "'," << type <<");" \
- /* Updating the play count and getting the diff from the previous count */
- "UPDATE Log_MediaPlayCount SET Diff = " << count << " - Count," \
- " Count = " << count << ", UTC = strftime('%s', 'now')" \
- " WHERE UUID = '" << uuid << "';";
- __appendCleanupQuery(query);
- query <<
- /* Checking whether the play count changes */
- "SELECT MediaType FROM Log_MediaPlayCount" \
- " WHERE UUID = '" << uuid << "' AND Diff > 0;";
-
- __dbManager.execute(0, query.str().c_str(), this);
-}
-
-void ctx::MediaContentMonitor::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
- IF_FAIL_VOID(!records.empty());
-
- int mediaType = 0;
- records[0].get(NULL, CX_MEDIA_TYPE, &mediaType);
-
- __insertLog(mediaType);
-}
-
-void ctx::MediaContentMonitor::__insertLog(int mediaType)
-{
- int systemVolume = -1, mediaVolume = -1, audioJack = -1;
-
- Json data;
- data.set(NULL, CX_MEDIA_TYPE, mediaType);
-
- if (ctx::system_info::getAudioJackState(&audioJack))
- data.set(NULL, STATS_AUDIO_JACK, audioJack);
-
- if (ctx::system_info::getVolume(&systemVolume, &mediaVolume)) {
- data.set(NULL, STATS_SYSTEM_VOLUME, systemVolume);
- data.set(NULL, STATS_MEDIA_VOLUME, mediaVolume);
- }
-
- __dbManager.insert(0, MEDIA_TABLE_NAME, data, NULL);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
-#define _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_
-
-#include <sstream>
-#include <media_content.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
-
- class MediaContentMonitor : public IDatabaseListener {
- private:
- bool __started;
- int __lastCleanupTime;
- DatabaseManager __dbManager;
-
- bool __startMonitoring();
- void __stopMonitoring();
-
- void __appendCleanupQuery(std::stringstream &query);
- void __updatePlayCount(const char *uuid, int type, int count);
- void __insertLog(int mediaType);
-
- void onTableCreated(unsigned int queryId, int error) {}
- void onInserted(unsigned int queryId, int error, int64_t rowId) {}
- void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
- static void __onMediaContentDbUpdated(media_content_error_e error, int pid,
- media_content_db_update_item_type_e updateItem,
- media_content_db_update_type_e updateType,
- media_content_type_e mediaType,
- char *uuid, char *path, char *mimeType, void *userData);
-
- public:
- MediaContentMonitor();
- ~MediaContentMonitor();
- };
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_MEDIA_CONTENT_MONITOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_MEDIA_TYPES_H_
-#define _CONTEXT_STATS_MEDIA_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define MEDIA_HISTORY_PRIV "mediahistory.read"
-#define MEDIA_SUBJ_LOGGER "stats/media/logger"
-#define MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC "stats/music/peak_time"
-#define MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO "stats/video/peak_time"
-#define MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC "stats/music/setting"
-#define MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO "stats/video/setting"
-#define MEDIA_SUBJ_MUSIC_FREQUENCY "stats/music/frequency"
-#define MEDIA_SUBJ_VIDEO_FREQUENCY "stats/video/frequency"
-
-#define MEDIA_TABLE_NAME "Log_MediaPlayback"
-#define MEDIA_TABLE_COLUMNS \
- "MediaType INTEGER NOT NULL, " \
- "SystemVolume INTEGER, MediaVolume INTEGER, AudioJack INTEGER, " \
- "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
- "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define MEDIA_PLAYCOUNT_TABLE_SCHEMA \
- "CREATE TABLE IF NOT EXISTS Log_MediaPlayCount" \
- " (UUID TEXT NOT NULL PRIMARY KEY, MediaType INTEGER NOT NULL," \
- " Count INTEGER DEFAULT 0, Diff INTEGER DEFAULT 0, " \
- " UTC TIMESTAMP DEFAULT (strftime('%s', 'now')))"
-
-#define CX_MEDIA_TYPE "MediaType"
-
-enum mediaType_e {
- MEDIA_TYPE_MUSIC = 1,
- MEDIA_TYPE_VIDEO,
-};
-
-#endif /* End of _CONTEXT_STATS_MEDIA_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "MediaStatisticsTypes.h"
-#include "MediaStatsLogger.h"
-
-using namespace ctx;
-
-MediaStatsLogger::MediaStatsLogger() :
- ContextProvider(MEDIA_SUBJ_LOGGER)
-{
-}
-
-MediaStatsLogger::~MediaStatsLogger()
-{
-}
-
-int MediaStatsLogger::subscribe(Json option, Json* requestResult)
-{
- return ERR_NONE;
-}
-
-int MediaStatsLogger::unsubscribe(Json option)
-{
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_MEDIA_STATS_LOGGER_H_
-#define _CONTEXT_MEDIA_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "MediaContentMonitor.h"
-
-namespace ctx {
-
- class MediaStatsLogger : public ContextProvider {
- public:
- MediaStatsLogger();
- ~MediaStatsLogger();
-
- int subscribe(Json option, Json *requestResult);
- int unsubscribe(Json option);
-
- void submitTriggerItem() {}
-
- private:
- MediaContentMonitor __contentMon;
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_MEDIA_STATS_LOGGER_H_ */
-
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "MediaStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-MediaStatsProvider::MediaStatsProvider(const char *subject) :
- ContextProvider(subject)
-{
-}
-
-MediaStatsProvider::~MediaStatsProvider()
-{
-}
-
-bool MediaStatsProvider::isSupported()
-{
- /* TODO */
- return true;
-}
-
-void MediaStatsProvider::submitTriggerItem()
-{
-}
-
-int MediaStatsProvider::read(Json option, Json* requestResult)
-{
- MediaDbHandle *handle = new(std::nothrow) MediaDbHandle(this);
- IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
- int err = handle->read(option);
- if (err != ERR_NONE) {
- delete handle;
- return err;
- }
-
- return ERR_NONE;
-}
-
-void MusicFreqProvider::submitTriggerItem()
-{
- registerTriggerItem(OPS_READ,
- "{" TRIG_DEF_TOTAL_COUNT "}",
- "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
-}
-
-void VideoFreqProvider::submitTriggerItem()
-{
- registerTriggerItem(OPS_READ,
- "{" TRIG_DEF_TOTAL_COUNT "}",
- "{" TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK "}");
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_MEDIA_STATS_PROVIDER_H_
-#define _CONTEXT_MEDIA_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "MediaStatisticsTypes.h"
-
-namespace ctx {
-
- class MediaStatsProvider : public ContextProvider {
- public:
- int read(Json option, Json* requestResult);
-
- bool isSupported();
- virtual void submitTriggerItem();
-
- protected:
- MediaStatsProvider(const char *subject);
- virtual ~MediaStatsProvider();
- }; /* class MediaStatsProvider */
-
-
- class MusicPeakTimeProvider : public MediaStatsProvider {
- public:
- MusicPeakTimeProvider() :
- MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_MUSIC) {}
- };
-
-
- class VideoPeakTimeProvider : public MediaStatsProvider {
- public:
- VideoPeakTimeProvider() :
- MediaStatsProvider(MEDIA_SUBJ_PEAK_TIME_FOR_VIDEO) {}
- };
-
-
- class MusicSettingProvider: public MediaStatsProvider {
- public:
- MusicSettingProvider() :
- MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_MUSIC) {}
- };
-
-
- class VideoSettingProvider: public MediaStatsProvider {
- public:
- VideoSettingProvider() :
- MediaStatsProvider(MEDIA_SUBJ_COMMON_SETTING_FOR_VIDEO) {}
- };
-
-
- class MusicFreqProvider: public MediaStatsProvider {
- public:
- MusicFreqProvider() :
- MediaStatsProvider(MEDIA_SUBJ_MUSIC_FREQUENCY) {}
-
- void submitTriggerItem();
- };
-
-
- class VideoFreqProvider: public MediaStatsProvider {
- public:
- VideoFreqProvider() :
- MediaStatsProvider(MEDIA_SUBJ_VIDEO_FREQUENCY) {}
-
- void submitTriggerItem();
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_MEDIA_STATS_PROVIDER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule.h"
-
-std::ostream& ctx::operator<<(std::ostream &out, const ctx::AssocRule &rule)
-{
- return out << rule.antecedent << " => " << rule.consequent
- << "; support:" << rule.support << "; confidence:" << rule.confidence;
-}
-
-bool ctx::operator==(const ctx::AssocRule& left, const ctx::AssocRule& right)
-{
- return left.antecedent == right.antecedent &&
- left.consequent == right.consequent &&
- left.support == right.support &&
- left.confidence == right.confidence;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_H_
-#define _PREDICTION_ASSOC_RULE_H_
-
-#include "item_set.h"
-#include <iostream>
-
-namespace ctx {
-
- struct AssocRule {
- ItemSet antecedent;
- ItemSet consequent;
- double support;
- double confidence;
-
- AssocRule(const ItemSet& antecedent_,
- const ItemSet& consequent_,
- const double& support_,
- const double& confidence_)
- : antecedent(antecedent_)
- , consequent(consequent_)
- , support(support_)
- , confidence(confidence_) {}
- };
-
- bool operator==(const AssocRule& left, const AssocRule& right);
-
- std::ostream& operator<<(std::ostream &out, const AssocRule &rule);
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule_miner.h"
-#include "single_category_item_id_filter.h"
-#include "basket_filter.h"
-#include "basket_compressor.h"
-#include "baskets_agregator.h"
-#include "assoc_rule_producer.h"
-#include "weight_apriori.h"
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_baskets(
- std::list<ctx::Basket>& initBaskets,
- ctx::ItemCatalogue& itemCatalogue,
- double minSupport,
- double minConfidence,
- std::string consequentCategory)
-{
- SingleCategoryItemIdFilter itemIdFilter(consequentCategory, itemCatalogue);
- BasketFilter::filter_in_place(initBaskets,itemIdFilter);
-
- std::list<Basket> compressedBaskets = BasketCompressor::compress(initBaskets);
-
- BasketsAgregator basketsAgregator(compressedBaskets);
- basketsAgregator.generate_bitsets(itemCatalogue.maxId());
- auto freqItemSets = WeightApriori::find_frequent_itemid_sets(basketsAgregator, minSupport);
- auto rulesOfIds = AssocRuleProducer::generate_rules(freqItemSets, itemIdFilter, minConfidence);
- return remove_assoc_rule_ids(rulesOfIds, itemCatalogue);
-}
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::mine_from_events(
- const ctx::EventSet& events,
- double minSupport,
- double minConfidence,
- std::string consequentCategory)
-{
- ItemCatalogue itemCatalogue;
-
- BasketProducer basketProducer(itemCatalogue);
- for (auto& event : events) {
- basketProducer.put_event(event);
- }
-
- std::list<Basket> initBaskets = basketProducer.make_baskets();
-
- return mine_from_baskets(initBaskets, itemCatalogue, minSupport, minConfidence, consequentCategory);
-}
-
-std::list<ctx::AssocRule> ctx::AssocRuleMiner::remove_assoc_rule_ids(
- const std::list<ctx::AssocRuleOfIds>& rulesOfIds,
- const ctx::ItemCatalogue& itemCatalogue)
-{
- std::list<AssocRule> result;
- for (const AssocRuleOfIds ruleOfIds : rulesOfIds) {
- AssocRule rule(remove_assoc_rule_ids(ruleOfIds.antecedent, itemCatalogue),
- remove_assoc_rule_ids(ruleOfIds.consequent, itemCatalogue),
- ruleOfIds.support,
- ruleOfIds.confidence);
- result.push_back(rule);
- }
- return result;
-}
-
-ctx::ItemSet ctx::AssocRuleMiner::remove_assoc_rule_ids(const ctx::ItemIdSet& itemIdSet, const ctx::ItemCatalogue& itemCatalogue)
-{
- ItemSet itemSet;
- for (int id : itemIdSet) {
- itemSet.push_back(itemCatalogue.item_of_id(id));
- }
- return itemSet;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_MINER_H_
-#define _PREDICTION_ASSOC_RULE_MINER_H_
-
-#include <list>
-#include <string>
-#include "event_set.h"
-#include "assoc_rule.h"
-#include "assoc_rule_of_ids.h"
-#include "basket_producer.h"
-#include "i_item_id_filter.h"
-
-namespace ctx {
-
- class AssocRuleMiner {
-
- public:
- static std::list<AssocRule> mine_from_events(
- const EventSet& events,
- double minSupport,
- double minConfidence,
- std::string consequentCategory);
- static std::list<AssocRule> mine_from_baskets(
- std::list<Basket>& initBaskets,
- ItemCatalogue& itemCatalogue,
- double minSupport,
- double minConfidence,
- std::string consequentCategory);
- private:
- static std::list<AssocRule> remove_assoc_rule_ids(const std::list<AssocRuleOfIds>& rulesOfIds, const ItemCatalogue& itemCatalogue);
- static ItemSet remove_assoc_rule_ids(const ItemIdSet& itemIdSet, const ItemCatalogue& itemCatalogue);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_MINER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_OF_IDS_H_
-#define _PREDICTION_ASSOC_RULE_OF_IDS_H_
-
-#include "item_id_set.h"
-
-namespace ctx {
-
- /* rule of the form antecedent => consequent */
- class AssocRuleOfIds {
-
- public:
- ItemIdSet antecedent;
- ItemIdSet consequent;
- double support;
- double confidence;
- };
-
- inline bool operator==(const AssocRuleOfIds& left, const AssocRuleOfIds& right)
- {
- return left.support == right.support
- && left.confidence == right.confidence
- && left.antecedent == right.antecedent
- && left.consequent == right.consequent;
- }
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_OF_IDS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "assoc_rule_producer.h"
-
-ctx::AssocRuleOfIds ctx::AssocRuleProducer::rule_template(const ctx::ItemIdSet& sourceItemIdSet,
- const ctx::IItemIdFilter& itemIdFilter)
-{
- AssocRuleOfIds ruleTempl;
- for (int itemId : sourceItemIdSet) {
- ItemIdSet &destination = itemIdFilter.pass(itemId)
- ? ruleTempl.consequent
- : ruleTempl.antecedent;
- destination.push_back(itemId);
- }
- return ruleTempl;
-}
-
-std::list<ctx::AssocRuleOfIds> ctx::AssocRuleProducer::generate_rules(
- const std::list<std::pair<ctx::ItemIdSet, double>>& freqItemIdSets,
- const ctx::IItemIdFilter& itemIdFilter, double minConfidence)
-{
- std::list<AssocRuleOfIds> rules;
-
- for (auto & pair : freqItemIdSets) {
- ItemIdSet freqItemIdSet = pair.first;
- double support = pair.second;
- AssocRuleOfIds rule = AssocRuleProducer::rule_template(freqItemIdSet, itemIdFilter);
- if (rule.antecedent.size() > 0 && rule.consequent.size() > 0) {
- rule.support = support;
- double antecedentSupport = AssocRuleProducer::supportOf(freqItemIdSets, rule.antecedent);
- rule.confidence = support / antecedentSupport;
- if (rule.confidence >= minConfidence) {
- rules.push_back(rule);
- }
- }
- }
- return rules;
-}
-
-double ctx::AssocRuleProducer::supportOf(
- const std::list<std::pair<ctx::ItemIdSet, double>> &allFreqItemIdSets, const ctx::ItemIdSet &wanted)
-{
- for (auto & pair : allFreqItemIdSets) {
- if (pair.first == wanted) {
- return pair.second;
- }
- }
- return 0.0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ASSOC_RULE_PRODUCER_H_
-#define _PREDICTION_ASSOC_RULE_PRODUCER_H_
-
-#include "assoc_rule_of_ids.h"
-#include "basket.h"
-#include "i_item_id_filter.h"
-#include <list>
-
-namespace ctx {
-
- class AssocRuleProducer {
-
- public:
- static std::list<AssocRuleOfIds> generate_rules(
- const std::list<std::pair<ItemIdSet,double>> &freqItemIdSets,
- const IItemIdFilter &itemIdFilter,
- double minConfidence);
-
- static AssocRuleOfIds rule_template(const ItemIdSet &sourceItemIdSet, const IItemIdFilter &antecedentItemIdFilter);
-
- private:
- static double supportOf(const std::list<std::pair<ItemIdSet,double>> &allFreqItemIdSets, const ItemIdSet &wanted);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ASSOC_RULE_PRODUCER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket.h"
-
-void ctx::Basket::compute_bitset(int maxId)
-{
- mBitSet.resize(maxId+1, false);
- for (int itemId : itemIdSet) {
- mBitSet[itemId] = true;
- }
-}
-
-bool ctx::Basket::includes(const ctx::ItemIdSet& potentialSubset)
-{
- for (int itemId : potentialSubset) {
- if (!mBitSet[itemId]) {
- return false;
- }
- }
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_H_
-#define _PREDICTION_BASKET_H_
-
-#include "item_id_set.h"
-#include <vector>
-
-namespace ctx {
-
- class Basket {
-
- public:
- ItemIdSet itemIdSet;
- int weight;
-
- Basket(const ItemIdSet& itemIdSet_, const int& weight_) : itemIdSet(itemIdSet_), weight(weight_) {};
- void compute_bitset(int maxId);
- bool includes(const ItemIdSet& potentialSubset); // compute_bitset() should be invoked first
-
- private:
- std::vector<bool> mBitSet;
-
- };
-
- // TODO If there is no "inline" below the project does not compile.
- inline bool operator==(const Basket& left, const Basket& right)
- {
- return left.weight == right.weight && left.itemIdSet == right.itemIdSet;
- }
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_compressor.h"
-#include <sstream>
-#include <map>
-
-std::string ctx::BasketCompressor::itemset_string(const ctx::ItemIdSet& itemIdSet)
-{
- std::stringstream ss;
- for (int itemId : itemIdSet) {
- ss << itemId << ',';
- }
- return ss.str();
-}
-
-std::list<ctx::Basket> ctx::BasketCompressor::compress(const std::list<ctx::Basket>& inputBaskets)
-{
- std::map<std::string,Basket> basketsMap;
- // TODO: maybe it is worth to resign from string keys and use std::map<ItemSet,weight> instead.
-
- for (const Basket& basket : inputBaskets) {
- std::string itemSetStr = itemset_string(basket.itemIdSet);
-
- auto findResult = basketsMap.find(itemSetStr);
- if (findResult == basketsMap.end()) {
- basketsMap.insert(std::pair<std::string,Basket>(itemSetStr, basket));
- } else {
- Basket& compressedBasket = findResult->second;
- compressedBasket.weight += basket.weight;
- }
- }
-
- std::list<Basket> compressedBaskets;
- for (auto pair : basketsMap) {
- compressedBaskets.push_back(pair.second);
- }
- return compressedBaskets;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_COMPRESSOR_H_
-#define _PREDICTION_BASKET_COMPRESSOR_H_
-
-#include <list>
-#include <string>
-#include "basket.h"
-
-namespace ctx {
-
- class BasketCompressor {
-
- public:
- static std::list<Basket> compress(const std::list<Basket> &inputBaskets);
-
- private:
- static std::string itemset_string(const ItemIdSet &itemIdSet);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_COMPRESSOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_filter.h"
-
-void ctx::BasketFilter::filter_in_place(std::list<ctx::Basket>& baskets, const ctx::IItemIdFilter& itemIdFilter)
-{
- baskets.remove_if([&itemIdFilter] (Basket &basket) -> bool { return !BasketPass(basket, itemIdFilter); });
-}
-
-bool ctx::BasketFilter::BasketPass(const ctx::Basket& basket, const ctx::IItemIdFilter& itemIdFilter)
-{
- for (int itemId : basket.itemIdSet) {
- if (itemIdFilter.pass(itemId)) {
- return true;
- }
- }
- return false;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_FILTER_H_
-#define _PREDICTION_BASKET_FILTER_H_
-
-#include "basket.h"
-#include "i_item_id_filter.h"
-#include <list>
-
-namespace ctx {
-
- class BasketFilter {
-
- public:
- static void filter_in_place(std::list<Basket> &inputBaskets, const IItemIdFilter &itemIdFilter);
-
- private:
- static bool BasketPass(const Basket &basket, const IItemIdFilter &itemIdFilter);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_FILTER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "basket_producer.h"
-#include <set>
-
-void ctx::BasketProducer::put_event(const ctx::Event& event)
-{
- int iid = mItemCatalogue.id_of(event.item);
- put_change(event.interval.start, iid); // positive value indicates start
- put_change(event.interval.end, -iid); // negative value indicates end
-}
-
-std::list<ctx::Basket> ctx::BasketProducer::make_baskets()
-{
- std::list<Basket> baskets;
-
- time_t intervalStart;
- std::set<int> currentItemIds;
-
- bool first = true;
- for (auto changePair : mChanges) {
- if (first) {
- first = false;
- } else {
- time_t intervalEnd = changePair.first;
- int weight = intervalEnd - intervalStart;
- ItemIdSet itemIdSet;
- for (int itemId : currentItemIds) {
- itemIdSet.push_back(itemId);
- }
- baskets.push_back(Basket(itemIdSet, weight));
- }
-
- for (int itemId : changePair.second) {
- if (itemId > 0) { // item with itemId starts now
- currentItemIds.insert(itemId);
- } else { // item with -itemId ends now
- currentItemIds.erase(-itemId);
- }
- }
-
- intervalStart = changePair.first;
- }
-
- return baskets;
-}
-
-void ctx::BasketProducer::put_change(time_t time, int value)
-{
- if (mChanges.find(time) == mChanges.end()) {
- mChanges[time] = std::list<int>();
- }
- mChanges[time].push_back(value);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKET_PRODUCER_H_
-#define _PREDICTION_BASKET_PRODUCER_H_
-
-#include "event.h"
-#include "basket.h"
-#include "item_catalogue.h"
-#include <list>
-
-namespace ctx {
-
- class BasketProducer {
-
- public:
- BasketProducer(ItemCatalogue& itemCatalogue) : mItemCatalogue(itemCatalogue) {};
- void put_event(const Event& e);
- std::list<Basket> make_baskets();
-
- private:
- void put_change(time_t time, int value);
-
- ItemCatalogue& mItemCatalogue;
-
- /*
- * Changes in timestamps.
- * If an item starts than its id is stored.
- * If an item ends than its negated id is stored.
- */
- std::map<time_t, std::list<int>> mChanges;
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_BASKET_PRODUCER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "baskets_agregator.h"
-
-ctx::BasketsAgregator::BasketsAgregator(std::list<ctx::Basket>& baskets) : mBaskets(baskets)
-{
-}
-
-ctx::ItemIdSet ctx::BasketsAgregator::unique_item_ids()
-{
- ItemIdSet allItemIds;
- for (const Basket& basket : mBaskets) {
- for (int itemId : basket.itemIdSet) {
- allItemIds.push_back(itemId);
- }
- }
- allItemIds.sort();
- allItemIds.unique();
- return allItemIds;
-}
-
-void ctx::BasketsAgregator::generate_bitsets(int maxId)
-{
- for (Basket& basket : mBaskets) {
- basket.compute_bitset(maxId);
- }
-}
-
-double ctx::BasketsAgregator::supportOf(const ctx::ItemIdSet& itemIdSet)
-{
- int matchedCount = 0;
- int unmatchedCount = 0;
- for (Basket& basket : mBaskets) {
- if (basket.includes(itemIdSet)) {
- matchedCount += basket.weight;
- } else {
- unmatchedCount += basket.weight;
- }
- }
- return (double) matchedCount / (double) (matchedCount + unmatchedCount);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_BASKETS_AGREGATOR_H_
-#define _PREDICTION_BASKETS_AGREGATOR_H_
-
-#include <list>
-#include <memory>
-#include "basket.h"
-
-namespace ctx {
-
- class BasketsAgregator {
-
- public:
- BasketsAgregator(std::list<Basket>& baskets);
- void generate_bitsets(int maxId);
- ItemIdSet unique_item_ids();
- double supportOf(const ItemIdSet &itemIdSet);
-
- private:
- std::list<Basket>& mBaskets;
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_BASKETS_AGREGATOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "event.h"
-
-bool ctx::operator==(const ctx::Event& left, const ctx::Event& right)
-{
- return left.item == right.item && left.interval == right.interval;
-}
-
-bool ctx::operator!=(const ctx::Event& left, const ctx::Event& right)
-{
- return !(left == right);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_EVENT_H_
-#define _PREDICTION_EVENT_H_
-
-#include "item.h"
-#include "interval.h"
-
-namespace ctx {
-
- struct Event {
- Item item;
- Interval interval;
-
- /* long time event */
- Event(const Item& item_, const Interval& interval_) : item(item_), interval(interval_) {}
-
- /* instant event */
- Event(const Item& item_, const time_t& start_time_) : item(item_), interval(start_time_, start_time_ + 1) {}
- };
-
- bool operator==(const Event& left, const Event& right);
- bool operator!=(const Event& left, const Event& right);
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_EVENT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_EVENT_SET_H_
-#define _PREDICTION_EVENT_SET_H_
-
-#include "event.h"
-
-namespace ctx {
-
- typedef std::list<Event> EventSet;
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_EVENT_SET_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_I_ITEM_ID_FILTER_H_
-#define _PREDICTION_I_ITEM_ID_FILTER_H_
-
-namespace ctx {
-
- class IItemIdFilter {
-
- public:
- virtual ~IItemIdFilter() {}
- virtual bool pass(int itemId) const = 0;
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_I_ITEM_ID_FILTER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "interval.h"
-
-bool ctx::operator==(const Interval& left, const Interval& right)
-{
- return left.start == right.start && left.end == right.end;
-}
-
-bool ctx::operator!=(const Interval& left, const Interval& right)
-{
- return !(left == right);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_INTERVAL_H_
-#define _PREDICTION_INTERVAL_H_
-
-#include <ctime>
-
-namespace ctx {
-
- struct Interval {
- time_t start;
- time_t end;
-
- Interval(time_t start_, time_t end_) : start(start_), end(end_) {}
- };
-
- bool operator==(const Interval& left, const Interval& right);
- bool operator!=(const Interval& left, const Interval& right);
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_INTERVAL_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item.h"
-
-ctx::Item::Item(const std::string &s)
-{
- size_t leftBracket = s.find('[');
- size_t rightBracket = s.find(']', leftBracket);
- category = s.substr(leftBracket + 1, rightBracket - 1);
- value = s.substr(rightBracket + 1);
- return;
-}
-
-bool ctx::Item::operator==(const ctx::Item& other) const
-{
- return other.category == category && other.value == value;
-}
-
-bool ctx::Item::operator!=(const ctx::Item& other) const
-{
- return !operator==(other);
-}
-
-std::ostream& ctx::operator<<(std::ostream& out, const ctx::Item& item)
-{
- return out << '[' << item.category << ']' << item.value;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_H_
-#define _PREDICTION_ITEM_H_
-
-#include <string>
-#include <iostream>
-
-namespace ctx {
-
- struct Item {
- std::string category;
- std::string value;
-
- Item(const std::string &category_, const std::string &value_) : category(category_), value(value_) {}
- Item(const std::string &s); // in the form of "[Category]Value"
-
- bool operator==(const Item& other) const;
- bool operator!=(const Item& other) const;
- };
-
- std::ostream& operator<<(std::ostream& out, const Item& item);
-
-} /* namespace ctx */
-
-namespace std {
-
- template <> struct hash<ctx::Item> {
- size_t operator()(const ctx::Item &item) const {
- hash<std::string> hasher;
- return hasher(item.category + ":" + item.value);
- }
- };
-
-}
-
-#endif /* _PREDICTION_ITEM_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_catalogue.h"
-#include "item_string_converter.h"
-
-int ctx::ItemCatalogue::id_of(const ctx::Item& item)
-{
- std::string s = ItemStringConverter::item_to_string(item);
- std::map<std::string,int>::iterator it = mItemIdsOfStrings.find(s);
- if (it == mItemIdsOfStrings.end()) { // new item
- mMaxId++;
- mItemIdsOfStrings[s] = mMaxId;
- mItemStrings.push_back(s);
- extendCategoryItemIds(item.category, mMaxId);
- return mMaxId;
- } else { // existing item
- return mItemIdsOfStrings[s];
- }
-}
-
-bool ctx::ItemCatalogue::exists_item_of_id(int id) const
-{
- return id > 0 && id <= mMaxId;
-}
-
-ctx::Item ctx::ItemCatalogue::item_of_id(int id) const
-{
- return ItemStringConverter::string_to_item(mItemStrings[id]);
-}
-
-std::set<int> ctx::ItemCatalogue::category_item_ids(std::string category) const
-{
- auto it = mCategoryItemIds.find(category);
- if (it == mCategoryItemIds.end()) {
- return std::set<int>();
- } else {
- return it->second;
- }
-}
-
-void ctx::ItemCatalogue::extendCategoryItemIds(std::string category, int itemId)
-{
- if (mCategoryItemIds.find(category) == mCategoryItemIds.end()) {
- mCategoryItemIds[category] = std::set<int>();
- }
- mCategoryItemIds[category].insert(itemId);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_CATALOGUE_H_
-#define _PREDICTION_ITEM_CATALOGUE_H_
-
-#include "item.h"
-#include <map>
-#include <set>
-#include <vector>
-
-namespace ctx {
-
- class ItemCatalogue {
-
- public:
- ItemCatalogue() : mMaxId(0) {
- mItemStrings.push_back(std::string(""));
- }
-
- int id_of(Item const &item);
-
- bool exists_item_of_id(int id) const;
- Item item_of_id(int id) const;
- std::set<int> category_item_ids(std::string category) const;
- int maxId() const {return mMaxId;};
-
- private:
- /* Translates item string to its id */
- std::map<std::string,int> mItemIdsOfStrings;
-
- /* Translating category string to int */
- std::map<std::string,std::set<int>> mCategoryItemIds;
-
- /* Stores item strings (index is item's id) */
- std::vector<std::string> mItemStrings;
-
- /* Preserves maximal item's id */
- int mMaxId;
-
- void extendCategoryItemIds(std::string category, int itemId);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_CATALOGUE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_ID_SET_H_
-#define _PREDICTION_ITEM_ID_SET_H_
-
-#include <list>
-
-namespace ctx {
-
- /* A set storing item ids */
- typedef std::list<int> ItemIdSet;
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_ID_SET_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_set.h"
-#include <algorithm>
-
-std::ostream& ctx::operator<<(std::ostream& out, const ctx::ItemSet& itemSet)
-{
- bool first = true;
- for (auto& item : itemSet) {
- if (first) {
- first = false;
- } else {
- out << ", ";
- }
- out << item;
- }
- return out;
-}
-
-bool ctx::itemset_includes_in(const ctx::ItemSet& small, const ctx::ItemSet& big)
-{
- for (const Item& s : small) {
- if (std::find(big.begin(), big.end(), s) == big.end())
- return false;
- }
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_SET_H_
-#define _PREDICTION_ITEM_SET_H_
-
-#include <list>
-#include "item.h"
-
-namespace ctx {
-
- /* A set storing item ids */
- typedef std::list<Item> ItemSet;
-
- std::ostream& operator<<(std::ostream& out, const ItemSet& itemSet);
-
- bool itemset_includes_in(const ItemSet& small, const ItemSet& big);
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_SET_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "item_string_converter.h"
-#include <string>
-
-std::string ctx::ItemStringConverter::item_to_string(const ctx::Item &item)
-{
- return item.category + SEPARATOR + item.value;
-}
-
-ctx::Item ctx::ItemStringConverter::string_to_item(const std::string& s)
-{
- size_t pos = s.find(SEPARATOR);
- //assert(pos != std::string::npos);
- return Item(s.substr(0, pos), s.substr(pos + 1));
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_ITEM_STRING_CONVERTER_H_
-#define _PREDICTION_ITEM_STRING_CONVERTER_H_
-
-#include "item.h"
-
-namespace ctx {
-
- class ItemStringConverter {
-
- public:
- static const char SEPARATOR = ':';
- static std::string item_to_string(const Item &item);
- static Item string_to_item(const std::string& s);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_ITEM_STRING_CONVERTER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "single_category_item_id_filter.h"
-
-ctx::SingleCategoryItemIdFilter::SingleCategoryItemIdFilter(std::string category, const ctx::ItemCatalogue &itemCatalogue)
-{
- mAcceptedItemIds = itemCatalogue.category_item_ids(category);
-}
-
-bool ctx::SingleCategoryItemIdFilter::pass(int itemId) const
-{
- return mAcceptedItemIds.find(itemId) != mAcceptedItemIds.end();
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
-#define _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_
-
-#include "i_item_id_filter.h"
-#include "item_catalogue.h"
-
-namespace ctx {
-
- class SingleCategoryItemIdFilter : public IItemIdFilter {
-
- public:
- SingleCategoryItemIdFilter(std::string category, const ItemCatalogue& itemCatalogue);
- bool pass(int itemId) const override;
-
- private:
- std::set<int> mAcceptedItemIds;
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_SINGLE_CATEGORY_ITEM_ID_FILTER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "weight_apriori.h"
-#include <algorithm>
-#include <iostream>
-
-std::list<ctx::ItemIdSet> ctx::WeightApriori::find_wider_candidates(const std::list<ctx::ItemIdSet> &narrowFreqSets, int widerSize)
-{
- std::list<ItemIdSet> candidates;
- for (auto iter1 = narrowFreqSets.begin(); iter1 != narrowFreqSets.end(); ++iter1) {
- auto iter2 = iter1; ++iter2;
- for (;iter2 != narrowFreqSets.end(); ++iter2) {
- ItemIdSet itemIdSet1 = *iter1;
- ItemIdSet itemIdSet2 = *iter2;
- itemIdSet1.merge(itemIdSet2);
- itemIdSet1.unique();
- if (int(itemIdSet1.size()) == widerSize) {
- candidates.push_back(itemIdSet1);
- }
- }
- }
- candidates.sort();
- candidates.unique();
- return candidates;
-}
-
-void ctx::WeightApriori::prune_wider_candidates(std::list<ctx::ItemIdSet>& widerCandidates, const std::list<ctx::ItemIdSet>& narrowFreqSets)
-{
- std::list<ItemIdSet> pruned;
- for (auto iter = widerCandidates.begin(); iter != widerCandidates.end();) {
- if (survives_prunning(*iter, narrowFreqSets)) {
- ++iter;
- } else {
- iter = widerCandidates.erase(iter);
- }
- }
-}
-
-bool ctx::WeightApriori::survives_prunning(ctx::ItemIdSet& widerCandidate, const std::list<ctx::ItemIdSet>& narrowFreqSets)
-{
- int removedItemId = widerCandidate.front();
- widerCandidate.pop_front();
- for (auto iter = widerCandidate.begin();; ++iter) {
- if (std::find(narrowFreqSets.begin(), narrowFreqSets.end(), widerCandidate) == narrowFreqSets.end()) {
- return false; // Caution: In this case the original contents of widerCandidate is not preserved.
- }
- if (iter == widerCandidate.end()) {
- widerCandidate.push_back(removedItemId); // Restoring original contents of widerCandidate.
- return true;
- }
- int newRemovedItemId = *iter;
- *iter = removedItemId;
- removedItemId = newRemovedItemId;
- }
-}
-
-std::list<std::pair<ctx::ItemIdSet, double>> ctx::WeightApriori::find_frequent_itemid_sets(ctx::BasketsAgregator &basketAgregator, double supportThreshold)
-{
- std::list<std::pair<ItemIdSet, double>> allFreqItemsets;
- std::list<ItemIdSet> freqItemsetsOfCurrSize;
- std::list<ItemIdSet> candidates;
-
- int candidateSize = 1;
- candidates = single_size_candidates(basketAgregator);
-
- while (!candidates.empty()) {
- for (ItemIdSet candidate : candidates) {
- double support = basketAgregator.supportOf(candidate);
- if (support >= supportThreshold) {
- freqItemsetsOfCurrSize.push_back(candidate);
- allFreqItemsets.push_back(std::make_pair(candidate,support));
- }
- }
- candidates = find_wider_candidates(freqItemsetsOfCurrSize, ++candidateSize);
- freqItemsetsOfCurrSize.clear();
- }
- return allFreqItemsets;
-}
-
-std::list<ctx::ItemIdSet> ctx::WeightApriori::single_size_candidates(ctx::BasketsAgregator& basketAgregator)
-{
- std::list<ItemIdSet> candidates;
- for (int itemId : basketAgregator.unique_item_ids()) {
- candidates.push_back({itemId});
- }
- return candidates;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _PREDICTION_WEIGHT_APRIORI_H_
-#define _PREDICTION_WEIGHT_APRIORI_H_
-
-#include "baskets_agregator.h"
-#include <list>
-#include <utility>
-
-namespace ctx {
-
- class WeightApriori {
-
- public:
- static std::list<ItemIdSet> find_wider_candidates(const std::list<ItemIdSet> &narrowFreqSets, int widerSize);
- static void prune_wider_candidates(std::list<ItemIdSet> &widerCandidates, const std::list<ItemIdSet> &narrowFreqSets);
-
- static bool survives_prunning(ItemIdSet &widerCandidate, const std::list<ItemIdSet> &narrowFreqSets);
-
- /* Find frequent itemsets along with its support value. */
- static std::list<std::pair<ItemIdSet,double>> find_frequent_itemid_sets(BasketsAgregator &basketAgregator, double supportThreshold);
-
- private:
- static std::list<ItemIdSet> single_size_candidates(BasketsAgregator &basketAgregator);
-
- };
-
-} /* namespace ctx */
-
-#endif /* _PREDICTION_WEIGHT_APRIORI_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_COMMON_TYPES_H_
-#define _CONTEXT_STATS_COMMON_TYPES_H_
-
-#define LOG_RETENTION_PERIOD 7776000 /* 90 days in secs */
-
-#define DEFAULT_TIMESPAN 30
-#define DEFAULT_LIMIT 10
-
-#define STATS_QUERY_RESULT "QueryResult"
-#define STATS_RESULT_SIZE "ResultSize"
-#define STATS_COL_ROW_ID "rowId"
-
-#define STATS_TIMESPAN "TimeSpan"
-#define STATS_START_TIME "StartTime"
-#define STATS_END_TIME "EndTime"
-#define STATS_LAST_TIME "LastTime"
-#define STATS_TOTAL_COUNT "TotalCount"
-#define STATS_AVERAGE_COUNT "AvgCount"
-#define STATS_DURATION "Duration"
-#define STATS_TOTAL_DURATION "TotalDuration"
-#define STATS_DAY_OF_WEEK "DayOfWeek"
-#define STATS_HOUR_OF_DAY "HourOfDay"
-#define STATS_TIME_OF_DAY "TimeOfDay"
-#define STATS_TOTAL_COUNT "TotalCount"
-#define STATS_APP_ID "AppId"
-#define STATS_PKG_ID "PkgId"
-#define STATS_AUDIO_JACK "AudioJack"
-#define STATS_SYSTEM_VOLUME "SystemVolume"
-#define STATS_MEDIA_VOLUME "MediaVolume"
-#define STATS_BSSID "BSSID"
-#define STATS_UNIV_TIME "UTC"
-#define STATS_LOCAL_TIME "LocalTime"
-#define STATS_RANK "Rank"
-
-#define STATS_SUN "Sun"
-#define STATS_MON "Mon"
-#define STATS_TUE "Tue"
-#define STATS_WED "Wed"
-#define STATS_THU "Thu"
-#define STATS_FRI "Fri"
-#define STATS_SAT "Sat"
-#define STATS_WEEKDAY "Weekday"
-#define STATS_WEEKEND "Weekend"
-
-enum StatsDayOfWeek_e {
- STATS_DAY_OF_WEEK_WEEKDAY = 1,
- STATS_DAY_OF_WEEK_WEEKEND,
- STATS_DAY_OF_WEEK_ALL,
- STATS_DAY_OF_WEEK_SUN,
- STATS_DAY_OF_WEEK_MON,
- STATS_DAY_OF_WEEK_TUE,
- STATS_DAY_OF_WEEK_WED,
- STATS_DAY_OF_WEEK_THU,
- STATS_DAY_OF_WEEK_FRI,
- STATS_DAY_OF_WEEK_SAT,
-};
-
-#define TRIG_DEF_RANK "\"Rank\":{\"type\":\"integer\",\"min\":1}"
-#define TRIG_DEF_TOTAL_COUNT "\"TotalCount\":{\"type\":\"integer\",\"min\":0}"
-#define TRIG_DEF_TIME_OF_DAY "\"TimeOfDay\":{\"type\":\"string\"}"
-#define TRIG_DEF_DAY_OF_WEEK "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
-
-#endif /* End of _CONTEXT_STATS_COMMMON_TYPES_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Types.h>
-#include "CommonTypes.h"
-#include "DbHandleBase.h"
-
-#define DAY_OF_WEEK(SECOND) "CAST(strftime('%w', " SECOND ", 'unixepoch') AS INTEGER)"
-#define HOUR_OF_DAY(SECOND) "CAST(strftime('%H', " SECOND ", 'unixepoch') AS INTEGER)"
-
-using namespace ctx;
-
-StatsDbHandleBase::StatsDbHandleBase(ContextProvider *provider) :
- isTriggerItem(false),
- reqProvider(provider)
-{
-}
-
-StatsDbHandleBase::~StatsDbHandleBase()
-{
-}
-
-int StatsDbHandleBase::generateQid()
-{
- static int qid = 0;
-
- if (qid++ < 0) qid = 1;
- return qid;
-}
-
-bool StatsDbHandleBase::executeQuery(Json filter, const char* query)
-{
- bool ret = __dbManager.execute(generateQid(), query, this);
- IF_FAIL_RETURN(ret, false);
-
- reqFilter = filter;
-
- return true;
-}
-
-std::string StatsDbHandleBase::createWhereClause(Json filter)
-{
- std::stringstream whereClause;
- int week = 0;
- int start = 0;
- int end = 0;
- int timespan = DEFAULT_TIMESPAN;
- std::string appId;
- std::string weekStr;
- std::string timeOfDay;
-
- if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr)) {
- // In case of string (from Trigger)
- if (weekStr == STATS_WEEKDAY) {
- week = STATS_DAY_OF_WEEK_WEEKDAY;
-
- } else if (weekStr == STATS_WEEKEND) {
- week = STATS_DAY_OF_WEEK_WEEKEND;
-
- } else if (weekStr == STATS_SUN) {
- week = STATS_DAY_OF_WEEK_SUN;
-
- } else if (weekStr == STATS_MON) {
- week = STATS_DAY_OF_WEEK_MON;
-
- } else if (weekStr == STATS_TUE) {
- week = STATS_DAY_OF_WEEK_TUE;
-
- } else if (weekStr == STATS_WED) {
- week = STATS_DAY_OF_WEEK_WED;
-
- } else if (weekStr == STATS_THU) {
- week = STATS_DAY_OF_WEEK_THU;
-
- } else if (weekStr == STATS_FRI) {
- week = STATS_DAY_OF_WEEK_FRI;
-
- } else if (weekStr == STATS_SAT) {
- week = STATS_DAY_OF_WEEK_SAT;
- }
- } else {
- // In case of integer (from History)
- filter.get(NULL, STATS_DAY_OF_WEEK, &week);
- }
-
- switch(week) {
- case STATS_DAY_OF_WEEK_WEEKDAY:
- whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " > 0 AND " DAY_OF_WEEK(STATS_LOCAL_TIME) " < 6) AND ";
- break;
- case STATS_DAY_OF_WEEK_WEEKEND:
- whereClause << "(" DAY_OF_WEEK(STATS_LOCAL_TIME) " = 0 OR " DAY_OF_WEEK(STATS_LOCAL_TIME) " = 6) AND ";
- break;
- case STATS_DAY_OF_WEEK_SUN:
- case STATS_DAY_OF_WEEK_MON:
- case STATS_DAY_OF_WEEK_TUE:
- case STATS_DAY_OF_WEEK_WED:
- case STATS_DAY_OF_WEEK_THU:
- case STATS_DAY_OF_WEEK_FRI:
- case STATS_DAY_OF_WEEK_SAT:
- whereClause << DAY_OF_WEEK(STATS_LOCAL_TIME) " = " << week - STATS_DAY_OF_WEEK_SUN << " AND ";
- break;
- default:
- break;
- }
-
- if (filter.get(NULL, STATS_APP_ID, &appId))
- whereClause << STATS_APP_ID " = '" << appId << "' AND ";
-
- if (filter.get(NULL, STATS_START_TIME, &start))
- whereClause << STATS_UNIV_TIME " >= " << start << " AND ";
-
- if (filter.get(NULL, STATS_END_TIME, &end))
- whereClause << STATS_UNIV_TIME " <= " << end << " AND ";
-
- if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay)) {
- size_t pivot = timeOfDay.find('-');
- if (pivot != std::string::npos) {
- std::string from = timeOfDay.substr(0, pivot);
- std::string to = timeOfDay.substr(pivot + 1);
- whereClause << "(" HOUR_OF_DAY(STATS_LOCAL_TIME) " >= " << from \
- << " AND " HOUR_OF_DAY(STATS_LOCAL_TIME) " < " << to << ") AND ";
- }
- }
-
- filter.get(NULL, STATS_TIMESPAN, ×pan);
- whereClause << STATS_UNIV_TIME " > strftime('%s', 'now', '-" << timespan <<" day')";
-
- return whereClause.str();
-}
-
-std::string StatsDbHandleBase::createSqlPeakTime(Json filter, const char* tableName, std::string whereClause)
-{
- std::stringstream query;
- int limit = DEFAULT_LIMIT;
-
- filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
- query <<
- "SELECT " \
- HOUR_OF_DAY(STATS_LOCAL_TIME) " AS " STATS_HOUR_OF_DAY ", COUNT(*) AS " STATS_TOTAL_COUNT \
- " FROM " << tableName << \
- " WHERE " << whereClause << \
- " GROUP BY " HOUR_OF_DAY(STATS_LOCAL_TIME) \
- " ORDER BY " STATS_TOTAL_COUNT " DESC" \
- " LIMIT " << limit;
-
- return query.str();
-}
-
-std::string StatsDbHandleBase::createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause)
-{
- std::stringstream query;
-
- query <<
- "SELECT ( SELECT " STATS_AUDIO_JACK \
- " FROM " << tableName << \
- " WHERE " << whereClause << \
- " GROUP BY " STATS_AUDIO_JACK \
- " ORDER BY count(" STATS_AUDIO_JACK ") DESC" \
- " LIMIT 1 ) AS " STATS_AUDIO_JACK \
- ", ( SELECT " STATS_SYSTEM_VOLUME \
- " FROM " << tableName << \
- " WHERE " << whereClause << \
- " GROUP BY " STATS_SYSTEM_VOLUME \
- " ORDER BY count(" STATS_SYSTEM_VOLUME ") DESC" \
- " LIMIT 1 ) AS " STATS_SYSTEM_VOLUME \
- ", ( SELECT " STATS_MEDIA_VOLUME \
- " FROM " << tableName << \
- " WHERE " << whereClause << \
- " GROUP BY " STATS_MEDIA_VOLUME \
- " ORDER BY count(" STATS_MEDIA_VOLUME ") DESC" \
- " LIMIT 1 ) AS " STATS_MEDIA_VOLUME;
-
- return query.str();
-}
-
-void StatsDbHandleBase::onTableCreated(unsigned int queryId, int error)
-{
-}
-
-void StatsDbHandleBase::onInserted(unsigned int queryId, int error, int64_t rowId)
-{
- delete this;
-}
-
-void StatsDbHandleBase::__jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult)
-{
- std::vector<Json>::iterator vecJsonEnd = vecJson.end();
-
- for(auto vecJsonPos = vecJson.begin(); vecJsonPos != vecJsonEnd; ++vecJsonPos) {
- Json originJson = *vecJsonPos;
- jsonResult.append(NULL, STATS_QUERY_RESULT, originJson);
- }
-}
-
-void StatsDbHandleBase::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
- if (isTriggerItem) {
- if (records.size() == 1) {
- replyTriggerItem(error, records[0]);
- } else {
- _E("Invalid query result");
- Json dummy;
- reqProvider->replyToRead(reqFilter, ERR_OPERATION_FAILED, dummy);
- }
- } else {
- Json results = "{\"" STATS_QUERY_RESULT "\":[]}";
- __jsonVectorToArray(records, results);
- reqProvider->replyToRead(reqFilter, error, results);
- }
-
- delete this;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_DB_HANDLE_BASE_H_
-#define _CONTEXT_STATS_DB_HANDLE_BASE_H_
-
-#include <string>
-#include <ContextProvider.h>
-#include <DatabaseManager.h>
-
-namespace ctx {
- class StatsDbHandleBase : public IDatabaseListener {
- protected:
- bool isTriggerItem;
- ContextProvider *reqProvider;
- Json reqFilter;
-
- StatsDbHandleBase(ContextProvider *provider);
- ~StatsDbHandleBase();
-
- std::string createWhereClause(Json filter);
- std::string createSqlPeakTime(Json filter, const char* tableName, std::string whereClause);
- std::string createSqlCommonSetting(Json filter, const char* tableName, std::string whereClause);
-
- bool executeQuery(Json filter, const char* query);
- virtual void replyTriggerItem(int error, Json &jsonResult) = 0;
- static int generateQid();
-
- private:
- void __jsonVectorToArray(std::vector<Json> &vecJson, Json &jsonResult);
-
- void onTableCreated(unsigned int queryId, int error);
- void onInserted(unsigned int queryId, int error, int64_t rowId);
- void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
-
- DatabaseManager __dbManager;
- };
-}
-
-#endif /* End of _CONTEXT_STATS_DB_HANDLE_BASE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <runtime_info.h>
-#include <sound_manager.h>
-#include <Types.h>
-#include <SharedVars.h>
-#include "SystemInfo.h"
-
-#define CONNECTED 1
-#define NOT_CONNECTED 0
-
-using namespace ctx;
-
-bool system_info::getAudioJackState(int* state)
-{
- int value = NOT_CONNECTED;
- int err = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &value);
- IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
- *state = (value == NOT_CONNECTED ? NOT_CONNECTED : CONNECTED);
-
- return true;
-}
-
-bool system_info::getVolume(int* systemVolume, int* mediaVolume)
-{
- int err;
-
- err = sound_manager_get_volume(SOUND_TYPE_SYSTEM, systemVolume);
- IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
- err = sound_manager_get_volume(SOUND_TYPE_MEDIA, mediaVolume);
- IF_FAIL_RETURN(err == RUNTIME_INFO_ERROR_NONE, false);
-
- return true;
-}
-
-bool system_info::getWifiBssid(std::string& bssid)
-{
-#if 0
- /* NOTE: This routine does not work, because the wifi API does not support multi-sessions in one process */
- int err;
- char *strBuf = NULL;
- wifi_ap_h ap = NULL;
-
- err = wifi_initialize();
- IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _W, "wifi_initialize() failed (%d)", err);
-
- err = wifi_get_connected_ap(&ap);
- if (err != WIFI_ERROR_NONE) {
- _D("wifi_get_connected_ap() failed (%d)", err);
- wifi_deinitialize();
- return false;
- }
-
- wifi_ap_get_bssid(ap, &strBuf);
- bssid = (strBuf != NULL ? strBuf : "");
- g_free(strBuf);
-
- wifi_ap_destroy(ap);
- wifi_deinitialize();
-
- return !bssid.empty();
-#endif
- bssid = SharedVars().get(SharedVars::WIFI_BSSID);
- return true;
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SYSTEM_INFO_READER_H_
-#define _CONTEXT_STATS_SYSTEM_INFO_READER_H_
-
-#include <string>
-
-namespace ctx {
- namespace system_info {
- bool getAudioJackState(int* state);
- bool getVolume(int* systemVolume, int* mediaVolume);
- bool getWifiBssid(std::string& bssid);
- }
-}
-
-#endif /* End of _CONTEXT_STATS_SYSTEM_INFO_READER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <contacts.h>
-#include <Types.h>
-#include "SocialStatisticsTypes.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-SocialDbHandle::SocialDbHandle(ContextProvider *provider) :
- StatsDbHandleBase(provider)
-{
-}
-
-SocialDbHandle::~SocialDbHandle()
-{
-}
-
-int SocialDbHandle::read(Json filter)
-{
- std::string query;
- const char *subject = reqProvider->getSubject();
-
- if (STR_EQ(subject, SOCIAL_SUBJ_FREQ_ADDRESS)) {
- query = createSqlFreqAddress(filter);
-
- } else if (STR_EQ(subject, SOCIAL_SUBJ_FREQUENCY)) {
- isTriggerItem = true;
- query = createSqlFrequency(filter);
- }
-
- IF_FAIL_RETURN(!query.empty(), ERR_OPERATION_FAILED);
-
- bool ret = executeQuery(filter, query.c_str());
- IF_FAIL_RETURN(ret, ERR_OPERATION_FAILED);
-
- return ERR_NONE;
-}
-
-std::string SocialDbHandle::createWhereClause(Json filter)
-{
- std::stringstream whereClause;
- int commType = -1;
-
- whereClause << StatsDbHandleBase::createWhereClause(filter);
-
- filter.get(NULL, SOCIAL_COMMUNICATION_TYPE, &commType);
-
- switch(commType) {
- case SOCIAL_COMMUNICATION_TYPE_CALL:
- whereClause <<
- " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_VOICE_INCOMING <<
- " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_VIDEO_BLOCKED;
- break;
- case SOCIAL_COMMUNICATION_TYPE_MESSAGE:
- whereClause <<
- " AND " SOCIAL_PHONE_LOG_TYPE " >= " << CONTACTS_PLOG_TYPE_MMS_INCOMING <<
- " AND " SOCIAL_PHONE_LOG_TYPE " <= " << CONTACTS_PLOG_TYPE_MMS_BLOCKED;
- break;
- default:
- break;
- }
-
- return whereClause.str();
-}
-
-std::string SocialDbHandle::createSqlFreqAddress(Json filter)
-{
- std::stringstream query;
- int limit = DEFAULT_LIMIT;
-
- filter.get(NULL, STATS_RESULT_SIZE, &limit);
-
- query <<
- "SELECT " SOCIAL_ADDRESS ", " \
- "COUNT(*) AS " STATS_TOTAL_COUNT ", " \
- "SUM(" STATS_DURATION ") AS " STATS_TOTAL_DURATION ", " \
- "MAX(" STATS_UNIV_TIME ") AS " STATS_LAST_TIME \
- " FROM " SOCIAL_TABLE_CONTACT_LOG \
- " WHERE " << createWhereClause(filter) <<
- " GROUP BY " SOCIAL_ADDRESS \
- " ORDER BY COUNT(*) DESC" \
- " LIMIT " << limit;
-
- return query.str();
-}
-
-std::string SocialDbHandle::createSqlFrequency(Json filter)
-{
- Json filterCleaned;
- std::string weekStr;
- std::string timeOfDay;
- std::string address;
-
- if (!filter.get(NULL, SOCIAL_ADDRESS, &address)) {
- _E("Invalid parameter");
- return "";
- }
-
- if (filter.get(NULL, STATS_DAY_OF_WEEK, &weekStr))
- filterCleaned.set(NULL, STATS_DAY_OF_WEEK, weekStr);
-
- if (filter.get(NULL, STATS_TIME_OF_DAY, &timeOfDay))
- filterCleaned.set(NULL, STATS_TIME_OF_DAY, timeOfDay);
-
- std::stringstream query;
-
- query <<
- "DELETE FROM " SOCIAL_TEMP_CONTACT_FREQ ";";
-
- query <<
- "INSERT INTO " SOCIAL_TEMP_CONTACT_FREQ \
- " SELECT " SOCIAL_ADDRESS ", COUNT(*) AS " STATS_TOTAL_COUNT \
- " FROM " SOCIAL_TABLE_CONTACT_LOG \
- " WHERE " << createWhereClause(filterCleaned) <<
- " GROUP BY " SOCIAL_ADDRESS ";";
-
- query <<
- "INSERT OR IGNORE INTO " SOCIAL_TEMP_CONTACT_FREQ " (" SOCIAL_ADDRESS ")" \
- " VALUES ('" << address << "');";
-
- query <<
- "SELECT S." SOCIAL_ADDRESS ", S." STATS_TOTAL_COUNT ", 1+COUNT(lesser." STATS_TOTAL_COUNT ") AS " STATS_RANK \
- " FROM " SOCIAL_TEMP_CONTACT_FREQ " AS S" \
- " LEFT JOIN " SOCIAL_TEMP_CONTACT_FREQ " AS lesser" \
- " ON S." STATS_TOTAL_COUNT " < lesser." STATS_TOTAL_COUNT \
- " WHERE S." SOCIAL_ADDRESS " = '" << address << "'";
-
-
- return query.str();
-}
-
-void SocialDbHandle::replyTriggerItem(int error, Json &jsonResult)
-{
- IF_FAIL_VOID_TAG(STR_EQ(reqProvider->getSubject(), SOCIAL_SUBJ_FREQUENCY), _E, "Invalid subject");
-
- Json results;
- std::string valStr;
- int val;
-
- jsonResult.get(NULL, SOCIAL_ADDRESS, &valStr);
- results.set(NULL, SOCIAL_ADDRESS, valStr);
- jsonResult.get(NULL, STATS_TOTAL_COUNT, &val);
- results.set(NULL, STATS_TOTAL_COUNT, val);
- jsonResult.get(NULL, STATS_RANK, &val);
- results.set(NULL, STATS_RANK, val);
-
- reqProvider->replyToRead(reqFilter, error, results);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
-#define _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_
-
-#include <string>
-#include <Json.h>
-#include "../shared/DbHandleBase.h"
-
-namespace ctx {
- class SocialDbHandle : public StatsDbHandleBase {
- public:
- SocialDbHandle(ContextProvider *provider);
- ~SocialDbHandle();
-
- int read(Json filter);
-
- protected:
- std::string createWhereClause(Json filter);
- std::string createSqlFreqAddress(Json filter);
- std::string createSqlFrequency(Json filter);
- void replyTriggerItem(int error, Json &jsonResult);
- };
-}
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_DB_HANDLE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-#include <Json.h>
-#include <Types.h>
-#include "SocialStatisticsTypes.h"
-#include "LogAggregator.h"
-
-ctx::ContactLogAggregator::ContactLogAggregator() :
- __timerId(-1),
- __timeDiff(0)
-{
- __createTable();
- __timerId = __timerManager.setAt(3, 0, DayOfWeek::EVERYDAY, this);
-}
-
-ctx::ContactLogAggregator::~ContactLogAggregator()
-{
- __timerManager.remove(__timerId);
-}
-
-void ctx::ContactLogAggregator::__createTable()
-{
- static bool done = false;
- IF_FAIL_VOID(!done);
-
- __dbManager.createTable(0, SOCIAL_TABLE_CONTACT_LOG, SOCIAL_TABLE_CONTACT_LOG_COLUMNS, NULL, NULL);
- __dbManager.execute(0, SOCIAL_TEMP_CONTACT_FREQ_SQL, NULL);
-
- done = true;
-}
-
-bool ctx::ContactLogAggregator::onTimerExpired(int timerId)
-{
- aggregateContactLog();
- return true;
-}
-
-void ctx::ContactLogAggregator::aggregateContactLog()
-{
- __dbManager.execute(0,
- "SELECT IFNULL(MAX(" STATS_UNIV_TIME "),0) AS " STATS_LAST_TIME \
- ", (strftime('%s', 'now', 'localtime')) - (strftime('%s', 'now')) AS " TIME_DIFFERENCE \
- " FROM " SOCIAL_TABLE_CONTACT_LOG, this);
-}
-
-void ctx::ContactLogAggregator::onExecuted(unsigned int queryId, int error, std::vector<Json>& records)
-{
- IF_FAIL_VOID_TAG(!records.empty(), _E, "Invalid query result");
-
- int lastTime = 0;
- records[0].get(NULL, STATS_LAST_TIME, &lastTime);
- records[0].get(NULL, TIME_DIFFERENCE, &__timeDiff);
-
- _D("Last Time: %d / Local - UTC: %d", lastTime, __timeDiff);
-
- contacts_list_h list = NULL;
-
- __getUpdatedContactLogList(lastTime, &list);
- IF_FAIL_VOID(list);
-
- __removeExpiredLog();
- __insertContactLogList(list);
- __destroyContactLogList(list);
-}
-
-void ctx::ContactLogAggregator::__getUpdatedContactLogList(int lastTime, contacts_list_h *list)
-{
- contacts_filter_h filter = NULL;
- contacts_query_h query = NULL;
-
- int err = contacts_connect();
- IF_FAIL_VOID_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_connect() failed");
-
- err = contacts_filter_create(_contacts_phone_log._uri, &filter);
- IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_filter_create() failed");
-
- contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_GREATER_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMING);
- contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
- contacts_filter_add_int(filter, _contacts_phone_log.log_type, CONTACTS_MATCH_LESS_THAN_OR_EQUAL, CONTACTS_PLOG_TYPE_MMS_BLOCKED);
- contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
- contacts_filter_add_int(filter, _contacts_phone_log.log_time , CONTACTS_MATCH_GREATER_THAN, lastTime);
- contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
-
- err = contacts_query_create(_contacts_phone_log._uri, &query);
- IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_query_create() failed");
-
- contacts_query_set_filter(query, filter);
- contacts_query_set_sort(query, _contacts_phone_log.log_time, true);
-
- err = contacts_db_get_records_with_query(query, 0, 0, list);
- IF_FAIL_CATCH_TAG(err == CONTACTS_ERROR_NONE, _E, "contacts_db_get_records_with_query() failed");
-
-CATCH:
- if (filter)
- contacts_filter_destroy(filter);
- if (query)
- contacts_query_destroy(query);
-}
-
-void ctx::ContactLogAggregator::__destroyContactLogList(contacts_list_h list)
-{
- if (list)
- contacts_list_destroy(list, true);
-
- contacts_disconnect();
-}
-
-void ctx::ContactLogAggregator::__insertContactLogList(contacts_list_h list)
-{
- IF_FAIL_VOID(contacts_list_first(list) == CONTACTS_ERROR_NONE);
-
- do {
- contacts_record_h record = NULL;
- contacts_list_get_current_record_p(list, &record);
- if (record == NULL) break;
-
- ctx::Json data;
-
- char* address = NULL;
- int logType;
- int duration = 0;
- int accessTime = 0;
-
- contacts_record_get_str_p(record, _contacts_phone_log.address, &address);
-
- if (!address) {
- _W("Getting address failed");
- continue;
- }
-
- contacts_record_get_int(record, _contacts_phone_log.log_type, &logType);
- contacts_record_get_int(record, _contacts_phone_log.extra_data1, &duration);
- contacts_record_get_int(record, _contacts_phone_log.log_time, &accessTime);
-
- data.set(NULL, SOCIAL_ADDRESS, address);
- data.set(NULL, SOCIAL_PHONE_LOG_TYPE, logType);
- data.set(NULL, STATS_DURATION, duration);
- data.set(NULL, STATS_UNIV_TIME, accessTime);
- data.set(NULL, STATS_LOCAL_TIME, accessTime + __timeDiff);
-
- __dbManager.insert(0, SOCIAL_TABLE_CONTACT_LOG, data, NULL);
-
- } while(contacts_list_next(list) == CONTACTS_ERROR_NONE);
-}
-
-void ctx::ContactLogAggregator::__removeExpiredLog()
-{
- std::stringstream query;
- query << "DELETE FROM " SOCIAL_TABLE_CONTACT_LOG " WHERE " \
- STATS_UNIV_TIME " < strftime('%s', 'now') - " << LOG_RETENTION_PERIOD;
- __dbManager.execute(0, query.str().c_str(), NULL);
-}
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
-#define _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGATOR_H_
-
-#include <contacts.h>
-#include <DatabaseManager.h>
-#include <TimerManager.h>
-
-namespace ctx {
-
- class ContactLogAggregator : public IDatabaseListener, public ITimerListener {
- private:
- int __timerId;
- int __timeDiff;
- TimerManager __timerManager;
- DatabaseManager __dbManager;
-
- void __createTable();
- void __getUpdatedContactLogList(int last_time, contacts_list_h *list);
- void __insertContactLogList(contacts_list_h list);
- void __destroyContactLogList(contacts_list_h list);
- void __removeExpiredLog();
-
- public:
- ContactLogAggregator();
- ~ContactLogAggregator();
-
- void aggregateContactLog();
-
- void onTableCreated(unsigned int queryId, int error) {}
- void onInserted(unsigned int queryId, int error, int64_t rowId) {}
- void onExecuted(unsigned int queryId, int error, std::vector<Json>& records);
- bool onTimerExpired(int timerId);
-
- }; /* class ContactLogAggregator */
-
-} /* namespace ctx */
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_CONTACT_LOG_AGGREGTOR_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_STATS_SOCIAL_TYPES_H_
-#define _CONTEXT_STATS_SOCIAL_TYPES_H_
-
-#include "../shared/CommonTypes.h"
-
-#define SOCIAL_HISTORY_PRIV "callhistory.read"
-#define SOCIAL_SUBJ_LOGGER "stats/contact/logger"
-#define SOCIAL_SUBJ_FREQ_ADDRESS "stats/contact/often"
-#define SOCIAL_SUBJ_FREQUENCY "stats/contact/frequency"
-
-#define SOCIAL_TABLE_CONTACT_LOG "Log_Contact"
-#define SOCIAL_TABLE_CONTACT_LOG_COLUMNS \
- "Address TEXT NOT NULL, PLogType INTEGER NOT NULL, " \
- "Duration INTEGER NOT NULL DEFAULT 0, " \
- "UTC TIMESTAMP DEFAULT (strftime('%s', 'now')), " \
- "LocalTime TIMESTAMP DEFAULT (strftime('%s', 'now', 'localtime'))"
-
-#define SOCIAL_TEMP_CONTACT_FREQ "Temp_ContactFreq"
-#define SOCIAL_TEMP_CONTACT_FREQ_SQL \
- "CREATE TABLE IF NOT EXISTS " SOCIAL_TEMP_CONTACT_FREQ \
- " (Address TEXT NOT NULL UNIQUE, TotalCount INTEGER DEFAULT 0);"
-
-#define SOCIAL_COMMUNICATION_TYPE "CommunicationType"
-#define SOCIAL_ADDRESS "Address"
-#define SOCIAL_PHONE_LOG_TYPE "PLogType"
-#define TIME_DIFFERENCE "TimeDIff"
-
-enum SocialCommType {
- SOCIAL_COMMUNICATION_TYPE_CALL = 1,
- SOCIAL_COMMUNICATION_TYPE_MESSAGE,
- SOCIAL_COMMUNICATION_TYPE_ALL
-};
-
-#endif /* End of _CONTEXT_STATS_SOCIAL_TYPES_ */
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialStatisticsTypes.h"
-#include "SocialStatsLogger.h"
-
-using namespace ctx;
-
-SocialStatsLogger::SocialStatsLogger() :
- ContextProvider(SOCIAL_SUBJ_LOGGER)
-{
-}
-
-SocialStatsLogger::~SocialStatsLogger()
-{
-}
-
-int SocialStatsLogger::subscribe(Json option, Json* requestResult)
-{
- return ERR_NONE;
-}
-
-int SocialStatsLogger::unsubscribe(Json option)
-{
- return ERR_NONE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATS_LOGGER_H_
-#define _CONTEXT_SOCIAL_STATS_LOGGER_H_
-
-#include <ContextProvider.h>
-#include "LogAggregator.h"
-
-namespace ctx {
-
- class SocialStatsLogger : public ContextProvider {
- public:
- SocialStatsLogger();
- ~SocialStatsLogger();
-
- int subscribe(Json option, Json* requestResult);
- int unsubscribe(Json option);
-
- void submitTriggerItem() {}
-
- private:
- ContactLogAggregator __aggregator;
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_SOCIAL_STATS_LOGGER_H_ */
-
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SocialStatsProvider.h"
-#include "DbHandle.h"
-
-using namespace ctx;
-
-SocialStatsProvider::SocialStatsProvider(const char *subject) :
- ContextProvider(subject)
-{
-}
-
-SocialStatsProvider::~SocialStatsProvider()
-{
-}
-
-bool SocialStatsProvider::isSupported()
-{
- /* TODO */
- return true;
-}
-
-void SocialStatsProvider::submitTriggerItem()
-{
-}
-
-int SocialStatsProvider::read(Json option, Json* requestResult)
-{
- SocialDbHandle *handle = new(std::nothrow) SocialDbHandle(this);
- IF_FAIL_RETURN_TAG(handle, ERR_OPERATION_FAILED, _E, "Memory allocation failed");
-
- int err = handle->read(option);
- if (err != ERR_NONE) {
- delete handle;
- return err;
- }
-
- return ERR_NONE;
-}
-
-void ContactFreqProvider::submitTriggerItem()
-{
- registerTriggerItem(OPS_READ,
- "{" TRIG_DEF_RANK "," TRIG_DEF_TOTAL_COUNT "}",
- "{"
- "\"Address\":{\"type\":\"string\"},"
- TRIG_DEF_TIME_OF_DAY "," TRIG_DEF_DAY_OF_WEEK
- "}");
-}
+++ /dev/null
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _CONTEXT_SOCIAL_STATS_PROVIDER_H_
-#define _CONTEXT_SOCIAL_STATS_PROVIDER_H_
-
-#include <ContextProvider.h>
-#include "SocialStatisticsTypes.h"
-
-namespace ctx {
-
- class SocialStatsProvider : public ContextProvider {
- public:
- int read(Json option, Json* requestResult);
-
- bool isSupported();
- virtual void submitTriggerItem();
-
- protected:
- SocialStatsProvider(const char *subject);
- virtual ~SocialStatsProvider();
- };
-
-
- class ContactFreqProvider: public SocialStatsProvider {
- public:
- ContactFreqProvider() :
- SocialStatsProvider(SOCIAL_SUBJ_FREQUENCY) {}
-
- void submitTriggerItem();
- };
-
-
- class TopContactsProvider: public SocialStatsProvider {
- public:
- TopContactsProvider() :
- SocialStatsProvider(SOCIAL_SUBJ_FREQ_ADDRESS) {}
- };
-
-} /* namespace ctx */
-
-#endif /* _CONTEXT_SOCIAL_STATS_PROVIDER_H_ */
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Battery.h"
+
+using namespace ctx;
+
+DeviceStatusBattery::DeviceStatusBattery()
+ : DeviceProviderBase(DEVICE_ST_SUBJ_BATTERY)
+{
+}
+
+DeviceStatusBattery::~DeviceStatusBattery()
+{
+}
+
+bool DeviceStatusBattery::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusBattery::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{"
+ "\"Level\":{\"type\":\"string\",\"values\":[\"Empty\",\"Critical\",\"Low\",\"Normal\",\"High\",\"Full\"]},"
+ TRIG_BOOL_ITEM_DEF("IsCharging")
+ "}",
+ NULL);
+}
+
+void DeviceStatusBattery::__updateCb(device_callback_e deviceType, void* value, void* userData)
+{
+ IF_FAIL_VOID(deviceType == DEVICE_CALLBACK_BATTERY_LEVEL);
+
+ DeviceStatusBattery *instance = static_cast<DeviceStatusBattery*>(userData);
+ instance->__handleUpdate(deviceType, value);
+}
+
+void DeviceStatusBattery::__handleUpdate(device_callback_e deviceType, void* value)
+{
+ intptr_t level = (intptr_t)value;
+
+ const char* levelString = __transToString(level);
+ IF_FAIL_VOID(levelString);
+
+ Json dataRead;
+ dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
+
+ bool chargingState = false;
+ int ret = device_battery_is_charging(&chargingState);
+ IF_FAIL_VOID_TAG(ret == DEVICE_ERROR_NONE, _E, "Getting state failed");
+
+ dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+const char* DeviceStatusBattery::__transToString(intptr_t level)
+{
+ switch (level) {
+ case DEVICE_BATTERY_LEVEL_EMPTY:
+ return DEVICE_ST_EMPTY;
+
+ case DEVICE_BATTERY_LEVEL_CRITICAL:
+ return DEVICE_ST_CRITICAL;
+
+ case DEVICE_BATTERY_LEVEL_LOW:
+ return DEVICE_ST_LOW;
+
+ case DEVICE_BATTERY_LEVEL_HIGH:
+ return DEVICE_ST_NORMAL;
+
+ case DEVICE_BATTERY_LEVEL_FULL:
+ {
+ int percent;
+ device_battery_get_percent(&percent);
+
+ if (percent == 100) {
+ return DEVICE_ST_FULL;
+ } else {
+ return DEVICE_ST_HIGH;
+ }
+ break;
+ }
+
+ default:
+ _E("Invalid battery level");
+ return NULL;
+ }
+}
+
+int DeviceStatusBattery::subscribe()
+{
+ int ret = device_add_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb, this);
+ IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int DeviceStatusBattery::unsubscribe()
+{
+ int ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_LEVEL, __updateCb);
+ IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int DeviceStatusBattery::read()
+{
+ device_battery_level_e level;
+ Json dataRead;
+
+ int ret = device_battery_get_level_status(&level);
+ IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+
+ const char* levelString = __transToString(level);
+ IF_FAIL_RETURN(levelString, ERR_OPERATION_FAILED);
+
+ dataRead.set(NULL, DEVICE_ST_LEVEL, levelString);
+
+ bool chargingState = false;
+ ret = device_battery_is_charging(&chargingState);
+ IF_FAIL_RETURN(ret == DEVICE_ERROR_NONE, ERR_OPERATION_FAILED);
+
+ dataRead.set(NULL, DEVICE_ST_IS_CHARGING, chargingState ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_BATTERY_H_
+#define _DEVICE_SYSTEM_STATUS_BATTERY_H_
+
+#include <device/callback.h>
+#include <device/battery.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class DeviceStatusBattery : public DeviceProviderBase {
+ public:
+ DeviceStatusBattery();
+ ~DeviceStatusBattery();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ const char* __transToString(intptr_t level);
+ void __handleUpdate(device_callback_e deviceType, void* value);
+ static void __updateCb(device_callback_e deviceType, void* value, void* userData);
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_BATTERY_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Charger.h"
+
+using namespace ctx;
+
+DeviceStatusCharger::DeviceStatusCharger() :
+ DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_CHARGER, RUNTIME_INFO_KEY_CHARGER_CONNECTED)
+{
+}
+
+DeviceStatusCharger::~DeviceStatusCharger()
+{
+}
+
+bool DeviceStatusCharger::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusCharger::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
+}
+
+void DeviceStatusCharger::handleUpdate()
+{
+ bool chargerStatus = false;
+
+ int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
+ IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+ Json dataRead;
+ dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusCharger::read()
+{
+ bool chargerStatus = false;
+ Json dataRead;
+
+ int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerStatus);
+ IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+ dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, chargerStatus ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_CHARGER_
+#define _DEVICE_SYSTEM_STATUS_CHARGER_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+ class DeviceStatusCharger : public DeviceStatusRuntimeInfo {
+ public:
+ DeviceStatusCharger();
+ ~DeviceStatusCharger();
+
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ protected:
+ void handleUpdate();
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_CHARGER_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Gps.h"
+
+using namespace ctx;
+
+static const char* __getStatusString(int gpsStatus)
+{
+ switch (gpsStatus) {
+ case RUNTIME_INFO_GPS_STATUS_DISABLED:
+ return DEVICE_ST_DISABLED;
+
+ case RUNTIME_INFO_GPS_STATUS_SEARCHING:
+ return DEVICE_ST_SEARCHING;
+
+ case RUNTIME_INFO_GPS_STATUS_CONNECTED:
+ return DEVICE_ST_CONNECTED;
+
+ default:
+ _E("Unknown GPS status: %d", gpsStatus);
+ return NULL;
+ }
+}
+
+DeviceStatusGps::DeviceStatusGps() :
+ DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_GPS, RUNTIME_INFO_KEY_GPS_STATUS)
+{
+}
+
+DeviceStatusGps::~DeviceStatusGps()
+{
+}
+
+bool DeviceStatusGps::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/location.gps");
+}
+
+void DeviceStatusGps::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{"
+ "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Searching\",\"Connected\"]}"
+ "}",
+ NULL);
+}
+
+void DeviceStatusGps::handleUpdate()
+{
+ int gpsStatus;
+ int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
+ IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+ Json dataRead;
+
+ const char* stateStr = __getStatusString(gpsStatus);
+ IF_FAIL_VOID(stateStr);
+
+ dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
+
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusGps::read()
+{
+ int gpsStatus;
+ Json dataRead;
+
+ int ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_GPS_STATUS, &gpsStatus);
+ IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+ const char* stateStr = __getStatusString(gpsStatus);
+ IF_FAIL_RETURN(stateStr, ERR_OPERATION_FAILED);
+
+ dataRead.set(NULL, DEVICE_ST_STATE, stateStr);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_GPS_H_
+#define _DEVICE_SYSTEM_STATUS_GPS_H_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+ class DeviceStatusGps : public DeviceStatusRuntimeInfo {
+ public:
+ DeviceStatusGps();
+ ~DeviceStatusGps();
+
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ protected:
+ void handleUpdate();
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_GPS_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Psmode.h"
+
+using namespace ctx;
+
+DeviceStatusPsmode::DeviceStatusPsmode() :
+ DeviceProviderBase(DEVICE_ST_SUBJ_PSMODE)
+{
+}
+
+DeviceStatusPsmode::~DeviceStatusPsmode()
+{
+}
+
+bool DeviceStatusPsmode::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusPsmode::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{" TRIG_BOOL_ITEM_DEF("IsEnabled") "}", NULL);
+}
+
+void DeviceStatusPsmode::__updateCb(keynode_t *node, void* userData)
+{
+ DeviceStatusPsmode *instance = static_cast<DeviceStatusPsmode*>(userData);
+ instance->__handleUpdate(node);
+}
+
+void DeviceStatusPsmode::__handleUpdate(keynode_t *node)
+{
+ int status;
+ Json dataRead;
+
+ status = vconf_keynode_get_int(node);
+ IF_FAIL_VOID_TAG(status >= 0, _E, "Getting state failed");
+
+ dataRead.set(NULL, DEVICE_ST_IS_ENABLED, status == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
+
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusPsmode::subscribe()
+{
+ int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb, this);
+ IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int DeviceStatusPsmode::unsubscribe()
+{
+ int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, __updateCb);
+ IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int DeviceStatusPsmode::read()
+{
+ int mode;
+ int ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &mode);
+ IF_FAIL_RETURN(ret == VCONF_OK, ERR_OPERATION_FAILED);
+
+ Json dataRead;
+ dataRead.set(NULL, DEVICE_ST_IS_ENABLED, mode == 0 ? DEVICE_ST_FALSE : DEVICE_ST_TRUE);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
+#define _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
+
+#include <vconf.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class DeviceStatusPsmode : public DeviceProviderBase {
+ public:
+ DeviceStatusPsmode();
+ ~DeviceStatusPsmode();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ void __handleUpdate(keynode_t *node);
+ static void __updateCb(keynode_t *node, void* userData);
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_POWER_SAVING_MODE_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "RuntimeInfoBase.h"
+
+using namespace ctx;
+
+DeviceStatusRuntimeInfo::DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key) :
+ DeviceProviderBase(subject),
+ __infoKey(key)
+{
+}
+
+runtime_info_key_e DeviceStatusRuntimeInfo::__getInfoKey()
+{
+ return __infoKey;
+}
+
+void DeviceStatusRuntimeInfo::updateCb(runtime_info_key_e runtimeKey, void* userData)
+{
+ DeviceStatusRuntimeInfo *instance = static_cast<DeviceStatusRuntimeInfo*>(userData);
+ IF_FAIL_VOID_TAG(runtimeKey == instance->__getInfoKey(), _W, "Runtime info key mismatch");
+ instance->handleUpdate();
+}
+
+int DeviceStatusRuntimeInfo::subscribe()
+{
+ int ret = runtime_info_set_changed_cb(__infoKey, updateCb, this);
+ IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
+
+int DeviceStatusRuntimeInfo::unsubscribe()
+{
+ int ret = runtime_info_unset_changed_cb(__infoKey);
+ IF_FAIL_RETURN(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
+#define _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
+
+#include <runtime_info.h>
+#include "../shared/SystemTypes.h"
+#include "../shared/DeviceProviderBase.h"
+
+namespace ctx {
+
+ class DeviceStatusRuntimeInfo : public DeviceProviderBase {
+ public:
+ DeviceStatusRuntimeInfo(const char *subject, runtime_info_key_e key);
+
+ int subscribe();
+ int unsubscribe();
+ virtual int read() = 0;
+
+ protected:
+ runtime_info_key_e __infoKey;
+
+ virtual ~DeviceStatusRuntimeInfo(){}
+ static void updateCb(runtime_info_key_e runtimeKey, void* userData);
+ virtual void handleUpdate() = 0;
+
+ private:
+ runtime_info_key_e __getInfoKey();
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_RUNTIME_INFO_BASE_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Usb.h"
+
+using namespace ctx;
+
+DeviceStatusUsb::DeviceStatusUsb() :
+ DeviceStatusRuntimeInfo(DEVICE_ST_SUBJ_USB, RUNTIME_INFO_KEY_USB_CONNECTED)
+{
+}
+
+DeviceStatusUsb::~DeviceStatusUsb()
+{
+}
+
+bool DeviceStatusUsb::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/usb.host");
+}
+
+void DeviceStatusUsb::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{" TRIG_BOOL_ITEM_DEF("IsConnected") "}", NULL);
+}
+
+void DeviceStatusUsb::handleUpdate()
+{
+ bool status = false;
+
+ int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
+ IF_FAIL_VOID_TAG(ret == RUNTIME_INFO_ERROR_NONE, _E, "Getting runtime info failed");
+
+ Json dataRead;
+ dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ publish(NULL, ERR_NONE, dataRead);
+}
+
+int DeviceStatusUsb::read()
+{
+ bool status = false;
+ Json dataRead;
+
+ int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &status);
+ IF_FAIL_RETURN_TAG(ret == RUNTIME_INFO_ERROR_NONE, ERR_OPERATION_FAILED, _E, "Getting runtime info failed");
+
+ dataRead.set(NULL, DEVICE_ST_IS_CONNECTED, status ? DEVICE_ST_TRUE : DEVICE_ST_FALSE);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_USB_H_
+#define _DEVICE_SYSTEM_STATUS_USB_H_
+
+#include "RuntimeInfoBase.h"
+
+namespace ctx {
+
+ class DeviceStatusUsb : public DeviceStatusRuntimeInfo {
+ public:
+ DeviceStatusUsb();
+ ~DeviceStatusUsb();
+
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ protected:
+ void handleUpdate();
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_USB_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Alarm.h"
+
+using namespace ctx;
+
+DeviceStatusAlarm::DeviceStatusAlarm()
+ : ContextProvider(DEVICE_ST_SUBJ_ALARM)
+{
+}
+
+DeviceStatusAlarm::~DeviceStatusAlarm()
+{
+ __clear();
+
+ for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+ delete *it;
+ }
+ __optionSet.clear();
+}
+
+bool DeviceStatusAlarm::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusAlarm::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE,
+ "{"
+ "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
+ "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]}"
+ "}",
+ NULL);
+}
+
+int DeviceStatusAlarm::subscribe(Json option, Json *requestResult)
+{
+ int dow = __getArrangedDayOfWeek(option);
+
+ int time;
+ for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
+ __add(time, dow);
+ }
+
+ Json* elem = new(std::nothrow) Json(option);
+ if (elem) {
+ __optionSet.insert(elem);
+ } else {
+ unsubscribe(option);
+ _E("Memory allocation failed");
+ return ERR_OUT_OF_MEMORY;
+ }
+
+ return ERR_NONE;
+}
+
+int DeviceStatusAlarm::unsubscribe(Json option)
+{
+ int dow = __getArrangedDayOfWeek(option);
+
+ int time;
+ for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &time); i++) {
+ __remove(time, dow);
+ }
+
+ OptionSet::iterator target = __findOption(option);
+ if (target != __optionSet.end()) {
+ delete (*target);
+ __optionSet.erase(target);
+ }
+
+ return ERR_NONE;
+}
+
+int DeviceStatusAlarm::__getArrangedDayOfWeek(Json& option)
+{
+ int dow = 0;
+
+ std::string tempDay;
+ for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &tempDay); i++) {
+ dow |= TimerManager::dowToInt(tempDay);
+ }
+ _D("Requested day of week (%#x)", dow);
+
+ return dow;
+}
+
+DeviceStatusAlarm::RefCountArray::RefCountArray()
+{
+ memset(count, 0, sizeof(int) * DAYS_PER_WEEK);
+}
+
+int DeviceStatusAlarm::__mergeDayOfWeek(int* refCnt)
+{
+ int dayOfWeek = 0;
+
+ for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+ if (refCnt[d] > 0) {
+ dayOfWeek |= (0x01 << d);
+ }
+ }
+
+ return dayOfWeek;
+}
+
+bool DeviceStatusAlarm::__add(int minute, int dayOfWeek)
+{
+ IF_FAIL_RETURN_TAG(minute >=0 && minute < 1440 &&
+ dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
+ false, _E, "Invalid parameter");
+
+ RefCountArray &ref = __refCountMap[minute];
+
+ for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+ if ((dayOfWeek & (0x01 << d)) != 0) {
+ ref.count[d] += 1;
+ }
+ }
+
+ return __resetTimer(minute);
+}
+
+bool DeviceStatusAlarm::__remove(int minute, int dayOfWeek)
+{
+ IF_FAIL_RETURN_TAG(minute >= 0 && minute < 1440 &&
+ dayOfWeek > 0 && dayOfWeek <= static_cast<int>(DayOfWeek::EVERYDAY),
+ false, _E, "Invalid parameter");
+
+ RefCountArray &ref = __refCountMap[minute];
+
+ for (int d = 0; d < DAYS_PER_WEEK; ++d) {
+ if ((dayOfWeek & (0x01 << d)) != 0 && ref.count[d] > 0) {
+ ref.count[d] -= 1;
+ }
+ }
+
+ return __resetTimer(minute);
+}
+
+bool DeviceStatusAlarm::__resetTimer(int minute)
+{
+ int dayOfWeek = __mergeDayOfWeek(__refCountMap[minute].count);
+ TimerState &timer = __timerStateMap[minute];
+
+ if (dayOfWeek == timer.dayOfWeek) {
+ /* Necessary timers are already running... */
+ return true;
+ }
+
+ if (dayOfWeek == 0 && timer.timerId > 0) {
+ /* Turn off the timer at hour, if it is not necessray anymore. */
+ __timerManager.remove(timer.timerId);
+ __timerStateMap.erase(minute);
+ __refCountMap.erase(minute);
+ return true;
+ }
+
+ if (timer.timerId > 0) {
+ /* Turn off the current timer, to set a new one. */
+ __timerManager.remove(timer.timerId);
+ timer.timerId = -1;
+ timer.dayOfWeek = 0;
+ }
+
+ /* Create a new timer, w.r.t. the new dayOfWeek value. */
+ int h = minute / 60;
+ int m = minute - h * 60;
+ int tid = __timerManager.setAt(h, m, static_cast<DayOfWeek>(dayOfWeek), this);
+ IF_FAIL_RETURN_TAG(tid > 0, false, _E, "Timer setting failed");
+
+ timer.timerId = tid;
+ timer.dayOfWeek = dayOfWeek;
+
+ return true;
+}
+
+void DeviceStatusAlarm::__clear()
+{
+ for (auto it = __timerStateMap.begin(); it != __timerStateMap.end(); ++it) {
+ if (it->second.timerId > 0) {
+ __timerManager.remove(it->second.timerId);
+ }
+ }
+
+ __timerStateMap.clear();
+ __refCountMap.clear();
+}
+
+bool DeviceStatusAlarm::onTimerExpired(int timerId)
+{
+ time_t rawTime;
+ struct tm timeInfo;
+
+ time(&rawTime);
+ tzset();
+ localtime_r(&rawTime, &timeInfo);
+
+ int hour = timeInfo.tm_hour;
+ int min = timeInfo.tm_min;
+ int dayOfWeek = (0x01 << timeInfo.tm_wday);
+
+ __handleUpdate(hour, min, dayOfWeek);
+
+ return true;
+}
+
+void DeviceStatusAlarm::__handleUpdate(int hour, int min, int dayOfWeek)
+{
+ _I("Time: %02d:%02d, Day of Week: %#x", hour, min, dayOfWeek);
+
+ Json dataRead;
+ int resultTime = hour * 60 + min;
+ std::string resultDay = TimerManager::dowToStr(dayOfWeek);
+ dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, resultTime);
+ dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, resultDay);
+
+ for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+ Json option = (**it);
+ if (__isMatched(option, resultTime, resultDay)) {
+ publish(option, ERR_NONE, dataRead);
+ }
+ }
+}
+
+bool DeviceStatusAlarm::__isMatched(Json& option, int time, std::string day)
+{
+ bool ret = false;
+ int optionTime;
+ for (int i = 0; option.getAt(NULL, DEVICE_ST_TIME_OF_DAY, i, &optionTime); i++){
+ if (time == optionTime) {
+ ret = true;
+ break;
+ }
+ }
+ IF_FAIL_RETURN(ret, false);
+
+ std::string optionDay;
+ for (int i = 0; option.getAt(NULL, DEVICE_ST_DAY_OF_WEEK, i, &optionDay); i++){
+ if (day == optionDay) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+DeviceStatusAlarm::OptionSet::iterator DeviceStatusAlarm::__findOption(Json& option)
+{
+ for (auto it = __optionSet.begin(); it != __optionSet.end(); ++it) {
+ if (option == (**it))
+ return it;
+ }
+ return __optionSet.end();
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_ALARM_H_
+#define _DEVICE_SYSTEM_STATUS_ALARM_H_
+
+#include <map>
+#include <set>
+#include <TimerManager.h>
+#include <ContextProvider.h>
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+ class DeviceStatusAlarm : public ContextProvider, ITimerListener {
+ public:
+ DeviceStatusAlarm();
+ ~DeviceStatusAlarm();
+
+ int subscribe(Json option, Json *requestResult);
+ int unsubscribe(Json option);
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ protected:
+ bool onTimerExpired(int timerId);
+
+ private:
+ struct RefCountArray {
+ int count[7]; /* reference counts for days of week*/
+ RefCountArray();
+ };
+
+ struct TimerState {
+ int timerId;
+ int dayOfWeek; /* day of week, merged into one integer */
+ TimerState() : timerId(-1), dayOfWeek(0) {}
+ };
+
+ typedef std::map<int, RefCountArray> RefCountMap;
+ typedef std::map<int, TimerState> TimerStateMap;
+ typedef std::set<Json*> OptionSet;
+
+ RefCountMap __refCountMap;
+ TimerStateMap __timerStateMap;
+ OptionSet __optionSet;
+ TimerManager __timerManager;
+
+ bool __add(int minute, int dayOfWeek);
+ bool __remove(int minute, int dayOfWeek);
+ bool __resetTimer(int hour);
+ void __clear();
+ void __handleUpdate(int hour, int min, int dayOfWeek);
+
+ int __getArrangedDayOfWeek(Json& option);
+ int __mergeDayOfWeek(int *refCnt);
+
+ bool __isMatched(Json& option, int time, std::string day);
+ OptionSet::iterator __findOption(Json& option);
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_ALARM_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <TimerManager.h>
+#include "Time.h"
+
+using namespace ctx;
+
+DeviceStatusTime::DeviceStatusTime() :
+ DeviceProviderBase(DEVICE_ST_SUBJ_TIME)
+{
+}
+
+DeviceStatusTime::~DeviceStatusTime()
+{
+}
+
+bool DeviceStatusTime::isSupported()
+{
+ return true;
+}
+
+void DeviceStatusTime::submitTriggerItem()
+{
+ registerTriggerItem(OPS_READ,
+ "{"
+ "\"TimeOfDay\":{\"type\":\"integer\",\"min\":0,\"max\":1439},"
+ "\"DayOfWeek\":{\"type\":\"string\",\"values\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\",\"Weekday\",\"Weekend\"]},"
+ "\"DayOfMonth\":{\"type\":\"integer\",\"min\":1,\"max\":31}"
+ "}",
+ NULL);
+}
+
+int DeviceStatusTime::subscribe()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int DeviceStatusTime::unsubscribe()
+{
+ return ERR_NOT_SUPPORTED;
+}
+
+int DeviceStatusTime::read()
+{
+ time_t rawtime;
+ struct tm timeInfo;
+
+ time(&rawtime);
+ tzset();
+ localtime_r(&rawtime, &timeInfo);
+
+ int dayOfMonth = timeInfo.tm_mday;
+ int minuteOfDay = timeInfo.tm_hour * 60 + timeInfo.tm_min;
+ std::string dayOfWeek = TimerManager::dowToStr(0x01 << timeInfo.tm_wday);
+
+ Json dataRead;
+ dataRead.set(NULL, DEVICE_ST_DAY_OF_MONTH, dayOfMonth);
+ dataRead.set(NULL, DEVICE_ST_DAY_OF_WEEK, dayOfWeek);
+ dataRead.set(NULL, DEVICE_ST_TIME_OF_DAY, minuteOfDay);
+
+ _I("Time: %02d:%02d, Day of Week: %s, Day of Month: %d", timeInfo.tm_hour, timeInfo.tm_min, dayOfWeek.c_str(), dayOfMonth);
+
+ replyToRead(NULL, ERR_NONE, dataRead);
+
+ return ERR_NONE;
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_TIME_H_
+#define _DEVICE_SYSTEM_STATUS_TIME_H_
+
+#include "../shared/DeviceProviderBase.h"
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+ class DeviceStatusTime : public DeviceProviderBase {
+ public:
+ DeviceStatusTime();
+ ~DeviceStatusTime();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+ };
+}
+
+#endif // _DEVICE_SYSTEM_STATUS_TIME_H_
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <SharedVars.h>
+#include "Wifi.h"
+
+using namespace ctx;
+
+DeviceStatusWifi::DeviceStatusWifi() :
+ DeviceProviderBase(DEVICE_ST_SUBJ_WIFI),
+ __lastState(UNKNOWN),
+ __isInitialized(false),
+ __isActivated(false),
+ __connState(WIFI_CONNECTION_STATE_FAILURE)
+{
+ IF_FAIL_VOID_TAG(__startMonitor(), _W, "WiFi monitor initialization failed");
+
+ if (!__getCurrentState()) {
+ __stopMonitor();
+ _W("Getting current WiFi status failed");
+ }
+}
+
+DeviceStatusWifi::~DeviceStatusWifi()
+{
+ __stopMonitor();
+}
+
+bool DeviceStatusWifi::isSupported()
+{
+ return getSystemInfoBool("tizen.org/feature/network.wifi");
+}
+
+void DeviceStatusWifi::submitTriggerItem()
+{
+ registerTriggerItem(OPS_SUBSCRIBE | OPS_READ,
+ "{"
+ "\"State\":{\"type\":\"string\",\"values\":[\"Disabled\",\"Unconnected\",\"Connected\"]},"
+ "\"BSSID\":{\"type\":\"string\"}"
+ "}",
+ NULL);
+}
+
+bool DeviceStatusWifi::__getCurrentState()
+{
+ int err;
+
+ if (!__isInitialized) {
+ err = wifi_initialize();
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
+ }
+
+ err = wifi_is_activated(&__isActivated);
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_is_activated() failed");
+
+ err = wifi_get_connection_state(&__connState);
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connection_state() failed");
+
+ if (__isActivated) {
+ if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
+ __lastState = CONNECTED;
+ __getBssid();
+ } else {
+ __lastState = UNCONNECTED;
+ __clearBssid();
+ }
+ } else {
+ __lastState = DISABLED;
+ __clearBssid();
+ }
+
+ if (!__isInitialized)
+ wifi_deinitialize();
+
+ return true;
+}
+
+bool DeviceStatusWifi::__getBssid()
+{
+ int err;
+ char *strBuf = NULL;
+ wifi_ap_h ap = NULL;
+
+ err = wifi_get_connected_ap(&ap);
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_get_connected_ap() failed");
+
+ wifi_ap_get_bssid(ap, &strBuf);
+ __bssid = (strBuf != NULL ? strBuf : "");
+ g_free(strBuf);
+
+ wifi_ap_destroy(ap);
+
+ if (__bssid.empty())
+ _W("Failed to get BSSID");
+
+ SharedVars().set(SharedVars::WIFI_BSSID, __bssid);
+ _D("BSSID: %s", __bssid.c_str());
+
+ return !__bssid.empty();
+}
+
+void DeviceStatusWifi::__clearBssid()
+{
+ __bssid.clear();
+ SharedVars().clear(SharedVars::WIFI_BSSID);
+ _D("No WiFi connection");
+}
+
+bool DeviceStatusWifi::__getResponsePacket(Json* data)
+{
+ switch (__lastState) {
+ case DISABLED:
+ data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_DISABLED);
+ break;
+
+ case UNCONNECTED:
+ data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_UNCONNECTED);
+ break;
+
+ case CONNECTED:
+ data->set(NULL, DEVICE_ST_STATE, DEVICE_ST_CONNECTED);
+ data->set(NULL, DEVICE_ST_BSSID, __bssid);
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+int DeviceStatusWifi::read()
+{
+ IF_FAIL_RETURN(__getCurrentState(), ERR_OPERATION_FAILED);
+
+ Json dataRead;
+ if (__getResponsePacket(&dataRead)) {
+ replyToRead(NULL, ERR_NONE, dataRead);
+ return ERR_NONE;
+ }
+
+ return ERR_OPERATION_FAILED;
+}
+
+bool DeviceStatusWifi::__startMonitor()
+{
+ IF_FAIL_RETURN(!__isInitialized, true);
+
+ int err;
+ err = wifi_initialize();
+ IF_FAIL_RETURN_TAG(err == WIFI_ERROR_NONE, false, _E, "wifi_initialize() failed");
+
+ err = wifi_set_device_state_changed_cb(__deviceStateChangedCb, this);
+ IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_device_state_changed_cb() failed");
+
+ err = wifi_set_connection_state_changed_cb(__connectionStateChangedCb, this);
+ IF_FAIL_CATCH_TAG(err == WIFI_ERROR_NONE, _E, "wifi_set_connection_state_changed_cb() failed");
+
+ __isInitialized = true;
+ return true;
+
+CATCH:
+ wifi_deinitialize();
+ return false;
+}
+
+void DeviceStatusWifi::__stopMonitor()
+{
+ IF_FAIL_VOID(__isInitialized);
+
+ wifi_unset_device_state_changed_cb();
+ wifi_unset_connection_state_changed_cb();
+ wifi_deinitialize();
+ __isInitialized = false;
+}
+
+int DeviceStatusWifi::subscribe()
+{
+#if 0
+ IF_FAIL_RETURN(__startMonitor(), ERR_OPERATION_FAILED);
+ if (!__getCurrentState()) {
+ __stopMonitor();
+ return ERR_OPERATION_FAILED;
+ }
+#endif
+
+ return ERR_NONE;
+}
+
+int DeviceStatusWifi::unsubscribe()
+{
+#if 0
+ __stopMonitor();
+#endif
+ return ERR_NONE;
+}
+
+void DeviceStatusWifi::__handleUpdate()
+{
+ int prevState = __lastState;
+
+ if (__isActivated) {
+ if (__connState == WIFI_CONNECTION_STATE_CONNECTED) {
+ __lastState = CONNECTED;
+ } else {
+ __lastState = UNCONNECTED;
+ }
+ } else {
+ __lastState = DISABLED;
+ }
+
+ if (__lastState != prevState) {
+ if (__lastState == CONNECTED) {
+ __getBssid();
+ } else {
+ __clearBssid();
+ }
+
+ Json data;
+ if (__beingSubscribed && __getResponsePacket(&data))
+ publish(NULL, ERR_NONE, data);
+ }
+}
+
+void DeviceStatusWifi::__deviceStateChangedCb(wifi_device_state_e state, void *userData)
+{
+ DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
+ instance->__isActivated = (state == WIFI_DEVICE_STATE_ACTIVATED);
+ instance->__handleUpdate();
+}
+
+void DeviceStatusWifi::__connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData)
+{
+ DeviceStatusWifi *instance = static_cast<DeviceStatusWifi*>(userData);
+ instance->__connState = state;
+ instance->__handleUpdate();
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DEVICE_SYSTEM_STATUS_WIFI_H_
+#define _DEVICE_SYSTEM_STATUS_WIFI_H_
+
+#include <string>
+#include <wifi.h>
+#include "../shared/DeviceProviderBase.h"
+#include "../shared/SystemTypes.h"
+
+namespace ctx {
+
+ class DeviceStatusWifi : public DeviceProviderBase {
+ public:
+ DeviceStatusWifi();
+ ~DeviceStatusWifi();
+
+ int subscribe();
+ int unsubscribe();
+ int read();
+
+ bool isSupported();
+ void submitTriggerItem();
+
+ private:
+ enum InternalState {
+ UNKNOWN = -1,
+ DISABLED = 0,
+ UNCONNECTED,
+ CONNECTED,
+ };
+
+ int __lastState;
+ bool __isInitialized;
+ bool __isActivated;
+ wifi_connection_state_e __connState;
+ std::string __bssid;
+
+ bool __getCurrentState();
+ bool __getBssid();
+ void __clearBssid();
+ bool __getResponsePacket(Json* data);
+ void __handleUpdate();
+ bool __startMonitor();
+ void __stopMonitor();
+ static void __deviceStateChangedCb(wifi_device_state_e state, void *userData);
+ static void __connectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, void *userData);
+ };
+}
+
+#endif // _CONTEXT_SYSTEM_STATUS_WIFI_H_