From 4ccda9d6f72b3a6af054e782d7692019e99c8e3f Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 13:19:54 -0600 Subject: [PATCH 01/93] Move existing source code to subfolder --- .gitignore => legacy/.gitignore | 0 CHANGELOG.md => legacy/CHANGELOG.md | 0 LICENSE.txt => legacy/LICENSE.txt | 0 NOTICE.md => legacy/NOTICE.md | 0 README.md => legacy/README.md | 0 {android-base => legacy/android-base}/.gitignore | 0 {android-base => legacy/android-base}/build.gradle | 0 .../android-base}/proguard-rules.pro | 0 .../android-base}/src/main/AndroidManifest.xml | 0 .../org/isoron/androidbase/AndroidBugReporter.java | 0 .../org/isoron/androidbase/AndroidDirFinder.java | 0 .../java/org/isoron/androidbase/AppContext.java | 0 .../org/isoron/androidbase/AppContextModule.java | 0 .../isoron/androidbase/BaseExceptionHandler.java | 0 .../org/isoron/androidbase/SSLContextProvider.java | 0 .../androidbase/activities/ActivityContext.java | 0 .../activities/ActivityContextModule.java | 0 .../androidbase/activities/ActivityScope.java | 0 .../isoron/androidbase/activities/BaseActivity.java | 0 .../androidbase/activities/BaseActivityModule.java | 0 .../org/isoron/androidbase/activities/BaseMenu.java | 0 .../isoron/androidbase/activities/BaseRootView.java | 0 .../isoron/androidbase/activities/BaseScreen.java | 0 .../androidbase/activities/BaseSelectionMenu.java | 0 .../org/isoron/androidbase/utils/ColorUtils.java | 0 .../org/isoron/androidbase/utils/FileUtils.java | 0 .../isoron/androidbase/utils/InterfaceUtils.java | 0 .../isoron/androidbase/utils/StyledResources.java | 0 .../android-base}/src/main/res/values/base.xml | 0 .../src/main/res/values/material_colors.xml | 0 .../android-pickers}/.gitignore | 0 .../android-pickers}/build.gradle | 0 .../android-pickers}/proguard-rules.pro | 0 .../android-pickers}/src/main/AndroidManifest.xml | 0 .../com/android/colorpicker/ColorPickerDialog.java | 0 .../com/android/colorpicker/ColorPickerPalette.java | 0 .../com/android/colorpicker/ColorPickerSwatch.java | 0 .../com/android/colorpicker/ColorStateDrawable.java | 0 .../com/android/colorpicker/HsvColorComparator.java | 0 .../datetimepicker/AccessibleLinearLayout.java | 0 .../android/datetimepicker/AccessibleTextView.java | 0 .../datetimepicker/HapticFeedbackController.java | 0 .../main/java/com/android/datetimepicker/Utils.java | 0 .../datetimepicker/date/AccessibleDateAnimator.java | 0 .../datetimepicker/date/DatePickerController.java | 0 .../datetimepicker/date/DatePickerDialog.java | 0 .../android/datetimepicker/date/DayPickerView.java | 0 .../android/datetimepicker/date/MonthAdapter.java | 0 .../com/android/datetimepicker/date/MonthView.java | 0 .../datetimepicker/date/SimpleDayPickerView.java | 0 .../datetimepicker/date/SimpleMonthAdapter.java | 0 .../datetimepicker/date/SimpleMonthView.java | 0 .../date/TextViewWithCircularIndicator.java | 0 .../android/datetimepicker/date/YearPickerView.java | 0 .../datetimepicker/time/AmPmCirclesView.java | 0 .../com/android/datetimepicker/time/CircleView.java | 0 .../datetimepicker/time/RadialPickerLayout.java | 0 .../datetimepicker/time/RadialSelectorView.java | 0 .../datetimepicker/time/RadialTextsView.java | 0 .../datetimepicker/time/TimePickerDialog.java | 0 .../src/main/res/color/date_picker_selector.xml | 0 .../main/res/color/date_picker_year_selector.xml | 0 .../ic_colorpicker_swatch_selected.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable/color_picker_swatch.xml | 0 .../src/main/res/drawable/done_background_color.xml | 0 .../res/drawable/done_background_color_dark.xml | 0 .../src/main/res/layout/color_picker_dialog.xml | 0 .../src/main/res/layout/color_picker_swatch.xml | 0 .../src/main/res/layout/date_picker_dialog.xml | 0 .../src/main/res/layout/date_picker_done_button.xml | 0 .../src/main/res/layout/date_picker_header_view.xml | 0 .../main/res/layout/date_picker_selected_date.xml | 0 .../main/res/layout/date_picker_view_animator.xml | 0 .../src/main/res/layout/time_header_label.xml | 0 .../src/main/res/layout/time_picker_dialog.xml | 0 .../src/main/res/layout/year_label_text_view.xml | 0 .../src/main/res/values/pickers.xml | 0 .../src/main/res/values/strings.xml | 0 build.gradle => legacy/build.gradle | 0 build.sh => legacy/build.sh | 0 gradle.properties => legacy/gradle.properties | 0 .../gradle}/wrapper/gradle-wrapper.jar | Bin .../gradle}/wrapper/gradle-wrapper.properties | 0 gradlew => legacy/gradlew | 0 gradlew.bat => legacy/gradlew.bat | 0 .../screenshots}/original/uhabits1.png | Bin .../screenshots}/original/uhabits2.png | Bin .../screenshots}/original/uhabits3.png | Bin .../screenshots}/original/uhabits4.png | Bin .../screenshots}/original/uhabits5.png | Bin .../screenshots}/original/uhabits6.png | Bin .../screenshots}/original/wear1.png | Bin .../screenshots}/tasker/tasker_01.png | Bin .../screenshots}/tasker/tasker_02.png | Bin .../screenshots}/tasker/tasker_03.png | Bin .../screenshots}/tasker/tasker_04.png | Bin .../screenshots}/tasker/tasker_05.png | Bin .../screenshots}/tasker/tasker_06.png | Bin .../screenshots}/tasker/tasker_07.png | Bin .../screenshots}/tasker/tasker_08.png | Bin .../screenshots}/tasker/tasker_09.png | Bin .../screenshots}/tasker/tasker_10.png | Bin .../screenshots}/tasker/tasker_11.png | Bin .../screenshots}/tasker/tasker_12.png | Bin .../screenshots}/tasker/tasker_13.png | Bin .../screenshots}/tasker/tasker_14.png | Bin .../screenshots}/tasker/thumbs/tasker_01.png | Bin .../screenshots}/tasker/thumbs/tasker_02.png | Bin .../screenshots}/tasker/thumbs/tasker_03.png | Bin .../screenshots}/tasker/thumbs/tasker_04.png | Bin .../screenshots}/tasker/thumbs/tasker_05.png | Bin .../screenshots}/tasker/thumbs/tasker_06.png | Bin .../screenshots}/tasker/thumbs/tasker_07.png | Bin .../screenshots}/tasker/thumbs/tasker_08.png | Bin .../screenshots}/tasker/thumbs/tasker_09.png | Bin .../screenshots}/tasker/thumbs/tasker_10.png | Bin .../screenshots}/tasker/thumbs/tasker_11.png | Bin .../screenshots}/tasker/thumbs/tasker_12.png | Bin .../screenshots}/tasker/thumbs/tasker_13.png | Bin .../screenshots}/tasker/thumbs/tasker_14.png | Bin .../screenshots}/thumbs/uhabits1.png | Bin .../screenshots}/thumbs/uhabits2.png | Bin .../screenshots}/thumbs/uhabits3.png | Bin .../screenshots}/thumbs/uhabits4.png | Bin .../screenshots}/thumbs/uhabits5.png | Bin .../screenshots}/thumbs/uhabits6.png | Bin settings.gradle => legacy/settings.gradle | 0 .../tools}/automator-log-converter-1.5.0.jar | Bin {tools => legacy/tools}/coverage-badge/badge.py | 0 .../tools}/coverage-badge/templates/flat.svg | 0 {tools => legacy/tools}/test-butler-app-1.3.1.apk | Bin .../uhabits-android}/build.gradle | 0 .../uhabits-android}/lint.xml | 0 .../uhabits-android}/proguard-rules.txt | 0 .../assets/views-v19/common/BarChart/render.png | Bin .../views-v19/common/BarChart/renderDataOffset.png | Bin .../common/BarChart/renderDifferentSize.png | Bin .../views-v19/common/BarChart/renderTransparent.png | Bin .../views-v19/common/FrequencyChart/render.png | Bin .../common/FrequencyChart/renderDataOffset.png | Bin .../common/FrequencyChart/renderDifferentSize.png | Bin .../common/FrequencyChart/renderTransparent.png | Bin .../assets/views-v19/common/HistoryChart/render.png | Bin .../common/HistoryChart/renderDataOffset.png | Bin .../common/HistoryChart/renderDifferentSize.png | Bin .../common/HistoryChart/renderTransparent.png | Bin .../assets/views-v19/common/RingView/render.png | Bin .../common/RingView/renderDifferentParams.png | Bin .../assets/views-v19/common/ScoreChart/render.png | Bin .../common/ScoreChart/renderDataOffset.png | Bin .../common/ScoreChart/renderDifferentSize.png | Bin .../views-v19/common/ScoreChart/renderMonthly.png | Bin .../common/ScoreChart/renderTransparent.png | Bin .../views-v19/common/ScoreChart/renderYearly.png | Bin .../assets/views-v19/common/StreakChart/render.png | Bin .../common/StreakChart/renderSmallSize.png | Bin .../common/StreakChart/renderTransparent.png | Bin .../CheckmarkButtonView/render_explicit_check.png | Bin .../CheckmarkButtonView/render_implicit_check.png | Bin .../list/CheckmarkButtonView/render_unchecked.png | Bin .../habits/list/CheckmarkPanelView/render.png | Bin .../CheckmarkPanelView/render_different_color.png | Bin .../list/CheckmarkPanelView/render_offset.png | Bin .../list/CheckmarkPanelView/render_reversed.png | Bin .../views-v19/habits/list/HabitCardView/render.png | Bin .../habits/list/HabitCardView/render_changed.png | Bin .../habits/list/HabitCardView/render_numerical.png | Bin .../habits/list/HabitCardView/render_selected.png | Bin .../views-v19/habits/list/HeaderView/render.png | Bin .../habits/list/HeaderView/render_reverse.png | Bin .../views-v19/habits/list/HintView/render.png | Bin .../habits/list/NumberButtonView/render_above.png | Bin .../habits/list/NumberButtonView/render_below.png | Bin .../habits/list/NumberButtonView/render_zero.png | Bin .../habits/list/NumberPanelView/render.png | Bin .../list/NumberPanelView/render_different_color.png | Bin .../habits/list/NumberPanelView/render_offset.png | Bin .../habits/list/NumberPanelView/render_reversed.png | Bin .../views-v19/habits/show/FrequencyCard/render.png | Bin .../views-v19/habits/show/HistoryCard/render.png | Bin .../views-v19/habits/show/OverviewCard/render.png | Bin .../views-v19/habits/show/ScoreCard/render.png | Bin .../views-v19/habits/show/StreakCard/render.png | Bin .../views-v19/habits/show/SubtitleCard/render.png | Bin .../views-v19/widgets/CheckmarkWidget/render.png | Bin .../widgets/CheckmarkWidgetView/checked.png | Bin .../CheckmarkWidgetView/implicitly_checked.png | Bin .../widgets/CheckmarkWidgetView/large_size.png | Bin .../widgets/CheckmarkWidgetView/unchecked.png | Bin .../views-v19/widgets/FrequencyWidget/render.png | Bin .../views-v19/widgets/HistoryWidget/render.png | Bin .../assets/views-v19/widgets/ScoreWidget/render.png | Bin .../views-v19/widgets/StreakWidget/render.png | Bin .../assets/views-v21/common/BarChart/render.png | Bin .../views-v21/common/BarChart/renderDataOffset.png | Bin .../common/BarChart/renderDifferentSize.png | Bin .../views-v21/common/BarChart/renderTransparent.png | Bin .../views-v21/common/FrequencyChart/render.png | Bin .../common/FrequencyChart/renderDataOffset.png | Bin .../common/FrequencyChart/renderDifferentSize.png | Bin .../common/FrequencyChart/renderTransparent.png | Bin .../assets/views-v21/common/HistoryChart/render.png | Bin .../common/HistoryChart/renderDataOffset.png | Bin .../common/HistoryChart/renderDifferentSize.png | Bin .../common/HistoryChart/renderTransparent.png | Bin .../assets/views-v21/common/RingView/render.png | Bin .../common/RingView/renderDifferentParams.png | Bin .../assets/views-v21/common/ScoreChart/render.png | Bin .../common/ScoreChart/renderDataOffset.png | Bin .../common/ScoreChart/renderDifferentSize.png | Bin .../views-v21/common/ScoreChart/renderMonthly.png | Bin .../common/ScoreChart/renderTransparent.png | Bin .../views-v21/common/ScoreChart/renderYearly.png | Bin .../assets/views-v21/common/StreakChart/render.png | Bin .../common/StreakChart/renderSmallSize.png | Bin .../common/StreakChart/renderTransparent.png | Bin .../CheckmarkButtonView/render_explicit_check.png | Bin .../CheckmarkButtonView/render_implicit_check.png | Bin .../list/CheckmarkButtonView/render_unchecked.png | Bin .../habits/list/CheckmarkPanelView/render.png | Bin .../CheckmarkPanelView/render_different_color.png | Bin .../list/CheckmarkPanelView/render_offset.png | Bin .../list/CheckmarkPanelView/render_reversed.png | Bin .../views-v21/habits/list/HabitCardView/render.png | Bin .../habits/list/HabitCardView/render_changed.png | Bin .../habits/list/HabitCardView/render_numerical.png | Bin .../habits/list/HabitCardView/render_selected.png | Bin .../views-v21/habits/list/HeaderView/render.png | Bin .../habits/list/HeaderView/render_reverse.png | Bin .../views-v21/habits/list/HintView/render.png | Bin .../habits/list/NumberButtonView/render_above.png | Bin .../habits/list/NumberButtonView/render_below.png | Bin .../habits/list/NumberButtonView/render_zero.png | Bin .../habits/list/NumberPanelView/render.png | Bin .../list/NumberPanelView/render_different_color.png | Bin .../habits/list/NumberPanelView/render_offset.png | Bin .../habits/list/NumberPanelView/render_reversed.png | Bin .../views-v21/habits/show/FrequencyCard/render.png | Bin .../views-v21/habits/show/HistoryCard/render.png | Bin .../views-v21/habits/show/OverviewCard/render.png | Bin .../views-v21/habits/show/ScoreCard/render.png | Bin .../views-v21/habits/show/StreakCard/render.png | Bin .../views-v21/habits/show/SubtitleCard/render.png | Bin .../views-v21/widgets/CheckmarkWidget/render.png | Bin .../widgets/CheckmarkWidgetView/checked.png | Bin .../CheckmarkWidgetView/implicitly_checked.png | Bin .../widgets/CheckmarkWidgetView/large_size.png | Bin .../widgets/CheckmarkWidgetView/unchecked.png | Bin .../views-v21/widgets/FrequencyWidget/render.png | Bin .../views-v21/widgets/HistoryWidget/render.png | Bin .../assets/views-v21/widgets/ScoreWidget/render.png | Bin .../views-v21/widgets/StreakWidget/render.png | Bin .../assets/views-v26/common/BarChart/render.png | Bin .../views-v26/common/BarChart/renderDataOffset.png | Bin .../common/BarChart/renderDifferentSize.png | Bin .../views-v26/common/BarChart/renderTransparent.png | Bin .../views-v26/common/FrequencyChart/render.png | Bin .../common/FrequencyChart/renderDataOffset.png | Bin .../common/FrequencyChart/renderDifferentSize.png | Bin .../common/FrequencyChart/renderTransparent.png | Bin .../assets/views-v26/common/HistoryChart/render.png | Bin .../common/HistoryChart/renderDataOffset.png | Bin .../common/HistoryChart/renderDifferentSize.png | Bin .../common/HistoryChart/renderTransparent.png | Bin .../assets/views-v26/common/RingView/render.png | Bin .../common/RingView/renderDifferentParams.png | Bin .../assets/views-v26/common/ScoreChart/render.png | Bin .../common/ScoreChart/renderDataOffset.png | Bin .../common/ScoreChart/renderDifferentSize.png | Bin .../views-v26/common/ScoreChart/renderMonthly.png | Bin .../common/ScoreChart/renderTransparent.png | Bin .../views-v26/common/ScoreChart/renderYearly.png | Bin .../assets/views-v26/common/StreakChart/render.png | Bin .../common/StreakChart/renderSmallSize.png | Bin .../common/StreakChart/renderTransparent.png | Bin .../CheckmarkButtonView/render_explicit_check.png | Bin .../CheckmarkButtonView/render_implicit_check.png | Bin .../list/CheckmarkButtonView/render_unchecked.png | Bin .../habits/list/CheckmarkPanelView/render.png | Bin .../CheckmarkPanelView/render_different_color.png | Bin .../list/CheckmarkPanelView/render_offset.png | Bin .../list/CheckmarkPanelView/render_reversed.png | Bin .../views-v26/habits/list/HabitCardView/render.png | Bin .../habits/list/HabitCardView/render_changed.png | Bin .../habits/list/HabitCardView/render_numerical.png | Bin .../habits/list/HabitCardView/render_selected.png | Bin .../views-v26/habits/list/HeaderView/render.png | Bin .../habits/list/HeaderView/render_reverse.png | Bin .../views-v26/habits/list/HintView/render.png | Bin .../habits/list/NumberButtonView/render_above.png | Bin .../habits/list/NumberButtonView/render_below.png | Bin .../habits/list/NumberButtonView/render_zero.png | Bin .../habits/list/NumberPanelView/render.png | Bin .../list/NumberPanelView/render_different_color.png | Bin .../habits/list/NumberPanelView/render_offset.png | Bin .../habits/list/NumberPanelView/render_reversed.png | Bin .../views-v26/habits/show/FrequencyCard/render.png | Bin .../views-v26/habits/show/HistoryCard/render.png | Bin .../views-v26/habits/show/OverviewCard/render.png | Bin .../views-v26/habits/show/ScoreCard/render.png | Bin .../views-v26/habits/show/StreakCard/render.png | Bin .../views-v26/habits/show/SubtitleCard/render.png | Bin .../views-v26/widgets/CheckmarkWidget/render.png | Bin .../widgets/CheckmarkWidgetView/checked.png | Bin .../CheckmarkWidgetView/implicitly_checked.png | Bin .../widgets/CheckmarkWidgetView/large_size.png | Bin .../widgets/CheckmarkWidgetView/unchecked.png | Bin .../views-v26/widgets/FrequencyWidget/render.png | Bin .../views-v26/widgets/HistoryWidget/render.png | Bin .../assets/views-v26/widgets/ScoreWidget/render.png | Bin .../views-v26/widgets/StreakWidget/render.png | Bin .../java/org/isoron/uhabits/BaseAndroidTest.java | 0 .../org/isoron/uhabits/BaseUserInterfaceTest.java | 0 .../java/org/isoron/uhabits/BaseViewTest.java | 0 .../java/org/isoron/uhabits/HabitFixtures.java | 0 .../java/org/isoron/uhabits/HabitLoggerTest.java | 0 .../isoron/uhabits/HabitsActivityTestComponent.kt | 0 .../org/isoron/uhabits/HabitsApplicationTest.java | 0 .../uhabits/HabitsApplicationTestComponent.java | 0 .../org/isoron/uhabits/acceptance/AboutTest.java | 0 .../org/isoron/uhabits/acceptance/HabitsTest.java | 0 .../org/isoron/uhabits/acceptance/LinksTest.java | 0 .../org/isoron/uhabits/acceptance/WidgetTest.java | 0 .../uhabits/acceptance/steps/CommonSteps.java | 0 .../uhabits/acceptance/steps/EditHabitSteps.java | 0 .../uhabits/acceptance/steps/ListHabitsSteps.java | 0 .../uhabits/acceptance/steps/WidgetSteps.java | 0 .../activities/common/views/BarChartTest.java | 0 .../activities/common/views/FrequencyChartTest.java | 0 .../activities/common/views/HistoryChartTest.java | 0 .../activities/common/views/RingViewTest.java | 0 .../activities/common/views/ScoreChartTest.java | 0 .../activities/common/views/StreakChartTest.java | 0 .../habits/list/views/CheckmarkButtonViewTest.kt | 0 .../habits/list/views/CheckmarkPanelViewTest.kt | 0 .../habits/list/views/HabitCardViewTest.kt | 0 .../habits/list/views/HeaderViewTest.java | 0 .../activities/habits/list/views/HintViewTest.java | 0 .../habits/list/views/NumberButtonViewTest.kt | 0 .../habits/list/views/NumberPanelViewTest.kt | 0 .../habits/show/views/FrequencyCardTest.java | 0 .../habits/show/views/HistoryCardTest.java | 0 .../habits/show/views/OverviewCardTest.java | 0 .../activities/habits/show/views/ScoreCardTest.java | 0 .../habits/show/views/StreakCardTest.java | 0 .../habits/show/views/SubtitleCardTest.java | 0 .../uhabits/database/AndroidDatabaseTest.java | 0 .../isoron/uhabits/integration/SavedStateTest.java | 0 .../isoron/uhabits/performance/PerformanceTest.java | 0 .../org/isoron/uhabits/tasks/ExportCSVTaskTest.java | 0 .../org/isoron/uhabits/tasks/ExportDBTaskTest.java | 0 .../isoron/uhabits/widgets/CheckmarkWidgetTest.java | 0 .../isoron/uhabits/widgets/FrequencyWidgetTest.java | 0 .../isoron/uhabits/widgets/HistoryWidgetTest.java | 0 .../org/isoron/uhabits/widgets/ScoreWidgetTest.java | 0 .../isoron/uhabits/widgets/StreakWidgetTest.java | 0 .../widgets/views/CheckmarkWidgetViewTest.java | 0 .../uhabits-android}/src/main/AndroidManifest.xml | 0 .../uhabits-android}/src/main/assets/cacert.pem | 0 .../src/main/assets/fontawesome-webfont.ttf | Bin .../uhabits-android}/src/main/ic_launcher-web.png | Bin .../src/main/ic_small_widget_preview-web.png | Bin .../src/main/java/org/isoron/uhabits/HabitLogger.kt | 0 .../java/org/isoron/uhabits/HabitsApplication.kt | 0 .../isoron/uhabits/HabitsApplicationComponent.java | 0 .../java/org/isoron/uhabits/HabitsBackupAgent.kt | 0 .../java/org/isoron/uhabits/HabitsDatabaseOpener.kt | 0 .../main/java/org/isoron/uhabits/HabitsModule.kt | 0 .../uhabits/activities/AndroidThemeSwitcher.kt | 0 .../org/isoron/uhabits/activities/HabitModule.kt | 0 .../org/isoron/uhabits/activities/HabitsActivity.kt | 0 .../uhabits/activities/HabitsActivityComponent.kt | 0 .../uhabits/activities/HabitsActivityModule.kt | 0 .../isoron/uhabits/activities/HabitsDirFinder.kt | 0 .../uhabits/activities/about/AboutActivity.java | 0 .../uhabits/activities/about/AboutModule.java | 0 .../uhabits/activities/about/AboutRootView.java | 0 .../uhabits/activities/about/AboutScreen.java | 0 .../common/dialogs/ColorPickerDialog.java | 0 .../common/dialogs/ColorPickerDialogFactory.java | 0 .../common/dialogs/ConfirmDeleteDialog.java | 0 .../common/dialogs/HistoryEditorDialog.java | 0 .../common/dialogs/NumberPickerFactory.kt | 0 .../common/dialogs/WeekdayPickerDialog.java | 0 .../uhabits/activities/common/views/BarChart.java | 0 .../activities/common/views/BundleSavedState.java | 0 .../activities/common/views/FrequencyChart.java | 0 .../uhabits/activities/common/views/HabitChart.java | 0 .../activities/common/views/HistoryChart.java | 0 .../uhabits/activities/common/views/RingView.java | 0 .../uhabits/activities/common/views/ScoreChart.java | 0 .../activities/common/views/ScrollableChart.java | 0 .../activities/common/views/StreakChart.java | 0 .../activities/common/views/TaskProgressBar.kt | 0 .../activities/habits/edit/EditHabitDialog.java | 0 .../habits/edit/EditHabitDialogFactory.java | 0 .../habits/edit/views/ExampleEditText.java | 0 .../habits/edit/views/FrequencyPanel.java | 0 .../habits/edit/views/NameDescriptionPanel.java | 0 .../activities/habits/edit/views/ReminderPanel.java | 0 .../activities/habits/edit/views/TargetPanel.java | 0 .../activities/habits/list/ListHabitsActivity.kt | 0 .../activities/habits/list/ListHabitsMenu.kt | 0 .../activities/habits/list/ListHabitsModule.kt | 0 .../activities/habits/list/ListHabitsRootView.kt | 0 .../activities/habits/list/ListHabitsScreen.kt | 0 .../habits/list/ListHabitsSelectionMenu.kt | 0 .../activities/habits/list/views/ButtonPanelView.kt | 0 .../habits/list/views/CheckmarkButtonView.kt | 0 .../habits/list/views/CheckmarkPanelView.kt | 0 .../activities/habits/list/views/EmptyListView.kt | 0 .../habits/list/views/HabitCardListAdapter.java | 0 .../habits/list/views/HabitCardListController.kt | 0 .../habits/list/views/HabitCardListView.kt | 0 .../activities/habits/list/views/HabitCardView.kt | 0 .../habits/list/views/HabitCardViewHolder.kt | 0 .../activities/habits/list/views/HeaderView.kt | 0 .../activities/habits/list/views/HintView.kt | 0 .../habits/list/views/NumberButtonView.kt | 0 .../activities/habits/list/views/NumberPanelView.kt | 0 .../activities/habits/list/views/ShadowView.kt | 0 .../activities/habits/show/ShowHabitActivity.java | 0 .../activities/habits/show/ShowHabitModule.java | 0 .../activities/habits/show/ShowHabitRootView.java | 0 .../activities/habits/show/ShowHabitScreen.java | 0 .../activities/habits/show/ShowHabitsMenu.java | 0 .../activities/habits/show/views/BarCard.java | 0 .../activities/habits/show/views/FrequencyCard.java | 0 .../activities/habits/show/views/HabitCard.java | 0 .../activities/habits/show/views/HistoryCard.java | 0 .../activities/habits/show/views/OverviewCard.java | 0 .../activities/habits/show/views/ScoreCard.java | 0 .../activities/habits/show/views/StreakCard.java | 0 .../activities/habits/show/views/SubtitleCard.java | 0 .../uhabits/activities/intro/IntroActivity.java | 0 .../activities/settings/SettingsActivity.java | 0 .../activities/settings/SettingsFragment.java | 0 .../uhabits/automation/EditSettingActivity.kt | 0 .../uhabits/automation/EditSettingController.kt | 0 .../uhabits/automation/EditSettingRootView.kt | 0 .../uhabits/automation/FireSettingReceiver.kt | 0 .../org/isoron/uhabits/database/AndroidCursor.kt | 0 .../org/isoron/uhabits/database/AndroidDatabase.kt | 0 .../uhabits/database/AndroidDatabaseOpener.kt | 0 .../org/isoron/uhabits/intents/IntentFactory.kt | 0 .../java/org/isoron/uhabits/intents/IntentParser.kt | 0 .../org/isoron/uhabits/intents/IntentScheduler.kt | 0 .../isoron/uhabits/intents/PendingIntentFactory.kt | 0 .../notifications/AndroidNotificationTray.kt | 0 .../isoron/uhabits/notifications/RingtoneManager.kt | 0 .../notifications/SnoozeDelayPickerActivity.java | 0 .../uhabits/preferences/SharedPreferencesStorage.kt | 0 .../uhabits/receivers/ConnectivityReceiver.kt | 0 .../org/isoron/uhabits/receivers/ReceiverScope.java | 0 .../uhabits/receivers/ReminderController.java | 0 .../isoron/uhabits/receivers/ReminderReceiver.java | 0 .../isoron/uhabits/receivers/WidgetReceiver.java | 0 .../main/java/org/isoron/uhabits/sync/Event.java | 0 .../java/org/isoron/uhabits/sync/SyncManager.java | 0 .../java/org/isoron/uhabits/sync/SyncService.java | 0 .../org/isoron/uhabits/tasks/AndroidTaskRunner.java | 0 .../java/org/isoron/uhabits/tasks/ExportDBTask.java | 0 .../org/isoron/uhabits/tasks/ImportDataTask.java | 0 .../isoron/uhabits/utils/AndroidDateFormats.java | 0 .../org/isoron/uhabits/utils/AndroidDateUtils.java | 0 .../org/isoron/uhabits/utils/AttributeSetUtils.java | 0 .../org/isoron/uhabits/utils/DatabaseUtils.java | 0 .../java/org/isoron/uhabits/utils/PaletteUtils.java | 0 .../java/org/isoron/uhabits/utils/ViewExtensions.kt | 0 .../java/org/isoron/uhabits/widgets/BaseWidget.java | 0 .../isoron/uhabits/widgets/BaseWidgetProvider.java | 0 .../org/isoron/uhabits/widgets/CheckmarkWidget.kt | 0 .../uhabits/widgets/CheckmarkWidgetProvider.kt | 0 .../java/org/isoron/uhabits/widgets/EmptyWidget.kt | 0 .../org/isoron/uhabits/widgets/FrequencyWidget.kt | 0 .../uhabits/widgets/FrequencyWidgetProvider.kt | 0 .../org/isoron/uhabits/widgets/HabitPickerDialog.kt | 0 .../org/isoron/uhabits/widgets/HistoryWidget.kt | 0 .../isoron/uhabits/widgets/HistoryWidgetProvider.kt | 0 .../java/org/isoron/uhabits/widgets/ScoreWidget.kt | 0 .../isoron/uhabits/widgets/ScoreWidgetProvider.kt | 0 .../java/org/isoron/uhabits/widgets/StackWidget.kt | 0 .../isoron/uhabits/widgets/StackWidgetService.java | 0 .../org/isoron/uhabits/widgets/StackWidgetType.java | 0 .../java/org/isoron/uhabits/widgets/StreakWidget.kt | 0 .../isoron/uhabits/widgets/StreakWidgetProvider.kt | 0 .../org/isoron/uhabits/widgets/WidgetDimensions.kt | 0 .../org/isoron/uhabits/widgets/WidgetUpdater.kt | 0 .../uhabits/widgets/views/CheckmarkWidgetView.java | 0 .../uhabits/widgets/views/EmptyWidgetView.java | 0 .../uhabits/widgets/views/GraphWidgetView.java | 0 .../uhabits/widgets/views/HabitWidgetView.java | 0 .../main/res/drawable-hdpi/ic_action_add_dark.png | Bin .../main/res/drawable-hdpi/ic_action_add_light.png | Bin .../res/drawable-hdpi/ic_action_archive_dark.png | Bin .../res/drawable-hdpi/ic_action_archive_light.png | Bin .../src/main/res/drawable-hdpi/ic_action_cancel.png | Bin .../src/main/res/drawable-hdpi/ic_action_check.png | Bin .../main/res/drawable-hdpi/ic_action_color_dark.png | Bin .../res/drawable-hdpi/ic_action_color_light.png | Bin .../res/drawable-hdpi/ic_action_download_dark.png | Bin .../res/drawable-hdpi/ic_action_download_light.png | Bin .../main/res/drawable-hdpi/ic_action_edit_dark.png | Bin .../main/res/drawable-hdpi/ic_action_edit_light.png | Bin .../res/drawable-hdpi/ic_action_filter_dark.png | Bin .../res/drawable-hdpi/ic_action_filter_light.png | Bin .../src/main/res/drawable-hdpi/ic_action_snooze.png | Bin .../res/drawable-hdpi/ic_action_unarchive_dark.png | Bin .../res/drawable-hdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-hdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-hdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-hdpi/ic_notification.png | Bin .../src/main/res/drawable-hdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-hdpi/ic_repeat_white.png | Bin .../main/res/drawable-mdpi/ic_action_add_dark.png | Bin .../main/res/drawable-mdpi/ic_action_add_light.png | Bin .../res/drawable-mdpi/ic_action_archive_dark.png | Bin .../res/drawable-mdpi/ic_action_archive_light.png | Bin .../src/main/res/drawable-mdpi/ic_action_cancel.png | Bin .../src/main/res/drawable-mdpi/ic_action_check.png | Bin .../main/res/drawable-mdpi/ic_action_color_dark.png | Bin .../res/drawable-mdpi/ic_action_color_light.png | Bin .../res/drawable-mdpi/ic_action_download_dark.png | Bin .../res/drawable-mdpi/ic_action_download_light.png | Bin .../main/res/drawable-mdpi/ic_action_edit_dark.png | Bin .../main/res/drawable-mdpi/ic_action_edit_light.png | Bin .../res/drawable-mdpi/ic_action_filter_dark.png | Bin .../res/drawable-mdpi/ic_action_filter_light.png | Bin .../src/main/res/drawable-mdpi/ic_action_snooze.png | Bin .../res/drawable-mdpi/ic_action_unarchive_dark.png | Bin .../res/drawable-mdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-mdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-mdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-mdpi/ic_notification.png | Bin .../src/main/res/drawable-mdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-mdpi/ic_repeat_white.png | Bin .../res/drawable-nodpi/widget_preview_checkmark.png | Bin .../res/drawable-nodpi/widget_preview_frequency.png | Bin .../res/drawable-nodpi/widget_preview_history.png | Bin .../res/drawable-nodpi/widget_preview_score.png | Bin .../res/drawable-nodpi/widget_preview_streaks.png | Bin .../src/main/res/drawable-v21/ripple.xml | 0 .../main/res/drawable-v21/ripple_transparent.xml | 0 .../src/main/res/drawable-v21/selected_box.xml | 0 .../res/drawable-v21/widget_button_background.xml | 0 .../main/res/drawable-xhdpi/ic_action_add_dark.png | Bin .../main/res/drawable-xhdpi/ic_action_add_light.png | Bin .../res/drawable-xhdpi/ic_action_archive_dark.png | Bin .../res/drawable-xhdpi/ic_action_archive_light.png | Bin .../main/res/drawable-xhdpi/ic_action_cancel.png | Bin .../src/main/res/drawable-xhdpi/ic_action_check.png | Bin .../res/drawable-xhdpi/ic_action_color_dark.png | Bin .../res/drawable-xhdpi/ic_action_color_light.png | Bin .../res/drawable-xhdpi/ic_action_download_dark.png | Bin .../res/drawable-xhdpi/ic_action_download_light.png | Bin .../main/res/drawable-xhdpi/ic_action_edit_dark.png | Bin .../res/drawable-xhdpi/ic_action_edit_light.png | Bin .../res/drawable-xhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xhdpi/ic_action_snooze.png | Bin .../res/drawable-xhdpi/ic_action_unarchive_dark.png | Bin .../drawable-xhdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-xhdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-xhdpi/ic_alarm_white.png | Bin .../ic_colorpicker_swatch_selected.png | Bin .../src/main/res/drawable-xhdpi/ic_notification.png | Bin .../src/main/res/drawable-xhdpi/ic_repeat_black.png | Bin .../src/main/res/drawable-xhdpi/ic_repeat_white.png | Bin .../main/res/drawable-xxhdpi/ic_action_add_dark.png | Bin .../res/drawable-xxhdpi/ic_action_add_light.png | Bin .../res/drawable-xxhdpi/ic_action_archive_dark.png | Bin .../res/drawable-xxhdpi/ic_action_archive_light.png | Bin .../main/res/drawable-xxhdpi/ic_action_cancel.png | Bin .../main/res/drawable-xxhdpi/ic_action_check.png | Bin .../res/drawable-xxhdpi/ic_action_color_dark.png | Bin .../res/drawable-xxhdpi/ic_action_color_light.png | Bin .../res/drawable-xxhdpi/ic_action_download_dark.png | Bin .../drawable-xxhdpi/ic_action_download_light.png | Bin .../res/drawable-xxhdpi/ic_action_edit_dark.png | Bin .../res/drawable-xxhdpi/ic_action_edit_light.png | Bin .../res/drawable-xxhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xxhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xxhdpi/ic_action_snooze.png | Bin .../drawable-xxhdpi/ic_action_unarchive_dark.png | Bin .../drawable-xxhdpi/ic_action_unarchive_light.png | Bin .../src/main/res/drawable-xxhdpi/ic_alarm_black.png | Bin .../src/main/res/drawable-xxhdpi/ic_alarm_white.png | Bin .../main/res/drawable-xxhdpi/ic_notification.png | Bin .../main/res/drawable-xxhdpi/ic_repeat_black.png | Bin .../main/res/drawable-xxhdpi/ic_repeat_white.png | Bin .../res/drawable-xxxhdpi/ic_action_add_light.png | Bin .../res/drawable-xxxhdpi/ic_action_filter_dark.png | Bin .../res/drawable-xxxhdpi/ic_action_filter_light.png | Bin .../main/res/drawable-xxxhdpi/ic_alarm_black.png | Bin .../main/res/drawable-xxxhdpi/ic_alarm_white.png | Bin .../main/res/drawable-xxxhdpi/ic_repeat_black.png | Bin .../main/res/drawable-xxxhdpi/ic_repeat_white.png | Bin .../main/res/drawable/card_amoled_background.xml | 0 .../src/main/res/drawable/card_dark_background.xml | 0 .../src/main/res/drawable/card_light_background.xml | 0 .../src/main/res/drawable/color_picker_swatch.xml | 0 .../src/main/res/drawable/done_background_color.xml | 0 .../res/drawable/done_background_color_dark.xml | 0 .../src/main/res/drawable/intro_icon_1.png | Bin .../src/main/res/drawable/intro_icon_2.png | Bin .../src/main/res/drawable/intro_icon_4.png | Bin .../src/main/res/drawable/selected_box_amoled.xml | 0 .../src/main/res/drawable/selected_box_dark.xml | 0 .../src/main/res/drawable/selected_box_light.xml | 0 .../src/main/res/drawable/shadow.xml | 0 .../src/main/res/drawable/stripe.png | Bin .../src/main/res/drawable/widget_background.xml | 0 .../main/res/drawable/widget_button_background.xml | 0 .../uhabits-android}/src/main/res/layout/about.xml | 0 .../src/main/res/layout/automation.xml | 0 .../main/res/layout/checkmark_stackview_widget.xml | 0 .../src/main/res/layout/edit_habit.xml | 0 .../src/main/res/layout/edit_habit_frequency.xml | 0 .../src/main/res/layout/edit_habit_name.xml | 0 .../src/main/res/layout/edit_habit_reminder.xml | 0 .../src/main/res/layout/edit_habit_target.xml | 0 .../uhabits-android}/src/main/res/layout/filter.xml | 0 .../main/res/layout/frequency_stackview_widget.xml | 0 .../main/res/layout/habit_checkbox_list_item.xml | 0 .../main/res/layout/history_stackview_widget.xml | 0 .../src/main/res/layout/list_habits_hint.xml | 0 .../src/main/res/layout/number_picker_dialog.xml | 0 .../main/res/layout/preference_category_custom.xml | 0 .../src/main/res/layout/score_stackview_widget.xml | 0 .../src/main/res/layout/settings_activity.xml | 0 .../src/main/res/layout/show_habit.xml | 0 .../src/main/res/layout/show_habit_bar.xml | 0 .../src/main/res/layout/show_habit_frequency.xml | 0 .../src/main/res/layout/show_habit_history.xml | 0 .../src/main/res/layout/show_habit_inner.xml | 0 .../src/main/res/layout/show_habit_overview.xml | 0 .../src/main/res/layout/show_habit_preview.xml | 0 .../src/main/res/layout/show_habit_score.xml | 0 .../src/main/res/layout/show_habit_streak.xml | 0 .../src/main/res/layout/show_habit_subtitle.xml | 0 .../res/layout/stack_widget_configure_activity.xml | 0 .../src/main/res/layout/streak_stackview_widget.xml | 0 .../src/main/res/layout/toolbar.xml | 0 .../src/main/res/layout/widget_checkmark.xml | 0 .../main/res/layout/widget_configure_activity.xml | 0 .../src/main/res/layout/widget_empty.xml | 0 .../src/main/res/layout/widget_error.xml | 0 .../src/main/res/layout/widget_graph.xml | 0 .../src/main/res/layout/widget_wrapper.xml | 0 .../src/main/res/menu/list_habits.xml | 0 .../src/main/res/menu/list_habits_selection.xml | 0 .../src/main/res/menu/show_habit.xml | 0 .../src/main/res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../main/res/mipmap-hdpi/ic_launcher_foreground.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../main/res/mipmap-mdpi/ic_launcher_foreground.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_foreground.png | Bin .../src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_foreground.png | Bin .../src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_foreground.png | Bin .../src/main/res/values-af/strings.xml | 0 .../src/main/res/values-ar/strings.xml | 0 .../src/main/res/values-bg/strings.xml | 0 .../src/main/res/values-ca/strings.xml | 0 .../src/main/res/values-cs/strings.xml | 0 .../src/main/res/values-da/strings.xml | 0 .../src/main/res/values-de/strings.xml | 0 .../src/main/res/values-el/strings.xml | 0 .../src/main/res/values-eo/strings.xml | 0 .../src/main/res/values-es/strings.xml | 0 .../src/main/res/values-eu/strings.xml | 0 .../src/main/res/values-fa/strings.xml | 0 .../src/main/res/values-fi/strings.xml | 0 .../src/main/res/values-fr/strings.xml | 0 .../src/main/res/values-hi/strings.xml | 0 .../src/main/res/values-hr/strings.xml | 0 .../src/main/res/values-hu/strings.xml | 0 .../src/main/res/values-in/strings.xml | 0 .../src/main/res/values-it/strings.xml | 0 .../src/main/res/values-iw/strings.xml | 0 .../src/main/res/values-ja/strings.xml | 0 .../src/main/res/values-ko/strings.xml | 0 .../src/main/res/values-nl/strings.xml | 0 .../src/main/res/values-no-rNO/strings.xml | 0 .../src/main/res/values-pl/strings.xml | 0 .../src/main/res/values-pt-rBR/strings.xml | 0 .../src/main/res/values-pt-rPT/strings.xml | 0 .../src/main/res/values-ro/strings.xml | 0 .../src/main/res/values-ru/strings.xml | 0 .../src/main/res/values-sl/strings.xml | 0 .../src/main/res/values-sr/strings.xml | 0 .../src/main/res/values-sv/strings.xml | 0 .../src/main/res/values-tr/strings.xml | 0 .../src/main/res/values-uk/strings.xml | 0 .../src/main/res/values-v21/styles.xml | 0 .../src/main/res/values-v21/styles_list_habits.xml | 0 .../src/main/res/values-vi/strings.xml | 0 .../src/main/res/values-zh-rCN/strings.xml | 0 .../src/main/res/values-zh-rTW/strings.xml | 0 .../uhabits-android}/src/main/res/values/attrs.xml | 0 .../uhabits-android}/src/main/res/values/colors.xml | 0 .../src/main/res/values/constants.xml | 0 .../uhabits-android}/src/main/res/values/dimens.xml | 0 .../src/main/res/values/fontawesome.xml | 0 .../uhabits-android}/src/main/res/values/keys.xml | 0 .../src/main/res/values/strings.xml | 0 .../uhabits-android}/src/main/res/values/styles.xml | 0 .../src/main/res/values/styles_dialog.xml | 0 .../src/main/res/values/styles_list_habits.xml | 0 .../src/main/res/values/styles_show_habit.xml | 0 .../src/main/res/xml/file_paths.xml | 0 .../src/main/res/xml/preferences.xml | 0 .../src/main/res/xml/widget_checkmark_info.xml | 0 .../src/main/res/xml/widget_frequency_info.xml | 0 .../src/main/res/xml/widget_history_info.xml | 0 .../src/main/res/xml/widget_score_info.xml | 0 .../src/main/res/xml/widget_streak_info.xml | 0 .../java/org/isoron/uhabits/BaseAndroidJVMTest.java | 0 .../activities/habits/list/ListHabitsMenuTest.kt | 0 .../activities/habits/list/ListHabitsScreenTest.kt | 0 .../list/controllers/HabitCardListControllerTest.kt | 0 .../uhabits/receivers/ReminderControllerTest.java | 0 .../uhabits/receivers/WidgetControllerTest.java | 0 {uhabits-core => legacy/uhabits-core}/.gitignore | 0 {uhabits-core => legacy/uhabits-core}/build.gradle | 0 .../main/java/org/isoron/uhabits/core/AppScope.java | 0 .../main/java/org/isoron/uhabits/core/Config.java | 0 .../uhabits/core/commands/ArchiveHabitsCommand.java | 0 .../core/commands/ChangeHabitColorCommand.java | 0 .../org/isoron/uhabits/core/commands/Command.java | 0 .../isoron/uhabits/core/commands/CommandParser.java | 0 .../isoron/uhabits/core/commands/CommandRunner.java | 0 .../uhabits/core/commands/CreateHabitCommand.java | 0 .../core/commands/CreateRepetitionCommand.java | 0 .../uhabits/core/commands/DeleteHabitsCommand.java | 0 .../uhabits/core/commands/EditHabitCommand.java | 0 .../core/commands/ToggleRepetitionCommand.java | 0 .../core/commands/UnarchiveHabitsCommand.java | 0 .../isoron/uhabits/core/commands/package-info.java | 0 .../org/isoron/uhabits/core/database/Column.java | 0 .../org/isoron/uhabits/core/database/Cursor.java | 0 .../org/isoron/uhabits/core/database/Database.java | 0 .../uhabits/core/database/DatabaseOpener.java | 0 .../isoron/uhabits/core/database/JdbcCursor.java | 0 .../isoron/uhabits/core/database/JdbcDatabase.java | 0 .../uhabits/core/database/MigrationHelper.java | 0 .../isoron/uhabits/core/database/Repository.java | 0 .../org/isoron/uhabits/core/database/SQLParser.java | 0 .../org/isoron/uhabits/core/database/Table.java | 0 .../UnsupportedDatabaseVersionException.java | 0 .../isoron/uhabits/core/io/AbstractImporter.java | 0 .../org/isoron/uhabits/core/io/GenericImporter.java | 0 .../uhabits/core/io/HabitBullCSVImporter.java | 0 .../isoron/uhabits/core/io/HabitsCSVExporter.java | 0 .../org/isoron/uhabits/core/io/LoopDBImporter.java | 0 .../isoron/uhabits/core/io/RewireDBImporter.java | 0 .../isoron/uhabits/core/io/TickmateDBImporter.java | 0 .../org/isoron/uhabits/core/models/Checkmark.java | 0 .../isoron/uhabits/core/models/CheckmarkList.java | 0 .../org/isoron/uhabits/core/models/Frequency.java | 0 .../java/org/isoron/uhabits/core/models/Habit.java | 0 .../org/isoron/uhabits/core/models/HabitList.java | 0 .../isoron/uhabits/core/models/HabitMatcher.java | 0 .../uhabits/core/models/HabitMatcherBuilder.java | 0 .../uhabits/core/models/HabitNotFoundException.java | 0 .../isoron/uhabits/core/models/ModelFactory.java | 0 .../isoron/uhabits/core/models/ModelObservable.java | 0 .../org/isoron/uhabits/core/models/Reminder.java | 0 .../org/isoron/uhabits/core/models/Repetition.java | 0 .../isoron/uhabits/core/models/RepetitionList.java | 0 .../java/org/isoron/uhabits/core/models/Score.java | 0 .../org/isoron/uhabits/core/models/ScoreList.java | 0 .../java/org/isoron/uhabits/core/models/Streak.java | 0 .../org/isoron/uhabits/core/models/StreakList.java | 0 .../org/isoron/uhabits/core/models/Timestamp.java | 0 .../org/isoron/uhabits/core/models/WeekdayList.java | 0 .../core/models/memory/MemoryCheckmarkList.java | 0 .../uhabits/core/models/memory/MemoryHabitList.java | 0 .../core/models/memory/MemoryModelFactory.java | 0 .../core/models/memory/MemoryRepetitionList.java | 0 .../uhabits/core/models/memory/MemoryScoreList.java | 0 .../core/models/memory/MemoryStreakList.java | 0 .../uhabits/core/models/memory/package-info.java | 0 .../isoron/uhabits/core/models/package-info.java | 0 .../uhabits/core/models/sqlite/SQLModelFactory.java | 0 .../uhabits/core/models/sqlite/SQLiteHabitList.java | 0 .../core/models/sqlite/SQLiteRepetitionList.java | 0 .../uhabits/core/models/sqlite/package-info.java | 0 .../core/models/sqlite/records/HabitRecord.java | 0 .../models/sqlite/records/RepetitionRecord.java | 0 .../uhabits/core/preferences/Preferences.java | 0 .../uhabits/core/preferences/PropertiesStorage.java | 0 .../uhabits/core/preferences/WidgetPreferences.java | 0 .../uhabits/core/reminders/ReminderScheduler.java | 0 .../isoron/uhabits/core/tasks/ExportCSVTask.java | 0 .../uhabits/core/tasks/SingleThreadTaskRunner.java | 0 .../java/org/isoron/uhabits/core/tasks/Task.java | 0 .../org/isoron/uhabits/core/tasks/TaskRunner.java | 0 .../org/isoron/uhabits/core/test/HabitFixtures.java | 0 .../isoron/uhabits/core/ui/NotificationTray.java | 0 .../org/isoron/uhabits/core/ui/ThemeSwitcher.java | 0 .../core/ui/callbacks/OnColorPickedCallback.java | 0 .../core/ui/callbacks/OnConfirmedCallback.java | 0 .../core/ui/callbacks/OnFinishedCallback.java | 0 .../core/ui/screens/about/AboutBehavior.java | 0 .../ui/screens/habits/list/HabitCardListCache.java | 0 .../core/ui/screens/habits/list/HintList.java | 0 .../ui/screens/habits/list/ListHabitsBehavior.java | 0 .../screens/habits/list/ListHabitsMenuBehavior.java | 0 .../list/ListHabitsSelectionMenuBehavior.java | 0 .../ui/screens/habits/show/ShowHabitBehavior.java | 0 .../screens/habits/show/ShowHabitMenuBehavior.java | 0 .../uhabits/core/ui/widgets/WidgetBehavior.java | 0 .../isoron/uhabits/core/utils/ColorConstants.java | 0 .../org/isoron/uhabits/core/utils/DateFormats.java | 0 .../org/isoron/uhabits/core/utils/DateUtils.java | 0 .../isoron/uhabits/core/utils/MidnightTimer.java | 0 .../org/isoron/uhabits/core/utils/StringUtils.java | 0 .../src/main/resources/migrations/09.sql | 0 .../src/main/resources/migrations/10.sql | 0 .../src/main/resources/migrations/11.sql | 0 .../src/main/resources/migrations/12.sql | 0 .../src/main/resources/migrations/13.sql | 0 .../src/main/resources/migrations/14.sql | 0 .../src/main/resources/migrations/15.sql | 0 .../src/main/resources/migrations/16.sql | 0 .../src/main/resources/migrations/17.sql | 0 .../src/main/resources/migrations/18.sql | 0 .../src/main/resources/migrations/19.sql | 0 .../src/main/resources/migrations/20.sql | 0 .../src/main/resources/migrations/21.sql | 0 .../src/main/resources/migrations/22.sql | 0 .../java/org/isoron/uhabits/core/BaseUnitTest.java | 0 .../core/commands/ArchiveHabitsCommandTest.java | 0 .../core/commands/ChangeHabitColorCommandTest.java | 0 .../uhabits/core/commands/CommandParserTest.java | 0 .../core/commands/CreateHabitCommandTest.java | 0 .../core/commands/CreateRepetitionCommandTest.java | 0 .../core/commands/DeleteHabitsCommandTest.java | 0 .../uhabits/core/commands/EditHabitCommandTest.java | 0 .../core/commands/ToggleRepetitionCommandTest.java | 0 .../core/commands/UnarchiveHabitsCommandTest.java | 0 .../uhabits/core/database/RepositoryTest.java | 0 .../core/database/migrations/Version22Test.java | 0 .../uhabits/core/io/HabitsCSVExporterTest.java | 0 .../java/org/isoron/uhabits/core/io/ImportTest.java | 0 .../uhabits/core/models/CheckmarkListTest.java | 0 .../isoron/uhabits/core/models/HabitListTest.java | 0 .../org/isoron/uhabits/core/models/HabitTest.java | 0 .../uhabits/core/models/RepetitionListTest.java | 0 .../isoron/uhabits/core/models/ScoreListTest.java | 0 .../org/isoron/uhabits/core/models/ScoreTest.java | 0 .../isoron/uhabits/core/models/StreakListTest.java | 0 .../isoron/uhabits/core/models/TimestampTest.java | 0 .../isoron/uhabits/core/models/WeekdayListTest.java | 0 .../core/models/sqlite/SQLiteHabitListTest.java | 0 .../models/sqlite/SQLiteRepetitionListTest.java | 0 .../core/models/sqlite/records/HabitRecordTest.java | 0 .../models/sqlite/records/RepetitionRecordTest.java | 0 .../uhabits/core/preferences/PreferencesTest.java | 0 .../core/preferences/PropertiesStorageTest.java | 0 .../core/reminders/ReminderSchedulerTest.java | 0 .../core/tasks/SingleThreadTaskRunnerTest.java | 0 .../core/ui/screens/about/AboutBehaviorTest.java | 0 .../screens/habits/list/HabitCardListCacheTest.java | 0 .../core/ui/screens/habits/list/HintListTest.java | 0 .../screens/habits/list/ListHabitsBehaviorTest.java | 0 .../habits/list/ListHabitsMenuBehaviorTest.java | 0 .../list/ListHabitsSelectionMenuBehaviorTest.java | 0 .../habits/show/ShowHabitMenuBehaviorTest.java | 0 .../isoron/uhabits/core/utils/DateUtilsTest.java | 0 .../src/test/resources/databases/021.db | Bin .../uhabits-core}/src/test/resources/habitbull.csv | 0 .../uhabits-core}/src/test/resources/loop.db | Bin .../uhabits-core}/src/test/resources/rewire.db | Bin .../uhabits-core}/src/test/resources/tickmate.db | Bin 882 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => legacy/.gitignore (100%) rename CHANGELOG.md => legacy/CHANGELOG.md (100%) rename LICENSE.txt => legacy/LICENSE.txt (100%) rename NOTICE.md => legacy/NOTICE.md (100%) rename README.md => legacy/README.md (100%) rename {android-base => legacy/android-base}/.gitignore (100%) rename {android-base => legacy/android-base}/build.gradle (100%) rename {android-base => legacy/android-base}/proguard-rules.pro (100%) rename {android-base => legacy/android-base}/src/main/AndroidManifest.xml (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/AndroidBugReporter.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/AndroidDirFinder.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/AppContext.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/AppContextModule.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/SSLContextProvider.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/ActivityContext.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/ActivityContextModule.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/ActivityScope.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseActivity.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseActivityModule.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseMenu.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseRootView.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseScreen.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/utils/ColorUtils.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/utils/FileUtils.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java (100%) rename {android-base => legacy/android-base}/src/main/java/org/isoron/androidbase/utils/StyledResources.java (100%) rename {android-base => legacy/android-base}/src/main/res/values/base.xml (100%) rename {android-base => legacy/android-base}/src/main/res/values/material_colors.xml (100%) rename {android-pickers => legacy/android-pickers}/.gitignore (100%) rename {android-pickers => legacy/android-pickers}/build.gradle (100%) rename {android-pickers => legacy/android-pickers}/proguard-rules.pro (100%) rename {android-pickers => legacy/android-pickers}/src/main/AndroidManifest.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/colorpicker/ColorPickerDialog.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/colorpicker/ColorPickerPalette.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/colorpicker/ColorPickerSwatch.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/colorpicker/ColorStateDrawable.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/colorpicker/HsvColorComparator.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/AccessibleTextView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/HapticFeedbackController.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/Utils.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/DatePickerController.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/DayPickerView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/MonthAdapter.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/MonthView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/date/YearPickerView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/CircleView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/RadialTextsView.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/color/date_picker_selector.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/color/date_picker_year_selector.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable/color_picker_swatch.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable/done_background_color.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/drawable/done_background_color_dark.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/color_picker_dialog.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/color_picker_swatch.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/date_picker_dialog.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/date_picker_done_button.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/date_picker_header_view.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/date_picker_selected_date.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/date_picker_view_animator.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/time_header_label.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/time_picker_dialog.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/layout/year_label_text_view.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/values/pickers.xml (100%) rename {android-pickers => legacy/android-pickers}/src/main/res/values/strings.xml (100%) rename build.gradle => legacy/build.gradle (100%) rename build.sh => legacy/build.sh (100%) rename gradle.properties => legacy/gradle.properties (100%) rename {gradle => legacy/gradle}/wrapper/gradle-wrapper.jar (100%) rename {gradle => legacy/gradle}/wrapper/gradle-wrapper.properties (100%) rename gradlew => legacy/gradlew (100%) rename gradlew.bat => legacy/gradlew.bat (100%) rename {screenshots => legacy/screenshots}/original/uhabits1.png (100%) rename {screenshots => legacy/screenshots}/original/uhabits2.png (100%) rename {screenshots => legacy/screenshots}/original/uhabits3.png (100%) rename {screenshots => legacy/screenshots}/original/uhabits4.png (100%) rename {screenshots => legacy/screenshots}/original/uhabits5.png (100%) rename {screenshots => legacy/screenshots}/original/uhabits6.png (100%) rename {screenshots => legacy/screenshots}/original/wear1.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_01.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_02.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_03.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_04.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_05.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_06.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_07.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_08.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_09.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_10.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_11.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_12.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_13.png (100%) rename {screenshots => legacy/screenshots}/tasker/tasker_14.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_01.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_02.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_03.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_04.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_05.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_06.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_07.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_08.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_09.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_10.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_11.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_12.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_13.png (100%) rename {screenshots => legacy/screenshots}/tasker/thumbs/tasker_14.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits1.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits2.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits3.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits4.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits5.png (100%) rename {screenshots => legacy/screenshots}/thumbs/uhabits6.png (100%) rename settings.gradle => legacy/settings.gradle (100%) rename {tools => legacy/tools}/automator-log-converter-1.5.0.jar (100%) rename {tools => legacy/tools}/coverage-badge/badge.py (100%) rename {tools => legacy/tools}/coverage-badge/templates/flat.svg (100%) rename {tools => legacy/tools}/test-butler-app-1.3.1.apk (100%) rename {uhabits-android => legacy/uhabits-android}/build.gradle (100%) rename {uhabits-android => legacy/uhabits-android}/lint.xml (100%) rename {uhabits-android => legacy/uhabits-android}/proguard-rules.txt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/RingView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_numerical.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/HintView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/RingView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_numerical.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/HintView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/BarChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/BarChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/BarChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/BarChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/FrequencyChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/FrequencyChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/FrequencyChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/FrequencyChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/HistoryChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/HistoryChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/HistoryChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/HistoryChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/RingView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/RingView/renderDifferentParams.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/renderDataOffset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/renderDifferentSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/renderMonthly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/ScoreChart/renderYearly.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/StreakChart/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/StreakChart/renderSmallSize.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/common/StreakChart/renderTransparent.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_explicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_implicit_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HabitCardView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_changed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_numerical.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HeaderView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HeaderView/render_reverse.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/HintView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_above.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_below.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_zero.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_different_color.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_offset.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_reversed.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/FrequencyCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/HistoryCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/OverviewCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/ScoreCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/StreakCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/habits/show/SubtitleCard/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/CheckmarkWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/implicitly_checked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/large_size.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/unchecked.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/FrequencyWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/HistoryWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/ScoreWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/assets/views-v26/widgets/StreakWidget/render.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitsActivityTestComponent.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTestComponent.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/database/AndroidDatabaseTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/AndroidManifest.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/assets/cacert.pem (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/assets/fontawesome-webfont.ttf (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/ic_launcher-web.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/ic_small_widget_preview-web.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitLogger.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitsApplication.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitsBackupAgent.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitsDatabaseOpener.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/HabitsModule.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/HabitModule.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/HabitsActivity.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutModule.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/ButtonPanelView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/EmptyListView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListController.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/list/views/ShadowView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingController.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/database/AndroidCursor.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/database/AndroidDatabase.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/database/AndroidDatabaseOpener.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentFactory.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentParser.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReminderController.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/sync/Event.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/sync/SyncManager.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/sync/SyncService.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/EmptyWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StackWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/EmptyWidgetView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_add_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_add_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_archive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_archive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_cancel.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_color_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_color_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_download_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_download_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_edit_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_edit_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_filter_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_filter_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_snooze.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_action_unarchive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_alarm_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_alarm_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_notification.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_repeat_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-hdpi/ic_repeat_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_add_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_add_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_archive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_archive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_cancel.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_color_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_color_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_download_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_download_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_edit_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_edit_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_filter_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_filter_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_snooze.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_action_unarchive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_alarm_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_alarm_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_notification.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_repeat_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-mdpi/ic_repeat_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-nodpi/widget_preview_checkmark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-nodpi/widget_preview_frequency.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-nodpi/widget_preview_history.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-nodpi/widget_preview_score.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-nodpi/widget_preview_streaks.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-v21/ripple.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-v21/ripple_transparent.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-v21/selected_box.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-v21/widget_button_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_add_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_add_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_archive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_archive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_cancel.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_color_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_color_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_download_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_download_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_edit_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_edit_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_filter_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_filter_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_snooze.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_alarm_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_alarm_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_notification.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_repeat_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xhdpi/ic_repeat_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_add_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_add_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_archive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_cancel.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_check.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_color_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_color_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_download_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_download_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_edit_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_filter_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_snooze.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_alarm_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_alarm_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_notification.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_repeat_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxhdpi/ic_repeat_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_add_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_alarm_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_alarm_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_repeat_black.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable-xxxhdpi/ic_repeat_white.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/card_amoled_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/card_dark_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/card_light_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/color_picker_swatch.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/done_background_color.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/done_background_color_dark.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/intro_icon_1.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/intro_icon_2.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/intro_icon_4.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/selected_box_amoled.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/selected_box_dark.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/selected_box_light.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/shadow.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/stripe.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/widget_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/drawable/widget_button_background.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/about.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/automation.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/checkmark_stackview_widget.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/edit_habit.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/edit_habit_frequency.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/edit_habit_name.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/edit_habit_reminder.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/edit_habit_target.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/filter.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/frequency_stackview_widget.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/habit_checkbox_list_item.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/history_stackview_widget.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/list_habits_hint.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/number_picker_dialog.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/preference_category_custom.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/score_stackview_widget.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/settings_activity.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_bar.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_frequency.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_history.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_inner.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_overview.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_preview.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_score.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_streak.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/show_habit_subtitle.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/stack_widget_configure_activity.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/streak_stackview_widget.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/toolbar.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_checkmark.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_configure_activity.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_empty.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_error.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_graph.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/layout/widget_wrapper.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/menu/list_habits.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/menu/list_habits_selection.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/menu/show_habit.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-hdpi/ic_launcher_foreground.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-mdpi/ic_launcher_foreground.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-af/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ar/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-bg/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ca/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-cs/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-da/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-de/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-el/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-eo/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-es/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-eu/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-fa/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-fi/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-fr/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-hi/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-hr/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-hu/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-in/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-it/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-iw/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ja/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ko/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-nl/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-no-rNO/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-pl/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-pt-rBR/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-pt-rPT/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ro/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-ru/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-sl/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-sr/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-sv/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-tr/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-uk/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-v21/styles.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-v21/styles_list_habits.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-vi/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-zh-rCN/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values-zh-rTW/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/attrs.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/colors.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/constants.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/dimens.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/fontawesome.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/keys.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/strings.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/styles.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/styles_dialog.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/styles_list_habits.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/values/styles_show_habit.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/file_paths.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/preferences.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/widget_checkmark_info.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/widget_frequency_info.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/widget_history_info.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/widget_score_info.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/main/res/xml/widget_streak_info.xml (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/BaseAndroidJVMTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.kt (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java (100%) rename {uhabits-android => legacy/uhabits-android}/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/.gitignore (100%) rename {uhabits-core => legacy/uhabits-core}/build.gradle (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/AppScope.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/Config.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/Command.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/commands/package-info.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/Column.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/Cursor.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/Database.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/DatabaseOpener.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/JdbcCursor.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/JdbcDatabase.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/MigrationHelper.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/Repository.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/SQLParser.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/Table.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/database/UnsupportedDatabaseVersionException.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/AbstractImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/GenericImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/LoopDBImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/RewireDBImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/io/TickmateDBImporter.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Checkmark.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Frequency.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Habit.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/HabitList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Reminder.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Repetition.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Score.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/ScoreList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Streak.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/StreakList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/Timestamp.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/package-info.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLModelFactory.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/package-info.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecord.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecord.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/preferences/PropertiesStorage.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/tasks/Task.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/09.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/10.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/11.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/12.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/13.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/14.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/15.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/16.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/17.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/18.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/19.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/20.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/21.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/main/resources/migrations/22.sql (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/BaseUnitTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/database/RepositoryTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/database/migrations/Version22Test.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/io/ImportTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/HabitTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecordTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecordTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/preferences/PreferencesTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/preferences/PropertiesStorageTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/resources/databases/021.db (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/resources/habitbull.csv (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/resources/loop.db (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/resources/rewire.db (100%) rename {uhabits-core => legacy/uhabits-core}/src/test/resources/tickmate.db (100%) diff --git a/.gitignore b/legacy/.gitignore similarity index 100% rename from .gitignore rename to legacy/.gitignore diff --git a/CHANGELOG.md b/legacy/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to legacy/CHANGELOG.md diff --git a/LICENSE.txt b/legacy/LICENSE.txt similarity index 100% rename from LICENSE.txt rename to legacy/LICENSE.txt diff --git a/NOTICE.md b/legacy/NOTICE.md similarity index 100% rename from NOTICE.md rename to legacy/NOTICE.md diff --git a/README.md b/legacy/README.md similarity index 100% rename from README.md rename to legacy/README.md diff --git a/android-base/.gitignore b/legacy/android-base/.gitignore similarity index 100% rename from android-base/.gitignore rename to legacy/android-base/.gitignore diff --git a/android-base/build.gradle b/legacy/android-base/build.gradle similarity index 100% rename from android-base/build.gradle rename to legacy/android-base/build.gradle diff --git a/android-base/proguard-rules.pro b/legacy/android-base/proguard-rules.pro similarity index 100% rename from android-base/proguard-rules.pro rename to legacy/android-base/proguard-rules.pro diff --git a/android-base/src/main/AndroidManifest.xml b/legacy/android-base/src/main/AndroidManifest.xml similarity index 100% rename from android-base/src/main/AndroidManifest.xml rename to legacy/android-base/src/main/AndroidManifest.xml diff --git a/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java b/legacy/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java diff --git a/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java b/legacy/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java diff --git a/android-base/src/main/java/org/isoron/androidbase/AppContext.java b/legacy/android-base/src/main/java/org/isoron/androidbase/AppContext.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/AppContext.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/AppContext.java diff --git a/android-base/src/main/java/org/isoron/androidbase/AppContextModule.java b/legacy/android-base/src/main/java/org/isoron/androidbase/AppContextModule.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/AppContextModule.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/AppContextModule.java diff --git a/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java b/legacy/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java diff --git a/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java b/legacy/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContext.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContextModule.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContextModule.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/ActivityContextModule.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityContextModule.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/ActivityScope.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivityModule.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivityModule.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseActivityModule.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivityModule.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java diff --git a/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java b/legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java diff --git a/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java b/legacy/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java diff --git a/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java b/legacy/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java diff --git a/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java b/legacy/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java diff --git a/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java b/legacy/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java similarity index 100% rename from android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java rename to legacy/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java diff --git a/android-base/src/main/res/values/base.xml b/legacy/android-base/src/main/res/values/base.xml similarity index 100% rename from android-base/src/main/res/values/base.xml rename to legacy/android-base/src/main/res/values/base.xml diff --git a/android-base/src/main/res/values/material_colors.xml b/legacy/android-base/src/main/res/values/material_colors.xml similarity index 100% rename from android-base/src/main/res/values/material_colors.xml rename to legacy/android-base/src/main/res/values/material_colors.xml diff --git a/android-pickers/.gitignore b/legacy/android-pickers/.gitignore similarity index 100% rename from android-pickers/.gitignore rename to legacy/android-pickers/.gitignore diff --git a/android-pickers/build.gradle b/legacy/android-pickers/build.gradle similarity index 100% rename from android-pickers/build.gradle rename to legacy/android-pickers/build.gradle diff --git a/android-pickers/proguard-rules.pro b/legacy/android-pickers/proguard-rules.pro similarity index 100% rename from android-pickers/proguard-rules.pro rename to legacy/android-pickers/proguard-rules.pro diff --git a/android-pickers/src/main/AndroidManifest.xml b/legacy/android-pickers/src/main/AndroidManifest.xml similarity index 100% rename from android-pickers/src/main/AndroidManifest.xml rename to legacy/android-pickers/src/main/AndroidManifest.xml diff --git a/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java b/legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java similarity index 100% rename from android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java rename to legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java diff --git a/android-pickers/src/main/java/com/android/colorpicker/ColorPickerPalette.java b/legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerPalette.java similarity index 100% rename from android-pickers/src/main/java/com/android/colorpicker/ColorPickerPalette.java rename to legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerPalette.java diff --git a/android-pickers/src/main/java/com/android/colorpicker/ColorPickerSwatch.java b/legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerSwatch.java similarity index 100% rename from android-pickers/src/main/java/com/android/colorpicker/ColorPickerSwatch.java rename to legacy/android-pickers/src/main/java/com/android/colorpicker/ColorPickerSwatch.java diff --git a/android-pickers/src/main/java/com/android/colorpicker/ColorStateDrawable.java b/legacy/android-pickers/src/main/java/com/android/colorpicker/ColorStateDrawable.java similarity index 100% rename from android-pickers/src/main/java/com/android/colorpicker/ColorStateDrawable.java rename to legacy/android-pickers/src/main/java/com/android/colorpicker/ColorStateDrawable.java diff --git a/android-pickers/src/main/java/com/android/colorpicker/HsvColorComparator.java b/legacy/android-pickers/src/main/java/com/android/colorpicker/HsvColorComparator.java similarity index 100% rename from android-pickers/src/main/java/com/android/colorpicker/HsvColorComparator.java rename to legacy/android-pickers/src/main/java/com/android/colorpicker/HsvColorComparator.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/AccessibleLinearLayout.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/AccessibleTextView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/AccessibleTextView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/AccessibleTextView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/AccessibleTextView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/HapticFeedbackController.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/HapticFeedbackController.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/HapticFeedbackController.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/HapticFeedbackController.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/Utils.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/Utils.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/Utils.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/Utils.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/AccessibleDateAnimator.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerController.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerController.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerController.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerController.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DatePickerDialog.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/DayPickerView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DayPickerView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/DayPickerView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/DayPickerView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/MonthAdapter.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/MonthAdapter.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/MonthAdapter.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/MonthAdapter.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleDayPickerView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthAdapter.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/SimpleMonthView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/TextViewWithCircularIndicator.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/date/YearPickerView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/date/YearPickerView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/date/YearPickerView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/date/YearPickerView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/CircleView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/CircleView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/CircleView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/CircleView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialSelectorView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/RadialTextsView.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialTextsView.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/RadialTextsView.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/RadialTextsView.java diff --git a/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java b/legacy/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java similarity index 100% rename from android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java rename to legacy/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java diff --git a/android-pickers/src/main/res/color/date_picker_selector.xml b/legacy/android-pickers/src/main/res/color/date_picker_selector.xml similarity index 100% rename from android-pickers/src/main/res/color/date_picker_selector.xml rename to legacy/android-pickers/src/main/res/color/date_picker_selector.xml diff --git a/android-pickers/src/main/res/color/date_picker_year_selector.xml b/legacy/android-pickers/src/main/res/color/date_picker_year_selector.xml similarity index 100% rename from android-pickers/src/main/res/color/date_picker_year_selector.xml rename to legacy/android-pickers/src/main/res/color/date_picker_year_selector.xml diff --git a/android-pickers/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png b/legacy/android-pickers/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from android-pickers/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png rename to legacy/android-pickers/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png diff --git a/android-pickers/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png b/legacy/android-pickers/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from android-pickers/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png rename to legacy/android-pickers/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png diff --git a/android-pickers/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png b/legacy/android-pickers/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from android-pickers/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png rename to legacy/android-pickers/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png diff --git a/android-pickers/src/main/res/drawable/color_picker_swatch.xml b/legacy/android-pickers/src/main/res/drawable/color_picker_swatch.xml similarity index 100% rename from android-pickers/src/main/res/drawable/color_picker_swatch.xml rename to legacy/android-pickers/src/main/res/drawable/color_picker_swatch.xml diff --git a/android-pickers/src/main/res/drawable/done_background_color.xml b/legacy/android-pickers/src/main/res/drawable/done_background_color.xml similarity index 100% rename from android-pickers/src/main/res/drawable/done_background_color.xml rename to legacy/android-pickers/src/main/res/drawable/done_background_color.xml diff --git a/android-pickers/src/main/res/drawable/done_background_color_dark.xml b/legacy/android-pickers/src/main/res/drawable/done_background_color_dark.xml similarity index 100% rename from android-pickers/src/main/res/drawable/done_background_color_dark.xml rename to legacy/android-pickers/src/main/res/drawable/done_background_color_dark.xml diff --git a/android-pickers/src/main/res/layout/color_picker_dialog.xml b/legacy/android-pickers/src/main/res/layout/color_picker_dialog.xml similarity index 100% rename from android-pickers/src/main/res/layout/color_picker_dialog.xml rename to legacy/android-pickers/src/main/res/layout/color_picker_dialog.xml diff --git a/android-pickers/src/main/res/layout/color_picker_swatch.xml b/legacy/android-pickers/src/main/res/layout/color_picker_swatch.xml similarity index 100% rename from android-pickers/src/main/res/layout/color_picker_swatch.xml rename to legacy/android-pickers/src/main/res/layout/color_picker_swatch.xml diff --git a/android-pickers/src/main/res/layout/date_picker_dialog.xml b/legacy/android-pickers/src/main/res/layout/date_picker_dialog.xml similarity index 100% rename from android-pickers/src/main/res/layout/date_picker_dialog.xml rename to legacy/android-pickers/src/main/res/layout/date_picker_dialog.xml diff --git a/android-pickers/src/main/res/layout/date_picker_done_button.xml b/legacy/android-pickers/src/main/res/layout/date_picker_done_button.xml similarity index 100% rename from android-pickers/src/main/res/layout/date_picker_done_button.xml rename to legacy/android-pickers/src/main/res/layout/date_picker_done_button.xml diff --git a/android-pickers/src/main/res/layout/date_picker_header_view.xml b/legacy/android-pickers/src/main/res/layout/date_picker_header_view.xml similarity index 100% rename from android-pickers/src/main/res/layout/date_picker_header_view.xml rename to legacy/android-pickers/src/main/res/layout/date_picker_header_view.xml diff --git a/android-pickers/src/main/res/layout/date_picker_selected_date.xml b/legacy/android-pickers/src/main/res/layout/date_picker_selected_date.xml similarity index 100% rename from android-pickers/src/main/res/layout/date_picker_selected_date.xml rename to legacy/android-pickers/src/main/res/layout/date_picker_selected_date.xml diff --git a/android-pickers/src/main/res/layout/date_picker_view_animator.xml b/legacy/android-pickers/src/main/res/layout/date_picker_view_animator.xml similarity index 100% rename from android-pickers/src/main/res/layout/date_picker_view_animator.xml rename to legacy/android-pickers/src/main/res/layout/date_picker_view_animator.xml diff --git a/android-pickers/src/main/res/layout/time_header_label.xml b/legacy/android-pickers/src/main/res/layout/time_header_label.xml similarity index 100% rename from android-pickers/src/main/res/layout/time_header_label.xml rename to legacy/android-pickers/src/main/res/layout/time_header_label.xml diff --git a/android-pickers/src/main/res/layout/time_picker_dialog.xml b/legacy/android-pickers/src/main/res/layout/time_picker_dialog.xml similarity index 100% rename from android-pickers/src/main/res/layout/time_picker_dialog.xml rename to legacy/android-pickers/src/main/res/layout/time_picker_dialog.xml diff --git a/android-pickers/src/main/res/layout/year_label_text_view.xml b/legacy/android-pickers/src/main/res/layout/year_label_text_view.xml similarity index 100% rename from android-pickers/src/main/res/layout/year_label_text_view.xml rename to legacy/android-pickers/src/main/res/layout/year_label_text_view.xml diff --git a/android-pickers/src/main/res/values/pickers.xml b/legacy/android-pickers/src/main/res/values/pickers.xml similarity index 100% rename from android-pickers/src/main/res/values/pickers.xml rename to legacy/android-pickers/src/main/res/values/pickers.xml diff --git a/android-pickers/src/main/res/values/strings.xml b/legacy/android-pickers/src/main/res/values/strings.xml similarity index 100% rename from android-pickers/src/main/res/values/strings.xml rename to legacy/android-pickers/src/main/res/values/strings.xml diff --git a/build.gradle b/legacy/build.gradle similarity index 100% rename from build.gradle rename to legacy/build.gradle diff --git a/build.sh b/legacy/build.sh similarity index 100% rename from build.sh rename to legacy/build.sh diff --git a/gradle.properties b/legacy/gradle.properties similarity index 100% rename from gradle.properties rename to legacy/gradle.properties diff --git a/gradle/wrapper/gradle-wrapper.jar b/legacy/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from gradle/wrapper/gradle-wrapper.jar rename to legacy/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/legacy/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from gradle/wrapper/gradle-wrapper.properties rename to legacy/gradle/wrapper/gradle-wrapper.properties diff --git a/gradlew b/legacy/gradlew similarity index 100% rename from gradlew rename to legacy/gradlew diff --git a/gradlew.bat b/legacy/gradlew.bat similarity index 100% rename from gradlew.bat rename to legacy/gradlew.bat diff --git a/screenshots/original/uhabits1.png b/legacy/screenshots/original/uhabits1.png similarity index 100% rename from screenshots/original/uhabits1.png rename to legacy/screenshots/original/uhabits1.png diff --git a/screenshots/original/uhabits2.png b/legacy/screenshots/original/uhabits2.png similarity index 100% rename from screenshots/original/uhabits2.png rename to legacy/screenshots/original/uhabits2.png diff --git a/screenshots/original/uhabits3.png b/legacy/screenshots/original/uhabits3.png similarity index 100% rename from screenshots/original/uhabits3.png rename to legacy/screenshots/original/uhabits3.png diff --git a/screenshots/original/uhabits4.png b/legacy/screenshots/original/uhabits4.png similarity index 100% rename from screenshots/original/uhabits4.png rename to legacy/screenshots/original/uhabits4.png diff --git a/screenshots/original/uhabits5.png b/legacy/screenshots/original/uhabits5.png similarity index 100% rename from screenshots/original/uhabits5.png rename to legacy/screenshots/original/uhabits5.png diff --git a/screenshots/original/uhabits6.png b/legacy/screenshots/original/uhabits6.png similarity index 100% rename from screenshots/original/uhabits6.png rename to legacy/screenshots/original/uhabits6.png diff --git a/screenshots/original/wear1.png b/legacy/screenshots/original/wear1.png similarity index 100% rename from screenshots/original/wear1.png rename to legacy/screenshots/original/wear1.png diff --git a/screenshots/tasker/tasker_01.png b/legacy/screenshots/tasker/tasker_01.png similarity index 100% rename from screenshots/tasker/tasker_01.png rename to legacy/screenshots/tasker/tasker_01.png diff --git a/screenshots/tasker/tasker_02.png b/legacy/screenshots/tasker/tasker_02.png similarity index 100% rename from screenshots/tasker/tasker_02.png rename to legacy/screenshots/tasker/tasker_02.png diff --git a/screenshots/tasker/tasker_03.png b/legacy/screenshots/tasker/tasker_03.png similarity index 100% rename from screenshots/tasker/tasker_03.png rename to legacy/screenshots/tasker/tasker_03.png diff --git a/screenshots/tasker/tasker_04.png b/legacy/screenshots/tasker/tasker_04.png similarity index 100% rename from screenshots/tasker/tasker_04.png rename to legacy/screenshots/tasker/tasker_04.png diff --git a/screenshots/tasker/tasker_05.png b/legacy/screenshots/tasker/tasker_05.png similarity index 100% rename from screenshots/tasker/tasker_05.png rename to legacy/screenshots/tasker/tasker_05.png diff --git a/screenshots/tasker/tasker_06.png b/legacy/screenshots/tasker/tasker_06.png similarity index 100% rename from screenshots/tasker/tasker_06.png rename to legacy/screenshots/tasker/tasker_06.png diff --git a/screenshots/tasker/tasker_07.png b/legacy/screenshots/tasker/tasker_07.png similarity index 100% rename from screenshots/tasker/tasker_07.png rename to legacy/screenshots/tasker/tasker_07.png diff --git a/screenshots/tasker/tasker_08.png b/legacy/screenshots/tasker/tasker_08.png similarity index 100% rename from screenshots/tasker/tasker_08.png rename to legacy/screenshots/tasker/tasker_08.png diff --git a/screenshots/tasker/tasker_09.png b/legacy/screenshots/tasker/tasker_09.png similarity index 100% rename from screenshots/tasker/tasker_09.png rename to legacy/screenshots/tasker/tasker_09.png diff --git a/screenshots/tasker/tasker_10.png b/legacy/screenshots/tasker/tasker_10.png similarity index 100% rename from screenshots/tasker/tasker_10.png rename to legacy/screenshots/tasker/tasker_10.png diff --git a/screenshots/tasker/tasker_11.png b/legacy/screenshots/tasker/tasker_11.png similarity index 100% rename from screenshots/tasker/tasker_11.png rename to legacy/screenshots/tasker/tasker_11.png diff --git a/screenshots/tasker/tasker_12.png b/legacy/screenshots/tasker/tasker_12.png similarity index 100% rename from screenshots/tasker/tasker_12.png rename to legacy/screenshots/tasker/tasker_12.png diff --git a/screenshots/tasker/tasker_13.png b/legacy/screenshots/tasker/tasker_13.png similarity index 100% rename from screenshots/tasker/tasker_13.png rename to legacy/screenshots/tasker/tasker_13.png diff --git a/screenshots/tasker/tasker_14.png b/legacy/screenshots/tasker/tasker_14.png similarity index 100% rename from screenshots/tasker/tasker_14.png rename to legacy/screenshots/tasker/tasker_14.png diff --git a/screenshots/tasker/thumbs/tasker_01.png b/legacy/screenshots/tasker/thumbs/tasker_01.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_01.png rename to legacy/screenshots/tasker/thumbs/tasker_01.png diff --git a/screenshots/tasker/thumbs/tasker_02.png b/legacy/screenshots/tasker/thumbs/tasker_02.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_02.png rename to legacy/screenshots/tasker/thumbs/tasker_02.png diff --git a/screenshots/tasker/thumbs/tasker_03.png b/legacy/screenshots/tasker/thumbs/tasker_03.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_03.png rename to legacy/screenshots/tasker/thumbs/tasker_03.png diff --git a/screenshots/tasker/thumbs/tasker_04.png b/legacy/screenshots/tasker/thumbs/tasker_04.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_04.png rename to legacy/screenshots/tasker/thumbs/tasker_04.png diff --git a/screenshots/tasker/thumbs/tasker_05.png b/legacy/screenshots/tasker/thumbs/tasker_05.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_05.png rename to legacy/screenshots/tasker/thumbs/tasker_05.png diff --git a/screenshots/tasker/thumbs/tasker_06.png b/legacy/screenshots/tasker/thumbs/tasker_06.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_06.png rename to legacy/screenshots/tasker/thumbs/tasker_06.png diff --git a/screenshots/tasker/thumbs/tasker_07.png b/legacy/screenshots/tasker/thumbs/tasker_07.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_07.png rename to legacy/screenshots/tasker/thumbs/tasker_07.png diff --git a/screenshots/tasker/thumbs/tasker_08.png b/legacy/screenshots/tasker/thumbs/tasker_08.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_08.png rename to legacy/screenshots/tasker/thumbs/tasker_08.png diff --git a/screenshots/tasker/thumbs/tasker_09.png b/legacy/screenshots/tasker/thumbs/tasker_09.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_09.png rename to legacy/screenshots/tasker/thumbs/tasker_09.png diff --git a/screenshots/tasker/thumbs/tasker_10.png b/legacy/screenshots/tasker/thumbs/tasker_10.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_10.png rename to legacy/screenshots/tasker/thumbs/tasker_10.png diff --git a/screenshots/tasker/thumbs/tasker_11.png b/legacy/screenshots/tasker/thumbs/tasker_11.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_11.png rename to legacy/screenshots/tasker/thumbs/tasker_11.png diff --git a/screenshots/tasker/thumbs/tasker_12.png b/legacy/screenshots/tasker/thumbs/tasker_12.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_12.png rename to legacy/screenshots/tasker/thumbs/tasker_12.png diff --git a/screenshots/tasker/thumbs/tasker_13.png b/legacy/screenshots/tasker/thumbs/tasker_13.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_13.png rename to legacy/screenshots/tasker/thumbs/tasker_13.png diff --git a/screenshots/tasker/thumbs/tasker_14.png b/legacy/screenshots/tasker/thumbs/tasker_14.png similarity index 100% rename from screenshots/tasker/thumbs/tasker_14.png rename to legacy/screenshots/tasker/thumbs/tasker_14.png diff --git a/screenshots/thumbs/uhabits1.png b/legacy/screenshots/thumbs/uhabits1.png similarity index 100% rename from screenshots/thumbs/uhabits1.png rename to legacy/screenshots/thumbs/uhabits1.png diff --git a/screenshots/thumbs/uhabits2.png b/legacy/screenshots/thumbs/uhabits2.png similarity index 100% rename from screenshots/thumbs/uhabits2.png rename to legacy/screenshots/thumbs/uhabits2.png diff --git a/screenshots/thumbs/uhabits3.png b/legacy/screenshots/thumbs/uhabits3.png similarity index 100% rename from screenshots/thumbs/uhabits3.png rename to legacy/screenshots/thumbs/uhabits3.png diff --git a/screenshots/thumbs/uhabits4.png b/legacy/screenshots/thumbs/uhabits4.png similarity index 100% rename from screenshots/thumbs/uhabits4.png rename to legacy/screenshots/thumbs/uhabits4.png diff --git a/screenshots/thumbs/uhabits5.png b/legacy/screenshots/thumbs/uhabits5.png similarity index 100% rename from screenshots/thumbs/uhabits5.png rename to legacy/screenshots/thumbs/uhabits5.png diff --git a/screenshots/thumbs/uhabits6.png b/legacy/screenshots/thumbs/uhabits6.png similarity index 100% rename from screenshots/thumbs/uhabits6.png rename to legacy/screenshots/thumbs/uhabits6.png diff --git a/settings.gradle b/legacy/settings.gradle similarity index 100% rename from settings.gradle rename to legacy/settings.gradle diff --git a/tools/automator-log-converter-1.5.0.jar b/legacy/tools/automator-log-converter-1.5.0.jar similarity index 100% rename from tools/automator-log-converter-1.5.0.jar rename to legacy/tools/automator-log-converter-1.5.0.jar diff --git a/tools/coverage-badge/badge.py b/legacy/tools/coverage-badge/badge.py similarity index 100% rename from tools/coverage-badge/badge.py rename to legacy/tools/coverage-badge/badge.py diff --git a/tools/coverage-badge/templates/flat.svg b/legacy/tools/coverage-badge/templates/flat.svg similarity index 100% rename from tools/coverage-badge/templates/flat.svg rename to legacy/tools/coverage-badge/templates/flat.svg diff --git a/tools/test-butler-app-1.3.1.apk b/legacy/tools/test-butler-app-1.3.1.apk similarity index 100% rename from tools/test-butler-app-1.3.1.apk rename to legacy/tools/test-butler-app-1.3.1.apk diff --git a/uhabits-android/build.gradle b/legacy/uhabits-android/build.gradle similarity index 100% rename from uhabits-android/build.gradle rename to legacy/uhabits-android/build.gradle diff --git a/uhabits-android/lint.xml b/legacy/uhabits-android/lint.xml similarity index 100% rename from uhabits-android/lint.xml rename to legacy/uhabits-android/lint.xml diff --git a/uhabits-android/proguard-rules.txt b/legacy/uhabits-android/proguard-rules.txt similarity index 100% rename from uhabits-android/proguard-rules.txt rename to legacy/uhabits-android/proguard-rules.txt diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/BarChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/FrequencyChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/HistoryChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/RingView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/RingView/renderDifferentParams.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderMonthly.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/ScoreChart/renderYearly.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderSmallSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/common/StreakChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_explicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_implicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkButtonView/render_unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/CheckmarkPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_changed.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_numerical.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_numerical.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_numerical.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_numerical.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HabitCardView/render_selected.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HeaderView/render_reverse.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/HintView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_above.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_below.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberButtonView/render_zero.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/list/NumberPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/FrequencyCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/HistoryCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/OverviewCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/ScoreCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/StreakCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/habits/show/SubtitleCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/implicitly_checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/large_size.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/CheckmarkWidgetView/unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/FrequencyWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/HistoryWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/ScoreWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v19/widgets/StreakWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/BarChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/FrequencyChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/HistoryChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/RingView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/RingView/renderDifferentParams.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderMonthly.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/ScoreChart/renderYearly.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderSmallSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/common/StreakChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_explicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_implicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkButtonView/render_unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/CheckmarkPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_changed.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_numerical.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_numerical.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_numerical.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_numerical.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HabitCardView/render_selected.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HeaderView/render_reverse.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/HintView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_above.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_below.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberButtonView/render_zero.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/list/NumberPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/FrequencyCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/HistoryCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/OverviewCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/ScoreCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/StreakCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/habits/show/SubtitleCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/implicitly_checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/large_size.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/CheckmarkWidgetView/unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/FrequencyWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/HistoryWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/ScoreWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v21/widgets/StreakWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/BarChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/BarChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/FrequencyChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/HistoryChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/RingView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/RingView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/RingView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/RingView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/RingView/renderDifferentParams.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/RingView/renderDifferentParams.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/RingView/renderDifferentParams.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/RingView/renderDifferentParams.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDataOffset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDataOffset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDataOffset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDataOffset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDifferentSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDifferentSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDifferentSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderDifferentSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderMonthly.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderMonthly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderMonthly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderMonthly.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderYearly.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderYearly.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderYearly.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/ScoreChart/renderYearly.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderSmallSize.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderSmallSize.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderSmallSize.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderSmallSize.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderTransparent.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderTransparent.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderTransparent.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/common/StreakChart/renderTransparent.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_explicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_explicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_explicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_explicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_implicit_check.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_implicit_check.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_implicit_check.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_implicit_check.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkButtonView/render_unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/CheckmarkPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_changed.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_changed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_changed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_changed.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_numerical.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_numerical.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_numerical.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_numerical.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_selected.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_selected.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_selected.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HabitCardView/render_selected.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render_reverse.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render_reverse.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render_reverse.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HeaderView/render_reverse.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/HintView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HintView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/HintView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/HintView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_above.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_above.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_above.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_above.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_below.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_below.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_below.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_below.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_zero.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_zero.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_zero.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberButtonView/render_zero.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_different_color.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_different_color.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_different_color.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_different_color.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_offset.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_offset.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_offset.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_offset.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_reversed.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_reversed.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_reversed.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/list/NumberPanelView/render_reversed.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/FrequencyCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/FrequencyCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/FrequencyCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/FrequencyCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/HistoryCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/HistoryCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/HistoryCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/HistoryCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/OverviewCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/OverviewCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/OverviewCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/OverviewCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/ScoreCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/ScoreCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/ScoreCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/ScoreCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/StreakCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/StreakCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/StreakCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/StreakCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/habits/show/SubtitleCard/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/SubtitleCard/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/habits/show/SubtitleCard/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/habits/show/SubtitleCard/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/implicitly_checked.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/implicitly_checked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/implicitly_checked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/implicitly_checked.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/large_size.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/large_size.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/large_size.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/large_size.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/unchecked.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/unchecked.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/unchecked.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/CheckmarkWidgetView/unchecked.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/FrequencyWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/FrequencyWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/FrequencyWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/FrequencyWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/HistoryWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/HistoryWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/HistoryWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/HistoryWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/ScoreWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/ScoreWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/ScoreWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/ScoreWidget/render.png diff --git a/uhabits-android/src/androidTest/assets/views-v26/widgets/StreakWidget/render.png b/legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/StreakWidget/render.png similarity index 100% rename from uhabits-android/src/androidTest/assets/views-v26/widgets/StreakWidget/render.png rename to legacy/uhabits-android/src/androidTest/assets/views-v26/widgets/StreakWidget/render.png diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitLoggerTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsActivityTestComponent.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsActivityTestComponent.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsActivityTestComponent.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsActivityTestComponent.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTestComponent.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTestComponent.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTestComponent.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTestComponent.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/database/AndroidDatabaseTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/database/AndroidDatabaseTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/database/AndroidDatabaseTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/database/AndroidDatabaseTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/integration/SavedStateTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java b/legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java similarity index 100% rename from uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java rename to legacy/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java diff --git a/uhabits-android/src/main/AndroidManifest.xml b/legacy/uhabits-android/src/main/AndroidManifest.xml similarity index 100% rename from uhabits-android/src/main/AndroidManifest.xml rename to legacy/uhabits-android/src/main/AndroidManifest.xml diff --git a/uhabits-android/src/main/assets/cacert.pem b/legacy/uhabits-android/src/main/assets/cacert.pem similarity index 100% rename from uhabits-android/src/main/assets/cacert.pem rename to legacy/uhabits-android/src/main/assets/cacert.pem diff --git a/uhabits-android/src/main/assets/fontawesome-webfont.ttf b/legacy/uhabits-android/src/main/assets/fontawesome-webfont.ttf similarity index 100% rename from uhabits-android/src/main/assets/fontawesome-webfont.ttf rename to legacy/uhabits-android/src/main/assets/fontawesome-webfont.ttf diff --git a/uhabits-android/src/main/ic_launcher-web.png b/legacy/uhabits-android/src/main/ic_launcher-web.png similarity index 100% rename from uhabits-android/src/main/ic_launcher-web.png rename to legacy/uhabits-android/src/main/ic_launcher-web.png diff --git a/uhabits-android/src/main/ic_small_widget_preview-web.png b/legacy/uhabits-android/src/main/ic_small_widget_preview-web.png similarity index 100% rename from uhabits-android/src/main/ic_small_widget_preview-web.png rename to legacy/uhabits-android/src/main/ic_small_widget_preview-web.png diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitLogger.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplication.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsApplicationComponent.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsBackupAgent.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsDatabaseOpener.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsDatabaseOpener.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsDatabaseOpener.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsDatabaseOpener.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/HabitsModule.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitModule.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitModule.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitModule.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitModule.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivity.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityComponent.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsActivityModule.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/HabitsDirFinder.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutActivity.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutModule.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutModule.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutModule.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutModule.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutRootView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutScreen.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialog.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmDeleteDialog.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/HistoryEditorDialog.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberPickerFactory.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/WeekdayPickerDialog.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BarChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/FrequencyChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HabitChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/HistoryChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScoreChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/StreakChart.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialogFactory.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/FrequencyPanel.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ReminderPanel.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TargetPanel.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsModule.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsSelectionMenu.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ButtonPanelView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ButtonPanelView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ButtonPanelView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ButtonPanelView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/EmptyListView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/EmptyListView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/EmptyListView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/EmptyListView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListController.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListController.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListController.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListController.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewHolder.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HeaderView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HintView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ShadowView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ShadowView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ShadowView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/ShadowView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitModule.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitRootView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCard.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/intro/IntroActivity.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingController.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/automation/FireSettingReceiver.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidCursor.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidCursor.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidCursor.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidCursor.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabase.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabase.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabase.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabase.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabaseOpener.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabaseOpener.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabaseOpener.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/database/AndroidDatabaseOpener.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentFactory.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentParser.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/RingtoneManager.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ConnectivityReceiver.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReceiverScope.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/Event.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncManager.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/sync/SyncService.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ExportDBTask.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/tasks/ImportDataTask.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateFormats.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AndroidDateUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/AttributeSetUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/DatabaseUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidgetProvider.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/EmptyWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/EmptyWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/EmptyWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/EmptyWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidgetProvider.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HabitPickerDialog.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidgetProvider.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetDimensions.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/EmptyWidgetView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/EmptyWidgetView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/EmptyWidgetView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/EmptyWidgetView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/GraphWidgetView.java diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java b/legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java similarity index 100% rename from uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java rename to legacy/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/HabitWidgetView.java diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_add_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_archive_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_check.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_color_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_download_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_edit_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_filter_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_snooze.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_dark.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_action_unarchive_light.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_black.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_alarm_white.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_colorpicker_swatch_selected.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_notification.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_notification.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_notification.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_notification.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_black.png diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png b/legacy/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png rename to legacy/uhabits-android/src/main/res/drawable-hdpi/ic_repeat_white.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_add_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_archive_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_check.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_color_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_download_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_edit_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_filter_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_snooze.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_dark.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_action_unarchive_light.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_black.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_alarm_white.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_colorpicker_swatch_selected.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_notification.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_notification.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_notification.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_notification.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_black.png diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png b/legacy/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png rename to legacy/uhabits-android/src/main/res/drawable-mdpi/ic_repeat_white.png diff --git a/uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png b/legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png rename to legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_checkmark.png diff --git a/uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png b/legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png similarity index 100% rename from uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png rename to legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_frequency.png diff --git a/uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png b/legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png similarity index 100% rename from uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png rename to legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_history.png diff --git a/uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png b/legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png similarity index 100% rename from uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png rename to legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_score.png diff --git a/uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png b/legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png similarity index 100% rename from uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png rename to legacy/uhabits-android/src/main/res/drawable-nodpi/widget_preview_streaks.png diff --git a/uhabits-android/src/main/res/drawable-v21/ripple.xml b/legacy/uhabits-android/src/main/res/drawable-v21/ripple.xml similarity index 100% rename from uhabits-android/src/main/res/drawable-v21/ripple.xml rename to legacy/uhabits-android/src/main/res/drawable-v21/ripple.xml diff --git a/uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml b/legacy/uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml similarity index 100% rename from uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml rename to legacy/uhabits-android/src/main/res/drawable-v21/ripple_transparent.xml diff --git a/uhabits-android/src/main/res/drawable-v21/selected_box.xml b/legacy/uhabits-android/src/main/res/drawable-v21/selected_box.xml similarity index 100% rename from uhabits-android/src/main/res/drawable-v21/selected_box.xml rename to legacy/uhabits-android/src/main/res/drawable-v21/selected_box.xml diff --git a/uhabits-android/src/main/res/drawable-v21/widget_button_background.xml b/legacy/uhabits-android/src/main/res/drawable-v21/widget_button_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable-v21/widget_button_background.xml rename to legacy/uhabits-android/src/main/res/drawable-v21/widget_button_background.xml diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_add_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_archive_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_check.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_color_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_download_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_edit_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_filter_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_snooze.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_dark.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_action_unarchive_light.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_black.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_alarm_white.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_colorpicker_swatch_selected.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_notification.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_black.png diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png b/legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png rename to legacy/uhabits-android/src/main/res/drawable-xhdpi/ic_repeat_white.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_add_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_archive_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_check.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_color_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_download_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_edit_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_filter_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_snooze.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_unarchive_light.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_black.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_alarm_white.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_notification.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_black.png diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png b/legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png rename to legacy/uhabits-android/src/main/res/drawable-xxhdpi/ic_repeat_white.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_add_light.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_black.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_alarm_white.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_black.png diff --git a/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png b/legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png similarity index 100% rename from uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png rename to legacy/uhabits-android/src/main/res/drawable-xxxhdpi/ic_repeat_white.png diff --git a/uhabits-android/src/main/res/drawable/card_amoled_background.xml b/legacy/uhabits-android/src/main/res/drawable/card_amoled_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/card_amoled_background.xml rename to legacy/uhabits-android/src/main/res/drawable/card_amoled_background.xml diff --git a/uhabits-android/src/main/res/drawable/card_dark_background.xml b/legacy/uhabits-android/src/main/res/drawable/card_dark_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/card_dark_background.xml rename to legacy/uhabits-android/src/main/res/drawable/card_dark_background.xml diff --git a/uhabits-android/src/main/res/drawable/card_light_background.xml b/legacy/uhabits-android/src/main/res/drawable/card_light_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/card_light_background.xml rename to legacy/uhabits-android/src/main/res/drawable/card_light_background.xml diff --git a/uhabits-android/src/main/res/drawable/color_picker_swatch.xml b/legacy/uhabits-android/src/main/res/drawable/color_picker_swatch.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/color_picker_swatch.xml rename to legacy/uhabits-android/src/main/res/drawable/color_picker_swatch.xml diff --git a/uhabits-android/src/main/res/drawable/done_background_color.xml b/legacy/uhabits-android/src/main/res/drawable/done_background_color.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/done_background_color.xml rename to legacy/uhabits-android/src/main/res/drawable/done_background_color.xml diff --git a/uhabits-android/src/main/res/drawable/done_background_color_dark.xml b/legacy/uhabits-android/src/main/res/drawable/done_background_color_dark.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/done_background_color_dark.xml rename to legacy/uhabits-android/src/main/res/drawable/done_background_color_dark.xml diff --git a/uhabits-android/src/main/res/drawable/intro_icon_1.png b/legacy/uhabits-android/src/main/res/drawable/intro_icon_1.png similarity index 100% rename from uhabits-android/src/main/res/drawable/intro_icon_1.png rename to legacy/uhabits-android/src/main/res/drawable/intro_icon_1.png diff --git a/uhabits-android/src/main/res/drawable/intro_icon_2.png b/legacy/uhabits-android/src/main/res/drawable/intro_icon_2.png similarity index 100% rename from uhabits-android/src/main/res/drawable/intro_icon_2.png rename to legacy/uhabits-android/src/main/res/drawable/intro_icon_2.png diff --git a/uhabits-android/src/main/res/drawable/intro_icon_4.png b/legacy/uhabits-android/src/main/res/drawable/intro_icon_4.png similarity index 100% rename from uhabits-android/src/main/res/drawable/intro_icon_4.png rename to legacy/uhabits-android/src/main/res/drawable/intro_icon_4.png diff --git a/uhabits-android/src/main/res/drawable/selected_box_amoled.xml b/legacy/uhabits-android/src/main/res/drawable/selected_box_amoled.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/selected_box_amoled.xml rename to legacy/uhabits-android/src/main/res/drawable/selected_box_amoled.xml diff --git a/uhabits-android/src/main/res/drawable/selected_box_dark.xml b/legacy/uhabits-android/src/main/res/drawable/selected_box_dark.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/selected_box_dark.xml rename to legacy/uhabits-android/src/main/res/drawable/selected_box_dark.xml diff --git a/uhabits-android/src/main/res/drawable/selected_box_light.xml b/legacy/uhabits-android/src/main/res/drawable/selected_box_light.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/selected_box_light.xml rename to legacy/uhabits-android/src/main/res/drawable/selected_box_light.xml diff --git a/uhabits-android/src/main/res/drawable/shadow.xml b/legacy/uhabits-android/src/main/res/drawable/shadow.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/shadow.xml rename to legacy/uhabits-android/src/main/res/drawable/shadow.xml diff --git a/uhabits-android/src/main/res/drawable/stripe.png b/legacy/uhabits-android/src/main/res/drawable/stripe.png similarity index 100% rename from uhabits-android/src/main/res/drawable/stripe.png rename to legacy/uhabits-android/src/main/res/drawable/stripe.png diff --git a/uhabits-android/src/main/res/drawable/widget_background.xml b/legacy/uhabits-android/src/main/res/drawable/widget_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/widget_background.xml rename to legacy/uhabits-android/src/main/res/drawable/widget_background.xml diff --git a/uhabits-android/src/main/res/drawable/widget_button_background.xml b/legacy/uhabits-android/src/main/res/drawable/widget_button_background.xml similarity index 100% rename from uhabits-android/src/main/res/drawable/widget_button_background.xml rename to legacy/uhabits-android/src/main/res/drawable/widget_button_background.xml diff --git a/uhabits-android/src/main/res/layout/about.xml b/legacy/uhabits-android/src/main/res/layout/about.xml similarity index 100% rename from uhabits-android/src/main/res/layout/about.xml rename to legacy/uhabits-android/src/main/res/layout/about.xml diff --git a/uhabits-android/src/main/res/layout/automation.xml b/legacy/uhabits-android/src/main/res/layout/automation.xml similarity index 100% rename from uhabits-android/src/main/res/layout/automation.xml rename to legacy/uhabits-android/src/main/res/layout/automation.xml diff --git a/uhabits-android/src/main/res/layout/checkmark_stackview_widget.xml b/legacy/uhabits-android/src/main/res/layout/checkmark_stackview_widget.xml similarity index 100% rename from uhabits-android/src/main/res/layout/checkmark_stackview_widget.xml rename to legacy/uhabits-android/src/main/res/layout/checkmark_stackview_widget.xml diff --git a/uhabits-android/src/main/res/layout/edit_habit.xml b/legacy/uhabits-android/src/main/res/layout/edit_habit.xml similarity index 100% rename from uhabits-android/src/main/res/layout/edit_habit.xml rename to legacy/uhabits-android/src/main/res/layout/edit_habit.xml diff --git a/uhabits-android/src/main/res/layout/edit_habit_frequency.xml b/legacy/uhabits-android/src/main/res/layout/edit_habit_frequency.xml similarity index 100% rename from uhabits-android/src/main/res/layout/edit_habit_frequency.xml rename to legacy/uhabits-android/src/main/res/layout/edit_habit_frequency.xml diff --git a/uhabits-android/src/main/res/layout/edit_habit_name.xml b/legacy/uhabits-android/src/main/res/layout/edit_habit_name.xml similarity index 100% rename from uhabits-android/src/main/res/layout/edit_habit_name.xml rename to legacy/uhabits-android/src/main/res/layout/edit_habit_name.xml diff --git a/uhabits-android/src/main/res/layout/edit_habit_reminder.xml b/legacy/uhabits-android/src/main/res/layout/edit_habit_reminder.xml similarity index 100% rename from uhabits-android/src/main/res/layout/edit_habit_reminder.xml rename to legacy/uhabits-android/src/main/res/layout/edit_habit_reminder.xml diff --git a/uhabits-android/src/main/res/layout/edit_habit_target.xml b/legacy/uhabits-android/src/main/res/layout/edit_habit_target.xml similarity index 100% rename from uhabits-android/src/main/res/layout/edit_habit_target.xml rename to legacy/uhabits-android/src/main/res/layout/edit_habit_target.xml diff --git a/uhabits-android/src/main/res/layout/filter.xml b/legacy/uhabits-android/src/main/res/layout/filter.xml similarity index 100% rename from uhabits-android/src/main/res/layout/filter.xml rename to legacy/uhabits-android/src/main/res/layout/filter.xml diff --git a/uhabits-android/src/main/res/layout/frequency_stackview_widget.xml b/legacy/uhabits-android/src/main/res/layout/frequency_stackview_widget.xml similarity index 100% rename from uhabits-android/src/main/res/layout/frequency_stackview_widget.xml rename to legacy/uhabits-android/src/main/res/layout/frequency_stackview_widget.xml diff --git a/uhabits-android/src/main/res/layout/habit_checkbox_list_item.xml b/legacy/uhabits-android/src/main/res/layout/habit_checkbox_list_item.xml similarity index 100% rename from uhabits-android/src/main/res/layout/habit_checkbox_list_item.xml rename to legacy/uhabits-android/src/main/res/layout/habit_checkbox_list_item.xml diff --git a/uhabits-android/src/main/res/layout/history_stackview_widget.xml b/legacy/uhabits-android/src/main/res/layout/history_stackview_widget.xml similarity index 100% rename from uhabits-android/src/main/res/layout/history_stackview_widget.xml rename to legacy/uhabits-android/src/main/res/layout/history_stackview_widget.xml diff --git a/uhabits-android/src/main/res/layout/list_habits_hint.xml b/legacy/uhabits-android/src/main/res/layout/list_habits_hint.xml similarity index 100% rename from uhabits-android/src/main/res/layout/list_habits_hint.xml rename to legacy/uhabits-android/src/main/res/layout/list_habits_hint.xml diff --git a/uhabits-android/src/main/res/layout/number_picker_dialog.xml b/legacy/uhabits-android/src/main/res/layout/number_picker_dialog.xml similarity index 100% rename from uhabits-android/src/main/res/layout/number_picker_dialog.xml rename to legacy/uhabits-android/src/main/res/layout/number_picker_dialog.xml diff --git a/uhabits-android/src/main/res/layout/preference_category_custom.xml b/legacy/uhabits-android/src/main/res/layout/preference_category_custom.xml similarity index 100% rename from uhabits-android/src/main/res/layout/preference_category_custom.xml rename to legacy/uhabits-android/src/main/res/layout/preference_category_custom.xml diff --git a/uhabits-android/src/main/res/layout/score_stackview_widget.xml b/legacy/uhabits-android/src/main/res/layout/score_stackview_widget.xml similarity index 100% rename from uhabits-android/src/main/res/layout/score_stackview_widget.xml rename to legacy/uhabits-android/src/main/res/layout/score_stackview_widget.xml diff --git a/uhabits-android/src/main/res/layout/settings_activity.xml b/legacy/uhabits-android/src/main/res/layout/settings_activity.xml similarity index 100% rename from uhabits-android/src/main/res/layout/settings_activity.xml rename to legacy/uhabits-android/src/main/res/layout/settings_activity.xml diff --git a/uhabits-android/src/main/res/layout/show_habit.xml b/legacy/uhabits-android/src/main/res/layout/show_habit.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_bar.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_bar.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_bar.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_bar.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_frequency.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_frequency.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_frequency.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_frequency.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_history.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_history.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_history.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_history.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_inner.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_inner.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_inner.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_inner.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_overview.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_overview.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_overview.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_overview.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_preview.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_preview.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_preview.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_preview.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_score.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_score.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_score.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_score.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_streak.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_streak.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_streak.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_streak.xml diff --git a/uhabits-android/src/main/res/layout/show_habit_subtitle.xml b/legacy/uhabits-android/src/main/res/layout/show_habit_subtitle.xml similarity index 100% rename from uhabits-android/src/main/res/layout/show_habit_subtitle.xml rename to legacy/uhabits-android/src/main/res/layout/show_habit_subtitle.xml diff --git a/uhabits-android/src/main/res/layout/stack_widget_configure_activity.xml b/legacy/uhabits-android/src/main/res/layout/stack_widget_configure_activity.xml similarity index 100% rename from uhabits-android/src/main/res/layout/stack_widget_configure_activity.xml rename to legacy/uhabits-android/src/main/res/layout/stack_widget_configure_activity.xml diff --git a/uhabits-android/src/main/res/layout/streak_stackview_widget.xml b/legacy/uhabits-android/src/main/res/layout/streak_stackview_widget.xml similarity index 100% rename from uhabits-android/src/main/res/layout/streak_stackview_widget.xml rename to legacy/uhabits-android/src/main/res/layout/streak_stackview_widget.xml diff --git a/uhabits-android/src/main/res/layout/toolbar.xml b/legacy/uhabits-android/src/main/res/layout/toolbar.xml similarity index 100% rename from uhabits-android/src/main/res/layout/toolbar.xml rename to legacy/uhabits-android/src/main/res/layout/toolbar.xml diff --git a/uhabits-android/src/main/res/layout/widget_checkmark.xml b/legacy/uhabits-android/src/main/res/layout/widget_checkmark.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_checkmark.xml rename to legacy/uhabits-android/src/main/res/layout/widget_checkmark.xml diff --git a/uhabits-android/src/main/res/layout/widget_configure_activity.xml b/legacy/uhabits-android/src/main/res/layout/widget_configure_activity.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_configure_activity.xml rename to legacy/uhabits-android/src/main/res/layout/widget_configure_activity.xml diff --git a/uhabits-android/src/main/res/layout/widget_empty.xml b/legacy/uhabits-android/src/main/res/layout/widget_empty.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_empty.xml rename to legacy/uhabits-android/src/main/res/layout/widget_empty.xml diff --git a/uhabits-android/src/main/res/layout/widget_error.xml b/legacy/uhabits-android/src/main/res/layout/widget_error.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_error.xml rename to legacy/uhabits-android/src/main/res/layout/widget_error.xml diff --git a/uhabits-android/src/main/res/layout/widget_graph.xml b/legacy/uhabits-android/src/main/res/layout/widget_graph.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_graph.xml rename to legacy/uhabits-android/src/main/res/layout/widget_graph.xml diff --git a/uhabits-android/src/main/res/layout/widget_wrapper.xml b/legacy/uhabits-android/src/main/res/layout/widget_wrapper.xml similarity index 100% rename from uhabits-android/src/main/res/layout/widget_wrapper.xml rename to legacy/uhabits-android/src/main/res/layout/widget_wrapper.xml diff --git a/uhabits-android/src/main/res/menu/list_habits.xml b/legacy/uhabits-android/src/main/res/menu/list_habits.xml similarity index 100% rename from uhabits-android/src/main/res/menu/list_habits.xml rename to legacy/uhabits-android/src/main/res/menu/list_habits.xml diff --git a/uhabits-android/src/main/res/menu/list_habits_selection.xml b/legacy/uhabits-android/src/main/res/menu/list_habits_selection.xml similarity index 100% rename from uhabits-android/src/main/res/menu/list_habits_selection.xml rename to legacy/uhabits-android/src/main/res/menu/list_habits_selection.xml diff --git a/uhabits-android/src/main/res/menu/show_habit.xml b/legacy/uhabits-android/src/main/res/menu/show_habit.xml similarity index 100% rename from uhabits-android/src/main/res/menu/show_habit.xml rename to legacy/uhabits-android/src/main/res/menu/show_habit.xml diff --git a/uhabits-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/legacy/uhabits-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from uhabits-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to legacy/uhabits-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/uhabits-android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/legacy/uhabits-android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png rename to legacy/uhabits-android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png diff --git a/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png b/legacy/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png rename to legacy/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/legacy/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png rename to legacy/uhabits-android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png diff --git a/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher.png b/legacy/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher.png rename to legacy/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/legacy/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png rename to legacy/uhabits-android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/legacy/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to legacy/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/legacy/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png rename to legacy/uhabits-android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/legacy/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to legacy/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/legacy/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png rename to legacy/uhabits-android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/uhabits-android/src/main/res/values-af/strings.xml b/legacy/uhabits-android/src/main/res/values-af/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-af/strings.xml rename to legacy/uhabits-android/src/main/res/values-af/strings.xml diff --git a/uhabits-android/src/main/res/values-ar/strings.xml b/legacy/uhabits-android/src/main/res/values-ar/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ar/strings.xml rename to legacy/uhabits-android/src/main/res/values-ar/strings.xml diff --git a/uhabits-android/src/main/res/values-bg/strings.xml b/legacy/uhabits-android/src/main/res/values-bg/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-bg/strings.xml rename to legacy/uhabits-android/src/main/res/values-bg/strings.xml diff --git a/uhabits-android/src/main/res/values-ca/strings.xml b/legacy/uhabits-android/src/main/res/values-ca/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ca/strings.xml rename to legacy/uhabits-android/src/main/res/values-ca/strings.xml diff --git a/uhabits-android/src/main/res/values-cs/strings.xml b/legacy/uhabits-android/src/main/res/values-cs/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-cs/strings.xml rename to legacy/uhabits-android/src/main/res/values-cs/strings.xml diff --git a/uhabits-android/src/main/res/values-da/strings.xml b/legacy/uhabits-android/src/main/res/values-da/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-da/strings.xml rename to legacy/uhabits-android/src/main/res/values-da/strings.xml diff --git a/uhabits-android/src/main/res/values-de/strings.xml b/legacy/uhabits-android/src/main/res/values-de/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-de/strings.xml rename to legacy/uhabits-android/src/main/res/values-de/strings.xml diff --git a/uhabits-android/src/main/res/values-el/strings.xml b/legacy/uhabits-android/src/main/res/values-el/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-el/strings.xml rename to legacy/uhabits-android/src/main/res/values-el/strings.xml diff --git a/uhabits-android/src/main/res/values-eo/strings.xml b/legacy/uhabits-android/src/main/res/values-eo/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-eo/strings.xml rename to legacy/uhabits-android/src/main/res/values-eo/strings.xml diff --git a/uhabits-android/src/main/res/values-es/strings.xml b/legacy/uhabits-android/src/main/res/values-es/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-es/strings.xml rename to legacy/uhabits-android/src/main/res/values-es/strings.xml diff --git a/uhabits-android/src/main/res/values-eu/strings.xml b/legacy/uhabits-android/src/main/res/values-eu/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-eu/strings.xml rename to legacy/uhabits-android/src/main/res/values-eu/strings.xml diff --git a/uhabits-android/src/main/res/values-fa/strings.xml b/legacy/uhabits-android/src/main/res/values-fa/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-fa/strings.xml rename to legacy/uhabits-android/src/main/res/values-fa/strings.xml diff --git a/uhabits-android/src/main/res/values-fi/strings.xml b/legacy/uhabits-android/src/main/res/values-fi/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-fi/strings.xml rename to legacy/uhabits-android/src/main/res/values-fi/strings.xml diff --git a/uhabits-android/src/main/res/values-fr/strings.xml b/legacy/uhabits-android/src/main/res/values-fr/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-fr/strings.xml rename to legacy/uhabits-android/src/main/res/values-fr/strings.xml diff --git a/uhabits-android/src/main/res/values-hi/strings.xml b/legacy/uhabits-android/src/main/res/values-hi/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-hi/strings.xml rename to legacy/uhabits-android/src/main/res/values-hi/strings.xml diff --git a/uhabits-android/src/main/res/values-hr/strings.xml b/legacy/uhabits-android/src/main/res/values-hr/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-hr/strings.xml rename to legacy/uhabits-android/src/main/res/values-hr/strings.xml diff --git a/uhabits-android/src/main/res/values-hu/strings.xml b/legacy/uhabits-android/src/main/res/values-hu/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-hu/strings.xml rename to legacy/uhabits-android/src/main/res/values-hu/strings.xml diff --git a/uhabits-android/src/main/res/values-in/strings.xml b/legacy/uhabits-android/src/main/res/values-in/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-in/strings.xml rename to legacy/uhabits-android/src/main/res/values-in/strings.xml diff --git a/uhabits-android/src/main/res/values-it/strings.xml b/legacy/uhabits-android/src/main/res/values-it/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-it/strings.xml rename to legacy/uhabits-android/src/main/res/values-it/strings.xml diff --git a/uhabits-android/src/main/res/values-iw/strings.xml b/legacy/uhabits-android/src/main/res/values-iw/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-iw/strings.xml rename to legacy/uhabits-android/src/main/res/values-iw/strings.xml diff --git a/uhabits-android/src/main/res/values-ja/strings.xml b/legacy/uhabits-android/src/main/res/values-ja/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ja/strings.xml rename to legacy/uhabits-android/src/main/res/values-ja/strings.xml diff --git a/uhabits-android/src/main/res/values-ko/strings.xml b/legacy/uhabits-android/src/main/res/values-ko/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ko/strings.xml rename to legacy/uhabits-android/src/main/res/values-ko/strings.xml diff --git a/uhabits-android/src/main/res/values-nl/strings.xml b/legacy/uhabits-android/src/main/res/values-nl/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-nl/strings.xml rename to legacy/uhabits-android/src/main/res/values-nl/strings.xml diff --git a/uhabits-android/src/main/res/values-no-rNO/strings.xml b/legacy/uhabits-android/src/main/res/values-no-rNO/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-no-rNO/strings.xml rename to legacy/uhabits-android/src/main/res/values-no-rNO/strings.xml diff --git a/uhabits-android/src/main/res/values-pl/strings.xml b/legacy/uhabits-android/src/main/res/values-pl/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-pl/strings.xml rename to legacy/uhabits-android/src/main/res/values-pl/strings.xml diff --git a/uhabits-android/src/main/res/values-pt-rBR/strings.xml b/legacy/uhabits-android/src/main/res/values-pt-rBR/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-pt-rBR/strings.xml rename to legacy/uhabits-android/src/main/res/values-pt-rBR/strings.xml diff --git a/uhabits-android/src/main/res/values-pt-rPT/strings.xml b/legacy/uhabits-android/src/main/res/values-pt-rPT/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-pt-rPT/strings.xml rename to legacy/uhabits-android/src/main/res/values-pt-rPT/strings.xml diff --git a/uhabits-android/src/main/res/values-ro/strings.xml b/legacy/uhabits-android/src/main/res/values-ro/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ro/strings.xml rename to legacy/uhabits-android/src/main/res/values-ro/strings.xml diff --git a/uhabits-android/src/main/res/values-ru/strings.xml b/legacy/uhabits-android/src/main/res/values-ru/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-ru/strings.xml rename to legacy/uhabits-android/src/main/res/values-ru/strings.xml diff --git a/uhabits-android/src/main/res/values-sl/strings.xml b/legacy/uhabits-android/src/main/res/values-sl/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-sl/strings.xml rename to legacy/uhabits-android/src/main/res/values-sl/strings.xml diff --git a/uhabits-android/src/main/res/values-sr/strings.xml b/legacy/uhabits-android/src/main/res/values-sr/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-sr/strings.xml rename to legacy/uhabits-android/src/main/res/values-sr/strings.xml diff --git a/uhabits-android/src/main/res/values-sv/strings.xml b/legacy/uhabits-android/src/main/res/values-sv/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-sv/strings.xml rename to legacy/uhabits-android/src/main/res/values-sv/strings.xml diff --git a/uhabits-android/src/main/res/values-tr/strings.xml b/legacy/uhabits-android/src/main/res/values-tr/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-tr/strings.xml rename to legacy/uhabits-android/src/main/res/values-tr/strings.xml diff --git a/uhabits-android/src/main/res/values-uk/strings.xml b/legacy/uhabits-android/src/main/res/values-uk/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-uk/strings.xml rename to legacy/uhabits-android/src/main/res/values-uk/strings.xml diff --git a/uhabits-android/src/main/res/values-v21/styles.xml b/legacy/uhabits-android/src/main/res/values-v21/styles.xml similarity index 100% rename from uhabits-android/src/main/res/values-v21/styles.xml rename to legacy/uhabits-android/src/main/res/values-v21/styles.xml diff --git a/uhabits-android/src/main/res/values-v21/styles_list_habits.xml b/legacy/uhabits-android/src/main/res/values-v21/styles_list_habits.xml similarity index 100% rename from uhabits-android/src/main/res/values-v21/styles_list_habits.xml rename to legacy/uhabits-android/src/main/res/values-v21/styles_list_habits.xml diff --git a/uhabits-android/src/main/res/values-vi/strings.xml b/legacy/uhabits-android/src/main/res/values-vi/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-vi/strings.xml rename to legacy/uhabits-android/src/main/res/values-vi/strings.xml diff --git a/uhabits-android/src/main/res/values-zh-rCN/strings.xml b/legacy/uhabits-android/src/main/res/values-zh-rCN/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-zh-rCN/strings.xml rename to legacy/uhabits-android/src/main/res/values-zh-rCN/strings.xml diff --git a/uhabits-android/src/main/res/values-zh-rTW/strings.xml b/legacy/uhabits-android/src/main/res/values-zh-rTW/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values-zh-rTW/strings.xml rename to legacy/uhabits-android/src/main/res/values-zh-rTW/strings.xml diff --git a/uhabits-android/src/main/res/values/attrs.xml b/legacy/uhabits-android/src/main/res/values/attrs.xml similarity index 100% rename from uhabits-android/src/main/res/values/attrs.xml rename to legacy/uhabits-android/src/main/res/values/attrs.xml diff --git a/uhabits-android/src/main/res/values/colors.xml b/legacy/uhabits-android/src/main/res/values/colors.xml similarity index 100% rename from uhabits-android/src/main/res/values/colors.xml rename to legacy/uhabits-android/src/main/res/values/colors.xml diff --git a/uhabits-android/src/main/res/values/constants.xml b/legacy/uhabits-android/src/main/res/values/constants.xml similarity index 100% rename from uhabits-android/src/main/res/values/constants.xml rename to legacy/uhabits-android/src/main/res/values/constants.xml diff --git a/uhabits-android/src/main/res/values/dimens.xml b/legacy/uhabits-android/src/main/res/values/dimens.xml similarity index 100% rename from uhabits-android/src/main/res/values/dimens.xml rename to legacy/uhabits-android/src/main/res/values/dimens.xml diff --git a/uhabits-android/src/main/res/values/fontawesome.xml b/legacy/uhabits-android/src/main/res/values/fontawesome.xml similarity index 100% rename from uhabits-android/src/main/res/values/fontawesome.xml rename to legacy/uhabits-android/src/main/res/values/fontawesome.xml diff --git a/uhabits-android/src/main/res/values/keys.xml b/legacy/uhabits-android/src/main/res/values/keys.xml similarity index 100% rename from uhabits-android/src/main/res/values/keys.xml rename to legacy/uhabits-android/src/main/res/values/keys.xml diff --git a/uhabits-android/src/main/res/values/strings.xml b/legacy/uhabits-android/src/main/res/values/strings.xml similarity index 100% rename from uhabits-android/src/main/res/values/strings.xml rename to legacy/uhabits-android/src/main/res/values/strings.xml diff --git a/uhabits-android/src/main/res/values/styles.xml b/legacy/uhabits-android/src/main/res/values/styles.xml similarity index 100% rename from uhabits-android/src/main/res/values/styles.xml rename to legacy/uhabits-android/src/main/res/values/styles.xml diff --git a/uhabits-android/src/main/res/values/styles_dialog.xml b/legacy/uhabits-android/src/main/res/values/styles_dialog.xml similarity index 100% rename from uhabits-android/src/main/res/values/styles_dialog.xml rename to legacy/uhabits-android/src/main/res/values/styles_dialog.xml diff --git a/uhabits-android/src/main/res/values/styles_list_habits.xml b/legacy/uhabits-android/src/main/res/values/styles_list_habits.xml similarity index 100% rename from uhabits-android/src/main/res/values/styles_list_habits.xml rename to legacy/uhabits-android/src/main/res/values/styles_list_habits.xml diff --git a/uhabits-android/src/main/res/values/styles_show_habit.xml b/legacy/uhabits-android/src/main/res/values/styles_show_habit.xml similarity index 100% rename from uhabits-android/src/main/res/values/styles_show_habit.xml rename to legacy/uhabits-android/src/main/res/values/styles_show_habit.xml diff --git a/uhabits-android/src/main/res/xml/file_paths.xml b/legacy/uhabits-android/src/main/res/xml/file_paths.xml similarity index 100% rename from uhabits-android/src/main/res/xml/file_paths.xml rename to legacy/uhabits-android/src/main/res/xml/file_paths.xml diff --git a/uhabits-android/src/main/res/xml/preferences.xml b/legacy/uhabits-android/src/main/res/xml/preferences.xml similarity index 100% rename from uhabits-android/src/main/res/xml/preferences.xml rename to legacy/uhabits-android/src/main/res/xml/preferences.xml diff --git a/uhabits-android/src/main/res/xml/widget_checkmark_info.xml b/legacy/uhabits-android/src/main/res/xml/widget_checkmark_info.xml similarity index 100% rename from uhabits-android/src/main/res/xml/widget_checkmark_info.xml rename to legacy/uhabits-android/src/main/res/xml/widget_checkmark_info.xml diff --git a/uhabits-android/src/main/res/xml/widget_frequency_info.xml b/legacy/uhabits-android/src/main/res/xml/widget_frequency_info.xml similarity index 100% rename from uhabits-android/src/main/res/xml/widget_frequency_info.xml rename to legacy/uhabits-android/src/main/res/xml/widget_frequency_info.xml diff --git a/uhabits-android/src/main/res/xml/widget_history_info.xml b/legacy/uhabits-android/src/main/res/xml/widget_history_info.xml similarity index 100% rename from uhabits-android/src/main/res/xml/widget_history_info.xml rename to legacy/uhabits-android/src/main/res/xml/widget_history_info.xml diff --git a/uhabits-android/src/main/res/xml/widget_score_info.xml b/legacy/uhabits-android/src/main/res/xml/widget_score_info.xml similarity index 100% rename from uhabits-android/src/main/res/xml/widget_score_info.xml rename to legacy/uhabits-android/src/main/res/xml/widget_score_info.xml diff --git a/uhabits-android/src/main/res/xml/widget_streak_info.xml b/legacy/uhabits-android/src/main/res/xml/widget_streak_info.xml similarity index 100% rename from uhabits-android/src/main/res/xml/widget_streak_info.xml rename to legacy/uhabits-android/src/main/res/xml/widget_streak_info.xml diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidJVMTest.java b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidJVMTest.java similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidJVMTest.java rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/BaseAndroidJVMTest.java diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.kt b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.kt similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.kt rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenuTest.kt diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.kt diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.kt b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.kt similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.kt rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListControllerTest.kt diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java b/legacy/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java similarity index 100% rename from uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java rename to legacy/uhabits-android/src/test/java/org/isoron/uhabits/receivers/WidgetControllerTest.java diff --git a/uhabits-core/.gitignore b/legacy/uhabits-core/.gitignore similarity index 100% rename from uhabits-core/.gitignore rename to legacy/uhabits-core/.gitignore diff --git a/uhabits-core/build.gradle b/legacy/uhabits-core/build.gradle similarity index 100% rename from uhabits-core/build.gradle rename to legacy/uhabits-core/build.gradle diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/AppScope.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/Config.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/Config.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/Config.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/Config.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/Command.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandParser.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CommandRunner.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateHabitCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/CreateRepetitionCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/DeleteHabitsCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/EditHabitCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommand.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/commands/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Column.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Column.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/Column.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Column.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Cursor.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Cursor.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/Cursor.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Cursor.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Database.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Database.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/Database.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Database.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/DatabaseOpener.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/DatabaseOpener.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/DatabaseOpener.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/DatabaseOpener.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcCursor.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcCursor.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcCursor.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcCursor.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcDatabase.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcDatabase.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcDatabase.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/JdbcDatabase.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/MigrationHelper.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/MigrationHelper.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/MigrationHelper.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/MigrationHelper.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Repository.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Repository.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/Repository.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Repository.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/SQLParser.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/SQLParser.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/SQLParser.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/SQLParser.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Table.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Table.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/Table.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/Table.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/database/UnsupportedDatabaseVersionException.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/UnsupportedDatabaseVersionException.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/database/UnsupportedDatabaseVersionException.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/database/UnsupportedDatabaseVersionException.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/AbstractImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/AbstractImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/AbstractImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/AbstractImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/GenericImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/GenericImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/GenericImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/GenericImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitBullCSVImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/HabitsCSVExporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/LoopDBImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/LoopDBImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/LoopDBImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/LoopDBImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/RewireDBImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/RewireDBImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/RewireDBImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/RewireDBImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/io/TickmateDBImporter.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/TickmateDBImporter.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/io/TickmateDBImporter.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/io/TickmateDBImporter.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Checkmark.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/CheckmarkList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Frequency.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Habit.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcher.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitMatcherBuilder.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/HabitNotFoundException.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelFactory.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ModelObservable.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Reminder.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Repetition.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/RepetitionList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Score.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/ScoreList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Streak.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/StreakList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/Timestamp.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/WeekdayList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryCheckmarkList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryHabitList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryModelFactory.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryRepetitionList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryScoreList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/MemoryStreakList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/memory/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLModelFactory.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLModelFactory.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLModelFactory.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLModelFactory.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/package-info.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/package-info.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/package-info.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/package-info.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecord.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecord.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecord.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecord.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecord.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecord.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecord.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecord.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/Preferences.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/PropertiesStorage.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/PropertiesStorage.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/PropertiesStorage.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/PropertiesStorage.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/reminders/ReminderScheduler.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/ExportCSVTask.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunner.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/Task.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/tasks/TaskRunner.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/test/HabitFixtures.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/NotificationTray.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/ThemeSwitcher.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnColorPickedCallback.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnConfirmedCallback.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/callbacks/OnFinishedCallback.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/about/AboutBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/HintList.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/ColorConstants.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateFormats.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/DateUtils.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/MidnightTimer.java diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java b/legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java similarity index 100% rename from uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java rename to legacy/uhabits-core/src/main/java/org/isoron/uhabits/core/utils/StringUtils.java diff --git a/uhabits-core/src/main/resources/migrations/09.sql b/legacy/uhabits-core/src/main/resources/migrations/09.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/09.sql rename to legacy/uhabits-core/src/main/resources/migrations/09.sql diff --git a/uhabits-core/src/main/resources/migrations/10.sql b/legacy/uhabits-core/src/main/resources/migrations/10.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/10.sql rename to legacy/uhabits-core/src/main/resources/migrations/10.sql diff --git a/uhabits-core/src/main/resources/migrations/11.sql b/legacy/uhabits-core/src/main/resources/migrations/11.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/11.sql rename to legacy/uhabits-core/src/main/resources/migrations/11.sql diff --git a/uhabits-core/src/main/resources/migrations/12.sql b/legacy/uhabits-core/src/main/resources/migrations/12.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/12.sql rename to legacy/uhabits-core/src/main/resources/migrations/12.sql diff --git a/uhabits-core/src/main/resources/migrations/13.sql b/legacy/uhabits-core/src/main/resources/migrations/13.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/13.sql rename to legacy/uhabits-core/src/main/resources/migrations/13.sql diff --git a/uhabits-core/src/main/resources/migrations/14.sql b/legacy/uhabits-core/src/main/resources/migrations/14.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/14.sql rename to legacy/uhabits-core/src/main/resources/migrations/14.sql diff --git a/uhabits-core/src/main/resources/migrations/15.sql b/legacy/uhabits-core/src/main/resources/migrations/15.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/15.sql rename to legacy/uhabits-core/src/main/resources/migrations/15.sql diff --git a/uhabits-core/src/main/resources/migrations/16.sql b/legacy/uhabits-core/src/main/resources/migrations/16.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/16.sql rename to legacy/uhabits-core/src/main/resources/migrations/16.sql diff --git a/uhabits-core/src/main/resources/migrations/17.sql b/legacy/uhabits-core/src/main/resources/migrations/17.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/17.sql rename to legacy/uhabits-core/src/main/resources/migrations/17.sql diff --git a/uhabits-core/src/main/resources/migrations/18.sql b/legacy/uhabits-core/src/main/resources/migrations/18.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/18.sql rename to legacy/uhabits-core/src/main/resources/migrations/18.sql diff --git a/uhabits-core/src/main/resources/migrations/19.sql b/legacy/uhabits-core/src/main/resources/migrations/19.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/19.sql rename to legacy/uhabits-core/src/main/resources/migrations/19.sql diff --git a/uhabits-core/src/main/resources/migrations/20.sql b/legacy/uhabits-core/src/main/resources/migrations/20.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/20.sql rename to legacy/uhabits-core/src/main/resources/migrations/20.sql diff --git a/uhabits-core/src/main/resources/migrations/21.sql b/legacy/uhabits-core/src/main/resources/migrations/21.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/21.sql rename to legacy/uhabits-core/src/main/resources/migrations/21.sql diff --git a/uhabits-core/src/main/resources/migrations/22.sql b/legacy/uhabits-core/src/main/resources/migrations/22.sql similarity index 100% rename from uhabits-core/src/main/resources/migrations/22.sql rename to legacy/uhabits-core/src/main/resources/migrations/22.sql diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/BaseUnitTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/BaseUnitTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/BaseUnitTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/BaseUnitTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ArchiveHabitsCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ChangeHabitColorCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CommandParserTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateHabitCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/CreateRepetitionCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/DeleteHabitsCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/EditHabitCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/ToggleRepetitionCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/commands/UnarchiveHabitsCommandTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/database/RepositoryTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/database/RepositoryTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/database/RepositoryTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/database/RepositoryTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/database/migrations/Version22Test.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/database/migrations/Version22Test.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/database/migrations/Version22Test.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/database/migrations/Version22Test.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/io/HabitsCSVExporterTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/io/ImportTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/io/ImportTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/io/ImportTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/io/ImportTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/CheckmarkListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/HabitTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/RepetitionListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/ScoreTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/StreakListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/TimestampTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/WeekdayListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteHabitListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/SQLiteRepetitionListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecordTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecordTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecordTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/HabitRecordTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecordTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecordTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecordTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/models/sqlite/records/RepetitionRecordTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PreferencesTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PreferencesTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PreferencesTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PreferencesTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PropertiesStorageTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PropertiesStorageTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PropertiesStorageTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/preferences/PropertiesStorageTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/reminders/ReminderSchedulerTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/tasks/SingleThreadTaskRunnerTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/about/AboutBehaviorTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCacheTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/HintListTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsMenuBehaviorTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehaviorTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java b/legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java similarity index 100% rename from uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java rename to legacy/uhabits-core/src/test/java/org/isoron/uhabits/core/utils/DateUtilsTest.java diff --git a/uhabits-core/src/test/resources/databases/021.db b/legacy/uhabits-core/src/test/resources/databases/021.db similarity index 100% rename from uhabits-core/src/test/resources/databases/021.db rename to legacy/uhabits-core/src/test/resources/databases/021.db diff --git a/uhabits-core/src/test/resources/habitbull.csv b/legacy/uhabits-core/src/test/resources/habitbull.csv similarity index 100% rename from uhabits-core/src/test/resources/habitbull.csv rename to legacy/uhabits-core/src/test/resources/habitbull.csv diff --git a/uhabits-core/src/test/resources/loop.db b/legacy/uhabits-core/src/test/resources/loop.db similarity index 100% rename from uhabits-core/src/test/resources/loop.db rename to legacy/uhabits-core/src/test/resources/loop.db diff --git a/uhabits-core/src/test/resources/rewire.db b/legacy/uhabits-core/src/test/resources/rewire.db similarity index 100% rename from uhabits-core/src/test/resources/rewire.db rename to legacy/uhabits-core/src/test/resources/rewire.db diff --git a/uhabits-core/src/test/resources/tickmate.db b/legacy/uhabits-core/src/test/resources/tickmate.db similarity index 100% rename from uhabits-core/src/test/resources/tickmate.db rename to legacy/uhabits-core/src/test/resources/tickmate.db From f108bc8dc1093385f49dbed12e2d563349ca5009 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 13:27:16 -0600 Subject: [PATCH 02/93] Initial prototype of multi-platform version --- .gitignore | 9 + android/build.gradle | 76 + android/gradle.properties | 32 + android/settings.gradle | 23 + android/src/main/AndroidManifest.xml | 48 + android/src/main/assets/fonts/FontAwesome.ttf | Bin 0 -> 80652 bytes .../main/java/org/isoron/habits/CoreModule.kt | 78 + .../java/org/isoron/habits/CorePackage.kt | 39 + .../java/org/isoron/habits/MainActivity.kt | 87 + .../drawable-v24/ic_launcher_foreground.xml | 53 + .../res/drawable/ic_launcher_background.xml | 93 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 24 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 24 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes android/src/main/res/values/colors.xml | 25 + android/src/main/res/values/strings.xml | 22 + android/src/main/res/values/styles.xml | 30 + android/src/main/res/xml/network.xml | 25 + core/build.gradle | 79 + .../kotlin/org/isoron/uhabits/Backend.kt | 55 + .../org/isoron/uhabits/models/Checkmark.kt | 23 + .../kotlin/org/isoron/uhabits/models/Color.kt | 22 + .../org/isoron/uhabits/models/Frequency.kt | 23 + .../kotlin/org/isoron/uhabits/models/Habit.kt | 31 + .../org/isoron/uhabits/models/HabitType.kt | 25 + .../org/isoron/uhabits/models/Timestamp.kt | 22 + core/src/commonTest/kotlin/BackendTest.kt | 49 + ios/.gitignore | 28 + ios/CoreModule.swift | 49 + ios/uhabits.xcodeproj/project.pbxproj | 1164 +++ .../xcshareddata/xcschemes/uhabits.xcscheme | 105 + ios/uhabits/AppDelegate.swift | 30 + ios/uhabits/Base.lproj/LaunchScreen.xib | 23 + ios/uhabits/BridgingHeader.h | 5 + ios/uhabits/CoreModuleBridge.m | 10 + .../AppIcon.appiconset/Contents.json | 53 + ios/uhabits/Images.xcassets/Contents.json | 6 + ios/uhabits/Info.plist | 61 + react-native/.eslintrc.js | 7 + react-native/index.android.js | 68 + react-native/index.ios.js | 43 + react-native/package-lock.json | 6595 +++++++++++++++++ react-native/package.json | 22 + .../res/fonts/FontAwesome Regular.ttf | Bin 0 -> 80652 bytes react-native/res/images/ic_add.png | Bin 0 -> 164 bytes react-native/res/images/ic_filter.png | Bin 0 -> 137 bytes .../components/ListHabits/CheckmarkButton.js | 78 + .../src/components/ListHabits/HabitList.js | 107 + .../components/ListHabits/HabitListHeader.js | 106 + .../src/components/ListHabits/index.js | 40 + react-native/src/components/common/Ring.js | 63 + react-native/src/helpers/Backend.js | 35 + react-native/src/helpers/Colors.js | 51 + react-native/src/helpers/FontAwesome.js | 4 + 63 files changed, 9770 insertions(+) create mode 100644 .gitignore create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/settings.gradle create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/assets/fonts/FontAwesome.ttf create mode 100644 android/src/main/java/org/isoron/habits/CoreModule.kt create mode 100644 android/src/main/java/org/isoron/habits/CorePackage.kt create mode 100644 android/src/main/java/org/isoron/habits/MainActivity.kt create mode 100644 android/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 android/src/main/res/drawable/ic_launcher_background.xml create mode 100644 android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android/src/main/res/values/colors.xml create mode 100644 android/src/main/res/values/strings.xml create mode 100644 android/src/main/res/values/styles.xml create mode 100644 android/src/main/res/xml/network.xml create mode 100644 core/build.gradle create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/Checkmark.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/Frequency.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/Timestamp.kt create mode 100644 core/src/commonTest/kotlin/BackendTest.kt create mode 100644 ios/.gitignore create mode 100644 ios/CoreModule.swift create mode 100644 ios/uhabits.xcodeproj/project.pbxproj create mode 100644 ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme create mode 100644 ios/uhabits/AppDelegate.swift create mode 100644 ios/uhabits/Base.lproj/LaunchScreen.xib create mode 100644 ios/uhabits/BridgingHeader.h create mode 100644 ios/uhabits/CoreModuleBridge.m create mode 100644 ios/uhabits/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/uhabits/Images.xcassets/Contents.json create mode 100644 ios/uhabits/Info.plist create mode 100644 react-native/.eslintrc.js create mode 100644 react-native/index.android.js create mode 100644 react-native/index.ios.js create mode 100644 react-native/package-lock.json create mode 100644 react-native/package.json create mode 100644 react-native/res/fonts/FontAwesome Regular.ttf create mode 100644 react-native/res/images/ic_add.png create mode 100644 react-native/res/images/ic_filter.png create mode 100644 react-native/src/components/ListHabits/CheckmarkButton.js create mode 100644 react-native/src/components/ListHabits/HabitList.js create mode 100644 react-native/src/components/ListHabits/HabitListHeader.js create mode 100644 react-native/src/components/ListHabits/index.js create mode 100644 react-native/src/components/common/Ring.js create mode 100644 react-native/src/helpers/Backend.js create mode 100644 react-native/src/helpers/Colors.js create mode 100644 react-native/src/helpers/FontAwesome.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..1e3603076 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +local.properties +.idea +.DS_Store +build +captures +.externalNativeBuild +node_modules diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 000000000..4b971adbd --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +buildscript { + ext.kotlin_version = '1.3.11' + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + maven { + url "$rootDir/../react-native/node_modules/react-native/android" + } + } +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "org.isoron.habits" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation files("../core/build/libs/core-jvm.jar") + implementation "com.facebook.react:react-native:0.57.8" + implementation project(':react-native-svg') + + testImplementation 'junit:junit:4.12' + + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 000000000..f2e8274f4 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,32 @@ +# +# Copyright (C) 2016-2019 Álinson Santos Xavier +# +# This file is part of Loop Habit Tracker. +# +# Loop Habit Tracker is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# Loop Habit Tracker is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# + +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 000000000..f41cefdd3 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +include ':react-native-svg' + +project(':react-native-svg').projectDir = new File(rootProject.projectDir, + '../react-native/node_modules/react-native-svg/android') diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..23a91955d --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/src/main/assets/fonts/FontAwesome.ttf b/android/src/main/assets/fonts/FontAwesome.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e89738de5eaf8fca33a2f2cdc5cb4929caa62b71 GIT binary patch literal 80652 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 qx{Kk=rVu5YQ9XR< + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import com.facebook.react.bridge.* +import com.facebook.react.modules.core.DeviceEventManagerModule.* +import org.isoron.uhabits.* + + +class CoreModule( + private val context: ReactApplicationContext +) : ReactContextBaseJavaModule(context) { + + private var backend = Backend() + private lateinit var emitter: RCTDeviceEventEmitter + + override fun initialize() { + super.initialize() + emitter = context.getJSModule(RCTDeviceEventEmitter::class.java) + backend.createHabit("Wake up early") + backend.createHabit("Wash clothes") + backend.createHabit("Exercise") + backend.createHabit("Meditate") + backend.createHabit("Take vitamins") + backend.createHabit("Write 'the quick brown fox jumps over the lazy dog' daily") + backend.createHabit("Write journal") + backend.createHabit("Study French") + } + + override fun getName(): String { + return "CoreModule" + } + + @ReactMethod + fun requestHabitList() { + val params = Arguments.createArray() + for ((id, data) in backend.getHabitList()) { + params.pushMap(Arguments.createMap().apply { + putString("key", id.toString()) + putString("name", data["name"] as String) + putInt("color", data["color"] as Int) + }) + } + emitter.emit("onHabitList", params) + } + + @ReactMethod + fun createHabit(name: String) { + backend.createHabit(name) + } + + @ReactMethod + fun deletHabit(id: Int) { + backend.deleteHabit(id) + } + + @ReactMethod + fun updateHabit(id: Int, name: String) { + backend.updateHabit(id, name) + } +} \ No newline at end of file diff --git a/android/src/main/java/org/isoron/habits/CorePackage.kt b/android/src/main/java/org/isoron/habits/CorePackage.kt new file mode 100644 index 000000000..4d82b72de --- /dev/null +++ b/android/src/main/java/org/isoron/habits/CorePackage.kt @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import android.view.* +import com.facebook.react.* +import com.facebook.react.bridge.* +import com.facebook.react.uimanager.* +import com.facebook.react.uimanager.ViewManager +import java.util.* + +class CorePackage : ReactPackage { + + override fun createNativeModules(ctx: ReactApplicationContext) : MutableList { + return mutableListOf(CoreModule(ctx)) + } + + override fun createViewManagers(reactContext: ReactApplicationContext?) + : MutableList>> { + return Collections.emptyList() + } +} \ No newline at end of file diff --git a/android/src/main/java/org/isoron/habits/MainActivity.kt b/android/src/main/java/org/isoron/habits/MainActivity.kt new file mode 100644 index 000000000..70d48cf24 --- /dev/null +++ b/android/src/main/java/org/isoron/habits/MainActivity.kt @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import android.content.* +import android.net.* +import android.os.* +import android.os.Build.VERSION.* +import android.os.Build.VERSION_CODES.* +import android.provider.* +import android.support.v7.app.* +import android.view.* +import com.facebook.react.* +import com.facebook.react.common.* +import com.facebook.react.shell.* +import com.horcrux.svg.* + +class MainActivity : AppCompatActivity() { + + private lateinit var reactInstanceManager: ReactInstanceManager + private lateinit var reactRootView: ReactRootView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + if (SDK_INT >= M && !Settings.canDrawOverlays(this)) { + startActivityForResult(Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:$packageName")), 0) + } + + reactRootView = ReactRootView(this) + reactInstanceManager = ReactInstanceManager.builder() + .setApplication(application) + .setBundleAssetName("index.android.bundle") + .setJSMainModulePath("index.android") + .addPackage(MainReactPackage()) + .addPackage(CorePackage()) + .addPackage(SvgPackage()) + .setUseDeveloperSupport(BuildConfig.DEBUG) + .setInitialLifecycleState(LifecycleState.RESUMED) + .build() + + reactRootView.startReactApplication(reactInstanceManager, "LoopHabitTracker", null) + setContentView(reactRootView) + } + + override fun onPause() { + reactInstanceManager.onHostPause(this) + super.onPause() + } + + override fun onResume() { + super.onResume() + reactInstanceManager.onHostResume(this) + } + + override fun onDestroy() { + reactInstanceManager.onHostDestroy(this) + reactRootView.unmountReactApplication() + super.onDestroy() + } + + override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { + if (keyCode == KeyEvent.KEYCODE_MENU) { + reactInstanceManager.showDevOptionsDialog() + return true + } + return super.onKeyUp(keyCode, event) + } +} diff --git a/android/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 000000000..1f6b5cefa --- /dev/null +++ b/android/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + diff --git a/android/src/main/res/drawable/ic_launcher_background.xml b/android/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..dd6a8dc40 --- /dev/null +++ b/android/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..d906785e0 --- /dev/null +++ b/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..d906785e0 --- /dev/null +++ b/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/android/src/main/res/mipmap-hdpi/ic_launcher.png b/android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 zcmV(P)KhZB4W`O-$6PEY7dL@435|%iVhscI7#HXTET` zzkBaFzt27A{C?*?2n!1>p(V70me4Z57os7_P3wngt7(|N?Oyh#`(O{OZ1{A4;H+Oi zbkJV-pnX%EV7$w+V1moMaYCgzJI-a^GQPsJHL=>Zb!M$&E7r9HyP>8`*Pg_->7CeN zOX|dqbE6DBJL=}Mqt2*1e1I>(L-HP&UhjA?q1x7zSXD}D&D-Om%sC#AMr*KVk>dy;pT>Dpn#K6-YX8)fL(Q8(04+g?ah97XT2i$m2u z-*XXz7%$`O#x&6Oolq?+sA+c; zdg7fXirTUG`+!=-QudtfOZR*6Z3~!#;X;oEv56*-B z&gIGE3os@3O)sFP?zf;Z#kt18-o>IeueS!=#X^8WfI@&mfI@)!F(BkYxSfC*Gb*AM zau9@B_4f3=m1I71l8mRD>8A(lNb6V#dCpSKW%TT@VIMvFvz!K$oN1v#E@%Fp3O_sQ zmbSM-`}i8WCzSyPl?NqS^NqOYg4+tXT52ItLoTA;4mfx3-lev-HadLiA}!)%PwV)f zumi|*v}_P;*hk9-c*ibZqBd_ixhLQA+Xr>akm~QJCpfoT!u5JA_l@4qgMRf+Bi(Gh zBOtYM<*PnDOA}ls-7YrTVWimdA{y^37Q#BV>2&NKUfl(9F9G}lZ{!-VfTnZh-}vANUA=kZz5}{^<2t=| z{D>%{4**GFekzA~Ja)m81w<3IaIXdft(FZDD2oTruW#SJ?{Iv&cKenn!x!z;LfueD zEgN@#Px>AgO$sc`OMv1T5S~rp@e3-U7LqvJvr%uyV7jUKDBZYor^n# zR8bDS*jTTdV4l8ug<>o_Wk~%F&~lzw`sQGMi5{!yoTBs|8;>L zD=nbWe5~W67Tx`B@_@apzLKH@q=Nnj$a1EoQ%5m|;3}WxR@U0q^=umZUcB}dz5n^8 zPRAi!1T)V8qs-eWs$?h4sVncF`)j&1`Rr+-4of)XCppcuoV#0EZ8^>0Z2LYZirw#G7=POO0U*?2*&a7V zn|Dx3WhqT{6j8J_PmD=@ItKmb-GlN>yH5eJe%-WR0D8jh1;m54AEe#}goz`fh*C%j zA@%m2wr3qZET9NLoVZ5wfGuR*)rV2cmQPWftN8L9hzEHxlofT@rc|PhXZ&SGk>mLC z97(xCGaSV+)DeysP_%tl@Oe<6k9|^VIM*mQ(IU5vme)80qz-aOT3T(VOxU><7R4#;RZfTQeI$^m&cw@}f=eBDYZ+b&N$LyX$Au8*J1b9WPC zk_wIhRHgu=f&&@Yxg-Xl1xEnl3xHOm1xE(NEy@oLx8xXme*uJ-7cg)a=lVq}gm3{! z0}fh^fyW*tAa%6Dcq0I5z(K2#0Ga*a*!mkF5#0&|BxSS`fXa(?^Be)lY0}Me1R$45 z6OI7HbFTOffV^;gfOt%b+SH$3e*q)_&;q0p$}uAcAiX>XkqU#c790SX&E2~lkOB_G zKJ`C9ki9?xz)+Cm2tYb{js(c8o9FleQsy}_Ad5d7F((TOP!GQbT(nFhx6IBlIHLQ zgXXeN84Yfl5^NsSQ!kRoGoVyhyQXsYTgXWy@*K>_h02S>)Io^59+E)h zGFV5n!hjqv%Oc>+V;J$A_ekQjz$f-;Uace07pQvY6}%aIZUZ}_m*>DHx|mL$gUlGo zpJtxJ-3l!SVB~J4l=zq>$T4VaQ7?R}!7V7tvO_bJ8`$|ImsvN@kpXGtISd6|N&r&B zkpY!Z%;q4z)rd81@12)8F>qUU_(dxjkWQYX4XAxEmH?G>4ruF!AX<2qpdqxJ3I!SaZj(bdjDpXdS%NK!YvET$}#ao zW-QD5;qF}ZN4;`6g&z16w|Qd=`#4hg+UF^02UgmQka=%|A!5CjRL86{{mwzf=~v{&!Uo zYhJ00Shva@yJ59^Qq~$b)+5%gl79Qv*Gl#YS+BO+RQrr$dmQX)o6o-P_wHC$#H%aa z5o>q~f8c=-2(k3lb!CqFQJ;;7+2h#B$V_anm}>Zr(v{I_-09@zzZ yco6bG9zMVq_|y~s4rIt6QD_M*p(V5oh~@tmE4?#%!pj)|0000T-ViIFIPY+_yk1-RB&z5bHD$YnPieqLK5EI`ThRCq%$YyeCI#k z>wI&j0Rb2DV5|p6T3Syaq)GU^8BR8(!9qaEe6w+TJxLZtBeQf z`>{w%?oW}WhJSMi-;YIE3P2FtzE8p;}`HCT>Lt1o3h65;M`4J@U(hJSYlTt_?Ucf5~AOFjBT-*WTiV_&id z?xIZPQ`>7M-B?*vptTsj)0XBk37V2zTSQ5&6`0#pVU4dg+Hj7pb;*Hq8nfP(P;0i% zZ7k>Q#cTGyguV?0<0^_L$;~g|Qqw58DUr~LB=oigZFOvHc|MCM(KB_4-l{U|t!kPu z{+2Mishq{vnwb2YD{vj{q`%Pz?~D4B&S9Jdt##WlwvtR2)d5RdqcIvrs!MY#BgDI# z+FHxTmgQp-UG66D4?!;I0$Csk<6&IL09jn+yWmHxUf)alPUi3jBIdLtG|Yhn?vga< zJQBnaQ=Z?I+FZj;ke@5f{TVVT$$CMK74HfIhE?eMQ#fvN2%FQ1PrC+PAcEu?B*`Ek zcMD{^pd?8HMV94_qC0g+B1Z0CE-pcWpK=hDdq`{6kCxxq^X`oAYOb3VU6%K=Tx;aG z*aW$1G~wsy!mL})tMisLXN<*g$Kv)zHl{2OA=?^BLb)Q^Vqgm?irrLM$ds;2n7gHt zCDfI8Y=i4)=cx_G!FU+g^_nE(Xu7tj&a&{ln46@U3)^aEf}FHHud~H%_0~Jv>X{Pm z+E&ljy!{$my1j|HYXdy;#&&l9YpovJ;5yoQYJ+hw9>!H{(^6+$(%!(HeR~&MP-UER zPR&hH$w*_)D3}#A2joDlamSP}n%Y3H@pNb1wE=G1TFH_~Lp-&?b+q%;2IF8njO(rq zQVx(bn#@hTaqZZ1V{T#&p)zL%!r8%|p|TJLgSztxmyQo|0P;eUU~a0y&4)u?eEeGZ z9M6iN2(zw9a(WoxvL%S*jx5!2$E`ACG}F|2_)UTkqb*jyXm{3{73tLMlU%IiPK(UR4}Uv87uZIacp(XTRUs?6D25qn)QV%Xe&LZ-4bUJM!ZXtnKhY#Ws)^axZkui_Z=7 zOlc@%Gj$nLul=cEH-leGY`0T)`IQzNUSo}amQtL)O>v* zNJH1}B2znb;t8tf4-S6iL2_WuMVr~! zwa+Are(1_>{zqfTcoYN)&#lg$AVibhUwnFA33`np7$V)-5~MQcS~aE|Ha>IxGu+iU z`5{4rdTNR`nUc;CL5tfPI63~BlehRcnJ!4ecxOkD-b&G%-JG+r+}RH~wwPQoxuR(I z-89hLhH@)Hs}fNDM1>DUEO%{C;roF6#Q7w~76179D?Y9}nIJFZhWtv`=QNbzNiUmk zDSV5#xXQtcn9 zM{aI;AO6EH6GJ4^Qk!^F?$-lTQe+9ENYIeS9}cAj>Ir`dLe`4~Dulck2#9{o}JJ8v+QRsAAp*}|A^ z1PxxbEKFxar-$a&mz95(E1mAEVp{l!eF9?^K43Ol`+3Xh5z`aC(r}oEBpJK~e>zRtQ4J3K*r1f79xFs>v z5yhl1PoYg~%s#*ga&W@K>*NW($n~au>D~{Rrf@Tg z^DN4&Bf0C`6J*kHg5nCZIsyU%2RaiZkklvEqTMo0tFeq7{pp8`8oAs7 z6~-A=MiytuV+rI2R*|N=%Y));j8>F)XBFn`Aua-)_GpV`#%pda&MxsalV15+%Oy#U zg!?Gu&m@yfCi8xHM>9*N8|p5TPNucv?3|1$aN$&X6&Ge#g}?H`)4ncN@1whNDHF7u z2vU*@9OcC-MZK}lJ-H5CC@og69P#Ielf`le^Om4BZ|}OK33~dC z9o-007j1SXiTo3P#6`YJ^T4tN;KHfgA=+Bc0h1?>NT@P?=}W;Z=U;!nqzTHQbbu37 zOawJK2$GYeHtTr7EIjL_BS8~lBKT^)+ba(OWBsQT=QR3Ka((u#*VvW=A35XWkJ#?R zpRksL`?_C~VJ9Vz?VlXr?cJgMlaJZX!yWW}pMZni(bBP>?f&c#+p2KwnKwy;D3V1{ zdcX-Pb`YfI=B5+oN?J5>?Ne>U!2oCNarQ&KW7D61$fu$`2FQEWo&*AF%68{fn%L<4 zOsDg%m|-bklj!%zjsYZr0y6BFY|dpfDvJ0R9Qkr&a*QG0F`u&Rh{8=gq(fuuAaWc8 zRmup;5F zR3altfgBJbCrF7LP7t+8-2#HL9pn&HMVoEnPLE@KqNA~~s+Ze0ilWm}ucD8EVHs;p z@@l_VDhtt@6q zmV7pb1RO&XaRT)NOe-&7x7C>07@CZLYyn0GZl-MhPBNddM0N}0jayB22swGh3C!m6~r;0uCdOJ6>+nYo*R9J7Pzo%#X_imc=P;u^O*#06g*l)^?9O^cwu z>?m{qW(CawISAnzIf^A@vr*J$(bj4fMWG!DVMK9umxeS;rF)rOmvZY8%sF7i3NLrQ zCMI5u5>e<&Y4tpb@?!%PGzlgm_c^Z7Y6cO6C?)qfuF)!vOkifE(aGmXko*nI3Yr5_ zB%dP>Y)esVRQrVbP5?CtAV%1ftbeAX zSO5O8m|H+>?Ag7NFznXY-Y8iI#>Xdz<)ojC6nCuqwTY9Hlxg=lc7i-4fdWA$x8y)$ z1cEAfv{E7mnX=ZTvo30>Vc{EJ_@UqAo91Co;@r;u7&viaAa=(LUNnDMq#?t$WP2mu zy5`rr8b||Z0+BS)Iiwj0lqg10xE8QkK#>Cp6zNdxLb-wi+CW5b7zH2+M4p3Cj%WpQ zvV+J2IY@kOFU_|NN}2O}n#&F1oX*)lDd-WJICcPhckHVB{_D}UMo!YA)`reITkCv& z+h-AyO1k3@ZEIrpHB)j~Z(*sF@TFpx2IVtytZ1!gf7rg2x94b*P|1@%EFX{|BMC&F zgHR4<48Z5Wte`o!m*m@iyK=>9%pqjT=xfgQua>)1| zzH!~jLG!rggat+qAIR%H=jrI#Ppid$J{TDkck^wb>Cbnli}}Mj8!tNfx{tXtDDVA6#7kU4k)m;JoI1>JM_ zq-flQ5dpn>kG~=9u{Kp+hETG^OCq!Y^l7JkwUJNUU7izHmd|F@nB0=X2`Ui?!twzb zGEx%cIl)h?ZV$NTnhB6KFgkkRg&@c7ldg>o!`sBcgi%9RE?paz`QmZ@sF(jo1bt^} zOO5xhg(FXLQ|z)6CE=`kWOCVJNJCs#Lx)8bDSWkN@122J_Z`gpPK4kwk4&%uxnuQ z^m`!#WD#Y$Wd7NSpiP4Y;lHtj;pJ#m@{GmdPp+;QnX&E&oUq!YlgQ%hIuM43b=cWO zKEo!Er{mwD8T1>Qs$i2XjF2i zo0yfpKQUwdThrD(TOIY_s`L@_<}B|w^!j*FThM0+#t0G?oR`l(S(2v&bXR}F6HLMU zhVvD4K!6s}uUD^L;|Sxgrb+kFs%8d8Ma>5A9p~uUO=yF*;%~xvAJiA`lls1pq5J%k z6&-yQ$_vP5`-Tr56ws&75Y&Q2;zD?CB_KpRHxzC9hKCR0889>jef)|@@$A?!QIu3r qa)363hF;Bq?>HxvTY6qhhx>m(`%O(!)s{N|0000xsEBz6iy~SX+W%nrKL2KH{`gFsDCOB6ZW0@Yj?g&st+$-t|2c4&NM7M5Tk(z5p1+IN@y}=N)4$Vmgo_?Y@Ck5u}3=}@K z);Ns<{X)3-we^O|gm)Oh1^>hg6g=|b7E-r?H6QeeKvv7{-kP9)eb76lZ>I5?WDjiX z7Qu}=I4t9`G435HO)Jpt^;4t zottB%?uUE#zt^RaO&$**I5GbJM-Nj&Z#XT#=iLsG7*JO@)I~kH1#tl@P}J@i#`XX! zEUc>l4^`@w2_Fsoa*|Guk5hF2XJq0TQ{QXsjnJ)~K{EG*sHQW(a<^vuQkM07vtNw= z{=^9J-YI<#TM>DTE6u^^Z5vsVZx{Lxr@$j8f2PsXr^)~M97)OdjJOe81=H#lTbl`!5}35~o;+uSbUHP+6L00V99ox@t5JT2~=-{-Zvti4(UkQKDs{%?4V4AV3L`G476;|CgCH%rI z;0kA=z$nkcwu1-wIX=yE5wwUO)D;dT0m~o7z(f`*<1B>zJhsG0hYGMgQ0h>ylQYP; zbY|ogjI;7_P6BwI^6ZstC}cL&6%I8~cYe1LP)2R}amKG>qavWEwL0HNzwt@3hu-i0 z>tX4$uXNRX_<>h#Q`kvWAs3Y+9)i~VyAb3%4t+;Ej~o)%J#d6}9XXtC10QpHH*X!(vYjmZ zlmm6A=sN)+Lnfb)wzL90u6B=liNgkPm2tWfvU)a0y=N2gqg_uRzguCqXO<0 zp@5n^hzkW&E&~|ZnlPAz)<%Cdh;IgaTGMjVcP{dLFnX>K+DJ zd?m)lN&&u@soMY!B-jeeZNHfQIu7I&9N?AgMkXKxIC+JQibV=}9;p)91_6sP0x=oO zd9T#KhN9M8uO4rCDa ze;J+@sfk?@C6ke`KmkokKLLvbpNHGP^1^^YoBV^rxnXe8nl%NfKS}ea`^9weO&eZ` zo3Nb?%LfcmGM4c%PpK;~v#XWF+!|RaTd$6126a6)WGQPmv0E@fm9;I@#QpU0rcGEJ zNS_DL26^sx!>ccJF}F){`A0VIvLan^$?MI%g|@ebIFlrG&W$4|8=~H%Xsb{gawm(u zEgD&|uQgc{a;4k6J|qjRZzat^hbRSXZwu7(c-+?ku6G1X0c*0%*CyUsXxlKf=%wfS z7A!7+`^?MrPvs?yo31D=ZCu!3UU`+dR^S>@R%-y+!b$RlnflhseNn10MV5M=0KfZ+ zl9DEH0jK5}{VOgmzKClJ7?+=AED&7I=*K$;ONIUM3nyT|P}|NXn@Qhn<7H$I*mKw1 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 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 BIP(Ai literal 0 HcmV?d00001 diff --git a/android/src/main/res/values/colors.xml b/android/src/main/res/values/colors.xml new file mode 100644 index 000000000..e46135677 --- /dev/null +++ b/android/src/main/res/values/colors.xml @@ -0,0 +1,25 @@ + + + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml new file mode 100644 index 000000000..45fab93d1 --- /dev/null +++ b/android/src/main/res/values/strings.xml @@ -0,0 +1,22 @@ + + + + Loop Habit Tracker + diff --git a/android/src/main/res/values/styles.xml b/android/src/main/res/values/styles.xml new file mode 100644 index 000000000..81d6f73bd --- /dev/null +++ b/android/src/main/res/values/styles.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/android/src/main/res/xml/network.xml b/android/src/main/res/xml/network.xml new file mode 100644 index 000000000..f49ff97be --- /dev/null +++ b/android/src/main/res/xml/network.xml @@ -0,0 +1,25 @@ + + + + + + 127.0.0.1 + + \ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 000000000..200a65d37 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +buildscript { + repositories { + google() + jcenter() + maven { url "https://dl.bintray.com/kotlin/kotlin-eap" } + } + + dependencies { + classpath "com.android.tools.build:gradle:3.2.1" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.11" + } +} + +allprojects { + repositories { + google() + jcenter() + maven { url "https://dl.bintray.com/kotlin/kotlin-eap" } + } +} + +apply plugin:"kotlin-multiplatform" + +kotlin { + targets { + fromPreset(presets.jvm, 'jvm') + fromPreset(presets.iosX64, 'iOS') { + compilations.main.outputKinds('FRAMEWORK') + } + } + + sourceSets { + commonMain { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' + } + } + commonTest { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test-common' + implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common' + } + } + jvmMain { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + } + } + jvmTest { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test' + implementation 'org.jetbrains.kotlin:kotlin-test-junit' + } + } + } +} + +configurations { + compileClasspath +} diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt new file mode 100644 index 000000000..422d84a71 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits + +import org.isoron.uhabits.models.Color +import org.isoron.uhabits.models.Frequency +import org.isoron.uhabits.models.Habit +import org.isoron.uhabits.models.HabitType +import kotlin.random.Random + +class Backend { + var nextId = 1 + var habits = mutableListOf() + + fun getHabitList(): Map> { + return habits.map { h -> + h.id to mapOf("name" to h.name, + "color" to h.color.paletteIndex) + }.toMap() + } + + fun createHabit(name: String) { + val c = (nextId / 4) % 5 + habits.add(Habit(nextId, name, "", Frequency(1, 1), Color(c), + false, habits.size, "", 0, HabitType.YES_NO_HABIT)) + nextId += 1 + } + + fun deleteHabit(id: Int) { + val h = habits.find { h -> h.id == id } + if (h != null) habits.remove(h) + } + + fun updateHabit(id: Int, name: String) { + val h = habits.find { h -> h.id == id } + h?.name = name + } +} diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Checkmark.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Checkmark.kt new file mode 100644 index 000000000..ffd1f2891 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Checkmark.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +data class Checkmark(var timestamp: Timestamp, + var value: Int) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt new file mode 100644 index 000000000..e34ddc82e --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +class Color(val paletteIndex: Int) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Frequency.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Frequency.kt new file mode 100644 index 000000000..142294601 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Frequency.kt @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +data class Frequency(val numerator: Int, + val denominator: Int) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt new file mode 100644 index 000000000..2c4fe75b8 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +data class Habit(var id: Int, + var name: String, + var description: String, + var frequency: Frequency, + var color: Color, + var isArchived: Boolean, + var position: Int, + var unit: String, + var target: Int, + var type: HabitType) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt new file mode 100644 index 000000000..8965f5c09 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +enum class HabitType { + YES_NO_HABIT, + NUMERICAL_HABIT, +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Timestamp.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Timestamp.kt new file mode 100644 index 000000000..6b67ddfe6 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Timestamp.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +class Timestamp(val unixTime: Long) \ No newline at end of file diff --git a/core/src/commonTest/kotlin/BackendTest.kt b/core/src/commonTest/kotlin/BackendTest.kt new file mode 100644 index 000000000..4f614583f --- /dev/null +++ b/core/src/commonTest/kotlin/BackendTest.kt @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue + +class BackendTest { + @Test + fun testBackend() { + val backend = Backend() + assertEquals(backend.getHabitList().size, 0) + + backend.createHabit("Brush teeth") + backend.createHabit("Wake up early") + + var result = backend.getHabitList() + assertEquals(result.size, 2) + assertEquals(result[1]!!["name"], "Brush teeth") + assertEquals(result[2]!!["name"], "Wake up early") + + backend.deleteHabit(1) + result = backend.getHabitList() + assertEquals(result.size, 1) + assertTrue(2 in result.keys) + + backend.updateHabit(2, "Wake up late") + result = backend.getHabitList() + assertEquals(result[2]!!["name"], "Wake up late") + } +} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 000000000..3ffef3c78 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,28 @@ +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 +*.dSYM +*.dSYM.zip +*.hmap +*.ipa +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +*.xccheckout +*.xcscmblueprint +*.xcworkspace +.build/ +Carthage/Build +DerivedData/ +build/ +fastlane/Preview.html +fastlane/report.xml +fastlane/screenshots/**/*.png +fastlane/test_output +iOSInjectionProject/ +playground.xcworkspace +timeline.xctimeline +xcuserdata/ diff --git a/ios/CoreModule.swift b/ios/CoreModule.swift new file mode 100644 index 000000000..50c0b5022 --- /dev/null +++ b/ios/CoreModule.swift @@ -0,0 +1,49 @@ +import Foundation + +@objc(CoreModule) +class CoreModule: RCTEventEmitter { + + @objc + open override func supportedEvents() -> [String] { + return ["onHabitList"] + } + + @objc + func requestHabitList() { + DispatchQueue.main.async { + let habits = AppDelegate.backend.getHabitList() + let result = habits.map { + ["key": String($0.key.intValue), + "name": $0.value["name"], + "color": $0.value["color"]] + } + self.sendEvent(withName: "onHabitList", body: result) + } + } + + @objc + func createHabit(_ name: String) { + DispatchQueue.main.async { + AppDelegate.backend.createHabit(name: name) + } + } + + @objc + func deleteHabit(_ id: Int32) { + DispatchQueue.main.async { + AppDelegate.backend.deleteHabit(id: id) + } + } + + @objc + func updateHabit(_ id: Int32, _ name: String) { + DispatchQueue.main.async { + AppDelegate.backend.updateHabit(id: id, name: name) + } + } + + @objc + override static func requiresMainQueueSetup() -> Bool { + return true + } +} diff --git a/ios/uhabits.xcodeproj/project.pbxproj b/ios/uhabits.xcodeproj/project.pbxproj new file mode 100644 index 000000000..fb56bb101 --- /dev/null +++ b/ios/uhabits.xcodeproj/project.pbxproj @@ -0,0 +1,1164 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0008A5F621F17513000DB3E7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0008A5F521F17513000DB3E7 /* AppDelegate.swift */; }; + 0008A62A21F2B728000DB3E7 /* CoreModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0008A62921F2B728000DB3E7 /* CoreModule.swift */; }; + 0008A62C21F2B755000DB3E7 /* CoreModuleBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */; }; + 0008A62E21F2BD95000DB3E7 /* core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0008A5C021F16D25000DB3E7 /* core.framework */; }; + 0008A62F21F2BD95000DB3E7 /* core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0008A5C021F16D25000DB3E7 /* core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 000BCDF521F69E1400F4DA11 /* FontAwesome Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */; }; + 000BCE0521F6CB1100F4DA11 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 000BCDFE21F6CAFF00F4DA11 /* libRCTWebSocket.a */; }; + 000C283821F51C9B00C5EC6D /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 000C283521F51C4E00C5EC6D /* libRNSVG.a */; }; + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 000BCDFD21F6CAFF00F4DA11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3C86DF461ADF2C930047B81A; + remoteInfo = RCTWebSocket; + }; + 000BCDFF21F6CAFF00F4DA11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 000BCE0121F6CAFF00F4DA11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; + remoteInfo = fishhook; + }; + 000BCE0321F6CAFF00F4DA11 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; + remoteInfo = "fishhook-tvOS"; + }; + 000C283421F51C4E00C5EC6D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 0CF68AC11AF0540F00FF9E5C; + remoteInfo = RNSVG; + }; + 000C283621F51C4E00C5EC6D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 94DDAC5C1F3D024300EED511; + remoteInfo = "RNSVG-tvOS"; + }; + 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTActionSheet; + }; + 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTGeolocation; + }; + 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5115D1A9E6B3D00147676; + remoteInfo = RCTImage; + }; + 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B511DB1A9E6C8500147676; + remoteInfo = RCTNetwork; + }; + 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTSettings; + }; + 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; + remoteInfo = React; + }; + 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = ADD01A681E09402E00F6D226; + remoteInfo = "RCTBlob-tvOS"; + }; + 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BDC1FC498900052F4D5; + remoteInfo = jsinspector; + }; + 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; + 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; + remoteInfo = "third-party"; + }; + 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; + remoteInfo = "third-party-tvOS"; + }; + 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 139D7E881E25C6D100323FB7; + remoteInfo = "double-conversion"; + }; + 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D383D621EBD27B9005632C8; + remoteInfo = "double-conversion-tvOS"; + }; + 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 9936F3131F5F2E4B0010BF04; + remoteInfo = privatedata; + }; + 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04; + remoteInfo = "privatedata-tvOS"; + }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; + remoteInfo = jschelpers; + }; + 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; + remoteInfo = "jschelpers-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; + 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTLinking; + }; + 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 58B5119B1A9E6C1200147676; + remoteInfo = RCTText; + }; + ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 358F4ED71D1E81A9004DF814; + remoteInfo = RCTBlob; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0008A63021F2BD95000DB3E7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 0008A62F21F2BD95000DB3E7 /* core.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0008A5C021F16D25000DB3E7 /* core.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = core.framework; path = ../core/build/bin/iOS/main/debug/framework/core.framework; sourceTree = ""; }; + 0008A5F521F17513000DB3E7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = uhabits/AppDelegate.swift; sourceTree = ""; }; + 0008A5F721F17531000DB3E7 /* BridgingHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BridgingHeader.h; path = uhabits/BridgingHeader.h; sourceTree = ""; }; + 0008A62921F2B728000DB3E7 /* CoreModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreModule.swift; sourceTree = ""; }; + 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = CoreModuleBridge.m; path = uhabits/CoreModuleBridge.m; sourceTree = ""; }; + 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FontAwesome Regular.ttf"; path = "../react-native/res/fonts/FontAwesome Regular.ttf"; sourceTree = ""; }; + 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../react-native/node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; + 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../react-native/node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* uhabits.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = uhabits.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = uhabits/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = uhabits/Info.plist; sourceTree = ""; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 000BCE0521F6CB1100F4DA11 /* libRCTWebSocket.a in Frameworks */, + 000C283821F51C9B00C5EC6D /* libRNSVG.a in Frameworks */, + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, + 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */, + 146834051AC3E58100842450 /* libReact.a in Frameworks */, + 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, + 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, + 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, + 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, + 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, + 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, + 0008A62E21F2BD95000DB3E7 /* core.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 000BCDCC21F69E0000F4DA11 /* Assets */ = { + isa = PBXGroup; + children = ( + 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */, + ); + name = Assets; + sourceTree = ""; + }; + 000BCDF721F6CAFF00F4DA11 /* Products */ = { + isa = PBXGroup; + children = ( + 000BCDFE21F6CAFF00F4DA11 /* libRCTWebSocket.a */, + 000BCE0021F6CAFF00F4DA11 /* libRCTWebSocket-tvOS.a */, + 000BCE0221F6CAFF00F4DA11 /* libfishhook.a */, + 000BCE0421F6CAFF00F4DA11 /* libfishhook-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 000C280B21F51C4E00C5EC6D /* Products */ = { + isa = PBXGroup; + children = ( + 000C283521F51C4E00C5EC6D /* libRNSVG.a */, + 000C283721F51C4E00C5EC6D /* libRNSVG-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302A81ABCB8CE00DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302B61ABCB90400DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302BC1ABCB91800DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 00C302D41ABCB9D200DB3ED1 /* Products */ = { + isa = PBXGroup; + children = ( + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 139105B71AF99BAD00B5F7CC /* Products */ = { + isa = PBXGroup; + children = ( + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* Application */ = { + isa = PBXGroup; + children = ( + 13B07FB61A68108700A75B9A /* Info.plist */, + 0008A5F521F17513000DB3E7 /* AppDelegate.swift */, + 0008A5F721F17531000DB3E7 /* BridgingHeader.h */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, + 0008A62921F2B728000DB3E7 /* CoreModule.swift */, + 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */, + ); + name = Application; + sourceTree = ""; + }; + 146834001AC3E56700842450 /* Products */ = { + isa = PBXGroup; + children = ( + 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, + 2DF0FFDF2056DD460020B375 /* libjsinspector.a */, + 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */, + 2DF0FFE32056DD460020B375 /* libthird-party.a */, + 2DF0FFE52056DD460020B375 /* libthird-party.a */, + 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */, + 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */, + 2DF0FFEB2056DD460020B375 /* libprivatedata.a */, + 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0008A5C021F16D25000DB3E7 /* core.framework */, + 2D16E6891FA4F8E400B85C8A /* libReact.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, + ); + name = Products; + sourceTree = ""; + }; + 78C398B11ACF4ADC00677621 /* Products */ = { + isa = PBXGroup; + children = ( + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */, + 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */, + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + ); + name = Libraries; + sourceTree = ""; + }; + 832341B11AAA6A8300B99B32 /* Products */ = { + isa = PBXGroup; + children = ( + 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 000BCDCC21F69E0000F4DA11 /* Assets */, + 13B07FAE1A68108700A75B9A /* Application */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* uhabits.app */, + ); + name = Products; + sourceTree = ""; + }; + ADBDB9201DFEBF0600ED6528 /* Products */ = { + isa = PBXGroup; + children = ( + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, + 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* uhabits */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "uhabits" */; + buildPhases = ( + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 0008A63021F2BD95000DB3E7 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = uhabits; + productName = "Hello World"; + productReference = 13B07F961A680F5B00A75B9A /* uhabits.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = R5YTHGE3PS; + LastSwiftMigration = 1010; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "uhabits" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; + ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; + }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, + { + ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; + ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; + }, + { + ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; + ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; + }, + { + ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; + ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + }, + { + ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; + ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + }, + { + ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; + ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + }, + { + ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; + ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + }, + { + ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; + ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + }, + { + ProductGroup = 000BCDF721F6CAFF00F4DA11 /* Products */; + ProjectRef = 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */; + }, + { + ProductGroup = 146834001AC3E56700842450 /* Products */; + ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; + }, + { + ProductGroup = 000C280B21F51C4E00C5EC6D /* Products */; + ProjectRef = 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* uhabits */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 000BCDFE21F6CAFF00F4DA11 /* libRCTWebSocket.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTWebSocket.a; + remoteRef = 000BCDFD21F6CAFF00F4DA11 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 000BCE0021F6CAFF00F4DA11 /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 000BCDFF21F6CAFF00F4DA11 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 000BCE0221F6CAFF00F4DA11 /* libfishhook.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libfishhook.a; + remoteRef = 000BCE0121F6CAFF00F4DA11 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 000BCE0421F6CAFF00F4DA11 /* libfishhook-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libfishhook-tvOS.a"; + remoteRef = 000BCE0321F6CAFF00F4DA11 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 000C283521F51C4E00C5EC6D /* libRNSVG.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNSVG.a; + remoteRef = 000C283421F51C4E00C5EC6D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 000C283721F51C4E00C5EC6D /* libRNSVG-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRNSVG-tvOS.a"; + remoteRef = 000C283621F51C4E00C5EC6D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTActionSheet.a; + remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTGeolocation.a; + remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTImage.a; + remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTNetwork.a; + remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTSettings.a; + remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 146834041AC3E56700842450 /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2D16E6721FA4F8DC00B85C8A /* libRCTBlob-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTBlob-tvOS.a"; + remoteRef = 2D16E6711FA4F8DC00B85C8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFDF2056DD460020B375 /* libjsinspector.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsinspector.a; + remoteRef = 2DF0FFDE2056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsinspector-tvOS.a"; + remoteRef = 2DF0FFE02056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE32056DD460020B375 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 2DF0FFE22056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE52056DD460020B375 /* libthird-party.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libthird-party.a"; + remoteRef = 2DF0FFE42056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE72056DD460020B375 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 2DF0FFE62056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFE92056DD460020B375 /* libdouble-conversion.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libdouble-conversion.a"; + remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libprivatedata.a; + remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libprivatedata-tvOS.a"; + remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTLinking.a; + remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTText.a; + remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTBlob.a; + remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 000BCDF521F69E1400F4DA11 /* FontAwesome Regular.ttf in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0008A62C21F2B755000DB3E7 /* CoreModuleBridge.m in Sources */, + 0008A62A21F2B728000DB3E7 /* CoreModule.swift in Sources */, + 0008A5F621F17513000DB3E7 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 13B07FB21A68108700A75B9A /* Base */, + ); + name = LaunchScreen.xib; + path = uhabits; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = NO; + DEVELOPMENT_TEAM = R5YTHGE3PS; + FRAMEWORK_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/**"; + HEADER_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/core.framework/**"; + INFOPLIST_FILE = uhabits/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = uhabits; + SWIFT_OBJC_BRIDGING_HEADER = "${PROJECT_DIR}/uhabits/BridgingHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = R5YTHGE3PS; + FRAMEWORK_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/**"; + HEADER_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/core.framework/**"; + INFOPLIST_FILE = uhabits/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = uhabits; + SWIFT_OBJC_BRIDGING_HEADER = "${PROJECT_DIR}/uhabits/BridgingHeader.h"; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "uhabits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "uhabits" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme b/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme new file mode 100644 index 000000000..41becf511 --- /dev/null +++ b/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/uhabits/AppDelegate.swift b/ios/uhabits/AppDelegate.swift new file mode 100644 index 000000000..9cd807a41 --- /dev/null +++ b/ios/uhabits/AppDelegate.swift @@ -0,0 +1,30 @@ +import Foundation + +@UIApplicationMain + +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? + var bridge: RCTBridge! + static var backend = Backend() + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + AppDelegate.backend.createHabit(name: "Wake up early") + AppDelegate.backend.createHabit(name: "Wash clothes") + AppDelegate.backend.createHabit(name: "Exercise") + AppDelegate.backend.createHabit(name: "Meditate") + AppDelegate.backend.createHabit(name: "Take vitamins") + AppDelegate.backend.createHabit(name: "Write 'the quick brown fox jumps over the lazy dog' daily") + AppDelegate.backend.createHabit(name: "Write journal") + AppDelegate.backend.createHabit(name: "Study French") + + let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index.ios", fallbackResource: nil) + let rootView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "LoopHabitTracker", initialProperties: nil, launchOptions: launchOptions) + rootView?.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) + self.window = UIWindow(frame: UIScreen.main.bounds) + let rootViewController = UIViewController() + rootViewController.view = rootView + self.window?.rootViewController = rootViewController + self.window?.makeKeyAndVisible() + return true + } +} diff --git a/ios/uhabits/Base.lproj/LaunchScreen.xib b/ios/uhabits/Base.lproj/LaunchScreen.xib new file mode 100644 index 000000000..8de9d5fde --- /dev/null +++ b/ios/uhabits/Base.lproj/LaunchScreen.xib @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/uhabits/BridgingHeader.h b/ios/uhabits/BridgingHeader.h new file mode 100644 index 000000000..de3d2446f --- /dev/null +++ b/ios/uhabits/BridgingHeader.h @@ -0,0 +1,5 @@ +#import +#import +#import +#import +#import diff --git a/ios/uhabits/CoreModuleBridge.m b/ios/uhabits/CoreModuleBridge.m new file mode 100644 index 000000000..236cdba5f --- /dev/null +++ b/ios/uhabits/CoreModuleBridge.m @@ -0,0 +1,10 @@ +#import +#import +#import + +@interface RCT_EXTERN_MODULE(CoreModule, RCTEventEmitter) +RCT_EXTERN_METHOD(createHabit:(NSString)name) +//RCT_EXTERN_METHOD(updateHabit:(int)id (NSString)name) +//RCT_EXTERN_METHOD(deleteHabit:(int)id) +RCT_EXTERN_METHOD(requestHabitList) +@end diff --git a/ios/uhabits/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/uhabits/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..19882d568 --- /dev/null +++ b/ios/uhabits/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/uhabits/Images.xcassets/Contents.json b/ios/uhabits/Images.xcassets/Contents.json new file mode 100644 index 000000000..2d92bd53f --- /dev/null +++ b/ios/uhabits/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/uhabits/Info.plist b/ios/uhabits/Info.plist new file mode 100644 index 000000000..36a3c5b87 --- /dev/null +++ b/ios/uhabits/Info.plist @@ -0,0 +1,61 @@ + + + + + UIAppFonts + + FontAwesome Regular.ttf + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + uhabits + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + + diff --git a/react-native/.eslintrc.js b/react-native/.eslintrc.js new file mode 100644 index 000000000..cefef93ce --- /dev/null +++ b/react-native/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + "extends": "airbnb", + "rules": { + "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], + "import/prefer-default-export": false, + } +}; diff --git a/react-native/index.android.js b/react-native/index.android.js new file mode 100644 index 000000000..d159ead57 --- /dev/null +++ b/react-native/index.android.js @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { + AppRegistry, + StyleSheet, + View, + ToolbarAndroid, + StatusBar, +} from 'react-native'; +import ListHabitScene from './src/components/ListHabits/index'; +import { Colors } from './src/helpers/Colors'; + +const icAdd = require('./res/images/ic_add.png'); +const icFilter = require('./res/images/ic_filter.png'); + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: Colors.appBackground, + }, + toolbar: { + backgroundColor: Colors.toolbarBackground, + height: 56, + alignSelf: 'stretch', + elevation: 8, + }, +}); + +function RootComponent() { + return ( + + + + + + ); +} + +AppRegistry.registerComponent('LoopHabitTracker', () => RootComponent); diff --git a/react-native/index.ios.js b/react-native/index.ios.js new file mode 100644 index 000000000..9218a2f2d --- /dev/null +++ b/react-native/index.ios.js @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { + AppRegistry, + NavigatorIOS, + NativeModules, + NativeEventEmitter, +} from 'react-native'; +import ListHabitsScene from './src/components/ListHabits/index'; + +function RootComponent() { + return ( + + ); +} + +AppRegistry.registerComponent('LoopHabitTracker', () => RootComponent); diff --git a/react-native/package-lock.json b/react-native/package-lock.json new file mode 100644 index 000000000..2488dbdd1 --- /dev/null +++ b/react-native/package-lock.json @@ -0,0 +1,6595 @@ +{ + "name": "LoopHabitTracker", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", + "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.2.2", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.2.2", + "@babel/types": "^7.2.2", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.10", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "@babel/generator": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", + "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "requires": { + "@babel/types": "^7.2.2", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz", + "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==", + "requires": { + "@babel/types": "^7.0.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz", + "integrity": "sha512-xO/3Gn+2C7/eOUeb0VRnSP1+yvWHNxlpAot1eMhtoKDCN7POsyQP5excuT5UsV5daHxMWBeIIOeI5cmB8vMRgQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.2.3" + } + }, + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.2.2", + "@babel/types": "^7.2.2", + "lodash": "^4.17.10" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "requires": { + "lodash": "^4.17.10" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", + "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.2.3", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz", + "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==", + "requires": { + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.2.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", + "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==" + }, + "@babel/plugin-external-helpers": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz", + "integrity": "sha512-QFmtcCShFkyAsNtdCM3lJPmRe1iB+vPZymlB4LnDIKEBj2yKQLQKtoxXxJ8ePT5fwMl4QGg303p4mB0UsSI2/g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz", + "integrity": "sha512-FVuQngLoN2iDrpW7LmhPZ2sO4DJxf35FOcwidwB9Ru9tMvI5URthnkVHuG14IStV+TzkMTyLMoOUlSTtrdVwqw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.2.3", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.2.0.tgz", + "integrity": "sha512-NVfNe7F6nsasG1FnvcFxh2FN0l04ZNe75qTOAVOILWPam0tw9a63RtT/Dab8dPjedZa4fTQaQ83yMMywF9OSug==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.2.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.2.0.tgz", + "integrity": "sha512-QXj/YjFuFJd68oDvoc1e8aqLr2wz7Kofzvp6Ekd/o7MWZl+nZ0/cpStxND+hlZ7DpRWAp7OmuyT2areZ2V3YUA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz", + "integrity": "sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.2.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz", + "integrity": "sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz", + "integrity": "sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", + "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz", + "integrity": "sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz", + "integrity": "sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz", + "integrity": "sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", + "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", + "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.10" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", + "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", + "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz", + "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", + "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", + "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz", + "integrity": "sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", + "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "requires": { + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz", + "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", + "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "requires": { + "regenerator-transform": "^0.13.3" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", + "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.2.0.tgz", + "integrity": "sha512-EnI7i2/gJ7ZNr2MuyvN2Hu+BHJENlxWte5XygPvfj/MbvtOkWor9zcnHpMMQL2YYaaCcqtIvJUyJ7QVfoGs7ew==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.2.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + } + }, + "@babel/register": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", + "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", + "requires": { + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + }, + "dependencies": { + "core-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + } + } + }, + "@babel/runtime": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", + "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", + "requires": { + "regenerator-runtime": "^0.12.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" + } + }, + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.2.3", + "@babel/types": "^7.2.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "@babel/types": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", + "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "art": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz", + "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "requires": { + "lodash": "^4.17.10" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + }, + "babel-preset-fbjs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.1.2.tgz", + "integrity": "sha512-Bfrc4T3sub3TlXB19SQGKVigAiZpXJh05Cng8Iytn0TODXa86CigTkQnGun1FMQZJHrrpBpbm/IVDj+4K9lwAQ==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "big-integer": { + "version": "1.6.40", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.40.tgz", + "integrity": "sha512-CjhtJp0BViLzP1ZkEnoywjgtFQXS2pomKjAJtIISTCnuHILkLcAXLdFLG/nxsHc4s9kJfc+82Xpg8WNyhfACzQ==" + }, + "bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", + "requires": { + "stream-buffers": "~2.2.0" + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "requires": { + "big-integer": "^1.6.7" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "requires": { + "rsvp": "^3.3.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "optional": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", + "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "compressible": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "requires": { + "mime-db": ">= 1.36.0 < 2" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "optional": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + }, + "dependencies": { + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "optional": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "envinfo": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-5.12.1.tgz", + "integrity": "sha512-pwdo0/G3CIkQ0y6PCXq4RdkvId2elvtPCJMG0konqlrfkWQbf1DWeH9K2b/cvu2YgGvPPTOnonZxXM1gikFu1w==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "errorhandler": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.0.tgz", + "integrity": "sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ=", + "requires": { + "accepts": "~1.3.3", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-config-airbnb": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz", + "integrity": "sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^13.1.0", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" + } + }, + "eslint-config-airbnb-base": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", + "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", + "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "dev": true, + "requires": { + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.1", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^6.5.1", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1" + } + }, + "eslint-plugin-react": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-1.1.1.tgz", + "integrity": "sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "requires": { + "kind-of": "^1.1.0" + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "fbjs-scripts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.0.1.tgz", + "integrity": "sha512-x8bfX7k0z5B24Ue0YqjZq/2QxxaKZUNbkGdX//zbQDElMJFqBRrvRi8O3qds7UNNzs78jYqIYCS32Sk/wu5UJg==", + "requires": { + "@babel/core": "^7.0.0", + "ansi-colors": "^1.0.1", + "babel-preset-fbjs": "^3.0.0", + "core-js": "^2.4.1", + "cross-spawn": "^5.1.0", + "fancy-log": "^1.3.2", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "semver": "^5.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz", + "integrity": "sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==", + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "^2.0.0" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + } + }, + "globals": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", + "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==" + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "home-or-tmp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", + "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "optional": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-haste-map": { + "version": "23.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.5.0.tgz", + "integrity": "sha512-bt9Swigb6KZ6ZQq/fQDUwdUeHenVvZ6G/lKwJjwRGp+Fap8D4B3bND3FaeJg7vXVsLX8hXshRArbVxLop/5wLw==", + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "invariant": "^2.2.4", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + } + }, + "jest-serializer": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=" + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "requires": { + "merge-stream": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "^3.0.3" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "metro": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.48.5.tgz", + "integrity": "sha512-aCarzjxdYqh+9I40bF+Hh1ayrwfPrnDwVOvpQg3VZFWU4wfeMiJb+tzeRN9p94cC/MKhBTOjRmUF3plzrHoe0w==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/generator": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.0.1", + "chalk": "^1.1.1", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "jest-docblock": "23.2.0", + "jest-haste-map": "23.5.0", + "jest-worker": "23.2.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-cache": "0.48.5", + "metro-config": "0.48.5", + "metro-core": "0.48.5", + "metro-minify-uglify": "0.48.5", + "metro-react-native-babel-preset": "0.48.5", + "metro-resolver": "0.48.5", + "metro-source-map": "0.48.5", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.0", + "react-transform-hmr": "^1.0.4", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "write-file-atomic": "^1.2.0", + "ws": "^1.1.0", + "xpipe": "^1.0.5", + "yargs": "^9.0.0" + }, + "dependencies": { + "mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=" + }, + "mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", + "requires": { + "mime-db": "~1.23.0" + } + } + } + }, + "metro-babel-register": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.48.5.tgz", + "integrity": "sha512-bJCessd7THqEfXrKEoj284XVjg9AGYbGqZiyV622l6ex9TvtVi1lToDY0TuAAuDXOm+V4vQXV7/HvR6JPP0dTQ==", + "requires": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "core-js": "^2.2.2", + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "core-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" + } + } + }, + "metro-babel7-plugin-react-transform": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.48.5.tgz", + "integrity": "sha512-S0cA0msHBGw7PSwB6nAsvtHEpQXVwzKBaE4AibLpaBiIVdWkYpIOok653zs9x+E9QvQgcghAnlVnDV+MDM+rSw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0" + } + }, + "metro-cache": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.48.5.tgz", + "integrity": "sha512-vlUf3A6+U3LXcf6wAn42N22q1h7MMoopA25w5KR4Flwd0xKVokxHwsTo9v06vpn4gqFtpXWCpEJSBaYRrWYJwg==", + "requires": { + "jest-serializer": "23.0.1", + "metro-core": "0.48.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "metro-config": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.48.5.tgz", + "integrity": "sha512-b+EmFgBOAEUM5THjJ2EU6CJxnULLC5V1Q8S8dz4xX4v96eLIsRCLPrXgYKATHJTVi0qw99ATVRsOBZVZ77fwjg==", + "requires": { + "cosmiconfig": "^5.0.5", + "metro": "0.48.5", + "metro-cache": "0.48.5", + "metro-core": "0.48.5", + "pretty-format": "^23.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + } + } + } + }, + "metro-core": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.48.5.tgz", + "integrity": "sha512-Yp0BOAHhxf/qdNkwJhemVdD2Y59iyaTjwxUimCmeD8u5VEL6mLgEC1S0KczyWEiAgX3Fs48rezCAcx3mo67wXg==", + "requires": { + "jest-haste-map": "23.5.0", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.48.5", + "wordwrap": "^1.0.0" + } + }, + "metro-memory-fs": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-memory-fs/-/metro-memory-fs-0.48.5.tgz", + "integrity": "sha512-dxN0dBtMOR1CvyRIOM/NE+uFirybWb4y2PZke0Z8bpYn6ttmv8ZF3PVdFxJf9v9irVBSOIPD0mD5zllxQkXzhg==" + }, + "metro-minify-uglify": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.48.5.tgz", + "integrity": "sha512-tiHVYlUMuL91YjQPx9BzzzXy5jAAA5SWLqlvWfmM6m9faWtFeCv8Se27vVNuPDkOPYyL8qPCRhUpZMUhA0yN2g==", + "requires": { + "uglify-es": "^3.1.9" + } + }, + "metro-react-native-babel-preset": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.48.5.tgz", + "integrity": "sha512-ldG1bsusB5zlS1fhAiSLRjUA7I/Chn/dniaXTlkUpgiqyEAaDDmqhkDJ8gyZw3rhlLMVswlBd3o6I8yYti+57w==", + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "metro-babel7-plugin-react-transform": "0.48.5", + "react-transform-hmr": "^1.0.4" + } + }, + "metro-resolver": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.48.5.tgz", + "integrity": "sha512-lScSpLJKZMmNPRwvcY6zj28AwMOcI1M5bCCv+m06VWcISCTq1KlaKVwqLKmFgUtPkoFtFLD+PVKRKCRUxj1opg==", + "requires": { + "absolute-path": "^0.0.0" + } + }, + "metro-source-map": { + "version": "0.48.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.48.5.tgz", + "integrity": "sha512-+BbcU9vfEl/XhMlVV0RwuHuEkai4lq7RmlQkxgoOoWl1u0yXCAPRZ5sqa326fPlJzElOR3cp0y7+Oc2nbIguyg==", + "requires": { + "source-map": "^0.5.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "optional": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "needle": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", + "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz", + "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==", + "requires": { + "growly": "^1.3.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", + "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-bundled": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", + "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", + "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + }, + "dependencies": { + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + } + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opn": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz", + "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=", + "requires": { + "object-assign": "^4.0.1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "optional": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + } + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-node-version": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", + "integrity": "sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", + "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + }, + "plist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", + "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^9.0.7", + "xmldom": "0.1.x" + } + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-format": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-4.3.1.tgz", + "integrity": "sha1-UwvlxCs8BbNkFKeipDN6qArNDo0=" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "16.6.3", + "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz", + "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.11.2" + } + }, + "react-clone-referenced-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz", + "integrity": "sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg==" + }, + "react-deep-force-update": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz", + "integrity": "sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==" + }, + "react-devtools-core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.0.tgz", + "integrity": "sha512-picLP5RMESANerl2Ieo2rcMmVBqTG5QgIkSGcoJqvT5V4+HpLRjz5QW8xC85i+bXLdJmjoi3ZE9qDpNa5m7S4A==", + "requires": { + "shell-quote": "^1.6.1", + "ws": "^3.3.1" + }, + "dependencies": { + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "react-native": { + "version": "0.57.8", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.57.8.tgz", + "integrity": "sha512-K6DAMTPTq+lxVYC73y4Kh/bgLajddBaIKzwsVeV4JOoS1Fdq48/ISXD3vApV+x+/IBVTXnrT9qlA+9U6MMZCqA==", + "requires": { + "@babel/runtime": "^7.0.0", + "absolute-path": "^0.0.0", + "art": "^0.10.0", + "base64-js": "^1.1.2", + "chalk": "^1.1.1", + "commander": "^2.9.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "create-react-class": "^15.6.3", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "envinfo": "^5.7.0", + "errorhandler": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "event-target-shim": "^1.0.5", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.0.0", + "fs-extra": "^1.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.3", + "inquirer": "^3.0.6", + "lodash": "^4.17.5", + "metro": "^0.48.1", + "metro-babel-register": "^0.48.1", + "metro-core": "^0.48.1", + "metro-memory-fs": "^0.48.1", + "mime": "^1.3.4", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "morgan": "^1.9.0", + "node-fetch": "^2.2.0", + "node-notifier": "^5.2.1", + "npmlog": "^2.0.4", + "opn": "^3.0.2", + "optimist": "^0.6.1", + "plist": "^3.0.0", + "pretty-format": "^4.2.1", + "promise": "^7.1.1", + "prop-types": "^15.5.8", + "react-clone-referenced-element": "^1.0.1", + "react-devtools-core": "^3.4.2", + "react-timer-mixin": "^0.13.2", + "regenerator-runtime": "^0.11.0", + "rimraf": "^2.5.4", + "semver": "^5.0.3", + "serve-static": "^1.13.1", + "shell-quote": "1.6.1", + "stacktrace-parser": "^0.1.3", + "ws": "^1.1.5", + "xcode": "^1.0.0", + "xmldoc": "^0.4.0", + "yargs": "^9.0.0" + } + }, + "react-native-svg": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.0.0.tgz", + "integrity": "sha512-HOmQ94XNdvo19SQp60MgEmF4scyhtR/78Oqr5vsMxNgnVRt9oaEfJygtfdhiUslYs4zHbCvKvPo4k+BJhh0pfA==", + "requires": { + "color": "^2.0.1" + } + }, + "react-native-vector-icons": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.1.0.tgz", + "integrity": "sha512-1GF5I4VWgwnzBtVfAKNgEiR5ziHi5QaKL381wwApMzuiFgIJMNt5XIChuKwKoaiB86s+P5iMcYWxYCyENL96lA==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.6.2", + "yargs": "^8.0.2" + }, + "dependencies": { + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + } + } + }, + "react-proxy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", + "integrity": "sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=", + "requires": { + "lodash": "^4.6.1", + "react-deep-force-update": "^1.0.0" + } + }, + "react-timer-mixin": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz", + "integrity": "sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==" + }, + "react-transform-hmr": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz", + "integrity": "sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=", + "requires": { + "global": "^4.3.0", + "react-proxy": "^1.1.7" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true + }, + "scheduler": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.3.tgz", + "integrity": "sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-plist": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", + "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=", + "requires": { + "bplist-creator": "0.0.7", + "bplist-parser": "0.1.1", + "plist": "2.0.1" + }, + "dependencies": { + "base64-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", + "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=" + }, + "plist": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", + "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=", + "requires": { + "base64-js": "1.1.2", + "xmlbuilder": "8.2.2", + "xmldom": "0.1.x" + } + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stacktrace-parser": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz", + "integrity": "sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "table": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", + "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", + "dev": true, + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "optional": true + } + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "ua-parser-js": { + "version": "0.7.19", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", + "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "xcode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-1.1.0.tgz", + "integrity": "sha512-hllHFtfsNu5WbVzj8KbGNdI3NgOYmTLZqyF4a9c9J1aGMhAdxmLLsXlpG0Bz8fEtKh6I3pyargRXN0ZlLpcF5w==", + "requires": { + "simple-plist": "^0.2.1", + "uuid": "^3.3.2" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmldoc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-0.4.0.tgz", + "integrity": "sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg=", + "requires": { + "sax": "~1.1.1" + }, + "dependencies": { + "sax": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.6.tgz", + "integrity": "sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA=" + } + } + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpipe": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", + "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + } + } + } +} diff --git a/react-native/package.json b/react-native/package.json new file mode 100644 index 000000000..ce7146343 --- /dev/null +++ b/react-native/package.json @@ -0,0 +1,22 @@ +{ + "name": "LoopHabitTracker", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start" + }, + "dependencies": { + "prop-types": "^15.6.2", + "react": "^16.6.3", + "react-native": "^0.57.8", + "react-native-svg": "^9.0.0", + "react-native-vector-icons": "^6.1.0" + }, + "devDependencies": { + "eslint": "^5.12.1", + "eslint-config-airbnb": "^17.1.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "^6.1.2", + "eslint-plugin-react": "^7.12.4" + } +} diff --git a/react-native/res/fonts/FontAwesome Regular.ttf b/react-native/res/fonts/FontAwesome Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e89738de5eaf8fca33a2f2cdc5cb4929caa62b71 GIT binary patch literal 80652 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 literal 0 HcmV?d00001 diff --git a/react-native/res/images/ic_filter.png b/react-native/res/images/ic_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..112c5b0c3b46ad6f61405d32276f1294667e0dd3 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!0iG_7Ar-gYUUTGSFyLX{Sj1JI zBi-@UaO*Y^rte;&KotxQt5wn;u?Tr6G_u?h;9y`lwkNj{!ewG;I6r^80~4pp1P3NY bkXoA^PYurZac%x`1;q1o^>bP0l+XkKKPn~) literal 0 HcmV?d00001 diff --git a/react-native/src/components/ListHabits/CheckmarkButton.js b/react-native/src/components/ListHabits/CheckmarkButton.js new file mode 100644 index 000000000..70f2c6b87 --- /dev/null +++ b/react-native/src/components/ListHabits/CheckmarkButton.js @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import PropTypes from 'prop-types'; +import React from 'react'; +import { + StyleSheet, + Text, + View, +} from 'react-native'; +import FontAwesome from '../../helpers/FontAwesome'; +import { Colors } from '../../helpers/Colors'; + +const styles = StyleSheet.create({ + checkmarkBox: { + width: 44, + height: 44, + justifyContent: 'center', + alignItems: 'center', + }, + checkmark: { + fontFamily: 'FontAwesome', + fontSize: 14, + }, +}); + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +export default function CheckmarkButton(props) { + let text; + const { color } = props; + const value = Math.min(2, randomInt(5)); + + if (value === 2) { + text = ( + + {FontAwesome.check} + + ); + } else if (value === 1) { + text = ( + + {FontAwesome.check} + + ); + } else { + text = ( + + {FontAwesome.times} + + ); + } + return ( + {text} + ); +} + +CheckmarkButton.propTypes = { + color: PropTypes.string.isRequired, +}; diff --git a/react-native/src/components/ListHabits/HabitList.js b/react-native/src/components/ListHabits/HabitList.js new file mode 100644 index 000000000..81316a22a --- /dev/null +++ b/react-native/src/components/ListHabits/HabitList.js @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { + FlatList, + StyleSheet, + Text, + View, +} from 'react-native'; +import { Colors } from '../../helpers/Colors'; +import { Emitter, Backend } from '../../helpers/Backend'; +import Ring from '../common/Ring'; +import CheckmarkButton from './CheckmarkButton'; + +const styles = StyleSheet.create({ + item: { + backgroundColor: Colors.itemBackground, + padding: 1, + marginTop: 0, + marginBottom: 1, + marginLeft: 0, + marginRight: 0, + elevation: 0, + flexDirection: 'row', + alignItems: 'stretch', + }, + ringContainer: { + width: 35, + height: 45, + justifyContent: 'center', + alignItems: 'center', + }, + labelContainer: { + width: 44, + flex: 1, + justifyContent: 'center', + }, +}); + +export default class HabitList extends React.Component { + constructor(props) { + super(props); + this.state = { habits: [] }; + } + + componentDidMount() { + Emitter.addListener('onHabitList', (e) => { + this.setState({ habits: e }); + }); + Backend.requestHabitList(); + } + + render() { + const { habits } = this.state; + return ( + ( + + + + + + + {item.name} + + + + + + + + + )} + /> + ); + } +} diff --git a/react-native/src/components/ListHabits/HabitListHeader.js b/react-native/src/components/ListHabits/HabitListHeader.js new file mode 100644 index 000000000..3144e8956 --- /dev/null +++ b/react-native/src/components/ListHabits/HabitListHeader.js @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * Copyright (C) 2019 Javier Artiles + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { View, StyleSheet, Text } from 'react-native'; +import { Colors } from '../../helpers/Colors'; + +const styles = StyleSheet.create({ + container: { + height: 50, + paddingRight: 1, + backgroundColor: Colors.headerBackground, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'flex-end', + elevation: 4, + borderBottomColor: Colors.headerBorderColor, + borderBottomWidth: StyleSheet.hairlineWidth, + }, + column: { + width: 44, + alignItems: 'center', + }, + text: { + color: Colors.headerTextColor, + fontWeight: 'bold', + }, + dayName: { + fontSize: 10, + }, + dayNumber: { + fontSize: 12, + }, +}); + +export default class HabitListHeader extends React.Component { + static renderColumn(dayName, dayNumber) { + return ( + + + {dayName.toUpperCase()} + + + {dayNumber} + + + ); + } + + static renderColumns() { + return [ + { + dayName: 'Sun', + dayNumber: '6', + }, + { + dayName: 'Sat', + dayNumber: '5', + }, + { + dayName: 'Fri', + dayNumber: '4', + }, + { + dayName: 'Thu', + dayNumber: '3', + }, + { + dayName: 'Wed', + dayNumber: '2', + }, + + ].map((day) => { + const { dayName, dayNumber } = day; + return HabitListHeader.renderColumn(dayName, dayNumber); + }); + } + + render() { + return ( + + {HabitListHeader.renderColumns()} + + ); + } +} diff --git a/react-native/src/components/ListHabits/index.js b/react-native/src/components/ListHabits/index.js new file mode 100644 index 000000000..7565d1762 --- /dev/null +++ b/react-native/src/components/ListHabits/index.js @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { StyleSheet, View } from 'react-native'; +import { Colors } from '../../helpers/Colors'; +import HabitListHeader from './HabitListHeader'; +import HabitList from './HabitList'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: Colors.appBackground, + }, +}); + +export default function ListHabitsScene() { + return ( + + + + + ); +} diff --git a/react-native/src/components/common/Ring.js b/react-native/src/components/common/Ring.js new file mode 100644 index 000000000..017aff32d --- /dev/null +++ b/react-native/src/components/common/Ring.js @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import Svg, { Circle } from 'react-native-svg'; + +export default function Ring(props) { + const { + size, strokeWidth, color, percentage, + } = props; + + return ( + + + + + ); +} + +Ring.propTypes = { + size: PropTypes.number.isRequired, + strokeWidth: PropTypes.number.isRequired, + color: PropTypes.string.isRequired, + percentage: PropTypes.number.isRequired, +}; diff --git a/react-native/src/helpers/Backend.js b/react-native/src/helpers/Backend.js new file mode 100644 index 000000000..663d11462 --- /dev/null +++ b/react-native/src/helpers/Backend.js @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import { + NativeEventEmitter, + DeviceEventEmitter, + NativeModules, + Platform, +} from 'react-native'; + +const { CoreModule } = NativeModules; + +let emitter = DeviceEventEmitter; +if (Platform.OS === 'ios') { + emitter = new NativeEventEmitter(CoreModule); +} + +export const Emitter = emitter; +export const Backend = NativeModules.CoreModule; diff --git a/react-native/src/helpers/Colors.js b/react-native/src/helpers/Colors.js new file mode 100644 index 000000000..6c8c644c7 --- /dev/null +++ b/react-native/src/helpers/Colors.js @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +export const LIGHT_PALETTE = { + 0: '#D32F2F', + 1: '#512DA8', + 2: '#F57C00', + 3: '#FF8F00', + 4: '#F9A825', + 5: '#AFB42B', + 6: '#7CB342', + 7: '#388E3C', + 8: '#00897B', + 9: '#00ACC1', + 10: '#039BE5', + 11: '#1976D2', + 12: '#303F9F', + 13: '#5E35B1', + 14: '#8E24AA', + 15: '#D81B60', + 16: '#5D4037', + 17: '#000', + toolbar: '#f00', + appBackground: '#f0f0f0', + toolbarBackground: '#f4f4f4', + statusBarBackground: '#333', + statusBarStyle: 'light-content', + headerBackground: '#eee', + headerBorderColor: '#ccc', + headerTextColor: '#777', + itemBackground: '#fff', + unchecked: '#ddd', +}; + +export const Colors = LIGHT_PALETTE; diff --git a/react-native/src/helpers/FontAwesome.js b/react-native/src/helpers/FontAwesome.js new file mode 100644 index 000000000..cee76b6d0 --- /dev/null +++ b/react-native/src/helpers/FontAwesome.js @@ -0,0 +1,4 @@ +module.exports = { + check: '\uf00c', + times: '\uf00d', +}; From 0734e74154d3103b0505245e0820bfd439731cac Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 14:43:52 -0600 Subject: [PATCH 03/93] Add gradle wrappers --- android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55190 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + android/gradlew | 172 ++++++++++++++++++ android/gradlew.bat | 84 +++++++++ core/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 55190 bytes core/gradle/wrapper/gradle-wrapper.properties | 5 + core/gradlew | 172 ++++++++++++++++++ core/gradlew.bat | 84 +++++++++ 8 files changed, 522 insertions(+) create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100755 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 core/gradle/wrapper/gradle-wrapper.jar create mode 100644 core/gradle/wrapper/gradle-wrapper.properties create mode 100755 core/gradlew create mode 100644 core/gradlew.bat diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..87b738cbd051603d91cc39de6cb000dd98fe6b02 GIT binary patch literal 55190 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 z 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 000000000..0f8d5937c --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core/gradle/wrapper/gradle-wrapper.jar b/core/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..87b738cbd051603d91cc39de6cb000dd98fe6b02 GIT binary patch literal 55190 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 z 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/core/gradlew.bat b/core/gradlew.bat new file mode 100644 index 000000000..0f8d5937c --- /dev/null +++ b/core/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 15974bdca84f3405bbd984aeff4a45755cb93db0 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 14:44:07 -0600 Subject: [PATCH 04/93] Add README --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ core/build.gradle | 7 +++++++ 2 files changed, 47 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..eea1da8d6 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Loop Habit Tracker + +Loop is a mobile app that helps you create and maintain good habits. While the original app was developed exclusively for Android, this branch contains a work-in-progress proof-of-concept multi-platform version of the app, which targets Android and iOS. **The software in this branch is still in pre-alpha stage. Expect bugs, incomplete features and poor performance.** Suggestions and pull requests are very welcome. + +### 1. Required Tools and Libraries + +Currently, the project can only be built on Mac OS. The following tools and libraries need to be installed separately, before attempting to build the application. The versions below have been tested and are know to work. Newer versions may produce errors. + +* node 10.15.0 +* Xcode 10.1 +* Android Studio 3.3 +* android-platform-tools + +### 2. Build Instructions + +The application is composed by four different modules: (1) the **core** module, written in Kotlin/Native, which contains all the shared business logic; (2) the **react-native** module, written in JavaScript, which contains all the front-end code; (3) the **android** module, written in Kotlin, which contains just enough code to allow the two previous modules to run on Android; and (4) the **ios** module, written in Swift, which allows the two first modules to run on iOS. + +### 2.1. Building the **core** module + +In the terminal, navigate to the `core/` folder and run `./gradlew build`. No further steps are needed. The Kotlin/Native compiler will be automatically downloaded and installed, if needed. + +The main outputs during this phase are `core/build/libs/core-jvm.jar`, a pure-java library used by Android, and `core/build/bin/iOS/main/debug/framework/core.framework`, a framework used by iOS. + +**Note:** By default, we build an x64 framework, which only runs in the simulator. To produce an arm64 framework instead, which can be installed on a real iPhone, see instruction is the file `core/build.gradle`. + + +### 2.2. Installing `react-native` + +In the terminal, navigate to the `react-native/` folder and run `npm install`. This will download and install not only all JavaScript dependencies, but also some libraries used by the **android** and **ios** modules. Therefore it's very important to execute this step before the two steps below. + +### 2.3. Building the iOS application + +Open the file `ios/uhabits.xcodeproj` in Xcode, select your desired device and click the play button on the top left corner of the screen. After a long compilation, the simulator should start. A terminal window, running React Native, should also be automatically started. + +### 2.4. Building the Android application + +1. Before you start, make sure that React Native is running. This can be done by navigating to the `react-native` folder and running `npm start`. Alternatively, you can also simply run the iOS app from Xcode, since this also automatically starts React Native. +1. Open Android Studio, click `Import Project (Gradle, Eclipse ADT, etc)`, select the folder `android` and click open. +2. After Android Studio finishes syncing the project, click the menu `Run / 'Run android'`. If an error appears saying the the project failed to sync properly, click the menu `File / Sync Project with Gradle Files` and try again. If you do not have any emulators configured, you will need to create one at this time. Any device and system image should work. +3. After the application starts, if a red error screen appears, this indicates that the app is not able to connect to our React Native daemon. In the terminal, run `adb reverse tcp:8081 tcp:8081`. Then, in the emulator window, press `Command+M`. Click `Settings / Debug server host & port for device`. Enter `127.0.0.1:8081`, click OK, then restart the application. diff --git a/core/build.gradle b/core/build.gradle index 200a65d37..78de2790b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -43,9 +43,16 @@ apply plugin:"kotlin-multiplatform" kotlin { targets { fromPreset(presets.jvm, 'jvm') + fromPreset(presets.iosX64, 'iOS') { compilations.main.outputKinds('FRAMEWORK') } + + // Replace the target above with the following to produce a framework + // which can be installed on a real iPhone. + // fromPreset(presets.iosX64, 'iOS') { + // compilations.main.outputKinds('FRAMEWORK') + // } } sourceSets { From 50e94c4d094afa381c7ee534ee106a737b9058a5 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 15:03:45 -0600 Subject: [PATCH 05/93] Update README; add screenshot --- README.md | 12 ++++++++---- website/screenshots/macos1.png | Bin 0 -> 503518 bytes 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 website/screenshots/macos1.png diff --git a/README.md b/README.md index eea1da8d6..daaa52abe 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,13 @@ Loop is a mobile app that helps you create and maintain good habits. While the original app was developed exclusively for Android, this branch contains a work-in-progress proof-of-concept multi-platform version of the app, which targets Android and iOS. **The software in this branch is still in pre-alpha stage. Expect bugs, incomplete features and poor performance.** Suggestions and pull requests are very welcome. +
+ +
+ ### 1. Required Tools and Libraries -Currently, the project can only be built on Mac OS. The following tools and libraries need to be installed separately, before attempting to build the application. The versions below have been tested and are know to work. Newer versions may produce errors. +Currently, the project can only be built on macOS. The following tools and libraries need to be installed separately, before attempting to build the application. The versions below have been tested and are know to work. Newer versions may produce errors. * node 10.15.0 * Xcode 10.1 @@ -13,15 +17,15 @@ Currently, the project can only be built on Mac OS. The following tools and libr ### 2. Build Instructions -The application is composed by four different modules: (1) the **core** module, written in Kotlin/Native, which contains all the shared business logic; (2) the **react-native** module, written in JavaScript, which contains all the front-end code; (3) the **android** module, written in Kotlin, which contains just enough code to allow the two previous modules to run on Android; and (4) the **ios** module, written in Swift, which allows the two first modules to run on iOS. +The application is composed by four different modules: (1) the **core** module, written in Kotlin/Native, which contains all the shared business logic; (2) the **react-native** module, written in JavaScript, which contains all the front-end code; (3) the **android** module, written in Kotlin, which contains just enough code to allow the two previous modules to run on Android; and (4) the **ios** module, written in Swift, which allows the first two modules to run on iOS. ### 2.1. Building the **core** module -In the terminal, navigate to the `core/` folder and run `./gradlew build`. No further steps are needed. The Kotlin/Native compiler will be automatically downloaded and installed, if needed. +In the terminal, navigate to the `core/` folder and run `./gradlew build`. No further steps are needed. The Kotlin/Native compiler will be automatically downloaded and installed, if necessary. The main outputs during this phase are `core/build/libs/core-jvm.jar`, a pure-java library used by Android, and `core/build/bin/iOS/main/debug/framework/core.framework`, a framework used by iOS. -**Note:** By default, we build an x64 framework, which only runs in the simulator. To produce an arm64 framework instead, which can be installed on a real iPhone, see instruction is the file `core/build.gradle`. +**Note:** By default, we build an x64 framework, which only runs in the simulator. To produce an arm64 framework instead, which can be installed on a real iPhone, see instruction in the file `core/build.gradle`. ### 2.2. Installing `react-native` diff --git a/website/screenshots/macos1.png b/website/screenshots/macos1.png new file mode 100644 index 0000000000000000000000000000000000000000..e27539d4d36bbfc32c2bd585dd311dd07e974d86 GIT binary patch literal 503518 zcmZU(byOQnus)2mP>O^XC{QdED73|)#R*WXc#BgcSaEj=?!^ie_d;=Zw?IO0in|ls zp-Hgcd*!?Lp7ZTrvorI|voo{j?AbjV^;uP(_&LpUEG#Tyg-U0z}z`a#&{(G=M9&&=1bYo}fv z0T?~V(nkAnw8_b~iOiL-7H||uoA4sDNlf$u=MgWX-byy%4{}A)_5@BrWqX%<)aMcc z+ZFIyg@5yiO6CtFWl+%&x!{uy^LX*J@VwzkNKeml z2&qyAtf$5gfE&{PHZ*NW3=hxW7BAc$`J618Y=gw|4)!q;oMmD6#N<+lm#1d+_VKZv z1{e311uwjt{PFRzbMNu7J38nFck4)!1dGMfdOgOL4DfFsa;!CV-E>uyMa&%SxlGI* zO}}w@**pE)CoC*6FOh#m`)_V0j9&J34z40z;!OYPA@Z;MA8KwU#{YD2vlVC3Rr$;) z?dbB2@dMX;E*>V(b4Er+F&A?S5p@~4|AzlN6KAq=b8`~m=JxdTnG{|goS53R^&Yp-v1x-!=G-yB^3)8{iJMima zW%DZBYc&9q8E}0#=Xtu;>HGJ31$hIMfO!2q*@DM)b@=|>u$`grj^7leU@kwn^*rse zy48HTO0t$4^A`*n&}+S^1}CAe@7n>nz>B>u|A#Aw!rZm)+qRF%KnWRIs+?($_0uM9 zEy#)eA)_rjfJ&))u1 z{)HMGT=yu=*VLO;VS>Igvnm77igtIYfdz6M83?Y<*5F=s-d=-)7A+P|@ULC|gDK{I zvZD9LvmYHm=sU9rfIX(kdHzgfmXf~S{)4-lKk?FS&FD?WDw}-2{0Q$hQiE>2k?{G! zL0`4sp9B_9q5e?r$c;Ly{lWF`fXIlVnhKw~{sOwpV-)!#2o2mT6HCSgstA9&m&`90 z%3QZ3U-R)p-<>G=-!i6lxs9-f&udj3WGkcZ_IsDlx3w*!ZA~)0y)H|y;LXRENW^Z^ z0_)#7LE|b1)%B@}Ue!)P*+a=JQjE^hkGZ)aQ9BnW;iwq(qfQWq_Pab5rB>nuRD4U* zUyQ!jpXRb>RAz0^?yD?^S0g%h-of|ZTEt;ve z-T)-=>B^+3^Ks+$T$S!`0HN5m4G7GXX%lDd^+SBse zv7^_JIsKguMHe<*B(fZ}+Pb+oGY|sW9XJC2+NE#phGzACo078#`*&0D7wuzdQA^K{ z0_1BBl9R-jQBS1TKC^h3*%NPoo&6>J*f(3DQ{{=3uy@x zxlOYjl%MX%5z}U(lw!(Wjy=~)+)gUUI3Zw)kvbAy_gqFcy?lkYLzanJ@SUTQv!@S)ub>K$^T6O!d+(&ERI7~I_HiqzR+z0!L zQJNYl1kk37wrQK;OYf^v#Vr$Gu2+T}tMJSGJF$v$Xn(`S-{CPNeg6j#r%Uk)X6E8W z3XE)K1VD5>C9WBlr|bZk!~dv(j;711@o1WR)uyHS*#>_m&ZxB|fTRhs0_BZdQJ^h61c7 z=X5ufX3t{FxpQ+s0^&}aIVQh@fE3?mAE!zbDSBDJ5C#q`ts(>CS8g@_p*)qji0Aj{ zt;66mT)F;3uOzRugf#CE~;cy*f~XNU@V< zpuax8+L!mM-8>s(B>hM&X#t(yn33&1$F~$alwv(1xKGSlJD1);(J0V*^6XSwp}z|# ze=~az9quUFnsYfcW<6uQh!%Q?uaT{H)%9`AVr)xOsws&OJ$ISS@?&U@ zU;UK3Xy5KJ-C;BN3TFFmv3--gSTfMs?C(9=H&Hg86fMdXQVCkH589k;|E~ z@eqvH(xf9ck6mgW9042ed4K}9IJ(L zd=CTke#ntg+Qdu4j@%7--T*_;^9j^C;p1j23Bqx2T;)fH=?JhrrIhdOp(AX@5E$B< z^_XX?0uH=t1mad0k@(}kU)*@Lb>E%~HOT8G1TLNuvnEtJiqCOJ+w<~q>vIkKeZ71o zDiJWG(}yvfV@0)C%u#_+s_7l|_qN92q(8k-ms^f^za<{|@!z~YC1p3x*($SzdL_}m zdk*|Y{q{4z1+KRXEN0&d9{naG$W=Y&-~%;h4@6DE*3R8aAy^e%^+RO$y}c^OpuxH^ z-R$o)3ZEo#?_i$$tv%!Ke92~HhQ)`^uMV;$_jCa)RCc$|m-Ybd=6Z(k&L?azXl{q- zq{JQGyG^P!t0~dkd8px;X&TpV8_8n2?8-s?r(zg)*;(V`nR6&TfAEN<)1H$@bsR_3 zs)PUYrK8ecG`Y}N3xDREz(rU91v4|Q(Q&EK-C)Mu9bVH90kr8jIFFEeuZJMY4R}XoH zr%&=T0z7v(SW!3DBvpnXmQ4a1a(9I_cN<*d%rIbHh8P!TUcT*i*p<8>7Lk|NO3MMQ zZ$1l~GaP)K!1rt4ebf1D4|seua#qI8_Q6Gjp<@-}a(Wc@2&|HqFCZQ}hHV)W8lF28 z6wGxX7Rr!^Y;uPM1dLCrgZv);NwWfqj-Ps!DZ!9QkHbe~uW<3UG!(k$#i z>GuQ?-v+;16FEmguJOR~Ry6WMzY|XSGdP5KW^HblWL3P+rpNpii65#FVWdXj(q0AI z<0PEE)%xETCOR*|A=iq$W!DYp zu6PyQL>&(w3B)e7=KF2GC!*rp$flaAROh+MS7ErPqpY8ZQUW zOsTz-a1$LzT*slYfls-_==$y&qgEj5Va~p-8t5^<##e`T7rkk0p4!PoKhZ8oAtu&k zws^!6^yUHxZVS`{R4L!j-Mz85TJi4pHuI*KW2J@hMu(oCa~m8*(MoiW|GgNfeIV^Y zcRrN+e&I0`&7+p6*1Fy9+y2Ar%hM>%qJ&B65}~wmk-WIz`U14*fu>X-ayh4R61d3s zAdO*L)->sG=u zedD+ev6qGO7OelPFXi z|IUy+&9xhj=ZdU$47bo>I|^+ztFv|A5M@MfR1F|RkG6Zl@sGJ`lFQbaEoegQkP&u# z{^x-68rUI@ImmHD{|P}wcED}{SBZcs33+x0g_PSTL6StBd(N{;7rv00wVx^}m!$== zfoe9n;IimELdLM~GlZvO&LtY=DBYv|f1ab{{FEJ$8Vw6xgf7vl4Y+&^4?%~cvxwkL zohGX^+JyleKyl;NB>Gz{{dCh)d9rKU`(;~dj^|py-8ppNu5iwgjip8%7m%FlI2JI( ze88LntKkA5b#C&YxD@(Wu4O))4SOON<1onk;npFWY|9nN7CJ3&7smTE)3#~*0%TP7 z)_(Z`taHmyTu6cHrHG+>y`%c9Kw6S$yiT!7m8ur%Sde=_l{@#>cR7aWH7{WP88fqy zkwbo&ivnq-aII-DbK5`yjHihsH}{{Wi)=vx1s-wpge6~IyKzDA#Vut`n~9Jgg$_*? zss`FHFn9%Jq{KWdgn;4#SJDtQBfdv^M`ozc-SwZPIz&X)>s;S+hlcHD&N1v>!xvV? z*caze_vcY-=XHhl!ZMT#pXDV+l4r3KTb;3;-}|N_w&BB-cQ8sqEhw^$*W=h!Vo{;$ z9=M3=IOi1KW;BT~Sf5i9-Zq=-Uz>TeYVPo*vmo86?gXL|RYi*&8{*E>OLhx_JQ{i8I+7`n0b%yVz zCYx5*aw-$K{FdF8XWmX}nB2(8H)66Y2K!qi*PI~x@aPI-i<_mNYRw%3?Q>KgHLJf5b&2nXPF-0fmwqwJSfrlmMT%k zHvyO$uEI`njC~uQ#g7BSW|-fYA(`83rHQ1$bqEeXhF=lmWuBV9kkx$SOIyx7A7$z9 zUsfRHT$t=ydch?S!y6Ak%+uR3p%-Ko1vr!h+C8XU+rUYX%G3h$S$Hw~DtgQ1V03&t ziSS*Q?tEjLC=Hh`vKmskR;A268|OG&?G`y)mYBq;Px_NRaxZH4#K3f1`x;i>v_UiJ zD*xMHEsP}lA9Z)z49`_}oA>H1fRrwkPAtIA{$-w}Y zZUmLBWKdcUGL7iNE!O8aqp-3CG@b8P>Z-!IkA6b@!Koevud>-Ag1WB)7JqP)*b)Cl z9vD7BtZgt;83GkgW?zyEE_9^~0aVDM^g8-0E=I{+4(-Mm2n$V6pF0Hfh+WN1dVISK zMZu&3GlHrK`S#bYfej|-J4p7^RQ5%a8w;ffF_#yfBki^kX;pT&GhtM8p)pm7Ew#C+ z#nN4J^$$M5a%v@2wtdQ6F%ZaoVK_^8#}>QaAY0ilA-z}y7rYtuUnz}A1yw@>!Z
zB4p0|aFJWf<3+RwAqDf;i1}IyJxY{Lt!ab>W3*(N*i^O-B)QE$bj^-G+#VPulb1U& zGTkQOPB~If{Rp``z&jcpRb!#!7Q51$b~z{CKVmW4Qrfn%+~ENoPjYro!But7awJZF zDRvkcI{1~`#B25NKQ;+I&#Icwz2oiRq7s=6VT&-d+wb(|bdO)1EK{>$p2T1QUjk9E z+}Owk!>0yUU2!|(;z9R&u!$z#Hw`Y&wADu6*e5#J6>IVIGS=u?W1K0(3G_Pr z*oq9Rc%ji!@E0(`P3(yo3Z2K32&<@Lv9S}y`l)askRYR zP}p^>@J0gEQMDx2AzJK~@*~})bxhQV{KD55Wa@rkIa^JEp#P6?-IUr46#@B8)!EqI z@je1SlXltagt%Fzwk&8JOp`XP#0gBpa9KW-MpXaLV>YJm-ma zaf}6FIWbLq%C&FnRjY7vriGA%|54P1Rj0rWwV*G8%BnlHpSm0*oix=WKr&Ef^3*tZy3P9<83p2d;}32jiHV*lbx8p0x(4RfVY#-v8yK z%Lmzf_UB-VX;Knr9lgcEnZ?iF)e5ngtoII>AyI)=RA7M~R=0i75`TjN(Dqoe{9N9;SSLjW?wLUg3vT#(s zqC;|~Go6mQWJp*QgRQ!h|6{FYN@r)LA5Au4k|RPpyGeajRdasBbYk zL0+(e{-)^A^edWFELRNwv}Cr4@CNVcTY z`RdBv87xlKh+2>P?EM6A%wf6tR8oTw7{8G%+icN;FRhc_EU$i!xQia&#giG^-wWlb znTa-GYTq?-TRJXR#~{3lI+>Q3bMaL6&i|wtqN@tdb6RoR zAl=0pqY?D|X{rXJgl3F-)i2 zM|t0mC}%OiN~87*aq#4C+m(WL^B)1X2-YGqx9ZD@C$IoQ{)H8kXY}*QxQR5anD5Y7 z3B;k7w@lD^P&W$I>x5q6&Dn95C9lUIO-0x*UkGn)%q;#2h&_a`aL(5W$Mv#)rNS}G zHH0CqbiPa>(#8RUvdl^!%6z_=sV>H*{dAB3 zGB8+?WOA>63h!QkJ$-C_NbTitHVd%Gl75*`{OPw4_){NXQJ3H=8( z*x$&f$-6qmS?ri*b2qIUs~X@|K02M(z3*=H8Pxi&y5hzF{M66Ysd0b)18l1vzEuKO z{4!UNYGfN6dQk1M z&hdKm4J?QaMjy{r>}X>0W}nt_`7KLE=kdg4FRjU;+o7ZZ~2xHJc zZiF3WM8q4BC!@4so4F$ODMuDptru8H%euGKQw#*lSHLz&y+5R-R>n`|2iOR=hy0@k zv`^A&PwNYE53`ccEnVUba~5rYo=l4^48|nTYf9`N z&%uF)8C+?IPqo#%tq?srT8)!sSC)1;b3%pf9?Gf#?>t+dMFD_P3xv0L_cO~}H5cs8 z%HS}we+g7L|6z<$ICgSbSMvMW737^xQ{KV{Ol0 z*GH!setl|iR#=QR9yG+2C1Umov)#;jwG==Um9+lHr1qKQ#S>++Lq<2iG+o~PK~Yaw zLItZCB3(CRrsmJJ4f1=;u{enD=b(1;>7Y)yBa7gAwgEzlP5&$~v^XTo>bH9|ad1Y* zp^T8+{Hmnuwrp1wqD=Mpjk%@Z;?Q-=%&5Pz=dAe0egS8!vMq#++0;@4=O23J zg@td5tTw2bZmYMIkdWT<@i|?jtJhh%m6^1obpvLmG-4z2K)^ZkuXz8{^z?hPZOR9F(QKfjg!C6;W%0kkS z&&`>fGg{c2zQazfeVR60R7nd&xbtzFS+*+@-ytasoj}+2Mpjq;q)}HK!V-|cj<*z= z#^`(Xn8^L`lU8%pG}!9ZxisdLV zn#=DW;$gUO&Uqq0Dec+PN&@OL@h}^Wq;H6(crhRrllsg^g4k0A#h-;=K?x`^FoNuNZ; zH*kS%>35+r$6Q`0h`6H4H~(QSGoc2849D$N9-Y5bXTIZKN^Od)WYRZqHWRX zNxoD@Nb+l^Epl8%Cp%O1ogJP+%NzFMJ-GruUhD3JB66PYe}uhxhjO#m%M1Ein&jK2 z-v2GSWVPBKTNY2i{)~KqY2x8u>tD)o$7<)P`Nx_sdJI}aX=-+rSNE8q*sC!11?cCtsn+x-C zCjC3thr>R;W)k=szdP>tAf|sS-J4}q#{g?ycMJ^R#`JEm9}NC=BV2}#J2@iRk|Qkd zN>ZqG=ra&!yhj_k^i)A#!BvakAG8sC_(M`~4FGw%9jITHDK^1{$k22V0E;|*HVs)i@h!?rv<+MakP*Nhf zTAxu0RGCXC=-2EQb_yFlX^(_b-NQtp0#hGuqg%I(cC$_>4%;zA-5oB2-be3I9bLP& zEbT%Hs{&|AHSQ%pPl*NF-S*8O%jzV7zN;dSM$w`uj`Jugyk~*}T?nITE`ivU!w6~W zZ-wwL!bZZ6epEWc)_nhnrKw86@5-&4*0}(b%@8M?kZ|s+mkm}b+yrhpBUIMR@`dKB zE%p8s5?NMu?LzyK6}#9N!B=sHyJvq$ik_vChmMERkZ3%~I37%6 zb%~ahi!7&B1@tWv3!TNW-K&TB8vJbkw5EgqD{H)9NtUK_Mn$%NkwN#+f;+8R(K#Wr zo)hG?m;K{=rt9=r1ng@qBLL6HjfX)VL8jf|+ZV3Zcp>EmY3f>94;XW+ReNR-uOUDdmtL1cQXHO2};IsxRQwp7qq9({ZcF$!uJ1bWZu|SG9|Pn?3%NdHn~8p_Ob}IdWeG9yHZxERaRF zrof{%8H+-=sJK8>wJnU?Su+=M8_)Sp^TT7lX8cNHKUvgCj>p2>lpupF)N!(9kb#p} z%fK@*Tf6V=fl5M4^U{ukh>)!ESlmhOC z>?*j>Qxg$l9zD(LAF`kSy1B5ceW6n@e7&PTGPNj_ShrO!U!w-}{Ky*cU~9r8O=re-g4eReuf?X-62`VxISDg|L2TiyUjW=+DuZ^O@NBCZmJ?y=M3_p?z zP7=9a?oYK5wh)vkr}pdN`e|Jo!988lAIi-S6TL0NOZvh9;~;hp?0I6i*|37l`R3#Y zJ4E#xf~JYz($w={m2sc#u~P#)$)y8||Cb)ODJ()v*lI^cFymOb+DaxD#h0H-86B zU9V_8Ijl&JRlF}4%5LJTGO8+5xFuLcOuZ*h+`lj(HEI1JWJux&%uZbGuO#Y~O9YPp zl_qD(r|ACcV=_~!SOQ&RI{2w_W3NP+YFQG`{VP`es_QPcqQ2nu9z(DSwCh{C-AqDN zX90fwcT47YeVVBl{b5h)`Q+0ZW+sO;)alF)vj^XLNxbh}yQV80+;nDIdJtkR;kdl~TH<}We} zpg===`BJ^RleGR={%oJ{Tz~c8zPRgzNC$Oyfn}K>198iPqH$qNNVT5GcnEph3YsvQ z@KnWOXoZTzOOU|5QJoW*P?{Yez*}PQN(|W^OJ6VnKztlE4n1oX(r{rY1&Z1Ka9P8A zsvHLFVf)3!^O9`lbYun$MBoG?yv)anUE+yIw%SKSC-dc_q;7v!cmd07h);1*drYD$ zd+hLbh`w0e5L!z(0JCBAh!se}%P|-guGvwWyUOVkNKrJLd8ki0m71B*d*;!b!ojEA zOccFpvOOZyaY6B8Y6s%fvK8YI&BDfnVTVxAzS|#C^FJbeTtFGm$u$=OcZW($mon5zM{X` zXPa6Qa%p`{HNydbIoD0vt4d2QQL=ntb)%R$wESvPOC{kozjcV;-eQL2C+S)gC{orA z<=Kiqc^wg#l%*rQzwon)o2L%_)-hK6WGGc6-XTx>q3%zRjtcaQS9D0KH}+ z1ET<~r0M8!p`})04ZWso(_9FGC8^Gs)UHP;~5dw(UEE~RiS zMx^vmb5e5tm7Ys^Fk@w0$))u*y>8lC@bedYN!H&@mR~_(#V14KWNxn(S~Q7`KA8La zxJ}5zl$u+wC?ysYJ+35vD&4-iiR)o?^dnh)Fp92BxM_|@rv&aWSH_lJ^osOTYW}wF z+v92AmdE%geNounDN8%ukFk;)eno-tHPsoYsUaxRk@(53UqR3P0ByRol|(6J(2gKFGZ{vVab~hZRD4Q`>uS%l*ZcY&^3_;ZKNyOqIFzLz9>9?FjS`r50)_ z>z&@k-Z=V9Eajd+QByA9!#b-?C8P%8zztZgaqozDBLX5&AQ-1Sne)H5c0Hq9Sf7kF z-huk`pilN+uJ7YlM0^px;#j}%~~7Og1-0H zb@l)+m$6j~A8?r;o?VIp&YJH+2kz)4La6D^s{P-##HQl`J+B%kVI&vcr{Dh0`P{qp zDp{)1)_odFI4+|G9}AkyYOfHArr({@sf{IwwE+En&W}U5;AtD}b2|xL{V5rk`KagF zp`1#Zs8=i{W}y5!i2MVbNGoTl&QLS-3}?4l|6utl%I< zdYc<)MR+bUbp7g~$gd(phanG=Rk2WYPnz>MReT!9p!QUFULf<=&eC7;BE_{GTTPxG z26S|4q-!O{>wTpC#o!{#c|t@j~h`)1TRY$xPD5-kF?QQaj9TIx8_o z(t)2R&S0vuV2Pi>=GeMWn+EDym3?ied)v~PW8DBx@83(M+*vLBJuBpyRH5PL^HIqY zcnDY6NZkh`u+Pn(*FJsOBs{svz>j~ zxT-5f*=IZDxvS*eO|X~wXFnmJ**L^DE6VYvMm8%BTI>A5o4cE1<-?0dxchW-`h;c) zE>x7Nnk8<*GXJ;z`5yJCVMETnAW};7WRh$Xp@OdC9lk_ycQRD3$`b9=9oo%56=}bi z;pv7H=>_f_v+rs-&+M|h6XpT9&jb2{(bhA(IcP;2lztvkdrkf8WVeK+e z#y3omQ`ZBX8RU>Gz3;f0F|?Sr+}m@f;>Kuvi{l*u{zQB_vO@T-I4wQ>bairex~#Pn zKZIIp*~1vzhR%@5>if5S%C~k|mhJD8R`8%dcyk?u9FVD-uk1Ko8dpd&JsjAV4`_Q? z!~4s}xt?0)VSS*;ei@_5$3)Bg(ot=}taL^e4rfJDmUDO=Wi<}8nW{ZlO_0fu;A5bj zeVfk6@AcqZCk}ABOG8P!koB0bCJ*l2(O(wHeol5C7!cK6n#{Px6|kz|iy zTn$(-SHEA}0u3F%N;1ix8+c-Ov`BrN7SlD2X0`Cp@F1d%Nd2_Hxk*vh(cG zkSE8WZYKh=+#%rSsY5$-uvuS2pul1eM@F<1Yy0}2e-J$J8Fh9?yiB|M3Tu5ej1G=7 zdYmAoT%i<+8AUA9HidGf)@xP0s}6`Vaf8jamp}fYp9)EMFo}tP#yUg3<@yA?NqTD^ zV;LX2-+TDlzZzswApt0(CwcKNE8VZ)|rOjNxdy{@*lAM z{J~0PHknNWgjHntRBijmK2BTI3v|1r2v$LRZ+HRWc70EsEG?HpX~P*pm*(U+=?Fi- z9{RI@<)HlpbLw0z-nQgCMi(GtC!JQx%CRiloP@|xE^%jbN{@0sK3~5UT$@lL8Bu^r z(0gpC(2tyCRZWQn3;fXWM;sBkD_-2w*-3B!jMPQC$c2EgOf`oYP366(4Sr1>1SCBo z_Z1ovu@VDr5tA&0vjz5G;p!@lmNyvdop|y@jdt57(Qha}HEGFtwr!L)^&*2T9EoU>KYW-w`=e-Vlm%$Z_GI> zXyPpev?&Ac^V};hZELS{yJyEIU@XypU%+`1ZUkx(MwCB}WztI?;QEBGu9Z&QnfM(pkN4N#Ey3L~swwhKUn$6>J1#x~ zv9B@A*bk<F+cYQaKvXH?*?tT#%SV^2c#Oaiv16)4q!3Pk3W$RJFf>HSSFEcs7 zPb-(;KHX72j^L?>bL8Fsh^mEZS8-vzahYw6%9R6- za~b82N8SriJS8Gq8}u-Wbs+C8JFEZAivQk&ZdIvlW<|Dtr*{YU2muE7k*l|i4|!1J zSKA~uihI`x-G{1Gi>-}J zZq1BTvFvZcAK%vAj`yLej>x|^hs?qUyHrOfzi4Mw zK+u_1zj!x&=>WhyMRJ^Frrgw5^u6hJPqS$?H_P671y@q-ju z96ICvNZXl9#RzlNt+f{Ffe)Z0F$t;PW<%wk_np$T>}5haI!~{(<9f+gavDlEHtDc2 zM%9n+Z16+B``z=)?VGK76eer6RQYZ+k>2f|tx@*TtlzJ%|>05J7qbzP!me@a~t2Le=0&{5*Y5>4u zW-aO?5V5#I{k;KM)`LE2=X0#`a!dXnqcf|2LkGPgU#?i-uTZl7XFJ}YmfI#`&jDbLB5smP{ z9nhk(@;gBiQT*j#LbB+r1)q_P2A`2D7Ylp)ZAR-a=9IO zCevZNb%W~Se|)OUrNu0G;(5MZ?9Bh{y!WbfnOlkt`EaZ0SMD>@6wA32{gg(~)v=ep zT8vYB#a$5Zh#<$s8vMeBzCS?gcLa$u#ZvVswEO02a96Dn@l=SCP2jbqm}{JW^1~YH z@59}=vY5bRnS0VhdivS**RMYEkVm;M4buble_s1@DZ?hU?rXM7V)P?Q%nnkXjCzYP zPVPbW8c(cVB*&XKl9{sM8JRk<1*h>|c`7&t$b%+FpO$Y;EGb&~HqOH{-b#t7ser?$X^kz{2JFD8J!lSxJ!sc>#WA3~I1`5zDjQ`Qp{=?(0 zj1l<5I^lTITpO5FFYp3D%x5oh`vgWz2HjCeMj@S|L+!Wi){7B6%72xNSfYFJw!Mh? z77a_}>w9ar;L?q+MZ_~FQou>=^?AI~V*^y33g1yvD8jJNdIB~qS7h2m585zdx(&eQHEfH9`mpqv0`(chfU+PuJOO zRKY9RjOW`iD3!7EG`V&%lY+ zOn@V;G)3Jy9^S|SF0X96&&@G&6wg-U9ZwO$;1h|L`vsw8@jaS9PUS`IMB6YICXcg1_5rS2)RknpDsq4boThERJt%^dSejL>vq zEd^pf!?BHcFLUBhAKtX`8z+4GPCzYGp|d5YLQkia%6F=K_ilO&McAIWXDr?FprMTO9ZTztTommNU)aIyQTYh%IV z4XUIgLzGq*;oua0ynOMsXXr@2r;-T6!Q?qYB>RSI zsrc0`P+u3aJU<_3Oe#ZD&5^aJKTpz>Ewbs!vRB-rfWV>k)wrC$G9Itp>*UQ>$Pld~ z<_sv6*|Bs2^REDt9xZPqRb$a_j$X_ zhkvO~@r;$_pMHSi(HeM5S_^AzsvoH?xOJGu^1kG<|5@rTSOLtRZ&FYgAb)m$lbT zsJ2g8XY|%rkJvUW%X4NgqwG^@ez2wF={#S*)TJh}g%#|K4L=F34OQeUfcO`&l$y zl;!*^2w8QaYcUg{j$LscinWdT1E)WZr8Ob9nM3yzZChX58I+s-Sv>9<2BsI&nwM7t zYG426EykRtu%~gu2Www)|6L2eAYKK|XV@XRgm)#JSLo1j=(N*`Rqy(j3v*4G+cmDKBEP`& z#wKaxLh{28i!=6o6*%da(-{_Lc(apP6@GFaK|SiFH!CY%<_CLi1GQlz1jQkCU86yq zY*nu?_JGlR!kx5+yzz{zjtYiaGf1OwkoahZfso5x?UtX(l9`p_Z`r#(_ek(A#5Sbf`#k%2yveZU{*hHi)RlQVVv_!01-mDA6*0Ay7G(7D zdQ3Yx;B$Otmd0=9y-%K9?;|_ZTggNXoiy98PS0%1aURmihf!4b^jajhsz+UQygZFP z{w#he0rcbIXD^_Jp%dT*b8mYBL#}why>)MQbZML*_O}w3(So!jR@9XSZvbxG<~3-I zUJh4bc0z6KE_1}iIEMk8b$yx{D4PuErap3>7?&HN6q|N8{v&zKg){M^V7$h}=luma z%^fmRRL(gK4pUW)fe>a{XlfAw)Z4HV}>s=IY-Y_R3}d5V`psmOSF*@5!@*>6NL;B{QG`)GKHt1t(h4?yLi2Oi@uBWowulbX!oj+|wKPS7o3Y3+YgjJeo zu9Xjt|2&V)ODndm%~@0XV+Yta-`$IjELa5yd}q~K72}R$}3qI=Eiu@jbI;YX?k7ajWDR3)9>hHIsb% zOiAfmrm+IKr(u;t)1(NE^-YEo{mTC%>#L&T43@2NLI@C?;7)?OI|L2x8Qg8~;1b*+ zxVyW%ySp>EyEE7TmzVpWb^iNOk6*8^x>t2o_1?Q8|Ajvm+?3D~$}!LOnEJadfMz4E zqqeUYgU(I4vd7ToHFyN~y#&Su=~Hn??p9hJjMEF{vcGMDv%?Pt`Gg*61PLUOK2tQg zxZyUYb8j11repe#ReYaib1XE(i2b&S(~>pfBSLoi2fB09P5MT>Rk--N-^lZ-0z>6V zF-6{uU&L!o^Pe{T=^^xV6-K~nZqn=1_V%Ug0nOpfKhHbOV-s9ovmxe+Fg@K;Y<)A8 z_8ry2aa(b$;CrF*ypY11P8nrZ85V+!)6#Q>FzvUIf;y53vT%pmi^(fbu1{Q*{Oj~w z30dniI++1L%TlAso0wjrrRcEx5hNEl^NTevM=={nGVJkTD10)*@&3tIv!R*VfXl{t zZQPjgd`-CTZ&$eyXt?uh! z#`Ds>uVy6Oy2p))x6&>-J}Q{-ogep+X(I2SZ&hg{@DOW#8E1mgdJ+E>3Nex3n`xdT zv3MG&v7;5O{LEgd4uv6DpuLL5u76wu!zPC6W&GOcNzMAIETvOsaJ-2&gU#fY2%95h z!c)gft?l2w4Ne*K$m2xf0Ic`hhVinrC0fFO{F83;zpigX4 zmF5=U={Yon!4`CGmF@t05gGvLZ#eZCxqfZl~yqp-k>#lJWahhcC{Nojb-zwdL z&pHqnz4?Ikx#Muqj%iY9kmntJvA7y&t|Zys|RlbiHA>m zdMNh6z2|?m02CP0N<-Wr`@Nanqmy&}5&2!#28*|?Z#&C{oZnuHpXj0;h9ORlFtfke zrG8YMAtmjM(!^5DK21Hz`;=_Q0Nlz~p7R`&w7YKq1*OqxrPuaPv=`mEbN6!eK1-lLw%2%kLSMG2&|3*e@@ObMN|ep) zV-dI;OrLisa7NpAfBa_m=r!dS%9ghbxiiGLh%Dff|1BEfNCUYUZ%|;QQ-~cZOlr5j z-lq)j_h#Ns=aq z_~&X56uEsBywqKhy+}^mS?NThlXWH|_=6~f0qMUo*0Ra};vV=->S66WyCxEWr<^|# zMO<6*jDU}bLlT&}HP#OaIwA9?@*4^0ltwgT;GJ5^re(!BKFGwCXrX zbW+&e;wVj6u8eooJ_ClAqkx3nf!VH%Xie+JkfW%ln>H|xaekRq@47T%&;|JR*v>XY z>tgGDdUuiia;f%*uYlL7CUemdM1w#IvctZdzogST9_PX+dB;;+)2!d9RDQs&K zeQsTyz-Ua$Z~ePs5pf*!v`2GprEFJKRPLJKd|2Yv!H98@IL0V>b+%%w93OxO1XlK7 znMR|-yV^4tW1Z8%9QCk_MCo}LtFeXZd6!$SJi3>j({-$(Cp98D%uN~m9Rk3W)S~A^ zB5gjOARw|?Sk(zVGQP?TN@Y=#G-zcCG^0jo;0tN4gXB_7xbi9j`mRv2@c<{RsjXNn8xDZ%<2dkiu-z z*b-3U#b-r6cawOK@~&*xAVt+Fpo0*WC@ep)AMfbfTGWG1t=xw+(O4JI#|G(5JD+l`@wz z+t*?YL_nYeb~Wja?aGb=`FiHs6kkPe#ef91qi!C%?g1!+2ocatPMnP`SZxy*YkC zW$HQxYd`+En`@j*s<0c=0i0LWkexl~;g4yt%;0p-IIKOJc5V#}N-kedaiOhyWA4PY z1U7GAvJ_8V<09^U|G`O)qu{p614O5-7Ml1|>hbQy)A<)=%JYTpiVCLe9MO^ydfEAY zt$A6n?a-XtW?QweOJwo9MTUNo|pg&jz!49NJs{)fu5pf^%>do z5$}On*SFncrW_|SOQrZqzHqFBCt?lM@VGyJ{*Jh=!*8G&32AZ-eHm63PzF!$R=n3r zf&?F9HZ}$me^%Uh3KQ>ePnIPR8fDVUF%vQIa&|WAxEiND?_0^m`I!DaJuAeoul-J3~Rq3iLDJ~GwJS}u~rQujz+A^*b5{+OTEf`bn?gw(+;jlp{3(q!@t zQe(br*1+Ivc);AU2Pkgalm;Vi=l_Mzm_Rf8CE}KqV259J={_rtMl1Vy}yOp7F${D2D!CbOKq-2p0klJ}dg_d}mVxql0}3&BOIUk?nl z!1d=g!WEpkIPNm0^{bYeD*)v+c>mS_U_+ZbaI{LEjgel=dn6J1l>2yb%6e%dlRm?q zmsZeBqVJISSUK9~kv55nP{jl*p#x$%7Bw=Ol6tlE6F>2fE9Sc0NdN%*{HkGe--_hX zdHeawIi6G+ef^}F?X9GyD^996I%##)6b*kr`2imdGKIzH7WWN_qmG5A@kxp&vu^#( zjbhR53iq*>HC2$VSER%t6rjX-#@DxSg7sT&@7g2Ao<)%7WN-Yg!ZC{-1K6;*XjYnF zD_bh9jcs*_IU?VP{VOpsC;>%~NtEWO?j?VX*7;5ta~kYCRAFQGc35o8)MP8f1i-R(90_ zZpiUfDc8-&Sq$28Tc(Ve7|R$4{k64nb7Q}Dtg{i9K8^x!TxaEQ+-wAv&qPaTI5m5$ zL@SX8$FW737H}6+pdAEzA%76_rml>tR#d4#3U+@M`ZBOCsd`qw?4SX~W}i**&H4=W zbSC05Y%j6Tmb1(~io=8!x<((2eT;008 z`vEFF<92_4>H8o-leX_&N;`(E0_6TSUUmlh?ok!0o#Gfmp012ryH zb`_WZ-e+r2iGq8Gi`d*y2_;-tBBqj~jO~F-p$j}_ADKOF@PoC!XRbD+5k-T9;9+=Q z2&Jy%$KvX;8)x+@hjGM$4FZVlzdLiqW{&o$+Fu}}c{}ro^$ei~ zWt+Z#G9%bb`_ilUx=QR$-+(Ga6lHpPeOn{VfFD1#Qhk$?gkiViaVm6lRA9D$RdFk+ zb^+|Er4Fwl1&JdukQ^JjKxb1O6Rt|Y`6*rOT5FbtXAMMFa5^1kJTbc;E%_v2);Y!B z$q}L}q!TfTGGgrCLhy7@nq1Ya>baoLwZ+qncs@(s>EE`zdy_f8D6KkuNUJc$Cu125 zaTWT*(JMwW%(>t$Fcuy%`*|=GksDo)oMBEb)O6j(w;(<}q2jnZ=cw2>>MF}4z_}K_ zuXGKPv?mFTgvpR-lPF$vgwH1jitwp1HCM6R-jIEN{^c~sAryly&+9%?Goq)So$H&B zaJxx;M$~nWc#mZhSCJbtZteY~?#AV6ddWdhv8(fU=Y^*X@h0&$d&c0= z;SPQ#Bps!1m*4l!_)7}QE&Tn=>W_n>Qbbs$Uuq;8e&JcIcq8Cj5#1k~x`%AU7$^G( zDaR}1V*5w{;n7fV+&SA-T)_@6+sQ(nhe!inll{ZC4ssTl_f=+(2=Vt*`K7K+$kKi` zO9;~`WBAOzGO%PlSK5Phf6SA38~M^f>O!UN^*9chE)-pasNGODYx<0wKsR!4NUX9Y zix#QEflCJ^x$4D_?y#hgD5CV6LMoiW6>ZDy8i zS-P;{ZTjlHi_XkMbd>lZ^aWH}efksr)mnTWeB!ThaeMuvbvYPzpMdC|RKD?M1!3wr z!>WY2lE2vOb~0fB?P169=E<04pTh{l`gXFtrp6kaPn%QHMl3{XJ4nLbq;(VT{4^)#O%zN$`_BFn`i=5i|JqI;u4-Y2)-<9WG)3~zP&V? zoqO&>LbVC=@qO;OJWuMoWhH*`Ir9bTF1D=XDSVln%Up@$h%lC{V{vkq;&H>_mKrFJ za?+!7@5}umFy}k%y47$qVUjLcM03C}8C%drZ@VA7cE+LGIzvNi|9p6T)103SI|zIE zqW8x2Zhxowol4bjfTI}Offhc5$KaqCc2F{{X14L~Lq8H2CE!}q7f}1cBpgSOg~W`! zOQYhpDbQ4f-+|2nQe7KD!J_SJ=8MVEq6r+JeTeOFD2HJ^`zmzL<_(^S3=tc)l9UW> z{R|d}3%rdetn;DEF^_3n4{i59T(*HV;%ujql;M2(ensuV6_bsJ>h7_Gks75YY1A{O z!+}?IbB3wK{&20*Htsz`^$_Th4@oi7d-HjT{$-5vQ2gmtdWcBCQkT0dT@Un8RFO?| zQDSxM?mXiZ%uAgmetE$klY=p#+<3*69ZU7?EfZs~3U2TRtYY<6tPvDn45|MBPZnO; zk`qoKg!sB!UsH}f%+%PvopaOATmKCJCp63Tg8RDKO&1X`37J2MfG0W{I`*k}Nb7W< zL2q+E5o}Z|PzOTuD*E=CD8@%VmGg~ccSIH=WimvcrPp=hTsmmkj32_Khr00D4HEN- zeB!SD~v+)Zw5Gi-&6};{ozaYJiuIzT9$sfS_Z99sNmr(z-RNX=UL^uotf30 zOcl!Pnl9$QM;ku;R7LF$r9)YoXf*1G{1CYs7u--fQ%r|DPwdxw_0+b!Y1xXr-Jc$u z3_b%UVOme3vm>RKKSF0N*qiq&BCd}8+l=1$)tdP5BF+R}w!bwlGal`$I7?H~9=wmr znI+1iu4I4XB zGD*=0V~T#DBEi$e@UXo*7YTo|dp;HT+1rj^w6ksLBoCyM=E?sq=*B}Z`r|E)pG9Vu zS|VV%TRBT^@RV;zy<$p`eQ;nVq8ZKzt>ymD51{$EtUIqW?@q(3g<1OUkb?{tU>NZkX zsucxc4d6z4v|W((opiWK!=B-Qsp;3zX>CHRFZIQ04JSzOT_Tny<&3LM#hslBKUS`jyVUk?R%!1q_1Gpb@WybifxYC<4%O#^S%0NQx) zGGDIuxMg5uFn$p839hej*~MYAD>dU1QvwI&#^Qa^O`#kwX?3sElf`zd-zZCDWzOxf z=A{?SBQ`bbQ32?5A>xuayGh)&{G+Ia>oViw)f&1Sc*C?G-r(G6+5|*KAh?_imJe*B zFJ^Wz4|l!nk7*8H_$;1$$b|ftr4pZFN9*mUS7P2TZ=lA>QIEvM+pfkLj>O~4WqooZ zW3VA!6y?=7Z-o|!=Kk*6SQh@pNPs!BRH^Zg&a3DaURKXm)H{yQC6sA~=4s4G`!=0P zilLWDcs>RA{uX0}DRFXykS8Z^h37#(b9Ogc!`mxxI6+_7{j;un=X=hrV@nPE?%s%F zqt|)5*@+26*W22Fr(*?Sb+95(9hF-`L)Kl;^l{YS0mxI2gOM)zB=+SvcuFJpz^>UN z{JryL0MWoi5afxMc6ILJ6DxxFCIDZ+z-sHg8b_4?)DI)naTB zvi^wHZ^_!ZR=m@JhA5NMQ!@(!ao!(w*94Al1$11+{%|sD@z?3{Th2gw?HtoRaW_9S z)V%Vx&4XCG&Jee5=?KF)0MEDn2ZL7ogm{evT)ec-1N*q|>w1_=O~`(LuXewGgh(i` znyfaWQvMEpvBj2#cR!BzYx)pmAt6xoSwWk6-8syHc__JYv`;cQ@`~KO;6Cs~9hfqJ zH`8N?)$Zk#EJ1@B$mYj$-ujRR6sYd|b}{nB7GXRJYmKsh>%d?DMmaRGWGkT4f5-e7 zCM%K6%|V{zJ2#XKF17Ed2RgUMoG=dn^;m)%Q(Cq;$0{$bW^=_ik@s#vE|bJi zNVDytiHH{o+hO@)&L!o<|I<$+1C``uJ#^t4A8J2>{*H(zbNeqxvWJ7qnJa)AMYm{n zDrZJ#QmdA<^FkUam8pL@a#K1FDlFaaydfDuD?P-rs7-vu0XNvFH^NSx2SI-BVugmU zCQV_yb+G;t9k&SZt*gboVd0^kG$wXpj936)Ir>F2h$6PItviiJzufx zttE4FrUaRn6MwxK2Ie*(f3==2BR8li&CZ(QptQ(a>R#~`o^K|M4R;vg6eZCR@4IUl ztX=*VgSX|yKx50J12FnZ6wPHR#>9j=bc&bj@6O2=+BuK~<@r)+9lzJ%5TBzkZZ>9x zjb{C%`9iHnrs*_&J01e+^5Ze$=vg9=^XK@yJIM)rO))-$8DC%{BHG+t9>Jkl4%y27 zHqgY8E%cA3a!MzH)29o#T527QTE(gb!?y=JH~-lRx_W3Rj1-ryF|a5rOhLvyZFd3SjElzBU|?H)lvN1nVtJ0PQ5 zLJgO(*s#2w=D0YI$m}R?7SsIA~)R-W*=;fH^ev z%UsYXFVFeyV|uQ~lG(--6a^ap(2S{#SVl}e$hz6WW!G|(HcqUT15w>hVXC1Hc(LOI)+xLGUSiRer!UJ+zgG{{R+k{dNNDG=06BIl%X{UnUwFd8Md``wySbio zz=TyNxyStt$hEKQK2p;jjdapA0=74q52Qbr-NYP~vl02B)Se4B|%+0R&rVIQP`11M~uva`3R|Yjx9n0Bt-qVXJyy z49QJR3l@bJ2?4{Ri5?;GId4L#^Wd8+b%V+zb2mCDm!8kIZ~t5eB-{5g-PpYz#47BBHNQ}_ z-Rix#K7Ov^)myN{?aFk(@ooNU`Oo(JIBCv*bBLm0S0?hut%atxkaBaK{?Hr|!QgA* zuL6N>uC^(HJ_!wQj>|@}7ZLx!-0kQR19<(ZU$fE4LMimMO++yR$VK<*jNkCW#Kh=u zEMUWM!z)3Bk?`V_ZLPIR;Q}J2?j74V!it+573H$NL%2MJtEt%j-iaAB`1R`%J{Lti zmr&Hjw=!^mG?4GGprHEK(gF0$Wtq#!~R%SmC3w zAvG4Q;1;q2Ju);Hh?DRd(q?Xd-O0hm&Me8<^6Vq?!WR8Ba6qV?HgyzjO2OH7TX$+5 z&eK(_0@%wr?38(+&s1dpeF$x&u5p)kdxR!d;?~H!8E5t-=9IH$8j;HxrliWC*jqq? zak8+qkFZ2FD!}Kl=2lmxtExQ>^Mjf}1;xN{Krz9Y&k7GkDWc4cBK2JkiQ56jcE|AY zfuxc5NRL`6{jOr;&($sO`sRCu&(+25<-6FW_qpC1#ijR@&@1Am*W*Dqg*1SG6xyt*jY*>fD9i2=@)l@R;5 zaB8T^AG`_x#SOT=gc13jjA1!c-iJ-1d}=m1_WG2q`PKgZ5pSO~66;y4_vi_vwez>9 zXq)Ccg|G?qRLtaDAdK0fuTS0ASQ~W%pYXhff+6^$qhQJ1YwJ=o(YsVqDmTphqgml! z92%K-OG9_L#SB8mBT5=w)J{4KkCCu(=Sjcfp4!q}z|q{Rh2C5-qmr3nYkL#g7NAcy zH|pq_w<4VI=)76ZJfh69CD^fv!rh?y)wNB|ZQ)H-TNT9-hl?4IK# z3`YC$x0%ozi{EWNkr}qypK{pAqHh|pOUuqPolguYzO`YdE0)@bTJ6023Q8lr^b07r zURh(7V;vrdMxy8cHPl7u8BRA>YfG?AA>5IAZB*aTMPu79MdVSd@4!TNfocDHbbsL8 zfQhWPP*5o?ovRDT>4gjTRhcYEruxdmV_<|<^|}RFh-}CYSuE?X@%{7HO&ZXg#EqT1 zo^b4#F|OW`S@%!Ar{Y8vQVf0;g>^)}GBUyU-kX|hXPD^3h9D?fAH0zgPEk{<}Ltfrf{>G0in;Nnh2 zBd$;R(9WNK+Gn|wG$M{0ei8by?b_y+3)vg9CVmx3b$eC})UftmsAQ`$ALS?=9>v8e zp|>-1vOt)&Qo<%i?ge}=(ZO4$?)3Og{o4gH7A6(fL!$DmAL8BR%aZW8>$N(wjv^+L zfGCn|YY?dLMYVxNi~e}iw(6e}rix9^V5d+3d?> zbzn_uo$X;Q_^{|PI6wMCUifO1;)#833Egtr-^s+hd0*e_GW3c0z-s7J0os1MYSS}9 zK^b@^lFTqDe25GhOgXvyUXE2=udcCj$Uj2Edato)rSmqPsU`oe^Lgcqh=d_MA&aE&+=hl2i3uhsAWE-w);BklWt z9qrkmhaK&>g|{{_vk@-n=?M}%@N}HDbvig9?VsG$U=njtmj`ffM1M=Vtm;HAyWPGz z^d}jc2>*Lq9Q$Uub}^3F$Mgo)lN87^U-f~fZE1vQ3F5W5_YfC4=AA@|2qf!PNhBRi zgG;u1J+OUSY}>qNf}CEyt@zw;YO`w7L>&F!umSF-PN!y&lX+WuhX{E*_&_G!ch)ao zwp}h_+%N-w+mP3%RL6P#Nh3^d{_VC>zmsxBm@a277seZ%Mwx8g;jL(cS!o$H1vl>2 zMT6)5zR2YBbn)=|T-Eh*`1bf=8-yTC9WQSWZyTG9UYl^9x7}Q5|1psFL*MtqcSzUf ztF6z2kNbnmTiH8!ee;#+J=mpd46~LY3gB8BVx6h4)Thxr&H@INAAA$3hBL@94WIm= z^Xjt{H75-tKYDCmv=RLjRkum8_06t{mz zW;b80eD2qyeJ(FMUOp~^>EqU0*Tdb{>I?ZLFZOMgjK^uB*caS&7ne$v4`O7BV>7JD zN%iOn@BQTk$KHu^QN72icNv4$#XjU<%IEq54Km_$x=!-M=5qp)!|{Ip??r`tiCr0@ zG?_mX-Cl*f9-7|bx~?x=zzai{FTdl840xX|OHhTfwni8fRL?9D<=->u#dbooymXox zpkxU%2iJH-B;UaC8jk*LN^_LC=Vevv$v)Nx(;Myi)LkM@3e(P8Kk&y`N3P;=$~!R{ zHl0gmV6~w;8T8C*ruhw~G>gzHmsB#%6$fAC51ndde@hO&`Npp}WS2j)(;FFiKGRQcS%20XrXu1mYNmqr|WD(lQdV`Pa(J*oovJO@k!OwqE>tn7PW$ z>wF@P+sV@$rI()?vmA}+=*Ym4V)(NC@hNWVcu77u5Fdn-o_lT9Kym#d@QwSm5wES> z*K;+l8z*BD$F5Nd6NTVa3oCcdi`Jdarq24V2A)2g!}xqqBd%Bh{kQiufhx_OeZ=KZ zOsA!=z%fQnS1|)+AZPP}%7KS{S(O)*``*C=WR-;S?*D|N=pNXvcRh%hSI2`SS79o@ zQ({+~2WBxf!urUHq3nCi#EMrO^1D~Abl`1cX!LPFVEjuo8&S(?U8o;s$L5{gNtLz0 z(2fifX0^}3()-b?`IZm@L08Ftx%$KD=N{d;gIzZ?Z;x-+6Bc94= zkfJ{gj-PVvF$1(~K3^MY`ou)MX`m}9+Gy>3JQkL}&H+NojVNzWF5kyC+@O~2)ehg! zKuul?9-9gDfJAx?Z4-aHJZ@+VzqqfYg$QC&Qlg^x2ybN27^IOHq{5=2=FonyaA~G? zF?)<7i6&*5wdETxjZH7_-iMu96^kI3hS+k)f(O%sNucA#1n*pr4jC76R;rHzrQ5Z7cf8C+6!j-M74ZP!ff8nTI+X+Dg~B!Ut~a!qDfOh+CN*Bo9}rpc>kTB0G&(&|n5X*L_VG1gDN@R>7@v^RNs-3W z0Zf5m+7|3XZ3$tRNU87lQD}m8qVS~9*IUiqD~RU~8!5;c7>$3`u2e`77xD!5MI5Rj z+^*0WD2d%^o;p5fu z_F|9dWU2}kAupb0hJPMNx~033HLRDX6p5y6rSWClN={W&639&Z6E_&~wpb3*M@*ZLh)y$gG*w87KCbDEzRWx2jAFu+B=cocfRX>ljL8Qj z^Sy^9=td?G?>E68e`)01F%{M%WJN6FP8eYW+NJ)Caf?5w$_P+{GHiInySf1*_7*%f z8>)C)lqSe@-0_R54;GU`x85<$J8U{Iz*>H*gcZ-Gxs?>gY_irjMQfB8(!3Nlc^EYc ztAKB$;?=J3pZ=oEre7MvQWI)+KfXYTBNF=BAy7BCSGSygg;)C$s32cspoJcd9XlVP zAzPN*!xoZ`Zj)X9nNO=HOf~9fH}>86qnLQ`^X~2<%V>}ZDQW~DtvDiSpE4iCObw?% zv4t5Gho4wc<1_g%_GoO<^4Akr;E;@F%fHx#&mKF>t1r@JBql&tZroukTa}+N1Zwj_ z>7VkIuZLOCBR<1)7s#wdge!e2mrBlev=kqJ_)!vK-|SQU8MjoPT%B$o#jr%Ivdcfg zXA=Il6fo^Bt(h;}{Lj+L((5!L9!xt*2bo)*KQbXTcCT~gSpeN4M^v#X!#s_mbJjS= zN0O)&oZ8lz5qpet(mgs2)z1#Da4@y3SvnP+Hb^nC@_Wkb^0pi0Rs60i3y1#ID6KN2 z87M^3%Dpb84!DK(I68b-1xs{{?-#Aif7`upXRHYlI6W(pRR>fW#>)}M)uAXsMP;PfWFv>#*6@RMgQY!#IZR~v?F^A$#wBBNo*%mr}Zt%2YnuADHVu7hxK1& zJ&`tlODs0$lvAzie=@n{L`pD#s^$&pE}v_FjVaE3_sIO*CPOCzbXuQ>ewY^{zS)e) z8nC=3_vRXTz^-rBxQ7a86*pPo{315Tq-ox`u9fTfxq0BLe zwIofg1IYffUZk}FT}$L$Ic70eeZ_r=QBTY=T-|yOphR&o$zmZ`~TmQ|6 z-069*bM9`sqz34lW z0QVWZ;QN60o#$4DTCJ@3tYy9Jk`l%1SMx^zwG*bL5^Xjxd_ z%k&9|^(cBxQac`7k;|1IUeC-lRt3hmKpT0tK!-oEunaDn5)ZF~DgU}tzC$0VY6sRR zUz>$M!Qtnrr+noLLWi2kv7z<-wxn;-Y4)a}YZZ6!N5JPhqAN5$&(3hBbn1~s8c(a5 zI_o(;Nh+W8R2kbfSCrL-77RdL$g-@7sKFmQ@4WZhNLcG3zE0MkZbr2bId3mpuo|6C{ae48j@W{UOs^e#5GB>mq4=_70~I%erB^Q1P}0=|)KOiUbGzPtfQk4Q)0+v6eag6=~KIPkfiHACdr>IBA zKMLmZOLl|qxcCUvdAD}skNbn{3&UEp2ac)#NK2XDamP=cVTq|4ZG0X2< z6r!k5w19i@YXl(7kwFCA9^z?_N*)<$#zpxhKWz8g48zH){bzOV_DGSf`Ww4LO&T)a z_&DS3bsAAbrocbc+oa6o>HTM|*TCncv$d9}1yLi=orgd(Mke({nf@h`aano>|4f>Y9# znXK{Wkxm~m&ttOT=ioOA=z6V(jhcB=#^2U;5@yAbFEj<{ai>6u0esLL6ol5ruF>OG zrO{%9jhx1*Yw=g@SXJxtVEpYeGpGxgvHm`7X?2t5!1t0nW__V5Y!Y6f>yUI_k!oG= zlG%_E{72|_q)zjZOd98Jmc;nak`K!iV;4>5-jmkP?XqVOp14@J6$YQQiRBwOehbWZ&nj61JU78t$iie{3i}N}D)0gW`c$*&n#{4h(F|5 z*QNo8(=rXx*a*vtC^XJTWXe)osxeTG7jxv=QlLcvD+Y3%+LWd$qw!DTJ9sg(XP~83 ztrq39nk&|{7$Q@^x}LeAn-+JW`mj7P$f0Tiy@$nC6Di8*)n!ALiOU`5>WmwygwJGw z%5m_IqV>J4K5&Ax#J=%yzn1;NZy5jV$(kL-gOhu^mxak#Ogh!XtDlpSSrI8dq(W+p z^VDtVLzhi^ipB;>qugBf8-_X)7CFf&S_h==ORa-=E;l_XNxtu_azKfLm%_-C&+6M1JrUqYS4 zVYHxKV6jf5??U+M_b)A?e3sF8t`QlWIU4%Bp1v>(_k_=P$m$%7pJ$O$EGTUZb~B1A zcDN0~WsFl|*TUQVc!h%t8fD2$JhPvJ@MT_~;J>cp1qIWN1c!=PCS$at<)fh)`yF8P zQ91rl*6@z8jtfOyr@hL8)P!8l0(cidr$C7P+Y{Z#=|gF)!q4#l&9O}Twdk;MnX%ZL z9K4rw{PGu%@Sm^>2qw|v_N~R*x5}$zU z=8<%Dy~$qtp8F$lp23hx%(K`ykatY(H?9IK>D{@0;W&1KMWegg3}X!(X)lnzZDJRt z9SX*VTb?DZF3d)7I%@vQ6fDt;(C-+Ig~6RbX=glS`h&joYzLMjX*-jhHa3u(B5X0#)EA{>xo9#jm!GyZ$I~? z6=wN@uz3@AcrV;sgXM@ftqHjNW30|{={OS2h?{62&GV+=S3E8Unjogr87eDB=hvOR zoq2U`>xXwu96F7T;lfC%(W!DE78@P0=WrvTlx2p}+`;Mq^5Jh2koS-13y$LQqQtlU z#f5QI59EscIC8VK@h9gQw?8)MAkw9BJ^tni>PU+kvp*A#jM%>H_RKh}L(Hm@CJWbL z6{ExnvU0)BD^af%oNlY)G&_)tpNs&_l^f;Vso`IEtEgapx$8Eex9&J~!6$71w|kO6 zd!ra)4FLu>JSCKG@6EK$GI=K!9`<>rMzQT29m@4pu+p^#Nf6Pn7r5@suCuQ0(z(oJ0b#OSmTY?`V%e9+Fe4xn> z*~J*}>%r$*Z`F_KClPj4#L1=1!AvLuT12NWE9p^vrToXsyKN*v2EUk-i?O@l(#yYE zAh`dHjr)6Dv677vj?-|nfs)fkO?)#tG2OgL87vOz=$v(^MBmT9wVxhE`}Or=hLJ@} zrT)g!`sZ?SK88A;l{X>uX5-NiNqj~MfNM>JDs*{q0oG*%(ypIPH2&$c1W}jOx~Y%~ zMm>6|`izj5Ioh!fPNubuT=+bPY{acvzs#NPhq3iB>TnMkY!wG4t;Vbi)kYFDg*&C> zWG4gFSpvQ*mcNE>9)IN`+PjDiw8iEu|lQyAWoRm zu{>t8#x4j*ah}@BqNA&5HD>_w_?O+rUw$_|qPCi>wD6{XQY(s<;=x&29lUg2vx1A# z@6#C^w5uw$^(6)hr{vd-;KyLJJ?ryF=*SLXXc_>#DSJ4bUI4NStz)aH4HgZ&g$Jn? z6r;H}6fzWYx9ClWI_4X`AVaT17 zw9LOgKA`Nqb=yg*EPjzBHg^`mWlHcR=Ju?ynVwyWT(MltT8RZWKv-2?o?+8d#y# z(p&h;D~Dq^qpQI_;3R*3an>C1jz>!Wd{+urYiy%!yb)&)qr*HifesY}`%qOqBoWax zb`VhukDFm4ORQz3a;T$UH$<1+xfZ0fcjn@jVfB;;I`@@SUtvmhaPFh3V;65x;JB!% zkSqjIF(sREP<(sPS9T}M4U8J4^-lU#6G-5oFj|mtngqI$Ls4gWE8xt@oku-iElZjZ z0Ppf;&d}1ibJI?w`;=s82+gpJ>rc&XWZu&ST+;$)0{<-5n(}FVG$e}R;bPkq@RcPD zKf#9(e8ryz2E!mA<9-VB+v(xiz*X47AxC04%KT*=i{c!x4A3snt^93QHg5h6jyd4-O^rl#pK>8G-B>(cBjpeKaki*knrluhSuLPz#H9_l1zcfAA`>_vvN zftI=Y4{{r17Hz4Nz;KeIaFV*3mYMIM|95kZ$3PuG+7<(18~tSL<8ZV=^THB01@`A0cJip|Z_4z#d|5(}M$#P)CK zhiCJ;9%}?riOd1N`yw~~i2BzXE^wxCzsnG48UN)=TB8!a{`)+I@iuDy{!C!)@?IAW ziXGxynSat)Zc&Mb?k`_o4uTVf@%s1IDw*BPAAvos?M+e&`aEXy*ib`u?F98MoAr^v ziV=Y{`_&+U{4bJvpQ^c14dD@DclIqYy#kFEZ7L_*L%3iBeOLgTd^6lu0VW*KqNSw$aQCj43&O-9_?j&kdO5!!H) znF0W~Da+`e{<%dIpSP&ORM+xh-zPzSr@EH65JDymY)&KN5}?3Zak?^rfJN+4QG+_4 zdprFCU4_Atit?UQ{E}2#X+zJ2?pr*4psD5``-pHHhC3GLqvB?esig79Mz<_3k9*-B zttC+P+;JpjBVJ7l6#3$z&M24a5vaqHr=KU@?3(1hL?$QjVwlFJRVHiWsm!8FTs>Qg zyXr}Vd1=agh#cIsI=jGEagmF=Vs21OBrt2eq2?I~C+`OriyjDQv%GLI6rGX{iOA2L z`FAIO!4DHntg!Xvytx+P6r)_t)#f`I=T9^|8rA^J)NbTwNvPlDR%}g#QeUF6r}3?0eAGXq@P)dwm>aF zb&Ln?xe!RBDeit%>;#K-@L6!{JMCP~vrMIQ=+~Q{N$CW>iaVmJQTerFKK+Tc0G%X+vzp($a~Uk(^4&%Z zSkZ-+IT;WMXon8cAFe z5ag_7pexZ{zj6V5VGuf?|B&cE_K=a^_(ZDXVgwT(zW|%3Rc_;=&e*mnNXB*^<2*86 zS)pxixYJH|POZ2~I{U_;@ZI$Sp$y=fz;KjPCE|pxCI({`0GE8B6iZpWhsnd{k_t&# z)d5mXcc(`=hlZv-piLt}Nxayc(D@B80HBzA;oqFlzuQxNh4OR%nI4Es$7Cd)M~{7Cf;gmDSdyfaq

VQKFG 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�d=Hrnz=NBn|3M$+RdOE{LBAk?StCNfn) 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%0AxGQxZ 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

$h1`0 zTvoqZ+S(MV*Sbd4jNT7YjRebO3UT{KiYo>iG`q^r_Y5uZ**^vvI{J>$K2D> z-f5zx;x-W?SEC(Xy|m)?^_qoQ*hgvUoUAZXiw?iG+R!hdpVY%QMHqsq?V73BKr86+ zczVBd`P@soYF6&KAfC;*SYo~z;!X?Wfj-Y`C1YyY!%J+h7Zl8>c3Z#QiE$IBPD)>; zRl;ggr`e-%NQEbOsN?uTl`;aQ{30?ZHUX6kqihLNg? z#dpnNcVVQL*&@Z}zhU9w6DXH(pp!M$O=1;md3JLgyONe zG^Wo-+S#WPr6aAga%T$U3TT&x*icV(w(-r!TGDpKzM)mw3@~K|n)$c&FPRo2svA6C zbUH3;H(7LQJR3?R#@tP%h_9OiU>wxj@#i*K-Cq7@XGfO*`q|l+R)DZ4l=d@UdPn##UMiHu&B1q zU>Dd*j9Lg-KW5j9wFLHB7dzIXTK(F>;;W|is;U+%a(svo4D%r%RGbfJpel`>AfQvF zp*F8K%bK$b=2G$`9TVoaM(8OYnF`KSuCQG|`nMXT{WzNxb4s^$=$~BXw%dNu_Gl z5di}hF^fxBXNAzjeg6BQcMNT!e&50hN9{%OuXuQC&VwsIk85-&-R# zOl!^uJoiRo9fxl{DJlm3bF-IF60{O@f{8P{nZ?~#71~;(R30eG7mkN;`w6~-zDITQ zTv#m-hFa9!QIbwKB@`FDuD`*GI z->vKkBp2DvYEmPSZGB7DIkBCGN;!Wof4di~sOlpaq|S{Y`SMGJ>j?91UZyqbn>KsB z#I2v-p3#9Gx#;bq$E^!+%X#N|V6W}W#gnM6(pGJuWN(qG?d_R1G@uc;RM^J~u^(-B zPvIV3$Yw3i@1?-?^(i`~zdk-d5NAYCFH`CD`yf>GLdP~^vP^l8)>;`h0h-`H*s!iy zwAaYHqk`|)LNva2^PakgT=l*?y(b>|k(oy0Ge-NU#lYPJbCiD-b>6C>cABlAO$HseWb@ho2B`{#tclMUx-znG7!}gJOqWzdLfzAz7GoULafgfE? zg^)UBist6`+j3V*>)VK%MsIpn)=1Mt8f3O)ez8U(;nrSMA|64A_l(7V*06M~6a$oD zl@YQ{q2oA%p}Z-p&WioHd0Kv@(SG|PrvutQ?gYFG zd7&b&iNg5k9BlL0!I`_k%l#Ci^BKn``caa4x8TD2Y!xHBGFF%p$tVq5xW5Wj&a60c z-i>=+e8Wl8sOf1N?Cw~}a$Rx)@)b%of;O~Vb6Wi|DC;QOv9t+M#+*z^q-hT|8#)*T zC=(jBMY=m2bNdcNR28~blKJ%)sdL*$nva)vOxX_e%z?pf3(h$7efThT%L#(!X)Q|( ztu15nkF&JZ&(h4INI7jH1iO5yxelGT-|#ywEXZB`o#A^v!AWx ztB853#2Lw3W+V?sr_g}HpFpa_Io7WYmrRgfdA@M zyz^z32~})W8?RTv=8fKtxoICAGBN2FquZ$KOSka8`TM*|L1+R$$yT>fJN^-ITEG{B z*lZ|<{j?~fE7CtK76*@hWR?dXO7+x%7sPoEv-MvEG;mP58$A|QGE%~z?$|KQDIj0@q6$Po19FTcKB(ZFGHuXLP$G2W7m7` zj0IZ8mjk}N4(v?s77!6J!C1(ZY7OiYq^b^`rAG1g8`z%&d>p8lQT)^zu`Hf^>d@d~HRRd$#f0rF({dn{JkeEio!x~E4IQXh z)f!KUCZmu;d- zqdft_o+k28=>;k~0Y9%14^#-7z2hpaTnZZSzmAkwa}b%&B?fa`=P~;f^$$-+^Qy1> zHa8}O(a!HMaZXk{Ej%|TwNvp*BsAc+menQ04*B*oPW&NdntCyhM{^3>r^c%z#=l2$ z?l9E8roX+?;>dtmnx(+5r@zb{?=fu_+`WSHLdI|K{lgT8XwYt4*?*_%P!@Y5_SowQ_J#}IV6Facm{q3I!rAe*?A35P;B0;sW~`%iJI6liIi@@xDA8e5zSf4G6GYCI9e#e=NI4@K1 z^i?$HlnulTQUH8GKQvg%yG-OAI;@Ll)QhCp=5>!SvdQ}`u`%M^Ha+~KB|G%4v~MdZ zN{5xv)|zG50zOk6KXw}wU5#>(3ie^PU8wAa)0AhNZ8x|HBAWe9>{UmfUCdIxac$8v z%kiO3^x!_Aht@xg4r8cmX zUQ2#n|G!$o^Df#lGZVJ%DyF6u4KB5B&0qI0yXOVQ0w|1 zCPGhk(oY$9SXwV z`B;qDsm%@(D&z2x>8eJFA!I3{Wt8U3OIU{Qm-=y7RN-Inj}jyMX1>xJ4TV74^%5uz z7y65Bhw#z~*!if+`FonRSCRK=^e}F;9-@ONaO?gh`~zSdjfHM&lPhmreqh zqd8wTZA?vJXFgwXC-Qmgad~}QaCawsB)paBttQcFDnAx7Y*8ttTpoGZlrE;HS%@yLUEmGSpkL6$xEkZQEYKBK#VHYZ31KyvWT7 z48=J<$$k$zPLny$kDB+Er@Y+oc$n_wjcoW4*qvo+` z4YXtI@%gZ_b>^ZuyVrEcndBO*09B!t_dy=-76=-1F?8L5IQ(i_&M z%vOaM7xm(Ha(_`$5o429OarJDSJ zB+K;dtb}{)SFL@_@wumGg>BXuE1#ShO$v^OO+1+WH!ZCRGFJ_yfvz1KzZ(BA&h^W* zv7S}jmn7mK0dwApfljg5zwE zWxZHA{?gXgH9Wo`&C3m>&If#YxJcd8po%mUS^DUp`BVSKQ%GE1J*4JG7NcH?N-M{( zQmdsE$qYBbF5B&j-53UCw$)U=AV*t(xglL38Z?{P_~hRLWiYTu2EKN#ReSOt$x^Z2 zwUN59ot4k5(w=?NR_X)i5)1GPai5>UQc`8Dn!MVs2@nh2$=$<0$6{o+6=Iy+0oD8E z%KzWuT)?x54VHYo)u5HnpYf@~W~aN3zr{xW&*crh#=L1aYSFfG$i&x7Xl!)%OOo9n zPLh?aUIqceO^dLZ`AotkWIF9jW?}sbFGqCZvokPqMkNQH*xxnh4!wV_`PHYTQuhV1 zr%!x=0+mFQUN(GiK0&s`kkrP>pK=L%mI^uLC_n-vQ9I^iQ-wOLD*%-d-F17UXy}n% zR$^W0!}i<9?aLK3JtX9Zc}6W)hRMaoAIW4n-R0aMubX?>OrBADt6AxK%Lp4DJa;nF zIVRki^5fRb)yG@k^tnO7nopZ%HLbFAYC{FF1z}R((g3=lkIx~e2H=7z!kh%1`V{%X z%$c4eSc^ax>4P42m6cOn)(_H_l+l3=RE@*aB0wCSjLLLr3MqF6_GV9`>b05`uD+Op zXt>zxcaEf?XfVkzUY=O8l^dxr!R}S_Y=2L~xJ0$21S{TCEu}#{!Xa2gFVsmK*CD7N z6SLdXLvLl&@FrH0oTubr4xbRW6-&MQ4^+Gwc=h4Pk}HB&O{TVz_n-tFGRkBtfsU0Z zXc)|*`Ff0+?=*yU?W|#;F}ZQ?$ZV;o^$r?PI|RIwMD_KHHX;^f!>|gw{08)p?>1*p z#{z?P4<0`|ajdewY1s?HQQNTO4eq2}+ z%v)<$e3~BF241`yiJ#r&GM8#zQg-_Jz%VCfw-w*;JMV&9HaFF*H}kwZb5qr#$(m;o zi_pA`qnd~Ds`MAHc_FgYaJqHkQ!wo6MU>Y-#dn=WgTF;1`+|Hl>499Oy^W?~i{fp! z^Kkg+m{yKv-DGAMG5E7dYOLtm9D=wG>!MNGL2frC%kd(dy`fa3WAzSpYWth^JJg)C zs%Bj=QtE+&jkxkHsh@AUZ@966BNs?{!%7{17B53W?S6zG-0ShSP+cL73C{~qe~>I? z7Cy%xCx-(w3Lxo;DW3HRowK-(3cDkb%5k?lqpVcK0Nl4Eo&kopOT3>?{5N9~SGGVDo3hK%$u}-Ny`mo#A2;dcOw}D#mh7|jf6f)t+<)(fur#W8Hr(8}^n#XuArQud#00iY zQlY|8w8PB~lM8sKBG&7wtByXZGV!{m`jhv^%>0g?fcpTGU~ZL2DAwkvv0>~SmN8%U zQJ+LUqQr240Inq2rkDYhp@4RIT#w=%4ZLZ8CjQCD#jT&%3!vAiL5RH026M8%U$*MA zo!IcnhO#*UTw%1bf;2u`f(nS$c6ps8=)~iFQ9tfoF!bGY(|@+4$w6R8(PZBMDV{~K7n#i%Koc*ZSn0?%WH*ljD70o z(`a=^-P?4IjqUvCtnM~~PzHf&9BHm~h-^C+F$Jkv)>^hrG4a4);bYI+vl}O}l?i zY^)7$Px`j~+5Oecd|Xj!qjxH+fJMEkijM{roh1Yfpdyszs~F-upIb*CaocDZ2`n33xI2?X_63qpeW385e+KAm`!zaNg?9;u~p-OGvA*MFp#x#=( z4&4N;d_Ci29ojyZ^soAEE_1r5Cc5MK^8S#}$>__YBa8HB^U5)MF23kf6EVpxPgQcWf_Ol4d244>Qf_`Ao8@dg*}cKak2R?#_TGAPc9D#b@?ps^aAHJwUSi8viVMj->F1;I;#Uh#38g7?{E#SB+lCIxSjBQjYUR@JM8!MMiO*zjFvw-;J4{ z$?OE%c58ZxJ;wEimSUG(ewP>&IF)Z5ZS*&}WJU7H4*TycMtnrUQEPkShMa307b+>8 z5{-H5bm8!>j^(uuYyj~;){(mD4!tbqHGh+jn4DR8pJW^G9g@U1H6%B$(A2zu zT1xc3*Wh=hvciFcD&b&aN}0=tp5_`p)S#%#ol4lK z-~^oYxoZERtBLnvh@E2!9^^t5W(~x-I!>yc0%pch^dno(=!5P5iISgGuVa-{zi@?; zo$mR9;jEC70JA{7(#Kkal2JE7 z&cu=$1`|aZVI>I_=el>4L|^J@tmmMJeDxEUn+T8x$R_)9iFC4s2&;F7ev}(B7kIyM=&F)e20I`tZ&`k45~8cQATZ?m~uTYDg67Gv#MIopcbo04tqT-!jV zp$-XjSqMf!Gyw&yvn!U^0t*hgrU3k5UJ4drSJ#0Vhh=wq_aioO|xpSASsZr>ZLk{Ui{Fg`we3L)iC z8~N0uK%weBUrukdBT!1Sh7ufycag*;#~P2YqJL!)yO>rPzn~g+G;0^?q4#mpuRObr zhnff}|GXbPjh|8VV)KaZX{XvhiMSv}vJ4*XwqoM6UPeC1R?%P~R4f18lQ6C1x&*&FA5Nt)U}goyZ7`2VE!-6ZivMjx z3+oJvwrY43K0DO2RUAu!AT3miP}}1bZ^on-wYzZdrxJ~hb6gNQ6a)U$5^du z?4@Dxxxm&U>|9!H5TbjBR;j!g`TMXyI=z@{?oVf#b^M<8545HgPOFAfkt|6ezcB4w z`*(E|i;^^i8hr=5K4jGwr+-)ywVU4KA2&4J+i>X>o~#-a{w!&nB+PjM7%Z=UmbCo- zeiybvInD9QzdYe z?4AMHtkCoqip@}Rdp3HgTts=uNNrYW&BE8~Bb`MnP?}Pgsi(1Pqq;cHx7Yt)eI`thz1xl|w<=mZ7)`{YKgT@?tg zh>Dd=a?Gb`xQ;WRlNY9)53%PE=k)e#aN zeuVP}y6s~zAn#(|_UmJVeQ!4J8#X?**0Xf)_y0;x*gSHmSWTLk#E`B^6IFRFvW^&) zy(mq)#1wz#DK_~$JE-~JVrF4`WX137>()&vd#MF7kxr+6J-dR|PdR)L1>Vl*Glbhi zJa)GTrDA3 zFwIge`l0B3f4_hGqDTKHW7Af1T2_En74vmZpI5m6G-x)z)@lkTwNuB|P8wiKNWy%W z3hU7NtwYX4i)2oG^{PABuwouj50ALm>WvWvzrmL2-*<;$`g*gqk+(^JmYjCHL@xb=9g*u&9Z@%Y3~H_e3-?;x4*mIdr37|#tqZCF-$ zlQXRlz;;b{8~?!il#e&m6MfBT6aa=3;tg6O0_8P}gTYdbV@i-Q8hqfzQf;G8dpYNJ}x`v#6f82E5}5fn5ED2A={2EfZ^3i&afJw63xUHK-&G%jzvXZKy3H z*{|u2x_%lpEt9^Ei=I5qC9QOY2KCDj#W0egL))9{*E1G*JH^44g3sG<-GkZLw538f zuUpX<8E=_z?Rr_ytpSB~)(>$O1Bnqkl}qhBkzZ}QWsXMxU0QH0L*_XcU!0Gh@wz;p z>9dqpxkX@n0@fHQyPtpU;$Y^L&d0|cUQ&J>sSc_oj47HaE{d5@tgq@W1{z&0Ky{aF zN4rvFTyEtX+P0=!g>xv_x~yP;woAJ-=jw!Sl=uRwqB->MZg*tF_?TCDlR{fxR?UbH zaPsxc(oMq?wa{N$$?rZL=-IYhxaQi&kduxQhKDfaJ*T}-+fTQV@tqI?K#0?bH58iF zqbE~0`(FR_9hMQE{*rJqo&D83;6G$;FARX*2~gIs>kr*-Li&7@GL>AWoyve(>BGUL z{w9l&iqtz7=Om% zBp6wKJzc6-zPPb1`(UXZe62&E35?Q6*S;5~xN@0_>3x~|(6x)Gmmp83$;pR1S94nyN!Ud`73#mCpLIKBIYFR@N)^PyTO<6gbl~5N5}5QH!t@-OCrfPjRZj ztl;SIid^wLJjo6q{`Vzq6ZGqP(8(L=>^1i5+mC5Gud1aQa9Zgl5jJ~Fc#Hc3qVfL8 zaVK{fntr$vHW2UFv;JI*uEw?sqWjs?VF`fUblMt*v!wSPnmh%_WHA)|4Ikt{zYt5J z4mO$muZd@)O5WwPN(d#;K^t|IsDY{)nzA%=Kysg>`!CNU0M(GyGK<6(+DZJE%qNSD!MY)tTdyPLv`wlum8XC;{h znd@fI%i1EJy&{8)58T}y^0Nk2uiQ~}oUb0PvUm<>)Or@-FdvNZdj4T^$49)^BQd|n%b{(E8xF+x~~Pz5zsXr&po z%dgtOvMHxJ$a9;QQ)#Gjri6JsR)U}dN^vI?61g_|8V6Z^BhwJaXM!Y;8ue zMx4H10ewYC?w@<_{p0rL2_#{nzu7W5A85{)jn%_LbT)b5S65pp>$kCra0S5-%!r2XXJnmwm`u%+c%t zKh&7lPOzx2ci5f)@!8VSGMsAXM>3#zvgadBIjZe=5UgF!JT1$3FJ3;r@z-*h>9(av zBen&)uk`R!!GGcj*V~#s_;1^c9cR1=#0jh3U%atL3?S~9+AaHCdpyclY}&q}=)pts zj;m5#oQkKo(+Z15i`!WhV744{5WtZG97iDOx9>2vQ(AiN1UlWE)gY~)l}S1lM@ztdunsORA=`V$=Jz{(dqYZVgwf;Yw*>se}NV0x5(rkuZ(;RHx^t zwDRzhWn@p%g$2Fg_~wf>-yI!gUbZRW%ubPU5webYD7M5HRJq*LW5!F^GC^tPqHITgU}A3rp9Gbw+48C9iB-xnI{W#JV?mLU1z10CpWRwB z=tZGe=73C^CKX#2Ke6bzczC7!=y+t)^HyB{AeuQ{7PZq!nEWydfa`QlwYDcioGZ48 zk0}Bh=>vbq&;ywq5qg@zD3OMU=#uM%H7wJ4>f9+Az4R?`AS+yrA*eyD^XYu0s;!n! zH>eCNQlo+0TbL8aWAYuLv3Y*9K=N+_dE^ryXXcD$CrzuzpzEYhMm?qNd?V!~H+NH5 zaqY($*iRjRiSos>oAbB-?!{3i4^(PbsP8eM3X+#K_aM#H3K^=U9=%u?48wrZwKLPz zPAkP<{8C+|UkQEFKoU1pL z%1pZbBr>chP(5Uk(SY{d*VqDn1U|tT!7Q(xiIcK;xuyr-(Cas#6MBjbQZNgIv`%I4 z1gxG3>!plLpJdWk;7`9FI??a3FWMMjpg$Hl)*?@NN8A_o>K91MY6s8NL}RZi!|U@% zA!ocruwTgluZ_sZ{MZqT;(42>$2$OuQ}p34QkI;%ISX`gO+1c|d>wOX|n_p@5cW=ErPQ;a;RQsU`&UBPDku8tsG!EfA{Xdw-$!NS?~NBKmpkF7Gux9`3Z%^Cf8*;nk*~%xHfMKXjbwQ3knOi)Vhisx{)r(v zPqP;@+X>wENon(bvp;S0sLsIswCR60z0x7zp#M+I=L`^CIFL|L{f=uDqErz|fvZ@(N%spS6J5&L(bue^r^%>c!Tr zuS#e+OMgIE0@bA2Dm00NeGtxwN$zGYw?^|rA?12?J7&Q4LnTXadV%&waEsT~hE6Jt z^N+t%EiUe!d;5~wmfqWZ*}6Z1vBTi-y|{#FvH-EH=^2CWJf*n!i+N3;wuN0ns$Cw1 z;-8Rd-iTehD0j@ACfrN~)Co5(GdGb%0OOSS!$kG@w# zT)}x)xaMU%UW@QiwdG=q;A}i9|EtkbovZWp$HU*x4{6WLkMqw@{-4$#eV6kCM&)(q zX|u-{6k6t-Cd$-CwJ0M>G8$ZN=|{a3GS9&%Hiv z6Z&N}nj-y8yVHrvc3bG`0FXP5#p_YBc=X?|W3#Coz)*ufiO(0qNwiZvb!S=V08MG@E>- z5p7U4=+!v=0f~_qBuvj7y?*?RJ2&+axY z|Hne&ql=$c+%gOqAJMXh{T6W)t4IdWH=jt0t`?ST)ilDd3Jo49LfZ!-n8j7`enY*b zrp&%rWHG4uQ){j|0|mj%9asj!A=v#2Q@ZDG!(m_Fp*=NTEbZPJqAr_~jOnoRz5V#k z;@ctw7PpouwlI!0^{5Vf1quJcieD``j9Z$96o@HNz&%w@Fo1cpp)-!WS@D#B)7Igc zW+-~k<9j}sW*r25Q5vAqF;~*-TWpPJjK;qZIvv!pf20|6C|)tRP$BRehuPj*27G^Q z#%FBT%W!x!y+Lk`!O_LXY*<4{>5-Wo+(RjB^q(f-2+-!F_vgy^YN#kNLN{2r76dsrInF3*mk%O&=B-hcF>% zmE_eNeelV=W%pP?le%HMiJ|jnC&oD%5`Jb2fi&02?9+_NLg@b99>5k)hsERlKB`ay zEMl7X*LMp#N};g(%yWQI=TOQr}iELFK#PNaH)_g9^Plyt< zy9F*`8hTxWHwuk&)=k`Aw2iJV4=g!3f#lBe?95z!91)_8Qr| zP9JG2CBg238eykz+yRZCXxljB;CG98wUp)*` z!y(mUw}W171v_3*s|!-E8-Xr&#gyqob|$F+64ZrBh86h%1Jq>=9ZxCNf;>zTCf z`x_lXvxscX2){0363MCDPDNU@bYR!^-=WYNM05U?P7)&8`*zQ!D3dwuuuN`@(BdCN z=SkiDn-iDx6C~HL$xzfAYDy7>X5>R7Lm%0j2_)SBJ7%W*LQNArx@nlV@w&vf1XpDm z-X_)&f(vnJ7Axu0MU^uXdN*8@aWofmjw8#Jc(1xdD&0@SuEg?S`%wk2%l_v5$E=0@ zxG-8bQ0w`~ciK_H6hYlcz|)O4lNkUlb?*G_mf!(cb*xOM!MIYswsx;qpV-gw>++si z*Y^s`E7mDlZ|~v#S!MsEl(zQ{th$@oB>n1ed%YkKnw4GZ7uu65%UTN)*f|M@bt# zyKz9aj&mQ#hM0O~UL8fGDKIcG;GE%av?C)OFnx?MF!tCs{L3X>lPT%kORGf|zBO&> znOc%}9Lu&sO2o_`{NNc1JlG89_qom*`T4Fnjd(x4``K~C?A#-1$jIc6AOyqb=V^&( zHxYp8o#e%TmOR9tZgU3Zo4y)LH3-#wjI51m!1ihcKQHz|Pa)&6Gi^p+z zr;U6Pe{}ecPZFa~vF^qY*cLEvr608|a{8qH9D7)@OCu|2I>ru}ynMfZ_J_{E$WQiV zvAt$X*tu~C9!ikZ8!R8m99vHQ!PN`{4GvvDjpB5vQWt1~Z1wyI6R|yn$v~sAtZa$J z%Se`3lbK0Xqh&5rGlHZ}PaymT##Sv)o#%+3;6i>Zhq~QVo~%W$|NFMgxvGZkEZ1Ve z9c^jS97Xu~4CiW`*eD;whwlg%?dqIBCg6AYKzCyz&i+&HT3uB+Mf40Mzf2>cGr@Tj zkMv2u-=%>r-7)U@K9DeDo#zR~-Zne^EO}hKr$tnq2*&##V&E3EmRhcY?mm@Giy@q5 zhLBM_1yxMmL;5azBB*D^Qb$8302PPL=M%XVzn%9FHe7NG6tMC)y*Tw z#GAnXu%%)EBr6;A;{U&TECnL@kyIk1Z=J@ctzJs_iYfTWt*&7EjBmHILwxl7mN*Yz zOGs{EF_K~HiyM=<25?>@OLOMw2SV!3N)=6lOc{rInH3`kvoMZ~nkgyF$v@g_Ywu5t zVoO?inAFb8OrPJ6H%3xXb}F52=`t!mKu3$<(NL0a7ga7L8msh(DDCke9M69`Rq&+P zLYZ(l6L|Bp1Gxqhi*-vTuHI5-T-F5)!@ISePknmR%CynGrhvKh zq`73~qqqp=NcCcLdGK|FYqS-CMebHXs|w*;KW?i|yPnM2LWDEb+ePTVdQf{`e;Z|t zuDZDu8JriaC{x}aZa(F1r)?jgu5XU=-)&}cn$3(pDxUJA6aOs~HnoRK9P-ayCZPKK zQ&q^{nCC?a5RN3Z(gr}P(AIBAALldAe=90F^#W4{q+%8&yR+#*GR8W<}m1qiTD*81T?Z)z34q zbmx2?3C)sHj0wXhU}INrZXed?cp0ot3#t!-3{$xDt)@*L0FOVsR_R);t!FHR0sjyw zy+UWTA$U?uw<}kXd#4+T4cHCMR~@{#9(J6`;{Q1-8?uK4f<;vSS1m#@f~1hyx-ez< zL6DG9H%#NZ)tecc;yNfu22VO`8XyT(E1Nx*jBuk-so38+cC+MdzMa{Nk4ob0g6PPs?5(%J$p#~6qB;Y^ms7d zO>@*deH7A%O7E1ha6OtmT8w|A&-3o)(}J=Aj91=9UKo73vHnTXJi2ZxJlvXUt^;S& z5b#TrufCt1JRT6M^CjWXDemt?>x}y~X%*-(IDPyN9V;IyxZEE2<@j9i^m=Iej6Ni) zG2%6I7znir0m0MgWsLy0(Fq*zg)|6|R{w3}i6FGRKSSHfKbt@aiBuvD zC8x}_bjP4Y?mp8!(iJuFH z^EtF>RsLE}Mc-f#@@GCAlE-}z3-^NJOshIzz z=9EhkQcLORUXrrdyDm8By#mgN5=&)i9Lhi970qHIo+Qxh^(XvuHuF4H2PVC$TT zW`V=gzc~d^T4z>hhx_`4>NmHqWOZ1LLIA;u>vs=%d4gWqv&&`D0f zy=7<<#}Yvbl%wgqfe%^=D`BvjWBP+kjQY@V5Fw}Ew2oBC*rRVA)4l}uc*;bAwsqPH z7d{+pZ>P{eWiqH^TuxQ^%i9f~9@GqZoU0lHFsdIi~0X@GtC1&v~9 z$t@u2TEB%>CUyYLrCv^(&X1U6wOU0FUZe#po^@n*$5{^M!4N^o>L?fp33)$Hx~k zR-0h$QA4U)URG!x7&@{(KAC_t<0(7|nG&u0$#+d}-u!Nk6Pn8V_mgKK`H@lmM=6I{ z%zj}D)skM=UaTpWDRv@$k0;^T)`iYx5bbKUBvLP?qEQY?H{e?u{f6B#0@a@NFT5FF z)-sn^+gnAf06OO<{aF*FWx1^4b}ZUY8bEKlxB3{{tJ-K$obqdymRlt>doM$+3qEB? zBCl;<+MWX;Vd?lHf*qV>IIO~0EYK->k%KH>6>^QrZ*uJ{5jJI301Q5wg&V7xWnuG^ zZ*4_=3wA4H6=cZ5t!_Q$npvpBkNy1<-iqm!3=O1mcL14{x5xMw`q-nT-^Px4S*_KV zaY%%J37W!A>_69`R{A}^H8AuYY2}6XyOPxiz19v*p7E?zW2;kyQXzFsSe@g9#IQnT zbbNF)(g!0^~9DBgMij@>+68~)xWdFInE*3g(I^JE(TYOZUewB`Z8X{RtpvwWV|Bc@8RhL?k zoP`cd7lnX`jFQN`Cvnq|aq{`|n7pHd;c2JeZtL2XR`g8lNYCYW*!HBYp=-sPA8)3g zNwD~6mt*Q!@-=|^ZoBVi{NgePP723+;2=2LV3g|X4Raf2xjHsZT=7+wm(ly-z%REu zXab0F0kpqfeqQ4T(lt@@p1QqdZC@y@ANwGuZ5ZA1su2_gDKj}&jg#X`do5JLwB805 z|6>-|UW9Pko2&S>>q4o}lp~!nk%w_C&Q*b70!<-~(NZNNB3-Tk4_B~I5ZV!RonmzE!*T<~Smh+;Vr;<-efoT9%akj#es?fNA!I&<^_i9q zH#wi6mS&Cg)=dmf`gR&HoX|EHL2g)kXBk1Gshg%cL2)96v1W*wSc0|A)yu?#Su~2X ztvFU^T}=0#SGKySB?TdaTWqmTQ<9@+h;DpFQHySb9#nloaa+VkGQ15 zt4iKZwv-tFVMTcA*av`Wk_tMlu8RZlw@G?4yW8ILgU5Q}E zB&@AbSN%Rd$SB1NFMMt<%Y_b?{)mqhGrZk<0Ohuk!{tN zT;jqcwsd5rl}^n8)rVb}5m=f+{+Ui8v>LxRcT_T`VW9DZ;f@iQF6P>u^-dmqXDtL?~gjICclxq04LC(K+XV6(M|Ra=#qvzH@XA9ygN)er0nvJo<^rD|%N&;)`NC*humwldBd}7MGw~9VPFm zY6AQ2-mkA{l&nnUhMCSI*VV3R^6#5$D5Z+!GY5+(=oAtU=bs>L5q60pRuy;F5vkY* zgytJ^-$3Nab%rE9ir}4M!*$ePqpRm z<~Q@-Q6;WNN?Lp@6;~_&i|Q9E9Jpg^mumojYg~>M3@I6LO9fD`TMSK&z@pM|G1}_2 zU@IJ|#n*+kYtz2!57Jk37@rW5^wl8%^KY{zy5U%znm_?Nw(?4x2o9>3C*!QKcQvx>lI)y0F;+WPHMzZ+GM*e+CAa;Y`- z0!yJqS1NGn&k=<%OKW8jPz1Z^!gSP#qR?VRFUPP=o=^xFLkpQo%Dwse0V(r0{3boC zs(mN3Cm$4fi_G4S6VgT&Cnvmn8@mjp7$T{IMk{2#htz=o7-3{2u7pMO`HtsI?EvR;kK{M;Ch={y=nAFV2+iZL2vCv9rmAoR#frfgEX z6$%0mD;Y(lm3?^6+>auafO4S75ORYMpsH}~@I3xs?(zS;q$xCDt~|}sa^2~aBe~p5 zL*?oC7)wfNg0A^Oo?nM_2A&VJ5|-ZQB3WjN<62Fg|3vdh(CZpW2LT|xFog_5c23?4 zXjpw0t|8}53CDgt|MnOfazDJ|$4Dhy~nl+3Y zMbhjr6~V*Xcd!GFJv=;YqLj~y6tol%ZP6(6Nlh$X>wL`*8z}qag}x5rk~mlrWW2<6MkJ=Povm8-33XLo#!_H z$vu*fYnoD7sV+;LLqVMkc+*EHFI_JwX|~Sgvv+qwh5An$)P*=VC0jNY1+$05Ifz?) za(i#iV%{#wP7sBBE9?K}-~a0{cEo|BumO2R1_}x)5TR1IknpH`yrt)u+~;wc!dGpa zfliEJS%Zo5pF~rEVfm)5VUFbSe64IcFVlKcFp!j@&ssQxm63(iG8EH9F)~AO1-P%d zjh!wg|809J2E>2Dhlz}ZO14!(pv_3Ny(LzLBZUr(sW505EPyt>05m#yp+VcM>a!(@ zFfZ3U9rLP}Mrcw*EAM_NWfFkrsJ((a5L>6K7IMIpY!od)O7-4aW_3*jO~+1QN%FgH z80^?OAJ3Zaq~S%67UYX=D&t;6`m;nk0pmR%%{h@s-^1=hb|6~9TbWBaygJyBvt-Dx z6}Nv@+!(h;@@IF=qYpl07L0o_kxP%|aJs73uZfozR@iXaj#T3Uktat%Hh>%Rwoc2YtG<$zpuN2s5RPWnw!WW zUa04{IIsvgvz~mfuJ?!sObXFRpvH(o54d_AK_6SefXb*!19!((b-B1BY@CkeXiUc!jqmgt?NSFrAx(5DhuGm|u&vW6jvBVRxG^YlTq8}wm6}um{<;@0NlAJUglC&3F%?Zq3n@-+ z{0g~{F)k;v50n@s7l3iPCi>GAA>o3l#s!A+l2k#U71K1Rk zNZ1nimh&9{l}!R@YYdPHz#hnfE*IBW{nNgl&%xB(>BxHYGaMXdI2jVf$(0ovF=3*t z5cy}zkH+bX$ZOCf7nv`U#MSw&BwGsAP1Ew4KeQSX0fHA|+@j(Kb{0X$h9&=D5ER6^ zZ?cn|O_`g7-wWR0kc+6dR@ADPG}$n!xvI1lPo#D*N^iyK&@AJqa*$lv*UD&-p&Ynd z-V~@oMJflW(IV;O6L3wjpqWP})bPrn6tt_T79>IIOdQsnAuOh3BEB4gR!*=IjjYyK z@cI?sL6-2OB*tl;q-Pb-cx>ydEEH5{HJGN)@5N<4q#Zt|L036PQD=oQ%o#Y4@L@!j z`1;LC!%`7W+MK}j7J)^GD{eQ?bodiZ94q}hA}$D1I>A^TihLe+$h)bL)a6fh5gi$` z%|A(RlO^b@*l}fDEm(E(iakjgSHd3Q@$Kaw)zD7RtW~MA;9=agZ!zGwG&VwCN9kxZ zwuTdhWkuO}=_1x=ewCc+h^O$6{RM#**$|s!!?1+8PnOJ1cH6#`k`TF%cznw*UWeYC zfNz|aV#9b|%P$p%5{7=&iGFpVGa5nosa?I2Qw3LaxU(z#K?~~@E?@>DSDnUC|Hl94 zzcL4c%r6O0&zBo%uHu&N%1P~LZnch)!j6#aGEI;ER~Hh_AP_Z#23*{&wSq;wYbi`6 zF$2hW17Wd4BVt`$oTdQLkwg%Nv8Is1QWjo#FGaB{VS+|as>YWi394hVgv3D*y?G4Fa+I2N zv+nu|yBJod#GBPMxhu@qL0CeiJ9MJ#EX85Cq{WXrEjuj{cvqV7@L!5c38-AP8oDU> z32FY4|N4z5>SLT++UWu~i7U~b`6#9y@6s^g7MRydSLK zWoGPZf2zw>6DF7l`1@?)gvS#%q=Bk69Q91~4f8-vs<>gPlS^E>Zfm@ob^w>u$vMkF zF)10zM;`d9D~sHV;^5yYJUlXB$%_U>W8QA*^TXKdUEGrqO`S4qvO(Fnp;7sh{ zGTq{>y@Ee2_N%(Jak8O42`CiFw2T(W2~;3;GR$@$uiRN-J)%G>a zQcFh~hh(F)noZ^vb3k_iB8{LkhM=a%rH(AEGc|jje}KLGhXrO9dEPNZvWd5cD%I~t z>&im`r^KX1s0<0Ln4*=w)9cW-WA7cBIl=5_oDWzVPooTZHRbj*%qMrlwt2a2NIFO-06;$blVv@pQ)eJ5bYb$hB!(FP}(PA1a zHNXpQT4UR)Ura_@F}JE^A^Bm%qTV>dQ7{IfHE#MC>c{cdt>Zn~#0bm)k8=hK5?Z5P zE=VB6g|m)epO2Cy(0#L;q+@}3j?|*}=k|DCZtqg4yKbEbjZGt(Lj7e!*cghMxKgIz z-+c&oj6|uPzLyD!#V)`h>k#k(5i*e?QgQ|BH z0@ON{pPZ;|=*V2z)S6|_D+d|tX(qEmb{s4!0N0<;iGYlOr9~1}X6sb7&qTE>cXkK`*OH9m8?bAVSb#LL)0jSp;EYX$q^56BD!q|`}$VRJ! z&MW|mHr#3@Jh^6Cc@|(8SAleqYUNjRjEDcG%7)WJM^Hea-OML)3PwRM}?2vp$PPs|fE z*4L#q28{qlr-jU5L>*S`B(gH+&uG7ujd`Pn(dJpDGQ~eDT4AZhMPJh=ei~V&HUBc^ z&w{ovl4bShr2RbugDPK)VZ4L@<1GD@AVZ?<9G|@gCnl{~v1bB`E$X+KmUf_k2hNG3 zBhdFn%snCaoyn)>nKQnX!C3Xuwfkq&p~f{9N1ai}vKQSz^CX|xM&w4}F(H=S8T*AC zBc}iaj(M&vm0c_eGMbAPiL9k1;o{WQj}$%Qc&@yxcmG!~q2fT?*BGN~c0Sp>5ViIE z%7Jg0zW2e~-5m7ZMLWU*qi55?@x~1cov(pT`*t*w-rA#d%0`1NpT{CVJDl48Vf<`9 z%_s!*#~}r`R47e{WB2U^LeX~V$-n5UhgoUk&B0xpSfnGD?!Ql=&+siCMN z&W|j0(5=8DNEAqi%cyw6nwI%@N01AxwmrmW1gLK2EPd;IbHhU}Cy~WUR$JsNXTV(7 zCyRqdo*=3-N2kjX)XUKaxu+-ql`}%pToVtZm)NoFL>Bndwni0?Ixsp6d)?=D8*#@d z_weiSN>p>sa5wn~1}eW7Fcc@mWoAH5_z=fGd%5bm2=;|0DH%y10WOEflHr>NmG)6yHzxV34sreuWa^E29pc3=KQ(|K~ z8gP@4Kg~gEdzCURH-eUoQfXR|sx&LdiaxCd18~uxoE>X;#H=AmE6x0!t{D(93KZxF zgQzXh@=e4m1y^S^%|{TYc7~?CVU*uF3aZx}mM~FJX{&#a=vHO!udPwmQyq(U#gIe{ zc^1ve2H9ST*s{-jElQ#ME8P7u0nrqK5|THH9lM`xc}VabvZ7w2&wjaV7Zqd$3lrh6 zgVg6}=-L4coA7{_It**!chKIeop3Pn{w8^sHUB0%Gl=wK8$lpQxO}yG3FUFv{BIEH;2ZlTge!w>T!C)C9soAf$=b@%M%}q zv+urS>4*Vtswx@oP&B>r?(L7Bq>S)`7nHiu#tI!jw)BImwn(GovwLu(a;8gLp^* zAEo(VwJ3~-bi;PQ#_Eb}Ue^%^I_v@k1o0Rh=++d@VZBDXswYb4`$_Tl#Ez;zzV@K0 z7Lr+{AjGs~H5D6FO-D)Nt^-kG1u${x-)5i>#JCtVEcO>d+N9$+H zhz@jg9zjTVeK_wxQJN=G7^Z_qTOmBt34(Ru_Q6|MdU41MMFs?8n4_VGk4>DmP zuDU3`nd+OMk}@kS8L1$55BHlgPqu_<$wM4i6j3m2moyQVUpxmS6I-PyNaQ&aa`nk} z35QmoIWlwm=potcn>+HiUV(l^wViBKckD4E!MA=67(}?@YFj;{aMgBf%4Alx)Uw3o z5p4CC9s_Z!39l~{!dU>~gTnGQts2KblyY3ARFJE3qha%zL5?Lrk|`l1xuCHez}6n0 zXD{hii+g45K@kvmadB{erNTt4(}9Q1z5THchrOCZ9G=Jye}_~+;OPE#eSW1GV59z^ z+{$4Vq1$s;CMox(cPpW&|cn!`HN_x^hI`qH!iKh6T^!pZ#QYly) zDFNdI#Deg9#^PDeuY!~}Sj=rj_2GGU|lHAOrSi9 zO2$G6Oo5ipw7wCTlQ^w(d6QDQ$xQ28TSB%HED4Q?iDN`F=74ohN<}Hm?J5GWAX7#P zF>U*Qb*x-QA-c${CypeIN2_Dby_5QFbqyD>qD71hF?!gF7x*b~%Sx+0R+Vl|1lIUv z@Fzy23)A%s0JJT}D^F$SYqq-n7L;@Wqa%@X$%$laDl!xUSj!y5TboH{%s^rilP^#Q zqlnVR2s0x+pLw;){knsX!FXMd*RR*f2;(wS@3hk!tgg<7yMIwwDFq4DW>f5N)ts-Y|+=>L*};x2M&*qJvzxJZlFi z80kH^QP~3?&m`sng2t-5fWr3noKB)x%+ZG=c-K$JoCo?VDhgH{ue9)MS$ywr!oWTO~ zl$ww_PV6GbJOdVje%>UF>h)h7QB!ol@;~P1v0M*Tq!bM_g(!rh4keKJ3eDt^7Bn$O zNvERK`!t5|<2tpXcU(r*U`AP^t{voJMKXnN*-es+rWz@po=(QL+=_ZDo#JAd|K=Mz zxRD`Rc2y!}dIUVS$5255gb*S)v8;$>GD^C`z3A_n*@1Lc*pg168{tx2xtdZ46Y}K! z=`#UWA%)VRsC6b{SQdN zJwnv$v_C#3TDG9)+fjiIln9+^2YXZkp-i_-grQUj-;)xd^VS>(9xOu$Z(_j}<1d!6J3xVTlRHt%80? zqGT_c<)FzC>!kq^#=<%<=5GEn_6tL+mfg^PjPs2+O{Ji=tgGF&xDRbbg)eQ}2I)kzu{%p%rY@$ozuNT;VEcVlmdlnJhR-y z3BVgBg?zA0&0DiW8Fxt~V1*MI^7i~4KF`5tx0cUV$dlox&)|+ht@+K5^-j#75_gYU z+u(QYKLO5^Zi8}q_DQYDeDgAhX4fM7rcYoc2=SNsFLV>rv%|`-0+_cfM?m8qk%RR8 zav~GY2M<-0|El_h#{@*7w7g+HGn|BERS`8}G5umQVHQCml4GEi{Bco*i0kL^XA4Qs zxlKk_4;scyo>)y#TbRsFw*|pa&`Lr5lm0?wRL;rSDll+YaS85Uz@J^u|5axCQyMFN z`NTKpj@=(FcGs#Cn!L@hi_v|p9^Ij!XCexS0Fq+g^XVCnaUx27n2FC5+4jW^vcEq= z!eLY(JR7mlKwEfE%!6REZNebeim# z+y(0mU`ML7b`}wn3&tps9Zg6ght%+E$Vf~@1a4HX!{MFs_QOGDL&&FcQ!II!+LwYo zSAU)CmoTQ~Tj;!1%Rx_u)_}*mMYVR~c1&ehyasmpAV=IY#Kzcn1X`W4dZ1mmiWc3oeIOl>8@MB~HjZEq3qtWbXNU3!3io z+%4csxl<-M!$X!b!Ww8^!vNBO5zP7fI8n$CnvM`%E?RMwnH3f2S4tErs#M9c)|v}hU~ayVd=p>-u{p=uEGC^!&PTUDduN!@Awn{WL&to zXN{Cjh3v!RQ?H4Dm0@5%rbO^)H-61(Jw8Rk74bswrbT2-5pW_ zf~10!AkD{neb;*qo?r9t`7!r%KYQ=B)?RDDzOZI(kKKT(%6K74g{&&K488m_q$ere|=b3jvY(B#r9&mmBu53kgDm4HcQv!1iHE=Hi* zH(`Ljq$m2`z>*}laY`#`&x3G@U=}Bl zVnGN&7?216ddh*~krW0E$DfO)xVt}6xfX!X zn`Po+jmAABlM%|}3&bGMiM&+QnC+EzS^q>9Ln#vYBJN1m!QnW2}G%>9lrn8M% zAAOkudl>b?i&!dd!)1NHN57fUz(hOj$Y?dgGzuYPB8uZa_(Rusd9<2vay62ma@BR& zCTDcQ)MgVMRUd_MWMvy2u<#)9{K8z!h!_}KURuKj=Ov@M!HL*PsNu&VB1Q|~|ff@f%6^l38Cx(%hqQ$-v(w<;~i^g)W(o*I7%gV75MxvFNHM@+fF0)DX(K7L+EpKrR*S z`)ZoRM``%1C!Ep8wL!l|=5*lZ0}2b%@=TwP=e21Ai+VRM{`x*P*NE?JK3VuBAArt^ z#2h?l`tH7DpG=qmOK*xA8KMUmhB$q1 zPT6}G4ZV910a8(1T2}!t(dsvO$VER{qbDyK8fJWg=0wLWa%Dw9eAK0OdU<6#ds~&h zb4!(48r3c(Fpee+M+G401Z%OxM@U;6*`ZlbnXf}tPCjo!>daahl%Py$KYL;rLp`<9 z)y*k(l$#fWWJfvPB~_JD;n4R=;8t~KjOXW}p1ORx{tE1c?iRXLL&uyK)gg{=NZwTb zj5G52L+myf;38;5M)>OxM3~*pl5|}&>-BiDQ?mKt;rEA$jElol47a7dZXNv}L4q~^ z_H5w2g{{zJScH3V(g2@Ka)oDo6YpQQ5$m@{`9e@sg6vw2V&XuJS4B?_^IKWWnl?9@ zfi2fmjE|T)q*~yZh3;8NCYHv?XU}}Xf#Kp!(OB9+P{O?6Lgu!|4~IN(%&Iq}5!pdx zPI9)JA%8W>wPM{1hF?vfFrwlBz)|FI?xK^Mg<;wFA3uglKNK`A^{v*dz{xWDXFFK5 zU#jF-;$iF-xvE}fuLa6%5(Y<~8DL+&#{a}T3vJqEF@BJwap_k(?2|Jq4UHK}5=ro< z(hinrx9jN~^$G8j1H;nasbs(<=`A3wtd3n~!LvR)(=)#=2RNlVQgu>E=%2Qv&uq|( zKpP{uJ)lNq3{|p=3G!P&L1Lri;e}@_g{@&dA$rgwjucL$P>YI~qp*;=hkIps*kH`~BVoL`9KDWk{ z#S3A7bV=q|6O2fesFqCHQtMpPj09Q}sTp97JTl(STkJ3WCb*e-#vJNXPq(!4HOeFO zLVs~TMWKC1{&e>cyZv&OhD7w{UI3hP_^d^Bmyq|nFUhBlk0}sG zmE6zQ77NL~fQwovv2kuU$ELoZejJYDoj$d&k<@w-@a#=~nrP03P51+4L0+dL8=(b( zruE2c8ymr|z5kr4xHR!Hmk&um2qB=JfP9Q*!7Biv$S*3vLJdEzrk3VUr(;s!p^ z%vCM^;vqMOV>jCpFybqG_>1@tEIEm*Rl5WWx>D&M#)UytLCnK(L9AaDhm9o${Ntqv zX6n8vhEpFjq)RuIPH-qRjkSnzyiuull>GY3%KiF5W;>5XW&A|=TL7Z##WKrgJ-2&+ zpmoB#4X;UvQdDLl%PqX(ehm#k0T{WkEep+$~OvH^3nYKMR2;cEY}u zx(Z5W%({ycJ_P~=OpT#~UBhL8$iF64@)_EtM>B}GERn16&s*xCdJIm8R4{-C|e zmq#nYVvi`Ak<-13N~L7=K49c4Gniy&?=`$%Fbp=lpPA}|vk(RMe4~b1Ls|+OO$LpU zzncvu9QZzb+nsx8epdWnBCLHsZe{nq+BZ!{Y%`9y|4+N#uu|m^Z1!=|A<1G#`maO6 ziW7{K=`;I!$XG?BgG0>}ZaiI&m}!M*bo-UqOP=3PKK{IgD>Kj7 z0ryl?uxd3^s^)xPlmJMqA0cYkR#nS~lq~klfVOOUs*c4bgjk$IeI!^R7gd$m4m*Ey zq2isiNg)-@V1ke3w@R(j5g2P0gn%p9Z_`7M>)r?d$rF!7;mS5@d!M5|%ts|#UcxRC z{u-oZrVCRVW33-Q+A%Nv{X3W@hBh5C70FYZNf<`R%Ty$7O_eW!b~+r-f1oGjRhq1m z8QKzqyzGWyT|_WhK~4%_28D9L#nSx~#c0|SRwBkhNC?~+W@QP|rx+X53W-1SO|^>L zE@N0enFlRcqLmfEH+xu}-`)FNAJCdjAtH}|Q|GDlpe~yk8fc)(ic^*&#|-5@qs1mu zmvZ_OBveRr>}&Z7ma3RwT|${%on@P~x6k|CP?C#6|7or6|0|`Re*U9EaVIi0FRiQZ z%T?n*9vc|YX5i``Z~cN(OH4b5{QG9q(6mvmr_Jk&uyRVbtXHp;Gn;k zyCEc0$}bF_RL6vdg_qo@BA%xb#9U_2HO5bk8D%8bsdc8q9Ujk%R(dob6)t1*$E6r5 zvu&d^lL9N=(eQ_vEjCYa3YX&q3{8Y=Vdk#`vwl{E+zon&S1lvGu%{oj1h)Grk=|z71W;}v}r;c z?le$DBLrKIPFNKJzZ;{=hKkuc2@ON(807pB0aN z-_AuNCnUd*uD~jl0VgDHf-&VWAWO{YzocVR$cw;e6l}rRA6_Z+B-kh)E`FTU=R9g( zo&C*8?dR_?;>^Y*HX%%Is7~%h6tzPh;U%do)YG7g()5|!=t9ey4C_JhV22r3jf2sW z63V6fBA&eg|Ec}KG8s;KW}NaCwUo}jL};p?jrfzZP`S(lU{EPZe>y4FEm;T7fIlh~ zdGie~35}h`@#MI4i}B4nX62=5;)Ww>zh?UnlT?aIwji0eR$9tF?Dypai+SCXOo;DE z$9O$liv@Mw4<(;Ey;{t@EF|BHGqot2u35_eMvv7q3!P~!#5%k3J;jRG)o zfAz>K4i~4i@|Tsz)8K!v(xW(>D|hw)HHpcmoBYKoOTZ#NE^KX_K2qEFEn%xeL#Rei zsn-ef8bk&dT^E!m)R&C^n?hBVXwJNjR6Nkt@Vd;1#T2DZ+6|n|;R)NL#8b#F7I1o9 z^=a9K?hN_lLOB;`sKInUvGK6cahelKG?g8);dL!Y&8w!_`Dt^cpv28#U7r4L7D&a6-QbL=nPU>KyJb*ARKVtun zkR4K_t+X?jS;K4XQa9_Td&${U#CTbtR4~#yP%AV82S<%J^?zg)u*zZZ#@n9VuOHZw zhLR5tW=xc}?|MlcmTn##9yKquC|j~4BFR}TEn48>uk}*V7E2c@B;sqD_82~{eZly0 zzeb<;a*QW!`Ulo|;S16@UXw2{+4nwo>$eh;|3_Yjf=Tx()*y&hYV;!GLoHTTkdC() zdA`fc%~+5`ez$d;S!df{`qpNd){i#n2leHNpaMI2Vm;(|^DuS~Y5eX{Cx&WT z_dV7-@kxxYnL^Iee1^sP`|#sshoCKJEiEgMQ4ZL!Mbb}SsFF0kt8)dI!X1|{G}1RO zVd&-`w9V^Yqb(ed#}qOj?7#BLxXk@}jn zsshMaQ4A7m0iviY|S-w_y2zcK{19VT3oj}1~ z_qTRhb;R>!t$?pycpD*1muKnKa(zvaQOINOphq5d;L1=TrBtsVFwF+bJV#ERP%|Kl zwps0mhZF4<5ixVBu=u$;<$7`cj#gnw^lw-f_fMhYvOd?`#D98E&r|XoJtnu%tTnJ` zF}XKS$bV+9=lcv*&2tQF~ zD96a}D$KLd$Y#O1@Z8Eh2PuXPz-$sp6LFlIO^(A)^&O+!JlQ`8H5j6?5hVa%oC~=M z=ll`|e!|f4D&pn^J%hdyj*+!1w_;MOQ}@My{0%BXMXXI0O&7xk7|=cPJzmM9#FyG% zbAPJp=Dqlo<)DCSk4&o^6kNn`&2AM#V{O`%9)z*Wq@kcptuKYj7y#XlM@=O!Pa!ay zK~1U+a3{$1Z1H>&yG)`oQA!Rv*cJgZK0|Z9_tUC#FBXFUCSya7tNgsCS z(ks1bCRm}Di-wr3aL9>#;Kqe_{m*KSt_;;!cRk&fj0}){BHmJarS7*==vfy#7BM*_UOsT?CATt;)7sw4<-w8@oqW<*1PmSsB zlQKeNr2c9YV=nzW34n;99a0F=rfwrveZ{I9-GVUjQYJPhgm#MA=n}w5L#W()&WoCo z7+^*s3S_HLF;MG&5g8T^&}PH40Gquuaa&s5s1K%CP6FSkOh($u04x%~kuvQpxaLk| z=A$nVp@lJZdqC@UX^MiuA~tPqg+oQP$r1$WLXHgvFy3SRKoNv<=oViqss>-8iQz@6 zWLmlTzz<>hY^H&i=vSSceFhV)>&?dw7vIw4X%P-UMNt+dh#q_(?d^wJI`A%4y~Qbs zc1C}AVp?lqHz2&g!H`vtmlW$oH!qUUu=cRMHh!)RQI!@E9dGw$94CJ~(sC@O&LQQQ zc{ol5@aKZg@Sc$?@w&_AiW8=J;m;M*f5`h#KNQkN>;q{-h|p@mx?uD>!9Io=DW8g+ z1air!#EOymV)R;tmQ@1AThc=Cj|KGEOln2RAWfTweLUzjlZY+i2WR0|2niD**p&7F z-ha1*6WS^=u$HN5q6?IX>p&%NI z1V|vFh_q=}B*2*&PM<-SOS@5I4S3T4GNnVdqWPr~lSx<)&YN!S62Qv34bd)*JORRv zEYOhIB$69aO;NN8ha{op(@sIw(q>TsuJsL^wD|f!cJ$F;vvf?>7yJ{5n%=L9D)WUf!&8HyHUM|EGv6V$*s6+h*7;LN+>a$tH?`*(gmtthfXl4o zFjE6JWr*AGsA_ugFy8uT1C{Md`?ufHQq;DjuHZ!|s|5{#5yPo;Yn@i5aZ#5KixC)N zcx9}CJ8iQ1uux(_?|W9~fI36@d<3``)i*!5%BmwM3p49d#5!J>JLpiBhln#H%0iu4 z(qS8QPejy*oJ~oYO7u+2`!aACuMBF9`lfI`sTbW)oOP z{~V_}yI{g=kK(buJF)*oDEp+vM;`t%yknWiG6BCUU*$L*`S9Rv>8i7Na*B@P#t)KgN6SFU++}-{YO; z^A!->4J7WlM(g*wj1`#-6P=$xmojnFw^c@DFEXBV+gpuKK*I9Y0y36VwQ?8Q>-+r@ z&8)0|FeZ&riy@!OKOUAws_A2&kS+Anv!tX&JdcNp+f-kweFL&3FZ9+nx|o9roJ>TF zuoI3wrBgpYNPtCzcKqHXwIT0&pRZLo=v$s}6KOJ?P!5xXa6ZF!pS0VhQ1N)3wMYW5 z$HV=wA?l~_@=zINgA<)N5>w=5C$dj}OOPg9ZG#!c&UJ$06}6bftWm}HVQ{hD6tRs&);xt(g}XSj%ka8_Hl@ zZE?3Kw4sT)QD@(eHg|ra6*b=o`lHOt#ZzUenUm07=l)KUw_0abnC$7{43Z|47$Q9@ z_P^L~T>fBPs$@2oW~uZ3`Ra{VvRa(^z7cN2v3$Hr_;DBQaxGoK^yy!cwU$Ep>ndG0Z zUsHzqRP=RiNe><#Q3kVrx#8*XxOWxsxyu}22xI(QJ!cbY|2Nyl+G)JUf^X|vQTj|H zPz57rnt`OGG@M%Any3o|Ypf)0bcraBTzBtEuu+PNWbeL|^4NGhsebUp3#Z>?fBgGJ z3MQF;ye6QBTTZ{sss8-Wt1(A{VG8mI7!i=t5Up>BVK0`@(-p9)Yzh>k2+0txdhr=Q z1(5n|cQ${d7;^>)a=-V7_Qn6i-bv78mPpKjR&mgAcM6I zcEkcLHrNQ>*t*<7pHb8e!6I?CSna99ESr&#tN8H^|M2nhNN&H0%&hUw$o#7dfKx%O zWDWaPW+;z*iYs)uZH{+GF6Lf&r^&cSHXjb+T>xnnCZ{P{sen#2`KT!rs98WxiH`L7 z(#fwGEnTq7V>HRs6bHl^Mf)5ZPk0K9<ULxj+zbkzjmQ{(Ae4=z-SQux@y+*P#qqAMH{RLMdZ@TK)h1Wm|G#7 z=a)uZNr`grneGj>g&T(tLXIuG*8hdSEaS{2?(6Gxe=J2vMU>iEqLAd@cI88N;iR3v z(}T$vFYUdnEZS=x6zd z-&T|+N@+?eMdE%y)%x6p#!G2dY}b*dgtw#ef$j#8a@-b02K57bntA<*iKGc8W`R6JZU7{=I^i--3h zNOQ2)6alRL~tH&HtupVd{F}|8myp-bvdZV zfhr)c&@ViR&&fkwsCb`Rc+D-~WppAd{~o=ucuNN5d-&{64>~l>oI&Bik6COXd&)7y z*jj5N1bvu~P06)|$($p#godeT^9(g+RIr+CaIa41%xo&``d=>JuTDowzJC~+=4ALT zwbBA@?L6sCo%E(qpk5qt!H_cvmnt0(svLl3UEC~WB@%xr13!!t#ByoI(e*(!tLqLZ$> za*VZ29RKLxTUC3G0r{laYd`i3=uSGn9DUJVL;Qeel@F{hWt}g$vo1oG4HB3Z$9BU~ znFJPIiDV%Ew|vM#D!vhFKyZd#03I++3ed};OwR_CXvQFgf@Rc~ArYg$sVk&8L*jV* zBy$qWkuHEpp-z(!m&BW8bkzO`-{g(|AK6@pT)tv>+(kYPe|q!g?oC8TB2V7k zTU(jGblWX7GWLVxxgL<8X{DFU&6r37n4Z&_i_+ux+y--W?J-U|K(mZu4LP&Hiyc8T zrQ~a*9r+Tw#;+J*5f8aGky5Z>{|H|XVIS(9lLPIHPSYs4mZin*VKWGQ^86N zwc22=H}NWNEs!RxBp#q8^qI?S{-wD#%L#3Ual|W=6d-83^7##9lH%mio0b9;vW{U|ZG_{uZqse^9b zil)%^CmTL68e0J9`t&&J?=%@zHMJ5O_h*02==4WXok93W<=A!^WJ3-WZkgXL?7x)o z$D>8a$%W=3@Xlz?jd$cNLz;2~&V#N(I3q%- z@RLiHZ8?e&=fpo+4pN?0eomzifQhcn*-?g`6| zg!l!KV94S{ce@VvaQA-(2A_=N%a_GdOO~_N&&Bc&))_j-;6!#giy-1J+bJWAalzW0 zG}iKp#$&be7QlLL(e{9DxI8VEe}Q+D%KW9};lZ?ux*zcjrtxRu%Ou+OY}N z>yMc<^Jw?#zAIc>)e@lJYG9Ay)j?^+IVayF8Kl8vTG=rO^9s9XTA4E}LP^R+g;B#3 zjuknD#jUt|vPFIfWqjnPZW_C;t7chbUYMjPc?^Y17D58U87aO-+1yZq0 zY5f-XSudrCa*xryv{~G3VOv;?ra_T$%y%6D3!8qQs)@^K#mFQJvi>Q{lHc1GtNT9E zSKAF7ph-pE4eFG69Mg;K4CY`|8+wmLV7wfeWb1>8VaBcKh_n55S!>_%SCS}vQW7=0 z>Z%yG$Z=(2x>wI$rwlvrGDL?sqr~-o{XBuQ{lALvV?qRN(|iUqbFzrMNsc*mZvQjA zL{AXyFr5?F9vuhyC_=9+pCP{Ti>$^zD?Pct~PY zX{#-dV75-cO>u7c=fuw5Q+3G9@>=-Rlb&Ft`OIMqJ9N#&$GcQ6k9Yy-nRtae{U}e!>M=y+a7~UN&0T8Mi zPf^RgK!7Su&Wo8^ylx~8?>OMb$ui8IbqgvFnX;O(o_vo7LpyInCDc$+pa2&sNF9@? zlCZYJ1qc}kmBx!J-|B-)BWJcMG4*Dcyy9~%q8I;=bT@#Bx)fGu;w_4NS)bSC3RECE z<||D4=v!%bXE&3Bdy>0lL*EOi`}KM#`1BY=tyw4b*Jc-BXN>^=sO|6ER^n{4cPfoX zM$Iv$6FdHEf~rS2*H0kf*O^Ght@;R{U+H z0xX0@PziliHJv<#77=GT{~Z2$G%ch4M6D#onOvbU}zamS(wVK9rAZ?1`-;}fwUIXd;NjC^ypLy(h*MEZN`=|bAVV7@c=aA3I z|4a%`-ys{+!{eijQQ8T3T(BRbM6qm^5cKCKp9j9XKR*mZ?0qeb+vPeICT5VnTx5?J z68M!6&|SyS(k36tN=6b|G+2XioHP9;HNkf27!8M8&*2U|q&h8cvm`kQTuW?~%Lt|z z0!?OBX;C$foiNm}kwis)b+)>rVW9$Jsu0=|KM?dNES>1aTSJ9D%2pfC3=}*Pb)6@t z6v<@@Dpg;~i^JnQ)7(`Z#?uS{eyXsO()!J8onNs)ks-2@MQGgq68~fWlPQ^{YPtF^ z2ST!6YC@fi*Krzh#aXl@Ja{p(cKO=$<+aF8l2}rl6N06#l?SMJG-JKJ%Tv-q6;-VPFxX0New}}|Lw5AhUPFi09VYqm))$EZ_K)NPyTeujj|Mp0)t<&XoHL;3;W zc`pV{1e^GfFc#P872x;wAhFcXHN0bTlHPw_AcxO$I$Ffc%{4E%mRb##)3nc3@}mtY zi=n=LIE;mqEMv-rrI1KXQ(#GIzPj(+GWXAax0mW)&_aXy_hA=C4*>SB(hF-1F~#H0 zg?wvm=|J5p4fMUN7xQOm*z+FLHHc zDkm$q6cx*LS(18>2AC_f)G=UE6(W@?2kTK5KN^*owU!s_j6kkhL1hGbo8gt3BcLO1q;Mn1#t!imuD0;iFn+PqGB#b z*5OJH$tY8q*WfvJp^vV;S;C3VK+$F<&#;hY)a6=kXr#fSR;)P;+PE94rc$S}7qE}; zO78qIl!tQaFKJgn-5j{7SQ+=zBJ@u`GD>6(`!OEYYTkf%YQ8RucX9gb6;W zi5Q+Bw|O>cw5RmVej^Y=50t4MT(xZFM>@DmOS!>s5Ah1`mu9df4Huvh*E%zasz#lv zzN*14+?0RA@iW+8@y)_X(cAd+x7}=6Yj-ryOY$nz2xOxY6^xGxfHoBUN87F{*D-5a zDb>k`rys%)aIbwJv8$kxB|Kk3Uo9E=qHWV%UVM$Fz2w}{!cQu-PKd_WE#i*Qqhx2m z0%)YWY_r-4`KLi;Mw)%vmarbSukV+qiL8BE^RvWk{mV{hmMCsf8ZL_&K&aP`Ul{)s zS7x= zNN5r4WOMkYa3GPwgpMR2{jbrkSIvE2!0fwJ-!|5q?8a0oUI)pvhh{!@hZQ`@xG1|G zw(x1P)^ESR-=r72E&_-N@tf~L(<1v>M!1S>(v4c>{ftRxgNd#J#5OZ3-*F?l5v*}- z3nzakUc@aj>P+=RdYy1Dt6celc)ip}j~AGhyOf&pwmoi!oh5;>M*7u^b$a1&?%C&u zHz)W1<9Zm={V0Q!KI}VJ30Xj`P!Mm}_wgAritBy3cEsDaXy_}K`kRvfQwUjkE>7%d zrK0Muu#Tp_a*d<~iYhj%3lxo7J8RZD+&3tZJU+Xxd);`6qj`g#A3P2oLgPba>!yPE zjMZ8ispi7yktTk=_}dUTOGohwedP10Vjg6${fkXD@B|5#>G52QW~NC6MfZ9f|9%4}Nx(u-D~F-O2e#C( zNFX0dmSUCGI|d)r`7RW3G8zzl=*iz*7Gs-5rV}Pr#BU3oU2`SPdSrMMPR14N?UKU6 zek7TF8N^F0UgI<@4Z-pK!u%y7wYh6@y!CL==oCFBM6exwR$o zU0kYVIGwk|N$0Cw10zV?HXF~i4uqkc*Uv#W*l@xRj0__rW~t?ZHHW#*{<_ijgd;H| z$!qP8YcX5LQ`rm!9Wa!AoP00U^?a0Gg^EiJd)EUDI_@|QDJeNmEd8{J%Rp$3;d$a| z>^c{56jx_Qt19K1eV(tqZR0l)k_&KqlKUMBJNQTJZoR#RE4PO0GsBZ?&1Fpk?eEXn zZlAd}J}Iied9|Y&X;_}yO#_hDE>ozGniGr=7noM5&QOO}MMWo{$J>d646JK=)TQ8( z5^q(TLlYDXgg9B1y8;G>PhAJqpi&d3Dg<&)(}i@pPuAVaYb9!DebU(Hyp zr>D~mo|~JsJ`E5OE$Y1s7lQJMqF?u$IPr75&;F7(6WV{6?5+6lrC(a)hnM5AgUXQ% zhB63JXN5`x6y9Qq*lBYleIfuXkHY=*v?D_fZ|9w?ZUTkQ=WaKBZ=O;EPu@MQKB7BH z(l-6fr4Dd&`%4`~l|Gyi_b6kXOV^(`&o$bqT{WMXh`I*2W+S(uGsjqDTTM7K4RRKi zx2~B~SqI0l4Gx}ATn6o3444|s!J8D;wx0|ZoE3iEe|fms=#J>QJGm()4DaOl_WV6w zl@VY6N!l2L1#T^pX9S~p&E<#3U%eLbnSA2FN4|7NOn1X>2yprNk9pRQ4#HL+dINs! znssx~1lhm0bpxRU;hGjHNG4k#*rgo~Mt0s;{Gk#0ugPUhce}VaD|FNvrl z0?#i3F~ai1W$z02Jpvwjfo!>Sj2N$1Hr}8U{G{LL z@Ue5sVLDW;SgXa*|13cDXt`3$RQS9CAAzWf#tgh;sjYf{PVq(~A(Q292d{5lvw;;p zhoyYtYgouAct3?US2PL0linT=TKx5&Efl)qA4Lg8vaX9Ao<<1x4D9+}!(O_SA*A<7($`9F%B90K;@Ej?+Y)m+1rofntC%_c~4(7F*K9Km_&q@RRoo3%0{I=Bc zJa|24wxh?*)n}5tx3(;mErm%sgh5$}i4;vVoreI6O87=|H4}{q5qFMe9imC!ncR1l zKpjXM;H`u87WSnfqYCR3^b3}5qmf?yIRjb(vZjcWb>=eOJ=d^Y+klC}(W3{e7(EiN zK~D5C#uD+`HbLf|gN|n0c<)RKCtQ@msv&-ij7Em(aP>HS$p*X<$Q%2q@4Q@mDB7Gk z+hr54v5e!1#pn(`R_ma};^4@gPK4en@$n2 z=l~eEMMDPg){Eu2UGJ>VTI~rw6o^AgmY(-Q;o*Qq5>k$K_ zWMWZQckXZS^0vXF*uE*ZDV?;_6z`~SF|C`@E-Y$UK$vQWQPFE1G9 zFVh>`P5^GAHoTx&jU&a0r4->rMpeYxyb(kVvt`KR0a(>FH`|=|*-H3eJcX&1thSY~ zU9X@fZvWM!ivwCC#H*OfUmc+%%4`RnZGX-5qa!I(!W*XtshK(B2^L<{VUL_Yc)m8d zP!%~B(%azeJz9&7gUHRd%#pZG!fD;}4oMT`Qnnp|MI+>^iOZ?O)mGmOjQc*PkxE~) zZ}D0%7|oVy6_RSw%tSb=;5y(ziev*}NR{gyqBtoD3GhvBYj-^sOZNcVnd|DVN46q3 zi&CB4>FLSM#5*GZj-$R}R^U&0l)yX$DzsAsNgaa61>;UiC)tpBqd(P8BvB7K7GEB} zNpB6UIm-p{BT?VlijxuL?vnxR*Z;De|1p4l8EuV6Yr|W{#(&4iEW)o9UA`0&6B9G> zDEwNvcl`lj)8!4{QiJ_e+-XyCqJup$epm!QdS2OKFQ*E?w6*&J`}na7p7jol+8fJ?1)E^pU*1;sg)kF!xQt3F11z zku&hD+H&eGehKI6(khFsPSfk1nQ9+ejnStG!0(s-Jr74U#p;C4w zC%~@kuGTl#EF_rjk`^Y{ui&WpLradvg{hH(Ch{j-rVX3I=!6ko#E`xi1-HN|^oTC={#ieecGcw% zURzZASi-hnV}IZH2RZ+P)=R6lk;oR`csXK6VnYzNkkff@YS5#rXl{a;c66}=T@w6c z!Yq+gj+(;7%m*DNP7g1ICVqS~`g2~_x@bWO-W$(j&#%(YquM?=KKCtt_c<8wWLZ5d zZ$?%qP8wghN^a8QFK$FUO`fOnjW|M^kpgf^94hMZ&f1Hpyg?x)aFs7;V$1HpKW__8QtDHe}0Jp2QpQl z&SSi`$BSy0N&?{(HhG5Wqiwx%J*io2o;F%em%@9iiWGU3Rm2hE;%Z(r%h`BvV>+&41LVI1*C$fKwP}>-NDXp2u^x|pE@rCp+-**fK`!ZV znLG-mv^9HM9F!o6OZPiPwR-ZulWeaOnP~3=!>Q*c2|&-)%C${aEurr;05$U?2aAUiT)MfhWN1zJQ;6bE-DbM)Y?$H9GB|4_Y2XHI*%9%zbDxU07{0c}-)AP*WOlL< zP&P0RbOAUQ1+D!x>rOtfBqx{X2t7SL#>DXse z<1r?Jb}$tE&zmLl8iEm%`2oIybn~k3TAtKM{fPNe05C`^@hPTG`*V4WL7n)VNnFW7 zD+UQ_3>!F%1%eiq33eXFj6BB-9w##N1_&)B;In+wvcND4MUA2j3T1>|X{_}F3Bj8BjqGySxLu-Lz|Cdus4CKbHDhnaY=FM+NLJYmmhwIxTO+`rdKI{`gu0qz!u~PprRZ_AT_+ z3yficGJjU2RB=O*4^LN$D2CqT;FZ&07!`3|OGsV8{r!p9!!nhLW5Faz)negnX1!LMt$KoscM4bu4 z(Puk?4W!Zxf40M*iGN_)2ri=5ET7j)ZAz+uu#wr}M66@SzJ`?0SIxEkD^J2t#fBTT<2PQ!>J{=>!)+t=3`j9o6T`e!6^IfGN@-E-!jA zC_V5di_QP0RJZlIS(kMfqf!_Sat?6Rose!Bax%3O$;_zJd0PIA&<)G9->6gjo$(RQ zhi`!cu@Ri4>;5Ruhw)Q8k@hD`Jcw4Zv+itnC?N&X zC@Pyt$e9@zNvgi3Tw>(U@{(enaIO7nMCTv4ptDWbJKdc*_pd$>H(?i@9FSl#)sJ;0a;s{Jx0-(4OC2gbmb>5Py*IcsK*6p|NoBtiS-Ef!6j+aylZfm?|+vJYtD_AbZB@>>K zy6sF|Kd_Ti&PYia*~e~51ZuSEp?xs)4Xpg=_pUwaixA-9bWZtH^*9urDQ!yh8b@7e z5w)cv_-kkR>&2_83{3hB&z@#y40MvbAKNd>E+tS~eVf z?O-jOect9C1oIeb33N?YB$;PKj!7}5mX#X$-GhK332-tpkaUEz20rz1hItGLn|_MK zmnGxN28Qq7 z505xB>eAcacQ(ZfKON+MvuZ9{>QNeS3=T$g(x_&wNW5f3j9})wO-fIlzhNjgAF*k3 z%gSMkPdOAhHT1sY)XcZOI(nZIk}*i3zY0Bf+Td@K^_zE%c6sH-pmdV0B=T}kh~?FJhB7l1D(8uXw7zT;5S;q zJ`zN3j%exIGrG>dWgE_TlKT55e-W9=0``zA-fHaHQ2NEa&p!WuTz!RClYRfcARsYf zbi>Ao(IF@eqecp&LvnP7NS6#o%IHQ?T0&AWC`WfoN+^OLsetg~dw%DB9`ENLxUO?P z^{!XYyGIkh2K-w8@1*!CHBS3o{8^1+PzgJu)vfb_!NZpzwz6mj8{>L|@6mhuNr0a( z=D3NLXg+#rKRH4ZurK%_p_5tELTMOWr{;WDCx~+92lImWW=pLp%V`f@5jHI=0-IfP zgf__ik}bF#k;5x1?@aT?Mw7jlP7R6!cQD;9{>8rb|u5_eR}oB>gHbheHXjLXxdpQ z>YJb*{-=O`PF}VQ@>;u;2l)g!z19tGj^B{=~3e7qLr=AShO3$y7+#VF7-l5pEwok>+dW}hOQa|co zkyVE|toCMTecx=QnOwEW8ilL5S4C7Bb0lnGS9S!1?(w4QKZDu66puDPwxzWu%N9$V z_v)qCiv2IY__H?Nv~Io*9ngRWkCraM1P_i2HQU)NhfINO(-)-3=Xe|vP}=4x)35g( z66}+YtgxEEsuZ;8_r?{v1VLC)4hTOE0a>#Dc&P%%TE1rV&*99Z5Pae`a>=6zuGW`m zs<>mC8W904`LORF`P6_)0HF#=j2v)XkJ~%_c`HD3BL;wT36}axzVGCkvIpcr zT8O#rAL`#pGL-sx>GifM?)tWxVwU@T*mHPvs_CZUP4G4>8+7U{GA+*7#PR#DgWVSQ z;d;H)%fEX^vlhl90AlYc9#vl{#hLDVq1m0A53|7e!&(R7phy^HQaTJKvt- zWXPWp&+az|U2O3!ECwRtX$xfRHYKf9IjHEEdj$EH=WN38_NG&bn?DyV{{g>)8pFH{xXQB*lNNGLYhEIU&hlV zm2`5tF4Z!dOFDWU;zu+0SPB6so^I;3$OInQRN9!&x=r?pm%7e=mv+#0QT&=n)Vq}j zQVe~&0qzEIyLJ%wG*9Z6q z6JnH=bHNOY^Yu@{!KNpGID=#c-uNL$TL^}?r0x_wr*KXmSQ5Np^IN)=zwmLj)v!v6 zLYFYBt^9^s=Fbu__)ptcD6d`8m^Tez$8-3Qemj@aazBitE4DA_*P9Ip z8DHYT*3yIZUwipw8)R!BCE^AJVWn!vqn^L+3>^;sjBMDEN5C=og+op@Ui*-v9}CPL z-QpDA&56NAKV|J2@@iD*LaaTpivjbiha^AvLYiK4>J@Y)C9@uk`g8AX?6@TCc&dv2 zn*(qzT$~*>@-D!?NImMswXjBXh8NW)Q7nit+N?FwUO$QM&Vb-M;4Zi&Q zvcxOkh(?>;VPfv&d9=l0#Fe+%iGQ@%i^wU8ei*pxP!Go3@Dz`ItpS6yt={vcjO<%<;CyFE+Jab5^C{V2R+ke{STI*R9wHDS7qA^Xfr<{ z3Nc+UVh}3=5#_bSZuKlpHG2hyQk}J8==2#(dA7Uf#tKEzG~E+_F5%(T>lDzVr8du= zfj&v25<~iK+qlMEf6jaH-eMvIU6M?V(aY$YjsHgJwpfKsie=8bk%;Srkk$w0`?}nf z9*Hs!H7G1HEiy03Sy9YS(2|zYyU$ZdO3f5o5#1X19e+(a9gYUGQKT=CIC@%TGpZWK zxyHP>Pm?SG?-h$4bY`ls=_UVf9@w5hINY$o6Rup1F_WNLVVyz(yumF*U+x^^_;a8$ zW#TF0gb^u<9S^$y(E^|iY+6YkP+|Zg_@JL~yHV>OvGj3@tZ$F&#o2`#E=>}EVsVSl z%5)eoJE|y&bm6{N8sG`n|K5y}Z>{93dcM@%8*jH?be8G`CrfE|u8@l? z`Ahz*ljbp46bT>d*Wm={4u7SVOHSg>(GjkLBTh~E=nsSWC~sc&_Y6}XySg`7^uTP1 zI-+&=?d1P?{BP|rB!If(=0q_2VaH!lW1i~X_iig^C$N@?ma|ydN9!1^c8l71TKL_J zYTCRyO(x{vS8sFe-4_f}g<*drhh79clnRQ*m3UO65F^zG!+x={6lNNx@4fnu8x(Wo zo460w5e2b4m{{`Ft?;RHZ3U41z+`%DUOpAnpnB;|McBfs{A-1U?|EW*+(_9}e0Xd+ zYx$t%!-oOZ`3mqC2N6sujAijNJc?5(XmXZP3_Lk!p-}oyJyhGaQBq8kJPL_B(WKX| z1+oeHY)nEjnUFR1piYHC1n6T~rVG8D7?i;y%TxK~)Um)na@=VuyQxG!p@Tsarv~O- zx_$R0g?v#*N5=utQ8+)W1|Q>Za)F+f1vx*qS~yRujHqRmYKb|obR%S2OrOrB?j!5# zV-HES(fK}c<1R!=&%~74rE0`s$@D6P?CR@RwELVy*K*vV>}PgJ=13zaB=d+ zE6lsCkkf-g=dSN>mbS=@*32k%hy1I;b!sH0gj9M29f zRl^gsqTRg`WJFT?m>1Pd%)OhIbfHklTfG=SmFer5oZ}WXxX0x#@17Vk^m-;MdO7sN z_HK`G-(|?zS>U|VH&F*+vqQ7LcijW*b+O$7WUGGWv1}nCkJWhg3_sOci!49t_jmI* z#fa_|C9Fs0+_FWR6N$!=*wGj46QF6aQb}U$^Oe$(_76=j?fhBA31+aKP%6Kg6iej& z6b4NWA(vB^fU^y04&lK=pmAM|u;OPNrH>u#8V(#BLIgZ61fc~&*4i2iEy#rdg<)(M z_4+;9=!DL`CQ}neZEQ)ws2YW!fxOZT`zrn6Av7%ncR1VK;#H-5v;}EIcwnWGJ&%ze&B1{n-Xv=wUI= zoSPf&&nCCVPPe}6YtL|-_0AwK)M3)R6DdQx55O60w4MKA=nnVc(3>Uy;~6snnSfs( zJbJ_bavWPyTHCvtl)EDTv8?tamplg{Za`S8A5kwM?CipH3AjJQ=#C%a-)272V2w`c zLNlNhamd?{Z7IS_v1-Mz*`X0_s-jao!vth!+&FBVGOnwbKC&!eotYX2(q`FC>f6&}K;%2PgCKbYRVbaixouJm*j=blh1qIr zaN%LCE!>BfaP0}S`Qb>%dntUpu7>TxXjFGd`KDeC21^IjCUl`FMw)urcY7_j9x#bP zx>4riW1J?YsvqcKT!jOvX2U)99pfXX;y4`-*86H66fdoo{VrrK%I256Rg7d+06jRf z#>S;9ThtiQukpIgHNoSnu{jR_)5}+n#ts($Nyggq2>BWC;sGEn%3`H7Alnc6Cd}9o zLpVw$Ai+H&WWt4O{?_~e6k8nO{(QHjWoBYU&C-E+c>7CoLsyl@T%DXxM|41rK=&7N zImKM_n77~Z7|%SwTTl1@8@EmiLJ5zmFDQ`((*luo`$4To=@MIvNqq};*((pXh>W!f!_Sy9oOdC!P5()uYS43 zL_4~5ZaIIxZk}+`7NCG!-yxB2y~vuBH9KrwZi#N{@GSgH$WI_;#HKI484b~A)ObWi zv3&&3n@N z&x0Y?b72*+>F(;UUhmOfvo;fO0QvIM-q(ocSxLOQxn3~TwHE2*dG_U&h=VQkv6!}o zKp&B}I!T$M5)w#oy^KHu>YShAyu?zm=yknM{*(z5*ErgQ0Q~Nd>DLeL4}9oXYa~Ip`K=^ z*_X{D%RD!GR_m08ulXzm zO*%p@m9?iq6egsQ%JZyTNx+W@R*I++c}iU?(&#<47G&BiUbn^w9v1Lk;ZPZ%6oi4^ z;ZIBSc#j<+)x78soji^@k?+KQk+kr9E99H6vj2_=QUmh11^|Za*BPiO`K8Cx&uiZs zkFt9MpFeAM%tI81T2gnf)qX-#ljySf3(9Iz+Qf-k#mr;MkfvZ@@=>m2hlo_IMv%T+ z?`XmT(US&hK?Gw$L)^{Q>P>h3>pO?yp}NGcs&E#4$|38V?}b1n7cvUs!$$h_La7Nh z@tXxfCtq!T^~hgI(xfk)eNd9Hy1SV8cj&zlqClGj{D{~Z$amL|?2mjT_nYY57lZi) zzQ#x?(gz{pjkKKlfmd^{0f)aWS6ACe$I@lmpm&w2$9$p`2h4ETjcxU=#sRPz{4mF@ zEq(1Sr0?dxGh*ZpaG`M{{DwQ#8|IvLmJti6Du&0wOkPVT>4FH)x2x$yP5grX82vh1 z$dWnC{a_9?u6|qLz8Q^s7E8g%(2hH!r-=cZr=qhas{yeoWMl9CFe1RLT=VHdM4#Nn z>xWCyG=Ms;)j%{YJnvzz3WOE3S7c8fpFu4?nucmZ?x^-B4!G+zr;q`m&Of-*2F={! zt8~hmBKLG7JY^&rc&Np}afYV4+I1I>%dsnY>V1S$EU54OlDjNsxj86^sNR`oD(7rs z32s$r+OX2C*&;Nv^r7!WZayPW!IjoB&yDFsT(upN#3$mKM#y)+*Snw+);==ujVMu9 zOy;)9a&xpJPjYiDbc4%4LCHeUq72hABqTpzp(xWY+4%M_(inJbLi=LK5TpmbL$e@%ovD)pEGi(+9Y?#U3FWlQ5Ip^ihRjzwsH|m5$7K zD=jY9f1Mudelvm@E71t3HZd5^pHxmbb@%gX(tGm8I!fk|=^t6A0xa^*a8P4`DL?A2 z5>6BT6Jl?-7a| z6)S)Ek!Y$A*dUqC9hw_zup<+h4!8X|;hK7Q7wkz%K}$8tty1r%^vB~~H$LBe;w8Lh z6wGy9fnPq;(|Z}OjEtAbfhn{+kbL4Mzo_UZ%=Fob<5t}!;y$lZx>f__6QZAwMQ-3* zsS4$#!#TK_Jo;59LXu)!E`&KVKJg=!cKgG0J7d}y%I7b8)+a7!3z5-8L!8a(iUd%2 z0KOhaMuXdu)bzFTa%r4FfHK)n_Uu#>Ekzd7(ZqLrE1cI~4fHU$4OkAa$`(7r!i-1yL; z=S^&Q&*k4YYDt+LX8=5Ql3&a<)NuT(i~LZM??jGHu<_1N_@Bd{pJq*dZFyctD%vD7 zw>#6Mh(vimnxDUFBVSpFUdV-PS6}{Td+Vuf~ZP#=9%0H#kE{J+F-sMCxsBfNDTN~6qqf~VD7GC2Er~1 zh~o*|tzp~@G_x4k-r7v-$)rP$K2IjQ6LE1|IXp**GNQ7=l%(LHSR!wQK3dLCJ~I|Z zv7b6ub!0lkTJ>nV-BVdVG3GHx-2J4)fjnTBh>ClukY7h{nU)fz`19Ln<2|tLLjlXb z7e4-Ct|hZ{!q4f9L!3&RXs=5qoQbvTSmfm*k4L&MN4F|6i84^-PTZc}EXx94g%{9~ zaw4Q`0sj8@DaKTanz;7h(`xWJ3p`DcCo_J1`Fy3#EfeV6VqzSExP`xilSGnPv&4U_{gPGCGCS4~DgYj2&K(q-`-$c)UYh|*T_FS^| z4}P>`{2xs|=E&P-W(!pxI|58Wz}Es)Ox2BXyQHzt8&;__Xw~&rU{PSkE~E}xFGL3L zP@2?4m{~knzm{f;kK;mck10vX?!0I^ezv{B|@hx{;&I z#hJ#?qeRRIly#=nAMDqkb*~9@8FLs0yr);`=^|n)Fk5~8)U0lNyI8sl6gutpmfbwY z&*G&skFM}Ar((!C;k+0F#aXfE`(R+9>}B%Y(_dMs!a{Q&S6C5jGA6>Z%Y~lr!mu}v zhra&-WZsAqQfuO8a>fFbp#+r_^`m22O?>6w7k(Ze?)FU`t}Q>J7X%k8R=<}-J@k$f zxD_v7y*zO&evcL*@l%Sn*UX8mZZ#xZA}=&4o!DBMTOVn&0>25(8Vho`moE0NDo5o- z;1hgB5%Rl|kJ;(c%S9uJ=s`>Uo6H)7noLA5aJ$#6Ai; zGNtdqf&6|q%~4=^_l=&!W{D(+YExi!851e&NsX%4XJKESG|nU!P7LTR9fFHtEPGet zUL#msD_KTToC=zz@?_k3G3MmY!;Hz}AIv0_E#sA@(_rdn=@v(xH2cKnt z92Ue|0)*TK6486{(IUaX9o+;>qk+F1#*k@)Qx0EYMxbiFGuCY<6;zFY#)3sRzI-wM zeAVUUAIOlqf6!f%^-8OrYHOQs9)WSnR&8%xkda@j0u`W5y=+Cks z>S_iTRt|s_QHG9KqHyIVI9Rb)GjZ^%mOq0O5$@*SQBFGU17#n&+gdDoc~Dh(k!VE5 z#3iK#kj=t-pE^MouHg4MpV{0a9!_W9UqxoN**!WcOXUt<2KKR*QJA-|aOp*$g&7nz zPU9{GUGGCE628Ffy|NXeYpDE~Rc7D+bo z(RpN)!&YsUJ5D{ltEAeAhOdHfU)!f1&+6hD;lqrj`AXq?_}YAqsVU~*8|yxIzVf-y zhPuk#p#w47^n0ZpE~CECrE-(9RK{+{7+xNH#rrSo7e_&TfHp3}WGr))h2JV-h2J?k zSw7?lVv%o!!V8z2mu`rM4@6G;vsb)KYWp7Z&fO=V=f{tCEmWi_OXyk*>9=R(E9E_x z!pK9jWs7BY8kg09o3B?D|KO`4-y}w~ip&}BR2tP2cJt|dY1d5C6SJUtVZO8&tGmEi z>A_-K6#zdx4&?IR!w>^?X>b>c&>WpR1w+*OOtVKpEeAU6ksLeKV%QwS-D zrPvkfy?T(1^VF5j9+V9=7W7rJgUCS@-5dkGD4wsguv@pZA)Z_DZvN~Cq@Xkf4JuSX zq&ld&%uOQ$A2|{r-c1|YGv5dkND~38l*KSIa)KGwMu9eI#qN5UFUw76H#s_65FNe2 zXRt39pKDb*i$pRj`ZN?j1{Nk9d#8e6R546g`kVsg1%+fU(XH;Uy7(uyl5JjAfyob1 zKp4tayDdS*T$!TsXPD~)%7W6i-3MqUL!_&z{me|0^v^5r<*(0fLqL{Q7;xoXAW%@9 zMNn8v_RqF+d*?eqQOJqSuahaZpZ$cjdc>zgd4~z%zcSQgulpW_QOgD0gzmwg9rnpz ziH4l-Cyc|w{wG)1dC6__<{gSZfclJ#%`ED=Z@@M6*Q1_CVK#*nJlC2uXJ9O)tC!$wF^4A^e&$t81eSd5HN|V2}Kz3l9 z{7JZ(+4d{{>4wG!n&rO+1^cK5tV#AIpLw(@POk5F$#^I| zW0O@SGR99ghS-*lZxYHrudAwc*WMk~ut+?jhDgVraX^P&uYRiNIc*RU(5-o0KZ=d7 zi!FHSpO{WR{<_lP1<_zOzOtHP4%CaBxKjL*?7ZrZCCPbTa#_%K$#dXNuI6GQ7};h} zy*YNPt#6FGrGwYR0rS{T?VCt-6{M<3**T@m)Y7d+djdu5as-9Bh(A5{(YbXc)RdKcpj;4CK!l;pOuXQJE-Nu{>X%!o;KeKp7Y_U zR6j9`Hh#659bKX7UP* z4tU~&`<b{=-9_*IRxPF@8xc;T+8ZhQ3SWCrlHKIZg zujo|B7Tdh@o|F9*t!2n{+xphd4N-Rm*@O?J)O@nbulhFf=kq~HN>6#h{Rl73`zX{- z!QzPof=vg1@0fJF!Yg(6<~<<_CPa~ei#-|;Wt--`7$pUgeRi^Te0_3~%^i(pZ&vvY z#mBvc$_`h0|FG+;8qcjft`sy?jvg&vTcl6a;w=!x9|3eLyDL{A!CKA=)WuDjGk(lI zFycI-om6_H4p)Lp+3B@J%P8MFM_Mp8fj>IVEK_V)3W}y1k(Js}c466*58TipD5$sZ ztsFI-WpClDBihZ-c5ckaC=Q7gR{~2*8Z4{K!4#aL4BwUB41k0t95LEPsnH_?htc?RJUf&ei)3B!BO<$A>m+NAop)$XnLJ+MNh z84LA{UMCyM>!i#}FuqcXO_3tiXCTNnddVQT;8sUpc>VmQ4ru$U?&iemhC$9V7blge z$j9Up?9FwC{cY|NJL1{0AXGx2O`fuqQnz$S_5zj7g62w9otYI*&)%LDdAl zkBJb*B=N+`2EKVmrL*!*)jPFkR$shH1=QJuw-v{d11q^oj>uLFsq8n+Y1Ft7%BUV@ zpMFppbE}CgyeCpKE~Ct$$D9hAWyW8xwm0R?l2m-px2Iq<=2k|=aDP65GLuiKhLTi? z7l#r91}ke&EmUPZ;@BF_p5?^ftN*={mo=u10zZjwA@j1V(l437o0$tfy8^qUHoo5E zxpK2#5KuqbOD8Q2)z{jjLQWjOD+pcIO`;Di9XP7oc!pbxUKyEGo=6o6TO^>i$9^ z>qfL&HsnV1?}NUi^5R{vwM|DX-nNEAUfGY|rA5~=dj~V!Kl6?cPhW*ISjzkncfL$$ zXfwCxqapd^$c>Fs18KjwJrT5aYV+@JdL=BZ!hV}C-t~z-_K3YX4KMb;AivH#{Q9v= z*yi|T#Q0W={$`hMef9c0Jm?MiH{-u>+-!I_3oh{?*N+-VpYmWAmRH15OPAdcI9>L; zNf6pn&OuTj6>){3r6#VSX2y1pM>Faxm?%fFJ?!4o;Q&VB)j8RxCTm)Hnb9gyfQ(2W zq)AL*9YFA1u~PA@vR7?pMCyLtt=T=F4&&t`)?^z|hFG!*PFDjy;x~_9?`#gikP3ux z){zoKVm}^(+B(}<=a`G%GEB;qT|V~t5!d9@AygHJB*|6mg||==-4`$M11go?ik)gy z&XRR697_JDDT_lqP+9r)ZhzOHMnHQ1H=sdbj#o{*G&J$X0`@&LJtMgvUwZ$RVrJe$`O3M|A-@owyr$qBR*@|>RqTi#<>;ZA?Fq>p{B?it6Gl7s;*euKqWJXErmKU9}Ab}dX zUI$I%CMl<|+~qCRe@(=RAoA@=1j(iU1oPcCmc-mNn9OyVw}!DkNM(z!6z_$_I0uQl zIhZv1C~3cW1pGWQcc5(Hwr7`Z;MLnGCFl<-i}8u+-2P498dFpnpx6H6#VV)%c90!( z<1NsV!^2jY1d;E+A)5y;)gmLaBVZ`Cpd%9}-6A@6pQ@$4n8CEVGtQC-4qN>3Xwth-eyZB&Om-uSL7hm-8B0Rq6?J<2!LMKOv z=F69KpChi|30^@V%*j7kaHl^bWpTg%+WgF0_C@%?5mNgO;u z4z8)~)xsLmnW6jr)$WoN%F*gi>blc|GEsGYB~O90x*3-xBW@0P(M^rE2TkiP2WzaW zRxt_sK94&Kyt*B)Db){{bN2ITbkhB!`0tMS!La$Wnr7er{>f9yNJ8RN%U3EoObZ+o z#G%o&UIZpj5F!0)zgN!(#vLQ=*v_vGLZK2a^YI?K-JcaaHXCU7_kMs5*c&p>hZxJu zoJL5&uo4h!kevhBN}dpHU})qN?+&Lc2`kiTgF>*0u@CfwUziTkC&{D#V{PRwRg7P{ zY|o#{YDrCPUyU3gMB9rdh8iQr(?OpZF&*3f^PORd>UbS}7VY#psCTAJZ~l$}-vlnc zR_+VSt&iDes3KC`X^6h$VqUy1M5I;)$l=)f^neK@){mP3erpU#;8(jXj*S4+iOc3P zg)#ZLsTrTT<98YdU3@%k=hLTCs8#XNa{4uwm>* z75T^86@4#SFz1^#FUUYhxtogzMvs2~`dHd9^ub6$;(wCBk-UU)#Y-s;I{`JU1?zwp zUB}_+7PQzWP8XuwrfrUabh*$3oNjaaSkF8lV<0TC>1{ZTd7C8>=+4+m>#H96{+wT_ zQ;Q*r+L}Ai1H+&Idit*-SNX*wJ`6gMdI3tQSIL`09`>#+j)dWPe}$20LxkS)5dhOa zbIQPhTTPeFF|gmm&WFehp=l@GQ`vl(*l=pS_4_3Q4lVabKnbIZX{J4~Mv5%=lcC%> z=h)`WPO$BG@jOf|lVgNmePwF@2`q1p=a-dB8ZW8JV3wXQW?I}1`y9%fHgf4LR-COz z<44@BLQ)F-+>eNCZ4gY9P;F2A#6p6d>Ed4iLzPs^;(dNjevXyU9H1tqCCo2>ck7{& z+C}t3+hjcg&bE*|Jz93h8h>Z^3jBN;T&2Y*n@?$ZveW+7_@$#Gz%=xjd4>cV^-D2p zT{GhRXV7^gqc+HrIzqoDy=Q&BtKsS4hZu2nOxVenqL^56Rx|ohSC^N6*EF}Z?D))@ zG&+E?F^|bAd8pi+C!=;uK7Wsf_*<2(MYW_(i-NTdLD&nx$Z`Hq>Q1-n?n1NY?-gZV zs(5;S4S@QQF(1XNg}41`+9Mp1zUO4g^fIaIc`vP2e%!s7`3vcAPf0<1WFce#eGkI~ zHYP?Ja&_FFp%r0tQ@Ky$}PH2=3 z)0)QmWAmzJ+LB&;vz6WTlRBhk34XPwi73|6?c$MFbxD_LEv)M0px| zs-}i7rb?!0Cy!SRD58&hEWVb1+zc)Lo%&0|BVSRp_P`ZO&+%ylsTsY$y}&G@(3mjk z_zv>v?~mUOyfcO=O?ZmR;K}NME!EQ~cCX1CKdh1) zmKXw7@n@?tkPx46(S(qy?9v`>`k#|^qk|EwT68F#=Nhi4E7gE8ysdbLOrkN7P4Ntk zg3APv9)%FEAM{Aw@cGtEj$c3yZKF#2Tf%P(i5>Zz&SFd1?7)l9nB4v!KxutyN(Zf) zDOhn=NL(VKu7zK@iP4*A=;K63202HQ%6hk+S;C3dU}_v6z1mS;O&(ubzZ3mXH}$tj zKH0%^nEmo2>N7J8e z@Z@ebjJeh`3?xV=jxNIwKe>fmgy>kIn#K540o;h%QNuv2u!#F3q8dKYw*dNp*^qu? z{&byIu-x#%Ap3}YJC80Y!*fS^)s2vqPbq6;4IJkJCI@6aTWvr7nSWn3t19f0>jxYL zzJKb4=50-8$*ExJrHQ-0P*+zq12a!1YDQTIyKDi8#FPb=TvBFm6^nnbt^B!%mT0<9 z_=G4`AeYoMM<7>v@9D#PKyfh<>JY0l5NbQ#8fa5$_LXr&jd;4?sEhjCK+q7TwBA~w zKvW_6f94nk+}eW6wvwbI{JPa1vr+23aNspe@$H7__OO_XoJ-4tkiM0!OKO}KYmv;D z40Yd8T+YO9U$G9+K^m75@w?td!eSKM{KWz9@Olw7-tMjLrsc}-kfzGt-XX1$LLJUf6YWAIVQ&8);gN;Ee|ko$P%Z=8s^lC_9cbDizlTJz;Z4>v%5K%s-Z zCkk;x^daF(dHgo@JUhx<4N&H~oxarV-rjJFf!OK(ynWYb0N0~;bI zz0&&;{0xoi-Yt_q|3aYtfZ(1V$VVGsa|R8`y*TnHR3xD-)IXo%FXa{xOez?TBI?WH zoe9Z#vl{QHh~GQpoGf1bfeLhB%&p@hVJD;#HF3Z@SRLQsm{cu(i$D#ti*LSmZpkYK zFoDF?iw#80Q`}_0=8!vjc`4B>U#39Ogs|uRq$F%JGO@bs&4Ou#$LD0e5@3(a-tyoAo)X z5C+kF8Q`zn0B|2B%6lHH9;ku&Bf>F!(ALWYfnU(VHc$E=-|CBm7CismVdCS6Fyw?5^A! zdxq2l)4U4$jMznrB+S>$!6y=G0En9#wIFve1{Nq@)=__IbaQ&q_fK$%WTVCrFtx?& z<&{&O8AP~aHPRxYb?NJ=`2!6a1bB<>LLO<*816dV8NWvp?vdpGm7hxX5FUL!lE|y-%V@?J%HNcfrHniur99=EKhqfRYPeYmLp`PCo7tV zDVHHHoBo+1p4D0Um?tS4Nen*zjte^SS>poxh(fu*q!WBzu4iE@Fw2J6a2V+(`gti7 z_Wm!^@he@z7j?px3K~XG-Bccvrg{Goup)RsmstFbf#>+2cLn#rkxCUg)Fl9nC>Xj} zM;i^0uxA!k!ebVX`eU!hcz+;)<8!M*rF)SiEItd2o6KrU>i(?E029wiX;3r#6(=WE zK`#v@-0@IeY15maO7ZM-ZU~(@xG&qV;h3KR5fF=JLw%vu>odp>yx4rp??|Noh0KWq zVWL^rYEP=^BAu(#K>1Vd4+m2QZ()`Rx}>+%sU!W-%LkhjWdko(QG4pKtTtVU&RSE| z7QHFBUOq}W{-;)64A;sSrDi-`F%;nT&mX4YwyJ41yhAF{Buov8*g^T3zl{A0r6K-6#n-L(|eEfU*ji9B9KL zl|;~k*ORdekyMjO{+x-UzEmB2N$zou^T*}C@SVeFAa-s|oNicILVA;?GCidpT)pH< zq6IkP@857#)-z-*)UaF@M{8qxH?lYYbHDi`@jC@t#&qWOk)^paUm!Q}@bcnfX{eK` z`lDw#c9FK5-L;BD-M({E83IAd5m=+Lkom6V;9=oshud2uxoFjV%|RfRew)HHPdNlF zGm(nzcJ7#~Mc*>tq98ycdVhz(Z2O7JU=?0(!jFqE7whJVnsN`K{TAOo2{IgGX@3D<9j$L^SdC2*RxiWvex zqW8p;XzM;zD)7#yswnWhx0ictqNEoBPmxbx+3KsR=rkHaA>O%dszuN3ezvDozFR-H z|2pu1vgym^2MYtC&M~02h8Z+wjGUkpRjwNn%T2hzJBrT+dW*tleEfrK zJ46{oZK-2L8A^7y)lP zqG{rGGGxuiDmk+(-IWv4A21_G`IL?Gb<#DQEg3c(qX#S`%-y<1yHo1sQ<>Do%IZ=U z(?LjHEP6-S>~5>QQD52Ip%Bb4eL1@N5_anc4KtK@6v`$bRF(D`Wj#bMw}%s`Sd^V zVS`E?lUp9w?+aG{aY%lws^E@;$giFh(V+K0vr}y=S*c%lnBmvx@!cos?z1>{hGCY>ImApUGXh#ou&)FB9@=23yuU|6d43k5$Jl~Bc= zR2sIjv+9-zCw!1r*r-Hv+e`9-^(GGqA2W+jtrKeMV;0Kj{mITiD!UX+q0Qf&xEMt9 zwAk$sCOKT09k3sJ0I-veov8oI`?C;%H0sVg<+wLiy!4MmHr_(vB_M{D>(meeLHIt%cV@vbu38bypeiC3}VH;G@pRmcthp8F&5FS4ywrW7Qne za37MosVnFQy$Y)k?ux%9+MD99$zOea=5?~hWAXTLtkAn(w!W&d4_5vh9`%WFJic#Tju{?2s7>jBn!1a`Bvbp_ zu6$VgAdz5WE8%IX`xyW|Sosl#e*MaGf8h%DS6Jx*e<16d<}xl#@G80yU~?oAW3}P< z(fa#(I$yBq;`0YO?1r!J6EYh_l$N?uCw~w6w<3d3hV3#o1$qX-fDqlhzAF22P|-&f zQ)Tv*Uw?dg&GFc$@bZx8+kIuyA!ZEa726zSJ6h6Sf{lqtltH@|A(b|O+OI1R?%tl- zZ|S+dE;bGKz!szlxZpo8zD$#KPK0qj+8dy5(aGy{8R2iz_y&&S3FPB1w@pz^pwZU8 zGCha7-m29B@93rJ$IpHG0;QIlw)TDZP_e^47o^$3csx$eDFUX>G~9ssE#qII-84m} zVR~@7g%-B}aI0}QP1WO#IjB=Zx;ohKu;Gvv2xkGE@Q||L*;pt6F0n8y5+W2jT-WXcGBM-QFw+o7U~Jy0#P? z?r!aQEqjFp#uK+WLeOZU zh3uJ&(o7IkYnl-v2lIFS5^du zj#BB>jt=A)G}bD^Ct=PwDARqJJ|vEgC#(Qn3zN>ih zroV)<48dGJ8s%!1N68##mN>pQFG)RBk~4s2-mNSTi8Ce|tTS|7|3kh)f=|$@S{ldg z%vdP*XOQ*v&>e}$WkgHro(kiv|GY=&#h2%SU$uUHTD^+7_mY6u!t_Dghx5NTgf8-- zdG+FKCjJNKyJbppyFclD%4Z11v%Ownn@~|9)WHCt8q__v*5-K;4*RY@DL;#9VxM0ZaZL^iVE-# zV-AY`#=Pc#5hbou3>5=Uv9%u9kO*_kgA?HU|0=<3M zfM}mk?)2)damC16ahu8F!N8<)HJ5Cf1O4xhy55Zp`;b=Qnsgi~5~VyEnO$AM#W*%)8t&rs-+rq|K;gz} z)LPLfH`6A$DjoBU%wKA3;nb{h0oFLe`wmpJyfiwPb4Vk(It|B?o}lJ4MSni#J$=c6 zwQ|9IV^6F9GkXR4_w+1^&tjAGr!_Ar9MG3S|GfJj1i-pgwtSQ0&&rIJ_@JgLoo?># zvCMhJJw4pf@3(%}zH{&z!1VaT!iKVKTvZiV)c=GOCZKal&{YQXPP(so(v45Y_xqDb z*%vpy<`0u&gM!XtK@^3?aFZX|o+9-SW zCqOk&2Xo7=Nh(h<e*@#RNCrj?}NZ4x`G&Kx|cW|mtEio zv>LBT;>v(lz@7Zr>$|{7wIpf9By)B*W4QuqwU z9i4u7DbOAmo7kmq9#EUc$-zQi)HT%GxrPBB#l_HJ_UF zyzB88o+?qxnbyuNXiXea42VvBRvyC03Yk|CT7kX#Ego&A@#}%ZY4ON>mq0o)n!hgc zUfD#N{d$-8HV}}YbQ~$+0QdQ^zt5mq=HWV!C?uo<7xPeR1?+)NUvSy9#=k`W(YyfN z*!_hcO#TqgfHNbTU=a5+u&!8X-NP)Nn*PPKoJoc0+V)ZONaEr>-r`3nzxyQ(%Xfgj z46`9;bk5Z6?_?ZYsn*2}l$x}2b+)&cGs(@Ak_KGg7u~xadb;)MFYMEeJeZvmjZS}v z7fH)MrH=c?TOL3-y{hEq9dyB^^?T0>&O-8$y`^@gRLS3Ngo^gFkR)LldiRCBBJ0VU zVib%(;*(kY*}=ZpBM3I>`*=x!VlYJ+9-ekNLbU)U2N=rtZ$_0ssB*7XTw3dF&34UE zXJ_n>q$(e^et%P`mb$*X9Ti-lklkBpZ;8T`By{K?CA+JPs9yOhJW6 zu&OCV0u;_v0V&MuW{+VH%2kT1yw!Y3=Y+&zsqkOAnPtF}*01?%2xK= zLtY|mDiTY?kKX@LV~Q$7ustqwU;FyA)GPFC7I8rbpmHI^Zt3;huh$+-P{^FS7n2I^ zQ5%DFf-QTuD;X#M=G^8H!ddvf?E+Y>;}I&w7muUt>_LOD_(a`&p0P5`5Bo?72U;G6 zDt23yBzbQ*xp}_=Z!PG-~TQBm(vyTcF;&Co3j-3`(`ba&U#DJ23T z-7$1XcXuO7OLqz=-74MU<=(a4bB^y_`}=(O|7OSY?7g2&1EQ8Ms2HHkhQ$>^F{Lz9 z$2C5ka$dhrEKU)aW`+yjo6yRmC^fI-ZE(#irdW*>-yhQ6&;g4znJwCKlmBpU`I6;Y zP4eI+EAjE`I#onc=cbJ-qTA#HZ?bw@MF%RIN5-~I-x7kkMM@3QWzY^0N+9vJjRrOh zBSGgwz!9Nhm^p=Wt4+}+aRL#w|7{mv>;!`IByvHjltYcGF5tpwsH3-^NJxfGU9izYHK@!HPq0>J+XSwY}H8Y+N5C_SO2 zKCU){;5?&q8teAy^=%EC`z#LW7uQeyrdoXvZJx8Rlx7l}coG$H-Om__1sjIDpGMAU zW+j7~p-@hiagAJZO3^)AkE-lkWt4)spZcZQ`1}GBEDs(;$1}vUgT}n9aW>-+mU#w< zzh=29J)_&uJTztvo+Km4+{jnKW# zqTo&eR^Ecb%DAiW2j-Od=>SptXNpmG3OxBOJ{ze02F1nd?c8hftl?qurfjN~ z*!|Mcf|~U|k;L0G7)u^2b(z)7sxe0gu=w$` zOg0VAH>8HNnJQeI`g}W{6ezcyRab0%zf}AEw0TrXBAY8nxa#db&@!FJl2B7xtN)k0 zd1mRi0L8!xkDGfZSBp&zXbdP6%ULo^3i*TjSQ^_PTIvWK6(V!FK;kJti?**X&3s_I zB9(T-MI$fRpI%w&*y21KZE?HTmN!SQjqL^eW7h3-(PWWPI8Cu#tWg^SB4b1!lQe*w zs^hq%IM`bE7wbcq2Hrq#U68_5c;jnEv^ja{N3LU^r+3xKgCfD=aLLLlU5!9iH7g`Y zi0V?Bg61A9GwQzlP17O8yrAZYQ&#pqqj$I)spclFy^N-vYghmA^HxaVj1;rpuynh2 zjZl}s!Nm>hh1R!Rxu&FH2Bw76tHOTLc=f}9vf=nLUNTQ2PQKr*&OHN*%7B)o<4|xw z#g89o*u>Z@kH&AGh1JI@?s7aKB~Jm@$!gF1t*p=0RtcBs{ipxFh#$y~YGoxrf=~&y z)x zIPRY4ar9busV%X=BwLi8wPMU2uq3FGX-iS-ZfyQ!RyF^Xn97-VYudV`&!*B@^6W;1PxVVuoiRez z;jC?6yeoTg=6?yGPSz}&r%->ajl+e0NeZ%th9nN*F`08$xVP(zwH3&S*@YbpW)=q! zmD;+VoBdB8i=~L3@!Yr%EkWD}dnnT=3`CuP%Vb}>S6V#J& zSofkgNl@CNQ>$7WB1pJxO>7F*03PP&2e8@VkJg13f|RKEKyeJ^h8eQ+u_-Fjg>H}v zo6aA#iHy+7VS}QNM4(LLiped;u?NOeNqd%th;Pm6gqXhwNQ(R#eC>XdOF^0O-l_3Z zD?_2Jk=h34f{L`WX-01l62ODey!(bMk?9s)w#5mmW_`%TRhOH5jrxs_3vArx&-WIn zv^_-=SszVe%2-3;kraHAHaMm7n?<`RDS}*k3>A?n$u#3z4z!xWlDRwUjHsUxmstn5 zCoBTF;p~20!b64=`*b;CrvWi%{P1W_h9O{*f>4Q!(ur9`Z*&`w_do-7Z{*T?euoYLdWnX4( zIopwx9CKUT4r+q9YWWIJp_ELkEp1Vy25w9GnJcgNNwLqrC6kcC51wRel!3)G8d-j{ zjc=rt4Ny)xA*xU*&P`nK1&$3B%q@uYVPtKJG42r?VNV#yuZ81y&4_Fpl@t_#LvW>h5p(BI~^Nc$X-yfG>Q8 zEq=>M{?g2?-%+3KQAecNUy;dywkeRABRT1flD1F~RVIfB72?vm)e45aA?T>3W?HgyOa|v#z2O-M zG5DViem5Wkcmz4S(uSGTAI|dI`uRz=n_R|T>pu2NSQK=Bocz1sio^kT7mB1K z?}Swgj~&dONH|F0-*JZYL`rK$n!p=nNAdY+wyB-*YF~bs`Ej=*~ z(Wl>8WC95E-Fd2wwk*8E23=B|r3Q{O5h{9{k=RrwCog%&`?rpJ?G-TH;4IB}I7x+V zXGa)1fM~-2U*!5x$r@ydHx*_P_XRV9Z7=H=90*U-;Y{e^jnvh1^f*vNqdeFqm(ygR zd3I2+Cq6OaE97r~t<$mtv$$GYTkVO;!`&;KeuTK1zKhVYi_{jttF7a30?5-f6|8@x zKdA-lvMSwof5Oxi#INfQAbMM!^@5)dPHMc9`psg7o4)&f7HJc_*KDH5e&v4=^qTM& z3MaydDP(a&e3$6DBKcF--@$MH)YTeNi zw1P(DCd#T6dGg?+vIlLMDp@L7U~DnTz#_9!XKM}yFaNURED8Jt0lv4i_LL0~efb6j`9 zHy4@N{O^tXOEwBZd5{R7&4K~7iS}b8*syCLiJSqCj?PQ2N%HoD_v6LWL&2(DD2F)1LD~>yg&<=p zmclL2AfVYl@m{A!a`ZJxeNX1tQGc~YA77K@Pdj7N2#|Q~uM<)WNTXEc3Y$$dnfs0+ zqq~s+=GV|@kQhAQcgoSisUr9Z3uFqe@jkS*SLQmf^P3;GxE|k-}FX?33i8X{52H zwhL!K4aqbOgy$R?CgRLor9E6=~~cJ)@mL*Ypt%vd$=IbD3~r5i7sa z7c(fzL7a}1#@JJrgNU?!T?v%%>krh`zs@5bU3;f?|7Ygv74Q!MsQjlJOM-v8dDphU z6iFm;sr>5F#>J-J%ZT(kGj+0e6hD7_Z|giD2${^&2MHYRwU0*S#RKI8O z$r}fz@x9H$X_@ZzcOuLs*%=7+PiqFDr7$tC9X@Mi6+l^&0+og({qdzSkfVT41WKBd zV9pOJXTHPewKw+*P4#}ajO5?CzBmfGftfEPFA;i^gP#RC?Hj8}+M`)}n{{L;H5Vfj zhWFh!@54!twoTjLpW?j1il=x22k~fdx&jLkHAawSf#);|KQvdqa=S=tFgx#2yU^}v zpt20;4NPLtsp_hzG?U9h43#a~!rc_}e=0C=dvjRfb83QKOEo#M@an_heSTgtZ@b%Z z6L}Se2`emQlr=~&A9#;EwhdH6t;^;7z}1sZlBP`#56*%9SthwMh<)81h*YHgT?IPI{sP9x-LZ# z8TdnpKUOAje~%=9H$(Z$JJ?5zS5Eb`Q>j2Gf=|@4&CG1cy@rsXLJaoHZbYya=nKc^ zg~GA_=J+B|##RXSg>Dr=tG9P~WGU&hi1PwdLPbF7!mClBoZ?sf9R)GH`VI@NxL7R| z2o0JfwWj34v}TO_8DvW~bTVZ)37>XoQkCCn!4Zda#LdGC$}%0${!vJlud(%XjSQbp zdcK28KAn6lM_EV>RiYp1rDhI3I)RhSTVugyrq^-Ep$R}gxpB@$I$6}6oJr9Bj|8fK z`vNtwoS!Pprr}g45|MILujdyt!l!5WzAi0UJfB~UMlq}*(`MS4ref5HS7}?_5cK?o zo8J?3+621kv`N!kjA62QRfj)N`qAQ>=0npn`55ZM#Diaqp=fz+5UGb#gQ3yl>06BE z(LbzPPs%itF5U}4trjt=`>vvUG?4bSL}1_;8C*2yA=>dl3f<=?Ql`eHNlks*O3h#f3EfKU z75nA^g?#=7DD5yBnCijrnOPkE@L>}C4kL{O=V z!JPngx8|G-f*aaWVQjZg+mcK}u)B3+UzpYp>aN7`a)j-LedNklNzKrqGGzC>h2ZFN z@bAT7J!v9wjk3fZle3$B4%1VCf9S{mr!MF7`?>}5<=56rje12a@|O}x^-&}(LO#iQ zaE4(Q5+Pq$M@a*?>a{ueVd5OlZ_7>B@71!xD54i-yHML2H1=@=nj<8HZ-!330fR)Z#Cm>3hy zeSY|^P(F#(VP!bW0H`Vf8-{;OCuj<(Fl~>ooJGm8F;<}2}j zLnQHnldrD^qP4kkW5zQ=wk}QHxZNIH`R>u_(lhzCwO$JnS$u>xQn7E6BxmcI*w+NODlaU-+0kgzaun05ceOJ)Mq@@UOe6D9W8(qJo5H?6Za8A45ax)T z+m#W6+l6#9se1U@80uBaR*RNNq_q8KOTWtme$&p|Y_jowpTCE^B)ZlmD=Kw{qrVO% zf$2TOZUx>tc|_vkKCMVGy;2)XL++QXfudl1DA34TMBp}+>5Cn9(_+jJ?|256=$$H*9?XMJgxywoKyEDM6$0NgQZRRW-ag#pSyT- z=)!LT`k~74xc~hzZPP)yWk&b5TkU;!$jeX-8OW*{CjgwYvvI-{7(_}}) zJ<(q{f*E)c3O{GgS0#u7^K0RuM`$tsiItRi`Q*T)Ze2v%>cFmSJFDx#`0G5hMk6Gs zvs_lt7-*GB?D5Udb!^!zw0oc2|87-0t1bo(^=Vd&+WLZ}Bt3wm zm@QP6dC!x+X(o{4xOvid^R)N5&r>yiI?L7PYV!wLnkL)>!P;DodvORzG1amq&&!k& z_Kn8wzW^~&lCF#I#>ma)Qph$Huf_iSa{&BV6B|2-k&KQHw^Bph!c~YnGg|@1)1i65 zRUC^e4ay)1K_rBTtyOYs1OXUiiqX;NVn!qJ6SR|}92r++k$Gt>5lX;UFLDnEZ~7&r@8R1>nM z8ybv6F1Uvn}dGrd{K@dQnv(&y$+M z^Lm(I<-?_^_0SF@0dc{36cFxES~8lcwgfwxIdNhpsFk#CMPino#N+69IV|<+qm9G} zH%Vr=ISu+OwOg2K=YJR!5@q36sy;zt=hBI>(EK@oS zttmwQ#e!H&J6y$}x1ka`c}m%W$`oma6q~{YW`%NpznqU|Wx;mIbSS~keSd-6+f}wR z87GBO2pyxS&^m8sUu<>Q+^Nl- z^A+&x0-Eqt`7QKB7R^u5AO)#Uv{pMg`Q;Re2za)p8BrYO{G5$JOSQB+8JY;sBztwo z&=mo}G!YIP4lhVarjOD1dDX7cI8CY~q~vg-%63RnUa+YC4+)QA$QmJA0KHaii3rIp zXhMjKG}UwX8c#yQB3bgo!n-i+rd&^t8FjvJQD}^$vkjswrqYoRVy$_kyVRnIZy? zv($f!g-j0hc{*Yr5dF8n!U%G(UOnOEMALqC)8FL!8RG?rF`iN!?a%G;XIpTHrF12s zyI~=$F%qs$V~P7!a$S^X59N3ES%0;-QdT@(xuSc8zdjA7hD8FQu!EWtSm*q7!}PX4 z@3+X~uG#M}XskNyIS!p~-u}37d)zAtn;vQ>3j1kO?vu7*Raq__~aoFd(m_Il|Narr2$Ph*?G}Z)A=WdH3)d;X;r~q`s zZZsQvAs?7TC$A@t7gK1vpc0L*nHFP1!&Y?prfR}8?k$M}DKDo|3Oh?XE>p<9Io*rI zC#TAnrd)e(w=DCwVD0`7CrsuEuPnZS(hWikm$fQM!;)0%lvB3YNU1%2^9N_#!2P{kC1BZjr;Mfp4 zn5bstd!dOn>hquusWkEh-m$`J?|gaMsqfOnIQE5bLnf(c){tgm=BDwHqQC}!f^b~x zk4iqcZ3j^go zsd0)g$Z*pfCuB#Hg7g~l7~cNE(1;=>n_CXNFG6t0?r5QAVo|%n+q|-mQJ2)||DK9S zqiJ8%7?ppnL5abzb7xiVU)abd+4*R8(tVd;y{fa{vHgwgO)S|(#@yJYU%=GV-U>0I z3kJ$)vjklbEb0&7d5Pr@)>A}jXUP*7)$2lwh>lt(v#}~rS7U*)KJR;qhYf7}B4_*C z!IW(d$jWP*kUu~ne1(Ar@>8^*a`D@KcFX7EuEokU#~F@HuGC-eFU2&1{cbISdNvGc zzw+?eN4V;g`6YdOc>1mpDyD&w)yo`yb$pgQ5&3E@!jQF5nn1Rn>0<(SdK+udzn0Dt zbWuP~XxWi(ckrgBv|wwNKC<@L4XR?Ox_@9{1xs;zC zay)$+@tT(n%0JHrycB)J85)1}dr$Al%NNPSd&A3t_3aq$@ITg`hI`OwC@SiLbSAaY zb0R!NDXu*A_VZ`&8%%EEUr8P1IYPvqu_~Iq>*Z0C`9{-XPI$c$sSA9TRjh8+K&3QJ zI-ikjKmc)up7*dwkY^m1o*cHI*jJS)Q-1)bMx64&s5s5ykZYrX^2-cf>jWfMbTBwM)7 zRAyJ?Z79~6UIuN9+jD53LsGur5zV?9=;}hmBljL1gmsGB85CpE;4Z#+Z0F#xf zeY*3w)%uY*dq@SRMcmH#(kUImLM50uMOL7ff0*GSO>GW)4B#iZlzl)-5>ZdUSxWQu(@9plt;_PMiHZnrbDAYQBJ*hs=(~#Q5UTL#e zD1jN4Idx=7C#lS_aHEM;@(-%$#kMZMzV-$4mD=s_%WrQ!qt02SQ2K*9tllBM$#xHA zJ}t zH?b7`3EZ3>8kiLFDDf2q$QIC(WTv@ZHlrnG9)8pV(C~o`zN8PLS}$LeZ(Q85Stf64 zE`pm~1}HXCt;m{p!{Y1OGYH9KVUx9BtG4RrjL1(KRg@rQy~Oi`0GBqQo|6y6vn**@go`Cb<}C;8wBlC)N3D>{sacznQC(F0 zGTiegzweEp+RWYG@s==vXte>5-_T3!{^@3xTk=BKI3YgiFPC&=MsWYtBVU1X3VA3N z5R!fKD&a)LcEBf5&@s!##1To_H%GN{ildlkt4G)T(|8Xf7o0sMK`On+%OE5{V*FVU zEQH!){Duj5F)53-7xJ58Gz&o;49ld8j}CIQm{PyS(C^0>&p0$>F;2kHcZB5GFVkO5 zYeZv6E;1?U$;c8NdTb4oQ~d0KB2aN3usNm4f5)iR;FIUvzkKaTij26=cu6BkdG!); zeRLxeq8KL;6Xe(3BUT}OXhWfFu>-44Lyexop+CE`3pPqKphOOW9dB4#o0}m}KA}%~ zqR!yfLXm#+h2SP7u4_h(BcasV7s6yOP0k$??gWLtez}U2|IBL#ko^MsWW~I|FqSfN zZ-f~+Ys6p|pP0aq48i%%m*dy5@~?v|X#(#ViDu3Q@BBY|JvG7QvGJEzH|bEUcV0wQm9v89Fpj6)QMan^BD=e&RWRa`XS_Q2mF*_ znniJ7z#Rrb=CelIOBtz@L9{^9(Uc98T~xHM1h%|54TGjK-N8Zq5ezSG*(8euONw|; z@ZNmu*^d%glR0*#B4p7B>}e;zm?q%O4f zvF2XJ!`wmT7N_sl13RC+2Kh9@1PO<$ga;|krd!r0scnwBR{Y_?sNN{co-#aoQ-MEE zOx1Oq?JySaR+0pxP-zdg-E}Z()s7p4FBwC)sTP}T$(mWRyTIF{QYOb=6wpTWQ=+Um zFh0LUvYQT#4O)cSnP9Gjv|O_>64F~f-`HLM-nxyLHvRpOwZ`087XM*sKc|;>uwSBb znj~jH*})ChVVO~L7wQV_S|lI`c1I4R)v?%B-oDm;QH-mGx`jrS8W?MkGhCB$G|xm< zYB`?9!)nG)O956Oe$QYp$N>GV6V&fs`se2U9A%>KeROyvhL>a>itTUnE?$YZ)y1+q zn|8m|oSAom8CLqV!JOAced>DQn)g?{kPgbjFp0!F%9oKzVXz$NGUjcR=1 zyGFG&q^!)T3G%Sp+!=NZ4j$3Cby)UDqI^r~dj~`~rE<{{04<7E<+ySYvWDa^xUV z)MgAO{Yz+=Y8pn@c^V!3A3JTN>p}m1)1WxRDz=0&lDcRl`*vnatJl@HuPcCb(AxTS z+>JjnauM11Vn^6+J(fwnQ%!ZXrTN?7KHfNY&mc{njWV*JOQpG8kg@G$01s&AFW2x@ z+&H-9c`$D%9Qw>_OZ>{)2V>W=a<`b<%(Ll2C_?ZvXD%b1gUzEN(LYYV}w}>9RVf47|iuC zZb3jNF6XN|7<})b&Up@?gAxmdMR_oN&+pJ#76x*4JwzO6uX`$I3#+Of3z&tZG*Z4c zgRSYS5#>9Ke!ssfx~7$kV5A=Fix1^HK39}f2>gaJ&&%E3t&mKUgyR8lQPvg0;{ zkV;A6bE$W=#cRZTK3Nj4Y&f{<$3fJ5pn;}&Bn^Mt`8rVN`N=B__4ab>s^z+ai!A3XxD-l9Pr;`FnwHNVKnLL>MD43s3{U61vAdr zJdnYpWvi=2!SM*?=9hzi+(vxtxcKj*yRp%^#ha=lip;bOy{d60u7|$y%2Q6i5TgQ_ zM^c41D5DTtz>WnZO8d>(hWEil>hbl4`pJwtwNE^Y1ZomRazv(-zbLX2pw%YlYJAB zea+b`8X7f|Plqkpo*gs)$?FC{WQw+|y?vsPUH71?FDl5z&{HGC4mJ*p4v75ICgozy zB&UB-i`$`+bGb=H%cp$?!wPnSJRvkaBBePLlq{6!4E#-Y-4FF{CbmJlt+xLpsz>y+ zz+7g!_da!G@{2pKc!s1iO_ZlziVx70$+9N<7R&LcDUJBl5?gpWaea!Ris_7~C{j6N zxMB8gogRuaoQiuy1*kGCZw$F8IV7vz=s1!q7TiFcWLt~}3 z+zc#23YA{bK}5i-lr4=vta_2M{$iTi(yel>!vpV6<^Yp!XR2bo3u?B2!0VSdOI z9wvETfI*I#oPMcm7V435YKmr=bRk%+^H!bDzNI-+iKWzIWr$<4K_fn^T{7gORsWQglE!4;Wy*unZjbxp z50Z6x{)-O*;HJcA)TO_RYG1{k<}Ws4yyL@yvEVo!-xdr6`chP3h|k9Bkl|6?8Eg4d zsZ)zrlyJKaN_K%E)fwk9O&37yMj@|wo=w@_Tp)47+%8Qle_hGV_uu?yYI~5J=8d@5 z+O$rfdQUgxqeMEvOLR{RJjBSr=G7R4pV>IBvhQTghceg}d{Lp8KWb7dTvM_J95pI3 zzpTp(ygdFMWMY$9X`lfK%`k&d7H~jMs{3*7)`gj zd;I6l@$kdWOSJdc_XNo-tC^9T{2o)rd6o zEEd$ak1YQNFl)sg`8#HiG^>h$%NnNcC_l%&&STkcmSt|44p0^+TKMZ_MQE*b0cUvt z$(Xv#&3@Of_XrtiX!>~QI{QxX_%q*?ZcP0|S&ay)jmn6f{z_MFDs(*$pF+sM9De{N z4xwm*Ld$A%^+u!l=vo7T$tz#=tC7)VyL*(O-JA9RjDet&BF+-GKQw2qD+Gx}vS3faaZvGpdm zj0AY-eXzFKYmpE2xTuocory4p#_B7X{Gn$VGfI>A$9j}fB~WW54WE&oLpw$RGz|B( zXM4=lg&<)L*Cv2xuMb|x(Y#pm)~=D;*ap@2W@8i4 za@*ntW4~tXDSSrxBi$yaO9=e1Bh1Wfa+De4( zM@R}3#~EQbMm#iex3;lq(~&BOg zv?RP;Tein|nI*Yl+>9Hqmoa|U0_8=Iv>zlFgWKoL!v}x_#r2J*bsn#Vrq8$b8yimj zOY!HJ(|;=`8T1YCJp+2b60>fX^0Y+&=VX#7jUbg&Fg2P}LA{@bs!~Ty|L2cyZ0xn>3PQ0PceDNr_@C|<>ORej?T!9hS~nsE2;tuL)&0goAzHUHzC+YE zPg!YyEi4*vYf-NuQc9KxB@0gRNDW| zJu8FkE771Q;W_2xIhW!Zu@@%x$t8BW{=g7;CK&=#q0{z+af@213e26B$Ew?uW_&cm zyv=JZT*SwwxUGWw#Nvn}ujiUgpHt%nAZZti$%@peSi2^$ zs%ILZdIq`bd%rN~ttVWmWW@o#e-9V=S_hW6;T3&%hLl$dROeE!eOrcU&Vv~Ty`P%L zU*y7JLl!?H#+-|&klapB*PGqy+fuV7+|m5+$9tN=INNdZ`RYGsv9EUr)) zCH20?EcHWc*9tM=0X8=zOk^@Uhu#&M$^@Ehw~Y7ra_xGgdJDW3JlbYn5J&__hDZ|u zQ)awIdb$cVz}VQo71bbC8@yRO_K{+I9k1j|@cbKJfbK!}Q?}oplnu=~QXL4~O^RSD z$)73|1}rK@EA@39RGlwu6Ts(!qaXUfsEu=Yq`xm$wvR<0+>e|70g1H*NEkjuBw;?i zRpcX53&^)f{n5QYAJpGt2JUyQQnl}n;z#4ZURfq06Y2+5Hc)#ya+=xL+9H_3KBWX} zvLc47A)I7;eq1N}*ZKm}fzf`x(P*vFWN3pZaU#00u2bCv$!nsH8lzM5t z1IHi!@*oU;kQEw7QkKY#U5WNx7Ypo1Maia`Dn)y(_VeQzeS@lv`EpW$JU{4`-o}dDn3l+UY{} z;xTU$lzJguR1#|Db7(m^LZE6wO2H7zvhctHOLAy=bH^P-^!+CiC!*AH z*>XW3GX!b^JYK$&??Un_55i8dFUo3SvlHRrbq6iaGLT7$*3{LQ%aRp$cjq_?9lJOE z=OOBlNM#PvuPcx15Ij_l85eX}v@s2x4BDs(P`({AQzA-`T%}Rh$|0uYiQ((VF*I8H z->6yfkzy9C_j$)TA{h?jQ%Tda3Nw@Zl`j4-4-a-6kmx)@C$&d8z)n=D z++Fjf9V16w_eIfyK~^C)ci3?tBarn-rnLs;4ylHjR1DL{n)Cm z3_?d*6T86Q*pMh+NS7oPCkQW<5rKFPidT$mtr#2j{$8W$`g8CVNtDKr zP2p0@kJH0A*GW8MDen~*d>FG~^@hjk?`9beSXJa%2BO1+@iLR_!TZ`3$5bHdhZkLv zm#4lwoQ6Ng*T`!X>y^y+M)gTlD&{umVH5?}1tWmg^5N`lG`eBP@SJE`Dx&_p6YvD| zO7sP1!=HIfbt{x2H22J$9GVog&gatu%yG?M!*v@l_*mBKk*s{zO^@c}NCerIMS0)` zs#sLT(-osfNA3=IZ+%G7muH@+gMXHMKE^p+A^dp3w)}c1Zo>~J_ zZ8Nt8T%3wk)}q621u=0fzx_8unAReN=QCT|H8Z1k0rH2;>Km=!jhHr4kY@>5d{3rjCd6g-XCLe$?=_ym9KDEl z>(<3KMBV_K35kkfc-ONMJbb13i5?kijAvY7zBSEmz}6{fd;N5$t8s#6iWJID$(%)}sE3IQ5# zht-`ILSTw=ZTZ7#CHwJnK$MgzsXy<|Pb?U@@4a1}#fr%BsZ&t^ITs2Xn%uRuwbK2f z=q20tiY#p+|Kb?4R-`@?;@06EU@LmzboT*$&sab9=a=`vvx(G>NfaRmstvaSBdQUA z-vnDJmx5-$h)Eh7O~$t_3Y$`MMFZfA@@FS+dqD-KaVQyr6QXQB$!}-l) z8OM0FGap|1b3{^<(IPRn*lO7uV{OCP)oj!V6Nvluxk4=4l~*M^@p%YS5j0Oi>@bhi z0WXJgYw$4itdiI@lwcMqElo`q5Mp+Or+h?;Uq4D+_G#}O5UeLt7c51HCDTc3)f+?O zLTpbmK?B0i2To2+h1RM{L)Q1}qcNwIdMtLs9Op-7D2r1P++u>Mkt%8M7}uBENhnSL zrQ}k0xH%OhGAIZM60Imy0#^8S{Ao?#gH%NBp0*<-8M~L^vE_3B?O|x;>EDQ%PHAHn zxm>d@bip2p>?-?`!1{b4TxB^I|3SA%T{0CUh!^1fY>8+nCA*L#Abx(0+CnZsC-h|CvRD}?R1F* zl6=PSos13m-s!W5))MWuXQ=aI5L~6&c<>vSAv;b+&RI@>quv;T*E4dv!D_Snx7b1) z@L!v1);qwS*g0xSR~A`OL*i#CT@)JMehK8U@_ZSxN%}&qXNXmio)}&N0U#+Rk#g#j zQZlSXKkV)8b*SF3#OXXDU*HfG$X}1lQcEY+YF>JHwv(N6a@OUiZm8^rJiIK%T#Jew zSnVY(Wzj&-N(4=YCOJnU*xDf@V}WpZdS;P}kPFDkf60Ee(-M#37Np`rdz}0W>5V1# zApLQ8*I?^#VKE};f0mMebFumBMA#@MS=($qN=fVSplaODZ``Y9NSV{@`uax0Rz0|Q z-u=YbL*wID4fT4$Fgk@nB#8(&PmVf|j?#ZS^Q=L6l}MI9YCmBAVE|BrVT98%r{+g% z7!fcbSX^CyJc8GU0UuG3RrDeiRI7;r?HQjw@=d;?pXTOI9<^^D4~9=p{_VC6SPz+oEMXe?_ zwzxFWE_m_b^7$${&|9@?SEYLXx)M0;$_mnb3>7LHR%`~R{&f0PIyiXe_L6%rc|O;k z^mPyhpEr|;WR}zIeZ@EQj{1MU+WQnF47V~q*};7bhg#*dQ>7t&O&XOVjz6TMk%Z;! ztZ6ow$KdFmpX}Nj6Z?z|5B9nEanSF2cf=Tx%Tu3+u_Q7r4yC|?%d1k zqICJ+aArIPi2yjIrScE4G1DhonxxL#%rwG-<}Cn<&gWfui+LX7i!t8JaQj(`9BAMZ z%0L`AKm4^W|7(qJJsD@vD2Dc_dM5m*_1eP zrKo9AoeqfLn(T*?GZiU6LM!qn6KE`x2TNHS1e!9 z9xHy;H;cBIiJXFd(8VaH6G!*R2aUndNyQ53*Qv*Ku3pdY4P@1~9Y^ErRot;1(?U-S z_m37n;|Hjq?^e)A&?nBX!CqpoNeB`Ji8YSoWZ&LLvUZ*|Iq@#?$>@!p8Kgegn z{Vm4AHC=BJIL0Y9hR?p-`3kiWlv2JwY%WM+934)ZB~K({JpVQ}%Jwl$qx1Fu;p#2e z;_9L%(WY^CcL?s1;I6>~1oy_>U7E%nf(Lg9?(XgyECdbi?r@p8&&>Va`xDN2_Fj9f zs#;aY?wRe)w^V5#Fp7EvimV>7#Wm9dAHu+sj;R|fWj*q$9Rwn}iIwwzyZ~VJGMU>= zcFbk13LTOjEAaVh8d@^<%vTQ`-j5A;c3ji4vxNba`~#YY%rJhemCNd?b%832C<@p} zS(Z3*I{*Kss^J$xX;Sf53;JYSvy!k7E7488FZP1zmkHno1jF|Nl2rK%zF{=Qa=GYcZ8x+wkh{M|bb{ z*K^!6zSOf(2r6hTZ5ZSl@|E}k)^BUg=oL(c-+~M^l4SgAViS$~0NONH62Vfzc$1-y z>8LKa8Rcv&kWh3nO*$w1W_m#D@zLotMC$b|xKSqH&Nw7JHzfG{b6S)(;Fp%8fvxaX7Wxh@`N4m$2MBQ!PYsTJ zcH9h@o69uIYL&gTXgof}1}iUd{|}_+IzhxOmV*(GP!NrhHsUOsh6RqsyHp4TQ`)z& zl9B+`FYa+nhT-gafQ)VL!GQ<>$zLO^6)P+50+WVqM3a*f*iZk&g85oS;a4EWRGxXg zmg3BK#tAM*B%9)ewWHp|>^8PL!EG;HDA+>;4f@-^l?s-adqvB5j;sP4=*DWvKgZ^r zIfUF#!J^>r%p)}6oZu4lC)rVK37L#W8+G=u=V^i&0NiFmKD@$;oxkNBD7AU*zl-J| zubSlQe`SHF7pGKpEUzm)OTKsd?W3kK|7#7kc2P3Vk0IuPP~AY13^TRq65G{o`5%drZEgLCuF)Ago?+S#1&4%I~ zN>NCNi>emsR+wm#2$BiYezj4AWbLcw)xBn7?OJ}eUeq}Zr|{u4`3>#vfkb|sx-zY& z`G1E#(Ucw$eP9pL0Zhj~ziBm+G^w9NsU!cm!i`!y&N~zK!p}{ZTh9IOb!$Lj@!XC% z=|pl!i1p`>*dj#X%xw;8Ph)dam$wIp1#&o$)XxdNGcjnbrV^PLgqe-g zyZO$gb#UGv_?%@V(jp1jL}~0$mSBv)=%$tM8HtH1y%1v)g%z?KSZQWM)Y9;J@f2!y z6ham*Qv>eOGwpL6aB+HZnJ(6-i%C_q(OvMm3xm=hrgk%=X4{=%y;eg)-e$-7s(#xt zDa#b^@~?k>4meZlAukE}-B4CZ?KITYp>4WioN{)>cx&x$^*^g5j9WPw3;%sv`#^|7 zO*t%QOU0ftx*wGf2}J0a&>U!jb$(K*vLh^TckKw|N=cMT__Y6-v6GBGg1vHEIe4M_ zzq0{_{N}E#QPp3F^q;UJA*ic~BcF*eaudR%Wbi7_L|Qy`U212Zo~Njw+-NdzLEY@Jt+5WUbt zY<@I(Lo%cQ%PdY|D$6IzH+vVJSJx7rfnx`7yllBN&k^*IWNzm&sa2qYRzv*}!J(;u z%hKN*O?(?JOb`Ueq*kL94OKunzS(Z>mcpS|wuuC*WYX#erU<$|x>d_V;Sz2{Sh;$5 zd#>>~pmQ#VLW*H1Snb(;PTKsUQ-OCWp<`emH=W~3{{#kL!VgAvOT@IFC=S5mXWx@QVDc3X`fZ}G2BApW zz3j!9fkw%X{4>8cCr)xMftDat;9NlbE%6f&LJbiB)r7x7t4U!SN{6EE!nVNBtA_k_ zUKPS)k)!kZlOz=F$@!L?hs~;x+UpAY4K4_+5DP%tgW-+X4$DJXFA7{$P}9H^VWUDK z#t2((As)$3aQ~81cy|IMq{^VI7M{o&qdV)0B~K1V?b<{bNcs)`CvM)*e@6r^QEDtY z<~zrAYHM|48e!vu$*1HIfS?&tB~`F7f0$04h#-PrE(w3 za(-W}EbNftOi^qyy{hPy($Z5w)a=U%Nu(;ilr<9d#JubNP^GJEDAa3C>L@{tICHbm zTI_AkqWJ%OkeCCH8K6M<13$@xdOX?yUoop;sZn!azsKHr@P45+kmquR+sWPxlI%!i ztoqDlT$3|b9zr|*`YV4->T4|Mq}>x@TiELu2^OeyxN zd=M3yK5Ql=7OXu2_)^48m{2qgLdSSRw4-JS2H?d#*mJwQ2VezY@KH$G zoBWyV?1gs)b8!QamnnCwrh-~A$=LJ+f&-~6LCnegxltKri^c&9zb0=^w!g7|N6{m; zmrl)%>j`O#P{_b9j5SCzR45;a5ulj(>SaPpDTeBARGa1}dqKPAZIp+AaQl_YXsC$n z()c8BCF!NiGn13eC{JOQe7f9-`$w5ByR~E3wr^k>)`=mpt~mLxZGQFLRsJ(EIJ_oh zb1ke6hIzw!3fwAL*_dewa3RtJ!7c?o4Yeh)_UH>{1qYYu;O1vsXKiA>hxT)SKW2Z@)dSZ#hccnN8A48cVzk~ zgS1`p0?c2beap=TGvl{PV+Vg7x98mZulu`yay(z}yjiuWEg$v*v` z5W5;XP`gX}2iyV^o^eGwRZV4;GA(A$_lP^9hbELNW8XHUGX)51sW4a$ZUvVaqAzjM zF8mNWfpdx4={_J_%vPPc@{xh#{4=fD`$Ia-1LF!~L6wKGJMMpJ()$x(71^`U<_93o zc^ZS3`o54wsbeo#0;o6&ZFB z*@RiCGk6blnMT}Zk!&SW$IhgkxhnVI-~H=2 z(P~_MHmu2$-({4cLeBfk{`|{}Z=2ZNn8@Qt&Mj~Ggjsh!*34W-Lqn25z^j`HbwkkK zF2$62nK-hd*reBv*Qg&o84g|P>t6e$1hA7@T5l~`O9I;~^%jT6hVM^tK32l-G+&KS zwDKer3CsYPLq>ojWKR9xG_(h}5Kc286ZfY1)zyzWVIfQ|ot2mfGRZ~>($|H;;Rw0L ziIhUj1rcpZF46F;G|R~N(363Q4`_=s(Uz#E=961xm{;cK{lM{Ptm2@aSe>>2_p~P- z!{MSw=_3^fZT3)?-vZtM!nRw4g^^NBQ_Kr?)@bbz*HXM24h_Y){YAb&KeN0f#s*9h z5SS-!Gwyo+$;}N(lM##)v_ZsFj7D4xA^v8A=Rm$9aPy&58ftUF)%DZvlYsmVRp$m$qi~5B~mGCzQo15`QzQ|1s{~7(r>tR0dEeWU@I^wLr`$ul( zR8SI_v>o!i0^069yC@glPiLY7vq)=orJZyElmz9fG z4$b{_X_+Ei&&QtfbNEd6{Y8IVt7hv%oEng^((s`Vf3Esvth!LZ;|ylAc-!xKZ!)fa zRqu|8F|c{vo9Xqa`pp__4`iJ}-|q(?pF<5TKHs00RQsLUXxSN0@19y10GXJW4#y4O zoS)YAh4IgDM81Y)iC7FYcwTNxJ#7Y|`~RT2`uy=J(rX(K+)^mp12{13z9}bJj5mO2 zfbW}(Q9y)IWAF;>LMa>rDD=VM+J$E5jxZXF3&x3sF+?=fUc&r%7M3qsIEmTOL$o8s zfE>g0p07&4?FfjF_hNAVX?yHf5kj^Ct>2r*+!*6Il{*o(Ik3KH*19l}`j*I*=q^J; z2U^X>JGR&mfRbaxtA&ISK^xX!{Auey^ek7~dV zOYz(_s}-ge&EMrvtl!xM5mkS)+bgydBPI?_e1$gIV5BA#v4?w!ao-UtY@T7@u%~(( zUwXd|$XBK3VKlwj%p|Wg5@XqRm_>jOf>V)2{r4+$lavA~l?&q&v7ek?8e^C4wM+fs zUylvt?mL_JtlPc+=)yoLJ`x&48KRE9YxIn$#EU}%7`78 zL&S$X0oOcZ11ltDLve`qRR0;g@4E!66I!)VE8tXR(Z34SZkg8|J@tHu@-d)hGOmQ&T+}8ERVD-$ zV9JGz@H34_gie%d)aWnx5CJ&%=r0YBHl^-CWFS_zum3#1#C^BM^z^avz z(vrxjs=M%3*!uy)yY`TH`Ws2^tpEM_T%|yDk>P7H+vTNz*s*^5r4E?eTyWyg?GJF3 zWcMX;H|CjS8}r8W`l>9GB2FXuD|^0 z7czw9&DBvTd)5suUIPQVlxoe*bWm|T97-7=hp3qgH>|9z>|`iRQ6H*U;;ZQXvU746?1K~ov;9L4KBb0CMa0}uCLiCOIa0?UaoYOu1U%%HZAVpyZ z9$~WFK>FwKO1l#%aGDjNy~3|aj70nU19)lb^!ELMjM~#W8%A6JG4M^pdZ?9h6kH3k zOmwp3H&>jqhizE^F4vNq_2B5U31If%dwe43EgmAn@Gy6G$7F_gM`8VH0oF(@B#E?5QT&88PA=ln)SQ=HN6q`fSga_M`DbQ#^z0tI1-aIAM{x%K&S;n=JN8f( zsbbxA4j997>}8hUy7xc7pJPc=V9ozP)G3y)j=SHE-@C!%=<=gp)LQrO0T=Lxac>84 zCV5x=!`J)&>+~Jd1fnq~BSR*vE1XWNed0GIP#y64Be)&A)9Dgt_M(O>USWkC`39s8 zdSB1Ol-RdkKCgi%Zm1odLYOe5(5Uz`If5MD?9l^$DuDtqFS7y#%?WSyeJ%>rTby2ZC$hQHqVWX6 zbkhkyp8}@5G$fMM6%J|9Pgh^wbD!j%*^G;)InBK(Tj~`zf!wto!x^CDo4^kZ2OAH9 z0TJ?K_QZW8u!S2Xhrd(Bn%zO;eql1<>5_ktPY68>c;k7u@qRgQdaB%b(mcfX-`Y>q z#`y0zqMX|E_9phU*xa4i^%m1D_kOnVDy0?WT_~P8_-kI&IDS`^9E&7X)T67P_%|Gf zHql{x!yKa&YH1B42lo0s1@K!VvCvHyG2$nW`rrw*=RJovsA_ z5XDAw-M|hJq3M8#YWXUC+8566G-r?T!utM8^Vx6$*q*%mA*%ZUdlGTS&-b?6P%+@C zB;aXBJ$-ueV>{Gy@Dn?nY{D!|huFBN=z}3gG(rG%Pn9W(Dt)uX9x#~0J(7-)YpP+i z4c@McHw?EPM%WSUI>;|+pEg`=UniX*H1xAk_z z6T<2?vSqdYpjAZHWWL4NbKF%>_vD)vbtrO{SllnTWfPytU#7)0LOwv=Eym|1=xgu; z@NO2C`f^77qa}<7702W80+T3<$I~X{0m2VbWtNx6nFqZ{4v}bxx!`gYLSY?FeNi8j znsSPm8{|6(6+CJwCoY9N>1L6~YDgco8v;%w@NGKa+2Qf=nm~b=He*k95o-OQZUHD} z!{a2cqyM!sUBmn4hL530DLnt(<#6hh_^>~Y44jGDA0U@I9B?m5k}LBxqn<9bLYM3_02I>Q-a_%IG3R2RPu;aR;xNhh8XeS^Ch z6pkuJWc0Fiv!bc2WG;e_Bj=)zQPDGl%M#<`7cbR(yFoz3XZGu5$MvY+X+h1%5d4@z(wmP5zB-1= z?rgVFeM*nHX7p%Caz*9)s~C+8 z&26{tNR%xHGoE6n)~#p-=nmodhYSWW46PBzS2{w4$2m2*5#MmOd1+fmm)qq{E~<^} zgiRThTn`ry@XdO5Ej!(FXuY*t$DJ}YZ9nX$iiX>j+$ZTm^{HA+$W$SUc@Navf@b0O z3u&~w#p?6bSC0+<7zp-cS)73Ozk3Oz-0oM1-4b8V)EUN(^QCxJUc`ooHT1pzfbYJq zcljGu=Q6@q{m;%~Bw=4B*(uX*LDq{$9xmm}y=zGBrjM121sf?Q_X01$P(@u8+_kTn zv2YgV?n}jd6vd7(bX#$HeO5#FR8Xh+joVQUZTp|jj|Wzv9`o=(!J&k$!=+t@P#E8% zOvcsM!-MCPlyuO=nwJFj$HpeV+B_*4+0{uq_H-yb`gw_8mu~trTMj1c&vn|(t;I#; zY{iF_D=Jl5;Sv&woI?aE7Un9+_oPHl``N|hqL72?eSSvh?5vU*Dj|yjWVsaq1ACD) zTz{FfL3&jjyUX2w^6G|5u#l9H!CwCvnE+E|f|>6;$+XitK{ZHw$LH1-B*W!k&}?g| zN}j6c3yu#mKmD}9P@!i8b_>dCY2dtVIUdID{`K0vWuishA|4CD)G^_|fQgo>3oHXI z1G$Zt>VU*1_oi*kqmB#z%>Z8>s&~3|&x|9&fTu4~k}dt6e{XI^u}uvWkBNEmPd>C` zM5Z3FxsnRvSS&;9m1 zCoHULy~td^UB3%o#KUl96XvY>))N^iQ@W7}3W_X<28UfkhRiQbaPiNP=Siw6t6XwW zMpU`SV-z~ON_^S$7UtGoYze+*M(MIO&2wDah4KlAg!Q?NJpV{%A0qemRnj>cd>p^q z6{-FST6TsT`I~G;{wSOK8K+W-8B>%mv(%#Y_ys?t^C(gN z7`$^6(7XmZnHf*dxCh4U{?H zt00`fDT}2SR&g>e%rEBDkQ!BWs^^9khDuH_kl<1oQ-S-=Y)9ZD7fRoxMxW-Fe@$j` z;haFJvbAx@P?c&_V2df8N3g2mZpkM>>B|1|_Dfb+pDW7euvc7_LhDNMx9{@wt{L~Kyw`x2VbD#mo-Bk>|5O}UA;agau$r>Fq63*%}j z^5?X09KSI7+`RWOT6TXJ7aOY^ht(H1XfMQ=@Z%>`vbVVYV_ZJ z%6Dd$4g5wX+X$$1&ZoV#Uu%}7xX=yFL+X8#!tw4T*aAChiL(#d z?JzY`(qR88b1Q5ujDyQowf(J^ucglrzNtUom>rp{%u}v0MJqMUE&~SYtH!wC)c^8( zxo06QZl`FQyuZ8vr^)tkpZ%2h@TFE_W{tZ^bgQ|H9uG&g0hqDxd{7-Ee`=6sXwOl5 z*WflK2M*=>FWBs+x#vj^!Ki>c6rLGsu-SAY`j{~mm3i1^6E=8KWG4!9a}a3H=+gW1 z!ob~EP={q{n~>H_UDP@fKYyC@d=Su<@IA|xr~exdYKPdvIc<+o=U68_gEZtk6GNco zkC(yIY%QvnHXZbNloGpzuUD1JJa_u1?N4V9)YnKD`h_WR zl$^xG+2-T{J(QH8YK2{fAN2$aJPSB28e$RLAFFN$S>yi+{cC5%0j~0z+rs_=A{4N1 z*g>L^#2;CVuIxYqyVT<`t6&xxEE! zo+X1(b;_POBv3WHCDt#?8oR8XE4xA-mmdZVt1-GGMJFod*!Rfb)P)a=8uL+t*y(>@Sm zHqG=z^K$`zH3i}4Jm|8KyeV97#XRU=^9lt4)8e*TJ)bROED}R0-SGbA3?&&3I`WF4 z^FdD>{5TzPvo^M^Lvj1rH{$^V)$5Xqm)dtghrPEs)AN3mRcDF>GP^YB0KfXkPWK8d z)Xot9w$UqZ!%-WKxutm0`u>XCIVMcNz3jXYF%|yZ1x?y?n`XS4R*x6zLom_E$X7CmC4nB5il%O7LRA0&koMv~OxL9gqcu zXrI?86F1T_&yrIVZ)A@gKRuuNA;(68_N|C zf<|`f(#59n@|u-0lpChM9uw0pbGri}j9dQhbGkDK<8@{*2m}6RCeOIU zYQOV3^e~*F1EADvrfqCvZ|iU(rlk(=GL)5^(WE!{X3PJMrJmjfs?;#IFtFlBHeCp= zs%4IYXC$k>V{ngT47H9}4Qka)uaF3I1beZiVFNdRVnyNN*Rf9cUf{rDH2(DI6V{16 zs6wfsQsoiASbtQx7>38VGKOLd$DfPp9~o#;+t^^sEnOwn3zWb?xhtXKl8C04y+M7IJ1O2as*>6`4X-u{PXA^a4V`1^gVPz6BJIb4U&^^^ls>r29h9Ya z-pR1M>xWynO`^7nEZ3qHJw~WwX7eb_-r4O}^V>K}D@ghv&b`QtiXM?yF*CFe1?Cnt#Nl^5jSwZJP|B}mdGB5 z(s8UGExuU49NyF)?#Q(UON^aWpy%%B<$tadW#m44cu2A^i1S`$E(~LbZ8SiDQMXF8 zmDvjxH|ZgfaX=5MKtx*ZGIC_U(_x0g?hzU)hvKdJZX`*bS3QqPL0thqF z<={dwUoTNq3X}Vl!P7_hCKI8?x**R;fx|fN^ROE6MT4igp3fsLqj&d+o)q@Ln-NQ6 z2;Q}w=^80Z#${`t4nV0kMgm{tZ*-3luE(BWR2h^XPfyQ^JT{&Uo=z+R0$Y20)5@e@ ze*6$cxZ+#hFv;9EiCr%g>RRhxO*E2li)av(tB3Z^806bDgBEMv_g~KWa=8i@hNQ!d*H=TGpZ>IjoGnVS zB}jGDcZOgX^MVLen>Q%$#zt5CPt@A-1crDPZ4cB*7YB`brS5G_F0KiS*5`Y1$2^%i zmEZ=_5`@lybS9H6RScs^OO7m2#1I&7wF9AAB-QsTUbvN+#9rK)V^jDrc;o;xJ@`Ls zgWTTp98c|8+^n(DCn1lx5JYk#BAE!62yRyFJbbgs>Ab@7l6l&BiNSosLCwi&E}(6# zV71h!1fh!)jh~=i97g_|R&=npkE;TzG9WndF#NXgLspuN%z*2N+doQBuIs|@ca-Rm zw|rXf$%ePDVP{d&ha?bKG$-8x4SaM1=#Jz{DhjEpGi>5#Og}`&B_rA242K{_vTvZa z&ASPS`P}DHtY9R2B(&*N)}X|xL?-K|y6Bn#5hht{(|YmAxXZ_>Y{_N@#Ae$VPuE~` zWDOP~6!b8HGyQ91W2{^3DJv_hi(fk>XwgqU8G4b|3=Mi8_Js(aN`8rTYJtfWZLd*p zg2gC&Ss~!^Ddt=&s?=E*8g@ePf_GE_C@{XwKb-whrZf4bG)wk;&@%GRal5T_;ps3< zCk&f*Xma)CXglUwZ)UmbTZTbEbnaT&k8hSkg1 z3DQA5=X)zfWX892XV&(e>QhEx7r~)1F1FqfaX_{>HY{w_Kh2qYhLj;3WGZ0}Lw#S* zO8AzM4QA7|3hKQUBO>HqX*g&3dczY#>JK)=<7Tff9qYukHJkFa*9MVwcHPLP@BHrx zpoO7E;P=ZF{@0$btZSJCP;)bAf2e@Rh{BukS~oGIBn8Y>Rwu-u~)U2G|s=!g?7VxybNm7Tzk=whg5e6 z%=B6Kr5aGvJ_kDO)m!mb<>~bxgLDxPT8!`|F~8;P5&laXL(qmqzCT=I6FAi9v`oXg zC;tePP7XQ!LOaBLJuFqp$_;n;3pkTxT*gZs2AEynAM=BB+}F_=rFOR)AUF(ru;CMa?8X>9TfUJ-^Y$9I`EDQ@2lrF2E zUoQPGI`W09KmY8+JTUG?Fi|`ms2{wKx`&_)L6G7Ui~~jhwI^vJ2oCnftfthwO~5Eg z8Zq{Ysm5$#*6-2h@t020(|t-}aNETi7qoF+_h@M^b$7lGK~+k4hJ>6v;~-#aF_7K{0(kwS(I_O$o0{ zzn4_YmffsuUY9%XxK;u;S4&4ZGZ}nGEMBsz{Tr3ze^a(gn!s0k za%nlHTA*|oeVAB4aO|wDxVI(#Vcsn7j6kFcaTH7&smaZ(=kC0OU-1LDEvW0_-=&O| z+m5@AfsSJHxjz*tP_#72CjQRUO|V&Z!Nsd`;@rpKO|Q-G+8t*6)LoCbK2)On%9n7L z)TF7!Tw@;jFWg@_{ek^>Ktx-dcjG@)w<2r=)HbYi1&U}%fLs-W5<0v6tkP{J9$X*t zjmwh4k>R{&UQ0@iun?XJYKi}NH{tRQXR82)FpR^3x=aP4tx`?cH-GIr6Uo~LdX%Pd z8{z}kfv!N~4y_H*sJJelvMAZ-K1f{bQ;{ANO0S~q64bSU3|-K#>ZFBuz9=-91JU9B zZO<~^;cp>k>D+5Xw5(+6X$8zZXm~<(O5#SYZ#d=ki)&<&Sz~{z{SGzf6J^lnbK!-E zVJ1WD6}>ToG_3;-oMIoVj}eUBtCC}<+pH|^0UpGbs!7;3>d(FKu%*tGSbpw0g&{xu z|3Ugg7GUKV>2kxj$wU*U9|b4#m2#~Hwg-D4<1^Xrx!>&)gyqMYkV`0oXe_znq@2>z zpq}YB=pI(!`$IXC;-ZxC>CpP%(S=cH3^ZxQJ|%mO^Fe1tMI3DA6EI;r5+q>zQ`$ZC zI7*Wzb?s1huJ;J$yJSzZ!L5aOPe47L_hp5U;u#GGnPKm?ATY~a`058sugQK~F(j!` z&2dm_D$q1@*tAV2cx8hKbksNCewn}#BmX$Kax%Y71SyQM|5ntUpPqCsm2D&P*HB$Q zbNn3mP$RXjo~@ab_gfGsIGmnD>N4J#5oIx-j(^H<7>l*EeD)D!D&=<^IfT$e$+M

|2Ut2Kh$ugzxnFDR}~D_5^+ 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]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

Tx)_(QM`J7s}a=so4 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 literal 0 HcmV?d00001 From 2d0a57efbd6c004c7571c42d8e77f980dcf661b6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 15:12:32 -0600 Subject: [PATCH 06/93] Update README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index daaa52abe..35020de0e 100644 --- a/README.md +++ b/README.md @@ -10,10 +10,10 @@ Loop is a mobile app that helps you create and maintain good habits. While the o Currently, the project can only be built on macOS. The following tools and libraries need to be installed separately, before attempting to build the application. The versions below have been tested and are know to work. Newer versions may produce errors. -* node 10.15.0 -* Xcode 10.1 +* XCode 10.1 * Android Studio 3.3 -* android-platform-tools +* node 10.15.0 (`brew install node`) +* Android Platform Tools 28.0.1 (`brew cask install android-platform-tools`) ### 2. Build Instructions From 134975b8bae6d272135e43ee104c1f77336b87bd Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 16:02:30 -0600 Subject: [PATCH 07/93] Fix instructions in core/build.gradle --- core/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/build.gradle b/core/build.gradle index 78de2790b..03869821b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -50,7 +50,7 @@ kotlin { // Replace the target above with the following to produce a framework // which can be installed on a real iPhone. - // fromPreset(presets.iosX64, 'iOS') { + // fromPreset(presets.iosArm64, 'iOS') { // compilations.main.outputKinds('FRAMEWORK') // } } From e19339d808e78869f2286c41679ec0dbac3f3688 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 22 Jan 2019 17:25:16 -0600 Subject: [PATCH 08/93] Add symlink to node_modules --- node_modules | 1 + 1 file changed, 1 insertion(+) create mode 120000 node_modules diff --git a/node_modules b/node_modules new file mode 120000 index 000000000..d374bcb00 --- /dev/null +++ b/node_modules @@ -0,0 +1 @@ +react-native/node_modules/ \ No newline at end of file From 7cab0a39e51c9cc11137b8ae10465e3feb99719e Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 26 Jan 2019 22:58:53 -0600 Subject: [PATCH 09/93] Implement database access (with migrations) --- android/build.gradle | 1 + .../gradle/wrapper/gradle-wrapper.properties | 19 ++ .../org/isoron/habits/AndroidDatabaseTest.kt | 72 +++++++ .../org/isoron/habits/AndroidFilesTest.kt | 46 +++++ .../java/org/isoron/habits/BaseTest.kt | 28 +++ android/src/main/assets | 1 + .../java/org/isoron/habits/AndroidDatabase.kt | 33 ++++ .../java/org/isoron/habits/AndroidFiles.kt | 62 ++++++ .../main/java/org/isoron/habits/AndroidLog.kt | 32 +++ .../main/java/org/isoron/habits/CoreModule.kt | 33 ++-- .../assets/main}/fonts/FontAwesome.ttf | Bin core/assets/main/migrations/001.sql | 0 core/assets/main/migrations/002.sql | 0 core/assets/main/migrations/003.sql | 0 core/assets/main/migrations/004.sql | 0 core/assets/main/migrations/005.sql | 0 core/assets/main/migrations/006.sql | 0 core/assets/main/migrations/007.sql | 0 core/assets/main/migrations/008.sql | 0 core/assets/main/migrations/009.sql | 5 + core/assets/main/migrations/010.sql | 3 + core/assets/main/migrations/011.sql | 1 + core/assets/main/migrations/012.sql | 3 + core/assets/main/migrations/013.sql | 4 + core/assets/main/migrations/014.sql | 14 ++ core/assets/main/migrations/015.sql | 3 + core/assets/main/migrations/016.sql | 2 + core/assets/main/migrations/017.sql | 5 + core/assets/main/migrations/018.sql | 3 + core/assets/main/migrations/019.sql | 1 + core/assets/main/migrations/020.sql | 3 + core/assets/main/migrations/021.sql | 12 ++ core/assets/main/migrations/022.sql | 11 ++ core/assets/test/hello.txt | 2 + core/build.gradle | 18 +- .../kotlin/org/isoron/uhabits/Backend.kt | 47 ++--- .../kotlin/org/isoron/uhabits/Config.kt | 22 +++ .../org/isoron/uhabits/models/HabitList.kt | 57 ++++++ .../org/isoron/uhabits/utils/Database.kt | 88 +++++++++ .../kotlin/org/isoron/uhabits/utils/Files.kt | 60 ++++++ .../kotlin/org/isoron/uhabits/utils/Log.kt | 25 +++ .../org/isoron/uhabits/utils/Strings.kt | 22 +++ .../isoron/uhabits/utils/StringsTest.kt} | 27 +-- .../org/isoron/uhabits/utils/Strings.kt | 30 +++ .../isoron/uhabits/database/JavaDatabase.kt | 87 ++++++++ .../org/isoron/uhabits/utils/JavaFiles.kt | 59 ++++++ .../org/isoron/uhabits/utils/JavaLog.kt | 30 +++ .../org/isoron/uhabits/utils/Strings.kt | 24 +++ .../kotlin/org/isoron/uhabits/BackendTest.kt | 48 +++++ .../kotlin/org/isoron/uhabits/BaseTest.kt | 29 +++ .../uhabits/database/JavaDatabaseTest.kt | 82 ++++++++ .../org/isoron/uhabits/utils/JavaFilesTest.kt | 38 ++++ ios/CoreModule.swift | 49 ----- ios/uhabits.xcodeproj/project.pbxproj | 187 +++++++++++++++++- .../xcshareddata/xcschemes/uhabits.xcscheme | 18 ++ ios/uhabits/AppDelegate.swift | 35 ++-- ios/uhabits/BridgingHeader.h | 19 ++ ios/uhabits/CoreModule.swift | 81 ++++++++ ios/uhabits/CoreModuleBridge.m | 19 ++ ios/uhabits/IosDatabase.swift | 115 +++++++++++ ios/uhabits/IosFiles.swift | 77 ++++++++ ios/uhabits/IosLog.swift | 30 +++ ios/uhabitsTest/Info.plist | 22 +++ ios/uhabitsTest/IosFilesTest.swift | 44 +++++ ios/uhabitsTest/IosSqlDatabaseTest.swift | 73 +++++++ .../src/components/ListHabits/HabitList.js | 1 - .../components/ListHabits/HabitListHeader.js | 4 - 67 files changed, 1828 insertions(+), 138 deletions(-) create mode 100644 android/src/androidTest/java/org/isoron/habits/AndroidDatabaseTest.kt create mode 100644 android/src/androidTest/java/org/isoron/habits/AndroidFilesTest.kt create mode 100644 android/src/androidTest/java/org/isoron/habits/BaseTest.kt create mode 120000 android/src/main/assets create mode 100644 android/src/main/java/org/isoron/habits/AndroidDatabase.kt create mode 100644 android/src/main/java/org/isoron/habits/AndroidFiles.kt create mode 100644 android/src/main/java/org/isoron/habits/AndroidLog.kt rename {android/src/main/assets => core/assets/main}/fonts/FontAwesome.ttf (100%) create mode 100644 core/assets/main/migrations/001.sql create mode 100644 core/assets/main/migrations/002.sql create mode 100644 core/assets/main/migrations/003.sql create mode 100644 core/assets/main/migrations/004.sql create mode 100644 core/assets/main/migrations/005.sql create mode 100644 core/assets/main/migrations/006.sql create mode 100644 core/assets/main/migrations/007.sql create mode 100644 core/assets/main/migrations/008.sql create mode 100644 core/assets/main/migrations/009.sql create mode 100644 core/assets/main/migrations/010.sql create mode 100644 core/assets/main/migrations/011.sql create mode 100644 core/assets/main/migrations/012.sql create mode 100644 core/assets/main/migrations/013.sql create mode 100644 core/assets/main/migrations/014.sql create mode 100644 core/assets/main/migrations/015.sql create mode 100644 core/assets/main/migrations/016.sql create mode 100644 core/assets/main/migrations/017.sql create mode 100644 core/assets/main/migrations/018.sql create mode 100644 core/assets/main/migrations/019.sql create mode 100644 core/assets/main/migrations/020.sql create mode 100644 core/assets/main/migrations/021.sql create mode 100644 core/assets/main/migrations/022.sql create mode 100644 core/assets/test/hello.txt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/Config.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/utils/Files.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/utils/Strings.kt rename core/src/commonTest/kotlin/{BackendTest.kt => org/isoron/uhabits/utils/StringsTest.kt} (52%) create mode 100644 core/src/iosMain/kotlin/org/isoron/uhabits/utils/Strings.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaFiles.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/utils/Strings.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/BackendTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/utils/JavaFilesTest.kt delete mode 100644 ios/CoreModule.swift create mode 100644 ios/uhabits/CoreModule.swift create mode 100644 ios/uhabits/IosDatabase.swift create mode 100644 ios/uhabits/IosFiles.swift create mode 100644 ios/uhabits/IosLog.swift create mode 100644 ios/uhabitsTest/Info.plist create mode 100644 ios/uhabitsTest/IosFilesTest.swift create mode 100644 ios/uhabitsTest/IosSqlDatabaseTest.swift diff --git a/android/build.gradle b/android/build.gradle index 4b971adbd..92071ff9d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -67,6 +67,7 @@ dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' implementation files("../core/build/libs/core-jvm.jar") implementation "com.facebook.react:react-native:0.57.8" + implementation 'org.sqldroid:sqldroid:1.0.3' implementation project(':react-native-svg') testImplementation 'junit:junit:4.12' diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 558870dad..3bc259a2f 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,3 +1,22 @@ +# +# Copyright (C) 2016-2019 Álinson Santos Xavier +# +# This file is part of Loop Habit Tracker. +# +# Loop Habit Tracker is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# Loop Habit Tracker is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# + distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-bin.zip diff --git a/android/src/androidTest/java/org/isoron/habits/AndroidDatabaseTest.kt b/android/src/androidTest/java/org/isoron/habits/AndroidDatabaseTest.kt new file mode 100644 index 000000000..36248728a --- /dev/null +++ b/android/src/androidTest/java/org/isoron/habits/AndroidDatabaseTest.kt @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import junit.framework.Assert.* +import org.isoron.uhabits.utils.* +import org.junit.* + +class AndroidDatabaseTest : BaseTest() { + @Test + fun testUsage() { + val dbFile = fileOpener.openUserFile("test.sqlite3") + if (dbFile.exists()) dbFile.delete() + val db = databaseOpener.open(dbFile) + + var stmt = db.prepareStatement("drop table if exists demo") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("begin") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("create table if not exists demo(key int, value text)") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("insert into demo(key, value) values (?1, ?2)") + stmt.bindInt(1, 42) + stmt.bindText(2, "Hello World") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("select * from demo where key > ?1") + stmt.bindInt(1, 10) + var result = stmt.step() + assertEquals(result, StepResult.ROW) + assertEquals(stmt.getInt(0), 42) + assertEquals(stmt.getText(1), "Hello World") + result = stmt.step() + assertEquals(result, StepResult.DONE) + stmt.finalize() + + stmt = db.prepareStatement("drop table demo") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("commit") + stmt.step() + stmt.finalize() + + db.close() + dbFile.delete() + } +} \ No newline at end of file diff --git a/android/src/androidTest/java/org/isoron/habits/AndroidFilesTest.kt b/android/src/androidTest/java/org/isoron/habits/AndroidFilesTest.kt new file mode 100644 index 000000000..95b2f453a --- /dev/null +++ b/android/src/androidTest/java/org/isoron/habits/AndroidFilesTest.kt @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import org.junit.Test + +import org.junit.Assert.* +import java.io.* + +class AndroidFilesTest : BaseTest() { + + @Test + fun testUserFiles() { + val file = File(context.filesDir, "test.txt") + file.writeText("Hello world!") + + val af = fileOpener.openUserFile("test.txt") + assertTrue(af.exists()) + af.delete() + assertFalse(af.exists()) + } + + @Test + fun testResourceFiles() { + val file = fileOpener.openResourceFile("migrations/010.sql") + val lines = file.readLines() + assertEquals("delete from Score", lines[0]) + } +} \ No newline at end of file diff --git a/android/src/androidTest/java/org/isoron/habits/BaseTest.kt b/android/src/androidTest/java/org/isoron/habits/BaseTest.kt new file mode 100644 index 000000000..a6cd8cd59 --- /dev/null +++ b/android/src/androidTest/java/org/isoron/habits/BaseTest.kt @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import android.support.test.* + +open class BaseTest { + val context = InstrumentationRegistry.getTargetContext() + val fileOpener = AndroidFileOpener(context) + val databaseOpener = AndroidDatabaseOpener() +} \ No newline at end of file diff --git a/android/src/main/assets b/android/src/main/assets new file mode 120000 index 000000000..e99c645eb --- /dev/null +++ b/android/src/main/assets @@ -0,0 +1 @@ +../../../core/assets/main/ \ No newline at end of file diff --git a/android/src/main/java/org/isoron/habits/AndroidDatabase.kt b/android/src/main/java/org/isoron/habits/AndroidDatabase.kt new file mode 100644 index 000000000..6240bd749 --- /dev/null +++ b/android/src/main/java/org/isoron/habits/AndroidDatabase.kt @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import org.isoron.uhabits.database.* +import org.isoron.uhabits.utils.* +import java.sql.* + +class AndroidDatabaseOpener : DatabaseOpener { + override fun open(file: UserFile): Database { + val platformFile = file as AndroidUserFile + DriverManager.registerDriver(Class.forName("org.sqldroid.SQLDroidDriver").newInstance() as Driver) + val conn = DriverManager.getConnection("jdbc:sqlite:${platformFile.file.absolutePath}") + return JavaDatabase(conn, AndroidLog()) + } +} \ No newline at end of file diff --git a/android/src/main/java/org/isoron/habits/AndroidFiles.kt b/android/src/main/java/org/isoron/habits/AndroidFiles.kt new file mode 100644 index 000000000..b627d578e --- /dev/null +++ b/android/src/main/java/org/isoron/habits/AndroidFiles.kt @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import android.content.* +import org.isoron.uhabits.utils.* +import java.io.* +import java.util.* + + +class AndroidFileOpener(val context: Context) : FileOpener { + override fun openUserFile(filename: String): UserFile { + return AndroidUserFile(File(context.filesDir, filename)) + } + + override fun openResourceFile(filename: String): ResourceFile { + return AndroidResourceFile(context, filename) + } +} + +class AndroidResourceFile(val context: Context, + val filename: String) : ResourceFile { + + override fun readLines(): List { + val asset = context.assets.open(filename) + val reader = BufferedReader(InputStreamReader(asset)) + val lines = ArrayList() + while (true) { + val line = reader.readLine() ?: break + lines.add(line) + } + return lines + } +} + +class AndroidUserFile(val file: File) : UserFile { + override fun delete() { + file.delete() + } + + override fun exists(): Boolean { + return file.exists() + } + +} diff --git a/android/src/main/java/org/isoron/habits/AndroidLog.kt b/android/src/main/java/org/isoron/habits/AndroidLog.kt new file mode 100644 index 000000000..54b7513f0 --- /dev/null +++ b/android/src/main/java/org/isoron/habits/AndroidLog.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.habits + +import org.isoron.uhabits.utils.* + +class AndroidLog : Log { + override fun debug(msg: String) { + android.util.Log.d("LOOP", msg) + } + + override fun info(msg: String) { + android.util.Log.i("LOOP", msg) + } +} \ No newline at end of file diff --git a/android/src/main/java/org/isoron/habits/CoreModule.kt b/android/src/main/java/org/isoron/habits/CoreModule.kt index f4c7413f1..8afc00178 100644 --- a/android/src/main/java/org/isoron/habits/CoreModule.kt +++ b/android/src/main/java/org/isoron/habits/CoreModule.kt @@ -24,24 +24,17 @@ import com.facebook.react.modules.core.DeviceEventManagerModule.* import org.isoron.uhabits.* -class CoreModule( - private val context: ReactApplicationContext -) : ReactContextBaseJavaModule(context) { +class CoreModule(private val context: ReactApplicationContext) : ReactContextBaseJavaModule(context) { + + private var backend = Backend(AndroidDatabaseOpener(), + AndroidFileOpener(context), + AndroidLog()) - private var backend = Backend() private lateinit var emitter: RCTDeviceEventEmitter override fun initialize() { super.initialize() emitter = context.getJSModule(RCTDeviceEventEmitter::class.java) - backend.createHabit("Wake up early") - backend.createHabit("Wash clothes") - backend.createHabit("Exercise") - backend.createHabit("Meditate") - backend.createHabit("Take vitamins") - backend.createHabit("Write 'the quick brown fox jumps over the lazy dog' daily") - backend.createHabit("Write journal") - backend.createHabit("Study French") } override fun getName(): String { @@ -50,15 +43,17 @@ class CoreModule( @ReactMethod fun requestHabitList() { - val params = Arguments.createArray() - for ((id, data) in backend.getHabitList()) { - params.pushMap(Arguments.createMap().apply { - putString("key", id.toString()) - putString("name", data["name"] as String) - putInt("color", data["color"] as Int) + val result = backend.getHabitList() + val data = Arguments.createArray() + for (r in result) { + data.pushMap(Arguments.createMap().apply { + for ((key, value) in r) { + if (value is String) putString(key, value) + else if (value is Int) putInt(key, value) + } }) } - emitter.emit("onHabitList", params) + emitter.emit("onHabitList", data) } @ReactMethod diff --git a/android/src/main/assets/fonts/FontAwesome.ttf b/core/assets/main/fonts/FontAwesome.ttf similarity index 100% rename from android/src/main/assets/fonts/FontAwesome.ttf rename to core/assets/main/fonts/FontAwesome.ttf diff --git a/core/assets/main/migrations/001.sql b/core/assets/main/migrations/001.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/002.sql b/core/assets/main/migrations/002.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/003.sql b/core/assets/main/migrations/003.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/004.sql b/core/assets/main/migrations/004.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/005.sql b/core/assets/main/migrations/005.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/006.sql b/core/assets/main/migrations/006.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/007.sql b/core/assets/main/migrations/007.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/008.sql b/core/assets/main/migrations/008.sql new file mode 100644 index 000000000..e69de29bb diff --git a/core/assets/main/migrations/009.sql b/core/assets/main/migrations/009.sql new file mode 100644 index 000000000..5a4afd962 --- /dev/null +++ b/core/assets/main/migrations/009.sql @@ -0,0 +1,5 @@ +create table Habits ( id integer primary key autoincrement, archived integer, color integer, description text, freq_den integer, freq_num integer, highlight integer, name text, position integer, reminder_hour integer, reminder_min integer ) +create table Checkmarks ( id integer primary key autoincrement, habit integer references habits(id), timestamp integer, value integer ) +create table Repetitions ( id integer primary key autoincrement, habit integer references habits(id), timestamp integer ) +create table Streak ( id integer primary key autoincrement, end integer, habit integer references habits(id), length integer, start integer ) +create table Score ( id integer primary key autoincrement, habit integer references habits(id), score integer, timestamp integer ) diff --git a/core/assets/main/migrations/010.sql b/core/assets/main/migrations/010.sql new file mode 100644 index 000000000..afae84e20 --- /dev/null +++ b/core/assets/main/migrations/010.sql @@ -0,0 +1,3 @@ +delete from Score +delete from Streak +delete from Checkmarks \ No newline at end of file diff --git a/core/assets/main/migrations/011.sql b/core/assets/main/migrations/011.sql new file mode 100644 index 000000000..6ea4e2390 --- /dev/null +++ b/core/assets/main/migrations/011.sql @@ -0,0 +1 @@ +alter table Habits add column reminder_days integer not null default 127 \ No newline at end of file diff --git a/core/assets/main/migrations/012.sql b/core/assets/main/migrations/012.sql new file mode 100644 index 000000000..afae84e20 --- /dev/null +++ b/core/assets/main/migrations/012.sql @@ -0,0 +1,3 @@ +delete from Score +delete from Streak +delete from Checkmarks \ No newline at end of file diff --git a/core/assets/main/migrations/013.sql b/core/assets/main/migrations/013.sql new file mode 100644 index 000000000..dbb9b4438 --- /dev/null +++ b/core/assets/main/migrations/013.sql @@ -0,0 +1,4 @@ +create index idx_score_habit_timestamp on Score(habit, timestamp) +create index idx_checkmark_habit_timestamp on Checkmarks(habit, timestamp) +create index idx_repetitions_habit_timestamp on Repetitions(habit, timestamp) +create index idx_streak_habit_end on Streak(habit, end) \ No newline at end of file diff --git a/core/assets/main/migrations/014.sql b/core/assets/main/migrations/014.sql new file mode 100644 index 000000000..6eecfc046 --- /dev/null +++ b/core/assets/main/migrations/014.sql @@ -0,0 +1,14 @@ +update habits set color=0 where color=-2937041 +update habits set color=1 where color=-1684967 +update habits set color=2 where color=-415707 +update habits set color=3 where color=-5262293 +update habits set color=4 where color=-13070788 +update habits set color=5 where color=-16742021 +update habits set color=6 where color=-16732991 +update habits set color=7 where color=-16540699 +update habits set color=8 where color=-10603087 +update habits set color=9 where color=-7461718 +update habits set color=10 where color=-2614432 +update habits set color=11 where color=-13619152 +update habits set color=12 where color=-5592406 +update habits set color=0 where color<0 or color>12 \ No newline at end of file diff --git a/core/assets/main/migrations/015.sql b/core/assets/main/migrations/015.sql new file mode 100644 index 000000000..afae84e20 --- /dev/null +++ b/core/assets/main/migrations/015.sql @@ -0,0 +1,3 @@ +delete from Score +delete from Streak +delete from Checkmarks \ No newline at end of file diff --git a/core/assets/main/migrations/016.sql b/core/assets/main/migrations/016.sql new file mode 100644 index 000000000..059f2016b --- /dev/null +++ b/core/assets/main/migrations/016.sql @@ -0,0 +1,2 @@ +alter table Habits add column type integer not null default 0 +alter table Repetitions add column value integer not null default 2 \ No newline at end of file diff --git a/core/assets/main/migrations/017.sql b/core/assets/main/migrations/017.sql new file mode 100644 index 000000000..15430d771 --- /dev/null +++ b/core/assets/main/migrations/017.sql @@ -0,0 +1,5 @@ +drop table Score +create table Score ( id integer primary key autoincrement, habit integer references habits(id), score real, timestamp integer) +create index idx_score_habit_timestamp on Score(habit, timestamp) +delete from streak +delete from checkmarks \ No newline at end of file diff --git a/core/assets/main/migrations/018.sql b/core/assets/main/migrations/018.sql new file mode 100644 index 000000000..4cdc9cc8d --- /dev/null +++ b/core/assets/main/migrations/018.sql @@ -0,0 +1,3 @@ +alter table Habits add column target_type integer not null default 0 +alter table Habits add column target_value real not null default 0 +alter table Habits add column unit text not null default "" \ No newline at end of file diff --git a/core/assets/main/migrations/019.sql b/core/assets/main/migrations/019.sql new file mode 100644 index 000000000..0569ea531 --- /dev/null +++ b/core/assets/main/migrations/019.sql @@ -0,0 +1 @@ +create table Events ( id integer primary key autoincrement, timestamp integer, message text, server_id integer ) \ No newline at end of file diff --git a/core/assets/main/migrations/020.sql b/core/assets/main/migrations/020.sql new file mode 100644 index 000000000..254bb7b80 --- /dev/null +++ b/core/assets/main/migrations/020.sql @@ -0,0 +1,3 @@ +drop table checkmarks +drop table streak +drop table score diff --git a/core/assets/main/migrations/021.sql b/core/assets/main/migrations/021.sql new file mode 100644 index 000000000..547b6759d --- /dev/null +++ b/core/assets/main/migrations/021.sql @@ -0,0 +1,12 @@ +update habits set color=19 where color=12 +update habits set color=17 where color=11 +update habits set color=15 where color=10 +update habits set color=14 where color=9 +update habits set color=13 where color=8 +update habits set color=10 where color=7 +update habits set color=9 where color=6 +update habits set color=8 where color=5 +update habits set color=7 where color=4 +update habits set color=5 where color=3 +update habits set color=4 where color=2 +update habits set color=0 where color<0 or color>19 \ No newline at end of file diff --git a/core/assets/main/migrations/022.sql b/core/assets/main/migrations/022.sql new file mode 100644 index 000000000..b9ca2ba5a --- /dev/null +++ b/core/assets/main/migrations/022.sql @@ -0,0 +1,11 @@ +delete from repetitions where habit not in (select id from habits) +delete from repetitions where timestamp is null +delete from repetitions where habit is null +delete from repetitions where rowid not in ( select min(rowid) from repetitions group by habit, timestamp ) +alter table Repetitions rename to RepetitionsBak +create table Repetitions ( id integer primary key autoincrement, habit integer not null references habits(id), timestamp integer not null, value integer not null) +drop index if exists idx_repetitions_habit_timestamp +create unique index idx_repetitions_habit_timestamp on Repetitions( habit, timestamp) +insert into Repetitions select * from RepetitionsBak +drop table RepetitionsBak +pragma foreign_keys=ON \ No newline at end of file diff --git a/core/assets/test/hello.txt b/core/assets/test/hello.txt new file mode 100644 index 000000000..e432ffe94 --- /dev/null +++ b/core/assets/test/hello.txt @@ -0,0 +1,2 @@ +Hello World! +This is a resource. \ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle index 03869821b..b4157290f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -48,8 +48,8 @@ kotlin { compilations.main.outputKinds('FRAMEWORK') } - // Replace the target above with the following to produce a framework - // which can be installed on a real iPhone. + // Replace the target above by the following one to produce a framework + // which can be installed on a real iPhone: // fromPreset(presets.iosArm64, 'iOS') { // compilations.main.outputKinds('FRAMEWORK') // } @@ -76,6 +76,20 @@ kotlin { dependencies { implementation 'org.jetbrains.kotlin:kotlin-test' implementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.xerial:sqlite-jdbc:3.25.2' + } + } + } + + task iosTest { + dependsOn 'linkTestDebugExecutableIOS' + group = JavaBasePlugin.VERIFICATION_GROUP + description = "Runs tests for target 'ios' on an iOS simulator" + + doLast { + def binary = kotlin.targets.iOS.compilations.test.getBinary('EXECUTABLE', 'DEBUG') + exec { + commandLine 'xcrun', 'simctl', 'spawn', "iPhone 8", binary.absolutePath } } } diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt index 422d84a71..13defaee5 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt @@ -19,37 +19,38 @@ package org.isoron.uhabits -import org.isoron.uhabits.models.Color -import org.isoron.uhabits.models.Frequency -import org.isoron.uhabits.models.Habit -import org.isoron.uhabits.models.HabitType -import kotlin.random.Random - -class Backend { - var nextId = 1 - var habits = mutableListOf() - - fun getHabitList(): Map> { - return habits.map { h -> - h.id to mapOf("name" to h.name, - "color" to h.color.paletteIndex) - }.toMap() +import org.isoron.uhabits.models.HabitList +import org.isoron.uhabits.utils.* + +class Backend(var databaseOpener: DatabaseOpener, + var fileOpener: FileOpener, + var log: Log) { + + var db: Database + + var habits: HabitList + + init { + val dbFile = fileOpener.openUserFile("uhabits.sqlite3") + db = databaseOpener.open(dbFile) + db.migrateTo(LOOP_DATABASE_VERSION, fileOpener, log) + habits = HabitList(db) + } + + fun getHabitList(): List> { + return habits.getActive().map { h -> + mapOf("key" to h.id.toString(), + "name" to h.name, + "color" to h.color.paletteIndex) + } } fun createHabit(name: String) { - val c = (nextId / 4) % 5 - habits.add(Habit(nextId, name, "", Frequency(1, 1), Color(c), - false, habits.size, "", 0, HabitType.YES_NO_HABIT)) - nextId += 1 } fun deleteHabit(id: Int) { - val h = habits.find { h -> h.id == id } - if (h != null) habits.remove(h) } fun updateHabit(id: Int, name: String) { - val h = habits.find { h -> h.id == id } - h?.name = name } } diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/Config.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/Config.kt new file mode 100644 index 000000000..38568d2da --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/Config.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits + +const val LOOP_DATABASE_VERSION = 22 \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt new file mode 100644 index 000000000..427b1b452 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +import org.isoron.uhabits.utils.Database +import org.isoron.uhabits.utils.StepResult + +class HabitList(var db: Database) { + var habits = mutableListOf() + + init { + loadHabitsFromDatabase() + } + + fun getActive(): List { + return habits.filter { h -> !h.isArchived } + } + + private fun loadHabitsFromDatabase() { + val stmt = db.prepareStatement( + "select id, name, description, freq_num, freq_den, color, " + + "archived, position, unit, target_value, type " + + "from habits") + + while (stmt.step() == StepResult.ROW) { + habits.add(Habit(id = stmt.getInt(0), + name = stmt.getText(1), + description = stmt.getText(2), + frequency = Frequency(stmt.getInt(3), + stmt.getInt(4)), + color = Color(stmt.getInt(5)), + isArchived = (stmt.getInt(6) != 0), + position = stmt.getInt(7), + unit = stmt.getText(8), + target = 0, + type = HabitType.YES_NO_HABIT)) + } + stmt.finalize() + } +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt new file mode 100644 index 000000000..e4f827aca --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +enum class StepResult { + ROW, + DONE +} + +interface PreparedStatement { + fun step(): StepResult + fun finalize() + fun getInt(index: Int): Int + fun getText(index: Int): String + fun bindInt(index: Int, value: Int) + fun bindText(index: Int, value: String) + fun reset() +} + +interface Database { + fun prepareStatement(sql: String): PreparedStatement + fun close() +} + +interface DatabaseOpener { + fun open(file: UserFile): Database +} + +fun Database.execute(sql: String) { + val stmt = prepareStatement(sql) + stmt.step() + stmt.finalize() +} + +fun Database.queryInt(sql: String): Int { + val stmt = prepareStatement(sql) + stmt.step() + val result = stmt.getInt(0) + stmt.finalize() + return result +} + +fun Database.begin() = execute("begin") +fun Database.commit() = execute("commit") +fun Database.rollback() = execute("rollback") +fun Database.getVersion() = queryInt("pragma user_version") +fun Database.setVersion(v: Int) = execute("pragma user_version = $v") + +fun Database.migrateTo(newVersion: Int, fileOpener: FileOpener, log: Log) { + val currentVersion = getVersion() + log.debug("Current database version: $currentVersion") + + if (currentVersion == newVersion) return + log.debug("Upgrading to version: $newVersion") + + if (currentVersion > newVersion) + throw RuntimeException("database produced by future version of the application") + + begin() + for (v in (currentVersion + 1)..newVersion) { + log.debug("Running migration $v") + val filename = sprintf("migrations/%03d.sql", v) + val migrationFile = fileOpener.openResourceFile(filename) + for (line in migrationFile.readLines()) { + if (line.isEmpty()) continue + execute(line) + } + setVersion(v) + } + commit() +} diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Files.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Files.kt new file mode 100644 index 000000000..ee72de9e8 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Files.kt @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +/** + * Represents a file that was shipped with the application, such as migration + * files or translations. These files cannot be deleted. + */ +interface ResourceFile { + fun readLines(): List +} + +/** + * Represents a file that was created after the application was installed, as a + * result of some user action, such as databases and logs. These files can be + * deleted. + */ +interface UserFile { + fun delete() + fun exists(): Boolean +} + +interface FileOpener { + /** + * Opens a file which was shipped bundled with the application, such as a + * migration file. + * + * The path is relative to the assets folder. For example, to open + * assets/main/migrations/09.sql you should provide migrations/09.sql + * as the filename. + */ + fun openResourceFile(filename: String): ResourceFile + + /** + * Opens a file which was not shipped with the application, such as + * databases and logs. + * + * The path is relative to the user folder. For example, if the application + * stores the user data at /home/user/.loop/ and you wish to open the file + * /home/user/.loop/crash.log, you should provide crash.log as the filename. + */ + fun openUserFile(filename: String): UserFile +} diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt new file mode 100644 index 000000000..d359b3911 --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +interface Log { + fun info(msg: String) + fun debug(msg: String) +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Strings.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Strings.kt new file mode 100644 index 000000000..9139da30c --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Strings.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +expect fun sprintf(format: String, vararg args: Any?): String \ No newline at end of file diff --git a/core/src/commonTest/kotlin/BackendTest.kt b/core/src/commonTest/kotlin/org/isoron/uhabits/utils/StringsTest.kt similarity index 52% rename from core/src/commonTest/kotlin/BackendTest.kt rename to core/src/commonTest/kotlin/org/isoron/uhabits/utils/StringsTest.kt index 4f614583f..5b0cb3ce4 100644 --- a/core/src/commonTest/kotlin/BackendTest.kt +++ b/core/src/commonTest/kotlin/org/isoron/uhabits/utils/StringsTest.kt @@ -17,33 +17,14 @@ * with this program. If not, see . */ -package org.isoron.uhabits +package org.isoron.uhabits.utils import kotlin.test.Test import kotlin.test.assertEquals -import kotlin.test.assertTrue -class BackendTest { +class StringsTest { @Test - fun testBackend() { - val backend = Backend() - assertEquals(backend.getHabitList().size, 0) - - backend.createHabit("Brush teeth") - backend.createHabit("Wake up early") - - var result = backend.getHabitList() - assertEquals(result.size, 2) - assertEquals(result[1]!!["name"], "Brush teeth") - assertEquals(result[2]!!["name"], "Wake up early") - - backend.deleteHabit(1) - result = backend.getHabitList() - assertEquals(result.size, 1) - assertTrue(2 in result.keys) - - backend.updateHabit(2, "Wake up late") - result = backend.getHabitList() - assertEquals(result[2]!!["name"], "Wake up late") + fun testSprintf() { + assertEquals("Number 004", sprintf("Number %03d", 4)) } } \ No newline at end of file diff --git a/core/src/iosMain/kotlin/org/isoron/uhabits/utils/Strings.kt b/core/src/iosMain/kotlin/org/isoron/uhabits/utils/Strings.kt new file mode 100644 index 000000000..00126c451 --- /dev/null +++ b/core/src/iosMain/kotlin/org/isoron/uhabits/utils/Strings.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +import kotlinx.cinterop.* + +actual fun sprintf(format: String, vararg args: Any?): String { + val buffer = ByteArray(1000) + buffer.usePinned { p -> + platform.posix.sprintf(p.addressOf(0), format, *args) + } + return buffer.stringFromUtf8() +} \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt b/core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt new file mode 100644 index 000000000..2b4004c0f --- /dev/null +++ b/core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.database + +import org.isoron.uhabits.utils.* +import java.sql.Connection +import java.sql.DriverManager +import java.sql.PreparedStatement +import java.sql.ResultSet + +class JavaPreparedStatement(private var stmt : PreparedStatement) : org.isoron.uhabits.utils.PreparedStatement { + + private var rs: ResultSet? = null + private var hasExecuted = false + + override fun step(): StepResult { + if (!hasExecuted) { + hasExecuted = true + val hasResult = stmt.execute() + if (hasResult) rs = stmt.resultSet + } + + if (rs == null || !rs!!.next()) return StepResult.DONE + return StepResult.ROW + } + + override fun finalize() { + stmt.close() + } + + override fun getInt(index: Int): Int { + return rs!!.getInt(index + 1) + } + + override fun getText(index: Int): String { + return rs!!.getString(index + 1) + } + + override fun bindInt(index: Int, value: Int) { + stmt.setInt(index, value) + } + + override fun bindText(index: Int, value: String) { + stmt.setString(index, value) + } + + override fun reset() { + stmt.clearParameters() + } +} + +class JavaDatabase(private var conn: Connection, + private val log: Log) : Database { + + override fun prepareStatement(sql: String): org.isoron.uhabits.utils.PreparedStatement { + log.debug("Running SQL: ${sql}") + return JavaPreparedStatement(conn.prepareStatement(sql)) + } + override fun close() { + conn.close() + } +} + +class JavaDatabaseOpener(private val log: Log) : DatabaseOpener { + override fun open(file: UserFile): Database { + val platformFile = file as JavaUserFile + val conn = DriverManager.getConnection("jdbc:sqlite:${platformFile.path}") + return JavaDatabase(conn, log) + } +} \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaFiles.kt b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaFiles.kt new file mode 100644 index 000000000..fc6732914 --- /dev/null +++ b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaFiles.kt @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths + +class JavaResourceFile(private val path: Path) : ResourceFile { + override fun readLines(): List { + return Files.readAllLines(path) + } +} + +class JavaUserFile(val path: Path) : UserFile { + override fun exists(): Boolean { + return Files.exists(path) + } + + override fun delete() { + Files.delete(path) + } +} + +class JavaFileOpener : FileOpener { + override fun openUserFile(filename: String): UserFile { + val path = Paths.get("/tmp/$filename") + return JavaUserFile(path) + } + + override fun openResourceFile(filename: String): ResourceFile { + val rootFolders = listOf("assets/main", + "assets/test") + for (root in rootFolders) { + val path = Paths.get("$root/$filename") + if (Files.exists(path) && Files.isReadable(path)) { + return JavaResourceFile(path) + } + } + throw RuntimeException("file not found") + } +} diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt new file mode 100644 index 000000000..32d5ca248 --- /dev/null +++ b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +class JavaLog : Log { + override fun info(msg: String) { + println("[I] $msg") + } + + override fun debug(msg: String) { + println("[D] $msg") + } +} \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/Strings.kt b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/Strings.kt new file mode 100644 index 000000000..8bc26773c --- /dev/null +++ b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/Strings.kt @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +actual fun sprintf(format: String, vararg args: Any?): String { + return String.format(format, *args) +} \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/BackendTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/BackendTest.kt new file mode 100644 index 000000000..d4eb10f19 --- /dev/null +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/BackendTest.kt @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits + +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertTrue +import org.junit.Test + +class BackendTest : BaseTest() { + @Test + fun testBackend() { +// val backend = Backend(databaseOpener, fileOpener) +// assertEquals(backend.getHabitList().size, 0) +// +// backend.createHabit("Brush teeth") +// backend.createHabit("Wake up early") + +// var result = backend.getHabitList() +// assertEquals(2, result.size) +// assertEquals(result[0]["name"], "Brush teeth") +// assertEquals(result[0]["name"], "Wake up early") +// +// backend.deleteHabit(1) +// result = backend.getHabitList() +// assertEquals(result.size, 1) +// +// backend.updateHabit(2, "Wake up late") +// result = backend.getHabitList() +// assertEquals(result[2]["name"], "Wake up late") + } +} \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt new file mode 100644 index 000000000..2b6ec7ded --- /dev/null +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits + +import org.isoron.uhabits.utils.JavaFileOpener +import org.isoron.uhabits.database.JavaDatabaseOpener +import org.isoron.uhabits.utils.JavaLog + +open class BaseTest { + val fileOpener = JavaFileOpener() + val databaseOpener = JavaDatabaseOpener(JavaLog()) +} \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt new file mode 100644 index 000000000..4746c41a2 --- /dev/null +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.database + +import org.isoron.uhabits.BaseTest +import org.isoron.uhabits.utils.* +import org.junit.Before +import org.junit.Test +import kotlin.test.assertEquals + +class JavaDatabaseTest : BaseTest() { + private lateinit var db: Database + + @Before + fun setup() { + val dbFile = fileOpener.openUserFile("test.sqlite3") + if (dbFile.exists()) dbFile.delete() + db = databaseOpener.open(dbFile) + } + + @Test + fun testUsage() { + db.setVersion(0) + assertEquals(db.getVersion(), 0) + + db.setVersion(23) + assertEquals(db.getVersion(), 23) + + var stmt = db.prepareStatement("drop table if exists demo") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("create table if not exists demo(key int, value text)") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("insert into demo(key, value) values (?1, ?2)") + stmt.bindInt(1, 42) + stmt.bindText(2, "Hello World") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement("select * from demo where key > ?1") + stmt.bindInt(1, 10) + + var result = stmt.step() + assertEquals(result, StepResult.ROW) + assertEquals(stmt.getInt(0), 42) + assertEquals(stmt.getText(1), "Hello World") + + result = stmt.step() + assertEquals(result, StepResult.DONE) + + stmt.finalize() + db.close() + } + + @Test + fun testMigrateTo() { + assertEquals(0, db.getVersion()) + db.migrateTo(22, fileOpener) + assertEquals(22, db.getVersion()) + db.execute("select * from habits") + } +} \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/utils/JavaFilesTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/utils/JavaFilesTest.kt new file mode 100644 index 000000000..e0b712a90 --- /dev/null +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/utils/JavaFilesTest.kt @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +import org.isoron.uhabits.BaseTest +import org.junit.Test +import kotlin.test.assertEquals + +class JavaFilesTest : BaseTest() { + @Test + fun testReadLines() { + val hello = fileOpener.openResourceFile("hello.txt") + var lines = hello.readLines() + assertEquals("Hello World!", lines[0]) + assertEquals("This is a resource.", lines[1]) + + val migration = fileOpener.openResourceFile("migrations/012.sql") + lines = migration.readLines() + assertEquals("delete from Score", lines[0]) + } +} \ No newline at end of file diff --git a/ios/CoreModule.swift b/ios/CoreModule.swift deleted file mode 100644 index 50c0b5022..000000000 --- a/ios/CoreModule.swift +++ /dev/null @@ -1,49 +0,0 @@ -import Foundation - -@objc(CoreModule) -class CoreModule: RCTEventEmitter { - - @objc - open override func supportedEvents() -> [String] { - return ["onHabitList"] - } - - @objc - func requestHabitList() { - DispatchQueue.main.async { - let habits = AppDelegate.backend.getHabitList() - let result = habits.map { - ["key": String($0.key.intValue), - "name": $0.value["name"], - "color": $0.value["color"]] - } - self.sendEvent(withName: "onHabitList", body: result) - } - } - - @objc - func createHabit(_ name: String) { - DispatchQueue.main.async { - AppDelegate.backend.createHabit(name: name) - } - } - - @objc - func deleteHabit(_ id: Int32) { - DispatchQueue.main.async { - AppDelegate.backend.deleteHabit(id: id) - } - } - - @objc - func updateHabit(_ id: Int32, _ name: String) { - DispatchQueue.main.async { - AppDelegate.backend.updateHabit(id: id, name: name) - } - } - - @objc - override static func requiresMainQueueSetup() -> Bool { - return true - } -} diff --git a/ios/uhabits.xcodeproj/project.pbxproj b/ios/uhabits.xcodeproj/project.pbxproj index fb56bb101..79b22d8d6 100644 --- a/ios/uhabits.xcodeproj/project.pbxproj +++ b/ios/uhabits.xcodeproj/project.pbxproj @@ -15,6 +15,13 @@ 000BCDF521F69E1400F4DA11 /* FontAwesome Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */; }; 000BCE0521F6CB1100F4DA11 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 000BCDFE21F6CAFF00F4DA11 /* libRCTWebSocket.a */; }; 000C283821F51C9B00C5EC6D /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 000C283521F51C4E00C5EC6D /* libRNSVG.a */; }; + 0021019C21F8AA3E00F9283D /* IosDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0021019B21F8AA3E00F9283D /* IosDatabase.swift */; }; + 002101A421F936A300F9283D /* IosSqlDatabaseTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */; }; + 002101AC21F9428C00F9283D /* core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0008A5C021F16D25000DB3E7 /* core.framework */; }; + 0091878521FD70B5001BDE6B /* IosLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0091878421FD70B5001BDE6B /* IosLog.swift */; }; + 00B2AC3D21FCA9D900CBEC8E /* IosFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */; }; + 00B2AC6521FD1A4500CBEC8E /* migrations in Resources */ = {isa = PBXBuildFile; fileRef = 00B2AC6421FD1A4500CBEC8E /* migrations */; }; + 00B2AC6821FD1DA700CBEC8E /* IosFilesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */; }; 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; @@ -72,6 +79,13 @@ remoteGlobalIDString = 94DDAC5C1F3D024300EED511; remoteInfo = "RNSVG-tvOS"; }; + 002101A621F936A300F9283D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = uhabits; + }; 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; @@ -316,11 +330,19 @@ 0008A5C021F16D25000DB3E7 /* core.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = core.framework; path = ../core/build/bin/iOS/main/debug/framework/core.framework; sourceTree = ""; }; 0008A5F521F17513000DB3E7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = uhabits/AppDelegate.swift; sourceTree = ""; }; 0008A5F721F17531000DB3E7 /* BridgingHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BridgingHeader.h; path = uhabits/BridgingHeader.h; sourceTree = ""; }; - 0008A62921F2B728000DB3E7 /* CoreModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreModule.swift; sourceTree = ""; }; + 0008A62921F2B728000DB3E7 /* CoreModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CoreModule.swift; path = uhabits/CoreModule.swift; sourceTree = ""; }; 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = CoreModuleBridge.m; path = uhabits/CoreModuleBridge.m; sourceTree = ""; }; 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "FontAwesome Regular.ttf"; path = "../react-native/res/fonts/FontAwesome Regular.ttf"; sourceTree = ""; }; 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../react-native/node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNSVG.xcodeproj; path = "../react-native/node_modules/react-native-svg/ios/RNSVG.xcodeproj"; sourceTree = ""; }; + 0021019B21F8AA3E00F9283D /* IosDatabase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IosDatabase.swift; path = uhabits/IosDatabase.swift; sourceTree = ""; }; + 002101A121F936A300F9283D /* uhabitsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = uhabitsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosSqlDatabaseTest.swift; sourceTree = ""; }; + 002101A521F936A300F9283D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0091878421FD70B5001BDE6B /* IosLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IosLog.swift; path = uhabits/IosLog.swift; sourceTree = ""; }; + 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IosFiles.swift; path = uhabits/IosFiles.swift; sourceTree = ""; }; + 00B2AC6421FD1A4500CBEC8E /* migrations */ = {isa = PBXFileReference; lastKnownFileType = folder; name = migrations; path = ../core/assets/main/migrations; sourceTree = ""; }; + 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosFilesTest.swift; sourceTree = ""; }; 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; @@ -339,6 +361,14 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 0021019E21F936A300F9283D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 002101AC21F9428C00F9283D /* core.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -365,6 +395,7 @@ 000BCDCC21F69E0000F4DA11 /* Assets */ = { isa = PBXGroup; children = ( + 00B2AC6421FD1A4500CBEC8E /* migrations */, 000BCDF421F69E1400F4DA11 /* FontAwesome Regular.ttf */, ); name = Assets; @@ -390,6 +421,17 @@ name = Products; sourceTree = ""; }; + 002101A221F936A300F9283D /* Unit Tests */ = { + isa = PBXGroup; + children = ( + 002101A521F936A300F9283D /* Info.plist */, + 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */, + 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */, + ); + name = "Unit Tests"; + path = uhabitsTest; + sourceTree = ""; + }; 00C302A81ABCB8CE00DB3ED1 /* Products */ = { isa = PBXGroup; children = ( @@ -437,12 +479,15 @@ isa = PBXGroup; children = ( 13B07FB61A68108700A75B9A /* Info.plist */, - 0008A5F521F17513000DB3E7 /* AppDelegate.swift */, - 0008A5F721F17531000DB3E7 /* BridgingHeader.h */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, - 0008A62921F2B728000DB3E7 /* CoreModule.swift */, + 0008A5F721F17531000DB3E7 /* BridgingHeader.h */, 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */, + 0008A5F521F17513000DB3E7 /* AppDelegate.swift */, + 0008A62921F2B728000DB3E7 /* CoreModule.swift */, + 0021019B21F8AA3E00F9283D /* IosDatabase.swift */, + 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */, + 0091878421FD70B5001BDE6B /* IosLog.swift */, ); name = Application; sourceTree = ""; @@ -530,6 +575,7 @@ children = ( 000BCDCC21F69E0000F4DA11 /* Assets */, 13B07FAE1A68108700A75B9A /* Application */, + 002101A221F936A300F9283D /* Unit Tests */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, @@ -543,6 +589,7 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* uhabits.app */, + 002101A121F936A300F9283D /* uhabitsTests.xctest */, ); name = Products; sourceTree = ""; @@ -559,6 +606,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 002101A021F936A300F9283D /* uhabitsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 002101A821F936A300F9283D /* Build configuration list for PBXNativeTarget "uhabitsTests" */; + buildPhases = ( + 0021019D21F936A300F9283D /* Sources */, + 0021019E21F936A300F9283D /* Frameworks */, + 0021019F21F936A300F9283D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 002101A721F936A300F9283D /* PBXTargetDependency */, + ); + name = uhabitsTests; + productName = uhabitsTests; + productReference = 002101A121F936A300F9283D /* uhabitsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 13B07F861A680F5B00A75B9A /* uhabits */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "uhabits" */; @@ -584,9 +649,16 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { + LastSwiftUpdateCheck = 1010; LastUpgradeCheck = 0940; - ORGANIZATIONNAME = Facebook; + ORGANIZATIONNAME = "Loop Habit Tracker"; TargetAttributes = { + 002101A021F936A300F9283D = { + CreatedOnToolsVersion = 10.1; + DevelopmentTeam = R5YTHGE3PS; + ProvisioningStyle = Automatic; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; 13B07F861A680F5B00A75B9A = { DevelopmentTeam = R5YTHGE3PS; LastSwiftMigration = 1010; @@ -657,6 +729,7 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* uhabits */, + 002101A021F936A300F9283D /* uhabitsTests */, ); }; /* End PBXProject section */ @@ -931,6 +1004,13 @@ /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ + 0021019F21F936A300F9283D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -938,6 +1018,7 @@ 000BCDF521F69E1400F4DA11 /* FontAwesome Regular.ttf in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 00B2AC6521FD1A4500CBEC8E /* migrations in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -956,16 +1037,28 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 0021019D21F936A300F9283D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 002101A421F936A300F9283D /* IosSqlDatabaseTest.swift in Sources */, + 00B2AC6821FD1DA700CBEC8E /* IosFilesTest.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 00B2AC3D21FCA9D900CBEC8E /* IosFiles.swift in Sources */, 0008A62C21F2B755000DB3E7 /* CoreModuleBridge.m in Sources */, + 0091878521FD70B5001BDE6B /* IosLog.swift in Sources */, + 0021019C21F8AA3E00F9283D /* IosDatabase.swift in Sources */, 0008A62A21F2B728000DB3E7 /* CoreModule.swift in Sources */, 0008A5F621F17513000DB3E7 /* AppDelegate.swift in Sources */, ); @@ -973,6 +1066,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 002101A721F936A300F9283D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* uhabits */; + targetProxy = 002101A621F936A300F9283D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { isa = PBXVariantGroup; @@ -986,6 +1087,71 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 002101A921F936A300F9283D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = R5YTHGE3PS; + FRAMEWORK_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/**"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/core.framework/**"; + INFOPLIST_FILE = "$(PROJECT_DIR)/uhabitsTest/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.isoron.uhabitsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OBJC_BRIDGING_HEADER = "${PROJECT_DIR}/uhabits/BridgingHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/uhabits.app/uhabits"; + }; + name = Debug; + }; + 002101AA21F936A300F9283D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = R5YTHGE3PS; + FRAMEWORK_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/**"; + GCC_C_LANGUAGE_STANDARD = gnu11; + HEADER_SEARCH_PATHS = "${PROJECT_DIR}/../core/build/bin/iOS/main/debug/framework/core.framework/**"; + INFOPLIST_FILE = "$(PROJECT_DIR)/uhabitsTest/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.isoron.uhabitsTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "${PROJECT_DIR}/uhabits/BridgingHeader.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/uhabits.app/uhabits"; + }; + name = Release; + }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1140,6 +1306,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 002101A821F936A300F9283D /* Build configuration list for PBXNativeTarget "uhabitsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 002101A921F936A300F9283D /* Debug */, + 002101AA21F936A300F9283D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "uhabits" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme b/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme index 41becf511..3307cea4a 100644 --- a/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme +++ b/ios/uhabits.xcodeproj/xcshareddata/xcschemes/uhabits.xcscheme @@ -40,8 +40,19 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + codeCoverageEnabled = "YES" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + diff --git a/ios/uhabits/AppDelegate.swift b/ios/uhabits/AppDelegate.swift index 9cd807a41..3e78dfcb0 100644 --- a/ios/uhabits/AppDelegate.swift +++ b/ios/uhabits/AppDelegate.swift @@ -1,22 +1,35 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + import Foundation +import SQLite3 @UIApplicationMain - class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var bridge: RCTBridge! - static var backend = Backend() + + static var backend = Backend(databaseOpener: IosDatabaseOpener(), + fileOpener: IosFileOpener(), + log: IosLog()) func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - AppDelegate.backend.createHabit(name: "Wake up early") - AppDelegate.backend.createHabit(name: "Wash clothes") - AppDelegate.backend.createHabit(name: "Exercise") - AppDelegate.backend.createHabit(name: "Meditate") - AppDelegate.backend.createHabit(name: "Take vitamins") - AppDelegate.backend.createHabit(name: "Write 'the quick brown fox jumps over the lazy dog' daily") - AppDelegate.backend.createHabit(name: "Write journal") - AppDelegate.backend.createHabit(name: "Study French") - let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index.ios", fallbackResource: nil) let rootView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "LoopHabitTracker", initialProperties: nil, launchOptions: launchOptions) rootView?.backgroundColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) diff --git a/ios/uhabits/BridgingHeader.h b/ios/uhabits/BridgingHeader.h index de3d2446f..51e0608dc 100644 --- a/ios/uhabits/BridgingHeader.h +++ b/ios/uhabits/BridgingHeader.h @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + #import #import #import diff --git a/ios/uhabits/CoreModule.swift b/ios/uhabits/CoreModule.swift new file mode 100644 index 000000000..411dfe424 --- /dev/null +++ b/ios/uhabits/CoreModule.swift @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import Foundation + +extension String: Error {} + +@objc(CoreModule) +class CoreModule: RCTEventEmitter { + + func convert(_ obj: Any?) -> Any? { + if obj is KotlinInt { + return (obj as! KotlinInt).intValue + } + if obj is NSString { + return obj + } + if obj is Dictionary { + return (obj as! Dictionary).mapValues{ convert($0) } + } + if obj is Array { + return (obj as! Array).map { convert($0) } + } + return nil + } + + @objc + open override func supportedEvents() -> [String] { + return ["onHabitList"] + } + + @objc + func requestHabitList() { + DispatchQueue.main.async { + let result = AppDelegate.backend.getHabitList() + self.sendEvent(withName: "onHabitList", body: self.convert(result)) + } + } + + @objc + func createHabit(_ name: String) { + DispatchQueue.main.async { + AppDelegate.backend.createHabit(name: name) + } + } + + @objc + func deleteHabit(_ id: Int32) { + DispatchQueue.main.async { + AppDelegate.backend.deleteHabit(id: id) + } + } + + @objc + func updateHabit(_ id: Int32, _ name: String) { + DispatchQueue.main.async { + AppDelegate.backend.updateHabit(id: id, name: name) + } + } + + @objc + override static func requiresMainQueueSetup() -> Bool { + return true + } +} diff --git a/ios/uhabits/CoreModuleBridge.m b/ios/uhabits/CoreModuleBridge.m index 236cdba5f..ebbbc1078 100644 --- a/ios/uhabits/CoreModuleBridge.m +++ b/ios/uhabits/CoreModuleBridge.m @@ -1,3 +1,22 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + #import #import #import diff --git a/ios/uhabits/IosDatabase.swift b/ios/uhabits/IosDatabase.swift new file mode 100644 index 000000000..6a9062877 --- /dev/null +++ b/ios/uhabits/IosDatabase.swift @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import Foundation +import SQLite3 + +internal let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) +internal let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) + +class IosPreparedStatement : NSObject, PreparedStatement { + + var db: OpaquePointer + var statement: OpaquePointer + + init(withStatement statement: OpaquePointer, withDb db: OpaquePointer) { + self.statement = statement + self.db = db + } + + func step() -> StepResult { + let result = sqlite3_step(statement) + if result == SQLITE_ROW { + return StepResult.row + } else if result == SQLITE_DONE { + return StepResult.done + } else { + let errMsg = String(cString: sqlite3_errmsg(db)!) + fatalError("Database error: \(errMsg) (\(result))") + } + } + + func getInt(index: Int32) -> Int32 { + return sqlite3_column_int(statement, index) + } + + func getText(index: Int32) -> String { + return String(cString: sqlite3_column_text(statement, index)) + } + + func bindInt(index: Int32, value: Int32) { + sqlite3_bind_int(statement, index, value) + } + + func bindText(index: Int32, value: String) { + sqlite3_bind_text(statement, index, value, -1, SQLITE_TRANSIENT) + } + + func reset() { + sqlite3_reset(statement) + } + + override func finalize() { + sqlite3_finalize(statement) + } +} + +class IosDatabase : NSObject, Database { + var db: OpaquePointer + + init(withDb db: OpaquePointer) { + self.db = db + } + + func prepareStatement(sql: String) -> PreparedStatement { + if sql.isEmpty { + fatalError("Provided SQL query is empty") + } + print("Running SQL: \(sql)") + var statement : OpaquePointer? + let result = sqlite3_prepare_v2(db, sql, -1, &statement, nil) + if result == SQLITE_OK { + return IosPreparedStatement(withStatement: statement!, withDb: db) + } else { + let errMsg = String(cString: sqlite3_errmsg(db)!) + fatalError("Database error: \(errMsg)") + } + } + + func close() { + sqlite3_close(db) + } +} + +class IosDatabaseOpener : NSObject, DatabaseOpener { + func open(file: UserFile) -> Database { + let dbPath = (file as! IosUserFile).path + + let version = String(cString: sqlite3_libversion()) + print("SQLite \(version)") + print("Opening database: \(dbPath)") + var db: OpaquePointer? + let result = sqlite3_open(dbPath, &db) + if result == SQLITE_OK { + return IosDatabase(withDb: db!) + } else { + fatalError("Error opening database (code \(result))") + } + } +} diff --git a/ios/uhabits/IosFiles.swift b/ios/uhabits/IosFiles.swift new file mode 100644 index 000000000..5ed33e78b --- /dev/null +++ b/ios/uhabits/IosFiles.swift @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import Foundation + +class IosResourceFile : NSObject, ResourceFile { + + var path: String + + var fileManager = FileManager.default + + init(forPath path: String) { + self.path = path + } + + func readLines() -> [String] { + do { + let contents = try String(contentsOfFile: self.path, encoding: .utf8) + return contents.components(separatedBy: CharacterSet.newlines) + } catch { + return [""] + } + } +} + +class IosUserFile : NSObject, UserFile { + + var path: String + + init(forPath path: String) { + self.path = path + } + + func delete() { + do { + try FileManager.default.removeItem(atPath: path) + } catch { + + } + } + + func exists() -> Bool { + return FileManager.default.fileExists(atPath: path) + } +} + +class IosFileOpener : NSObject, FileOpener { + func openResourceFile(filename: String) -> ResourceFile { + let path = "\(Bundle.main.resourcePath!)/\(filename)" + return IosResourceFile(forPath: path) + } + + func openUserFile(filename: String) -> UserFile { + do { + let root = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path + return IosUserFile(forPath: "\(root)/\(filename)") + } catch { + return IosUserFile(forPath: "invalid") + } + } +} diff --git a/ios/uhabits/IosLog.swift b/ios/uhabits/IosLog.swift new file mode 100644 index 000000000..94f7fea0d --- /dev/null +++ b/ios/uhabits/IosLog.swift @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import Foundation + +class IosLog : NSObject, Log { + func info(msg: String) { + print("[I] \(msg)") + } + + func debug(msg: String) { + print("[D] \(msg)") + } +} diff --git a/ios/uhabitsTest/Info.plist b/ios/uhabitsTest/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/ios/uhabitsTest/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/ios/uhabitsTest/IosFilesTest.swift b/ios/uhabitsTest/IosFilesTest.swift new file mode 100644 index 000000000..55b9a3fa4 --- /dev/null +++ b/ios/uhabitsTest/IosFilesTest.swift @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import XCTest +@testable import uhabits + +class IosFilesTest: XCTestCase { + func testResourceFiles() { + let fileOpener = IosFileOpener() + let file = fileOpener.openResourceFile(filename: "migrations/010.sql") + let lines = file.readLines() + XCTAssertEqual(lines[0], "delete from Score") + } + + func testUserFiles() throws { + let fm = FileManager.default + let root = try fm.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path + let path = "\(root)/test.txt" + fm.createFile(atPath: path, contents: "Hello world\nThis is line 2".data(using: .utf8), attributes: nil) + + let fileOpener = IosFileOpener() + let file = fileOpener.openUserFile(filename: "test.txt") + XCTAssertTrue(file.exists()) + + file.delete() + XCTAssertFalse(file.exists()) + } +} diff --git a/ios/uhabitsTest/IosSqlDatabaseTest.swift b/ios/uhabitsTest/IosSqlDatabaseTest.swift new file mode 100644 index 000000000..0093dfeda --- /dev/null +++ b/ios/uhabitsTest/IosSqlDatabaseTest.swift @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import XCTest +@testable import uhabits + +class IosDatabaseTest: XCTestCase { + func testUsage() { + let databaseOpener = IosDatabaseOpener() + let fileOpener = IosFileOpener() + + let dbFile = fileOpener.openUserFile(filename: "test.sqlite3") + if dbFile.exists() { + dbFile.delete() + } + let db = databaseOpener.open(file: dbFile) + + var stmt = db.prepareStatement(sql: "drop table if exists demo") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement(sql: "begin") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement(sql: "create table if not exists demo(key int, value text)") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement(sql: "insert into demo(key, value) values (?1, ?2)") + stmt.bindInt(index: 1, value: 42) + stmt.bindText(index: 2, value: "Hello World") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement(sql: "select * from demo where key > ?1") + stmt.bindInt(index: 1, value: 10) + var result = stmt.step() + XCTAssertEqual(result, StepResult.row) + XCTAssertEqual(stmt.getInt(index: 0), 42) + XCTAssertEqual(stmt.getText(index: 1), "Hello World") + result = stmt.step() + XCTAssertEqual(result, StepResult.done) + stmt.finalize() + + stmt = db.prepareStatement(sql: "drop table demo") + stmt.step() + stmt.finalize() + + stmt = db.prepareStatement(sql: "commit") + stmt.step() + stmt.finalize() + + db.close() + dbFile.delete() + } +} diff --git a/react-native/src/components/ListHabits/HabitList.js b/react-native/src/components/ListHabits/HabitList.js index 81316a22a..78b8a569a 100644 --- a/react-native/src/components/ListHabits/HabitList.js +++ b/react-native/src/components/ListHabits/HabitList.js @@ -98,7 +98,6 @@ export default class HabitList extends React.Component { - )} /> diff --git a/react-native/src/components/ListHabits/HabitListHeader.js b/react-native/src/components/ListHabits/HabitListHeader.js index 3144e8956..39b680d9a 100644 --- a/react-native/src/components/ListHabits/HabitListHeader.js +++ b/react-native/src/components/ListHabits/HabitListHeader.js @@ -69,10 +69,6 @@ export default class HabitListHeader extends React.Component { static renderColumns() { return [ - { - dayName: 'Sun', - dayNumber: '6', - }, { dayName: 'Sat', dayNumber: '5', From a546f6de7339d2bd1d2dd50a4fa9f8bfcbb8a559 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sat, 23 Mar 2019 06:29:32 -0500 Subject: [PATCH 10/93] Update --- core/assets/main/databases/template.db | Bin 0 -> 32768 bytes .../kotlin/org/isoron/uhabits/Backend.kt | 38 ++++-- .../kotlin/org/isoron/uhabits/models/Color.kt | 2 +- .../kotlin/org/isoron/uhabits/models/Habit.kt | 2 +- .../org/isoron/uhabits/models/HabitList.kt | 57 -------- .../isoron/uhabits/models/HabitRepository.kt | 99 ++++++++++++++ .../org/isoron/uhabits/models/HabitType.kt | 6 +- .../org/isoron/uhabits/utils/Database.kt | 23 +++- .../kotlin/org/isoron/uhabits/utils/Log.kt | 18 ++- .../org/isoron/uhabits/utils/IosFiles.kt | 55 ++++++++ .../{database => utils}/JavaDatabase.kt | 23 ++-- .../kotlin/org/isoron/uhabits/BaseTest.kt | 18 ++- .../uhabits/database/JavaDatabaseTest.kt | 27 +--- .../uhabits/models/HabitRepositoryTest.kt | 102 ++++++++++++++ .../Application/AppDelegate.swift | 25 ++-- .../AppIcon.appiconset/Contents.json | 98 ++++++++++++++ .../Application/Assets.xcassets/Contents.json | 6 + .../EditHabit/EditHabitController.swift | 87 ++++++++++++ ios-native/Application/Info.plist | 43 ++++++ ios-native/Application/Launch.storyboard | 7 + .../ListHabits/ListHabitsController.swift | 41 ++++++ ios-native/Tests/Info.plist | 22 +++ ios/uhabits.xcodeproj/project.pbxproj | 28 ++-- ios/uhabits/AppDelegate.swift | 4 +- ios/uhabits/IosDatabase.swift | 32 +++-- ios/uhabits/IosFiles.swift | 77 ----------- ios/uhabitsTest/IosFilesTest.swift | 1 + ios/uhabitsTest/IosSqlDatabaseTest.swift | 2 +- react-native/.eslintrc.js | 1 + react-native/index.ios.js | 50 +++++-- react-native/package-lock.json | 32 ----- react-native/package.json | 3 +- .../src/components/EditHabit/index.js | 128 ++++++++++++++++++ .../components/ListHabits/CheckmarkButton.js | 6 +- .../src/components/ListHabits/HabitList.js | 78 ++++++----- .../components/ListHabits/HabitListHeader.js | 11 +- .../src/components/ListHabits/index.js | 26 +++- .../src/components/common/ColorCircle.js | 26 ++-- react-native/src/helpers/FontAwesome.js | 1 + 39 files changed, 974 insertions(+), 331 deletions(-) create mode 100644 core/assets/main/databases/template.db delete mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitRepository.kt create mode 100644 core/src/iosMain/kotlin/org/isoron/uhabits/utils/IosFiles.kt rename core/src/jvmMain/kotlin/org/isoron/uhabits/{database => utils}/JavaDatabase.kt (82%) create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/models/HabitRepositoryTest.kt rename core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt => ios-native/Application/AppDelegate.swift (55%) create mode 100644 ios-native/Application/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios-native/Application/Assets.xcassets/Contents.json create mode 100644 ios-native/Application/EditHabit/EditHabitController.swift create mode 100644 ios-native/Application/Info.plist create mode 100644 ios-native/Application/Launch.storyboard create mode 100644 ios-native/Application/ListHabits/ListHabitsController.swift create mode 100644 ios-native/Tests/Info.plist delete mode 100644 ios/uhabits/IosFiles.swift create mode 100644 react-native/src/components/EditHabit/index.js rename ios/uhabits/IosLog.swift => react-native/src/components/common/ColorCircle.js (58%) diff --git a/core/assets/main/databases/template.db b/core/assets/main/databases/template.db new file mode 100644 index 0000000000000000000000000000000000000000..05c67f527d4675ccaefd41b3e2746cf6055f5a06 GIT binary patch literal 32768 zcmeI)O^@3|7zc2_WRq;S!Ehm3iK0hcswQfRcscaIg;HEmu~clERa*(kn#Rv=M)gZ} zJdQROL_p%oH{i;pAA!$;gv1Bvtyjj5^R}Vwa_s6qT08d4WQvA!g-EXy@p(`@r}#T?YClOo?X+xyk|t6p5|^#H zmV5aNbAki`2tWV=5P$##AOHafyjEa(x!!1hyJt^t$t2`c8J-4;N35lmX_5s)@l@(S z%a}7Q;?aX;QS;6N|90P}!~6FR4t=_J|7-s-z2S076I!XFLuK_nTGZd2`df|m-k$yQ zffi3AUI|_~Y*e@I-~MXfU#*ZjrUfJu&Bv^0q+~4Agr4z)M6Oer3>3$l=-%wUi@+q+ zl;lxFijP=vGT>|$k#%I)U1{FN6+Ie@DCdp*?sU7>Xz%XY)41%1KQ_0`X8ZbD>t}iA zZumlKe#;)2p~=KCljc*?vy9c4Rj|U){obv&Z``n-lr70lBC|FNGCs-6j;^0>t+nk; zY$p*h_so^uU+y?%?|v0!o!=CbB%AGPYcJC&}Yw&QKl?BeUscR?(HJhEbZ8lYLoeW=Zj8P{AX}JXMTcUNE%Fz0D&!-PN18tU?3S5HlhNj6p?SzBCP1iTHgC9d#?5A*ViD2C4NYx% zB6Zoz&C;t^yN~R8`{qr1P>!KULY2xeh*^u!4C~o*cWqqHmQp852O?tX`;YtGVi8}i zhZf$QjubF?dZ#K=bv(G{$bhmhNWmpS8bjt|aZeE#3cn!xtWi^l)yWt1U zyoP1@cN|JBG&>>L^U~|vRsB1C@r-F~0?dOBSxD9*!aT8GwqWN`5s{C`G$fjY#rogz z{;|9lW`_g;2tWV=5P$##AOHafKmY;|fWTWTaLI9Z?dm5V-m%?1YvuPjiuJ$w(LW>z zKmY;|fB*y_009U<00Izz00b_u0M`E(cyQ4*2tWV=5P$##AOHafKmY;|fIua1sd&Zr c|CkRDfB*y_009U<00Izz00bZafeS70FM~V6Q2+n{ literal 0 HcmV?d00001 diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt index 13defaee5..e58145d67 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/Backend.kt @@ -19,26 +19,27 @@ package org.isoron.uhabits -import org.isoron.uhabits.models.HabitList +import org.isoron.uhabits.models.* import org.isoron.uhabits.utils.* class Backend(var databaseOpener: DatabaseOpener, var fileOpener: FileOpener, var log: Log) { - var db: Database - - var habits: HabitList + var database: Database + var habitsRepository: HabitRepository + var habits = mutableMapOf() init { - val dbFile = fileOpener.openUserFile("uhabits.sqlite3") - db = databaseOpener.open(dbFile) - db.migrateTo(LOOP_DATABASE_VERSION, fileOpener, log) - habits = HabitList(db) + val dbFile = fileOpener.openUserFile("uhabits.db") + database = databaseOpener.open(dbFile) + database.migrateTo(LOOP_DATABASE_VERSION, fileOpener, log) + habitsRepository = HabitRepository(database) + habits = habitsRepository.findAll() } fun getHabitList(): List> { - return habits.getActive().map { h -> + return habits.values.sortedBy { h -> h.position }.map { h -> mapOf("key" to h.id.toString(), "name" to h.name, "color" to h.color.paletteIndex) @@ -46,11 +47,30 @@ class Backend(var databaseOpener: DatabaseOpener, } fun createHabit(name: String) { + val id = habitsRepository.nextId() + val habit = Habit(id = id, + name = name, + description = "", + frequency = Frequency(1, 1), + color = Color(3), + isArchived = false, + position = habits.size, + unit = "", + target = 0.0, + type = HabitType.YES_NO_HABIT) + habitsRepository.insert(habit) + habits[id] = habit } fun deleteHabit(id: Int) { + val habit = habits[id]!! + habitsRepository.delete(habit) + habits.remove(id) } fun updateHabit(id: Int, name: String) { + val habit = habits[id]!! + habit.name = name + habitsRepository.update(habit) } } diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt index e34ddc82e..d9ae08eae 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Color.kt @@ -19,4 +19,4 @@ package org.isoron.uhabits.models -class Color(val paletteIndex: Int) \ No newline at end of file +data class Color(val paletteIndex: Int) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt index 2c4fe75b8..8f4897c82 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/Habit.kt @@ -27,5 +27,5 @@ data class Habit(var id: Int, var isArchived: Boolean, var position: Int, var unit: String, - var target: Int, + var target: Double, var type: HabitType) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt deleted file mode 100644 index 427b1b452..000000000 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitList.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2016-2019 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.models - -import org.isoron.uhabits.utils.Database -import org.isoron.uhabits.utils.StepResult - -class HabitList(var db: Database) { - var habits = mutableListOf() - - init { - loadHabitsFromDatabase() - } - - fun getActive(): List { - return habits.filter { h -> !h.isArchived } - } - - private fun loadHabitsFromDatabase() { - val stmt = db.prepareStatement( - "select id, name, description, freq_num, freq_den, color, " + - "archived, position, unit, target_value, type " + - "from habits") - - while (stmt.step() == StepResult.ROW) { - habits.add(Habit(id = stmt.getInt(0), - name = stmt.getText(1), - description = stmt.getText(2), - frequency = Frequency(stmt.getInt(3), - stmt.getInt(4)), - color = Color(stmt.getInt(5)), - isArchived = (stmt.getInt(6) != 0), - position = stmt.getInt(7), - unit = stmt.getText(8), - target = 0, - type = HabitType.YES_NO_HABIT)) - } - stmt.finalize() - } -} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitRepository.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitRepository.kt new file mode 100644 index 000000000..188cd81ab --- /dev/null +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitRepository.kt @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +import org.isoron.uhabits.utils.Database +import org.isoron.uhabits.utils.PreparedStatement +import org.isoron.uhabits.utils.StepResult +import org.isoron.uhabits.utils.nextId + +class HabitRepository(var db: Database) { + + companion object { + const val SELECT_COLUMNS = "id, name, description, freq_num, freq_den, color, archived, position, unit, target_value, type" + const val SELECT_PLACEHOLDERS = "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" + const val UPDATE_COLUMNS = "id=?, name=?, description=?, freq_num=?, freq_den=?, color=?, archived=?, position=?, unit=?, target_value=?, type=?" + } + + private val findAllStatement = db.prepareStatement("select $SELECT_COLUMNS from habits order by position") + private val insertStatement = db.prepareStatement("insert into Habits($SELECT_COLUMNS) values ($SELECT_PLACEHOLDERS)") + private val updateStatement = db.prepareStatement("update Habits set $UPDATE_COLUMNS where id=?") + private val deleteStatement = db.prepareStatement("delete from Habits where id=?") + + fun nextId(): Int { + return db.nextId("Habits") + } + + fun findAll(): MutableMap { + val result = mutableMapOf() + while (findAllStatement.step() == StepResult.ROW) { + val habit = buildHabitFromStatement(findAllStatement) + result[habit.id] = habit + } + findAllStatement.reset() + return result + } + + fun insert(habit: Habit) { + bindHabitToStatement(habit, insertStatement) + insertStatement.step() + insertStatement.reset() + } + + fun update(habit: Habit) { + bindHabitToStatement(habit, updateStatement) + updateStatement.bindInt(11, habit.id) + updateStatement.step() + updateStatement.reset() + } + + private fun buildHabitFromStatement(stmt: PreparedStatement): Habit { + return Habit(id = stmt.getInt(0), + name = stmt.getText(1), + description = stmt.getText(2), + frequency = Frequency(stmt.getInt(3), stmt.getInt(4)), + color = Color(stmt.getInt(5)), + isArchived = stmt.getInt(6) != 0, + position = stmt.getInt(7), + unit = stmt.getText(8), + target = stmt.getReal(9), + type = if (stmt.getInt(10) == 0) HabitType.YES_NO_HABIT else HabitType.NUMERICAL_HABIT) + } + + private fun bindHabitToStatement(habit: Habit, statement: PreparedStatement) { + statement.bindInt(0, habit.id) + statement.bindText(1, habit.name) + statement.bindText(2, habit.description) + statement.bindInt(3, habit.frequency.numerator) + statement.bindInt(4, habit.frequency.denominator) + statement.bindInt(5, habit.color.paletteIndex) + statement.bindInt(6, if (habit.isArchived) 1 else 0) + statement.bindInt(7, habit.position) + statement.bindText(8, habit.unit) + statement.bindReal(9, habit.target) + statement.bindInt(10, habit.type.code) + } + + fun delete(habit: Habit) { + deleteStatement.bindInt(0, habit.id) + deleteStatement.step() + deleteStatement.reset() + } +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt index 8965f5c09..3fb8ba57f 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/models/HabitType.kt @@ -19,7 +19,7 @@ package org.isoron.uhabits.models -enum class HabitType { - YES_NO_HABIT, - NUMERICAL_HABIT, +enum class HabitType(val code: Int) { + YES_NO_HABIT(0), + NUMERICAL_HABIT(1), } \ No newline at end of file diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt index e4f827aca..98dfdbb5c 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Database.kt @@ -29,8 +29,10 @@ interface PreparedStatement { fun finalize() fun getInt(index: Int): Int fun getText(index: Int): String + fun getReal(index: Int): Double fun bindInt(index: Int, value: Int) fun bindText(index: Int, value: String) + fun bindReal(index: Int, value: Double) fun reset() } @@ -57,25 +59,38 @@ fun Database.queryInt(sql: String): Int { return result } +fun Database.nextId(tableName: String): Int { + val stmt = prepareStatement("select seq from sqlite_sequence where name='$tableName'") + if(stmt.step() == StepResult.ROW) { + val result = stmt.getInt(0) + stmt.finalize() + return result + 1 + } else { + return 0 + } +} + fun Database.begin() = execute("begin") + fun Database.commit() = execute("commit") -fun Database.rollback() = execute("rollback") + fun Database.getVersion() = queryInt("pragma user_version") + fun Database.setVersion(v: Int) = execute("pragma user_version = $v") fun Database.migrateTo(newVersion: Int, fileOpener: FileOpener, log: Log) { val currentVersion = getVersion() - log.debug("Current database version: $currentVersion") + log.debug("Database", "Current database version: $currentVersion") if (currentVersion == newVersion) return - log.debug("Upgrading to version: $newVersion") + log.debug("Database", "Upgrading to version: $newVersion") if (currentVersion > newVersion) throw RuntimeException("database produced by future version of the application") begin() for (v in (currentVersion + 1)..newVersion) { - log.debug("Running migration $v") + log.debug("Database", "Running migration $v") val filename = sprintf("migrations/%03d.sql", v) val migrationFile = fileOpener.openResourceFile(filename) for (line in migrationFile.readLines()) { diff --git a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt index d359b3911..be5f0d3fc 100644 --- a/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt +++ b/core/src/commonMain/kotlin/org/isoron/uhabits/utils/Log.kt @@ -20,6 +20,20 @@ package org.isoron.uhabits.utils interface Log { - fun info(msg: String) - fun debug(msg: String) + fun info(tag: String, msg: String) + fun debug(tag: String, msg: String) +} + +/** + * A Log that prints to the standard output. + */ +class StandardLog : Log { + override fun info(tag: String, msg: String) { + println(sprintf("I/%-20s %s", tag, msg)) + } + + override fun debug(tag: String, msg: String) { + println(sprintf("D/%-20s %s", tag, msg)) + } + } \ No newline at end of file diff --git a/core/src/iosMain/kotlin/org/isoron/uhabits/utils/IosFiles.kt b/core/src/iosMain/kotlin/org/isoron/uhabits/utils/IosFiles.kt new file mode 100644 index 000000000..86e61fc86 --- /dev/null +++ b/core/src/iosMain/kotlin/org/isoron/uhabits/utils/IosFiles.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.utils + +import platform.Foundation.* + +class IosResourceFile(val path: String) : ResourceFile { + private val fileManager = NSFileManager.defaultManager() + override fun readLines(): List { + val contents = NSString.stringWithContentsOfFile(path) as NSString + return contents.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) as List + } +} + +class IosUserFile(val path: String) : UserFile { + override fun exists(): Boolean { + return NSFileManager.defaultManager().fileExistsAtPath(path) + } + + override fun delete() { + NSFileManager.defaultManager().removeItemAtPath(path, null) + } +} + +class IosFileOpener : FileOpener { + override fun openResourceFile(filename: String): ResourceFile { + val root = NSBundle.mainBundle.resourcePath!! + return IosResourceFile("$root/$filename") + } + + override fun openUserFile(filename: String): UserFile { + val manager = NSFileManager.defaultManager() + val root = manager.URLForDirectory(NSDocumentDirectory, + NSUserDomainMask, + null, false, null)!!.path + return IosUserFile("$root/$filename") + } +} \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaDatabase.kt similarity index 82% rename from core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt rename to core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaDatabase.kt index 2b4004c0f..a0a52ce5f 100644 --- a/core/src/jvmMain/kotlin/org/isoron/uhabits/database/JavaDatabase.kt +++ b/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaDatabase.kt @@ -17,17 +17,16 @@ * with this program. If not, see . */ -package org.isoron.uhabits.database +package org.isoron.uhabits.utils -import org.isoron.uhabits.utils.* import java.sql.Connection import java.sql.DriverManager import java.sql.PreparedStatement import java.sql.ResultSet -class JavaPreparedStatement(private var stmt : PreparedStatement) : org.isoron.uhabits.utils.PreparedStatement { - +class JavaPreparedStatement(private var stmt: PreparedStatement) : org.isoron.uhabits.utils.PreparedStatement { private var rs: ResultSet? = null + private var hasExecuted = false override fun step(): StepResult { @@ -40,7 +39,6 @@ class JavaPreparedStatement(private var stmt : PreparedStatement) : org.isoron.u if (rs == null || !rs!!.next()) return StepResult.DONE return StepResult.ROW } - override fun finalize() { stmt.close() } @@ -53,16 +51,25 @@ class JavaPreparedStatement(private var stmt : PreparedStatement) : org.isoron.u return rs!!.getString(index + 1) } + override fun getReal(index: Int): Double { + return rs!!.getDouble(index + 1) + } + override fun bindInt(index: Int, value: Int) { - stmt.setInt(index, value) + stmt.setInt(index + 1, value) } override fun bindText(index: Int, value: String) { - stmt.setString(index, value) + stmt.setString(index + 1, value) + } + + override fun bindReal(index: Int, value: Double) { + stmt.setDouble(index + 1, value) } override fun reset() { stmt.clearParameters() + hasExecuted = false } } @@ -70,7 +77,7 @@ class JavaDatabase(private var conn: Connection, private val log: Log) : Database { override fun prepareStatement(sql: String): org.isoron.uhabits.utils.PreparedStatement { - log.debug("Running SQL: ${sql}") + log.debug("Database", "Preparing: $sql") return JavaPreparedStatement(conn.prepareStatement(sql)) } override fun close() { diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt index 2b6ec7ded..26e2f4689 100644 --- a/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/BaseTest.kt @@ -19,11 +19,21 @@ package org.isoron.uhabits -import org.isoron.uhabits.utils.JavaFileOpener -import org.isoron.uhabits.database.JavaDatabaseOpener -import org.isoron.uhabits.utils.JavaLog +import org.isoron.uhabits.models.HabitRepository +import org.isoron.uhabits.utils.* +import org.junit.Before open class BaseTest { val fileOpener = JavaFileOpener() - val databaseOpener = JavaDatabaseOpener(JavaLog()) + val log = StandardLog() + val databaseOpener = JavaDatabaseOpener(log) + lateinit var db: Database + + @Before + open fun setUp() { + val dbFile = fileOpener.openUserFile("test.sqlite3") + if (dbFile.exists()) dbFile.delete() + db = databaseOpener.open(dbFile) + db.migrateTo(LOOP_DATABASE_VERSION, fileOpener, log) + } } \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt index 4746c41a2..3400b95e1 100644 --- a/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/database/JavaDatabaseTest.kt @@ -26,15 +26,6 @@ import org.junit.Test import kotlin.test.assertEquals class JavaDatabaseTest : BaseTest() { - private lateinit var db: Database - - @Before - fun setup() { - val dbFile = fileOpener.openUserFile("test.sqlite3") - if (dbFile.exists()) dbFile.delete() - db = databaseOpener.open(dbFile) - } - @Test fun testUsage() { db.setVersion(0) @@ -51,14 +42,14 @@ class JavaDatabaseTest : BaseTest() { stmt.step() stmt.finalize() - stmt = db.prepareStatement("insert into demo(key, value) values (?1, ?2)") - stmt.bindInt(1, 42) - stmt.bindText(2, "Hello World") + stmt = db.prepareStatement("insert into demo(key, value) values (?, ?)") + stmt.bindInt(0, 42) + stmt.bindText(1, "Hello World") stmt.step() stmt.finalize() - stmt = db.prepareStatement("select * from demo where key > ?1") - stmt.bindInt(1, 10) + stmt = db.prepareStatement("select * from demo where key > ?") + stmt.bindInt(0, 10) var result = stmt.step() assertEquals(result, StepResult.ROW) @@ -71,12 +62,4 @@ class JavaDatabaseTest : BaseTest() { stmt.finalize() db.close() } - - @Test - fun testMigrateTo() { - assertEquals(0, db.getVersion()) - db.migrateTo(22, fileOpener) - assertEquals(22, db.getVersion()) - db.execute("select * from habits") - } } \ No newline at end of file diff --git a/core/src/jvmTest/kotlin/org/isoron/uhabits/models/HabitRepositoryTest.kt b/core/src/jvmTest/kotlin/org/isoron/uhabits/models/HabitRepositoryTest.kt new file mode 100644 index 000000000..8897a9124 --- /dev/null +++ b/core/src/jvmTest/kotlin/org/isoron/uhabits/models/HabitRepositoryTest.kt @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.models + +import junit.framework.Assert.assertEquals +import org.isoron.uhabits.BaseTest +import org.junit.Before +import org.junit.Test + +class HabitRepositoryTest : BaseTest() { + lateinit var repository: HabitRepository + + lateinit private var original0: Habit + lateinit private var original1: Habit + lateinit private var original2: Habit + + @Before + override fun setUp() { + super.setUp() + + original0 = Habit(id = 0, + name = "Wake up early", + description = "Did you wake up before 6am?", + frequency = Frequency(1, 1), + color = Color(3), + isArchived = false, + position = 0, + unit = "", + target = 0.0, + type = HabitType.YES_NO_HABIT) + + original1 = Habit(id = 1, + name = "Exercise", + description = "Did you exercise for at least 20 minutes?", + frequency = Frequency(1, 2), + color = Color(4), + isArchived = false, + position = 1, + unit = "", + target = 0.0, + type = HabitType.YES_NO_HABIT) + + original2 = Habit(id = 2, + name = "Learn Japanese", + description = "Did you study Japanese today?", + frequency = Frequency(1, 1), + color = Color(3), + isArchived = false, + position = 2, + unit = "", + target = 0.0, + type = HabitType.YES_NO_HABIT) + + repository = HabitRepository(db) + } + + @Test + fun testFindActive() { + var habits = repository.findAll() + assertEquals(0, repository.nextId()) + assertEquals(0, habits.size) + + repository.insert(original0) + repository.insert(original1) + repository.insert(original2) + habits = repository.findAll() + assertEquals(3, habits.size) + assertEquals(original0, habits[0]) + assertEquals(original1, habits[1]) + assertEquals(original2, habits[2]) + + assertEquals(3, repository.nextId()) + + original0.description = "New description" + repository.update(original0) + habits = repository.findAll() + assertEquals(original0, habits[0]) + + repository.delete(original0) + habits = repository.findAll() + assertEquals(2, habits.size) + assertEquals(original1, habits[1]) + assertEquals(original2, habits[2]) + } +} \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt b/ios-native/Application/AppDelegate.swift similarity index 55% rename from core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt rename to ios-native/Application/AppDelegate.swift index 32d5ca248..d97c68a95 100644 --- a/core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaLog.kt +++ b/ios-native/Application/AppDelegate.swift @@ -17,14 +17,23 @@ * with this program. If not, see . */ -package org.isoron.uhabits.utils +import UIKit -class JavaLog : Log { - override fun info(msg: String) { - println("[I] $msg") - } +@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + func application(_ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - override fun debug(msg: String) { - println("[D] $msg") + window = UIWindow(frame: UIScreen.main.bounds) + if let window = window { + let nav = UINavigationController() + nav.viewControllers = [ListHabitsController()] + window.backgroundColor = UIColor.white + window.rootViewController = nav + window.makeKeyAndVisible() + } + return true } -} \ No newline at end of file +} diff --git a/ios-native/Application/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios-native/Application/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d8db8d65f --- /dev/null +++ b/ios-native/Application/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios-native/Application/Assets.xcassets/Contents.json b/ios-native/Application/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/ios-native/Application/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios-native/Application/EditHabit/EditHabitController.swift b/ios-native/Application/EditHabit/EditHabitController.swift new file mode 100644 index 000000000..5f7d5fc4e --- /dev/null +++ b/ios-native/Application/EditHabit/EditHabitController.swift @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import UIKit + +class EditHabitTableViewController: NSObject, UITableViewDataSource, UITableViewDelegate { + func disclosure(title: String, subtitle: String) -> UITableViewCell { + let cell = UITableViewCell(style: .value1, reuseIdentifier: nil) + cell.textLabel?.text = title + cell.detailTextLabel?.text = subtitle + cell.accessoryType = .disclosureIndicator + return cell + } + + func input(title: String) -> UITableViewCell { + let cell = UITableViewCell() + let field = UITextField(frame: cell.bounds.insetBy(dx: 20, dy: 0)) + field.placeholder = title + field.autoresizingMask = [UIView.AutoresizingMask.flexibleWidth, + UIView.AutoresizingMask.flexibleHeight] + cell.contentView.addSubview(field) + return cell + } + + var primary = [UITableViewCell]() + var secondary = [UITableViewCell]() + var parentController: EditHabitController + + init(withParentController parentController: EditHabitController) { + self.parentController = parentController + super.init() + primary.append(input(title: "Name")) + primary.append(input(title: "Question (e.g. Did you wake up early today?)")) + secondary.append(disclosure(title: "Color", subtitle: "Blue")) + secondary.append(disclosure(title: "Repeat", subtitle: "Daily")) + secondary.append(disclosure(title: "Reminder", subtitle: "Disabled")) + } + + func numberOfSections(in tableView: UITableView) -> Int { + return 2 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return section == 0 ? primary.count : secondary.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + return indexPath.section == 0 ? primary[indexPath.item] : secondary[indexPath.item] + } + +// func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { +// let alert = UIAlertController(title: "Hello", message: "You selected something", preferredStyle: .alert) +// parentController.present(alert, animated: true) +// } +} + +class EditHabitController: UIViewController { + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + let bounds = UIScreen.main.bounds + let tableController = EditHabitTableViewController(withParentController: self) + let table = UITableView(frame: bounds, style: .grouped) + table.dataSource = tableController + table.delegate = tableController + self.view = table + } + + override func viewDidLoad() { + self.title = "Edit Habit" + } +} diff --git a/ios-native/Application/Info.plist b/ios-native/Application/Info.plist new file mode 100644 index 000000000..f1653a7f2 --- /dev/null +++ b/ios-native/Application/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UILaunchStoryboardName + Launch.storyboard + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/ios-native/Application/Launch.storyboard b/ios-native/Application/Launch.storyboard new file mode 100644 index 000000000..f9a048edf --- /dev/null +++ b/ios-native/Application/Launch.storyboard @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ios-native/Application/ListHabits/ListHabitsController.swift b/ios-native/Application/ListHabits/ListHabitsController.swift new file mode 100644 index 000000000..39c43ec80 --- /dev/null +++ b/ios-native/Application/ListHabits/ListHabitsController.swift @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import UIKit + +class ListHabitsController: UIViewController { + + override func viewDidLoad() { + self.title = "Habits" + self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, + target: self, + action: #selector(self.onCreateHabitClicked)) + +// let box = UIView(frame: view.bounds.insetBy(dx: 100, dy: 100)) +// box.backgroundColor = .blue +//// box.translatesAutoresizingMaskIntoConstraints = true +// box.autoresizingMask = [UIView.AutoresizingMask.flexibleLeftMargin, +// UIView.AutoresizingMask.flexibleRightMargin] +// view.addSubview(box) + } + + @objc func onCreateHabitClicked() { + self.navigationController?.pushViewController(EditHabitController(), animated: true) + } +} diff --git a/ios-native/Tests/Info.plist b/ios-native/Tests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/ios-native/Tests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/ios/uhabits.xcodeproj/project.pbxproj b/ios/uhabits.xcodeproj/project.pbxproj index 79b22d8d6..a74c6dbdb 100644 --- a/ios/uhabits.xcodeproj/project.pbxproj +++ b/ios/uhabits.xcodeproj/project.pbxproj @@ -18,8 +18,8 @@ 0021019C21F8AA3E00F9283D /* IosDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0021019B21F8AA3E00F9283D /* IosDatabase.swift */; }; 002101A421F936A300F9283D /* IosSqlDatabaseTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */; }; 002101AC21F9428C00F9283D /* core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0008A5C021F16D25000DB3E7 /* core.framework */; }; - 0091878521FD70B5001BDE6B /* IosLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0091878421FD70B5001BDE6B /* IosLog.swift */; }; - 00B2AC3D21FCA9D900CBEC8E /* IosFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */; }; + 00513C3B2200843F00702112 /* libthird-party.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DF0FFE32056DD460020B375 /* libthird-party.a */; }; + 00513C3C2200843F00702112 /* libyoga.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA51DF850E9000B6D8A /* libyoga.a */; }; 00B2AC6521FD1A4500CBEC8E /* migrations in Resources */ = {isa = PBXBuildFile; fileRef = 00B2AC6421FD1A4500CBEC8E /* migrations */; }; 00B2AC6821FD1DA700CBEC8E /* IosFilesTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */; }; 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; @@ -339,8 +339,6 @@ 002101A121F936A300F9283D /* uhabitsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = uhabitsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosSqlDatabaseTest.swift; sourceTree = ""; }; 002101A521F936A300F9283D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0091878421FD70B5001BDE6B /* IosLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IosLog.swift; path = uhabits/IosLog.swift; sourceTree = ""; }; - 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = IosFiles.swift; path = uhabits/IosFiles.swift; sourceTree = ""; }; 00B2AC6421FD1A4500CBEC8E /* migrations */ = {isa = PBXFileReference; lastKnownFileType = folder; name = migrations; path = ../core/assets/main/migrations; sourceTree = ""; }; 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosFilesTest.swift; sourceTree = ""; }; 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; @@ -373,6 +371,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 00513C3B2200843F00702112 /* libthird-party.a in Frameworks */, + 00513C3C2200843F00702112 /* libyoga.a in Frameworks */, 000BCE0521F6CB1100F4DA11 /* libRCTWebSocket.a in Frameworks */, 000C283821F51C9B00C5EC6D /* libRNSVG.a in Frameworks */, ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, @@ -425,8 +425,8 @@ isa = PBXGroup; children = ( 002101A521F936A300F9283D /* Info.plist */, - 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */, 00B2AC6621FD1CEF00CBEC8E /* IosFilesTest.swift */, + 002101A321F936A300F9283D /* IosSqlDatabaseTest.swift */, ); name = "Unit Tests"; path = uhabitsTest; @@ -478,16 +478,14 @@ 13B07FAE1A68108700A75B9A /* Application */ = { isa = PBXGroup; children = ( - 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 0008A5F721F17531000DB3E7 /* BridgingHeader.h */, 0008A62B21F2B755000DB3E7 /* CoreModuleBridge.m */, + 13B07FB61A68108700A75B9A /* Info.plist */, 0008A5F521F17513000DB3E7 /* AppDelegate.swift */, 0008A62921F2B728000DB3E7 /* CoreModule.swift */, 0021019B21F8AA3E00F9283D /* IosDatabase.swift */, - 00B2AC3C21FCA9D900CBEC8E /* IosFiles.swift */, - 0091878421FD70B5001BDE6B /* IosLog.swift */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, ); name = Application; sourceTree = ""; @@ -545,11 +543,8 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( - 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */, - 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */, - 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, - 146833FF1AC3E56700842450 /* React.xcodeproj */, 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, @@ -557,6 +552,9 @@ 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, + 000BCDF621F6CAFF00F4DA11 /* RCTWebSocket.xcodeproj */, + 146833FF1AC3E56700842450 /* React.xcodeproj */, + 000C280A21F51C4E00C5EC6D /* RNSVG.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -1055,9 +1053,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 00B2AC3D21FCA9D900CBEC8E /* IosFiles.swift in Sources */, 0008A62C21F2B755000DB3E7 /* CoreModuleBridge.m in Sources */, - 0091878521FD70B5001BDE6B /* IosLog.swift in Sources */, 0021019C21F8AA3E00F9283D /* IosDatabase.swift in Sources */, 0008A62A21F2B728000DB3E7 /* CoreModule.swift in Sources */, 0008A5F621F17513000DB3E7 /* AppDelegate.swift in Sources */, diff --git a/ios/uhabits/AppDelegate.swift b/ios/uhabits/AppDelegate.swift index 3e78dfcb0..461d6398a 100644 --- a/ios/uhabits/AppDelegate.swift +++ b/ios/uhabits/AppDelegate.swift @@ -25,9 +25,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var bridge: RCTBridge! - static var backend = Backend(databaseOpener: IosDatabaseOpener(), + static var backend = Backend(databaseOpener: IosDatabaseOpener(withLog: StandardLog()), fileOpener: IosFileOpener(), - log: IosLog()) + log: StandardLog()) func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index.ios", fallbackResource: nil) diff --git a/ios/uhabits/IosDatabase.swift b/ios/uhabits/IosDatabase.swift index 6a9062877..bb629b44b 100644 --- a/ios/uhabits/IosDatabase.swift +++ b/ios/uhabits/IosDatabase.swift @@ -24,7 +24,6 @@ internal let SQLITE_STATIC = unsafeBitCast(0, to: sqlite3_destructor_type.self) internal let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self) class IosPreparedStatement : NSObject, PreparedStatement { - var db: OpaquePointer var statement: OpaquePointer @@ -53,12 +52,20 @@ class IosPreparedStatement : NSObject, PreparedStatement { return String(cString: sqlite3_column_text(statement, index)) } + func getReal(index: Int32) -> Double { + return sqlite3_column_double(statement, index) + } + func bindInt(index: Int32, value: Int32) { - sqlite3_bind_int(statement, index, value) + sqlite3_bind_int(statement, index + 1, value) } func bindText(index: Int32, value: String) { - sqlite3_bind_text(statement, index, value, -1, SQLITE_TRANSIENT) + sqlite3_bind_text(statement, index + 1, value, -1, SQLITE_TRANSIENT) + } + + func bindReal(index: Int32, value: Double) { + sqlite3_bind_double(statement, index + 1, value) } func reset() { @@ -72,16 +79,18 @@ class IosPreparedStatement : NSObject, PreparedStatement { class IosDatabase : NSObject, Database { var db: OpaquePointer + var log: Log - init(withDb db: OpaquePointer) { + init(withDb db: OpaquePointer, withLog log: Log) { self.db = db + self.log = log } func prepareStatement(sql: String) -> PreparedStatement { if sql.isEmpty { fatalError("Provided SQL query is empty") } - print("Running SQL: \(sql)") + log.debug(tag: "IosDatabase", msg: "Preparing: \(sql)") var statement : OpaquePointer? let result = sqlite3_prepare_v2(db, sql, -1, &statement, nil) if result == SQLITE_OK { @@ -98,16 +107,23 @@ class IosDatabase : NSObject, Database { } class IosDatabaseOpener : NSObject, DatabaseOpener { + + var log: Log + + init(withLog log: Log) { + self.log = log + } + func open(file: UserFile) -> Database { let dbPath = (file as! IosUserFile).path let version = String(cString: sqlite3_libversion()) - print("SQLite \(version)") - print("Opening database: \(dbPath)") + log.info(tag: "IosDatabaseOpener", msg: "SQLite \(version)") + log.info(tag: "IosDatabaseOpener", msg: "Opening database: \(dbPath)") var db: OpaquePointer? let result = sqlite3_open(dbPath, &db) if result == SQLITE_OK { - return IosDatabase(withDb: db!) + return IosDatabase(withDb: db!, withLog: log) } else { fatalError("Error opening database (code \(result))") } diff --git a/ios/uhabits/IosFiles.swift b/ios/uhabits/IosFiles.swift deleted file mode 100644 index 5ed33e78b..000000000 --- a/ios/uhabits/IosFiles.swift +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2016-2019 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -import Foundation - -class IosResourceFile : NSObject, ResourceFile { - - var path: String - - var fileManager = FileManager.default - - init(forPath path: String) { - self.path = path - } - - func readLines() -> [String] { - do { - let contents = try String(contentsOfFile: self.path, encoding: .utf8) - return contents.components(separatedBy: CharacterSet.newlines) - } catch { - return [""] - } - } -} - -class IosUserFile : NSObject, UserFile { - - var path: String - - init(forPath path: String) { - self.path = path - } - - func delete() { - do { - try FileManager.default.removeItem(atPath: path) - } catch { - - } - } - - func exists() -> Bool { - return FileManager.default.fileExists(atPath: path) - } -} - -class IosFileOpener : NSObject, FileOpener { - func openResourceFile(filename: String) -> ResourceFile { - let path = "\(Bundle.main.resourcePath!)/\(filename)" - return IosResourceFile(forPath: path) - } - - func openUserFile(filename: String) -> UserFile { - do { - let root = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path - return IosUserFile(forPath: "\(root)/\(filename)") - } catch { - return IosUserFile(forPath: "invalid") - } - } -} diff --git a/ios/uhabitsTest/IosFilesTest.swift b/ios/uhabitsTest/IosFilesTest.swift index 55b9a3fa4..a7a19eb16 100644 --- a/ios/uhabitsTest/IosFilesTest.swift +++ b/ios/uhabitsTest/IosFilesTest.swift @@ -32,6 +32,7 @@ class IosFilesTest: XCTestCase { let fm = FileManager.default let root = try fm.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path let path = "\(root)/test.txt" + print(path) fm.createFile(atPath: path, contents: "Hello world\nThis is line 2".data(using: .utf8), attributes: nil) let fileOpener = IosFileOpener() diff --git a/ios/uhabitsTest/IosSqlDatabaseTest.swift b/ios/uhabitsTest/IosSqlDatabaseTest.swift index 0093dfeda..37c7c4034 100644 --- a/ios/uhabitsTest/IosSqlDatabaseTest.swift +++ b/ios/uhabitsTest/IosSqlDatabaseTest.swift @@ -22,7 +22,7 @@ import XCTest class IosDatabaseTest: XCTestCase { func testUsage() { - let databaseOpener = IosDatabaseOpener() + let databaseOpener = IosDatabaseOpener(withLog: StandardLog()) let fileOpener = IosFileOpener() let dbFile = fileOpener.openUserFile(filename: "test.sqlite3") diff --git a/react-native/.eslintrc.js b/react-native/.eslintrc.js index cefef93ce..926390b82 100644 --- a/react-native/.eslintrc.js +++ b/react-native/.eslintrc.js @@ -3,5 +3,6 @@ module.exports = { "rules": { "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], "import/prefer-default-export": false, + "react/prefer-stateless-function": false, } }; diff --git a/react-native/index.ios.js b/react-native/index.ios.js index 9218a2f2d..6bae32bfd 100644 --- a/react-native/index.ios.js +++ b/react-native/index.ios.js @@ -21,23 +21,45 @@ import React from 'react'; import { AppRegistry, NavigatorIOS, - NativeModules, - NativeEventEmitter, } from 'react-native'; import ListHabitsScene from './src/components/ListHabits/index'; +import EditHabitScene from './src/components/EditHabit/index'; -function RootComponent() { - return ( - - ); +let navigator; + +const routes = { + index: { + component: ListHabitsScene, + title: 'Habits', + rightButtonSystemIcon: 'add', + onRightButtonPress: () => navigator.push(routes.newHabit), + passProps: { + onClickHabit: () => navigator.push(routes.newHabit), + onClickCheckmark: () => {}, + }, + }, + newHabit: { + component: EditHabitScene, + title: 'New Habit', + leftButtonTitle: 'Cancel', + rightButtonTitle: 'Save', + onLeftButtonPress: () => navigator.pop(), + onRightButtonPress: () => navigator.pop(), + }, +}; + + +class RootComponent extends React.Component { + render() { + return ( + { navigator = c; }} + translucent={false} + initialRoute={routes.index} + style={{ flex: 1 }} + /> + ); + } } AppRegistry.registerComponent('LoopHabitTracker', () => RootComponent); diff --git a/react-native/package-lock.json b/react-native/package-lock.json index 2488dbdd1..f0835a7c3 100644 --- a/react-native/package-lock.json +++ b/react-native/package-lock.json @@ -4910,38 +4910,6 @@ "color": "^2.0.1" } }, - "react-native-vector-icons": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.1.0.tgz", - "integrity": "sha512-1GF5I4VWgwnzBtVfAKNgEiR5ziHi5QaKL381wwApMzuiFgIJMNt5XIChuKwKoaiB86s+P5iMcYWxYCyENL96lA==", - "requires": { - "lodash": "^4.0.0", - "prop-types": "^15.6.2", - "yargs": "^8.0.2" - }, - "dependencies": { - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - } - } - }, "react-proxy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", diff --git a/react-native/package.json b/react-native/package.json index ce7146343..72507a4b1 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -9,8 +9,7 @@ "prop-types": "^15.6.2", "react": "^16.6.3", "react-native": "^0.57.8", - "react-native-svg": "^9.0.0", - "react-native-vector-icons": "^6.1.0" + "react-native-svg": "^9.0.0" }, "devDependencies": { "eslint": "^5.12.1", diff --git a/react-native/src/components/EditHabit/index.js b/react-native/src/components/EditHabit/index.js new file mode 100644 index 000000000..bb35cbd47 --- /dev/null +++ b/react-native/src/components/EditHabit/index.js @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2016-2019 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +import React from 'react'; +import { + StyleSheet, + TextInput, + View, + Text, + ScrollView, + TouchableOpacity, + TouchableHighlight, +} from 'react-native'; +import FontAwesome from '../../helpers/FontAwesome'; +import { Colors } from '../../helpers/Colors'; +import ColorCircle from '../common/ColorCircle'; + +const styles = StyleSheet.create({ + container: { + backgroundColor: Colors.appBackground, + flex: 1, + }, + item: { + fontSize: 17, + paddingTop: 15, + paddingBottom: 15, + paddingRight: 15, + paddingLeft: 15, + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + backgroundColor: '#fff', + }, + label: { + fontSize: 17, + flex: 1, + }, + value: { + fontSize: 17, + }, + multiline: { + }, + middle: { + borderBottomColor: Colors.headerBorderColor, + borderBottomWidth: StyleSheet.hairlineWidth, + }, + section: { + backgroundColor: Colors.appBackground, + marginTop: 30, + borderTopColor: Colors.headerBorderColor, + borderTopWidth: StyleSheet.hairlineWidth, + borderBottomColor: Colors.headerBorderColor, + borderBottomWidth: StyleSheet.hairlineWidth, + }, + icon: { + fontFamily: 'FontAwesome', + color: Colors.unchecked, + marginLeft: 10, + fontSize: 12, + paddingTop: 2, + }, + text: { + borderWidth: 1, + padding: 25, + backgroundColor: '#fff', + }, +}); + +export default class EditHabitsScene extends React.Component { + render() { + return ( + + + + + + + {}}> + + Color + + {FontAwesome.chevronRight} + + + {}}> + + Repeat + Every Day + {FontAwesome.chevronRight} + + + {}}> + + Reminder + 12:30 + {FontAwesome.chevronRight} + + + + + ); + } +} diff --git a/react-native/src/components/ListHabits/CheckmarkButton.js b/react-native/src/components/ListHabits/CheckmarkButton.js index 70f2c6b87..419eb1d34 100644 --- a/react-native/src/components/ListHabits/CheckmarkButton.js +++ b/react-native/src/components/ListHabits/CheckmarkButton.js @@ -29,14 +29,14 @@ import { Colors } from '../../helpers/Colors'; const styles = StyleSheet.create({ checkmarkBox: { - width: 44, - height: 44, + width: 55, + height: 55, justifyContent: 'center', alignItems: 'center', }, checkmark: { fontFamily: 'FontAwesome', - fontSize: 14, + fontSize: 17, }, }); diff --git a/react-native/src/components/ListHabits/HabitList.js b/react-native/src/components/ListHabits/HabitList.js index 78b8a569a..d31416f5e 100644 --- a/react-native/src/components/ListHabits/HabitList.js +++ b/react-native/src/components/ListHabits/HabitList.js @@ -17,12 +17,15 @@ * with this program. If not, see . */ +import PropTypes from 'prop-types'; import React from 'react'; import { FlatList, StyleSheet, Text, View, + TouchableHighlight, + TouchableOpacity, } from 'react-native'; import { Colors } from '../../helpers/Colors'; import { Emitter, Backend } from '../../helpers/Backend'; @@ -32,23 +35,19 @@ import CheckmarkButton from './CheckmarkButton'; const styles = StyleSheet.create({ item: { backgroundColor: Colors.itemBackground, - padding: 1, - marginTop: 0, - marginBottom: 1, - marginLeft: 0, - marginRight: 0, - elevation: 0, + borderBottomColor: Colors.headerBorderColor, + borderBottomWidth: StyleSheet.hairlineWidth, flexDirection: 'row', alignItems: 'stretch', }, ringContainer: { - width: 35, - height: 45, + width: 40, + height: 55, justifyContent: 'center', alignItems: 'center', }, labelContainer: { - width: 44, + width: 1, flex: 1, justifyContent: 'center', }, @@ -69,38 +68,51 @@ export default class HabitList extends React.Component { render() { const { habits } = this.state; + const { onClickHabit, onClickCheckmark } = this.props; return ( ( - - - + onClickHabit(item.key)}> + + + + + + + {item.name} + + + onClickCheckmark(item.key, 1)}> + + + onClickCheckmark(item.key, 2)}> + + + onClickCheckmark(item.key, 3)}> + + - - - {item.name} - - - - - - - + )} /> ); } } + +HabitList.propTypes = { + onClickHabit: PropTypes.func.isRequired, + onClickCheckmark: PropTypes.func.isRequired, +}; diff --git a/react-native/src/components/ListHabits/HabitListHeader.js b/react-native/src/components/ListHabits/HabitListHeader.js index 39b680d9a..44d93423c 100644 --- a/react-native/src/components/ListHabits/HabitListHeader.js +++ b/react-native/src/components/ListHabits/HabitListHeader.js @@ -24,7 +24,7 @@ import { Colors } from '../../helpers/Colors'; const styles = StyleSheet.create({ container: { - height: 50, + height: 55, paddingRight: 1, backgroundColor: Colors.headerBackground, flexDirection: 'row', @@ -35,7 +35,7 @@ const styles = StyleSheet.create({ borderBottomWidth: StyleSheet.hairlineWidth, }, column: { - width: 44, + width: 55, alignItems: 'center', }, text: { @@ -43,7 +43,7 @@ const styles = StyleSheet.create({ fontWeight: 'bold', }, dayName: { - fontSize: 10, + fontSize: 12, }, dayNumber: { fontSize: 12, @@ -81,11 +81,6 @@ export default class HabitListHeader extends React.Component { dayName: 'Thu', dayNumber: '3', }, - { - dayName: 'Wed', - dayNumber: '2', - }, - ].map((day) => { const { dayName, dayNumber } = day; return HabitListHeader.renderColumn(dayName, dayNumber); diff --git a/react-native/src/components/ListHabits/index.js b/react-native/src/components/ListHabits/index.js index 7565d1762..c92da2219 100644 --- a/react-native/src/components/ListHabits/index.js +++ b/react-native/src/components/ListHabits/index.js @@ -17,6 +17,7 @@ * with this program. If not, see . */ +import PropTypes from 'prop-types'; import React from 'react'; import { StyleSheet, View } from 'react-native'; import { Colors } from '../../helpers/Colors'; @@ -30,11 +31,22 @@ const styles = StyleSheet.create({ }, }); -export default function ListHabitsScene() { - return ( - - - - - ); +export default class ListHabitsScene extends React.Component { + render() { + const { onClickHabit, onClickCheckmark } = this.props; + return ( + + + + + ); + } } + +ListHabitsScene.propTypes = { + onClickHabit: PropTypes.func.isRequired, + onClickCheckmark: PropTypes.func.isRequired, +}; diff --git a/ios/uhabits/IosLog.swift b/react-native/src/components/common/ColorCircle.js similarity index 58% rename from ios/uhabits/IosLog.swift rename to react-native/src/components/common/ColorCircle.js index 94f7fea0d..b117ffeae 100644 --- a/ios/uhabits/IosLog.swift +++ b/react-native/src/components/common/ColorCircle.js @@ -17,14 +17,22 @@ * with this program. If not, see . */ -import Foundation +import React from 'react'; +import PropTypes from 'prop-types'; +import Svg, { Circle } from 'react-native-svg'; +import { Colors } from '../../helpers/Colors'; -class IosLog : NSObject, Log { - func info(msg: String) { - print("[I] \(msg)") - } - - func debug(msg: String) { - print("[D] \(msg)") - } +export default function ColorCircle(props) { + const { size, color } = props; + return ( + + + + + ); } + +ColorCircle.propTypes = { + size: PropTypes.number.isRequired, + color: PropTypes.string.isRequired, +}; diff --git a/react-native/src/helpers/FontAwesome.js b/react-native/src/helpers/FontAwesome.js index cee76b6d0..5f66a1c5e 100644 --- a/react-native/src/helpers/FontAwesome.js +++ b/react-native/src/helpers/FontAwesome.js @@ -1,4 +1,5 @@ module.exports = { check: '\uf00c', times: '\uf00d', + chevronRight: '\uf054', }; From 8544c5dc8a9e51f56de922e502127321454b9ed8 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Mon, 25 Mar 2019 20:39:44 -0500 Subject: [PATCH 11/93] Remove react-native; rewrite main screen in (native) swift --- core/assets/main/fonts/Roboto-Bold.ttf | Bin 0 -> 170760 bytes core/assets/main/fonts/Roboto-Regular.ttf | Bin 0 -> 171676 bytes .../components/CheckmarkButton/explicit.png | Bin 0 -> 350 bytes .../components/CheckmarkButton/implicit.png | Bin 0 -> 345 bytes .../components/CheckmarkButton/unchecked.png | Bin 0 -> 424 bytes .../test/components/HabitListHeader/light.png | Bin 0 -> 4129 bytes .../components/NumberButton/render_above.png | Bin 0 -> 1594 bytes .../components/NumberButton/render_below.png | Bin 0 -> 1273 bytes .../components/NumberButton/render_zero.png | Bin 0 -> 1238 bytes core/assets/test/components/Ring/draw1.png | Bin 0 -> 3593 bytes .../components/old/common/BarChart/render.png | Bin 0 -> 14396 bytes .../old/common/BarChart/renderDataOffset.png | Bin 0 -> 11839 bytes .../common/BarChart/renderDifferentSize.png | Bin 0 -> 9719 bytes .../old/common/BarChart/renderTransparent.png | Bin 0 -> 13647 bytes .../old/common/FrequencyChart/render.png | Bin 0 -> 9182 bytes .../FrequencyChart/renderDataOffset.png | Bin 0 -> 6428 bytes .../FrequencyChart/renderDifferentSize.png | Bin 0 -> 16536 bytes .../FrequencyChart/renderTransparent.png | Bin 0 -> 9182 bytes .../old/common/HistoryChart/render.png | Bin 0 -> 62352 bytes .../common/HistoryChart/renderDataOffset.png | Bin 0 -> 59814 bytes .../HistoryChart/renderDifferentSize.png | Bin 0 -> 32111 bytes .../common/HistoryChart/renderTransparent.png | Bin 0 -> 57737 bytes .../old/common/ScoreChart/render.png | Bin 0 -> 20837 bytes .../common/ScoreChart/renderDataOffset.png | Bin 0 -> 20729 bytes .../common/ScoreChart/renderDifferentSize.png | Bin 0 -> 15566 bytes .../old/common/ScoreChart/renderMonthly.png | Bin 0 -> 19123 bytes .../common/ScoreChart/renderTransparent.png | Bin 0 -> 17976 bytes .../old/common/ScoreChart/renderYearly.png | Bin 0 -> 10718 bytes .../old/common/StreakChart/render.png | Bin 0 -> 15292 bytes .../common/StreakChart/renderSmallSize.png | Bin 0 -> 2992 bytes .../common/StreakChart/renderTransparent.png | Bin 0 -> 15292 bytes .../old/habits/show/FrequencyCard/render.png | Bin 0 -> 24941 bytes .../old/habits/show/HistoryCard/render.png | Bin 0 -> 53529 bytes .../old/habits/show/OverviewCard/render.png | Bin 0 -> 14807 bytes .../old/habits/show/ScoreCard/render.png | Bin 0 -> 30968 bytes .../old/habits/show/StreakCard/render.png | Bin 0 -> 20796 bytes .../old/habits/show/SubtitleCard/render.png | Bin 0 -> 15389 bytes .../old/widgets/CheckmarkWidget/render.png | Bin 0 -> 9391 bytes .../widgets/CheckmarkWidgetView/checked.png | Bin 0 -> 8801 bytes .../implicitly_checked.png | Bin 0 -> 10932 bytes .../CheckmarkWidgetView/large_size.png | Bin 0 -> 18212 bytes .../widgets/CheckmarkWidgetView/unchecked.png | Bin 0 -> 11088 bytes .../old/widgets/FrequencyWidget/render.png | Bin 0 -> 21357 bytes .../old/widgets/HistoryWidget/render.png | Bin 0 -> 37151 bytes .../old/widgets/ScoreWidget/render.png | Bin 0 -> 22237 bytes .../old/widgets/StreakWidget/render.png | Bin 0 -> 22184 bytes .../kotlin/org/isoron/uhabits/Backend.kt | 30 +- .../kotlin/org/isoron/uhabits/gui/Canvas.kt | 45 + .../kotlin/org/isoron/uhabits/gui/Colors.kt | 20 +- .../Timestamp.kt => gui/FontAwesome.kt} | 9 +- .../kotlin/org/isoron/uhabits/gui/Themes.kt | 68 + .../uhabits/gui/components/CheckmarkButton.kt | 41 + .../Color.kt => gui/components/Component.kt} | 8 +- .../uhabits/gui/components/HabitListHeader.kt | 58 + .../uhabits/gui/components/NumberButton.kt | 72 + .../org/isoron/uhabits/gui/components/Ring.kt | 53 + .../org/isoron/uhabits/models/Checkmark.kt | 4 +- .../kotlin/org/isoron/uhabits/models/Habit.kt | 4 +- .../isoron/uhabits/models/HabitRepository.kt | 5 +- .../kotlin/org/isoron/uhabits/utils/Dates.kt | 36 +- .../org/isoron/uhabits/utils/IosFiles.kt | 55 - .../org/isoron/uhabits/gui/JavaCanvas.kt | 144 + .../org/isoron/uhabits/utils/JavaDates.kt | 40 + .../org/isoron/uhabits/utils/JavaFiles.kt | 5 + .../jvmTest/kotlin/org/isoron/uhabits/Base.kt | 99 + .../org/isoron/uhabits/gui/JavaCanvasTest.kt | 69 + .../gui/components/CheckmarkButtonTest.kt | 46 + .../gui/components/HabitListHeaderTest.kt | 41 + .../gui/components/NumberButtonTest.kt | 66 + .../components/RingTest.kt} | 30 +- .../uhabits/models/HabitRepositoryTest.kt | 7 +- .../org/isoron/uhabits/utils/JavaDatesTest.kt | 50 + .../ListHabits/ListHabitsController.swift | 41 - ios/.gitignore | 28 - .../Application/AppDelegate.swift | 9 +- .../AppIcon.appiconset/Contents.json | 0 .../Application/Assets.xcassets/Contents.json | 0 ios/{uhabits => Application}/BridgingHeader.h | 4 - .../Application}/EditHabitController.swift | 0 {ios-native => ios}/Application/Info.plist | 4 + .../Application/Launch.storyboard | 0 ios/Application/ListHabitsController.swift | 151 + ios/Application/Platform/IosCanvas.swift | 141 + .../Platform}/IosDatabase.swift | 0 ios/Application/Platform/IosDates.swift | 57 + .../Platform/IosExtensions.swift} | 22 +- ios/Application/Platform/IosFiles.swift | 79 + ios/Assets/databases/template.db | Bin 0 -> 32768 bytes .../Assets/fonts/FontAwesome.ttf | Bin ios/Assets/migrations/001.sql | 0 ios/Assets/migrations/002.sql | 0 ios/Assets/migrations/003.sql | 0 ios/Assets/migrations/004.sql | 0 ios/Assets/migrations/005.sql | 0 ios/Assets/migrations/006.sql | 0 ios/Assets/migrations/007.sql | 0 ios/Assets/migrations/008.sql | 0 ios/Assets/migrations/009.sql | 5 + ios/Assets/migrations/010.sql | 3 + ios/Assets/migrations/011.sql | 1 + ios/Assets/migrations/012.sql | 3 + ios/Assets/migrations/013.sql | 4 + ios/Assets/migrations/014.sql | 14 + ios/Assets/migrations/015.sql | 3 + ios/Assets/migrations/016.sql | 2 + ios/Assets/migrations/017.sql | 5 + ios/Assets/migrations/018.sql | 3 + ios/Assets/migrations/019.sql | 1 + ios/Assets/migrations/020.sql | 3 + ios/Assets/migrations/021.sql | 12 + ios/Assets/migrations/022.sql | 11 + {ios-native => ios}/Tests/Info.plist | 4 + ios/Tests/Platform/IosCanvasTest.swift | 69 + ios/Tests/Platform/IosDatesTest.swift | 48 + .../Platform}/IosFilesTest.swift | 0 .../Platform}/IosSqlDatabaseTest.swift | 10 +- ios/uhabits.xcodeproj/project.pbxproj | 1340 +--- .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 5 + .../UserInterfaceState.xcuserstate | Bin 0 -> 114658 bytes .../WorkspaceSettings.xcsettings | 18 + .../xcschemes/xcschememanagement.plist | 5 + .../xcschemes/uhabits.xcscheme | 46 +- .../xcschemes/xcschememanagement.plist | 14 + ios/uhabits/AppDelegate.swift | 43 - ios/uhabits/Base.lproj/LaunchScreen.xib | 23 - ios/uhabits/CoreModule.swift | 81 - .../AppIcon.appiconset/Contents.json | 53 - ios/uhabits/Images.xcassets/Contents.json | 6 - ios/uhabits/Info.plist | 61 - ios/uhabitsTest/Info.plist | 22 - node_modules | 1 - react-native/.eslintrc.js | 8 - react-native/index.android.js | 68 - react-native/index.ios.js | 65 - react-native/package-lock.json | 6563 ----------------- react-native/package.json | 21 - react-native/res/images/ic_add.png | Bin 164 -> 0 bytes react-native/res/images/ic_filter.png | Bin 137 -> 0 bytes .../src/components/EditHabit/index.js | 128 - .../components/ListHabits/CheckmarkButton.js | 78 - .../src/components/ListHabits/HabitList.js | 118 - .../components/ListHabits/HabitListHeader.js | 97 - .../src/components/ListHabits/index.js | 52 - react-native/src/components/common/Ring.js | 63 - react-native/src/helpers/Colors.js | 51 - react-native/src/helpers/FontAwesome.js | 5 - 148 files changed, 2000 insertions(+), 8892 deletions(-) create mode 100755 core/assets/main/fonts/Roboto-Bold.ttf create mode 100755 core/assets/main/fonts/Roboto-Regular.ttf create mode 100644 core/assets/test/components/CheckmarkButton/explicit.png create mode 100644 core/assets/test/components/CheckmarkButton/implicit.png create mode 100644 core/assets/test/components/CheckmarkButton/unchecked.png create mode 100644 core/assets/test/components/HabitListHeader/light.png create mode 100644 core/assets/test/components/NumberButton/render_above.png create mode 100644 core/assets/test/components/NumberButton/render_below.png create mode 100644 core/assets/test/components/NumberButton/render_zero.png create mode 100644 core/assets/test/components/Ring/draw1.png create mode 100644 core/assets/test/components/old/common/BarChart/render.png create mode 100644 core/assets/test/components/old/common/BarChart/renderDataOffset.png create mode 100644 core/assets/test/components/old/common/BarChart/renderDifferentSize.png create mode 100644 core/assets/test/components/old/common/BarChart/renderTransparent.png create mode 100644 core/assets/test/components/old/common/FrequencyChart/render.png create mode 100644 core/assets/test/components/old/common/FrequencyChart/renderDataOffset.png create mode 100644 core/assets/test/components/old/common/FrequencyChart/renderDifferentSize.png create mode 100644 core/assets/test/components/old/common/FrequencyChart/renderTransparent.png create mode 100644 core/assets/test/components/old/common/HistoryChart/render.png create mode 100644 core/assets/test/components/old/common/HistoryChart/renderDataOffset.png create mode 100644 core/assets/test/components/old/common/HistoryChart/renderDifferentSize.png create mode 100644 core/assets/test/components/old/common/HistoryChart/renderTransparent.png create mode 100644 core/assets/test/components/old/common/ScoreChart/render.png create mode 100644 core/assets/test/components/old/common/ScoreChart/renderDataOffset.png create mode 100644 core/assets/test/components/old/common/ScoreChart/renderDifferentSize.png create mode 100644 core/assets/test/components/old/common/ScoreChart/renderMonthly.png create mode 100644 core/assets/test/components/old/common/ScoreChart/renderTransparent.png create mode 100644 core/assets/test/components/old/common/ScoreChart/renderYearly.png create mode 100644 core/assets/test/components/old/common/StreakChart/render.png create mode 100644 core/assets/test/components/old/common/StreakChart/renderSmallSize.png create mode 100644 core/assets/test/components/old/common/StreakChart/renderTransparent.png create mode 100644 core/assets/test/components/old/habits/show/FrequencyCard/render.png create mode 100644 core/assets/test/components/old/habits/show/HistoryCard/render.png create mode 100644 core/assets/test/components/old/habits/show/OverviewCard/render.png create mode 100644 core/assets/test/components/old/habits/show/ScoreCard/render.png create mode 100644 core/assets/test/components/old/habits/show/StreakCard/render.png create mode 100644 core/assets/test/components/old/habits/show/SubtitleCard/render.png create mode 100644 core/assets/test/components/old/widgets/CheckmarkWidget/render.png create mode 100644 core/assets/test/components/old/widgets/CheckmarkWidgetView/checked.png create mode 100644 core/assets/test/components/old/widgets/CheckmarkWidgetView/implicitly_checked.png create mode 100644 core/assets/test/components/old/widgets/CheckmarkWidgetView/large_size.png create mode 100644 core/assets/test/components/old/widgets/CheckmarkWidgetView/unchecked.png create mode 100644 core/assets/test/components/old/widgets/FrequencyWidget/render.png create mode 100644 core/assets/test/components/old/widgets/HistoryWidget/render.png create mode 100644 core/assets/test/components/old/widgets/ScoreWidget/render.png create mode 100644 core/assets/test/components/old/widgets/StreakWidget/render.png create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/Canvas.kt rename react-native/src/helpers/Backend.js => core/src/commonMain/kotlin/org/isoron/uhabits/gui/Colors.kt (70%) rename core/src/commonMain/kotlin/org/isoron/uhabits/{models/Timestamp.kt => gui/FontAwesome.kt} (84%) create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/Themes.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/components/CheckmarkButton.kt rename core/src/commonMain/kotlin/org/isoron/uhabits/{models/Color.kt => gui/components/Component.kt} (86%) create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/components/HabitListHeader.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/components/NumberButton.kt create mode 100644 core/src/commonMain/kotlin/org/isoron/uhabits/gui/components/Ring.kt rename react-native/src/components/common/ColorCircle.js => core/src/commonMain/kotlin/org/isoron/uhabits/utils/Dates.kt (55%) delete mode 100644 core/src/iosMain/kotlin/org/isoron/uhabits/utils/IosFiles.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/gui/JavaCanvas.kt create mode 100644 core/src/jvmMain/kotlin/org/isoron/uhabits/utils/JavaDates.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/Base.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/gui/JavaCanvasTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/gui/components/CheckmarkButtonTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/gui/components/HabitListHeaderTest.kt create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/gui/components/NumberButtonTest.kt rename core/src/jvmTest/kotlin/org/isoron/uhabits/{BaseTest.kt => gui/components/RingTest.kt} (58%) create mode 100644 core/src/jvmTest/kotlin/org/isoron/uhabits/utils/JavaDatesTest.kt delete mode 100644 ios-native/Application/ListHabits/ListHabitsController.swift delete mode 100644 ios/.gitignore rename {ios-native => ios}/Application/AppDelegate.swift (83%) rename {ios-native => ios}/Application/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {ios-native => ios}/Application/Assets.xcassets/Contents.json (100%) rename ios/{uhabits => Application}/BridgingHeader.h (85%) rename {ios-native/Application/EditHabit => ios/Application}/EditHabitController.swift (100%) rename {ios-native => ios}/Application/Info.plist (94%) rename {ios-native => ios}/Application/Launch.storyboard (100%) create mode 100644 ios/Application/ListHabitsController.swift create mode 100644 ios/Application/Platform/IosCanvas.swift rename ios/{uhabits => Application/Platform}/IosDatabase.swift (100%) create mode 100644 ios/Application/Platform/IosDates.swift rename ios/{uhabits/CoreModuleBridge.m => Application/Platform/IosExtensions.swift} (69%) create mode 100644 ios/Application/Platform/IosFiles.swift create mode 100644 ios/Assets/databases/template.db rename react-native/res/fonts/FontAwesome Regular.ttf => ios/Assets/fonts/FontAwesome.ttf (100%) create mode 100644 ios/Assets/migrations/001.sql create mode 100644 ios/Assets/migrations/002.sql create mode 100644 ios/Assets/migrations/003.sql create mode 100644 ios/Assets/migrations/004.sql create mode 100644 ios/Assets/migrations/005.sql create mode 100644 ios/Assets/migrations/006.sql create mode 100644 ios/Assets/migrations/007.sql create mode 100644 ios/Assets/migrations/008.sql create mode 100644 ios/Assets/migrations/009.sql create mode 100644 ios/Assets/migrations/010.sql create mode 100644 ios/Assets/migrations/011.sql create mode 100644 ios/Assets/migrations/012.sql create mode 100644 ios/Assets/migrations/013.sql create mode 100644 ios/Assets/migrations/014.sql create mode 100644 ios/Assets/migrations/015.sql create mode 100644 ios/Assets/migrations/016.sql create mode 100644 ios/Assets/migrations/017.sql create mode 100644 ios/Assets/migrations/018.sql create mode 100644 ios/Assets/migrations/019.sql create mode 100644 ios/Assets/migrations/020.sql create mode 100644 ios/Assets/migrations/021.sql create mode 100644 ios/Assets/migrations/022.sql rename {ios-native => ios}/Tests/Info.plist (89%) create mode 100644 ios/Tests/Platform/IosCanvasTest.swift create mode 100644 ios/Tests/Platform/IosDatesTest.swift rename ios/{uhabitsTest => Tests/Platform}/IosFilesTest.swift (100%) rename ios/{uhabitsTest => Tests/Platform}/IosSqlDatabaseTest.swift (93%) create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/xcuserdata/isoron.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/xcuserdata/isoron.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 ios/uhabits.xcodeproj/project.xcworkspace/xcuserdata/isoron.xcuserdatad/xcschemes/xcschememanagement.plist rename ios/uhabits.xcodeproj/{xcshareddata => xcuserdata/isoron.xcuserdatad}/xcschemes/uhabits.xcscheme (70%) create mode 100644 ios/uhabits.xcodeproj/xcuserdata/isoron.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 ios/uhabits/AppDelegate.swift delete mode 100644 ios/uhabits/Base.lproj/LaunchScreen.xib delete mode 100644 ios/uhabits/CoreModule.swift delete mode 100644 ios/uhabits/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 ios/uhabits/Images.xcassets/Contents.json delete mode 100644 ios/uhabits/Info.plist delete mode 100644 ios/uhabitsTest/Info.plist delete mode 120000 node_modules delete mode 100644 react-native/.eslintrc.js delete mode 100644 react-native/index.android.js delete mode 100644 react-native/index.ios.js delete mode 100644 react-native/package-lock.json delete mode 100644 react-native/package.json delete mode 100644 react-native/res/images/ic_add.png delete mode 100644 react-native/res/images/ic_filter.png delete mode 100644 react-native/src/components/EditHabit/index.js delete mode 100644 react-native/src/components/ListHabits/CheckmarkButton.js delete mode 100644 react-native/src/components/ListHabits/HabitList.js delete mode 100644 react-native/src/components/ListHabits/HabitListHeader.js delete mode 100644 react-native/src/components/ListHabits/index.js delete mode 100644 react-native/src/components/common/Ring.js delete mode 100644 react-native/src/helpers/Colors.js delete mode 100644 react-native/src/helpers/FontAwesome.js diff --git a/core/assets/main/fonts/Roboto-Bold.ttf b/core/assets/main/fonts/Roboto-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d3f01ad245b628f386ac95786f53167038720eb2 GIT binary patch literal 170760 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�!3r53e9=KAt@g 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