diff --git a/.gitignore b/.gitignore index a4a93636..00422e7f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,41 @@ -node_modules/ -.expo/ -npm-debug.* -package-lock.json -yarn.lock -.idea -.tmp -ios/Pods -ios/VocaDB/GoogleService-Info.plist -.packages -*.lock -build -android/key.local.properties -android/.gradle -android/**/*.iml -ios/Flutter/Generated.xconfig -ios/Runner/GeneratedPluginRegistrant.* +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ .flutter-plugins -.dart_tool/* \ No newline at end of file +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib2/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json diff --git a/.metadata b/.metadata new file mode 100644 index 00000000..182cccaf --- /dev/null +++ b/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 78910062997c3a836feee883712c241a5fd22983 + channel: stable + +project_type: app diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4145878e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -os: - - linux -sudo: false -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - libstdc++6 - - fonts-droid-fallback -before_script: - - git clone https://github.com/flutter/flutter.git -b beta - - ./flutter/bin/flutter doctor -script: - - ./flutter/bin/flutter test -cache: - directories: - - $HOME/.pub-cache \ No newline at end of file diff --git a/README.md b/README.md index c22b3524..e4e12de4 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,26 @@ VocaDB mobile version with [Flutter framework](https://flutter.dev/). Also this - [Android Studio](https://developer.android.com/studio) - [IntelliJ](https://www.jetbrains.com/idea/download/) -## Translation +## API Documentation +Use [dartdoc](https://dart.dev/tools/dartdoc) for generate documentation. -Translation files in _assets/i18n_. If anyone would like to update or add more language, You can add/edit and pull request to me. + +### Installing dartdoc + +Run `pub global activate dartdoc` to install the latest version of dartdoc compatible with your SDK. +``` +$ pub global activate dartdoc +``` +Then run `dartdoc` command to generate document. + +``` +$ dartdoc +``` + +Document generated result to {current_dir}/doc/api and can open index.html to view it in browser. + +## UI Translation + +Translation files in _lib/src/i18n_. File should be named with `{language code}.dart` or `{language_code}_{country_code}.dart`. + +If anyone would like to update or add more language, You can add/edit and pull request to me. \ No newline at end of file diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 00000000..0a741cb4 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/android/app/build.gradle b/android/app/build.gradle index 0a7e8401..5b3399c3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -21,16 +21,16 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { compileSdkVersion 29 @@ -45,30 +45,24 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.coolappz.Vocadb" - minSdkVersion 20 + minSdkVersion 17 targetSdkVersion 29 - versionCode 102339 - versionName "3.0.1" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + versionName "3.1.0-beta.1" + versionCode flutterVersionCode.toInteger() } signingConfigs { release { - keyAlias System.getenv("BITRISEIO_ANDROID_KEYSTORE_ALIAS") - keyPassword System.getenv("BITRISEIO_ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD") - storeFile file('release-key.keystore') - storePassword System.getenv("BITRISEIO_ANDROID_KEYSTORE_PASSWORD") + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] } } + buildTypes { release { signingConfig signingConfigs.release - - minifyEnabled true - shrinkResources false - useProguard true - - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } @@ -79,10 +73,6 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } -apply plugin: 'io.fabric' apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro deleted file mode 100644 index 0b86a0f6..00000000 --- a/android/app/proguard-rules.pro +++ /dev/null @@ -1,8 +0,0 @@ -#Flutter Wrapper --keep class io.flutter.app.** { *; } --keep class io.flutter.plugin.** { *; } --keep class io.flutter.util.** { *; } --keep class io.flutter.view.** { *; } --keep class io.flutter.** { *; } --keep class io.flutter.plugins.** { *; } --keep class io.flutter.embedding.** { *; } \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..3ff6cfe7 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b2a26c8a..1cbc90bf 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,10 +1,6 @@ + package="com.coolappz.Vocadb"> - + + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> + + + + diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java deleted file mode 100644 index d007606a..00000000 --- a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java +++ /dev/null @@ -1,23 +0,0 @@ -package io.flutter.plugins; - -import io.flutter.plugin.common.PluginRegistry; - -/** - * Generated file. Do not edit. - */ -public final class GeneratedPluginRegistrant { - public static void registerWith(PluginRegistry registry) { - if (alreadyRegisteredWith(registry)) { - return; - } - } - - private static boolean alreadyRegisteredWith(PluginRegistry registry) { - final String key = GeneratedPluginRegistrant.class.getCanonicalName(); - if (registry.hasPlugin(key)) { - return true; - } - registry.registrarFor(key); - return false; - } -} diff --git a/android/app/src/main/kotlin/com/coolappz/Vocadb/MainActivity.kt b/android/app/src/main/kotlin/com/coolappz/Vocadb/MainActivity.kt index e521a103..8d9283da 100644 --- a/android/app/src/main/kotlin/com/coolappz/Vocadb/MainActivity.kt +++ b/android/app/src/main/kotlin/com/coolappz/Vocadb/MainActivity.kt @@ -1,13 +1,6 @@ package com.coolappz.Vocadb -import android.os.Bundle - -import io.flutter.app.FlutterActivity -import io.flutter.plugins.GeneratedPluginRegistrant +import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - GeneratedPluginRegistrant.registerWith(this) - } } diff --git a/android/app/src/main/res/drawable-hdpi/ic_shortcut_album_search.png b/android/app/src/main/res/drawable-hdpi/ic_shortcut_album_search.png deleted file mode 100644 index ec16f9a5..00000000 Binary files a/android/app/src/main/res/drawable-hdpi/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-hdpi/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable-hdpi/ic_shortcut_artist_search.png deleted file mode 100644 index 59afd0e7..00000000 Binary files a/android/app/src/main/res/drawable-hdpi/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-hdpi/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable-hdpi/ic_shortcut_quick_search.png deleted file mode 100644 index c778cc10..00000000 Binary files a/android/app/src/main/res/drawable-hdpi/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-hdpi/ic_shortcut_song_search.png b/android/app/src/main/res/drawable-hdpi/ic_shortcut_song_search.png deleted file mode 100644 index 7ee40ee9..00000000 Binary files a/android/app/src/main/res/drawable-hdpi/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_shortcut_album_search.png b/android/app/src/main/res/drawable-mdpi/ic_shortcut_album_search.png deleted file mode 100644 index ac855e32..00000000 Binary files a/android/app/src/main/res/drawable-mdpi/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable-mdpi/ic_shortcut_artist_search.png deleted file mode 100644 index 75dbad3e..00000000 Binary files a/android/app/src/main/res/drawable-mdpi/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable-mdpi/ic_shortcut_quick_search.png deleted file mode 100644 index ace5eac6..00000000 Binary files a/android/app/src/main/res/drawable-mdpi/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/ic_shortcut_song_search.png b/android/app/src/main/res/drawable-mdpi/ic_shortcut_song_search.png deleted file mode 100644 index c6a20522..00000000 Binary files a/android/app/src/main/res/drawable-mdpi/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_album_search.png b/android/app/src/main/res/drawable-xhdpi/ic_shortcut_album_search.png deleted file mode 100644 index c0840881..00000000 Binary files a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable-xhdpi/ic_shortcut_artist_search.png deleted file mode 100644 index 869e6c4d..00000000 Binary files a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable-xhdpi/ic_shortcut_quick_search.png deleted file mode 100644 index 39c0acd5..00000000 Binary files a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_song_search.png b/android/app/src/main/res/drawable-xhdpi/ic_shortcut_song_search.png deleted file mode 100644 index 47567181..00000000 Binary files a/android/app/src/main/res/drawable-xhdpi/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_album_search.png b/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_album_search.png deleted file mode 100644 index 99a4e746..00000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_artist_search.png deleted file mode 100644 index ae9540e0..00000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_quick_search.png deleted file mode 100644 index 7fec57e1..00000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_song_search.png b/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_song_search.png deleted file mode 100644 index 8e80adfe..00000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_album_search.png b/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_album_search.png deleted file mode 100644 index ef1c2cd6..00000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_artist_search.png deleted file mode 100644 index 3c28845d..00000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_quick_search.png deleted file mode 100644 index 328bfb91..00000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_song_search.png b/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_song_search.png deleted file mode 100644 index d3ebdbe9..00000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/ic_shortcut_album_search.png b/android/app/src/main/res/drawable/ic_shortcut_album_search.png deleted file mode 100644 index ac855e32..00000000 Binary files a/android/app/src/main/res/drawable/ic_shortcut_album_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/ic_shortcut_artist_search.png b/android/app/src/main/res/drawable/ic_shortcut_artist_search.png deleted file mode 100644 index 75dbad3e..00000000 Binary files a/android/app/src/main/res/drawable/ic_shortcut_artist_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/ic_shortcut_quick_search.png b/android/app/src/main/res/drawable/ic_shortcut_quick_search.png deleted file mode 100644 index ace5eac6..00000000 Binary files a/android/app/src/main/res/drawable/ic_shortcut_quick_search.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/ic_shortcut_song_search.png b/android/app/src/main/res/drawable/ic_shortcut_song_search.png deleted file mode 100644 index c6a20522..00000000 Binary files a/android/app/src/main/res/drawable/ic_shortcut_song_search.png and /dev/null differ diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 00fa4417..1f83a33f 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,8 +1,18 @@ + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..63288243 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle index 15a614a5..4273368a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,19 +1,14 @@ buildscript { - ext.kotlin_version = '1.3.30' + ext.kotlin_version = '1.3.50' repositories { google() jcenter() - - maven { - url 'https://maven.fabric.io/public' - } } dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' - classpath 'com.google.gms:google-services:4.2.0' + classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'io.fabric.tools:gradle:1.26.1' + classpath 'com.google.gms:google-services:4.3.3' } } diff --git a/android/fastlane/Appfile b/android/fastlane/Appfile deleted file mode 100644 index b2543495..00000000 --- a/android/fastlane/Appfile +++ /dev/null @@ -1,2 +0,0 @@ -json_key_file("./google-play-service-account.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one -package_name("com.coolappz.Vocadb") # e.g. com.krausefx.app diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile deleted file mode 100644 index b3ca584f..00000000 --- a/android/fastlane/Fastfile +++ /dev/null @@ -1,29 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# -# For a list of all available plugins, check out -# -# https://docs.fastlane.tools/plugins/available-plugins -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -default_platform(:android) - -platform :android do - desc "Submit to Beta" - lane :beta do - upload_to_play_store(track: 'internal', - skip_upload_apk: true, - skip_upload_metadata: true, - skip_upload_changelogs: true, - skip_upload_images: true, - skip_upload_screenshots: true, - aab: './../build/app/outputs/bundle/release/app.aab') - end -end diff --git a/android/fastlane/README.md b/android/fastlane/README.md deleted file mode 100644 index 68e392bd..00000000 --- a/android/fastlane/README.md +++ /dev/null @@ -1,29 +0,0 @@ -fastlane documentation -================ -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -``` -xcode-select --install -``` - -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew cask install fastlane` - -# Available Actions -## Android -### android beta -``` -fastlane android beta -``` -Submit to Beta - ----- - -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/android/gradle.properties b/android/gradle.properties index 678cd624..a6738207 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true android.enableJetifier=true -android.useAndroidX=true \ No newline at end of file +android.enableR8=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13372aef..00000000 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 63ab3ae0..296b146b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/android/gradlew b/android/gradlew deleted file mode 100755 index 9d82f789..00000000 --- a/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# 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 -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - 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 - -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" ] ; 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 - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100644 index aec99730..00000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@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 - -@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= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@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 Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_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=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -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/android/key.properties b/android/key.properties deleted file mode 100644 index a3608b03..00000000 --- a/android/key.properties +++ /dev/null @@ -1,4 +0,0 @@ -storePassword=$BITRISEIO_ANDROID_KEYSTORE_PASSWORD -keyPassword=$BITRISEIO_ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD -keyAlias=$BITRISEIO_ANDROID_KEYSTORE_ALIAS -storeFile=$BITRISEIO_ANDROID_KEYSTORE_URL \ No newline at end of file diff --git a/android/local.properties b/android/local.properties deleted file mode 100644 index 89e33c40..00000000 --- a/android/local.properties +++ /dev/null @@ -1,4 +0,0 @@ -sdk.dir=/Users/up2up/Library/Android/sdk -flutter.sdk=/Users/up2up/flutter -flutter.versionName=3.0.0 -flutter.versionCode=1 \ No newline at end of file diff --git a/android/settings.gradle b/android/settings.gradle index 5a2f14fb..44e62bcf 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,15 +1,11 @@ include ':app' -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() -def plugins = new Properties() -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') -if (pluginsFile.exists()) { - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } -} +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } -plugins.each { name, path -> - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() - include ":$name" - project(":$name").projectDir = pluginDirectory -} +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/android/vocadb_android.iml b/android/vocadb_android.iml deleted file mode 100644 index 068decce..00000000 --- a/android/vocadb_android.iml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/assets/i18n/en.json b/assets/i18n/en.json deleted file mode 100644 index 2f962fcb..00000000 --- a/assets/i18n/en.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "label": { - "menu": "Menu", - "home": "Home", - "playAll": "Play all", - "theme": "Theme", - "songs": "Songs", - "song": "Song", - "album": "Album", - "albums": "Albums", - "artists": "Artists", - "artist": "Artist", - "events": "Events", - "event": "Event", - "releaseEvents": "Release events", - "tags": "Tags", - "anything": "Anything", - "highlighted": "Highlight PVs", - "recentAlbums": "Recent or upcoming albums", - "randomPopularAlbums": "Random popular albums", - "upcomingEvent": "Upcoming events", - "songType": "Song type", - "sort": "Sort", - "ranking": "Ranking", - "artistType": "Artist type", - "findSong": "Find song", - "findAlbum": "Find album", - "findArtist": "Find artist", - "findEvent": "Find event", - "findTag": "Find tag", - "findAnything": "Find anything", - "filter": "Filter", - "filterBy": "Filter by", - "vocalist": "Vocalist", - "all": "all", - "vocaloid": "Vocaloid", - "utau": "UTAU", - "minimumScore": "Minimum score", - "name": "Name", - "discType": "Album type", - "category": "Category", - "date": "Date", - "dateRange": "Date range", - "from": "From", - "to": "To", - "voicebankReleaseDate": "Voicebank release date", - "selectArtist": "Select artist", - "selectTag": "Select tag", - "recentSearch": "Recent search", - "clearFilter": "Clear filter", - "type": "Type", - "favorite": "Favorite", - "share": "Share", - "originalMedia": "Original media", - "lyrics": "Lyrics", - "popularSongs": "Popular songs", - "popularAlbums": "Popular albums", - "ads": "Ads / crossfades", - "trackList": "Tracklist", - "disc": "Disc", - "venue": "Venue", - "description": "Description", - "relatedLink": "Related link", - "setlist": "Setlist", - "duration": "Duration", - "add": "Add", - "follow": "Follow", - "following": "Following", - "baseVoicebank": "Base voicebank", - "series": "Series", - "official": "Official", - "commercial": "Commercial", - "references": "References", - "recentSongsPVs": "Recent Songs / PVs", - "alternateVersion": "Alternate version", - "likeMatches": "Users who liked this also liked", - "artistMatches": "Matching artists", - "tagMatches": "Matching tags", - "relatedSongs": "Related songs", - "searchYoutube": "Search Youtube", - "showAll": "Show all", - "developerContact": "Developer contacts", - "favoriteSongs": "Favorite songs", - "favoriteAlbums": "Collections", - "favoriteArtists": "Followed artists", - "settings": "Settings", - "about": "About", - "contact": "Contact us", - "general": "General", - "uiLanguage": "Interface language", - "contentLanguage": "Preferred display language", - "importProfile": "Import profile", - "exportProfile": "Export profile", - "releasedDate": "Released", - "info": "Info", - "showMore": "Show more", - "participatingArtists": "Participating artists", - "moreSongs": "More songs", - "moreAlbums": "More albums", - "moreArtists": "More artists", - "publishedOn": "Published on {date}", - "otherMedia": "Other media", - "original": "Original", - "vocalists": "Vocalists", - "producers": "Producers", - "other": "Other", - "otherArtists": "Other", - "noRating": "No rating", - "ratingCount": "{rating} rating", - "labels": "Labels", - "notSpecified": "Not specified", - "officialLinks": "Official links", - "unofficialLinks": "Unofficial links", - "like": "Like", - "liked": "Liked", - "discNo": "Disc {disc}", - "hide": "Hide", - "originalVersion": "Original version", - "topSongs": "Top songs", - "topAlbums": "Top albums", - "topArtists": "Top artists", - "version": "Version", - "search": "Search", - "parentTag": "Parent", - "map": "Map" - }, - "error": { - "emptyFavoriteSongs": "No favorite songs", - "emptyFavoriteAlbums": "No favorite albums ", - "emptyFavoriteArtists": "Nothing yet", - "searchResultNotMatched": "No result match" - }, - "songType": { - "Unspecified": "Unspecified", - "Original": "Original song", - "Arrangement": "Arrangement", - "Remaster": "Remaster", - "Remix": "Remix", - "Cover": "Cover", - "Instrumental": "Instrumental", - "Mashup": "Mashup", - "MusicPV": "Music PV", - "DramaPV": "Drama PV", - "Other": "Other" - }, - "ranking": { - "daily": "Daily", - "weekly": "Weekly", - "monthly": "Monthly", - "overall": "Overall", - "newlyPublished": "NewlyPublished", - "newlyAdded": "NewlyAdded", - "popularity": "Popularity", - "allVocalists": "All vocalists", - "onlyVocaloid": "Only Vocaloid", - "onlyUTAU": "Only UTAU", - "otherVocalist": "Other vocalists" - }, - "sort": { - "Unspecified": "Unspecified", - "Name": "Name", - "PublishDate": "Publish date", - "AdditionDate": "Addition date", - "FavoritedTimes": "Times favorited", - "RatingScore": "Rating score", - "AdditionDateDesc": "Addition date (descending)", - "AdditionDateAsc": "Addition date (ascending)", - "ReleaseDate": "Release date", - "SongCount": "Number of songs", - "SongRating": "Total song rating", - "FollowerCount": "Number of followers", - "ReleaseDate": "Release date", - "RatingAverage": "Rating average", - "RatingTotal": "Total score", - "CollectionCount": "Collection count", - "Date": "Date" - }, - "artistRoleType": { - "groupAndLabels": "Groups and labels", - "illustratedBy": "Illustrated by", - "voiceProvider": "Voice provider", - "characterDesigner": "Character designer", - "illustratorOf": "Illustrator of", - "voiceProviderOf": "Voice provider of", - "designerOf": "Designer of", - "members": "Members" - }, - "artistType": { - "Unspecified": "Unspecified", - "Circle": "Circle", - "Label": "Label", - "Illustrator": "Illustrator", - "Producer": "Producers", - "Animator": "Animator", - "Lyricist": "Lyricist", - "Vocaloid": "Vocaloid", - "Vocalist": "Vocalist", - "Character": "Character", - "UTAU": "UTAU", - "CeVIO": "CeVIO", - "OtherVoiceSynthesizer": "Other voice synthesizer", - "OtherVocalist": "Other vocalist", - "OtherGroup": "Other group", - "OtherIndividual": "Other individual" - }, - "discType": { - "Unspecified": "Unspecified", - "Album": "Original album", - "Single": "Single", - "EP": "E.P.", - "SplitAlbum": "Split album", - "Compilation": "Compilation", - "Video": "Video", - "Artbook": "Artbook", - "Game": "Game", - "Fanmade": "Fanmade/doujin", - "Other": "Other" - }, - "eventCategory": { - "Unspecified": "Not specified", - "AlbumRelease": "Album release fair", - "Anniversary": "Character anniversary", - "Club": "Club", - "Concert": "Concert", - "Contest": "Contest", - "Convention": "Convention", - "Other": "Other" - } -} \ No newline at end of file diff --git a/assets/i18n/ja.json b/assets/i18n/ja.json deleted file mode 100644 index bb106bfc..00000000 --- a/assets/i18n/ja.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "label": { - "menu": "メニュー", - "home": "ホーム", - "playAll": "すべて再生", - "theme": "テーマ", - "songs": "曲", - "song": "曲", - "album": "アルバム", - "albums": "アルバム", - "artists": "アーティスト", - "artist": "アーティスト", - "events": "イベント", - "event": "イベント", - "releaseEvents": "イベント", - "tags": "タグ", - "anything": "すべて", - "highlighted": "最近追加された動画", - "recentAlbums": "新しいアルバム", - "randomPopularAlbums": "最も人気のあるアルバム", - "upcomingEvent": "最近のイベント", - "songType": "曲の種類", - "sort": "並び替え", - "ranking": "ランキング", - "artistType": "アーティストの種類", - "findSong": "Find song", - "findAlbum": "Find album", - "findArtist": "Find artist", - "findEvent": "Find event", - "findTag": "Find tag", - "findAnything": "Find anything", - "filter": "絞り込む", - "filterBy": "Filter by", - "vocalist": "Vocalist", - "all": "すべて", - "vocaloid": "Vocaloid", - "utau": "UTAU", - "minimumScore": "Minimum score", - "name": "Name", - "discType": "アルバムの種類", - "category": "カテゴリー", - "date": "Date", - "dateRange": "イベント日時", - "from": "From", - "to": "To", - "voicebankReleaseDate": "Voicebank release date", - "selectArtist": "Select artist", - "selectTag": "Select tag", - "recentSearch": "Recent search", - "clearFilter": "Clear filter", - "type": "タイプ", - "favorite": "Favorite", - "share": "共有", - "originalMedia": "オリジナル投稿", - "lyrics": "歌詞", - "popularSongs": "人気の曲", - "popularAlbums": "人気のアルバム", - "ads": "広告・クロスフェード", - "trackList": "トラックリスト", - "disc": "ディスク", - "venue": "会場", - "description": "概要", - "relatedLink": "Related link", - "setlist": "Setlist", - "duration": "タイム", - "add": "追加", - "follow": "Follow", - "following": "Following", - "baseVoicebank": "元のボイスバンク", - "series": "Series", - "official": "Official", - "commercial": "Commercial", - "references": "References", - "recentSongsPVs": "最近の曲/PV", - "alternateVersion": "他のバージョン", - "likeMatches": "この曲を「いいね」した人はこんな曲も「いいね」しました", - "artistMatches": "Matching artists", - "tagMatches": "Matching tags", - "relatedSongs": "Related songs", - "searchYoutube": "Youtubeで検索", - "showAll": "Show all", - "developerContact": "Developer contacts", - "favoriteSongs": "好きな曲", - "favoriteAlbums": "コレクション", - "favoriteArtists": "フォローしているアーティスト", - "settings": "設定", - "contact": "サポート", - "uiLanguage": "インターフェース言語", - "contentLanguage": "優先言語", - "importProfile": "ロード", - "exportProfile": "セーブ", - "releasedDate": "Released", - "info": "Info", - "showMore": "Show more", - "participatingArtists": "Participating artists", - "moreSongs": "More songs", - "moreAlbums": "More albums", - "moreArtists": "More artists", - "publishedOn": "Published on {date}", - "otherMedia": "他のメディア", - "original": "オリジナル", - "vocalists": "ボーカリスト", - "producers": "プロデューサー", - "other": "その他", - "otherArtists": "他のアーティスト", - "noRating": "No rating", - "ratingCount": "{rating} 件の評価", - "labels": "レーベル<", - "notSpecified": "Not specified", - "officialLinks": "公式サイト", - "unofficialLinks": "非公式サイト", - "like": "いいね", - "liked": "いいね", - "discNo": "ディスク {disc}", - "hide": "Hide", - "originalVersion": "オリジナルバージョン", - "topSongs": "人気の曲", - "topAlbums": "人気のアルバム", - "topArtists": "トップアーティスト", - "version": "バージョン", - "search": "サーチ", - "parentTag": "Parent", - "map": "会場" - }, - "error": { - "emptyFavoriteSongs": "何もないです(´・д・`)…", - "emptyFavoriteAlbums": "何もないです(´・д・`)…", - "emptyFavoriteArtists": "何もないです(´・д・`)…", - "searchResultNotMatched": "何もないです(´・д・`)…" - }, - "songType": { - "Original": "オリジナル曲", - "Arrangement": "Arrangement", - "Remaster": "リマスター", - "Remix": "リミックス", - "Cover": "カバー曲", - "Instrumental": "インストゥルメンタル", - "Mashup": "マッシュアップ", - "MusicPV": "音楽PV", - "DramaPV": "ドラマ", - "Other": "その他" - }, - "ranking": { - "daily": "24時間", - "weekly": "週間", - "monthly": "月間", - "overall": "合計", - "newlyPublished": "新しく公開", - "newlyAdded": "新しく追加", - "popularity": "人気度", - "allVocalists": "全ボーカリスト", - "onlyVocaloid": "Vocaloidのみ", - "onlyUTAU": "UTAUのみ", - "otherVocalist": "その他のボーカリスト" - }, - "sort": { - "Name": "名称", - "PublishDate": "公開日", - "AdditionDate": "追加日時", - "FavoritedTimes": "お気に入り登録された数", - "RatingScore": "評価点数", - "AdditionDateDesc": "追加された日時(降順)", - "AdditionDateAsc": "追加された日時(昇順)", - "ReleaseDate": "発売日", - "SongCount": "曲数", - "SongRating": "総評価数", - "FollowerCount": "フォロワー数", - "ReleaseDate": "発売日", - "RatingAverage": "平均評価", - "RatingTotal": "総スコア", - "CollectionCount": "ユーザーコレクション数", - "Date": "日時" - }, - "artistRoleType": { - "groupAndLabels": "Groups and labels", - "illustratedBy": "イラストレーター", - "voiceProvider": "声優", - "characterDesigner": "Character designer", - "illustratorOf": "イラスト提供", - "voiceProviderOf": "音声提供", - "designerOf": "Designer of", - "members": "メンバー" - }, - "artistType": { - "Circle": "サークル", - "Label": "レーベル", - "Illustrator": "イラストレーター", - "Producer": "音楽プロデューサー", - "Animator": "動画のプロデューサー", - "Lyricist": "作詞家", - "Vocaloid": "Vocaloid", - "Vocalist": "ボーカリスト", - "Character": "キャラクター", - "UTAU": "UTAU", - "CeVIO": "CeVIO", - "OtherVoiceSynthesizer": "その他のボーカル音源", - "OtherVocalist": "他のボーカリスト", - "OtherGroup": "他のグループ", - "OtherIndividual": "他の人" - }, - "discType": { - "Album": "オリジナル・アルバム", - "Single": "シングル", - "EP": "E.P.", - "SplitAlbum": "スプリットアルバム", - "Compilation": "コンピレーションアルバム", - "Video": "Video", - "Artbook": "画集", - "Game": "ゲーム", - "Fanmade": "Fanmade/doujin", - "Other": "その他" - }, - "eventCategory": { - "Unspecified": "Not specified", - "AlbumRelease": "アルバム発売記念", - "Anniversary": "キャラクター発売記念日", - "Club": "クラブ", - "Concert": "コンサート", - "Contest": "コンテスト", - "Convention": "集会", - "Other": "その他" - } -} \ No newline at end of file diff --git a/assets/i18n/ms.json b/assets/i18n/ms.json deleted file mode 100644 index 464509a5..00000000 --- a/assets/i18n/ms.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "label": { - "menu": "Menu", - "home": "Home", - "playAll": "Play all", - "theme": "Theme", - "songs": "Lagu", - "song": "Lagu", - "album": "Album", - "albums": "Album", - "artists": "Artis", - "artist": "Artis", - "events": "Acara", - "event": "Acara", - "releaseEvents": "Release events", - "tags": "Tag", - "anything": "Anything", - "highlighted": "PV tersohor", - "recentAlbums": "Album terbaru atau akan datang", - "randomPopularAlbums": "Album popular rawa", - "upcomingEvent": "Acara akan datang", - "songType": "Jenis lagu", - "sort": "Isih", - "ranking": "Ranking", - "artistType": "Jenis artis", - "findSong": "Cari lagu", - "findAlbum": "Cari album", - "findArtist": "Cari artis", - "findEvent": "Cari acara", - "findTag": "Cari tag", - "findAnything": "Cari apa-apa saja", - "filter": "Tapis", - "filterBy": "Tapis ikut", - "vocalist": "Penyanyi", - "all": "semua", - "vocaloid": "Vocaloid", - "utau": "UTAU", - "minimumScore": "Minimum score", - "name": "Nama", - "discType": "Jenis disk", - "category": "Kategori", - "date": "Tarikh", - "dateRange": "Julat tarikh", - "from": "Dari", - "to": "Hingga", - "voicebankReleaseDate": "Tarikh terbit bank suara", - "type": "Jenis", - "favorite": "Kegemaran", - "share": "Kongsi", - "originalMedia": "PV asal", - "lyrics": "Lirik", - "popularSongs": "Lagu popular", - "popularAlbums": "Album popular", - "ads": "Iklan / resap silang", - "trackList": "Senarai lagu", - "disc": "Disk", - "venue": "Tempat", - "description": "Keterangan", - "relatedLink": "Related link", - "setlist": "Senarai set", - "duration": "Jangka masa", - "add": "Tambah", - "follow": "Ikut", - "following": "Mengikut", - "baseVoicebank": "Bank suara asas", - "series": "Siri", - "official": "Official", - "commercial": "Commercial", - "references": "References", - "recentSongsPVs": "Recent Songs / PVs", - "alternateVersion": "Alternate version", - "likeMatches": "Users who liked this also liked", - "artistMatches": "Matching artists", - "tagMatches": "Matching tags", - "relatedSongs": "Related songs", - "searchYoutube": "Search Youtube", - "showAll": "Show all", - "developerContact": "Developer contacts", - "favoriteSongs": "Lagu kegemaran", - "favoriteAlbums": "Koleksi", - "favoriteArtists": "Artis diikut", - "settings": "Tetapan", - "about": "Perihal", - "contact": "Contact us", - "uiLanguage": "UI language", - "contentLanguage": "Content language", - "importProfile": "Import profile", - "exportProfile": "Export profile", - "releasedDate": "Released", - "info": "Maklumat", - "showMore": "Show more", - "participatingArtists": "Participating artists", - "moreSongs": "More songs", - "moreAlbums": "More albums", - "moreArtists": "More artists", - "publishedOn": "Published on {date}", - "otherMedia": "Other media", - "original": "Original", - "vocalists": "Penyanyi", - "producers": "Penerbit", - "other": "Lain-lain", - "otherArtists": "Lain-lain", - "noRating": "No rating", - "ratingCount": "{rating} rating", - "labels": "Labels", - "notSpecified": "Not specified", - "officialLinks": "Official links", - "unofficialLinks": "Unofficial links", - "like": "Kegemaran", - "liked": "Kegemaran", - "discNo": "Disk {disc}", - "hide": "Hide", - "originalVersion": "Original version", - "topSongs": "Top songs", - "topAlbums": "Top albums", - "topArtists": "Top artists", - "version": "Version", - "search": "Search", - "parentTag": "Parent", - "map": "Map" - }, - "error": { - "emptyFavoriteSongs": "No favorite songs", - "emptyFavoriteAlbums": "No favorite albums ", - "emptyFavoriteArtists": "Nothing yet", - "searchResultNotMatched": "No result match" - }, - "songType": { - "Original": "Lagu asal", - "Arrangement": "Arrangement", - "Remaster": "Terbit semula", - "Remix": "Olah semula", - "Cover": "Cover", - "Instrumental": "Tanpa suara", - "Mashup": "Campuran", - "MusicPV": "PV muzik", - "DramaPV": "PV drama", - "Other": "Lain-lain" - }, - "ranking": { - "daily": "Harian", - "weekly": "Mingguan", - "monthly": "Bulanan", - "overall": "Keseluruhan", - "newlyPublished": "BaruTerbit", - "newlyAdded": "BaruTambah", - "popularity": "Populariti", - "allVocalists": "Semua penyanyi", - "onlyVocaloid": "Vocaloid", - "onlyUTAU": "UTAU", - "otherVocalist": "Other vocalists" - }, - "sort": { - "Name": "Name", - "PublishDate": "Publish date", - "AdditionDate": "Tarikh ditambah", - "FavoritedTimes": "Times favorited", - "RatingScore": "Rating score", - "AdditionDateDesc": "Tarikh ditambah (menurun)", - "AdditionDateAsc": "Tarikh ditambah (menaik)", - "ReleaseDate": "Release date", - "SongCount": "Number of songs", - "SongRating": "Total song rating", - "FollowerCount": "Number of followers", - "ReleaseDate": "Release date", - "RatingAverage": "Rating average", - "RatingTotal": "Total score", - "CollectionCount": "Collection count", - "Date": "Date" - }, - "artistRoleType": { - "groupAndLabels": "Kumpulan dan label", - "illustratedBy": "Ilustrasi oleh", - "voiceProvider": "Penyedia suara", - "characterDesigner": "Pereka watak", - "illustratorOf": "Illustrator untuk", - "voiceProviderOf": "Penyedia suara untuk", - "designerOf": "Pereka untuk", - "members": "Members" - }, - "artistType": { - "Circle": "Kalangan", - "Label": "Label", - "Illustrator": "Illustrator", - "Producer": "Penerbit", - "Animator": "Animator", - "Lyricist": "Lyricist", - "Vocaloid": "Vocaloid", - "Vocalist": "Vocalist", - "Character": "Character", - "UTAU": "UTAU", - "CeVIO": "CeVIO", - "OtherVoiceSynthesizer": "Other voice synthesizer", - "OtherVocalist": "Other vocalist", - "OtherGroup": "Other group", - "OtherIndividual": "Other individual" - }, - "discType": { - "Album": "Album asal", - "Single": "Single", - "EP": "E.P.", - "SplitAlbum": "Album pisah", - "Compilation": "Kompilasi", - "Video": "Video", - "Artbook": "Buku seni", - "Game": "Game", - "Fanmade": "Fanmade/doujin", - "Other": "Lain-lain" - }, - "eventCategory": { - "Unspecified": "Not specified", - "AlbumRelease": "Tempat terbitan album", - "Anniversary": "Ulang tahun watak", - "Club": "Kelab", - "Concert": "Konsert", - "Contest": "Pertandingan", - "Convention": "Konvensyen", - "Other": "Lain-lain" - } -} \ No newline at end of file diff --git a/assets/i18n/th.json b/assets/i18n/th.json deleted file mode 100644 index 258eeec0..00000000 --- a/assets/i18n/th.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "label": { - "menu": "เมนู", - "home": "หน้าแรก", - "playAll": "เล่นทั้งหมด", - "theme": "ธีม", - "songs": "เพลง", - "song": "เพลง", - "album": "อัลบั้ม", - "albums": "อัลบั้ม", - "artists": "ศิลปิน", - "artist": "ศิลปิน", - "events": "กิจกรรม", - "event": "กิจกรรม", - "releaseEvents": "กิจกรรม", - "tags": "แท๊ก", - "anything": "ทั้งหมด", - "highlighted": "รายการน่าสนใจ", - "recentAlbums": "อัลบั้มใหม่", - "randomPopularAlbums": "อัลบั้มยอดนิยม", - "upcomingEvent": "กิจกรรมช่วงนี้", - "songType": "ประเภทเพลง", - "sort": "จัดเรียง", - "ranking": "อันดับ", - "artistType": "ประเภทศิลปิน", - "findSong": "ค้นหาเพลง", - "findAlbum": "ค้นหาอัลบั้ม", - "findArtist": "ค้นหาศิลปิน", - "findEvent": "ค้นหากิจกรรม", - "findTag": "ค้นหาแท๊ก", - "findAnything": "ค้นหาทุกอย่าง", - "filter": "ตัวกรอง", - "filterBy": "กรองตาม", - "vocalist": "นักร้อง", - "all": "ทั้งหมด", - "vocaloid": "Vocaloid", - "utau": "UTAU", - "minimumScore": "Minimum score", - "name": "ชื่อ", - "discType": "ประเภทอัลบั้ม", - "category": "หมวดหมู่", - "date": "วันที่", - "dateRange": "ช่วงวันที่", - "from": "ตั้งแต่", - "to": "ถึง", - "voicebankReleaseDate": "วันวางจำหน่าย", - "type": "ประเภท", - "favorite": "ชื่นชอบ", - "share": "แชร์", - "originalMedia": "ต้นฉบับ", - "lyrics": "เนื้อเพลง", - "popularSongs": "เพลงยอดนิยม", - "popularAlbums": "อัลบั้มยอดนิยม", - "ads": "โฆษณา / โปรโมท", - "trackList": "Tracklist", - "disc": "แผ่น", - "venue": "สถานที่", - "description": "คำอธิบาย", - "relatedLink": "ลิงค์ที่เกี่ยวข้อง", - "setlist": "Setlist", - "duration": "ความยาว", - "add": "เพิ่ม", - "follow": "ติดตาม", - "following": "กำลังติดตาม", - "baseVoicebank": "Voicebank ต้นฉบับ", - "series": "Series", - "official": "Official", - "commercial": "Commercial", - "references": "References", - "recentSongsPVs": "เพลงล่าสุด", - "alternateVersion": "เวอร์ชันดัดแปลงอื่นๆ", - "likeMatches": "รายการที่ชอบคล้ายกัน", - "artistMatches": "Matching artists", - "tagMatches": "Matching tags", - "relatedSongs": "Related songs", - "searchYoutube": "ค้นหาบน Youtube", - "showAll": "แสดงทั้งหมด", - "developerContact": "ติดต่อผู้พัฒนา", - "favoriteSongs": "เพลงโปรด", - "favoriteAlbums": "อัลบั้มโปรด", - "favoriteArtists": "ศิลปินคนโปรด", - "settings": "ตั้งค่า", - "about": "เกี่ยวกับ", - "contact": "ติดต่อ", - "uiLanguage": "ภาษาแอป", - "contentLanguage": "ภาษาเนื้อหาที่แสดง", - "importProfile": "โหลดข้อมูล", - "exportProfile": "บันทึกข้อมูล", - "releasedDate": "เผยแพร่", - "info": "ข้อมูล", - "showMore": "ดูเพิ่มเติม", - "participatingArtists": "ศิลปินที่เข้าร่วม", - "moreSongs": "เพลงอื่นๆ", - "moreAlbums": "อัลบั้มอื่นๆ", - "moreArtists": "ศิลปินอื่นๆ", - "publishedOn": "เผยแพร่วันที่ {date}", - "otherMedia": "Other media", - "original": "ต้นฉบับ", - "vocalists": "นักร้อง", - "producers": "โปรดิวเซอร์", - "other": "อื่นๆ", - "otherArtists": "อื่นๆ", - "noRating": "ยังไม่มีคะแนน", - "ratingCount": "{rating} คะแนน", - "labels": "ค่าย", - "notSpecified": "ไม่ระบุ", - "officialLinks": "Official links", - "unofficialLinks": "Unofficial links", - "like": "ชอบ", - "liked": "ชอบ", - "discNo": "แผ่น {disc}", - "hide": "ซ่อน", - "originalVersion": "ต้นฉบับ", - "topSongs": "เพลงยอดนิยม", - "topAlbums": "อัลบั้มยอดนิยม", - "topArtists": "ศิลปินยอดนิยม", - "version": "เวอร์ชัน", - "search": "ค้นหา", - "parentTag": "Parent", - "map": "แผนที่" - }, - "error": { - "emptyFavoriteSongs": "ยังไม่มีเพลงที่ชอบ", - "emptyFavoriteAlbums": "ยังไม่มีอัลบั้มที่ชอบ", - "emptyFavoriteArtists": "ยังไม่มีศิลปินที่ชอบ", - "searchResultNotMatched": "ไม่พบรายการจากคำที่ค้นหา" - }, - "songType": { - "Original": "ต้นฉบับ", - "Arrangement": "Arrangement", - "Remaster": "รีมาสเตอร์", - "Remix": "รีมิกซ์", - "Cover": "Cover", - "Instrumental": "ดนตรี", - "Mashup": "Mashup", - "MusicPV": "Music PV", - "DramaPV": "Drama PV", - "Other": "อื่นๆ" - }, - "ranking": { - "daily": "รายวัน", - "weekly": "สัปดาห์", - "monthly": "เดือน", - "overall": "ทั้งหมด", - "newlyPublished": "เผยแพร่ใหม่", - "newlyAdded": "เพิ่มใหม่", - "popularity": "ความนิยม", - "allVocalists": "นักร้องทั้งหมด", - "onlyVocaloid": "เฉพาะ Vocaloid", - "onlyUTAU": "เฉพาะ UTAU", - "otherVocalist": "อื่นๆ" - }, - "sort": { - "Name": "ชื่อ", - "PublishDate": "วันที่เผยแพร่", - "AdditionDate": "วันที่เพิ่ม", - "FavoritedTimes": "จำนวนความชอบ", - "RatingScore": "คะแนนความชอบ", - "AdditionDateDesc": "วันที่เพิ่ม (ล่าสุด)", - "AdditionDateAsc": "วันที่เพิ่ม (นานสุด)", - "ReleaseDate": "วันที่เผยแพร่", - "SongCount": "จำนวนเพลง", - "SongRating": "คะแนน", - "FollowerCount": "จำนวนผู้ติดตาม", - "ReleaseDate": "วันที่เผยแพร่", - "RatingAverage": "คะแนนเฉลี่ย", - "RatingTotal": "จำนวนคะแนนทั้งหมด", - "CollectionCount": "จำนวนคอลเลคชั่น", - "Date": "วันที่" - }, - "artistRoleType": { - "groupAndLabels": "กลุ่ม/ค่าย", - "illustratedBy": "วาดโดย", - "voiceProvider": "ผู้ให้เสียง", - "characterDesigner": "ออกแบบตัวละคร", - "illustratorOf": "เป็นผู้วาดให้", - "voiceProviderOf": "ให้เสียงกับ", - "designerOf": "ตัวละครที่ออกแบบ", - "members": "สมาชิก" - }, - "artistType": { - "Circle": "เซอร์เคิล", - "Label": "ค่าย", - "Illustrator": "นักวาด", - "Producer": "โปรดิวเซอร์", - "Animator": "อนิเมเตอร์", - "Lyricist": "Lyricist", - "Vocaloid": "Vocaloid", - "Vocalist": "นักร้อง", - "Character": "ตัวละคร", - "UTAU": "UTAU", - "CeVIO": "CeVIO", - "OtherVoiceSynthesizer": "เสียงสังเคราะห์", - "OtherVocalist": "เสียงร้องอื่นๆ", - "OtherGroup": "กลุ่มอื่นๆ", - "OtherIndividual": "Other individual" - }, - "discType": { - "Album": "ออริจินัล", - "Single": "ซิงเกิล", - "EP": "E.P.", - "SplitAlbum": "Split album", - "Compilation": "Compilation", - "Video": "วิดิโอ", - "Artbook": "หนังสือ/อาร์ตบุ๊ค", - "Game": "เกม", - "Fanmade": "แฟนเมด/โดจิน", - "Other": "อื่นๆ" - }, - "eventCategory": { - "Unspecified": "ไม่ระบุ", - "AlbumRelease": "จำหน่ายอัลบั้ม", - "Anniversary": "ครบรอบ", - "Club": "คลับ", - "Concert": "คอนเสิร์ต", - "Contest": "ประกวด", - "Convention": "มีตติ้ง/พูดคุย", - "Other": "อื่นๆ" - } -} \ No newline at end of file diff --git a/assets/i18n/zh.json b/assets/i18n/zh.json new file mode 100644 index 00000000..d186d200 --- /dev/null +++ b/assets/i18n/zh.json @@ -0,0 +1,229 @@ +{ + "label": { + "menu": "菜单", + "home": "主页", + "playAll": "播放全部", + "theme": "主题", + "songs": "歌曲", + "song": "歌曲", + "album": "专辑", + "albums": "专辑", + "artists": "艺术家", + "artist": "艺术家", + "events": "活动", + "event": "活动", + "releaseEvents": "活动", + "tags": "标签", + "anything": "任意内容", + "highlighted": "精选 PV", + "recentAlbums": "新专发行", + "randomPopularAlbums": "随机热门专辑", + "upcomingEvent": "近期活动", + "songType": "歌曲类别", + "sort": "排序", + "ranking": "排行", + "artistType": "艺术家类别", + "findSong": "搜索歌曲", + "findAlbum": "搜索专辑", + "findArtist": "搜索艺术家", + "findEvent": "搜索活动", + "findTag": "搜索标签", + "findAnything": "搜索任意内容", + "filter": "筛选", + "filterBy": "筛选依据", + "vocalist": "歌手", + "all": "全部", + "vocaloid": "VOCALOID", + "utau": "UTAU", + "minimumScore": "最低分", + "name": "名称", + "discType": "专辑类别", + "category": "分类", + "date": "日期", + "dateRange": "日期范围", + "from": "自", + "to": "至", + "voicebankReleaseDate": "声库发布日期", + "selectArtist": "选择艺术家", + "selectTag": "选择标签", + "recentSearch": "搜索历史", + "clearFilter": "取消筛选", + "type": "类别", + "favorite": "Favorite", + "share": "分享", + "originalMedia": "本家投稿", + "lyrics": "歌词", + "popularSongs": "热门歌曲", + "popularAlbums": "热门专辑", + "ads": "Ads / crossfades", + "trackList": "曲目", + "disc": "Disc", + "venue": "地点", + "description": "简介", + "relatedLink": "相关链接", + "setlist": "曲目单", + "duration": "时长", + "add": "添加", + "follow": "关注", + "following": "正在关注", + "baseVoicebank": "基础声库", + "series": "系列", + "official": "官方", + "commercial": "商业", + "references": "信息来源", + "recentSongsPVs": "近期歌曲/PV", + "alternateVersion": "其他版本", + "likeMatches": "你可能还喜欢", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "相关歌曲", + "searchYoutube": "在 Youtube 中搜索", + "showAll": "显示全部", + "developerContact": "联系开发者", + "favoriteSongs": "我喜爱的歌曲", + "favoriteAlbums": "我收藏的专辑", + "favoriteArtists": "我关注的艺术家", + "settings": "设置", + "about": "关于", + "contact": "联系我们", + "general": "通用", + "uiLanguage": "界面语言", + "contentLanguage": "首选内容语言", + "importProfile": "导入个人数据", + "exportProfile": "导出个人数据", + "releasedDate": "发行", + "info": "详情", + "showMore": "更多信息", + "participatingArtists": "参与的艺术家", + "moreSongs": "更多歌曲", + "moreAlbums": "更多专辑", + "moreArtists": "更多艺术家", + "publishedOn": "发布于 {date}", + "otherMedia": "转载投稿", + "original": "本家", + "vocalists": "歌手", + "producers": "P主", + "other": "其他", + "otherArtists": "其他艺术家", + "noRating": "没有评分", + "ratingCount": "{rating} 次评分", + "labels": "厂牌", + "notSpecified": "不指定", + "officialLinks": "官方链接", + "unofficialLinks": "非官方链接", + "like": "收藏", + "liked": "已收藏", + "discNo": "Disc {disc}", + "hide": "收起", + "originalVersion": "原版", + "topSongs": "人气歌曲", + "topAlbums": "人气专辑", + "topArtists": "人气艺术家", + "version": "版本", + "search": "搜索", + "parentTag": "上级标签", + "map": "地图" + }, + "error": { + "emptyFavoriteSongs": "什么都没有(>_<)", + "emptyFavoriteAlbums": "什么都没有(>_<)", + "emptyFavoriteArtists": "什么都没有(>_<)", + "searchResultNotMatched": "什么都没找到(>_<)" + }, + "songType": { + "Unspecified": "不指定", + "Original": "原创", + "Arrangement": "Arrangement", + "Remaster": "重新调教(Remaster)", + "Remix": "重新混音(Remix)", + "Cover": "翻唱/翻奏", + "Instrumental": "纯音乐", + "Mashup": "混剪", + "MusicPV": "音乐 PV", + "DramaPV": "剧情 PV", + "Other": "其他" + }, + "ranking": { + "daily": "日", + "weekly": "周", + "monthly": "月", + "overall": "总", + "newlyPublished": "最新发布", + "newlyAdded": "最新添加", + "popularity": "人气", + "allVocalists": "全部歌手", + "onlyVocaloid": "仅限 VOCALOID", + "onlyUTAU": "仅限 UTAU", + "otherVocalist": "其他歌手" + }, + "sort": { + "Unspecified": "不指定", + "Name": "名称", + "PublishDate": "发布日期", + "AdditionDate": "添加日期", + "FavoritedTimes": "收藏数", + "RatingScore": "评分", + "AdditionDateDesc": "添加日期(降序)", + "AdditionDateAsc": "添加日期(升序)", + "ReleaseDate": "发行日期", + "SongCount": "歌曲数", + "SongRating": "评分次数", + "FollowerCount": "收藏数", + "ReleaseDate": "发行日期", + "RatingAverage": "平均评分", + "RatingTotal": "总评分", + "CollectionCount": "收藏数", + "Date": "日期" + }, + "artistRoleType": { + "groupAndLabels": "所属", + "illustratedBy": "画师", + "voiceProvider": "音源", + "characterDesigner": "人设", + "illustratorOf": "角色绘制", + "voiceProviderOf": "音源提供", + "designerOf": "人物设计", + "members": "成员/相关人物" + }, + "artistType": { + "Unspecified": "不指定", + "Circle": "社团", + "Label": "音乐厂牌", + "Illustrator": "插画师", + "Producer": "P主", + "Animator": "动画师", + "Lyricist": "作词家", + "Vocaloid": "VOCALOID", + "Vocalist": "Vocalist", + "Character": "Character", + "UTAU": "UTAU", + "CeVIO": "CeVIO", + "OtherVoiceSynthesizer": "其他虚拟歌手", + "OtherVocalist": "唱见", + "OtherGroup": "其他团体", + "OtherIndividual": "其他个人" + }, + "discType": { + "Unspecified": "不指定", + "Album": "原创专辑", + "Single": "单曲", + "EP": "迷你专辑/EP", + "SplitAlbum": "拼盘专辑", + "Compilation": "合辑/精选辑", + "Video": "视频", + "Artbook": "画集", + "Game": "游戏", + "Fanmade": "同人", + "Other": "其他" + }, + "eventCategory": { + "Unspecified": "不指定", + "AlbumRelease": "专辑发布会", + "Anniversary": "角色生日祭", + "Club": "俱乐部", + "Concert": "演唱会/音乐会", + "Contest": "比赛", + "Convention": "集会", + "Other": "其他" + } +} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 00000000..e96ef602 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/App.framework/App b/ios/Flutter/App.framework/App deleted file mode 100755 index f30d0a7d..00000000 Binary files a/ios/Flutter/App.framework/App and /dev/null differ diff --git a/ios/Flutter/App.framework/Info.plist b/ios/Flutter/App.framework/Info.plist deleted file mode 100644 index 9367d483..00000000 --- a/ios/Flutter/App.framework/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/ios/Flutter/App.framework/flutter_assets/AssetManifest.json b/ios/Flutter/App.framework/flutter_assets/AssetManifest.json deleted file mode 100644 index 03eaddff..00000000 --- a/ios/Flutter/App.framework/flutter_assets/AssetManifest.json +++ /dev/null @@ -1 +0,0 @@ -{"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} \ No newline at end of file diff --git a/ios/Flutter/App.framework/flutter_assets/FontManifest.json b/ios/Flutter/App.framework/flutter_assets/FontManifest.json deleted file mode 100644 index 34bacb77..00000000 --- a/ios/Flutter/App.framework/flutter_assets/FontManifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"fonts":[{"asset":"fonts/MaterialIcons-Regular.ttf"}],"family":"MaterialIcons"},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/ios/Flutter/App.framework/flutter_assets/LICENSE b/ios/Flutter/App.framework/flutter_assets/LICENSE deleted file mode 100644 index bc86e70c..00000000 --- a/ios/Flutter/App.framework/flutter_assets/LICENSE +++ /dev/null @@ -1,12622 +0,0 @@ -async -collection -stream_channel -typed_data - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -boolean_selector -meta - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 Kungliga Tekniska Högskolan -(Royal Institute of Technology, Stockholm, Sweden). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006,2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2010 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2012 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2013 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Intel Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2016, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2017, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2018, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2003 Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005 Nokia. All rights reserved. - -The portions of the attached software ("Contribution") is developed by -Nokia Corporation and is licensed pursuant to the OpenSSL open source -license. - -The Contribution, originally written by Mika Kousa and Pasi Eronen of -Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites -support (see RFC 4279) to OpenSSL. - -No patent licenses or other rights except those expressly stated in -the OpenSSL open source license shall be deemed granted or received -expressly, by implication, estoppel, or otherwise. - -No assurances are provided by Nokia that the Contribution does not -infringe the patent or other intellectual property rights of any third -party or that the license provides you with all the necessary rights -to make use of the Contribution. - -THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN -ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA -SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY -OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR -OTHERWISE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2007, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2008 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2012, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2014, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2015, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2016 Brian Smith. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -The MIT License (MIT) - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl -dart - -OpenSSL License - - ==================================================================== - Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - - 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - - 5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - - THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - OF THE POSSIBILITY OF SUCH DAMAGE. - ==================================================================== - - This product includes cryptographic software written by Eric Young - (eay@cryptsoft.com). This product includes software written by Tim - Hudson (tjh@cryptsoft.com). - -Original SSLeay License - -* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -* All rights reserved. - -* This package is an SSL implementation written -* by Eric Young (eay@cryptsoft.com). -* The implementation was written so as to conform with Netscapes SSL. - -* This library is free for commercial and non-commercial use as long as -* the following conditions are aheared to. The following conditions -* apply to all code found in this distribution, be it the RC4, RSA, -* lhash, DES, etc., code; not just the SSL code. The SSL documentation -* included with this distribution is covered by the same copyright terms -* except that the holder is Tim Hudson (tjh@cryptsoft.com). - -* Copyright remains Eric Young's, and as such any Copyright notices in -* the code are not to be removed. -* If this package is used in a product, Eric Young should be given attribution -* as the author of the parts of the library used. -* This can be in the form of a textual message at program startup or -* in documentation (online or textual) provided with the package. - -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. All advertising materials mentioning features or use of this software -* must display the following acknowledgement: -* "This product includes cryptographic software written by -* Eric Young (eay@cryptsoft.com)" -* The word 'cryptographic' can be left out if the rouines from the library -* being used are not cryptographic related :-). -* 4. If you include any Windows specific code (or a derivative thereof) from -* the apps directory (application code) you must include an acknowledgement: -* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. - -* The licence and distribution terms for any publically available version or -* derivative of this code cannot be changed. i.e. this code cannot simply be -* copied and put under another distribution licence -* [including the GNU Public Licence.] - -ISC license used for completely new code in BoringSSL: - -/* Copyright (c) 2015, Google Inc. - - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -The code in third_party/fiat carries the MIT license: - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Licenses for support code - -Parts of the TLS test suite are under the Go license. This code is not included -in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so -distributing code linked against BoringSSL does not trigger this license: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl -engine -etc1 -observatory_pub_packages -skia -txt -vulkan -wuffs - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. --------------------------------------------------------------------------------- -bsdiff - -Copyright 2003-2005 Colin Percival. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -charcode -matcher -path -source_span -stack_trace -string_scanner - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -colorama - -Copyright (c) 2010 Jonathan Hartley -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holders, nor those of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -cupertino_icons - - -The MIT License (MIT) - -Copyright (c) 2016 Drifty (http://drifty.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2012 Adam Singer (adam@solvr.io) -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF -THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -In addition, the following condition applies: - -All redistributions must retain an intact copy of this copyright notice -and disclaimer. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright 2009 The Go Authors. All rights reserved. -Use of this source code is governed by a BSD-style -license that can be found in the LICENSE file --------------------------------------------------------------------------------- -dart - -Copyright 2012, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2006-2008 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2010 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2012 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -engine -txt - -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright 2000, Clark Cooper -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002, 2003, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001-2008, 2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2004, 2011 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2014 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2015 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000, 2001, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2010, 2012-2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2001, 2002, 2012 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -The FreeType Project LICENSE - - 2006-Jan-27 - -Copyright 1996-2002, 2006 by -David Turner, Robert Wilhelm, and Werner Lemberg - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - Portions of this software are copyright © The FreeType - Project (www.freetype.org). All rights reserved. - - Please replace with the value from the FreeType version you - actually use. - -Legal Terms -=========== - -0. Definitions - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - https://www.freetype.org - ---- end of FTL.TXT --- --------------------------------------------------------------------------------- -gif - -MOZILLA PUBLIC LICENSE - Version 1.1 - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the - Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to - the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Code, prior Modifications used by a Contributor, and the Modifications - made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the - combination of the Original Code and Modifications, in each case - including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally - accepted in the software development community for the electronic - transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source - Code. - - 1.6. "Initial Developer" means the individual or entity identified - as the Initial Developer in the Source Code notice required by Exhibit - A. - - 1.7. "Larger Work" means a work which combines Covered Code or - portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the - substance or structure of either the Original Code or any previous - Modifications. When Covered Code is released as a series of files, a - Modification is: - A. Any addition to or deletion from the contents of a file - containing Original Code or previous Modifications. - - B. Any new file that contains any part of the Original Code or - previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code - which is described in the Source Code notice required by Exhibit A as - Original Code, and which, at the time of its release under this - License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, process, - and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for - making modifications to it, including all modules it contains, plus - any associated interface definition files, scripts used to control - compilation and installation of an Executable, or source code - differential comparisons against either the Original Code or another - well known, available Covered Code of the Contributor's choice. The - Source Code can be in a compressed or archival form, provided the - appropriate decompression or de-archiving software is widely available - for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms of, this - License or a future version of this License issued under Section 6.1. - For legal entities, "You" includes any entity which controls, is - controlled by, or is under common control with You. For purposes of - this definition, "control" means (a) the power, direct or indirect, - to cause the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty percent - (50%) of the outstanding shares or beneficial ownership of such - entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, royalty-free, - non-exclusive license, subject to third party intellectual property - claims: - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer to use, reproduce, - modify, display, perform, sublicense and distribute the Original - Code (or portions thereof) with or without Modifications, and/or - as part of a Larger Work; and - - (b) under Patents Claims infringed by the making, using or - selling of Original Code, to make, have made, use, practice, - sell, and offer for sale, and/or otherwise dispose of the - Original Code (or portions thereof). - - (c) the licenses granted in this Section 2.1(a) and (b) are - effective on the date Initial Developer first distributes - Original Code under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: 1) for code that You delete from the Original Code; 2) - separate from the Original Code; or 3) for infringements caused - by: i) the modification of the Original Code or ii) the - combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, each Contributor - hereby grants You a world-wide, royalty-free, non-exclusive license - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor, to use, reproduce, modify, - display, perform, sublicense and distribute the Modifications - created by such Contributor (or portions thereof) either on an - unmodified basis, with other Modifications, as Covered Code - and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either alone - and/or in combination with its Contributor Version (or portions - of such combination), to make, use, sell, offer for sale, have - made, and/or otherwise dispose of: 1) Modifications made by that - Contributor (or portions thereof); and 2) the combination of - Modifications made by that Contributor with its Contributor - Version (or portions of such combination). - - (c) the licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first makes Commercial Use of - the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: 1) for any code that Contributor has deleted from the - Contributor Version; 2) separate from the Contributor Version; - 3) for infringements caused by: i) third party modifications of - Contributor Version or ii) the combination of Modifications made - by that Contributor with other software (except as part of the - Contributor Version) or other devices; or 4) under Patent Claims - infringed by Covered Code in the absence of Modifications made by - that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You contribute are - governed by the terms of this License, including without limitation - Section 2.2. The Source Code version of Covered Code may be - distributed only under the terms of this License or a future version - of this License released under Section 6.1, and You must include a - copy of this License with every copy of the Source Code You - distribute. You may not offer or impose any terms on any Source Code - version that alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, You may include - an additional document offering the additional rights described in - Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You contribute must be - made available in Source Code form under the terms of this License - either on the same media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom you made an - Executable version available; and if made available via Electronic - Distribution Mechanism, must remain available for at least twelve (12) - months after the date it initially became available, or at least six - (6) months after a subsequent version of that particular Modification - has been made available to such recipients. You are responsible for - ensuring that the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You contribute to contain a - file documenting the changes You made to create that Covered Code and - the date of any change. You must include a prominent statement that - the Modification is derived, directly or indirectly, from Original - Code provided by the Initial Developer and including the name of the - Initial Developer in (a) the Source Code, and (b) in any notice in an - Executable version or related documentation in which You describe the - origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under a third party's - intellectual property rights is required to exercise the rights - granted by such Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the Source Code - distribution titled "LEGAL" which describes the claim and the - party making the claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such knowledge after - the Modification is made available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file in all copies - Contributor makes available thereafter and shall take other steps - (such as notifying appropriate mailing lists or newsgroups) - reasonably calculated to inform those who received the Covered - Code that new knowledge has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an application programming - interface and Contributor has knowledge of patent licenses which - are reasonably necessary to implement that API, Contributor must - also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to - Section 3.4(a) above, Contributor believes that Contributor's - Modifications are Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the rights conveyed by - this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each file of the Source - Code. If it is not possible to put such notice in a particular Source - Code file due to its structure, then You must include such notice in a - location (such as a relevant directory) where a user would be likely - to look for such a notice. If You created one or more Modification(s) - You may add your name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in any documentation - for the Source Code where You describe recipients' rights or ownership - rights relating to Covered Code. You may choose to offer, and to - charge a fee for, warranty, support, indemnity or liability - obligations to one or more recipients of Covered Code. However, You - may do so only on Your own behalf, and not on behalf of the Initial - Developer or any Contributor. You must make it absolutely clear than - any such warranty, support, indemnity or liability obligation is - offered by You alone, and You hereby agree to indemnify the Initial - Developer and every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of warranty, - support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form only if the - requirements of Section 3.1-3.5 have been met for that Covered Code, - and if You include a notice stating that the Source Code version of - the Covered Code is available under the terms of this License, - including a description of how and where You have fulfilled the - obligations of Section 3.2. The notice must be conspicuously included - in any notice in an Executable version, related documentation or - collateral in which You describe recipients' rights relating to the - Covered Code. You may distribute the Executable version of Covered - Code or ownership rights under a license of Your choice, which may - contain terms different from this License, provided that You are in - compliance with the terms of this License and that the license for the - Executable version does not attempt to limit or alter the recipient's - rights in the Source Code version from the rights set forth in this - License. If You distribute the Executable version under a different - license You must make it absolutely clear that any terms which differ - from this License are offered by You alone, not by the Initial - Developer or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred by - the Initial Developer or such Contributor as a result of any such - terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code with other code - not governed by the terms of this License and distribute the Larger - Work as a single product. In such a case, You must make sure the - requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the terms of this - License with respect to some or all of the Covered Code due to - statute, judicial order, or regulation then You must: (a) comply with - the terms of this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. Such description - must be included in the LEGAL file described in Section 3.4 and must - be included with all distributions of the Source Code. Except to the - extent prohibited by statute or regulation, such description must be - sufficiently detailed for a recipient of ordinary skill to be able to - understand it. - -5. Application of this License. - - This License applies to code to which the Initial Developer has - attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation ("Netscape") may publish revised - and/or new versions of the License from time to time. Each version - will be given a distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a particular version of the - License, You may always continue to use it under the terms of that - version. You may also choose to use such Covered Code under the terms - of any subsequent version of the License published by Netscape. No one - other than Netscape has the right to modify the terms applicable to - Covered Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this License (which you may - only do in order to apply it to code which is not already Covered Code - governed by this License), You must (a) rename Your license so that - the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", - "MPL", "NPL" or any confusingly similar phrase do not appear in your - license (except to note that your license differs from this License) - and (b) otherwise make it clear that Your version of the license - contains terms which differ from the Mozilla Public License and - Netscape Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice described in - Exhibit A shall not of themselves be deemed to be modifications of - this License.) - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, - WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF - DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE - IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, - YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE - COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER - OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to cure - such breach within 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly granted shall - survive any termination of this License. Provisions which, by their - nature, must remain in effect beyond the termination of this License - shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement - claim (excluding declatory judgment actions) against Initial Developer - or a Contributor (the Initial Developer or Contributor against whom - You file such action is referred to as "Participant") alleging that: - - (a) such Participant's Contributor Version directly or indirectly - infringes any patent, then any and all rights granted by such - Participant to You under Sections 2.1 and/or 2.2 of this License - shall, upon 60 days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You either: (i) - agree in writing to pay Participant a mutually agreeable reasonable - royalty for Your past and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim with respect to - the Contributor Version against such Participant. If within 60 days - of notice, a reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the litigation claim - is not withdrawn, the rights granted by Participant to You under - Sections 2.1 and/or 2.2 automatically terminate at the expiration of - the 60 day notice period specified above. - - (b) any software, hardware, or device, other than such Participant's - Contributor Version, directly or indirectly infringes any patent, then - any rights granted to You by such Participant under Sections 2.1(b) - and 2.2(b) are revoked effective as of the date You first made, used, - sold, distributed, or had made, Modifications made by that - Participant. - - 8.3. If You assert a patent infringement claim against Participant - alleging that such Participant's Contributor Version directly or - indirectly infringes any patent where such claim is resolved (such as - by license or settlement) prior to the initiation of patent - infringement litigation, then the reasonable value of the licenses - granted by such Participant under Sections 2.1 or 2.2 shall be taken - into account in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, - all end user license agreements (excluding distributors and resellers) - which have been validly granted by You or any distributor hereunder - prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL - DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, - OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR - ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY - CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, - WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW - PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE - EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO - THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a "commercial item," as that term is defined in - 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer - software" and "commercial computer software documentation," as such - terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 - C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), - all U.S. Government End Users acquire Covered Code with only those - rights set forth herein. - -11. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed by - California law provisions (except to the extent applicable law, if - any, provides otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party is a citizen of, - or an entity chartered or registered to do business in the United - States of America, any litigation relating to this License shall be - subject to the jurisdiction of the Federal Courts of the Northern - District of California, with venue lying in Santa Clara County, - California, with the losing party responsible for costs, including - without limitation, court costs and reasonable attorneys' fees and - expenses. The application of the United Nations Convention on - Contracts for the International Sale of Goods is expressly excluded. - Any law or regulation which provides that the language of a contract - shall be construed against the drafter shall not apply to this - License. - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or indirectly, - out of its utilization of rights under this License and You agree to - work with Initial Developer and Contributors to distribute such - responsibility on an equitable basis. Nothing herein is intended or - shall be deemed to constitute any admission of liability. - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the Covered Code as - "Multiple-Licensed". "Multiple-Licensed" means that the Initial - Developer permits you to utilize portions of the Covered Code under - Your choice of the MPL or the alternative licenses, if any, specified - by the Initial Developer in the file described in Exhibit A. - -EXHIBIT A -Mozilla Public License. - - ``The contents of this file are subject to the Mozilla Public License - Version 1.1 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - https://www.mozilla.org/MPL - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - License for the specific language governing rights and limitations - under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms - of the _____ license (the "[___] License"), in which case the - provisions of [______] License are applicable instead of those - above. If you wish to allow use of your version of this file only - under the terms of the [____] License and not to allow others to use - your version of this file under the MPL, indicate your decision by - deleting the provisions above and replace them with the notice and - other provisions required by the [___] License. If you do not delete - the provisions above, a recipient may use your version of this file - under either the MPL or the [___] License." - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should - use the text of this Exhibit A rather than the text found in the - Original Code Source Code for Your Modifications.] --------------------------------------------------------------------------------- -gif - -The Graphics Interchange Format(c) is the copyright property of CompuServe -Incorporated. Only CompuServe Incorporated is authorized to define, redefine, -enhance, alter, modify or change in any way the definition of the format. - -CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free -license for the use of the Graphics Interchange Format(sm) in computer -software; computer software utilizing GIF(sm) must acknowledge ownership of the -Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in -User and Technical Documentation. Computer software utilizing GIF, which is -distributed or may be distributed without User or Technical Documentation must -display to the screen or printer a message acknowledging ownership of the -Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in -this case, the acknowledgement may be displayed in an opening screen or leading -banner, or a closing screen or trailing banner. A message such as the following -may be used: - - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund -Copyright (c) 2012 Torsten Walluhn - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2006-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2009-2016 Camilla Berglund -Copyright (c) 2012 Torsten Walluhn - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2010-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014 Jonas Ådahl - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -glfw - -Copyright (c) 2014-2015 Brandon Schaefer - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2012 Grigori Goronzy - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2006 Behdad Esfahbod -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007 Chris Wilson -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Mozilla Foundation. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Mozilla Foundation. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Mozilla Foundation. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015-2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Khaled Hosny -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Igalia S.L. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Elie Roux -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Khaled Hosny - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Adobe Systems Incorporated. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. -For parts of HarfBuzz that are licensed under different licenses see individual -files names COPYING in subdirectories where applicable. - -Copyright © 2010,2011,2012 Google, Inc. -Copyright © 2012 Mozilla Foundation -Copyright © 2011 Codethink Limited -Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) -Copyright © 2009 Keith Stribley -Copyright © 2009 Martin Hosken and SIL International -Copyright © 2007 Chris Wilson -Copyright © 2006 Behdad Esfahbod -Copyright © 2005 David Turner -Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. -Copyright © 1998-2004 David Turner and Werner Lemberg - -For full copyright notices consult the individual files in the package. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -The contents of this directory are licensed under the following terms: - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1995-2016 International Business Machines Corporation and others -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, and/or sell copies of the Software, and to permit persons -to whom the Software is furnished to do so, provided that the above -copyright notice(s) and this permission notice appear in all copies of -the Software and that both the above copyright notice(s) and this -permission notice appear in supporting documentation. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY -SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, use -or other dealings in this Software without prior written authorization -of the copyright holder. - -All trademarks and registered trademarks mentioned herein are the -property of their respective owners. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Computer Systems and Communication Lab, - Institute of Information Science, Academia - * Sinica. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the Computer Systems and Communication Lab - nor the names of its contributors may be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 TaBE Project. -Copyright (c) 1999 Pai-Hsiang Hsiao. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the TaBE Project nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2002 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2013 International Business Machines Corporation -and others. All Rights Reserved. - -Project: http://code.google.com/p/lao-dictionary -Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt -License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt - (copied below) - - This file is derived from the above dictionary, with slight - modifications. - - Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, - are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. Redistributions in - binary form must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2014 International Business Machines Corporation -and others. All Rights Reserved. - -This list is part of a project hosted at: - github.com/kanyawtech/myanmar-karen-word-lists - -Copyright (c) 2013, LeRoy Benjamin Sharon -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: Redistributions of source code must retain the above -copyright notice, this list of conditions and the following -disclaimer. Redistributions in binary form must reproduce the -above copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided -with the distribution. - - Neither the name Myanmar Karen Word Lists, nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2010. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2011. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2012. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2014. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2016. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright 1996 Chih-Hao Tsai @ Beckman Institute, - University of Illinois -c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 --------------------------------------------------------------------------------- -icu - -Copyright 2000, 2001, 2002, 2003 Nara Institute of Science -and Technology. All Rights Reserved. - -Use, reproduction, and distribution of this software is permitted. -Any copy of this software, whether in its original form or modified, -must include both the above copyright notice and the following -paragraphs. - -Nara Institute of Science and Technology (NAIST), -the copyright holders, disclaims all warranties with regard to this -software, including all implied warranties of merchantability and -fitness, in no event shall NAIST be liable for -any special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether in an -action of contract, negligence or other tortuous action, arising out -of or in connection with the use or performance of this software. - -A large portion of the dictionary entries -originate from ICOT Free Software. The following conditions for ICOT -Free Software applies to the current dictionary as well. - -Each User may also freely distribute the Program, whether in its -original form or modified, to any third party or parties, PROVIDED -that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear -on, or be attached to, the Program, which is distributed substantially -in the same form as set out herein and that such intended -distribution, if actually made, will neither violate or otherwise -contravene any of the laws and regulations of the countries having -jurisdiction over the User or the intended distribution itself. - -NO WARRANTY - -The program was produced on an experimental basis in the course of the -research and development conducted during the project and is provided -to users as so produced on an experimental basis. Accordingly, the -program is provided without any warranty whatsoever, whether express, -implied, statutory or otherwise. The term "warranty" used herein -includes, but is not limited to, any warranty of the quality, -performance, merchantability and fitness for a particular purpose of -the program and the nonexistence of any infringement or violation of -any right of any third party. - -Each user of the program will agree and understand, and be deemed to -have agreed and understood, that there is no warranty whatsoever for -the program and, accordingly, the entire risk arising from or -otherwise connected with the program is assumed by the user. - -Therefore, neither ICOT, the copyright holder, or any other -organization that participated in or was otherwise related to the -development of the program and their respective officials, directors, -officers and other employees shall be held liable for any and all -damages, including, without limitation, general, special, incidental -and consequential damages, arising out of or otherwise in connection -with the use or inability to use the program or any product, material -or result produced or otherwise obtained by using the program, -regardless of whether they have been advised of, or otherwise had -knowledge of, the possibility of such damages at any time during the -project or thereafter. Each user will be deemed to have agreed to the -foregoing by his or her commencement of use of the program. The term -"use" as used herein includes, but is not limited to, the use, -modification, copying and distribution of the program and the -production of secondary products from the program. - -In the case where the program, whether in its original form or -modified, was distributed or delivered to or received by a user from -any person, organization or entity other than ICOT, unless it makes or -grants independently of ICOT any specific warranty to the user in -writing, such person, organization or entity, will also be exempted -from and not be held liable to the user for any such damages as noted -above as far as the program is concerned. --------------------------------------------------------------------------------- -icu - -Copyright 2006-2011, the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright 2014 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright © 1991-2018 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu - -The BSD License -http://opensource.org/licenses/bsd-license.php -Copyright (C) 2006-2008, Google Inc. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided with -the distribution. - Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Unicode® Terms of Use -For the general privacy policy governing access to this site, see the Unicode Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy. - -A. Unicode Copyright. -1. Copyright © 1991-2017 Unicode, Inc. All rights reserved. -2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. -3. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files solely for informational purposes and in the creation of products supporting the Unicode Standard, subject to the Terms and Conditions herein. -4. Further specifications of rights and restrictions pertaining to the use of the particular set of data files known as the "Unicode Character Database" can be found in the License. -5. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. -6. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. -7. Modification is not permitted with respect to this document. All copies of this document must be verbatim. -B. Restricted Rights Legend. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. -C. Warranties and Disclaimers. -1. This publication and/or website may include technical or typographical errors or other inaccuracies . Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. -2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. -3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. -D. Waiver of Damages. In no event shall Unicode or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. -E. Trademarks & Logos. -1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. -2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. -3. All third party trademarks referenced herein are the property of their respective owners. -F. Miscellaneous. -1. Jurisdiction and Venue. This server is operated from a location in the State of California, United States of America. Unicode makes no representation that the materials are appropriate for use in other locations. If you access this server from other locations, you are responsible for compliance with local laws. This Agreement, all use of this site and any claims and damages resulting from use of this site are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this site shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. -2. Modification by Unicode Unicode shall have the right to modify this Agreement at any time by posting it to this site. The user may not assign any part of this Agreement without Unicode’s prior written consent. -3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. -4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. -5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. - -EXHIBIT 1 -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2015 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2016 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libcxx - -University of Illinois/NCSA -Open Source License - -Copyright (c) 2009-2017 by the contributors listed in CREDITS.TXT - -All rights reserved. - -Developed by: - - LLVM Team - - University of Illinois at Urbana-Champaign - - http://llvm.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal with -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - - * Neither the names of the LLVM Team, University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -SOFTWARE. --------------------------------------------------------------------------------- -libcxx -libcxxabi - -Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -libcxxabi - -University of Illinois/NCSA -Open Source License - -Copyright (c) 2009-2018 by the contributors listed in CREDITS.TXT - -All rights reserved. - -Developed by: - - LLVM Team - - University of Illinois at Urbana-Champaign - - http://llvm.org - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal with -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimers. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimers in the - documentation and/or other materials provided with the distribution. - - * Neither the names of the LLVM Team, University of Illinois at - Urbana-Champaign, nor the names of its contributors may be used to - endorse or promote products derived from this Software without specific - prior written permission. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -SOFTWARE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, 2014-2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. -Author: Ragesh Radhakrishnan -Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. -Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. -Copyright (C) 2014, Linaro Limited. All Rights Reserved. -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2014, Jay Foad. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2014 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014-2015, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2010, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library - version 1.02 - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014-2016, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2014, Linaro Limited. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2009, 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project -to include only information relevant to libjpeg-turbo, to wordsmith certain -sections, and to remove impolitic language that existed in the libjpeg v8 -README. It is included only for reference. Please see README.md for -information specific to libjpeg-turbo. - -The Independent JPEG Group's JPEG software -========================================== - -This distribution contains a release of the Independent JPEG Group's free JPEG -software. You are welcome to redistribute this software and to use it for any -purpose, subject to the conditions under LEGAL ISSUES, below. - -This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, -Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, -Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, -and other members of the Independent JPEG Group. - -IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee -(also known as JPEG, together with ITU-T SG16). - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - usage.txt Usage instructions for cjpeg, djpeg, jpegtran, - rdjpgcom, and wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.txt). - wizard.txt Advanced usage instructions for JPEG wizards only. - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.txt How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.txt Overview of the JPEG library's internal structure. - coderules.txt Coding style rules --- please read if you contribute code. - -Please read at least usage.txt. Some information can also be found in the JPEG -FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find -out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - -OVERVIEW -======== - -This package contains C software to implement JPEG image encoding, decoding, -and transcoding. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and grayscale images. JPEG's strong suit is compressing -photographic images or other types of images that have smooth color and -brightness transitions between neighboring pixels. Images with sharp lines or -other abrupt features may not compress well with JPEG, and a higher JPEG -quality may have to be used to avoid visible compression artifacts with such -images. - -JPEG is lossy, meaning that the output pixels are not necessarily identical to -the input pixels. However, on photographic content and other "smooth" images, -very good compression ratios can be obtained with no visible compression -artifacts, and extremely high compression ratios are possible if you are -willing to sacrifice image quality (by reducing the "quality" setting in the -compressor.) - -This software implements JPEG baseline, extended-sequential, and progressive -compression processes. Provision is made for supporting all variants of these -processes, although some uncommon parameter settings aren't implemented yet. -We have made no provision for supporting the hierarchical or lossless -processes defined in the standard. - -We provide a set of library routines for reading and writing JPEG image files, -plus two sample applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. - -We have also included "jpegtran", a utility for lossless transcoding between -different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple -applications for inserting and extracting textual comments in JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) Rather, it is intended to -be reliable, portable, industrial-strength code. We do not claim to have -achieved that goal in every aspect of the software, but we strive for it. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltmain.sh). Another support script, install-sh, is copyright by X Consortium -but is also freely distributable. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent (now expired), GIF reading -support has been removed altogether, and the GIF writer has been simplified -to produce "uncompressed GIFs". This technique does not use the LZW -algorithm; the resulting GIF files are larger than usual, but are readable -by all standard GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - -REFERENCES -========== - -We recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PDF file containing a revised version of Wallace's article is -available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually -a preprint for an article that appeared in IEEE Trans. Consumer Electronics) -omits the sample images that appeared in CACM, but it includes corrections -and some added material. Note: the Wallace article is copyright ACM and IEEE, -and it may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by -M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides -good explanations and example C code for a multitude of compression methods -including JPEG. It is an excellent source if you are comfortable reading C -code but don't know much about data compression in general. The book's JPEG -sample code is far from industrial-strength, but when you are ready to look -at a full implementation, you've got one here... - -The best currently available description of JPEG is the textbook "JPEG Still -Image Data Compression Standard" by William B. Pennebaker and Joan L. -Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. -Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG -standards (DIS 10918-1 and draft DIS 10918-2). - -The original JPEG standard is divided into two parts, Part 1 being the actual -specification, while Part 2 covers compliance testing methods. Part 1 is -titled "Digital Compression and Coding of Continuous-tone Still Images, -Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS -10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of -Continuous-tone Still Images, Part 2: Compliance testing" and has document -numbers ISO/IEC IS 10918-2, ITU-T T.83. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report -and thus received a formal publication status. It is available as a free -download in PDF format from -http://www.ecma-international.org/publications/techreports/E-TR-098.htm. -A PostScript version of the JFIF document is available at -http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at -http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. - -The TIFF 6.0 file format specification can be obtained by FTP from -ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme -found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. -IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). -Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 -(Compression tag 7). Copies of this Note can be obtained from -http://www.ijg.org/files/. It is expected that the next revision -of the TIFF spec will replace the 6.0 JPEG design with the Note's design. -Although IJG's own code does not support TIFF/JPEG, the free libtiff library -uses our library to implement TIFF/JPEG per the Note. - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is www.ijg.org. -The most recent released version can always be found there in -directory "files". - -The JPEG FAQ (Frequently Asked Questions) article is a source of some -general information about JPEG. -It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq -and other news.answers archive sites, including the official news.answers -archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. -If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu -with body - send usenet/news.answers/jpeg-faq/part1 - send usenet/news.answers/jpeg-faq/part2 - -FILE FORMAT WARS -================ - -The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together -with ITU-T SG16) currently promotes different formats containing the name -"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does -not support these formats (see REFERENCES). Indeed, one of the original -reasons for developing this free software was to help force convergence on -common, interoperable format standards for JPEG files. -Don't use an incompatible file format! -(In any case, our decoder will remain capable of reading existing JPEG -image files indefinitely.) - -TO DO -===== - -Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. --------------------------------------------------------------------------------- -libsdl -skia - -Copyright 2016 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright (c) 2010, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2010 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2011 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2012 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2013 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2014 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2015 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2016 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2017 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, Michael Bostock and Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2013, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages -pkg - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -pedantic -term_glyph - -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -quiver - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --------------------------------------------------------------------------------- -rapidjson - -Copyright (c) 2006-2013 Alexander Chemeris - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the product nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -rapidjson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License -Version 2.0 - -1. Definitions - -1.1. “Contributor” - -means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. - -1.2. “Contributor Version” - -means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - -means Covered Software of a particular Contributor. - -1.4. “Covered Software” - -means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. - -1.5. “Incompatible With Secondary Licenses” - -means - - a. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. - -1.6. “Executable Form” - -means any form of the work other than Source Code Form. - -1.7. “Larger Work” - -means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. - -1.8. “License” - -means this document. - -1.9. “Licensable” - -means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. - -1.10. “Modifications” - -means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - -means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. - -1.12. “Secondary License” - -means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - -means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - -means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its Contributions. - -This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License Version 2.0 -================================== - -1. Definitions - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -* 6. Disclaimer of Warranty - -* Covered Software is provided under this License on an "as is" -* basis, without warranty of any kind, either expressed, implied, or -* statutory, including, without limitation, warranties that the -* Covered Software is free of defects, merchantable, fit for a -* particular purpose or non-infringing. The entire risk as to the -* quality and performance of the Covered Software is with You. -* Should any Covered Software prove defective in any respect, You -* (not any Contributor) assume the cost of any necessary servicing, -* repair, or correction. This disclaimer of warranty constitutes an -* essential part of this License. No use of any Covered Software is -* authorized under this License except under this disclaimer. - -* 7. Limitation of Liability - -* Under no circumstances and under no legal theory, whether tort -* (including negligence), contract, or otherwise, shall any -* Contributor, or anyone who distributes Covered Software as -* permitted above, be liable to You for any direct, indirect, -* special, incidental, or consequential damages of any character -* including, without limitation, damages for lost profits, loss of -* goodwill, work stoppage, computer failure or malfunction, or any -* and all other commercial damages or losses, even if such party -* shall have been informed of the possibility of such damages. This -* limitation of liability shall not apply to liability for death or -* personal injury resulting from such party's negligence to the -* extent applicable law prohibits such limitation. Some -* jurisdictions do not allow the exclusion or limitation of -* incidental or consequential damages, so this exclusion and -* limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -skcms - -Copyright (c) 2018 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skcms -skia -vulkanmemoryallocator - -Copyright 2018 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2006 Apple Computer, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2014 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2011 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and/or associated documentation files (the "Materials"), -to deal in the Materials without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Materials, and to permit persons to whom the -Materials are furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Materials. --------------------------------------------------------------------------------- -skia - -Copyright 2005 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006-2012 The Android Open Source Project -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2007 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009-2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Intel Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google, LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google LLC. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2019 Google, LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -NEON optimized code (C) COPYRIGHT 2009 Motorola - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2003, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -test_api - -Copyright 2018, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -tonic - -Copyright 2015 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2016 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2017 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2018 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -vector_math - -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -vulkanmemoryallocator - -Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -wuffs - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2006, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2007 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2008, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2009 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly -detect_data_type() function provided freely by Cosmin Truta, 2006 - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications for Zip64 support -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications of Unzip for Zip64 -Copyright (C) 2007-2008 Even Rouault - -Modifications for Zip64 support on both zip and unzip -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation -Authors: - Arjan van de Ven - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Author: - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Authors: - Wajdi Feghali - Jim Guilford - Vinodh Gopal - Erdinc Ozturk - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2014 Intel Corporation - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (c) 2011 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -Copyright (c) 2012 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -zlib.h -- interface of the 'zlib' general purpose compression library -version 1.2.4, March 14th, 2010 - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Jean-loup Gailly -Mark Adler diff --git a/ios/Flutter/App.framework/flutter_assets/fonts/MaterialIcons-Regular.ttf b/ios/Flutter/App.framework/flutter_assets/fonts/MaterialIcons-Regular.ttf deleted file mode 100644 index 9519e1d7..00000000 Binary files a/ios/Flutter/App.framework/flutter_assets/fonts/MaterialIcons-Regular.ttf and /dev/null differ diff --git a/ios/Flutter/App.framework/flutter_assets/isolate_snapshot_data b/ios/Flutter/App.framework/flutter_assets/isolate_snapshot_data deleted file mode 100644 index 95a942b8..00000000 Binary files a/ios/Flutter/App.framework/flutter_assets/isolate_snapshot_data and /dev/null differ diff --git a/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin b/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin deleted file mode 100644 index 19793fb4..00000000 Binary files a/ios/Flutter/App.framework/flutter_assets/kernel_blob.bin and /dev/null differ diff --git a/ios/Flutter/App.framework/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/ios/Flutter/App.framework/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf deleted file mode 100644 index bef51e15..00000000 Binary files a/ios/Flutter/App.framework/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf and /dev/null differ diff --git a/ios/Flutter/App.framework/flutter_assets/vm_snapshot_data b/ios/Flutter/App.framework/flutter_assets/vm_snapshot_data deleted file mode 100644 index bf2141bd..00000000 Binary files a/ios/Flutter/App.framework/flutter_assets/vm_snapshot_data and /dev/null differ diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 9367d483..6b4c0f78 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable App CFBundleIdentifier diff --git a/ios/Flutter/Flutter.framework/Flutter b/ios/Flutter/Flutter.framework/Flutter deleted file mode 100755 index 8bd6ee08..00000000 Binary files a/ios/Flutter/Flutter.framework/Flutter and /dev/null differ diff --git a/ios/Flutter/Flutter.framework/Headers/Flutter.h b/ios/Flutter/Flutter.framework/Headers/Flutter.h deleted file mode 100644 index 9135c820..00000000 --- a/ios/Flutter/Flutter.framework/Headers/Flutter.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTER_H_ -#define FLUTTER_FLUTTER_H_ - -/** - BREAKING CHANGES: - - December 17, 2018: - - Changed designated initializer on FlutterEngine - - October 5, 2018: - - Removed FlutterNavigationController.h/.mm - - Changed return signature of `FlutterDartHeadlessCodeRunner.run*` from void - to bool - - Removed HeadlessPlatformViewIOS - - Marked FlutterDartHeadlessCodeRunner deprecated - - August 31, 2018: Marked -[FlutterDartProject - initFromDefaultSourceForConfiguration] and FlutterStandardBigInteger as - unavailable. - - July 26, 2018: Marked -[FlutterDartProject - initFromDefaultSourceForConfiguration] deprecated. - - February 28, 2018: Removed "initWithFLXArchive" and - "initWithFLXArchiveWithScriptSnapshot". - - January 15, 2018: Marked "initWithFLXArchive" and - "initWithFLXArchiveWithScriptSnapshot" as unavailable following the - deprecation from December 11, 2017. Scheduled to be removed on February - 19, 2018. - - January 09, 2018: Deprecated "FlutterStandardBigInteger" and its use in - "FlutterStandardMessageCodec" and "FlutterStandardMethodCodec". Scheduled to - be marked as unavailable once the deprecation has been available on the - flutter/flutter alpha branch for four weeks. "FlutterStandardBigInteger" was - needed because the Dart 1.0 int type had no size limit. With Dart 2.0, the - int type is a fixed-size, 64-bit signed integer. If you need to communicate - larger integers, use NSString encoding instead. - - December 11, 2017: Deprecated "initWithFLXArchive" and - "initWithFLXArchiveWithScriptSnapshot" and scheculed the same to be marked as - unavailable on January 15, 2018. Instead, "initWithFlutterAssets" and - "initWithFlutterAssetsWithScriptSnapshot" should be used. The reason for this - change is that the FLX archive will be deprecated and replaced with a flutter - assets directory containing the same files as the FLX did. - - November 29, 2017: Added a BREAKING CHANGES section. - */ - -#include "FlutterAppDelegate.h" -#include "FlutterBinaryMessenger.h" -#include "FlutterCallbackCache.h" -#include "FlutterChannels.h" -#include "FlutterCodecs.h" -#include "FlutterDartProject.h" -#include "FlutterEngine.h" -#include "FlutterHeadlessDartRunner.h" -#include "FlutterMacros.h" -#include "FlutterPlatformViews.h" -#include "FlutterPlugin.h" -#include "FlutterPluginAppLifeCycleDelegate.h" -#include "FlutterTexture.h" -#include "FlutterViewController.h" - -#endif // FLUTTER_FLUTTER_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h b/ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h deleted file mode 100644 index 8684a22e..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterAppDelegate.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERAPPDELEGATE_H_ -#define FLUTTER_FLUTTERAPPDELEGATE_H_ - -#import - -#include "FlutterMacros.h" -#include "FlutterPlugin.h" - -/** - * `UIApplicationDelegate` subclass for simple apps that want default behavior. - * - * This class implements the following behaviors: - * * Status bar touches are forwarded to the key window's root view - * `FlutterViewController`, in order to trigger scroll to top. - * * Keeps the Flutter connection open in debug mode when the phone screen - * locks. - * - * App delegates for Flutter applications are *not* required to inherit from - * this class. Developers of custom app delegate classes should copy and paste - * code as necessary from FlutterAppDelegate.mm. - */ -FLUTTER_EXPORT -@interface FlutterAppDelegate - : UIResponder - -@property(strong, nonatomic) UIWindow* window; - -@end - -#endif // FLUTTER_FLUTTERDARTPROJECT_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterBinaryMessenger.h b/ios/Flutter/Flutter.framework/Headers/FlutterBinaryMessenger.h deleted file mode 100644 index 07815c64..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterBinaryMessenger.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERBINARYMESSENGER_H_ -#define FLUTTER_FLUTTERBINARYMESSENGER_H_ - -#import - -#include "FlutterMacros.h" - -NS_ASSUME_NONNULL_BEGIN -/** - * A message reply callback. - * - * Used for submitting a binary reply back to a Flutter message sender. Also used - * in for handling a binary message reply received from Flutter. - * - * @param reply The reply. - */ -typedef void (^FlutterBinaryReply)(NSData* _Nullable reply); - -/** - * A strategy for handling incoming binary messages from Flutter and to send - * asynchronous replies back to Flutter. - * - * @param message The message. - * @param reply A callback for submitting an asynchronous reply to the sender. - */ -typedef void (^FlutterBinaryMessageHandler)(NSData* _Nullable message, FlutterBinaryReply reply); - -/** - * A facility for communicating with the Flutter side using asynchronous message - * passing with binary messages. - * - * Implementated by: - * - `FlutterBasicMessageChannel`, which supports communication using structured - * messages. - * - `FlutterMethodChannel`, which supports communication using asynchronous - * method calls. - * - `FlutterEventChannel`, which supports commuication using event streams. - */ -FLUTTER_EXPORT -@protocol FlutterBinaryMessenger -/** - * Sends a binary message to the Flutter side on the specified channel, expecting - * no reply. - * - * @param channel The channel name. - * @param message The message. - */ -- (void)sendOnChannel:(NSString*)channel message:(NSData* _Nullable)message; - -/** - * Sends a binary message to the Flutter side on the specified channel, expecting - * an asynchronous reply. - * - * @param channel The channel name. - * @param message The message. - * @param callback A callback for receiving a reply. - */ -- (void)sendOnChannel:(NSString*)channel - message:(NSData* _Nullable)message - binaryReply:(FlutterBinaryReply _Nullable)callback - // TODO: Add macOS support for replies once - // https://github.com/flutter/flutter/issues/18852 is fixed. - API_UNAVAILABLE(macos); - -/** - * Registers a message handler for incoming binary messages from the Flutter side - * on the specified channel. - * - * Replaces any existing handler. Use a `nil` handler for unregistering the - * existing handler. - * - * @param channel The channel name. - * @param handler The message handler. - */ -- (void)setMessageHandlerOnChannel:(NSString*)channel - binaryMessageHandler:(FlutterBinaryMessageHandler _Nullable)handler; -@end -NS_ASSUME_NONNULL_END -#endif // FLUTTER_FLUTTERBINARYMESSENGER_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterCallbackCache.h b/ios/Flutter/Flutter.framework/Headers/FlutterCallbackCache.h deleted file mode 100644 index 8849dca0..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterCallbackCache.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERCALLBACKCACHE_H_ -#define FLUTTER_FLUTTERCALLBACKCACHE_H_ - -#import - -#include "FlutterMacros.h" - -/** - * An object containing the result of `FlutterCallbackCache`'s `lookupCallbackInformation` - * method. - */ -FLUTTER_EXPORT -@interface FlutterCallbackInformation : NSObject -/** - * The name of the callback. - */ -@property(retain) NSString* callbackName; -/** - * The class name of the callback. - */ -@property(retain) NSString* callbackClassName; -/** - * The library path of the callback. - */ -@property(retain) NSString* callbackLibraryPath; -@end - -/** - * The cache containing callback information for spawning a - * `FlutterHeadlessDartRunner`. - */ -FLUTTER_EXPORT -@interface FlutterCallbackCache : NSObject -/** - * Returns the callback information for the given callback handle. - * This callback information can be used when spawning a - * `FlutterHeadlessDartRunner`. - * - * @param handle The handle for a callback, provided by the - * Dart method `PluginUtilities.getCallbackHandle`. - * @return A `FlutterCallbackInformation` object which contains the name of the - * callback, the name of the class in which the callback is defined, and the - * path of the library which contains the callback. If the provided handle is - * invalid, nil is returned. - */ -+ (FlutterCallbackInformation*)lookupCallbackInformation:(int64_t)handle; - -@end - -#endif // FLUTTER_FLUTTERCALLBACKCACHE_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterChannels.h b/ios/Flutter/Flutter.framework/Headers/FlutterChannels.h deleted file mode 100644 index 9245d79a..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterChannels.h +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERCHANNELS_H_ -#define FLUTTER_FLUTTERCHANNELS_H_ - -#include "FlutterBinaryMessenger.h" -#include "FlutterCodecs.h" - -NS_ASSUME_NONNULL_BEGIN -/** - * A message reply callback. - * - * Used for submitting a reply back to a Flutter message sender. Also used in - * the dual capacity for handling a message reply received from Flutter. - * - * @param reply The reply. - */ -typedef void (^FlutterReply)(id _Nullable reply); - -/** - * A strategy for handling incoming messages from Flutter and to send - * asynchronous replies back to Flutter. - * - * @param message The message. - * @param callback A callback for submitting a reply to the sender. - */ -typedef void (^FlutterMessageHandler)(id _Nullable message, FlutterReply callback); - -/** - * A channel for communicating with the Flutter side using basic, asynchronous - * message passing. - */ -FLUTTER_EXPORT -@interface FlutterBasicMessageChannel : NSObject -/** - * Creates a `FlutterBasicMessageChannel` with the specified name and binary - * messenger. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * The channel uses `FlutterStandardMessageCodec` to encode and decode messages. - * - * @param name The channel name. - * @param messenger The binary messenger. - */ -+ (instancetype)messageChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger; - -/** - * Creates a `FlutterBasicMessageChannel` with the specified name, binary - * messenger, and message codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The message codec. - */ -+ (instancetype)messageChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; - -/** - * Initializes a `FlutterBasicMessageChannel` with the specified name, binary - * messenger, and message codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The message codec. - */ -- (instancetype)initWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; - -/** - * Sends the specified message to the Flutter side, ignoring any reply. - * - * @param message The message. Must be supported by the codec of this - * channel. - */ -- (void)sendMessage:(id _Nullable)message; - -/** - * Sends the specified message to the Flutter side, expecting an asynchronous - * reply. - * - * @param message The message. Must be supported by the codec of this channel. - * @param callback A callback to be invoked with the message reply from Flutter. - */ -- (void)sendMessage:(id _Nullable)message - reply:(FlutterReply _Nullable)callback - // TODO: Add macOS support for replies once - // https://github.com/flutter/flutter/issues/18852 is fixed. - API_UNAVAILABLE(macos); - -/** - * Registers a message handler with this channel. - * - * Replaces any existing handler. Use a `nil` handler for unregistering the - * existing handler. - * - * @param handler The message handler. - */ -- (void)setMessageHandler:(FlutterMessageHandler _Nullable)handler; -@end - -/** - * A method call result callback. - * - * Used for submitting a method call result back to a Flutter caller. Also used in - * the dual capacity for handling a method call result received from Flutter. - * - * @param result The result. - */ -typedef void (^FlutterResult)(id _Nullable result); - -/** - * A strategy for handling method calls. - * - * @param call The incoming method call. - * @param result A callback to asynchronously submit the result of the call. - * Invoke the callback with a `FlutterError` to indicate that the call failed. - * Invoke the callback with `FlutterMethodNotImplemented` to indicate that the - * method was unknown. Any other values, including `nil`, are interpreted as - * successful results. - */ -typedef void (^FlutterMethodCallHandler)(FlutterMethodCall* call, FlutterResult result); - -/** - * A constant used with `FlutterMethodCallHandler` to respond to the call of an - * unknown method. - */ -FLUTTER_EXPORT -extern NSObject const* FlutterMethodNotImplemented; - -/** - * A channel for communicating with the Flutter side using invocation of - * asynchronous methods. - */ -FLUTTER_EXPORT -@interface FlutterMethodChannel : NSObject -/** - * Creates a `FlutterMethodChannel` with the specified name and binary messenger. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * The channel uses `FlutterStandardMethodCodec` to encode and decode method calls - * and result envelopes. - * - * @param name The channel name. - * @param messenger The binary messenger. - */ -+ (instancetype)methodChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger; - -/** - * Creates a `FlutterMethodChannel` with the specified name, binary messenger, and - * method codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The method codec. - */ -+ (instancetype)methodChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; - -/** - * Initializes a `FlutterMethodChannel` with the specified name, binary messenger, - * and method codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The method codec. - */ -- (instancetype)initWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; - -// clang-format off -/** - * Invokes the specified Flutter method with the specified arguments, expecting - * no results. - * - * @see [MethodChannel.setMethodCallHandler](https://docs.flutter.io/flutter/services/MethodChannel/setMethodCallHandler.html) - * - * @param method The name of the method to invoke. - * @param arguments The arguments. Must be a value supported by the codec of this - * channel. - */ -// clang-format on -- (void)invokeMethod:(NSString*)method arguments:(id _Nullable)arguments; - -/** - * Invokes the specified Flutter method with the specified arguments, expecting - * an asynchronous result. - * - * @param method The name of the method to invoke. - * @param arguments The arguments. Must be a value supported by the codec of this - * channel. - * @param callback A callback that will be invoked with the asynchronous result. - * The result will be a `FlutterError` instance, if the method call resulted - * in an error on the Flutter side. Will be `FlutterMethodNotImplemented`, if - * the method called was not implemented on the Flutter side. Any other value, - * including `nil`, should be interpreted as successful results. - */ -- (void)invokeMethod:(NSString*)method - arguments:(id _Nullable)arguments - result:(FlutterResult _Nullable)callback - // TODO: Add macOS support for replies once - // https://github.com/flutter/flutter/issues/18852 is fixed. - API_UNAVAILABLE(macos); - -/** - * Registers a handler for method calls from the Flutter side. - * - * Replaces any existing handler. Use a `nil` handler for unregistering the - * existing handler. - * - * @param handler The method call handler. - */ -- (void)setMethodCallHandler:(FlutterMethodCallHandler _Nullable)handler; -@end - -/** - * An event sink callback. - * - * @param event The event. - */ -typedef void (^FlutterEventSink)(id _Nullable event); - -/** - * A strategy for exposing an event stream to the Flutter side. - */ -FLUTTER_EXPORT -@protocol FlutterStreamHandler -/** - * Sets up an event stream and begin emitting events. - * - * Invoked when the first listener is registered with the Stream associated to - * this channel on the Flutter side. - * - * @param arguments Arguments for the stream. - * @param events A callback to asynchronously emit events. Invoke the - * callback with a `FlutterError` to emit an error event. Invoke the - * callback with `FlutterEndOfEventStream` to indicate that no more - * events will be emitted. Any other value, including `nil` are emitted as - * successful events. - * @return A FlutterError instance, if setup fails. - */ -- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments - eventSink:(FlutterEventSink)events; - -/** - * Tears down an event stream. - * - * Invoked when the last listener is deregistered from the Stream associated to - * this channel on the Flutter side. - * - * The channel implementation may call this method with `nil` arguments - * to separate a pair of two consecutive set up requests. Such request pairs - * may occur during Flutter hot restart. - * - * @param arguments Arguments for the stream. - * @return A FlutterError instance, if teardown fails. - */ -- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments; -@end - -/** - * A constant used with `FlutterEventChannel` to indicate end of stream. - */ -FLUTTER_EXPORT -extern NSObject const* FlutterEndOfEventStream; - -/** - * A channel for communicating with the Flutter side using event streams. - */ -FLUTTER_EXPORT -@interface FlutterEventChannel : NSObject -/** - * Creates a `FlutterEventChannel` with the specified name and binary messenger. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterViewController`. - * - * The channel uses `FlutterStandardMethodCodec` to decode stream setup and - * teardown requests, and to encode event envelopes. - * - * @param name The channel name. - * @param messenger The binary messenger. - */ -+ (instancetype)eventChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger; - -/** - * Creates a `FlutterEventChannel` with the specified name, binary messenger, - * and method codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The method codec. - */ -+ (instancetype)eventChannelWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; - -/** - * Initializes a `FlutterEventChannel` with the specified name, binary messenger, - * and method codec. - * - * The channel name logically identifies the channel; identically named channels - * interfere with each other's communication. - * - * The binary messenger is a facility for sending raw, binary messages to the - * Flutter side. This protocol is implemented by `FlutterEngine` and `FlutterViewController`. - * - * @param name The channel name. - * @param messenger The binary messenger. - * @param codec The method codec. - */ -- (instancetype)initWithName:(NSString*)name - binaryMessenger:(NSObject*)messenger - codec:(NSObject*)codec; -/** - * Registers a handler for stream setup requests from the Flutter side. - * - * Replaces any existing handler. Use a `nil` handler for unregistering the - * existing handler. - * - * @param handler The stream handler. - */ -- (void)setStreamHandler:(NSObject* _Nullable)handler; -@end -NS_ASSUME_NONNULL_END - -#endif // FLUTTER_FLUTTERCHANNELS_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h b/ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h deleted file mode 100644 index 96c1f5cf..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterCodecs.h +++ /dev/null @@ -1,411 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERCODECS_H_ -#define FLUTTER_FLUTTERCODECS_H_ - -#import -#include "FlutterMacros.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - A message encoding/decoding mechanism. - */ -FLUTTER_EXPORT -@protocol FlutterMessageCodec -/** - * Returns a shared instance of this `FlutterMessageCodec`. - */ -+ (instancetype)sharedInstance; - -/** - * Encodes the specified message into binary. - * - * @param message The message. - * @return The binary encoding, or `nil`, if `message` was `nil`. - */ -- (NSData* _Nullable)encode:(id _Nullable)message; - -/** - * Decodes the specified message from binary. - * - * @param message The message. - * @return The decoded message, or `nil`, if `message` was `nil`. - */ -- (id _Nullable)decode:(NSData* _Nullable)message; -@end - -/** - * A `FlutterMessageCodec` using unencoded binary messages, represented as - * `NSData` instances. - * - * This codec is guaranteed to be compatible with the corresponding - * [BinaryCodec](https://docs.flutter.io/flutter/services/BinaryCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - * - * On the Dart side, messages are represented using `ByteData`. - */ -FLUTTER_EXPORT -@interface FlutterBinaryCodec : NSObject -@end - -/** - * A `FlutterMessageCodec` using UTF-8 encoded `NSString` messages. - * - * This codec is guaranteed to be compatible with the corresponding - * [StringCodec](https://docs.flutter.io/flutter/services/StringCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - */ -FLUTTER_EXPORT -@interface FlutterStringCodec : NSObject -@end - -/** - * A `FlutterMessageCodec` using UTF-8 encoded JSON messages. - * - * This codec is guaranteed to be compatible with the corresponding - * [JSONMessageCodec](https://docs.flutter.io/flutter/services/JSONMessageCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - * - * Supports values accepted by `NSJSONSerialization` plus top-level - * `nil`, `NSNumber`, and `NSString`. - * - * On the Dart side, JSON messages are handled by the JSON facilities of the - * [`dart:convert`](https://api.dartlang.org/stable/dart-convert/JSON-constant.html) - * package. - */ -FLUTTER_EXPORT -@interface FlutterJSONMessageCodec : NSObject -@end - -/** - * A writer of the Flutter standard binary encoding. - * - * See `FlutterStandardMessageCodec` for details on the encoding. - * - * The encoding is extensible via subclasses overriding `writeValue`. - */ -FLUTTER_EXPORT -@interface FlutterStandardWriter : NSObject -- (instancetype)initWithData:(NSMutableData*)data; -- (void)writeByte:(UInt8)value; -- (void)writeBytes:(const void*)bytes length:(NSUInteger)length; -- (void)writeData:(NSData*)data; -- (void)writeSize:(UInt32)size; -- (void)writeAlignment:(UInt8)alignment; -- (void)writeUTF8:(NSString*)value; -- (void)writeValue:(id)value; -@end - -/** - * A reader of the Flutter standard binary encoding. - * - * See `FlutterStandardMessageCodec` for details on the encoding. - * - * The encoding is extensible via subclasses overriding `readValueOfType`. - */ -FLUTTER_EXPORT -@interface FlutterStandardReader : NSObject -- (instancetype)initWithData:(NSData*)data; -- (BOOL)hasMore; -- (UInt8)readByte; -- (void)readBytes:(void*)destination length:(NSUInteger)length; -- (NSData*)readData:(NSUInteger)length; -- (UInt32)readSize; -- (void)readAlignment:(UInt8)alignment; -- (NSString*)readUTF8; -- (nullable id)readValue; -- (nullable id)readValueOfType:(UInt8)type; -@end - -/** - * A factory of compatible reader/writer instances using the Flutter standard - * binary encoding or extensions thereof. - */ -FLUTTER_EXPORT -@interface FlutterStandardReaderWriter : NSObject -- (FlutterStandardWriter*)writerWithData:(NSMutableData*)data; -- (FlutterStandardReader*)readerWithData:(NSData*)data; -@end - -/** - * A `FlutterMessageCodec` using the Flutter standard binary encoding. - * - * This codec is guaranteed to be compatible with the corresponding - * [StandardMessageCodec](https://docs.flutter.io/flutter/services/StandardMessageCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - * - * Supported messages are acyclic values of these forms: - * - * - `nil` or `NSNull` - * - `NSNumber` (including their representation of Boolean values) - * - `NSString` - * - `FlutterStandardTypedData` - * - `NSArray` of supported values - * - `NSDictionary` with supported keys and values - * - * On the Dart side, these values are represented as follows: - * - * - `nil` or `NSNull`: null - * - `NSNumber`: `bool`, `int`, or `double`, depending on the contained value. - * - `NSString`: `String` - * - `FlutterStandardTypedData`: `Uint8List`, `Int32List`, `Int64List`, or `Float64List` - * - `NSArray`: `List` - * - `NSDictionary`: `Map` - */ -FLUTTER_EXPORT -@interface FlutterStandardMessageCodec : NSObject -+ (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter; -@end - -/** - Command object representing a method call on a `FlutterMethodChannel`. - */ -FLUTTER_EXPORT -@interface FlutterMethodCall : NSObject -/** - * Creates a method call for invoking the specified named method with the - * specified arguments. - * - * @param method the name of the method to call. - * @param arguments the arguments value. - */ -+ (instancetype)methodCallWithMethodName:(NSString*)method arguments:(id _Nullable)arguments; - -/** - * The method name. - */ -@property(readonly, nonatomic) NSString* method; - -/** - * The arguments. - */ -@property(readonly, nonatomic, nullable) id arguments; -@end - -/** - * Error object representing an unsuccessful outcome of invoking a method - * on a `FlutterMethodChannel`, or an error event on a `FlutterEventChannel`. - */ -FLUTTER_EXPORT -@interface FlutterError : NSObject -/** - * Creates a `FlutterError` with the specified error code, message, and details. - * - * @param code An error code string for programmatic use. - * @param message A human-readable error message. - * @param details Custom error details. - */ -+ (instancetype)errorWithCode:(NSString*)code - message:(NSString* _Nullable)message - details:(id _Nullable)details; -/** - The error code. - */ -@property(readonly, nonatomic) NSString* code; - -/** - The error message. - */ -@property(readonly, nonatomic, nullable) NSString* message; - -/** - The error details. - */ -@property(readonly, nonatomic, nullable) id details; -@end - -/** - * Type of numeric data items encoded in a `FlutterStandardDataType`. - * - * - FlutterStandardDataTypeUInt8: plain bytes - * - FlutterStandardDataTypeInt32: 32-bit signed integers - * - FlutterStandardDataTypeInt64: 64-bit signed integers - * - FlutterStandardDataTypeFloat64: 64-bit floats - */ -typedef NS_ENUM(NSInteger, FlutterStandardDataType) { - FlutterStandardDataTypeUInt8, - FlutterStandardDataTypeInt32, - FlutterStandardDataTypeInt64, - FlutterStandardDataTypeFloat64, -}; - -/** - * A byte buffer holding `UInt8`, `SInt32`, `SInt64`, or `Float64` values, used - * with `FlutterStandardMessageCodec` and `FlutterStandardMethodCodec`. - * - * Two's complement encoding is used for signed integers. IEEE754 - * double-precision representation is used for floats. The platform's native - * endianness is assumed. - */ -FLUTTER_EXPORT -@interface FlutterStandardTypedData : NSObject -/** - * Creates a `FlutterStandardTypedData` which interprets the specified data - * as plain bytes. - * - * @param data the byte data. - */ -+ (instancetype)typedDataWithBytes:(NSData*)data; - -/** - * Creates a `FlutterStandardTypedData` which interprets the specified data - * as 32-bit signed integers. - * - * @param data the byte data. The length must be divisible by 4. - */ -+ (instancetype)typedDataWithInt32:(NSData*)data; - -/** - * Creates a `FlutterStandardTypedData` which interprets the specified data - * as 64-bit signed integers. - * - * @param data the byte data. The length must be divisible by 8. - */ -+ (instancetype)typedDataWithInt64:(NSData*)data; - -/** - * Creates a `FlutterStandardTypedData` which interprets the specified data - * as 64-bit floats. - * - * @param data the byte data. The length must be divisible by 8. - */ -+ (instancetype)typedDataWithFloat64:(NSData*)data; - -/** - * The raw underlying data buffer. - */ -@property(readonly, nonatomic) NSData* data; - -/** - * The type of the encoded values. - */ -@property(readonly, nonatomic) FlutterStandardDataType type; - -/** - * The number of value items encoded. - */ -@property(readonly, nonatomic) UInt32 elementCount; - -/** - * The number of bytes used by the encoding of a single value item. - */ -@property(readonly, nonatomic) UInt8 elementSize; -@end - -/** - * An arbitrarily large integer value, used with `FlutterStandardMessageCodec` - * and `FlutterStandardMethodCodec`. - */ -FLUTTER_EXPORT -FLUTTER_UNAVAILABLE("Unavailable on 2018-08-31. Deprecated on 2018-01-09. " - "FlutterStandardBigInteger was needed because the Dart 1.0 int type had no " - "size limit. With Dart 2.0, the int type is a fixed-size, 64-bit signed " - "integer. If you need to communicate larger integers, use NSString encoding " - "instead.") -@interface FlutterStandardBigInteger : NSObject -@end - -/** - * A codec for method calls and enveloped results. - * - * Method calls are encoded as binary messages with enough structure that the - * codec can extract a method name `NSString` and an arguments `NSObject`, - * possibly `nil`. These data items are used to populate a `FlutterMethodCall`. - * - * Result envelopes are encoded as binary messages with enough structure that - * the codec can determine whether the result was successful or an error. In - * the former case, the codec can extract the result `NSObject`, possibly `nil`. - * In the latter case, the codec can extract an error code `NSString`, a - * human-readable `NSString` error message (possibly `nil`), and a custom - * error details `NSObject`, possibly `nil`. These data items are used to - * populate a `FlutterError`. - */ -FLUTTER_EXPORT -@protocol FlutterMethodCodec -/** - * Provides access to a shared instance this codec. - * - * @return The shared instance. - */ -+ (instancetype)sharedInstance; - -/** - * Encodes the specified method call into binary. - * - * @param methodCall The method call. The arguments value - * must be supported by this codec. - * @return The binary encoding. - */ -- (NSData*)encodeMethodCall:(FlutterMethodCall*)methodCall; - -/** - * Decodes the specified method call from binary. - * - * @param methodCall The method call to decode. - * @return The decoded method call. - */ -- (FlutterMethodCall*)decodeMethodCall:(NSData*)methodCall; - -/** - * Encodes the specified successful result into binary. - * - * @param result The result. Must be a value supported by this codec. - * @return The binary encoding. - */ -- (NSData*)encodeSuccessEnvelope:(id _Nullable)result; - -/** - * Encodes the specified error result into binary. - * - * @param error The error object. The error details value must be supported - * by this codec. - * @return The binary encoding. - */ -- (NSData*)encodeErrorEnvelope:(FlutterError*)error; - -/** - * Deccodes the specified result envelope from binary. - * - * @param envelope The error object. - * @return The result value, if the envelope represented a successful result, - * or a `FlutterError` instance, if not. - */ -- (id _Nullable)decodeEnvelope:(NSData*)envelope; -@end - -/** - * A `FlutterMethodCodec` using UTF-8 encoded JSON method calls and result - * envelopes. - * - * This codec is guaranteed to be compatible with the corresponding - * [JSONMethodCodec](https://docs.flutter.io/flutter/services/JSONMethodCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - * - * Values supported as methods arguments and result payloads are - * those supported as top-level or leaf values by `FlutterJSONMessageCodec`. - */ -FLUTTER_EXPORT -@interface FlutterJSONMethodCodec : NSObject -@end - -/** - * A `FlutterMethodCodec` using the Flutter standard binary encoding. - * - * This codec is guaranteed to be compatible with the corresponding - * [StandardMethodCodec](https://docs.flutter.io/flutter/services/StandardMethodCodec-class.html) - * on the Dart side. These parts of the Flutter SDK are evolved synchronously. - * - * Values supported as method arguments and result payloads are those supported by - * `FlutterStandardMessageCodec`. - */ -FLUTTER_EXPORT -@interface FlutterStandardMethodCodec : NSObject -+ (instancetype)codecWithReaderWriter:(FlutterStandardReaderWriter*)readerWriter; -@end - -NS_ASSUME_NONNULL_END - -#endif // FLUTTER_FLUTTERCODECS_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h b/ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h deleted file mode 100644 index 032d1c28..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterDartProject.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERDARTPROJECT_H_ -#define FLUTTER_FLUTTERDARTPROJECT_H_ - -#import - -#include "FlutterMacros.h" - -/** - * A set of Flutter and Dart assets used by a `FlutterEngine` to initialize execution. - */ -FLUTTER_EXPORT -@interface FlutterDartProject : NSObject - -/** - * Initializes a Flutter Dart project from a bundle. - */ -- (instancetype)initWithPrecompiledDartBundle:(NSBundle*)bundle NS_DESIGNATED_INITIALIZER; - -/** - * Unavailable - use `init` instead. - */ -- (instancetype)initFromDefaultSourceForConfiguration FLUTTER_UNAVAILABLE("Use -init instead."); - -/** - * Returns the file name for the given asset. If the bundle with the identifier - * "io.flutter.flutter.app" exists, it will try use that bundle; otherwise, it - * will use the main bundle. To specify a different bundle, use - * `-lookupKeyForAsset:asset:fromBundle`. - * - * @param asset The name of the asset. The name can be hierarchical. - * @return the file name to be used for lookup in the main bundle. - */ -+ (NSString*)lookupKeyForAsset:(NSString*)asset; - -/** - * Returns the file name for the given asset. - * The returned file name can be used to access the asset in the supplied bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @param bundle The `NSBundle` to use for looking up the asset. - * @return the file name to be used for lookup in the main bundle. - */ -+ (NSString*)lookupKeyForAsset:(NSString*)asset fromBundle:(NSBundle*)bundle; - -/** - * Returns the file name for the given asset which originates from the specified package. - * The returned file name can be used to access the asset in the application's main bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @param package The name of the package from which the asset originates. - * @return the file name to be used for lookup in the main bundle. - */ -+ (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; - -/** - * Returns the file name for the given asset which originates from the specified package. - * The returned file name can be used to access the asset in the specified bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @param package The name of the package from which the asset originates. - * @param bundle The bundle to use when doing the lookup. - * @return the file name to be used for lookup in the main bundle. - */ -+ (NSString*)lookupKeyForAsset:(NSString*)asset - fromPackage:(NSString*)package - fromBundle:(NSBundle*)bundle; - -/** - * Returns the default identifier for the bundle where we expect to find the Flutter Dart - * application. - */ -+ (NSString*)defaultBundleIdentifier; - -@end - -#endif // FLUTTER_FLUTTERDARTPROJECT_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterEngine.h b/ios/Flutter/Flutter.framework/Headers/FlutterEngine.h deleted file mode 100644 index bf1e7576..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterEngine.h +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERENGINE_H_ -#define FLUTTER_FLUTTERENGINE_H_ - -#import -#import - -#include "FlutterBinaryMessenger.h" -#include "FlutterDartProject.h" -#include "FlutterMacros.h" -#include "FlutterPlugin.h" -#include "FlutterTexture.h" - -@class FlutterViewController; - -/** - * The FlutterEngine class coordinates a single instance of execution for a - * `FlutterDartProject`. It may have zero or one `FlutterViewController` at a - * time, which can be specified via `-setViewController:`. - * `FlutterViewController`'s `initWithEngine` initializer will automatically call - * `-setViewController:` for itself. - * - * A FlutterEngine can be created independently of a `FlutterViewController` for - * headless execution. It can also persist across the lifespan of multiple - * `FlutterViewController` instances to maintain state and/or asynchronous tasks - * (such as downloading a large file). - * - * Alternatively, you can simply create a new `FlutterViewController` with only a - * `FlutterDartProject`. That `FlutterViewController` will internally manage its - * own instance of a FlutterEngine, but will not guarantee survival of the engine - * beyond the life of the ViewController. - * - * A newly initialized FlutterEngine will not actually run a Dart Isolate until - * either `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is invoked. - * One of these methods must be invoked before calling `-setViewController:`. - */ -FLUTTER_EXPORT -@interface FlutterEngine - : NSObject -/** - * Initialize this FlutterEngine with a `FlutterDartProject`. - * - * If the FlutterDartProject is not specified, the FlutterEngine will attempt to locate - * the project in a default location (the flutter_assets folder in the iOS application - * bundle). - * - * A newly initialized engine will not run the `FlutterDartProject` until either - * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI:` is called. - * - * FlutterEngine created with this method will have allowHeadlessExecution set to `YES`. - * This means that the engine will continue to run regardless of whether a `FlutterViewController` - * is attached to it or not, until `-destroyContext:` is called or the process finishes. - * - * @param labelPrefix The label prefix used to identify threads for this instance. Should - * be unique across FlutterEngine instances, and is used in instrumentation to label - * the threads used by this FlutterEngine. - * @param projectOrNil The `FlutterDartProject` to run. - */ -- (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)projectOrNil; - -/** - * Initialize this FlutterEngine with a `FlutterDartProject`. - * - * If the FlutterDartProject is not specified, the FlutterEngine will attempt to locate - * the project in a default location (the flutter_assets folder in the iOS application - * bundle). - * - * A newly initialized engine will not run the `FlutterDartProject` until either - * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI:` is called. - * - * @param labelPrefix The label prefix used to identify threads for this instance. Should - * be unique across FlutterEngine instances, and is used in instrumentation to label - * the threads used by this FlutterEngine. - * @param projectOrNil The `FlutterDartProject` to run. - * @param allowHeadlessExecution Whether or not to allow this instance to continue - * running after passing a nil `FlutterViewController` to `-setViewController:`. - */ -- (instancetype)initWithName:(NSString*)labelPrefix - project:(FlutterDartProject*)projectOrNil - allowHeadlessExecution:(BOOL)allowHeadlessExecution NS_DESIGNATED_INITIALIZER; - -/** - * The default initializer is not available for this object. - * Callers must use `-[FlutterEngine initWithName:project:]`. - */ -- (instancetype)init NS_UNAVAILABLE; - -+ (instancetype)new NS_UNAVAILABLE; - -/** - * Runs a Dart program on an Isolate from the main Dart library (i.e. the library that - * contains `main()`). - * - * The first call to this method will create a new Isolate. Subsequent calls will return - * immediately. - * - * @param entrypoint The name of a top-level function from the same Dart - * library that contains the app's main() function. If this is nil, it will - * default to `main()`. If it is not the app's main() function, that function - * must be decorated with `@pragma(vm:entry-point)` to ensure the method is not - * tree-shaken by the Dart compiler. - * @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise. - */ -- (BOOL)runWithEntrypoint:(NSString*)entrypoint; - -/** - * Runs a Dart program on an Isolate using the specified entrypoint and Dart library, - * which may not be the same as the library containing the Dart program's `main()` function. - * - * The first call to this method will create a new Isolate. Subsequent calls will return - * immediately. - * - * @param entrypoint The name of a top-level function from a Dart library. If nil, this will - * default to `main()`. If it is not the app's main() function, that function - * must be decorated with `@pragma(vm:entry-point)` to ensure the method is not - * tree-shaken by the Dart compiler. - * @param uri The URI of the Dart library which contains the entrypoint method. IF nil, - * this will default to the same library as the `main()` function in the Dart program. - * @return YES if the call succeeds in creating and running a Flutter Engine instance; NO otherwise. - */ -- (BOOL)runWithEntrypoint:(NSString*)entrypoint libraryURI:(NSString*)uri; - -/** - * Destroy running context for an engine. - * - * This method can be used to force the FlutterEngine object to release all resources. - * After sending this message, the object will be in an unusable state until it is deallocated. - * Accessing properties or sending messages to it will result in undefined behavior or runtime - * errors. - */ -- (void)destroyContext; - -/** - * Ensures that Flutter will generate a semantics tree. - * - * This is enabled by default if certain accessibility services are turned on by - * the user, or when using a Simulator. This method allows a user to turn - * semantics on when they would not ordinarily be generated and the performance - * overhead is not a concern, e.g. for UI testing. Note that semantics should - * never be programmatically turned off, as it would potentially disable - * accessibility services an end user has requested. - * - * This method must only be called after launching the engine via - * `-runWithEntrypoint:` or `-runWithEntryPoint:libraryURI`. - * - * Although this method returns synchronously, it does not guarantee that a - * semantics tree is actually available when the method returns. It - * synchronously ensures that the next frame the Flutter framework creates will - * have a semantics tree. - * - * You can subscribe to semantics updates via `NSNotificationCenter` by adding - * an observer for the name `FlutterSemanticsUpdateNotification`. The `object` - * parameter will be the `FlutterViewController` associated with the semantics - * update. This will asynchronously fire after a semantics tree has actually - * built (which may be some time after the frame has been rendered). - */ -- (void)ensureSemanticsEnabled; - -/** - * Sets the `FlutterViewController` for this instance. The FlutterEngine must be - * running (e.g. a successful call to `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI`) - * before calling this method. Callers may pass nil to remove the viewController - * and have the engine run headless in the current process. - * - * A FlutterEngine can only have one `FlutterViewController` at a time. If there is - * already a `FlutterViewController` associated with this instance, this method will replace - * the engine's current viewController with the newly specified one. - * - * Setting the viewController will signal the engine to start animations and drawing, and unsetting - * it will signal the engine to stop animations and drawing. However, neither will impact the state - * of the Dart program's execution. - */ -@property(nonatomic, weak) FlutterViewController* viewController; - -/** - * The `FlutterMethodChannel` used for localization related platform messages, such as - * setting the locale. - */ -@property(nonatomic, readonly) FlutterMethodChannel* localizationChannel; -/** - * The `FlutterMethodChannel` used for navigation related platform messages. - * - * @see [Navigation - * Channel](https://docs.flutter.io/flutter/services/SystemChannels/navigation-constant.html) - * @see [Navigator Widget](https://docs.flutter.io/flutter/widgets/Navigator-class.html) - */ -@property(nonatomic, readonly) FlutterMethodChannel* navigationChannel; - -/** - * The `FlutterMethodChannel` used for core platform messages, such as - * information about the screen orientation. - */ -@property(nonatomic, readonly) FlutterMethodChannel* platformChannel; - -/** - * The `FlutterMethodChannel` used to communicate text input events to the - * Dart Isolate. - * - * @see [Text Input - * Channel](https://docs.flutter.io/flutter/services/SystemChannels/textInput-constant.html) - */ -@property(nonatomic, readonly) FlutterMethodChannel* textInputChannel; - -/** - * The `FlutterBasicMessageChannel` used to communicate app lifecycle events - * to the Dart Isolate. - * - * @see [Lifecycle - * Channel](https://docs.flutter.io/flutter/services/SystemChannels/lifecycle-constant.html) - */ -@property(nonatomic, readonly) FlutterBasicMessageChannel* lifecycleChannel; - -/** - * The `FlutterBasicMessageChannel` used for communicating system events, such as - * memory pressure events. - * - * @see [System - * Channel](https://docs.flutter.io/flutter/services/SystemChannels/system-constant.html) - */ -@property(nonatomic, readonly) FlutterBasicMessageChannel* systemChannel; - -/** - * The `FlutterBasicMessageChannel` used for communicating user settings such as - * clock format and text scale. - */ -@property(nonatomic, readonly) FlutterBasicMessageChannel* settingsChannel; - -@end - -#endif // FLUTTER_FLUTTERENGINE_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterHeadlessDartRunner.h b/ios/Flutter/Flutter.framework/Headers/FlutterHeadlessDartRunner.h deleted file mode 100644 index 24acbc08..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterHeadlessDartRunner.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ -#define FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ - -#import - -#include "FlutterBinaryMessenger.h" -#include "FlutterDartProject.h" -#include "FlutterEngine.h" -#include "FlutterMacros.h" - -/** - * A callback for when FlutterHeadlessDartRunner has attempted to start a Dart - * Isolate in the background. - * - * @param success YES if the Isolate was started and run successfully, NO - * otherwise. - */ -typedef void (^FlutterHeadlessDartRunnerCallback)(BOOL success); - -/** - * The FlutterHeadlessDartRunner runs Flutter Dart code with a null rasterizer, - * and no native drawing surface. It is appropriate for use in running Dart - * code e.g. in the background from a plugin. - * - * Most callers should prefer using `FlutterEngine` directly; this interface exists - * for legacy support. - */ -FLUTTER_EXPORT -FLUTTER_DEPRECATED("FlutterEngine should be used rather than FlutterHeadlessDartRunner") -@interface FlutterHeadlessDartRunner : FlutterEngine - -/** - * Iniitalize this FlutterHeadlessDartRunner with a `FlutterDartProject`. - * - * If the FlutterDartProject is not specified, the FlutterHeadlessDartRunner will attempt to locate - * the project in a default location. - * - * A newly initialized engine will not run the `FlutterDartProject` until either - * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is called. - * - * @param labelPrefix The label prefix used to identify threads for this instance. Should - * be unique across FlutterEngine instances - * @param projectOrNil The `FlutterDartProject` to run. - */ -- (instancetype)initWithName:(NSString*)labelPrefix project:(FlutterDartProject*)projectOrNil; - -/** - * Iniitalize this FlutterHeadlessDartRunner with a `FlutterDartProject`. - * - * If the FlutterDartProject is not specified, the FlutterHeadlessDartRunner will attempt to locate - * the project in a default location. - * - * A newly initialized engine will not run the `FlutterDartProject` until either - * `-runWithEntrypoint:` or `-runWithEntrypoint:libraryURI` is called. - * - * @param labelPrefix The label prefix used to identify threads for this instance. Should - * be unique across FlutterEngine instances - * @param projectOrNil The `FlutterDartProject` to run. - * @param allowHeadlessExecution Must be set to `YES`. - */ -- (instancetype)initWithName:(NSString*)labelPrefix - project:(FlutterDartProject*)projectOrNil - allowHeadlessExecution:(BOOL)allowHeadlessExecution NS_DESIGNATED_INITIALIZER; - -/** - * Not recommended for use - will initialize with a default label ("io.flutter.headless") - * and the default FlutterDartProject. - */ -- (instancetype)init; - -@end - -#endif // FLUTTER_FLUTTERHEADLESSDARTRUNNER_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterMacros.h b/ios/Flutter/Flutter.framework/Headers/FlutterMacros.h deleted file mode 100644 index 51b27bb7..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterMacros.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERMACROS_H_ -#define FLUTTER_FLUTTERMACROS_H_ - -#if defined(FLUTTER_FRAMEWORK) - -#define FLUTTER_EXPORT __attribute__((visibility("default"))) - -#else // defined(FLUTTER_SDK) - -#define FLUTTER_EXPORT - -#endif // defined(FLUTTER_SDK) - -#ifndef NS_ASSUME_NONNULL_BEGIN -#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") -#define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") -#endif // defined(NS_ASSUME_NONNULL_BEGIN) - -/** - * Indicates that the API has been deprecated for the specified reason. Code - * that uses the deprecated API will continue to work as before. However, the - * API will soon become unavailable and users are encouraged to immediately take - * the appropriate action mentioned in the deprecation message and the BREAKING - * CHANGES section present in the Flutter.h umbrella header. - */ -#define FLUTTER_DEPRECATED(msg) __attribute__((__deprecated__(msg))) - -/** - * Indicates that the previously deprecated API is now unavailable. Code that - * uses the API will not work and the declaration of the API is only a stub - * meant to display the given message detailing the actions for the user to take - * immediately. - */ -#define FLUTTER_UNAVAILABLE(msg) __attribute__((__unavailable__(msg))) - -#endif // FLUTTER_FLUTTERMACROS_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterPlatformViews.h b/ios/Flutter/Flutter.framework/Headers/FlutterPlatformViews.h deleted file mode 100644 index 72086dec..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterPlatformViews.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERPLATFORMVIEWS_H_ -#define FLUTTER_FLUTTERPLATFORMVIEWS_H_ - -#import - -#import "FlutterCodecs.h" -#import "FlutterMacros.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * Wraps a `UIView` for embedding in the Flutter hierarchy - */ -@protocol FlutterPlatformView -/** - * Returns a reference to the `UIView` that is wrapped by this `FlutterPlatformView`. - */ -- (UIView*)view; -@end - -FLUTTER_EXPORT -@protocol FlutterPlatformViewFactory -/** - * Create a `FlutterPlatformView`. - * - * Implemented by iOS code that expose a `UIView` for embedding in a Flutter app. - * - * The implementation of this method should create a new `UIView` and return it. - * - * @param frame The rectangle for the newly created `UIView` measued in points. - * @param viewId A unique identifier for this `UIView`. - * @param args Parameters for creating the `UIView` sent from the Dart side of the Flutter app. - * If `createArgsCodec` is not implemented, or if no creation arguments were sent from the Dart - * code, this will be null. Otherwise this will be the value sent from the Dart code as decoded by - * `createArgsCodec`. - */ -- (NSObject*)createWithFrame:(CGRect)frame - viewIdentifier:(int64_t)viewId - arguments:(id _Nullable)args; - -/** - * Returns the `FlutterMessageCodec` for decoding the args parameter of `createWithFrame`. - * - * Only needs to be implemented if `createWithFrame` needs an arguments parameter. - */ -@optional -- (NSObject*)createArgsCodec; -@end - -NS_ASSUME_NONNULL_END - -#endif // FLUTTER_FLUTTERPLATFORMVIEWS_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h b/ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h deleted file mode 100644 index 4b340bf7..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterPlugin.h +++ /dev/null @@ -1,367 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERPLUGIN_H_ -#define FLUTTER_FLUTTERPLUGIN_H_ - -#import -#import - -#include "FlutterBinaryMessenger.h" -#include "FlutterChannels.h" -#include "FlutterCodecs.h" -#include "FlutterPlatformViews.h" -#include "FlutterTexture.h" - -NS_ASSUME_NONNULL_BEGIN -@protocol FlutterPluginRegistrar; -@protocol FlutterPluginRegistry; - -/** - * A plugin registration callback. - * - * Used for registering plugins with additional instances of - * `FlutterPluginRegistry`. - * - * @param registry The registry to register plugins with. - */ -typedef void (*FlutterPluginRegistrantCallback)(NSObject* registry); - -/** - * Implemented by the iOS part of a Flutter plugin. - * - * Defines a set of optional callback methods and a method to set up the plugin - * and register it to be called by other application components. - */ -@protocol FlutterPlugin -@required -/** - * Registers this plugin using the context information and callback registration - * methods exposed by the given registrar. - * - * The registrar is obtained from a `FlutterPluginRegistry` which keeps track of - * the identity of registered plugins and provides basic support for cross-plugin - * coordination. - * - * The caller of this method, a plugin registrant, is usually autogenerated by - * Flutter tooling based on declared plugin dependencies. The generated registrant - * asks the registry for a registrar for each plugin, and calls this method to - * allow the plugin to initialize itself and register callbacks with application - * objects available through the registrar protocol. - * - * @param registrar A helper providing application context and methods for - * registering callbacks. - */ -+ (void)registerWithRegistrar:(NSObject*)registrar; -@optional -/** - * Set a callback for registering plugins to an additional `FlutterPluginRegistry`, - * including headless `FlutterEngine` instances. - * - * This method is typically called from within an application's `AppDelegate` at - * startup to allow for plugins which create additional `FlutterEngine` instances - * to register the application's plugins. - * - * @param callback A callback for registering some set of plugins with a - * `FlutterPluginRegistry`. - */ -+ (void)setPluginRegistrantCallback:(FlutterPluginRegistrantCallback)callback; -@optional -/** - * Called if this plugin has been registered to receive `FlutterMethodCall`s. - * - * @param call The method call command object. - * @param result A callback for submitting the result of the call. - */ -- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `NO` if this plugin vetoes application launch. - */ -- (BOOL)application:(UIApplication*)application - didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `NO` if this plugin vetoes application launch. - */ -- (BOOL)application:(UIApplication*)application - willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationDidBecomeActive:(UIApplication*)application; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillResignActive:(UIApplication*)application; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationDidEnterBackground:(UIApplication*)application; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillEnterForeground:(UIApplication*)application; - -/** - Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillTerminate:(UIApplication*)application; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -- (void)application:(UIApplication*)application - didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings; -#pragma GCC diagnostic pop - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - didReceiveRemoteNotification:(NSDictionary*)userInfo - fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - didReceiveLocalNotification:(UILocalNotification*)notification; - -/** - * Calls all plugins registered for `UNUserNotificationCenterDelegate` callbacks. - */ -- (void)userNotificationCenter:(UNUserNotificationCenter*)center - willPresentNotification:(UNNotification*)notification - withCompletionHandler: - (void (^)(UNNotificationPresentationOptions options))completionHandler - API_AVAILABLE(ios(10)); - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - openURL:(NSURL*)url - options:(NSDictionary*)options; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - openURL:(NSURL*)url - sourceApplication:(NSString*)sourceApplication - annotation:(id)annotation; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem - completionHandler:(void (^)(BOOL succeeded))completionHandler - API_AVAILABLE(ios(9.0)); - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - handleEventsForBackgroundURLSession:(nonnull NSString*)identifier - completionHandler:(nonnull void (^)(void))completionHandler; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - * - * @return `YES` if this plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - continueUserActivity:(NSUserActivity*)userActivity - restorationHandler:(void (^)(NSArray*))restorationHandler; -@end - -/** - *Registration context for a single `FlutterPlugin`, providing a one stop shop - *for the plugin to access contextual information and register callbacks for - *various application events. - * - *Registrars are obtained from a `FlutterPluginRegistry` which keeps track of - *the identity of registered plugins and provides basic support for cross-plugin - *coordination. - */ -@protocol FlutterPluginRegistrar -/** - * Returns a `FlutterBinaryMessenger` for creating Dart/iOS communication - * channels to be used by the plugin. - * - * @return The messenger. - */ -- (NSObject*)messenger; - -/** - * Returns a `FlutterTextureRegistry` for registering textures - * provided by the plugin. - * - * @return The texture registry. - */ -- (NSObject*)textures; - -/** - * Registers a `FlutterPlatformViewFactory` for creation of platfrom views. - * - * Plugins expose `UIView` for embedding in Flutter apps by registering a view factory. - * - * @param factory The view factory that will be registered. - * @param factoryId A unique identifier for the factory, the Dart code of the Flutter app can use - * this identifier to request creation of a `UIView` by the registered factory. - */ -- (void)registerViewFactory:(NSObject*)factory - withId:(NSString*)factoryId; - -/** - * Publishes a value for external use of the plugin. - * - * Plugins may publish a single value, such as an instance of the - * plugin's main class, for situations where external control or - * interaction is needed. - * - * The published value will be available from the `FlutterPluginRegistry`. - * Repeated calls overwrite any previous publication. - * - * @param value The value to be published. - */ -- (void)publish:(NSObject*)value; - -/** - * Registers the plugin as a receiver of incoming method calls from the Dart side - * on the specified `FlutterMethodChannel`. - * - * @param delegate The receiving object, such as the plugin's main class. - * @param channel The channel - */ -- (void)addMethodCallDelegate:(NSObject*)delegate - channel:(FlutterMethodChannel*)channel; - -/** - * Registers the plugin as a receiver of `UIApplicationDelegate` calls. - * - * @param delegate The receiving object, such as the plugin's main class. - */ -- (void)addApplicationDelegate:(NSObject*)delegate; - -/** - * Returns the file name for the given asset. - * The returned file name can be used to access the asset in the application's main bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @return the file name to be used for lookup in the main bundle. - */ -- (NSString*)lookupKeyForAsset:(NSString*)asset; - -/** - * Returns the file name for the given asset which originates from the specified package. - * The returned file name can be used to access the asset in the application's main bundle. - * - * - * @param asset The name of the asset. The name can be hierarchical. - * @param package The name of the package from which the asset originates. - * @return the file name to be used for lookup in the main bundle. - */ -- (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; -@end - -/** - * A registry of Flutter iOS plugins. - * - * Plugins are identified by unique string keys, typically the name of the - * plugin's main class. The registry tracks plugins by this key, mapping it to - * a value published by the plugin during registration, if any. This provides a - * very basic means of cross-plugin coordination with loose coupling between - * unrelated plugins. - * - * Plugins typically need contextual information and the ability to register - * callbacks for various application events. To keep the API of the registry - * focused, these facilities are not provided directly by the registry, but by - * a `FlutterPluginRegistrar`, created by the registry in exchange for the unique - * key of the plugin. - * - * There is no implied connection between the registry and the registrar. - * Specifically, callbacks registered by the plugin via the registrar may be - * relayed directly to the underlying iOS application objects. - */ -@protocol FlutterPluginRegistry -/** - * Returns a registrar for registering a plugin. - * - * @param pluginKey The unique key identifying the plugin. - */ -- (NSObject*)registrarForPlugin:(NSString*)pluginKey; -/** - * Returns whether the specified plugin has been registered. - * - * @param pluginKey The unique key identifying the plugin. - * @return `YES` if `registrarForPlugin` has been called with `pluginKey`. - */ -- (BOOL)hasPlugin:(NSString*)pluginKey; - -/** - * Returns a value published by the specified plugin. - * - * @param pluginKey The unique key identifying the plugin. - * @return An object published by the plugin, if any. Will be `NSNull` if - * nothing has been published. Will be `nil` if the plugin has not been - * registered. - */ -- (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey; -@end - -/** - * Implement this in the `UIAppDelegate` of your app to enable Flutter plugins to register - * themselves to the application life cycle events. - */ -@protocol FlutterAppLifeCycleProvider -- (void)addApplicationLifeCycleDelegate:(NSObject*)delegate; -@end - -NS_ASSUME_NONNULL_END; - -#endif // FLUTTER_FLUTTERPLUGIN_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h b/ios/Flutter/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h deleted file mode 100644 index a8dda282..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ -#define FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ - -#include "FlutterPlugin.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * Propagates `UIAppDelegate` callbacks to registered plugins. - */ -FLUTTER_EXPORT -@interface FlutterPluginAppLifeCycleDelegate : NSObject -/** - * Registers `delegate` to receive life cycle callbacks via this FlutterPluginAppLifecycleDelegate - * as long as it is alive. - * - * `delegate` will only referenced weakly. - */ -- (void)addDelegate:(NSObject*)delegate; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - * - * @return `NO` if any plugin vetoes application launch. - */ -- (BOOL)application:(UIApplication*)application - didFinishLaunchingWithOptions:(NSDictionary*)launchOptions; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - * - * @return `NO` if any plugin vetoes application launch. - */ -- (BOOL)application:(UIApplication*)application - willFinishLaunchingWithOptions:(NSDictionary*)launchOptions; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationDidBecomeActive:(UIApplication*)application; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillResignActive:(UIApplication*)application; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationDidEnterBackground:(UIApplication*)application; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillEnterForeground:(UIApplication*)application; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)applicationWillTerminate:(UIApplication*)application; - -/** - * Called if this plugin has been registered for `UIApplicationDelegate` callbacks. - */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -- (void)application:(UIApplication*)application - didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings; -#pragma GCC diagnostic pop - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - didReceiveRemoteNotification:(NSDictionary*)userInfo - fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - didReceiveLocalNotification:(UILocalNotification*)notification; - -/** - * Calls all plugins registered for `UNUserNotificationCenterDelegate` callbacks. - */ -- (void)userNotificationCenter:(UNUserNotificationCenter*)center - willPresentNotification:(UNNotification*)notification - withCompletionHandler: - (void (^)(UNNotificationPresentationOptions options))completionHandler - API_AVAILABLE(ios(10)); - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @return `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - openURL:(NSURL*)url - options:(NSDictionary*)options; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @return `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @return `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - openURL:(NSURL*)url - sourceApplication:(NSString*)sourceApplication - annotation:(id)annotation; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks. - */ -- (void)application:(UIApplication*)application - performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem - completionHandler:(void (^)(BOOL succeeded))completionHandler - API_AVAILABLE(ios(9.0)); - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @return `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - handleEventsForBackgroundURLSession:(nonnull NSString*)identifier - completionHandler:(nonnull void (^)(void))completionHandler; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @returns `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler; - -/** - * Calls all plugins registered for `UIApplicationDelegate` callbacks in order of registration until - * some plugin handles the request. - * - * @return `YES` if any plugin handles the request. - */ -- (BOOL)application:(UIApplication*)application - continueUserActivity:(NSUserActivity*)userActivity - restorationHandler:(void (^)(NSArray*))restorationHandler; -@end - -NS_ASSUME_NONNULL_END - -#endif // FLUTTER_FLUTTERPLUGINAPPLIFECYCLEDELEGATE_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterTexture.h b/ios/Flutter/Flutter.framework/Headers/FlutterTexture.h deleted file mode 100644 index e7cd0133..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterTexture.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERTEXTURE_H_ -#define FLUTTER_FLUTTERTEXTURE_H_ - -#import -#import - -#include "FlutterMacros.h" - -NS_ASSUME_NONNULL_BEGIN - -FLUTTER_EXPORT -@protocol FlutterTexture -- (CVPixelBufferRef _Nullable)copyPixelBuffer; -@end - -FLUTTER_EXPORT -@protocol FlutterTextureRegistry -- (int64_t)registerTexture:(NSObject*)texture; -- (void)textureFrameAvailable:(int64_t)textureId; -- (void)unregisterTexture:(int64_t)textureId; -@end - -NS_ASSUME_NONNULL_END - -#endif // FLUTTER_FLUTTERTEXTURE_H_ diff --git a/ios/Flutter/Flutter.framework/Headers/FlutterViewController.h b/ios/Flutter/Flutter.framework/Headers/FlutterViewController.h deleted file mode 100644 index b38b118f..00000000 --- a/ios/Flutter/Flutter.framework/Headers/FlutterViewController.h +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef FLUTTER_FLUTTERVIEWCONTROLLER_H_ -#define FLUTTER_FLUTTERVIEWCONTROLLER_H_ - -#import -#include - -#include "FlutterBinaryMessenger.h" -#include "FlutterDartProject.h" -#include "FlutterEngine.h" -#include "FlutterMacros.h" -#include "FlutterPlugin.h" -#include "FlutterTexture.h" - -@class FlutterEngine; - -/** - * The name used for semantic update nofications via `NSNotificationCenter`. - * - * The object passed as the sender is the `FlutterViewController` associated - * with the update. - */ -FLUTTER_EXPORT -extern NSNotificationName const FlutterSemanticsUpdateNotification; - -/** - * A `UIViewController` implementation for Flutter views. - * - * Dart execution, channel communication, texture registration, and plugin registration - * are all handled by `FlutterEngine`. Calls on this class to those members all proxy - * through to the `FlutterEngine` attached FlutterViewController. - * - * A FlutterViewController can be initialized either with an already-running `FlutterEngine`, - * or it can be initialized with a `FlutterDartProject` that will be used to spin up - * a new `FlutterEngine`. Developers looking to present and hide FlutterViewControllers - * in native iOS applications will usually want to maintain the `FlutterEngine` instance - * so as not to lose Dart-related state and asynchronous tasks when navigating back and - * forth between a FlutterViewController and other `UIViewController`s. - */ -FLUTTER_EXPORT -@interface FlutterViewController - : UIViewController - -/** - * Initializes this FlutterViewController with the specified `FlutterEngine`. - * - * The initialized viewcontroller will attach itself to the engine as part of this process. - * - * @param engine The `FlutterEngine` instance to attach to. - * @param nibNameOrNil The NIB name to initialize this UIViewController with. - * @param nibBundleOrNil The NIB bundle. - */ -- (instancetype)initWithEngine:(FlutterEngine*)engine - nibName:(NSString*)nibNameOrNil - bundle:(NSBundle*)nibBundleOrNil NS_DESIGNATED_INITIALIZER; - -/** - * Initializes a new FlutterViewController and `FlutterEngine` with the specified - * `FlutterDartProject`. - * - * @param projectOrNil The `FlutterDartProject` to initialize the `FlutterEngine` with. - * @param nibNameOrNil The NIB name to initialize this UIViewController with. - * @param nibBundleOrNil The NIB bundle. - */ -- (instancetype)initWithProject:(FlutterDartProject*)projectOrNil - nibName:(NSString*)nibNameOrNil - bundle:(NSBundle*)nibBundleOrNil NS_DESIGNATED_INITIALIZER; - -- (void)handleStatusBarTouches:(UIEvent*)event; - -/** - * Registers a callback that will be invoked when the Flutter view has been rendered. - * The callback will be fired only once. - * - * Replaces an existing callback. Use a `nil` callback to unregister the existing one. - */ -- (void)setFlutterViewDidRenderCallback:(void (^)(void))callback; - -/** - * Returns the file name for the given asset. - * The returned file name can be used to access the asset in the application's - * main bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @return The file name to be used for lookup in the main bundle. - */ -- (NSString*)lookupKeyForAsset:(NSString*)asset; - -/** - * Returns the file name for the given asset which originates from the specified - * package. - * The returned file name can be used to access the asset in the application's - * main bundle. - * - * @param asset The name of the asset. The name can be hierarchical. - * @param package The name of the package from which the asset originates. - * @return The file name to be used for lookup in the main bundle. - */ -- (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package; - -/** - * Sets the first route that the Flutter app shows. The default is "/". - * This method will guarnatee that the initial route is delivered, even if the - * Flutter window hasn't been created yet when called. It cannot be used to update - * the current route being shown in a visible FlutterViewController (see pushRoute - * and popRoute). - * - * @param route The name of the first route to show. - */ -- (void)setInitialRoute:(NSString*)route; - -/** - * Instructs the Flutter Navigator (if any) to go back. - */ -- (void)popRoute; - -/** - * Instructs the Flutter Navigator (if any) to push a route on to the navigation - * stack. The setInitialRoute method should be prefered if this is called before the - * FlutterViewController has come into view. - * - * @param route The name of the route to push to the navigation stack. - */ -- (void)pushRoute:(NSString*)route; - -/** - * The `FlutterPluginRegistry` used by this FlutterViewController. - */ -- (id)pluginRegistry; - -/** - * Specifies the view to use as a splash screen. Flutter's rendering is asynchronous, so the first - * frame rendered by the Flutter application might not immediately appear when theFlutter view is - * initially placed in the view hierarchy. The splash screen view will be used as - * a replacement until the first frame is rendered. - * - * The view used should be appropriate for multiple sizes; an autoresizing mask to - * have a flexible width and height will be applied automatically. - */ -@property(strong, nonatomic) UIView* splashScreenView; - -/** - * Attempts to set the `splashScreenView` property from the `UILaunchStoryboardName` from the - * main bundle's `Info.plist` file. This method will not change the value of `splashScreenView` - * if it cannot find a default one from a storyboard or nib. - * - * @return `YES` if successful, `NO` otherwise. - */ -- (BOOL)loadDefaultSplashScreenView; - -/** - * Controls whether the created view will be opaque or not. - * - * Default is `YES`. Note that setting this to `NO` may negatively impact performance - * when using hardware acceleration, and toggling this will trigger a re-layout of the - * view. - */ -@property(nonatomic, getter=isViewOpaque) BOOL viewOpaque; - -/** - * The `FlutterEngine` instance for this view controller. - */ -@property(weak, nonatomic, readonly) FlutterEngine* engine; - -@end - -#endif // FLUTTER_FLUTTERVIEWCONTROLLER_H_ diff --git a/ios/Flutter/Flutter.framework/Info.plist b/ios/Flutter/Flutter.framework/Info.plist deleted file mode 100644 index b3b02563..00000000 --- a/ios/Flutter/Flutter.framework/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - Flutter - CFBundleIdentifier - io.flutter.flutter - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Flutter - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 8.0 - - diff --git a/ios/Flutter/Flutter.framework/Modules/module.modulemap b/ios/Flutter/Flutter.framework/Modules/module.modulemap deleted file mode 100644 index bf81c8a8..00000000 --- a/ios/Flutter/Flutter.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Flutter { - umbrella header "Flutter.h" - - export * - module * { export * } -} diff --git a/ios/Flutter/Flutter.framework/icudtl.dat b/ios/Flutter/Flutter.framework/icudtl.dat deleted file mode 100644 index d9677abf..00000000 Binary files a/ios/Flutter/Flutter.framework/icudtl.dat and /dev/null differ diff --git a/ios/Flutter/Generated.xcconfig b/ios/Flutter/Generated.xcconfig deleted file mode 100644 index fcc6d9f3..00000000 --- a/ios/Flutter/Generated.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -// This is a generated file; do not edit or check into version control. -FLUTTER_ROOT=/Users/up2up/flutter -FLUTTER_APPLICATION_PATH=/Users/up2up/Lab/VocaDB-App -FLUTTER_TARGET=/Users/up2up/Lab/VocaDB-App/lib/main.dart -FLUTTER_BUILD_DIR=build -SYMROOT=${SOURCE_ROOT}/../build/ios -FLUTTER_FRAMEWORK_DIR=/Users/up2up/flutter/bin/cache/artifacts/engine/ios -FLUTTER_BUILD_NAME=3.0.0 -FLUTTER_BUILD_NUMBER=1 diff --git a/ios/Flutter/flutter_assets/AssetManifest.json b/ios/Flutter/flutter_assets/AssetManifest.json deleted file mode 100644 index 03eaddff..00000000 --- a/ios/Flutter/flutter_assets/AssetManifest.json +++ /dev/null @@ -1 +0,0 @@ -{"packages/cupertino_icons/assets/CupertinoIcons.ttf":["packages/cupertino_icons/assets/CupertinoIcons.ttf"]} \ No newline at end of file diff --git a/ios/Flutter/flutter_assets/FontManifest.json b/ios/Flutter/flutter_assets/FontManifest.json deleted file mode 100644 index 34bacb77..00000000 --- a/ios/Flutter/flutter_assets/FontManifest.json +++ /dev/null @@ -1 +0,0 @@ -[{"fonts":[{"asset":"fonts/MaterialIcons-Regular.ttf"}],"family":"MaterialIcons"},{"family":"packages/cupertino_icons/CupertinoIcons","fonts":[{"asset":"packages/cupertino_icons/assets/CupertinoIcons.ttf"}]}] \ No newline at end of file diff --git a/ios/Flutter/flutter_assets/LICENSE b/ios/Flutter/flutter_assets/LICENSE deleted file mode 100644 index 3726cd0b..00000000 --- a/ios/Flutter/flutter_assets/LICENSE +++ /dev/null @@ -1,11996 +0,0 @@ -async -collection -stream_channel -typed_data - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -boolean_selector -meta - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 1999-2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2002-2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2003 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 Kungliga Tekniska Högskolan -(Royal Institute of Technology, Stockholm, Sweden). -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2004 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2005 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2006,2007 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2010 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2011 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2012 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2013 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2014, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015, Intel Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2016, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2017, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright (c) 2018, Google Inc. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - licensing@OpenSSL.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2003 Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005 Nokia. All rights reserved. - -The portions of the attached software ("Contribution") is developed by -Nokia Corporation and is licensed pursuant to the OpenSSL open source -license. - -The Contribution, originally written by Mika Kousa and Pasi Eronen of -Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites -support (see RFC 4279) to OpenSSL. - -No patent licenses or other rights except those expressly stated in -the OpenSSL open source license shall be deemed granted or received -expressly, by implication, estoppel, or otherwise. - -No assurances are provided by Nokia that the Contribution does not -infringe the patent or other intellectual property rights of any third -party or that the license provides you with all the necessary rights -to make use of the Contribution. - -THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN -ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA -SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY -OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR -OTHERWISE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2007, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2008 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2008, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. -All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2009, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2012, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. -Copyright (c) 2014, Intel Corporation. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2015, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl - -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - -Licensed under the OpenSSL license (the "License"). You may not use -this file except in compliance with the License. You can obtain a copy -in the file LICENSE in the source distribution or at -https://www.openssl.org/source/license.html --------------------------------------------------------------------------------- -boringssl - -Copyright 2016 Brian Smith. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -boringssl - -The MIT License (MIT) - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. --------------------------------------------------------------------------------- -boringssl -dart - -OpenSSL License - - ==================================================================== - Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - - 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - - 5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - - 6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - - THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - OF THE POSSIBILITY OF SUCH DAMAGE. - ==================================================================== - - This product includes cryptographic software written by Eric Young - (eay@cryptsoft.com). This product includes software written by Tim - Hudson (tjh@cryptsoft.com). - -Original SSLeay License - -* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -* All rights reserved. - -* This package is an SSL implementation written -* by Eric Young (eay@cryptsoft.com). -* The implementation was written so as to conform with Netscapes SSL. - -* This library is free for commercial and non-commercial use as long as -* the following conditions are aheared to. The following conditions -* apply to all code found in this distribution, be it the RC4, RSA, -* lhash, DES, etc., code; not just the SSL code. The SSL documentation -* included with this distribution is covered by the same copyright terms -* except that the holder is Tim Hudson (tjh@cryptsoft.com). - -* Copyright remains Eric Young's, and as such any Copyright notices in -* the code are not to be removed. -* If this package is used in a product, Eric Young should be given attribution -* as the author of the parts of the library used. -* This can be in the form of a textual message at program startup or -* in documentation (online or textual) provided with the package. - -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 3. All advertising materials mentioning features or use of this software -* must display the following acknowledgement: -* "This product includes cryptographic software written by -* Eric Young (eay@cryptsoft.com)" -* The word 'cryptographic' can be left out if the rouines from the library -* being used are not cryptographic related :-). -* 4. If you include any Windows specific code (or a derivative thereof) from -* the apps directory (application code) you must include an acknowledgement: -* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. - -* The licence and distribution terms for any publically available version or -* derivative of this code cannot be changed. i.e. this code cannot simply be -* copied and put under another distribution licence -* [including the GNU Public Licence.] - -ISC license used for completely new code in BoringSSL: - -/* Copyright (c) 2015, Google Inc. - - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -The code in third_party/fiat carries the MIT license: - -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Licenses for support code - -Parts of the TLS test suite are under the Go license. This code is not included -in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so -distributing code linked against BoringSSL does not trigger this license: - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -boringssl -observatory_pub_packages -skia -txt -vulkan - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. --------------------------------------------------------------------------------- -charcode -matcher -path -source_span -stack_trace -string_scanner - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -colorama - -Copyright (c) 2010 Jonathan Hartley -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holders, nor those of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -cupertino_icons - - -The MIT License (MIT) - -Copyright (c) 2016 Drifty (http://drifty.com/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2012 Adam Singer (adam@solvr.io) -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, -EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY -WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, -INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF -THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -In addition, the following condition applies: - -All redistributions must retain an intact copy of this copyright notice -and disclaimer. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -dart - -Copyright 2009 The Go Authors. All rights reserved. -Use of this source code is governed by a BSD-style -license that can be found in the LICENSE file --------------------------------------------------------------------------------- -dart - -Copyright 2012, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2006-2008 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2010 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -double-conversion -icu - -Copyright 2012 the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -engine -txt - -Copyright 2013 The Flutter Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -files - -Copyright 2000, Clark Cooper -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 1995-2002 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001, 2002, 2003, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright (C) 2001-2008, 2011, 2013, 2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2004, 2011 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2014 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000 Computing Research Labs, New Mexico State University -Copyright 2001-2015 - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000, 2001, 2004 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2002 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2001, 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2000-2010, 2012-2014 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2001, 2002, 2012 Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -Copyright 2003 by -Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -freetype2 - -The FreeType Project LICENSE - - 2006-Jan-27 - -Copyright 1996-2002, 2006 by -David Turner, Robert Wilhelm, and Werner Lemberg - -Introduction -============ - - The FreeType Project is distributed in several archive packages; - some of them may contain, in addition to the FreeType font engine, - various tools and contributions which rely on, or relate to, the - FreeType Project. - - This license applies to all files found in such packages, and - which do not fall under their own explicit license. The license - affects thus the FreeType font engine, the test programs, - documentation and makefiles, at the very least. - - This license was inspired by the BSD, Artistic, and IJG - (Independent JPEG Group) licenses, which all encourage inclusion - and use of free software in commercial and freeware products - alike. As a consequence, its main points are that: - - o We don't promise that this software works. However, we will be - interested in any kind of bug reports. (`as is' distribution) - - o You can use this software for whatever you want, in parts or - full form, without having to pay us. (`royalty-free' usage) - - o You may not pretend that you wrote this software. If you use - it, or only parts of it, in a program, you must acknowledge - somewhere in your documentation that you have used the - FreeType code. (`credits') - - We specifically permit and encourage the inclusion of this - software, with or without modifications, in commercial products. - We disclaim all warranties covering The FreeType Project and - assume no liability related to The FreeType Project. - - Finally, many people asked us for a preferred form for a - credit/disclaimer to use in compliance with this license. We thus - encourage you to use the following text: - - Portions of this software are copyright © The FreeType - Project (www.freetype.org). All rights reserved. - - Please replace with the value from the FreeType version you - actually use. - -Legal Terms -=========== - -0. Definitions - - Throughout this license, the terms `package', `FreeType Project', - and `FreeType archive' refer to the set of files originally - distributed by the authors (David Turner, Robert Wilhelm, and - Werner Lemberg) as the `FreeType Project', be they named as alpha, - beta or final release. - - `You' refers to the licensee, or person using the project, where - `using' is a generic term including compiling the project's source - code as well as linking it to form a `program' or `executable'. - This program is referred to as `a program using the FreeType - engine'. - - This license applies to all files distributed in the original - FreeType Project, including all source code, binaries and - documentation, unless otherwise stated in the file in its - original, unmodified form as distributed in the original archive. - If you are unsure whether or not a particular file is covered by - this license, you must contact us to verify this. - - The FreeType Project is copyright (C) 1996-2000 by David Turner, - Robert Wilhelm, and Werner Lemberg. All rights reserved except as - specified below. - -1. No Warranty - - THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO - USE, OF THE FREETYPE PROJECT. - -2. Redistribution - - This license grants a worldwide, royalty-free, perpetual and - irrevocable right and license to use, execute, perform, compile, - display, copy, create derivative works of, distribute and - sublicense the FreeType Project (in both source and object code - forms) and derivative works thereof for any purpose; and to - authorize others to exercise some or all of the rights granted - herein, subject to the following conditions: - - o Redistribution of source code must retain this license file - (`FTL.TXT') unaltered; any additions, deletions or changes to - the original files must be clearly indicated in accompanying - documentation. The copyright notices of the unaltered, - original files must be preserved in all copies of source - files. - - o Redistribution in binary form must provide a disclaimer that - states that the software is based in part of the work of the - FreeType Team, in the distribution documentation. We also - encourage you to put an URL to the FreeType web page in your - documentation, though this isn't mandatory. - - These conditions apply to any software derived from or based on - the FreeType Project, not just the unmodified files. If you use - our work, you must acknowledge us. However, no fee need be paid - to us. - -3. Advertising - - Neither the FreeType authors and contributors nor you shall use - the name of the other for commercial, advertising, or promotional - purposes without specific prior written permission. - - We suggest, but do not require, that you use one or more of the - following phrases to refer to this software in your documentation - or advertising materials: `FreeType Project', `FreeType Engine', - `FreeType library', or `FreeType Distribution'. - - As you have not signed this license, you are not required to - accept it. However, as the FreeType Project is copyrighted - material, only this license, or another one contracted with the - authors, grants you the right to use, distribute, and modify it. - Therefore, by using, distributing, or modifying the FreeType - Project, you indicate that you understand and accept all the terms - of this license. - -4. Contacts - - There are two mailing lists related to FreeType: - - o freetype@nongnu.org - - Discusses general use and applications of FreeType, as well as - future and wanted additions to the library and distribution. - If you are looking for support, start in this list if you - haven't found anything to help you in the documentation. - - o freetype-devel@nongnu.org - - Discusses bugs, as well as engine internals, design issues, - specific licenses, porting, etc. - - Our home page can be found at - - https://www.freetype.org - ---- end of FTL.TXT --- --------------------------------------------------------------------------------- -gif - -GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! --------------------------------------------------------------------------------- -gif - -The Graphics Interchange Format(c) is the copyright property of CompuServe -Incorporated. Only CompuServe Incorporated is authorized to define, redefine, -enhance, alter, modify or change in any way the definition of the format. - -CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free -license for the use of the Graphics Interchange Format(sm) in computer -software; computer software utilizing GIF(sm) must acknowledge ownership of the -Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in -User and Technical Documentation. Computer software utilizing GIF, which is -distributed or may be distributed without User or Technical Documentation must -display to the screen or printer a message acknowledging ownership of the -Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in -this case, the acknowledgement may be displayed in an opening screen or leading -banner, or a closing screen or trailing banner. A message such as the following -may be used: - - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." --------------------------------------------------------------------------------- -harfbuzz - -Copyright (C) 2012 Grigori Goronzy - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2004,2007,2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 1998-2004 David Turner and Werner Lemberg -Copyright © 2006 Behdad Esfahbod -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007 Chris Wilson -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009 Red Hat, Inc. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2010,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2007,2008,2009,2010 Red Hat, Inc. -Copyright © 2012,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2009 Keith Stribley -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Codethink Limited -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009 Red Hat, Inc. -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2009,2010 Red Hat, Inc. -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010 Red Hat, Inc. -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2011,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2010,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011 Martin Hosken -Copyright © 2011 SIL International -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2012,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2011,2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012 Mozilla Foundation. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2013 Mozilla Foundation. -Copyright © 2012,2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2012,2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2013 Red Hat, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2014 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015 Mozilla Foundation. -Copyright © 2015 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2015-2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Google, Inc. -Copyright © 2018 Khaled Hosny -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Igalia S.L. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2016 Elie Roux -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2017,2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi -Copyright © 2018 Khaled Hosny - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Ebrahim Byagowi. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Google, Inc. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -Copyright © 2018 Adobe Systems Incorporated. - - This is part of HarfBuzz, a text shaping library. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. -For parts of HarfBuzz that are licensed under different licenses see individual -files names COPYING in subdirectories where applicable. - -Copyright © 2010,2011,2012 Google, Inc. -Copyright © 2012 Mozilla Foundation -Copyright © 2011 Codethink Limited -Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies) -Copyright © 2009 Keith Stribley -Copyright © 2009 Martin Hosken and SIL International -Copyright © 2007 Chris Wilson -Copyright © 2006 Behdad Esfahbod -Copyright © 2005 David Turner -Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc. -Copyright © 1998-2004 David Turner and Werner Lemberg - -For full copyright notices consult the individual files in the package. - -Permission is hereby granted, without written agreement and without -license or royalty fees, to use, copy, modify, and distribute this -software and its documentation for any purpose, provided that the -above copyright notice and the following two paragraphs appear in -all copies of this software. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR -DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO -PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. --------------------------------------------------------------------------------- -harfbuzz - -The contents of this directory are licensed under the following terms: - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1995-2016 International Business Machines Corporation and others -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, and/or sell copies of the Software, and to permit persons -to whom the Software is furnished to do so, provided that the above -copyright notice(s) and this permission notice appear in all copies of -the Software and that both the above copyright notice(s) and this -permission notice appear in supporting documentation. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY -SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, use -or other dealings in this Software without prior written authorization -of the copyright holder. - -All trademarks and registered trademarks mentioned herein are the -property of their respective owners. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Computer Systems and Communication Lab, - Institute of Information Science, Academia - * Sinica. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the Computer Systems and Communication Lab - nor the names of its contributors may be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 TaBE Project. -Copyright (c) 1999 Pai-Hsiang Hsiao. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. -. Neither the name of the TaBE Project nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 1999 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2002 Unicode, Inc. All Rights reserved. - Copyright (C) 2002-2005, International Business Machines - Corporation and others. All Rights Reserved. - -This file is provided as-is by Unicode, Inc. (The Unicode Consortium). -No claims are made as to fitness for any particular purpose. No -warranties of any kind are expressed or implied. The recipient -agrees to determine applicability of information provided. If this -file has been provided on optical media by Unicode, Inc., the sole -remedy for any claim will be exchange of defective media within 90 -days of receipt. - -Unicode, Inc. hereby grants the right to freely use the information -supplied in this file in the creation of products supporting the -Unicode Standard, and to make copies of this file in any form for -internal or external distribution as long as this notice remains -attached. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2013 International Business Machines Corporation -and others. All Rights Reserved. - -Project: http://code.google.com/p/lao-dictionary -Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt -License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt - (copied below) - - This file is derived from the above dictionary, with slight - modifications. - - Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, - are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. Redistributions in - binary form must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) 2014 International Business Machines Corporation -and others. All Rights Reserved. - -This list is part of a project hosted at: - github.com/kanyawtech/myanmar-karen-word-lists - -Copyright (c) 2013, LeRoy Benjamin Sharon -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: Redistributions of source code must retain the above -copyright notice, this list of conditions and the following -disclaimer. Redistributions in binary form must reproduce the -above copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided -with the distribution. - - Neither the name Myanmar Karen Word Lists, nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2010. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2011. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2012. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2014. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright (c) IBM Corporation, 2000-2016. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright 1996 Chih-Hao Tsai @ Beckman Institute, - University of Illinois -c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 --------------------------------------------------------------------------------- -icu - -Copyright 2000, 2001, 2002, 2003 Nara Institute of Science -and Technology. All Rights Reserved. - -Use, reproduction, and distribution of this software is permitted. -Any copy of this software, whether in its original form or modified, -must include both the above copyright notice and the following -paragraphs. - -Nara Institute of Science and Technology (NAIST), -the copyright holders, disclaims all warranties with regard to this -software, including all implied warranties of merchantability and -fitness, in no event shall NAIST be liable for -any special, indirect or consequential damages or any damages -whatsoever resulting from loss of use, data or profits, whether in an -action of contract, negligence or other tortuous action, arising out -of or in connection with the use or performance of this software. - -A large portion of the dictionary entries -originate from ICOT Free Software. The following conditions for ICOT -Free Software applies to the current dictionary as well. - -Each User may also freely distribute the Program, whether in its -original form or modified, to any third party or parties, PROVIDED -that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear -on, or be attached to, the Program, which is distributed substantially -in the same form as set out herein and that such intended -distribution, if actually made, will neither violate or otherwise -contravene any of the laws and regulations of the countries having -jurisdiction over the User or the intended distribution itself. - -NO WARRANTY - -The program was produced on an experimental basis in the course of the -research and development conducted during the project and is provided -to users as so produced on an experimental basis. Accordingly, the -program is provided without any warranty whatsoever, whether express, -implied, statutory or otherwise. The term "warranty" used herein -includes, but is not limited to, any warranty of the quality, -performance, merchantability and fitness for a particular purpose of -the program and the nonexistence of any infringement or violation of -any right of any third party. - -Each user of the program will agree and understand, and be deemed to -have agreed and understood, that there is no warranty whatsoever for -the program and, accordingly, the entire risk arising from or -otherwise connected with the program is assumed by the user. - -Therefore, neither ICOT, the copyright holder, or any other -organization that participated in or was otherwise related to the -development of the program and their respective officials, directors, -officers and other employees shall be held liable for any and all -damages, including, without limitation, general, special, incidental -and consequential damages, arising out of or otherwise in connection -with the use or inability to use the program or any product, material -or result produced or otherwise obtained by using the program, -regardless of whether they have been advised of, or otherwise had -knowledge of, the possibility of such damages at any time during the -project or thereafter. Each user will be deemed to have agreed to the -foregoing by his or her commencement of use of the program. The term -"use" as used herein includes, but is not limited to, the use, -modification, copying and distribution of the program and the -production of secondary products from the program. - -In the case where the program, whether in its original form or -modified, was distributed or delivered to or received by a user from -any person, organization or entity other than ICOT, unless it makes or -grants independently of ICOT any specific warranty to the user in -writing, such person, organization or entity, will also be exempted -from and not be held liable to the user for any such damages as noted -above as far as the program is concerned. --------------------------------------------------------------------------------- -icu - -Copyright 2006-2011, the V8 project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright 2014 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Copyright © 1991-2018 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu - -The BSD License -http://opensource.org/licenses/bsd-license.php -Copyright (C) 2006-2008, Google Inc. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided with -the distribution. - Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu - -Unicode® Terms of Use -For the general privacy policy governing access to this site, see the Unicode Privacy Policy. For trademark usage, see the Unicode® Consortium Name and Trademark Usage Policy. - -A. Unicode Copyright. -1. Copyright © 1991-2017 Unicode, Inc. All rights reserved. -2. Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. -3. Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files solely for informational purposes and in the creation of products supporting the Unicode Standard, subject to the Terms and Conditions herein. -4. Further specifications of rights and restrictions pertaining to the use of the particular set of data files known as the "Unicode Character Database" can be found in the License. -5. Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. The online code charts carry specific restrictions. All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. -6. No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. -7. Modification is not permitted with respect to this document. All copies of this document must be verbatim. -B. Restricted Rights Legend. Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. -C. Warranties and Disclaimers. -1. This publication and/or website may include technical or typographical errors or other inaccuracies . Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. -2. If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. -3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. -D. Waiver of Damages. In no event shall Unicode or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. -E. Trademarks & Logos. -1. The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. -2. The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. -3. All third party trademarks referenced herein are the property of their respective owners. -F. Miscellaneous. -1. Jurisdiction and Venue. This server is operated from a location in the State of California, United States of America. Unicode makes no representation that the materials are appropriate for use in other locations. If you access this server from other locations, you are responsible for compliance with local laws. This Agreement, all use of this site and any claims and damages resulting from use of this site are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this site shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. -2. Modification by Unicode Unicode shall have the right to modify this Agreement at any time by posting it to this site. The user may not assign any part of this Agreement without Unicode’s prior written consent. -3. Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. -4. Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. -5. Entire Agreement. This Agreement constitutes the entire agreement between the parties. - -EXHIBIT 1 -UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE - -Unicode Data Files include all data files under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -Unicode Data Files do not include PDF online code charts under the -directory http://www.unicode.org/Public/. - -Software includes any source code published in the Unicode Standard -or under the directories -http://www.unicode.org/Public/, http://www.unicode.org/reports/, -http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and -http://www.unicode.org/utility/trac/browser/. - -NOTICE TO USER: Carefully read the following legal agreement. -BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S -DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), -YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. -IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE -THE DATA FILES OR SOFTWARE. - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2015 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -icu -skia - -Copyright 2016 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, 2014-2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2013-2014, Linaro Limited. All Rights Reserved. -Author: Ragesh Radhakrishnan -Copyright (C) 2014-2016, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. -Copyright (C) 2016, Siarhei Siamashka. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2009-2011, Nokia Corporation and/or its subsidiary(-ies). -All Rights Reserved. -Author: Siarhei Siamashka -Copyright (C) 2014, Siarhei Siamashka. All Rights Reserved. -Copyright (C) 2014, Linaro Limited. All Rights Reserved. -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2015-2016, Matthieu Darbois. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -All Rights Reserved. -Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) - Darko Laus (darko.laus@imgtec.com) -Copyright (C) 2015, D. R. Commander. All Rights Reserved. -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved. -Copyright (C) 2014, Jay Foad. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C) 2015, D. R. Commander. All Rights Reserved. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2014 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011, 2015 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright (C)2011-2016 D. R. Commander. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the libjpeg-turbo Project nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, 2016, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2009-2011, 2014-2015, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2010, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library - version 1.02 - -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014, D. R. Commander. -Copyright (C) 2015, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, 2014-2016, D. R. Commander. -Copyright (C) 2013-2014, MIPS Technologies, Inc., California. -Copyright (C) 2014, Linaro Limited. -Copyright (C) 2015-2016, Matthieu Darbois. - -Based on the x86 SIMD extension for IJG JPEG library, -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009 Pierre Ossman for Cendio AB -Copyright (C) 2011, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2009, 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -Copyright 2009, 2012 Pierre Ossman for Cendio AB -Copyright (C) 2012, D. R. Commander. - -Based on the x86 SIMD extension for IJG JPEG library -Copyright (C) 1999-2006, MIYASAKA Masaru. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -libjpeg-turbo - -libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project -to include only information relevant to libjpeg-turbo, to wordsmith certain -sections, and to remove impolitic language that existed in the libjpeg v8 -README. It is included only for reference. Please see README.md for -information specific to libjpeg-turbo. - -The Independent JPEG Group's JPEG software -========================================== - -This distribution contains a release of the Independent JPEG Group's free JPEG -software. You are welcome to redistribute this software and to use it for any -purpose, subject to the conditions under LEGAL ISSUES, below. - -This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone, -Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, -Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, -and other members of the Independent JPEG Group. - -IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee -(also known as JPEG, together with ITU-T SG16). - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - usage.txt Usage instructions for cjpeg, djpeg, jpegtran, - rdjpgcom, and wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.txt). - wizard.txt Advanced usage instructions for JPEG wizards only. - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.txt How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.txt Overview of the JPEG library's internal structure. - coderules.txt Coding style rules --- please read if you contribute code. - -Please read at least usage.txt. Some information can also be found in the JPEG -FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find -out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - -OVERVIEW -======== - -This package contains C software to implement JPEG image encoding, decoding, -and transcoding. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and grayscale images. JPEG's strong suit is compressing -photographic images or other types of images that have smooth color and -brightness transitions between neighboring pixels. Images with sharp lines or -other abrupt features may not compress well with JPEG, and a higher JPEG -quality may have to be used to avoid visible compression artifacts with such -images. - -JPEG is lossy, meaning that the output pixels are not necessarily identical to -the input pixels. However, on photographic content and other "smooth" images, -very good compression ratios can be obtained with no visible compression -artifacts, and extremely high compression ratios are possible if you are -willing to sacrifice image quality (by reducing the "quality" setting in the -compressor.) - -This software implements JPEG baseline, extended-sequential, and progressive -compression processes. Provision is made for supporting all variants of these -processes, although some uncommon parameter settings aren't implemented yet. -We have made no provision for supporting the hierarchical or lossless -processes defined in the standard. - -We provide a set of library routines for reading and writing JPEG image files, -plus two sample applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. - -We have also included "jpegtran", a utility for lossless transcoding between -different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple -applications for inserting and extracting textual comments in JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) Rather, it is intended to -be reliable, portable, industrial-strength code. We do not claim to have -achieved that goal in every aspect of the software, but we strive for it. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - -The Unix configuration script "configure" was produced with GNU Autoconf. -It is copyright by the Free Software Foundation but is freely distributable. -The same holds for its supporting scripts (config.guess, config.sub, -ltmain.sh). Another support script, install-sh, is copyright by X Consortium -but is also freely distributable. - -The IJG distribution formerly included code to read and write GIF files. -To avoid entanglement with the Unisys LZW patent (now expired), GIF reading -support has been removed altogether, and the GIF writer has been simplified -to produce "uncompressed GIFs". This technique does not use the LZW -algorithm; the resulting GIF files are larger than usual, but are readable -by all standard GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - -REFERENCES -========== - -We recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PDF file containing a revised version of Wallace's article is -available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually -a preprint for an article that appeared in IEEE Trans. Consumer Electronics) -omits the sample images that appeared in CACM, but it includes corrections -and some added material. Note: the Wallace article is copyright ACM and IEEE, -and it may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by -M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides -good explanations and example C code for a multitude of compression methods -including JPEG. It is an excellent source if you are comfortable reading C -code but don't know much about data compression in general. The book's JPEG -sample code is far from industrial-strength, but when you are ready to look -at a full implementation, you've got one here... - -The best currently available description of JPEG is the textbook "JPEG Still -Image Data Compression Standard" by William B. Pennebaker and Joan L. -Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. -Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG -standards (DIS 10918-1 and draft DIS 10918-2). - -The original JPEG standard is divided into two parts, Part 1 being the actual -specification, while Part 2 covers compliance testing methods. Part 1 is -titled "Digital Compression and Coding of Continuous-tone Still Images, -Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS -10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of -Continuous-tone Still Images, Part 2: Compliance testing" and has document -numbers ISO/IEC IS 10918-2, ITU-T T.83. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report -and thus received a formal publication status. It is available as a free -download in PDF format from -http://www.ecma-international.org/publications/techreports/E-TR-098.htm. -A PostScript version of the JFIF document is available at -http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at -http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures. - -The TIFF 6.0 file format specification can be obtained by FTP from -ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme -found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems. -IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6). -Instead, we recommend the JPEG design proposed by TIFF Technical Note #2 -(Compression tag 7). Copies of this Note can be obtained from -http://www.ijg.org/files/. It is expected that the next revision -of the TIFF spec will replace the 6.0 JPEG design with the Note's design. -Although IJG's own code does not support TIFF/JPEG, the free libtiff library -uses our library to implement TIFF/JPEG per the Note. - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is www.ijg.org. -The most recent released version can always be found there in -directory "files". - -The JPEG FAQ (Frequently Asked Questions) article is a source of some -general information about JPEG. -It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq -and other news.answers archive sites, including the official news.answers -archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/. -If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu -with body - send usenet/news.answers/jpeg-faq/part1 - send usenet/news.answers/jpeg-faq/part2 - -FILE FORMAT WARS -================ - -The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together -with ITU-T SG16) currently promotes different formats containing the name -"JPEG" which are incompatible with original DCT-based JPEG. IJG therefore does -not support these formats (see REFERENCES). Indeed, one of the original -reasons for developing this free software was to help force convergence on -common, interoperable format standards for JPEG files. -Don't use an incompatible file format! -(In any case, our decoder will remain capable of reading existing JPEG -image files indefinitely.) - -TO DO -===== - -Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. --------------------------------------------------------------------------------- -libsdl -skia - -Copyright 2016 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright (c) 2010, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2010 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2011 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2012 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2013 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2014 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2015 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2016 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -libwebp - -Copyright 2017 Google Inc. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, Michael Bostock and Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. -Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2013, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2014, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2015, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages - -Copyright 2016, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -observatory_pub_packages -pkg - -Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -for details. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -quiver - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --------------------------------------------------------------------------------- -rapidjson - -Copyright (c) 2006-2013 Alexander Chemeris - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the product nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -rapidjson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License -Version 2.0 - -1. Definitions - -1.1. “Contributor” - -means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. - -1.2. “Contributor Version” - -means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. - -1.3. “Contribution” - -means Covered Software of a particular Contributor. - -1.4. “Covered Software” - -means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. - -1.5. “Incompatible With Secondary Licenses” - -means - - a. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or - - b. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. - -1.6. “Executable Form” - -means any form of the work other than Source Code Form. - -1.7. “Larger Work” - -means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. - -1.8. “License” - -means this document. - -1.9. “Licensable” - -means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. - -1.10. “Modifications” - -means any of the following: - - a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or - - b. any new file in Source Code Form that contains any Covered Software. - -1.11. “Patent Claims” of a Contributor - -means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. - -1.12. “Secondary License” - -means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. - -1.13. “Source Code Form” - -means the form of the work preferred for making modifications. - -1.14. “You” (or “Your”) - -means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and - - b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: - - a. for any code that a Contributor has removed from Covered Software; or - - b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or - - c. under Patent Claims infringed by Covered Software in the absence of its Contributions. - -This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - - a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and - - b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. - -6. Disclaimer of Warranty - - Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. - -7. Limitation of Liability - - Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -root_certificates - -Mozilla Public License Version 2.0 -================================== - -1. Definitions - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -* 6. Disclaimer of Warranty - -* Covered Software is provided under this License on an "as is" -* basis, without warranty of any kind, either expressed, implied, or -* statutory, including, without limitation, warranties that the -* Covered Software is free of defects, merchantable, fit for a -* particular purpose or non-infringing. The entire risk as to the -* quality and performance of the Covered Software is with You. -* Should any Covered Software prove defective in any respect, You -* (not any Contributor) assume the cost of any necessary servicing, -* repair, or correction. This disclaimer of warranty constitutes an -* essential part of this License. No use of any Covered Software is -* authorized under this License except under this disclaimer. - -* 7. Limitation of Liability - -* Under no circumstances and under no legal theory, whether tort -* (including negligence), contract, or otherwise, shall any -* Contributor, or anyone who distributes Covered Software as -* permitted above, be liable to You for any direct, indirect, -* special, incidental, or consequential damages of any character -* including, without limitation, damages for lost profits, loss of -* goodwill, work stoppage, computer failure or malfunction, or any -* and all other commercial damages or losses, even if such party -* shall have been informed of the possibility of such damages. This -* limitation of liability shall not apply to liability for death or -* personal injury resulting from such party's negligence to the -* extent applicable law prohibits such limitation. Some -* jurisdictions do not allow the exclusion or limitation of -* incidental or consequential damages, so this exclusion and -* limitation may not apply to You. - -8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. --------------------------------------------------------------------------------- -skcms - -Copyright (c) 2018 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skcms -skia -vulkan -vulkanmemoryallocator -wuffs - -Copyright 2018 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2006 Apple Computer, Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (C) 2014 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2011 Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright (c) 2014-2016 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and/or associated documentation files (the "Materials"), -to deal in the Materials without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Materials, and to permit persons to whom the -Materials are furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Materials. --------------------------------------------------------------------------------- -skia - -Copyright 2005 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2006-2012 The Android Open Source Project -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2007 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2008 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009 Motorola - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2009-2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2010 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 Google Inc. -Copyright 2012 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2011 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 Intel Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2012 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2013 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 Google Inc. -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2014 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2015 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 Mozilla Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2016 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 ARM Ltd. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2017 Google Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google LLC. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 Google, LLC - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Android Open Source Project - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -Copyright 2018 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -skia - -NEON optimized code (C) COPYRIGHT 2009 Motorola - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2003, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tcmalloc - -Copyright (c) 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -term_glyph - -Copyright 2017, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -test_api - -Copyright 2018, the Dart project authors. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -tonic - -Copyright 2015 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2016 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2017 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -tonic - -Copyright 2018 The Fuchsia Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -vector_math - -Copyright 2015, Google Inc. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------------------------------------------------------------------------- -vulkanmemoryallocator - -Copyright (c) 2017-2018 Advanced Micro Devices, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2003, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2006, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2007 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2008, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2009 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly -detect_data_type() function provided freely by Cosmin Truta, 2006 - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Jean-loup Gailly. - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1995-2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications for Zip64 support -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) - -Modifications of Unzip for Zip64 -Copyright (C) 2007-2008 Even Rouault - -Modifications for Zip64 support on both zip and unzip -Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) - -For more info read MiniZip_info.txt - -Condition of use and distribution are the same than zlib : - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2005, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2004, 2010 Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation -Authors: - Arjan van de Ven - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Author: - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2013 Intel Corporation. All rights reserved. -Authors: - Wajdi Feghali - Jim Guilford - Vinodh Gopal - Erdinc Ozturk - Jim Kukunas - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (C) 2014 Intel Corporation - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. --------------------------------------------------------------------------------- -zlib - -Copyright (c) 2011 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -Copyright (c) 2012 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------------- -zlib - -zlib.h -- interface of the 'zlib' general purpose compression library -version 1.2.4, March 14th, 2010 - -Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. - -Jean-loup Gailly -Mark Adler diff --git a/ios/Flutter/flutter_assets/fonts/MaterialIcons-Regular.ttf b/ios/Flutter/flutter_assets/fonts/MaterialIcons-Regular.ttf deleted file mode 100644 index 9519e1d7..00000000 Binary files a/ios/Flutter/flutter_assets/fonts/MaterialIcons-Regular.ttf and /dev/null differ diff --git a/ios/Flutter/flutter_assets/isolate_snapshot_data b/ios/Flutter/flutter_assets/isolate_snapshot_data deleted file mode 100644 index efe04a0f..00000000 Binary files a/ios/Flutter/flutter_assets/isolate_snapshot_data and /dev/null differ diff --git a/ios/Flutter/flutter_assets/kernel_blob.bin b/ios/Flutter/flutter_assets/kernel_blob.bin deleted file mode 100644 index a5ae73b4..00000000 Binary files a/ios/Flutter/flutter_assets/kernel_blob.bin and /dev/null differ diff --git a/ios/Flutter/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf b/ios/Flutter/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf deleted file mode 100644 index bef51e15..00000000 Binary files a/ios/Flutter/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf and /dev/null differ diff --git a/ios/Flutter/flutter_assets/vm_snapshot_data b/ios/Flutter/flutter_assets/vm_snapshot_data deleted file mode 100644 index 55e780f2..00000000 Binary files a/ios/Flutter/flutter_assets/vm_snapshot_data and /dev/null differ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 428ddfca..52bc612e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -9,13 +9,7 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 7F26B12423884DB100F8823A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7F26B12323884DB100F8823A /* GoogleService-Info.plist */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -28,8 +22,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -40,14 +32,11 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7F26B12323884DB100F8823A /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -60,8 +49,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -71,9 +58,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -101,12 +86,10 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 7F26B12323884DB100F8823A /* GoogleService-Info.plist */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -115,13 +98,6 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -151,19 +127,18 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0910; - ORGANIZATIONNAME = "The Chromium Authors"; + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = PX6CMUSE2V; - LastSwiftMigration = 0910; + LastSwiftMigration = 1100; }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -186,10 +161,8 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - 7F26B12423884DB100F8823A /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -208,7 +181,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -260,7 +233,6 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -272,12 +244,14 @@ 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; @@ -298,9 +272,10 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -311,8 +286,8 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = PX6CMUSE2V; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -324,16 +299,16 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.coolappz.vocadb; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vocadbApp; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -345,12 +320,14 @@ 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; @@ -377,7 +354,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -387,7 +364,6 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -399,12 +375,14 @@ 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; @@ -425,9 +403,10 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -441,7 +420,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = PX6CMUSE2V; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -453,12 +431,11 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.coolappz.vocadb; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vocadbApp; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -470,7 +447,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = PX6CMUSE2V; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -482,11 +458,10 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.coolappz.vocadb; + PRODUCT_BUNDLE_IDENTIFIER = com.example.vocadbApp; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 786d6aad..a28140cf 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ @@ -46,7 +45,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings index 949b6789..f9b0d7c5 100644 --- a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -2,7 +2,7 @@ - BuildSystemType - Original + PreviewsEnabled + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 71cc41e3..70693e4a 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -5,7 +5,7 @@ import Flutter @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png deleted file mode 100755 index 8eb96888..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png deleted file mode 100755 index 1588357b..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png deleted file mode 100755 index 1aea16ad..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png deleted file mode 100755 index 31317e45..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png deleted file mode 100755 index d2e16bd3..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100755 index f5dcde60..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png deleted file mode 100755 index 0053aa65..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100755 index 51bf982c..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png deleted file mode 100755 index 59675d0b..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png deleted file mode 100755 index e544097c..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png deleted file mode 100755 index 170e83d5..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png deleted file mode 100755 index 40698eb2..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png deleted file mode 100755 index 97ced9cc..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png deleted file mode 100755 index 6bc7c496..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100755 index de2299c6..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png deleted file mode 100755 index 4dfc83ed..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png deleted file mode 100755 index 01187c57..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png deleted file mode 100755 index 401bd542..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100755 index 7103ce83..00000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json old mode 100755 new mode 100644 index 65b74d7e..d36b1fab --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1 +1,122 @@ -{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} \ No newline at end of file +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..dc9ada47 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..28c6bf03 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..f091b6b0 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..4cde1211 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..d0ef06e7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..dcdc2306 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..c8f9ed8f Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..75b2d164 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..c4df70d3 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..6a84f41e Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..d0e1f585 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/Contents.json b/ios/Runner/Assets.xcassets/Contents.json deleted file mode 100644 index da4a164c..00000000 --- a/ios/Runner/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 63% rename from ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/Contents.json rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json index 8a4c3999..0bedcf2f 100644 --- a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/Contents.json +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -2,17 +2,17 @@ "images" : [ { "idiom" : "universal", - "filename" : "ic_shortcut_song_search-1.png", + "filename" : "LaunchImage.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "ic_shortcut_song_search.png", + "filename" : "LaunchImage@2x.png", "scale" : "2x" }, { "idiom" : "universal", - "filename" : "ic_shortcut_song_search-2.png", + "filename" : "LaunchImage@3x.png", "scale" : "3x" } ], @@ -20,4 +20,4 @@ "version" : 1, "author" : "xcode" } -} \ No newline at end of file +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/Contents.json b/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/Contents.json deleted file mode 100644 index bb787a76..00000000 --- a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ic_shortcut_album_search-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_album_search.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_album_search-2.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-1.png b/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-1.png deleted file mode 100644 index ac855e32..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-2.png b/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-2.png deleted file mode 100644 index 99a4e746..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search-2.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search.png b/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search.png deleted file mode 100644 index ec16f9a5..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_album_search.imageset/ic_shortcut_album_search.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/Contents.json b/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/Contents.json deleted file mode 100644 index 9dbb91e5..00000000 --- a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ic_shortcut_artist_search-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_artist_search.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_artist_search-2.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-1.png b/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-1.png deleted file mode 100644 index 75dbad3e..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-2.png b/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-2.png deleted file mode 100644 index ae9540e0..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search-2.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search.png b/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search.png deleted file mode 100644 index 59afd0e7..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_artist_search.imageset/ic_shortcut_artist_search.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/Contents.json b/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/Contents.json deleted file mode 100644 index a467bcf2..00000000 --- a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "ic_shortcut_quick_search-1.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_quick_search.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "ic_shortcut_quick_search-2.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-1.png b/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-1.png deleted file mode 100644 index ace5eac6..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-2.png b/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-2.png deleted file mode 100644 index 7fec57e1..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search-2.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search.png b/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search.png deleted file mode 100644 index c778cc10..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_quick_search.imageset/ic_shortcut_quick_search.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-1.png b/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-1.png deleted file mode 100644 index c6a20522..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-1.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-2.png b/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-2.png deleted file mode 100644 index 8e80adfe..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search-2.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search.png b/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search.png deleted file mode 100644 index 7ee40ee9..00000000 Binary files a/ios/Runner/Assets.xcassets/ic_shortcut_song_search.imageset/ic_shortcut_song_search.png and /dev/null differ diff --git a/ios/Runner/GeneratedPluginRegistrant.h b/ios/Runner/GeneratedPluginRegistrant.h deleted file mode 100644 index 3b700eb4..00000000 --- a/ios/Runner/GeneratedPluginRegistrant.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// Generated file. Do not edit. -// - -#ifndef GeneratedPluginRegistrant_h -#define GeneratedPluginRegistrant_h - -#import - -@interface GeneratedPluginRegistrant : NSObject -+ (void)registerWithRegistry:(NSObject*)registry; -@end - -#endif /* GeneratedPluginRegistrant_h */ diff --git a/ios/Runner/GeneratedPluginRegistrant.m b/ios/Runner/GeneratedPluginRegistrant.m deleted file mode 100644 index 60dfa42b..00000000 --- a/ios/Runner/GeneratedPluginRegistrant.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// Generated file. Do not edit. -// - -#import "GeneratedPluginRegistrant.h" - -@implementation GeneratedPluginRegistrant - -+ (void)registerWithRegistry:(NSObject*)registry { -} - -@end diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 3fb80fd7..ca051546 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -3,9 +3,7 @@ CFBundleDevelopmentRegion - en - CFBundleDisplayName - VocaDB + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,26 +11,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - vocadb + vocadb_app CFBundlePackageType APPL CFBundleShortVersionString - 3.0.0 + $(FLUTTER_BUILD_NAME) CFBundleSignature ???? CFBundleVersion - 31 + $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS - NSAppleMusicUsageDescription - Used for file picker plugin - NSPhotoLibraryUsageDescription - Used for file picker plugin - UIBackgroundModes - - fetch - remote-notification - UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -52,7 +41,5 @@ UIViewControllerBasedStatusBarAppearance - io.flutter.embedded_views_preview - YES diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h index 7335fdf9..308a2a56 100644 --- a/ios/Runner/Runner-Bridging-Header.h +++ b/ios/Runner/Runner-Bridging-Header.h @@ -1 +1 @@ -#import "GeneratedPluginRegistrant.h" \ No newline at end of file +#import "GeneratedPluginRegistrant.h" diff --git a/ios/ServiceDefinitions.json b/ios/ServiceDefinitions.json deleted file mode 100644 index 3c470ca0..00000000 --- a/ios/ServiceDefinitions.json +++ /dev/null @@ -1 +0,0 @@ -{"services":[]} \ No newline at end of file diff --git a/ios/fastlane/Appfile b/ios/fastlane/Appfile deleted file mode 100644 index 12b9c250..00000000 --- a/ios/fastlane/Appfile +++ /dev/null @@ -1,9 +0,0 @@ -# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app -# apple_id("[[APPLE_ID]]") # Your Apple email address -app_identifier("com.up2up.vocadb") -apple_id("apple_id") -team_name("team_name") -team_id("team_id") - -# For more information about the Appfile, see: -# https://docs.fastlane.tools/advanced/#appfile diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile deleted file mode 100644 index 40ae321e..00000000 --- a/ios/fastlane/Fastfile +++ /dev/null @@ -1,25 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# -# For a list of all available plugins, check out -# -# https://docs.fastlane.tools/plugins/available-plugins -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -default_platform(:ios) - -platform :ios do - desc "Build and submit app to testflight" - lane :beta do - build_ios_app(export_method: "app-store") - upload_to_testflight - # add actions here: https://docs.fastlane.tools/actions - end -end diff --git a/ios/fastlane/README.md b/ios/fastlane/README.md deleted file mode 100644 index 9ffa1905..00000000 --- a/ios/fastlane/README.md +++ /dev/null @@ -1,29 +0,0 @@ -fastlane documentation -================ -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -``` -xcode-select --install -``` - -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew cask install fastlane` - -# Available Actions -## iOS -### ios beta -``` -fastlane ios beta -``` -Build and submit app to testflight - ----- - -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/lib/app_theme.dart b/lib/app_theme.dart deleted file mode 100644 index 27348883..00000000 --- a/lib/app_theme.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -enum ThemeEnum { Dark, Light } - -class AppTheme { - static final darkTheme = ThemeData( - brightness: Brightness.dark, - ); - - static final lightTheme = ThemeData( - brightness: Brightness.light, - ); - - static ThemeEnum toEnum(String name) { - if (name == ThemeEnum.Light.toString()) return ThemeEnum.Light; - - return ThemeEnum.Dark; - } -} diff --git a/lib/arguments.dart b/lib/arguments.dart new file mode 100644 index 00000000..37afe852 --- /dev/null +++ b/lib/arguments.dart @@ -0,0 +1,11 @@ +library arguments; + +export 'src/arguments/album_detail_args.dart'; +export 'src/arguments/artist_detail_args.dart'; +export 'src/arguments/artist_search_args.dart'; +export 'src/arguments/pv_playlist_args.dart'; +export 'src/arguments/release_event_detail_args.dart'; +export 'src/arguments/release_event_series_detail_args.dart'; +export 'src/arguments/song_detail_args.dart'; +export 'src/arguments/tag_detail_args.dart'; +export 'src/arguments/tag_search_args.dart'; diff --git a/lib/bindings.dart b/lib/bindings.dart new file mode 100644 index 00000000..5b8bdee6 --- /dev/null +++ b/lib/bindings.dart @@ -0,0 +1,12 @@ +library bindings; + +export 'src/bindings/album_search_binding.dart'; +export 'src/bindings/artist_search_binding.dart'; +export 'src/bindings/entry_search_binding.dart'; +export 'src/bindings/favorite_album_binding.dart'; +export 'src/bindings/favorite_artist_binding.dart'; +export 'src/bindings/favorite_song_binding.dart'; +export 'src/bindings/main_page_binding.dart'; +export 'src/bindings/release_event_search_binding.dart'; +export 'src/bindings/song_search_binding.dart'; +export 'src/bindings/tag_search_binding.dart'; diff --git a/lib/blocs/album_bloc.dart b/lib/blocs/album_bloc.dart deleted file mode 100644 index 2a782bd7..00000000 --- a/lib/blocs/album_bloc.dart +++ /dev/null @@ -1,99 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_album_filter_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; - -class AlbumBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _searching = BehaviorSubject.seeded(false); - final _noMoreResult = BehaviorSubject.seeded(false); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get searching$ => _searching.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - AlbumRestService albumService = AlbumRestService(); - - ConfigBloc configBloc; - - SearchAlbumFilterBloc albumFilterBloc; - - AlbumBloc({this.configBloc, this.albumFilterBloc}) { - albumFilterBloc ??= SearchAlbumFilterBloc(); - - Observable.merge([ - query$, - albumFilterBloc.params$, - ]).debounceTime(Duration(milliseconds: 500)).listen(fetch); - } - - void openSearch() { - _searching.add(true); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch(dynamic event) { - _noMoreResult.add(false); - lastIndex = 0; - albumService.list(params: getCurrentParams()).then(updateResults); - } - - Map getCurrentParams() { - Map params = albumFilterBloc.params(); - - params['fields'] = 'MainPicture'; - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - params['lang'] = configBloc.contentLang; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - albumService.list(params: params).then(appendResults); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - _searching?.close(); - _noMoreResult?.close(); - } -} diff --git a/lib/blocs/album_detail_bloc.dart b/lib/blocs/album_detail_bloc.dart deleted file mode 100644 index 3bcb954f..00000000 --- a/lib/blocs/album_detail_bloc.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; - -class AlbumDetailBloc { - final _album = BehaviorSubject(); - - final int id; - - Observable get album$ => _album.stream; - - AlbumRestService albumService; - - ConfigBloc configBloc; - - AlbumDetailBloc(this.id, - {AlbumRestService albumService, this.configBloc}) { - this.albumService ??= albumService ?? AlbumRestService(); - - fetch(); - } - - Future fetch() async { - return albumService - .byId(this.id, lang: configBloc.contentLang) - .then(_album.add); - } - - void dispose() { - _album?.close(); - } -} diff --git a/lib/blocs/artist_bloc.dart b/lib/blocs/artist_bloc.dart deleted file mode 100644 index 586ca928..00000000 --- a/lib/blocs/artist_bloc.dart +++ /dev/null @@ -1,99 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_artist_filter_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; - -class ArtistBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _searching = BehaviorSubject.seeded(false); - final _noMoreResult = BehaviorSubject.seeded(false); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get searching$ => _searching.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - ArtistRestService artistService = ArtistRestService(); - - ConfigBloc configBloc; - - SearchArtistFilterBloc artistFilterBloc; - - ArtistBloc({this.configBloc, this.artistFilterBloc}) { - artistFilterBloc ??= SearchArtistFilterBloc(); - - Observable.merge([ - query$, - artistFilterBloc.params$, - ]).debounceTime(Duration(milliseconds: 500)).listen(fetch); - } - - void openSearch() { - _searching.add(true); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch(dynamic event) { - _noMoreResult.add(false); - lastIndex = 0; - artistService.list(params: getCurrentParams()).then(updateResults); - } - - Map getCurrentParams() { - Map params = artistFilterBloc.params(); - - params['fields'] = 'MainPicture'; - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - params['lang'] = configBloc.contentLang; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - artistService.list(params: params).then(appendResults); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - _searching?.close(); - _noMoreResult?.close(); - } -} diff --git a/lib/blocs/artist_detail_bloc.dart b/lib/blocs/artist_detail_bloc.dart deleted file mode 100644 index f863ec1d..00000000 --- a/lib/blocs/artist_detail_bloc.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; - -class ArtistDetailBloc { - final _artist = BehaviorSubject(); - - final int id; - - Observable get artist$ => _artist.stream; - - ArtistRestService artistService; - - ConfigBloc configBloc; - - ArtistDetailBloc(this.id, - {ArtistRestService artistService, this.configBloc}) { - this.artistService ??= artistService ?? ArtistRestService(); - - fetch(); - } - - Future fetch() async { - return artistService - .byId(this.id, lang: configBloc.contentLang) - .then(_artist.add); - } - - void dispose() { - _artist?.close(); - } -} diff --git a/lib/blocs/config_bloc.dart b/lib/blocs/config_bloc.dart deleted file mode 100644 index d02df6a0..00000000 --- a/lib/blocs/config_bloc.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:rxdart/rxdart.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:vocadb/app_theme.dart'; - -class ConfigBloc { - BehaviorSubject _themeData = - new BehaviorSubject.seeded(ThemeEnum.Dark); - BehaviorSubject _contentLang = new BehaviorSubject.seeded('Default'); - BehaviorSubject _rankingFilterBy = new BehaviorSubject(); - BehaviorSubject _rankingVocalist = new BehaviorSubject(); - BehaviorSubject _uiLang = new BehaviorSubject.seeded('en'); - - Observable get themeDataStream => _themeData.stream; - Observable get contentLangStream => _contentLang.stream; - Observable get rankingFilterBy$ => _rankingFilterBy.stream; - Observable get rankingVocalist$ => _rankingVocalist.stream; - Observable get uiLang$ => _uiLang.stream; - - ThemeEnum get theme => _themeData.value; - String get contentLang => _contentLang.value; - String get rankingFilterBy => _rankingFilterBy.value; - String get rankingVocalist => _rankingVocalist.value; - String get uiLang => _uiLang.value; - - final SharedPreferences pref; - - Observable get uiConfigs$ => Observable.merge([uiLang$, themeDataStream]); - - ConfigBloc(this.pref) { - initTheme(); - initContentLanguage(); - initRankingFilterBy(); - initRankingVocalist(); - initUILanguage(); - } - - void dispose() { - _contentLang?.close(); - _themeData?.close(); - _rankingFilterBy?.close(); - _rankingVocalist?.close(); - _uiLang?.close(); - } - - void initTheme() async { - String t = pref.getString('theme'); - if (t == ThemeEnum.Light.toString()) { - updateTheme(ThemeEnum.Light); - } else { - updateTheme(ThemeEnum.Dark); - } - } - - void initContentLanguage() { - String value = pref.getString('content_language') ?? 'Default'; - updateContentLanguage(value); - } - - void initRankingFilterBy() { - String value = pref.getString('ranking_filter_by'); - - if (value != null) updateRankingFilterBy(value); - } - - void initUILanguage() { - String value = pref.getString('ui_language') ?? 'en'; - updateUILanguage(value); - } - - void initRankingVocalist() { - String value = pref.getString('ranking_vocalist'); - - if (value != null) updateRankingVocalist(value); - } - - void updateContentLanguage(String lang) { - pref.setString('content_language', lang); - _contentLang.add(lang); - } - - void updateTheme(ThemeEnum selectedTheme) async { - pref.setString('theme', selectedTheme.toString()); - _themeData.add(selectedTheme); - } - - void updateRankingFilterBy(String rankingFilterBy) async { - pref.setString('ranking_filter_by', rankingFilterBy); - _rankingFilterBy.add(rankingFilterBy); - } - - void updateRankingVocalist(String rankingVocalist) async { - pref.setString('ranking_vocalist', rankingVocalist); - _rankingVocalist.add(rankingVocalist); - } - - void updateUILanguage(String uiLanguage) async { - pref.setString('ui_language', uiLanguage); - _uiLang.add(uiLanguage); - } - - ThemeData getThemeData(ThemeEnum t) { - switch (t) { - case ThemeEnum.Dark: - return AppTheme.darkTheme; - case ThemeEnum.Light: - return AppTheme.lightTheme; - default: - return AppTheme.darkTheme; - } - } -} diff --git a/lib/blocs/event_series_bloc.dart b/lib/blocs/event_series_bloc.dart deleted file mode 100644 index 0621f917..00000000 --- a/lib/blocs/event_series_bloc.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/services/release_event_series_rest_service.dart'; - -class EventSeriesBloc { - final _eventSeriesDetail = BehaviorSubject(); - - Observable get eventSeriesDetail$ => _eventSeriesDetail.stream; - - final int id; - - ReleaseEventSeriesRestService releaseEventSeriesService; - - ConfigBloc configBloc; - - EventSeriesBloc(this.id, - {ReleaseEventSeriesRestService releaseEventSeriesService, this.configBloc}) { - this.releaseEventSeriesService ??= - releaseEventSeriesService ?? ReleaseEventSeriesRestService(); - - fetchEventSeriesDetail(); - } - - Future fetchEventSeriesDetail() async { - return releaseEventSeriesService - .byId(this.id, lang: configBloc.contentLang) - .then(_eventSeriesDetail.add); - } - - void dispose() { - _eventSeriesDetail?.close(); - } -} diff --git a/lib/blocs/favorite_album_bloc.dart b/lib/blocs/favorite_album_bloc.dart deleted file mode 100644 index e7cc7783..00000000 --- a/lib/blocs/favorite_album_bloc.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'dart:convert'; - -import 'package:hive/hive.dart'; -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/album_model.dart'; - -class FavoriteAlbumBloc { - final _albums = BehaviorSubject>(); - - Observable get albums$ => _albums.stream; - - Map get albums => _albums.value ?? {}; - - List get albumList => - (albums == null) ? [] : albums.values.toList(); - - Box _personalBox; - - FavoriteAlbumBloc() { - _personalBox = Hive.box('personal'); - - initialLoad(); - } - - void initialLoad() { - dynamic rawData = _personalBox.get('favorite_albums'); - - if (rawData == null) { - return; - } - - Map jsonMap = json.decode(rawData); - - Map mapAlbums = jsonMap.map( - (key, value) => MapEntry(int.parse(key), AlbumModel.fromJson(value))); - - _albums.add(mapAlbums); - } - - void update(List albums) { - Map mapAlbums = this.albums; - albums - .where((v) => v != null) - .forEach((v) => mapAlbums.putIfAbsent(v.id, () => v)); - _albums.add(mapAlbums); - - save(mapAlbums); - } - - void save(Map albums) { - Map> jsonMap = - albums.map((key, value) => MapEntry(key.toString(), value.toJson())); - - _personalBox.put('favorite_albums', json.encode(jsonMap)); - } - - void add(AlbumModel album) { - Map map = _albums.value ?? {}; - map.putIfAbsent(album.id, () => album); - _albums.add(map); - - save(map); - } - - void remove(int id) { - if (_albums.value == null || _albums.value.isEmpty) return; - - Map map = _albums.value; - map.remove(id); - - _albums.add(map); - - save(map); - } - - void dispose() { - _albums?.close(); - } -} diff --git a/lib/blocs/favorite_artist_bloc.dart b/lib/blocs/favorite_artist_bloc.dart deleted file mode 100644 index 1ae46187..00000000 --- a/lib/blocs/favorite_artist_bloc.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'dart:convert'; - -import 'package:hive/hive.dart'; -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/artist_model.dart'; - -class FavoriteArtistBloc { - final _artists = BehaviorSubject>(); - - Observable get artists$ => _artists.stream; - - Map get artists => _artists.value ?? {}; - - List get artistList => - (artists == null) ? [] : artists.values.toList(); - - Box _personalBox; - - FavoriteArtistBloc() { - _personalBox = Hive.box('personal'); - - initialLoad(); - } - - void initialLoad() { - dynamic rawData = _personalBox.get('favorite_artists'); - - if (rawData == null) { - return; - } - - Map jsonMap = json.decode(rawData); - - Map mapArtists = jsonMap.map( - (key, value) => MapEntry(int.parse(key), ArtistModel.fromJson(value))); - - _artists.add(mapArtists); - } - - void update(List artists) { - Map mapArtists = this.artists; - artists - .where((v) => v != null) - .forEach((v) => mapArtists.putIfAbsent(v.id, () => v)); - _artists.add(mapArtists); - save(mapArtists); - } - - void save(Map artists) { - Map> jsonMap = - artists.map((key, value) => MapEntry(key.toString(), value.toJson())); - - _personalBox.put('favorite_artists', json.encode(jsonMap)); - } - - void add(ArtistModel artist) { - Map map = _artists.value ?? {}; - map.putIfAbsent(artist.id, () => artist); - _artists.add(map); - - save(map); - } - - void remove(int id) { - if (_artists.value == null || _artists.value.isEmpty) return; - - Map map = _artists.value; - map.remove(id); - - _artists.add(map); - - save(map); - } - - void dispose() { - _artists?.close(); - } -} diff --git a/lib/blocs/favorite_song_bloc.dart b/lib/blocs/favorite_song_bloc.dart deleted file mode 100644 index 21c9c3cc..00000000 --- a/lib/blocs/favorite_song_bloc.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'dart:convert'; - -import 'package:hive/hive.dart'; -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/song_model.dart'; - -class FavoriteSongBloc { - final _songs = BehaviorSubject>(); - - Observable get songs$ => _songs.stream; - - Map get songs => _songs.value ?? {}; - - List get songList => (songs == null) ? [] : songs.values.toList(); - - Box _personalBox; - - FavoriteSongBloc({Box personalBox}) { - _personalBox = personalBox ?? Hive.box('personal'); - - initialLoad(); - } - - void initialLoad() { - dynamic rawData = _personalBox.get('favorite_songs'); - - if (rawData == null) { - return; - } - - Map jsonMap = json.decode(rawData); - - Map mapSongs = jsonMap.map( - (key, value) => MapEntry(int.parse(key), SongModel.fromJson(value))); - - _songs.add(mapSongs); - } - - void update(List songs) { - Map mapSongs = this.songs; - songs - .where((v) => v != null) - .forEach((v) => mapSongs.putIfAbsent(v.id, () => v)); - _songs.add(mapSongs); - save(mapSongs); - } - - void save(Map songs) { - Map> jsonMap = - songs.map((key, value) => MapEntry(key.toString(), value.toJson())); - - _personalBox.put('favorite_songs', json.encode(jsonMap)); - } - - void add(SongModel song) { - Map map = _songs.value ?? {}; - map.putIfAbsent(song.id, () => song); - _songs.add(map); - - save(map); - } - - void remove(int id) { - if (_songs.value == null || _songs.value.isEmpty) return; - - Map map = _songs.value; - map.remove(id); - - _songs.add(map); - - save(map); - } - - void dispose() { - _songs?.close(); - } -} diff --git a/lib/blocs/home_bloc.dart b/lib/blocs/home_bloc.dart deleted file mode 100644 index d9f81313..00000000 --- a/lib/blocs/home_bloc.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class HomeBloc { - final _highlighted = BehaviorSubject>.seeded(null); - final _latestAlbums = BehaviorSubject>.seeded(null); - final _topAlbums = BehaviorSubject>.seeded(null); - final _recentEvents = BehaviorSubject>.seeded(null); - - Observable get highlighted$ => _highlighted.stream; - Observable get latestAlbums$ => _latestAlbums.stream; - Observable get topAlbums$ => _topAlbums.stream; - Observable get recentEvents$ => _recentEvents.stream; - - final ConfigBloc configBloc; - final _songService = SongRestService(); - final _albumService = AlbumRestService(); - final _releaseEventService = ReleaseEventRestService(); - - HomeBloc(this.configBloc) { - fetch(); - } - - void fetch() { - updateHighlighted(); - updateLatestAlbums(); - updateTopAlbums(); - updateRecentEvents(); - } - - Future updateHighlighted() async { - _songService - .highlighted(lang: configBloc.contentLang) - .then(_highlighted.add); - } - - Future updateLatestAlbums() async { - _albumService.latest(lang: configBloc.contentLang).then(_latestAlbums.add); - } - - Future updateTopAlbums() async { - _albumService.top(lang: configBloc.contentLang).then(_topAlbums.add); - } - - - - Future updateRecentEvents() async { - _releaseEventService.recently(lang: configBloc.contentLang) - .then((result) => result.reversed.toList()) - .then(_recentEvents.add); - } - - void dispose() { - _highlighted.close(); - _latestAlbums.close(); - _topAlbums.close(); - _recentEvents.close(); - } -} diff --git a/lib/blocs/lyric_content_bloc.dart b/lib/blocs/lyric_content_bloc.dart deleted file mode 100644 index f35a0395..00000000 --- a/lib/blocs/lyric_content_bloc.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/lyric_model.dart'; - -class LyricContentBloc { - // - final List lyrics; - - Map mapLyrics = {}; - - final _selectedLyric = BehaviorSubject(); - - Observable get selectedLyric$ => _selectedLyric.stream; - - LyricContentBloc(this.lyrics) { - print('show lyrics'); - print(this.lyrics); - initMapTranslationLyric(); - } - - void initMapTranslationLyric() { - if (mapLyrics.isNotEmpty) { - return; - } - - mapLyrics.clear(); - - lyrics.forEach((LyricModel l) { - mapLyrics.putIfAbsent(l.translationType, () => l); - }); - - _selectedLyric.add(lyrics[0]); - } - - void changeTranslation(String translationType) { - _selectedLyric.add(mapLyrics[translationType]); - } - - void dispose() { - _selectedLyric?.close(); - } -} diff --git a/lib/blocs/profile_bloc.dart b/lib/blocs/profile_bloc.dart deleted file mode 100644 index 8feb286f..00000000 --- a/lib/blocs/profile_bloc.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; -import 'dart:typed_data'; - -import 'package:esys_flutter_share/esys_flutter_share.dart'; -import 'package:file_picker/file_picker.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:vocadb/blocs/favorite_album_bloc.dart'; -import 'package:vocadb/blocs/favorite_artist_bloc.dart'; -import 'package:vocadb/blocs/favorite_song_bloc.dart'; -import 'package:vocadb/models/profile_model.dart'; - -class ProfileBloc { - final FavoriteSongBloc favoriteSongBloc; - final FavoriteAlbumBloc favoriteAlbumBloc; - final FavoriteArtistBloc favoriteArtistBloc; - - ProfileBloc( - {this.favoriteSongBloc, this.favoriteAlbumBloc, this.favoriteArtistBloc}); - - Future get _localFile async { - final path = await _localPath; - return File('$path/vocadb_my_profile.json'); - } - - Future get _localPath async { - final directory = await getApplicationDocumentsDirectory(); - - return directory.path; - } - - Future exportProfile() async { - final file = await _localFile; - - ProfileModel profileModel = ProfileModel(); - profileModel.favoriteSongs = favoriteSongBloc.songList; - profileModel.followedArtists = favoriteArtistBloc.artistList; - profileModel.favoriteAlbums = favoriteAlbumBloc.albumList; - - String jsonEncoded = json.encode(profileModel.toJson()); - - await file.writeAsString(jsonEncoded); - - Uint8List bytes = await file.readAsBytes(); - - String title = 'my_vocadb_profile'; - - return Share.file(title, '$title.json', bytes, 'application/json'); - } - - Future importProfile() async { - File file = await FilePicker.getFile(type: FileType.ANY); - - if (file == null) { - throw ("No file selected"); - } - - String content = await file.readAsString(); - - if (content == null || content.isEmpty) { - throw ("Invalid file content."); - } - - Map jsonDecoded = json.decode(content); - - if (jsonDecoded.containsKey('favoriteSongs') && - jsonDecoded.containsKey('followedArtists') && - jsonDecoded.containsKey('favoriteAlbums')) { - final profileModel = ProfileModel.fromJson(jsonDecoded); - favoriteSongBloc.update(profileModel.favoriteSongs); - favoriteArtistBloc.update(profileModel.followedArtists); - favoriteAlbumBloc.update(profileModel.favoriteAlbums); - } else { - throw ("Invalid file content."); - } - } -} diff --git a/lib/blocs/ranking_bloc.dart b/lib/blocs/ranking_bloc.dart deleted file mode 100644 index c561bbfe..00000000 --- a/lib/blocs/ranking_bloc.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class RankingBloc { - final _daily = BehaviorSubject>(); - final _weekly = BehaviorSubject>(); - final _monthly = BehaviorSubject>(); - final _overall = BehaviorSubject>(); - final _currentIndex = BehaviorSubject.seeded(1); - - Observable get daily$ => _daily.stream; - Observable get weekly$ => _weekly.stream; - Observable get monthly$ => _monthly.stream; - Observable get overall$ => _overall.stream; - - Observable get currentIndex => _currentIndex.stream; - - List get currentSongs { - String rank = constRankings[_currentIndex.value]; - switch (rank) { - case 'daily': - return _daily.value; - case 'weekly': - return _weekly.value; - case 'monthly': - return _monthly.value; - case 'overall': - return _overall.value; - default: - return []; - } - } - - final ConfigBloc configBloc; - final _songService = SongRestService(); - - RankingBloc(this.configBloc) { - fetch(); - - Observable.merge([ - configBloc.rankingVocalist$, - configBloc.rankingFilterBy$, - ]).distinct().listen((event) { - fetch(); - }); - } - - void fetch() { - if (constRankings.contains('daily')) { - updateByDuration(RankDuration.DAILY).then(_daily.add); - } - - if (constRankings.contains('weekly')) { - updateByDuration(RankDuration.WEEKLY).then(_weekly.add); - } - - if (constRankings.contains('monthly')) { - updateByDuration(RankDuration.MONTHLY).then(_monthly.add); - } - - if (constRankings.contains('overall')) { - updateByDuration(RankDuration.OVERALL).then(_overall.add); - } - } - - Future> updateByDuration(int durationHours) async { - return _songService.topRated( - durationHours: durationHours, - filterBy: configBloc.rankingFilterBy, - vocalist: configBloc.rankingVocalist, - lang: configBloc.contentLang); - } - - void updateIndex(int index) { - _currentIndex.add(index); - } - - void dispose() { - _daily?.close(); - _weekly?.close(); - _monthly?.close(); - _overall?.close(); - _currentIndex?.close(); - } -} diff --git a/lib/blocs/release_event_bloc.dart b/lib/blocs/release_event_bloc.dart deleted file mode 100644 index b951917e..00000000 --- a/lib/blocs/release_event_bloc.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/release_event_filter_bloc.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; - -class ReleaseEventBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _searching = BehaviorSubject.seeded(false); - final _noMoreResult = BehaviorSubject.seeded(false); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get searching$ => _searching.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - ReleaseEventRestService releaseEventService = ReleaseEventRestService(); - - ConfigBloc configBloc; - - ReleaseEventFilterBloc releaseEventFilterBloc; - - ReleaseEventBloc({this.configBloc, this.releaseEventFilterBloc}) { - releaseEventFilterBloc ??= ReleaseEventFilterBloc(); - - Observable.merge([ - query$, - releaseEventFilterBloc.params$, - ]).debounceTime(Duration(milliseconds: 500)).listen(fetch); - } - - void openSearch() { - _searching.add(true); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch(dynamic event) { - _noMoreResult.add(false); - lastIndex = 0; - releaseEventService.list(params: getCurrentParams()).then(updateResults); - } - - Map getCurrentParams() { - Map params = releaseEventFilterBloc.params(); - - params['fields'] = 'MainPicture,Series'; - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - params['lang'] = configBloc.contentLang; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - releaseEventService.list(params: params).then(appendResults); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - _searching?.close(); - } -} diff --git a/lib/blocs/release_event_detail_bloc.dart b/lib/blocs/release_event_detail_bloc.dart deleted file mode 100644 index 5d426d5f..00000000 --- a/lib/blocs/release_event_detail_bloc.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; - -class ReleaseEventDetailBloc { - final _releaseEvents = BehaviorSubject(); - final _songs = BehaviorSubject>(); - final _albums = BehaviorSubject>(); - - final int id; - - Observable get releaseEvent$ => _releaseEvents.stream; - Observable get songs$ => _songs.stream; - Observable get albums$ => _albums.stream; - - ReleaseEventRestService releaseEventService; - - ConfigBloc configBloc; - - ReleaseEventDetailBloc(this.id, - {ReleaseEventRestService releaseEventService, this.configBloc}) { - this.releaseEventService ??= - releaseEventService ?? ReleaseEventRestService(); - - fetch(); - fetchSongs(); - fetchAlbums(); - } - - Future fetch() async { - return releaseEventService - .byId(this.id, lang: configBloc.contentLang) - .then(_releaseEvents.add); - } - - Future fetchSongs() async { - return releaseEventService - .publishedSongs(this.id, lang: configBloc.contentLang) - .then(_songs.add); - } - - Future fetchAlbums() async { - return releaseEventService - .albums(this.id, lang: configBloc.contentLang) - .then(_albums.add); - } - - void dispose() { - _releaseEvents?.close(); - _songs?.close(); - _albums?.close(); - } -} diff --git a/lib/blocs/release_event_filter_bloc.dart b/lib/blocs/release_event_filter_bloc.dart deleted file mode 100644 index fad8846a..00000000 --- a/lib/blocs/release_event_filter_bloc.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/utils/date_utils.dart'; - -class ReleaseEventFilterBloc { - final _category = BehaviorSubject(); - final _sort = BehaviorSubject(); - final _artists = BehaviorSubject>(); - final _tags = BehaviorSubject>(); - final _fromDate = BehaviorSubject(); - final _toDate = BehaviorSubject(); - - Observable get category$ => _category.stream; - Observable get sort$ => _sort.stream; - Observable get artists$ => _artists.stream; - Observable get tags$ => _tags.stream; - Observable get fromDate$ => _fromDate.stream; - Observable get toDate$ => _toDate.stream; - - String get category => _category.value; - String get sort => _sort.value; - Map get artists => _artists.value; - Map get tags => _tags.value; - List get artistList => artists?.values?.toList(); - List get tagList => tags?.values?.toList(); - String get fromDate => _fromDate.value; - String get toDate => _toDate.value; - - Observable get params$ => - Observable.merge([category$, sort$, artists$, tags$, fromDate$, toDate$]); - - void updateCategory(String category) { - _category.add(category); - } - - void updateSort(String sort) { - _sort.add(sort); - } - - Future addArtist(ArtistModel artist) { - Map a = artists ?? {}; - a.putIfAbsent(artist.id, () => artist); - _artists.add(a); - - return Future.value(); - } - - void removeArtist(int id) { - Map a = artists; - a.remove(id); - _artists.add(a); - } - - Future addTag(TagModel tag) { - Map a = tags ?? {}; - a.putIfAbsent(tag.id, () => tag); - _tags.add(a); - - return Future.value(); - } - - void removeTag(int id) { - Map a = tags; - a.remove(id); - _tags.add(a); - } - - void setFromDateAsToday() { - updateFromDate(DateTime.now()); - } - - void updateFromDate(DateTime startDate) { - if (startDate == null) return; - _fromDate.add(DateUtils.toUtcDateString(startDate)); - } - - void updateToDate(DateTime toDate) { - if (toDate == null) return; - _toDate.add(DateUtils.toUtcDateString(toDate)); - } - - Map params() { - Map params = {'sort': sort ?? 'Name'}; - if (category != null) params['category'] = category; - if (tagList != null && tagList.length > 0) - params['tagId'] = tags.keys.join(','); - if (artistList != null && artistList.length > 0) - params['artistId'] = artists.keys.join(','); - if (_fromDate != null) params['afterDate'] = _fromDate.value; - if (_toDate != null) params['beforeDate'] = _toDate.value; - - return params; - } - - void dispose() { - _category.close(); - _sort.close(); - _artists.close(); - _tags.close(); - _fromDate.close(); - _toDate.close(); - } -} diff --git a/lib/blocs/search_album_bloc.dart b/lib/blocs/search_album_bloc.dart deleted file mode 100644 index ab4c6b96..00000000 --- a/lib/blocs/search_album_bloc.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; - -class SearchAlbumBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - - String get query => _query.value; - - AlbumRestService albumService = AlbumRestService(); - - Map params; - ConfigBloc configBloc; - - SearchAlbumBloc({this.params, this.configBloc}) { - - if(this.params == null) { - params = { - 'sort': 'Date', - 'fields': 'MainPicture', - }; - } - _query - .debounceTime(Duration(milliseconds: 500)) - .distinct() - .listen(onQueryChanged); - } - - void onQueryChanged(String query) { - fetch(); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch() { - params['query'] = query; - albumService.list(params: params).then(updateResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - } -} diff --git a/lib/blocs/search_album_filter_bloc.dart b/lib/blocs/search_album_filter_bloc.dart deleted file mode 100644 index dc564820..00000000 --- a/lib/blocs/search_album_filter_bloc.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; - -class SearchAlbumFilterBloc { - final _albumType = BehaviorSubject(); - final _sort = BehaviorSubject(); - final _artists = BehaviorSubject>(); - final _tags = BehaviorSubject>(); - - Observable get albumType$ => _albumType.stream; - Observable get sort$ => _sort.stream; - Observable get artists$ => _artists.stream; - Observable get tags$ => _tags.stream; - - String get albumType => _albumType.value; - String get sort => _sort.value; - Map get artists => _artists.value; - Map get tags => _tags.value; - List get artistList => artists?.values?.toList(); - List get tagList => tags?.values?.toList(); - - Observable get params$ => - Observable.merge([albumType$, sort$, artists$, tags$]); - - void updateAlbumType(String albumType) { - _albumType.add(albumType); - } - - void updateSort(String sort) { - _sort.add(sort); - } - - Future addArtist(ArtistModel artist) { - Map a = artists ?? {}; - a.putIfAbsent(artist.id, () => artist); - _artists.add(a); - - return Future.value(); - } - - void removeArtist(int id) { - Map a = artists; - a.remove(id); - _artists.add(a); - } - - Future addTag(TagModel tag) { - Map a = tags ?? {}; - a.putIfAbsent(tag.id, () => tag); - _tags.add(a); - - return Future.value(); - } - - void removeTag(int id) { - Map a = tags; - a.remove(id); - _tags.add(a); - } - - Map params() { - Map params = {'sort': sort ?? 'Name'}; - if (albumType != null) params['discTypes'] = albumType; - if (tagList != null && tagList.length > 0) - params['tagId'] = tags.keys.join(','); - if (artistList != null && artistList.length > 0) - params['artistId'] = artists.keys.join(','); - - return params; - } - - void dispose() { - _albumType.close(); - _sort.close(); - _artists.close(); - _tags.close(); - } -} diff --git a/lib/blocs/search_artist_bloc.dart b/lib/blocs/search_artist_bloc.dart deleted file mode 100644 index 372164de..00000000 --- a/lib/blocs/search_artist_bloc.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; - -class SearchArtistBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - - String get query => _query.value; - - ArtistRestService artistService = ArtistRestService(); - - ConfigBloc configBloc; - - SearchArtistBloc({this.configBloc}) { - _query - .debounceTime(Duration(milliseconds: 500)) - .distinct() - .listen(onQueryChanged); - } - - void onQueryChanged(String query) { - fetch(); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch() { - artistService.search(query).then(updateResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - } -} diff --git a/lib/blocs/search_artist_filter_bloc.dart b/lib/blocs/search_artist_filter_bloc.dart deleted file mode 100644 index 77c4d263..00000000 --- a/lib/blocs/search_artist_filter_bloc.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/tag_model.dart'; - -class SearchArtistFilterBloc { - final _artistType = BehaviorSubject(); - final _sort = BehaviorSubject(); - final _tags = BehaviorSubject>(); - - Observable get artistType$ => _artistType.stream; - Observable get sort$ => _sort.stream; - Observable get tags$ => _tags.stream; - - String get artistType => _artistType.value; - String get sort => _sort.value; - Map get tags => _tags.value; - List get tagList => tags?.values?.toList(); - - Observable get params$ => Observable.merge([artistType$, sort$, tags$]); - - void updateArtistType(String artistType) { - _artistType.add(artistType); - } - - void updateSort(String sort) { - _sort.add(sort); - } - - Future addTag(TagModel tag) { - Map a = tags ?? {}; - a.putIfAbsent(tag.id, () => tag); - _tags.add(a); - - return Future.value(); - } - - void removeTag(int id) { - Map a = tags; - a.remove(id); - _tags.add(a); - } - - Map params() { - Map params = {'sort': sort ?? 'Name'}; - if (artistType != null) params['artistTypes'] = artistType; - if (tagList != null && tagList.length > 0) - params['tagId'] = tags.keys.join(','); - - return params; - } - - void dispose() { - _artistType.close(); - _sort.close(); - _tags.close(); - } -} diff --git a/lib/blocs/search_bloc.dart b/lib/blocs/search_bloc.dart deleted file mode 100644 index cd438020..00000000 --- a/lib/blocs/search_bloc.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:rxdart/subjects.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_entry_filter_bloc.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/services/entry_service.dart'; - -class SearchBloc { - final _query = BehaviorSubject(); - final _entryType = BehaviorSubject(); - final _results = BehaviorSubject>(); - final _isSearching = BehaviorSubject.seeded(false); - - Observable get queryStream => _query.stream; - Observable get entryTypeStream => _entryType.stream; - Observable> get resultStream => _results.stream; - Observable get isSearching$ => _isSearching.stream; - Observable get filterParams$ => Observable.merge([ - queryStream, - entryTypeStream, - entryFilterBloc.params$, - ]); - - String get query => _query.value; - EntryType get entryType => _entryType.value ?? EntryType.Undefined; - bool get isSearching => _isSearching.value; - - EntryService entryService; - - SearchEntryFilterBloc entryFilterBloc; - ConfigBloc configBloc; - - SearchBloc({this.entryService, this.entryFilterBloc, this.configBloc}) { - this.entryService ??= EntryService(); - this.entryFilterBloc ??= SearchEntryFilterBloc(); - - filterParams$.debounceTime(Duration(milliseconds: 500)).listen(fetch); - } - - void updateResults(List entries) { - _results.add(entries); - } - - Future updateQuery(String str) { - if (str == null || str.isEmpty) { - toggleSearching(false); - updateResults(null); - } else { - toggleSearching(true); - _query.add(str); - } - - return Future.value(); - } - - void toggleSearching(bool searching) { - _isSearching.add(searching); - } - - void clearQuery() { - _query.add(''); - } - - void updateEntryType(EntryType entryType) { - _entryType.add(entryType); - } - - void fetch(event) { - - print('fetch $event'); - if (!isSearching) return; - - Map params = entryFilterBloc.params(); - - String entryTypeStr = EntryModel.entryTypeEnumToString(entryType); - - if (entryTypeStr != 'Undefined') { - params['entryType'] = entryTypeStr; - } - - if (configBloc != null && configBloc.contentLang != null) { - params['lang'] = configBloc.contentLang; - } - - entryService.search(query, entryType, params: params).then(updateResults); - } - - void dispose() { - _entryType?.close(); - _results?.close(); - _query?.close(); - _isSearching?.close(); - } -} diff --git a/lib/blocs/search_entry_filter_bloc.dart b/lib/blocs/search_entry_filter_bloc.dart deleted file mode 100644 index 833437e6..00000000 --- a/lib/blocs/search_entry_filter_bloc.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/tag_model.dart'; - -class SearchEntryFilterBloc { - final _sort = BehaviorSubject(); - final _tags = BehaviorSubject>(); - - Observable get sort$ => _sort.stream; - Observable get tags$ => _tags.stream; - - String get sort => _sort.value; - Map get tags => _tags.value; - List get tagList => tags?.values?.toList(); - - Observable get params$ => Observable.merge([sort$, tags$]); - - void updateSort(String sort) { - _sort.add(sort); - } - - Future addTag(TagModel tag) { - Map a = tags ?? {}; - a.putIfAbsent(tag.id, () => tag); - _tags.add(a); - - return Future.value(); - } - - void removeTag(int id) { - Map a = tags; - a.remove(id); - _tags.add(a); - } - - Map params() { - Map params = {'sort': sort ?? 'Name'}; - if (tagList != null && tagList.length > 0) - params['tagId'] = tags.keys.join(','); - - return params; - } - - void dispose() { - _sort.close(); - _tags.close(); - } -} diff --git a/lib/blocs/search_release_event_bloc.dart b/lib/blocs/search_release_event_bloc.dart deleted file mode 100644 index 7fadf160..00000000 --- a/lib/blocs/search_release_event_bloc.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; - -class SearchReleaseEventBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - - String get query => _query.value; - - ReleaseEventRestService releaseEventService = ReleaseEventRestService(); - - SearchReleaseEventBloc() { - _query - .debounceTime(Duration(milliseconds: 500)) - .distinct() - .listen(onQueryChanged); - } - - void onQueryChanged(String query) { - fetch(); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch() { - Map params = { - 'query': query, - 'fields': 'MainPicture', - 'sort': 'AdditionDate', - 'maxResults': '50', - }; - - releaseEventService.list(params: params).then(updateResults); - } - - void dispose() { - _query.close(); - _results?.close(); - } -} diff --git a/lib/blocs/search_song_bloc.dart b/lib/blocs/search_song_bloc.dart deleted file mode 100644 index dfa2c3b9..00000000 --- a/lib/blocs/search_song_bloc.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class SearchSongBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - - String get query => _query.value; - - SongRestService songService = SongRestService(); - - Map params; - ConfigBloc configBloc; - - SearchSongBloc({this.params, this.configBloc}) { - - if(params == null) { - params = { - 'sort': 'AdditionDate', - 'fields': 'PVs,MainPicture,ThumbUrl' - }; - } - - _query - .debounceTime(Duration(milliseconds: 500)) - .distinct() - .listen(onQueryChanged); - } - - void onQueryChanged(String query) { - fetch(); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch() { - params['query'] = query; - songService.list(params: params).then(updateResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - } -} diff --git a/lib/blocs/search_song_filter_bloc.dart b/lib/blocs/search_song_filter_bloc.dart deleted file mode 100644 index fb7687f6..00000000 --- a/lib/blocs/search_song_filter_bloc.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; - -class SearchSongFilterBloc { - final _songType = BehaviorSubject(); - final _sort = BehaviorSubject(); - final _artists = BehaviorSubject>(); - final _tags = BehaviorSubject>(); - - Observable get songType$ => _songType.stream; - Observable get sort$ => _sort.stream; - Observable get artists$ => _artists.stream; - Observable get tags$ => _tags.stream; - - String get songType => _songType.value; - String get sort => _sort.value; - Map get artists => _artists.value; - Map get tags => _tags.value; - List get artistList => artists?.values?.toList(); - List get tagList => tags?.values?.toList(); - - Observable get params$ => - Observable.merge([songType$, sort$, artists$, tags$]); - - void updateSongType(String songType) { - _songType.add(songType); - } - - void updateSort(String sort) { - _sort.add(sort); - } - - Future addArtist(ArtistModel artist) { - Map a = artists ?? {}; - a.putIfAbsent(artist.id, () => artist); - _artists.add(a); - - return Future.value(); - } - - Future removeArtist(int id) { - Map a = artists; - a.remove(id); - _artists.add(a); - - return Future.value(); - } - - Future addTag(TagModel tag) { - Map a = tags ?? {}; - a.putIfAbsent(tag.id, () => tag); - _tags.add(a); - - return Future.value(); - } - - Future removeTag(int id) { - Map a = tags; - a.remove(id); - _tags.add(a); - - return Future.value(); - } - - Map params() { - Map params = {'sort': sort ?? 'Name'}; - if (songType != null) params['songTypes'] = songType; - if (tagList != null && tagList.length > 0) - params['tagId'] = tags.keys.join(','); - if (artistList != null && artistList.length > 0) - params['artistId'] = artists.keys.join(','); - - return params; - } - - void dispose() { - _songType.close(); - _sort.close(); - _artists.close(); - _tags.close(); - } -} diff --git a/lib/blocs/search_tag_bloc.dart b/lib/blocs/search_tag_bloc.dart deleted file mode 100644 index c98f13d4..00000000 --- a/lib/blocs/search_tag_bloc.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/tag_rest_service.dart'; - -class SearchTagBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _noMoreResult = BehaviorSubject.seeded(false); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - TagRestService tagService = TagRestService(); - - SearchTagBloc() { - _query - .debounceTime(Duration(milliseconds: 500)) - .distinct() - .listen(onQueryChanged); - } - - void onQueryChanged(String query) { - fetch(); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch() { - tagService.list(params: getCurrentParams()).then(updateResults); - } - - Map getCurrentParams() { - Map params = {}; - - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - tagService.list(params: params).then((items) { - appendResults(items); - }); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void dispose() { - _query.close(); - _results?.close(); - } -} diff --git a/lib/blocs/song_bloc.dart b/lib/blocs/song_bloc.dart deleted file mode 100644 index 0c1d3e99..00000000 --- a/lib/blocs/song_bloc.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_song_filter_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class SongBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _searching = BehaviorSubject.seeded(false); - final _noMoreResult = BehaviorSubject.seeded(false); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get searching$ => _searching.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - SongRestService songService = SongRestService(); - - ConfigBloc configBloc; - - SearchSongFilterBloc songFilterBloc; - - SongBloc({this.configBloc, this.songFilterBloc}) { - songFilterBloc ??= SearchSongFilterBloc(); - - Observable.merge([ - query$, - songFilterBloc.params$, - ]).debounceTime(Duration(milliseconds: 500)).listen(fetch); - } - - void openSearch() { - _searching.add(true); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void fetch(dynamic event) { - _noMoreResult.add(false); - lastIndex = 0; - Map params = getCurrentParams(); - - songService.list(params: params).then(updateResults); - } - - Map getCurrentParams() { - Map params = songFilterBloc.params(); - - params['fields'] = 'PVs,MainPicture,ThumbUrl'; - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - params['lang'] = configBloc.contentLang; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - songService.list(params: params).then(appendResults); - } - - void dispose() { - _query?.close(); - _results?.close(); - _searching?.close(); - _noMoreResult?.close(); - } -} diff --git a/lib/blocs/song_detail_bloc.dart b/lib/blocs/song_detail_bloc.dart deleted file mode 100644 index 44461704..00000000 --- a/lib/blocs/song_detail_bloc.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/lyric_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class SongDetailBloc { - final _song = BehaviorSubject(); - final _originalVersion = BehaviorSubject(); - final _altVersions = BehaviorSubject>(); - final _relatedSongs = BehaviorSubject>(); - final _isLyricOpened = BehaviorSubject.seeded(false); - - final int id; - - Observable get song$ => _song.stream; - Observable get originalVersion$ => _originalVersion.stream; - Observable get altVersions$ => _altVersions.stream; - Observable get relatedSongs$ => _relatedSongs.stream; - Observable get showHideLyric$ => _isLyricOpened.stream; - - SongRestService songService; - - ConfigBloc configBloc; - - SongDetailBloc(this.id, {SongRestService songService, this.configBloc}) { - this.songService ??= songService ?? SongRestService(); - - _song.distinct().listen(onFetched); - fetch(); - } - - void onFetched(SongModel song) { - if (song == null) { - return; - } - - if (song.originalVersionId != null && - song.originalVersionId > 0 && - _originalVersion.value == null) { - fetchOriginalVersion(song.originalVersionId); - } - - fetchAlternateVersions(song.id); - fetchRelated(song.id); - } - - Future fetch() async { - return songService - .byId(this.id, lang: configBloc.contentLang) - .then(_song.add); - } - - Future fetchOriginalVersion(int id) async { - songService.byId(id, lang: configBloc.contentLang).then((original) { - _originalVersion.add(original); - - if (original.hasLyrics && !_song.value.hasLyrics) { - addOriginalLyrics(original.lyrics); - } - }); - } - - Future fetchAlternateVersions(int id) async { - songService - .derived(id, lang: configBloc.contentLang) - .then((songs) => songs.take(20).toList()) - .then(_altVersions.add); - } - - Future fetchRelated(int id) async { - songService - .related(id, lang: configBloc.contentLang) - .then((songs) => songs.take(20).toList()) - .then(_relatedSongs.add); - } - - void addOriginalLyrics(List lyrics) { - SongModel currentSong = _song.value; - - currentSong.lyrics = lyrics; - - _song.add(currentSong); - } - - void showLyric() { - print('show lyric'); - _isLyricOpened.add(true); - } - - void hideLyric() { - print('hide lyric'); - _isLyricOpened.add(false); - } - - void dispose() { - _song?.close(); - _originalVersion?.close(); - _altVersions?.close(); - _relatedSongs?.close(); - _isLyricOpened?.close(); - } -} diff --git a/lib/blocs/tag_bloc.dart b/lib/blocs/tag_bloc.dart deleted file mode 100644 index a4cb87cf..00000000 --- a/lib/blocs/tag_bloc.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/tag_rest_service.dart'; - -class TagBloc { - final _query = BehaviorSubject.seeded(null); - final _results = BehaviorSubject>.seeded(null); - final _searching = BehaviorSubject.seeded(false); - final _noMoreResult = BehaviorSubject.seeded(false); - final _selectedCategory = BehaviorSubject(); - final _categoryNames = BehaviorSubject(); - int lastIndex = 0; - - Observable get result$ => _results.stream; - Observable get query$ => _query.stream; - Observable get searching$ => _searching.stream; - Observable get noMoreResult$ => _noMoreResult.stream; - Observable get selectedCategory$ => _selectedCategory.stream; - Observable get categoryNames$ => _categoryNames.stream; - - String get query => _query.value; - bool get noMoreResult => _noMoreResult.value; - - TagRestService tagService = TagRestService(); - - ConfigBloc configBloc; - - TagBloc({this.configBloc, String category}) { - if (category == null || category.isEmpty) { - fetchCategoryNames(); - } else { - _selectedCategory.add(category); - } - - Observable.merge([ - query$, - selectedCategory$, - ]).debounceTime(Duration(milliseconds: 500)).distinct().listen(fetch); - } - - void openSearch() { - _searching.add(true); - } - - void updateQuery(String query) { - _query.add(query); - } - - void updateResults(List results) { - _results.add(results); - } - - void fetch(dynamic event) { - _noMoreResult.add(false); - lastIndex = 0; - tagService.list(params: getCurrentParams()).then(updateResults); - } - - Map getCurrentParams() { - Map params = {}; - - params['nameMatchMode'] = 'Auto'; - params['maxResults'] = '50'; - params['lang'] = configBloc.contentLang; - - if (_selectedCategory.value != null) { - params['categoryName'] = _selectedCategory.value; - } - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return params; - } - - void fetchMore() { - if (lastIndex == _results.value.length) { - return; - } - - lastIndex = _results.value.length; - Map params = getCurrentParams(); - params['start'] = lastIndex.toString(); - - tagService.list(params: params).then(appendResults); - } - - void appendResults(List moreResults) { - if (moreResults.length == 0) { - _noMoreResult.add(true); - return; - } - - List currentResults = _results.value; - currentResults.addAll(moreResults); - _results.add(currentResults); - } - - void fetchCategoryNames() { - tagService.categoryNames().then(_categoryNames.add); - } - - void dispose() { - _query?.close(); - _results?.close(); - _searching?.close(); - _selectedCategory?.close(); - _categoryNames?.close(); - } -} diff --git a/lib/blocs/tag_detail_bloc.dart b/lib/blocs/tag_detail_bloc.dart deleted file mode 100644 index cb8f3499..00000000 --- a/lib/blocs/tag_detail_bloc.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'dart:async'; - -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; -import 'package:vocadb/services/song_rest_service.dart'; -import 'package:vocadb/services/tag_rest_service.dart'; - -class TagDetailBloc { - final _tag = BehaviorSubject(); - final _latestSongs = BehaviorSubject>(); - final _topSongs = BehaviorSubject>(); - final _topAlbums = BehaviorSubject>(); - final _topArtists = BehaviorSubject>(); - - final int id; - - Observable get tag$ => _tag.stream; - Observable get latestSongs$ => _latestSongs.stream; - Observable get topSongs$ => _topSongs.stream; - Observable get topAlbums$ => _topAlbums.stream; - Observable get topArtists$ => _topArtists.stream; - - TagRestService tagService; - SongRestService songService; - ArtistRestService artistService; - AlbumRestService albumService; - - ConfigBloc configBloc; - - TagDetailBloc(this.id, - {TagRestService tagService, - this.configBloc, - this.songService, - this.artistService, - this.albumService}) { - this.tagService ??= tagService ?? TagRestService(); - this.songService ??= SongRestService(); - this.artistService ??= ArtistRestService(); - this.albumService ??= AlbumRestService(); - - fetch(); - fetchLatestSongs(); - fetchTopSongs(); - fetchTopAlbums(); - fetchTopArtists(); - } - - Future fetch() async { - return tagService - .byId(this.id, lang: configBloc.contentLang) - .then(_tag.add); - } - - Future fetchLatestSongs() async { - return songService - .latestByTagId(this.id, lang: configBloc.contentLang) - .then(_latestSongs.add); - } - - Future fetchTopSongs() async { - return songService - .topByTagId(this.id, lang: configBloc.contentLang) - .then(_topSongs.add); - } - - Future fetchTopAlbums() async { - return albumService - .topByTagId(this.id, lang: configBloc.contentLang) - .then(_topAlbums.add); - } - - Future fetchTopArtists() async { - return artistService - .topByTagId(this.id, lang: configBloc.contentLang) - .then(_topArtists.add); - } - - void dispose() { - _tag?.close(); - _latestSongs?.close(); - _topSongs?.close(); - _topAlbums?.close(); - _topArtists?.close(); - } -} diff --git a/lib/blocs/youtube_playlist_bloc.dart b/lib/blocs/youtube_playlist_bloc.dart deleted file mode 100644 index ada8e795..00000000 --- a/lib/blocs/youtube_playlist_bloc.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'package:rxdart/rxdart.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:youtube_player_flutter/youtube_player_flutter.dart'; - -class YoutubePlaylistBloc { - BehaviorSubject> _playlist = new BehaviorSubject.seeded([]); - BehaviorSubject _currentIndex = new BehaviorSubject.seeded(0); - BehaviorSubject _currentPVDetail = new BehaviorSubject(); - BehaviorSubject _displayDetail = new BehaviorSubject.seeded(false); - BehaviorSubject _displayLyrics = new BehaviorSubject.seeded(false); - BehaviorSubject _playerState = new BehaviorSubject(); - - YoutubePlayerController youtubePlayerController; - - Observable get playlistStream => _playlist.stream; - Observable get currentIndexStream => _currentIndex.stream; - Observable get currentPVDetail$ => _currentPVDetail.stream; - Observable get displayDetail$ => _displayDetail.stream; - Observable get displayLyric$ => _displayLyrics.stream; - Observable get playerState$ => _playerState.stream; - - List get songs => _playlist.value; - - SongModel get currentPV => (_playlist.value.length == 0) - ? null - : _playlist.value[_currentIndex.value]; - int get currentIndex => _currentIndex.value; - - YoutubePlaylistBloc( - {List songs, - YoutubePlayerController youtubePlayerController}) { - if (songs != null && songs.isNotEmpty) { - initialPlaylist(songs, youtubePlayerController); - } - } - - void initialPlaylist( - List songs, YoutubePlayerController youtubePlayerController) { - _playlist.add(songs); - - int nextPlayableIndex = - SongList(_playlist.value).getFirstWithYoutubePVIndex(0); - - _currentIndex.add(nextPlayableIndex); - - this.youtubePlayerController = youtubePlayerController ?? - YoutubePlayerController( - initialVideoId: YoutubePlayer.convertUrlToId( - songs[nextPlayableIndex].youtubePV.url), - flags: YoutubePlayerFlags( - autoPlay: false, - ), - ); - } - - void updateState(PlayerState playerState) { - _playerState.add(playerState); - } - - void onEnded() { - this.next(); - this - .youtubePlayerController - .load(YoutubePlayer.convertUrlToId(currentPV.youtubePV.url)); - } - - void next() { - int newIndex = _currentIndex.value + 1; - - if (newIndex >= _playlist.value.length) { - newIndex = 0; - } - - int nextPlayableIndex = - SongList(_playlist.value).getFirstWithYoutubePVIndex(newIndex); - - if (nextPlayableIndex == -1) { - nextPlayableIndex = - SongList(_playlist.value).getFirstWithYoutubePVIndex(0); - } - - _currentIndex.add(nextPlayableIndex); - } - - void prev() { - int newIndex = _currentIndex.value - 1; - - if (newIndex < 0) { - newIndex = _playlist.value.length - 1; - } - - int lastPlayableIndex = - SongList(_playlist.value).getLastWithYoutubePVIndex(newIndex); - - if (lastPlayableIndex == -1) { - lastPlayableIndex = SongList(_playlist.value) - .getLastWithYoutubePVIndex(_playlist.value.length - 1); - } - - _currentIndex.add(lastPlayableIndex); - } - - void select(int index) { - _currentIndex.add(index); - youtubePlayerController - .load(YoutubePlayer.convertUrlToId(currentPV.youtubePV.url)); - } - - void showDetail() { - _displayDetail.add(true); - } - - void hideDetail() { - _displayDetail.add(false); - } - - void showLyric() { - _displayLyrics.add(true); - } - - void hideLyric() { - _displayLyrics.add(false); - } - - void dispose() { - _currentIndex.close(); - _playlist.close(); - _currentPVDetail.close(); - _displayDetail.close(); - _displayLyrics.close(); - youtubePlayerController?.dispose(); - } -} diff --git a/lib/config.dart b/lib/config.dart new file mode 100644 index 00000000..d048430f --- /dev/null +++ b/lib/config.dart @@ -0,0 +1,3 @@ +library config; + +export 'src/config/app_translations.dart'; diff --git a/lib/constants.dart b/lib/constants.dart index bc774846..03c30e8f 100644 --- a/lib/constants.dart +++ b/lib/constants.dart @@ -1,17 +1,21 @@ -const String APP_NAME = 'VocaDB'; -const String HOST = 'https://vocadb.net'; -const String AUTHORITY = 'vocadb.net'; +const String appName = 'VocaDB'; +const String baseUrl = 'https://vocadb.net'; +const String authority = 'vocadb.net'; +/// Display language same as VocaDB website enum ContentLanguage { Default, Japanese, Romaji, English } +/// Contact list of VocaDB const List> contactSites = [ {"title": "Website", "url": "https://vocadb.net"}, {"title": "Facebook", "url": "https://www.facebook.com/vocadb"}, {"title": "Twitter", "url": "https://twitter.com/VocaDB"}, {"title": "VK", "url": "https://vk.com/vocadb"}, + {"title": "Discord", "url": "https://discord.gg/3bwXQNXKCz"}, {"title": "IRC #vocadb", "url": "https://vocadb.net/Home/Chat"}, ]; +/// Contact list of mobile app developer const List> contactDeveloperSites = [ { "title": "Mail", @@ -23,8 +27,10 @@ const List> contactDeveloperSites = [ {"title": "Github", "url": "https://github.com/VocaDB/VocaDB-App"}, ]; +/// Set to false for hide filter menu on ranking page const bool constShowFilterRank = true; +/// Ranking category const List constRankings = [ 'daily', 'weekly', @@ -32,6 +38,7 @@ const List constRankings = [ 'overall', ]; +/// List of song types const List constSongTypes = [ 'Original', 'Remaster', @@ -44,6 +51,7 @@ const List constSongTypes = [ 'Other', ]; +/// List of album types const List constAlbumTypes = [ 'Album', 'Single', @@ -55,6 +63,7 @@ const List constAlbumTypes = [ 'Other', ]; +/// List of artist types const List constArtistTypes = [ 'Circle', 'Label', @@ -71,6 +80,7 @@ const List constArtistTypes = [ 'OtherIndividual', ]; +/// List of release event categories const List constEventCategories = [ 'AlbumRelease', 'Anniversary', @@ -80,6 +90,7 @@ const List constEventCategories = [ 'Other', ]; +/// List of tag categories const List constTagCategories = [ 'Animation', 'Copyrights', diff --git a/lib/controllers.dart b/lib/controllers.dart new file mode 100644 index 00000000..f330912a --- /dev/null +++ b/lib/controllers.dart @@ -0,0 +1,22 @@ +library controllers; + +export 'src/controllers/album_detail_controller.dart'; +export 'src/controllers/album_search_controller.dart'; +export 'src/controllers/app_page_controller.dart'; +export 'src/controllers/artist_detail_controller.dart'; +export 'src/controllers/artist_search_controller.dart'; +export 'src/controllers/entry_search_controller.dart'; +export 'src/controllers/favorite_album_controller.dart'; +export 'src/controllers/favorite_artist_controller.dart'; +export 'src/controllers/favorite_song_controller.dart'; +export 'src/controllers/main_page_controller.dart'; +export 'src/controllers/release_event_detail_controller.dart'; +export 'src/controllers/release_event_search_controller.dart'; +export 'src/controllers/release_event_series_detail_controller.dart'; +export 'src/controllers/search_page_controller.dart'; +export 'src/controllers/song_detail_controller.dart'; +export 'src/controllers/login_page_controller.dart'; +export 'src/controllers/home_page_controller.dart'; +export 'src/controllers/ranking_controller.dart'; +export 'src/controllers/song_search_controller.dart'; +export 'src/controllers/tag_search_controller.dart'; diff --git a/lib/exceptions.dart b/lib/exceptions.dart new file mode 100644 index 00000000..c7b87022 --- /dev/null +++ b/lib/exceptions.dart @@ -0,0 +1,4 @@ +library exceptions; + +export 'src/exceptions/http_request_error_exception.dart'; +export 'src/exceptions/login_failed_exception.dart'; diff --git a/lib/global_variables.dart b/lib/global_variables.dart deleted file mode 100644 index d66efd7c..00000000 --- a/lib/global_variables.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:vocadb/app_theme.dart'; -import 'package:vocadb/services/web_service.dart'; - -class GlobalVariables { - static SharedPreferences pref; - - static RestApi restApi; - - static ThemeEnum defaultTheme; - - static init() async { - pref = await SharedPreferences.getInstance(); - restApi = RestApi(); - defaultTheme = AppTheme.toEnum(pref.get('theme')); - } -} diff --git a/lib/i18n.dart b/lib/i18n.dart new file mode 100644 index 00000000..c956851a --- /dev/null +++ b/lib/i18n.dart @@ -0,0 +1,9 @@ +library i18n; + +/// All translation files will locate here. File name must be language code. + +export 'src/i18n/en.dart'; +export 'src/i18n/ja.dart'; +export 'src/i18n/ms.dart'; +export 'src/i18n/th.dart'; +export 'src/i18n/zh.dart'; diff --git a/lib/loggers.dart b/lib/loggers.dart new file mode 100644 index 00000000..246525ac --- /dev/null +++ b/lib/loggers.dart @@ -0,0 +1,3 @@ +library loggers; + +export 'src/loggers/analytic_log.dart'; diff --git a/lib/main.dart b/lib/main.dart index 5b0dec49..d1ba9fc8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,312 +1,67 @@ import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_analytics/observer.dart'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:flutter_i18n/flutter_i18n_delegate.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:hive/hive.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:provider/provider.dart'; -import 'package:quick_actions/quick_actions.dart'; -import 'package:vocadb/app_theme.dart'; -import 'package:vocadb/blocs/album_bloc.dart'; -import 'package:vocadb/blocs/artist_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/favorite_album_bloc.dart'; -import 'package:vocadb/blocs/favorite_artist_bloc.dart'; -import 'package:vocadb/blocs/favorite_song_bloc.dart'; -import 'package:vocadb/blocs/home_bloc.dart'; -import 'package:vocadb/blocs/profile_bloc.dart'; -import 'package:vocadb/blocs/ranking_bloc.dart'; -import 'package:vocadb/blocs/release_event_bloc.dart'; -import 'package:vocadb/blocs/search_bloc.dart'; -import 'package:vocadb/blocs/song_bloc.dart'; -import 'package:vocadb/blocs/tag_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/global_variables.dart'; -import 'package:vocadb/pages/album/album_page.dart'; -import 'package:vocadb/pages/album_detail/album_detail_page.dart'; -import 'package:vocadb/pages/artist/artist_page.dart'; -import 'package:vocadb/pages/artist_detail/artist_detail_page.dart'; -import 'package:vocadb/pages/event_detail/event_detail_page.dart'; -import 'package:vocadb/pages/event_seiries/event_series_page.dart'; -import 'package:vocadb/pages/main/ranking_filter_page.dart'; -import 'package:vocadb/pages/release_event/release_event_page.dart'; -import 'package:vocadb/pages/search/more_album_page.dart'; -import 'package:vocadb/pages/search/more_song_page.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/pages/song/song_page.dart'; -import 'package:vocadb/pages/song_detail/song_detail_page.dart'; -import 'package:vocadb/pages/tag/tag_category_page.dart'; -import 'package:vocadb/pages/tag/tag_page.dart'; -import 'package:vocadb/pages/tag_detail/tag_detail_page.dart'; -import 'package:vocadb/pages/users/favorite_album_page.dart'; -import 'package:vocadb/pages/users/favorite_artist_page.dart'; -import 'package:vocadb/pages/users/favorite_song_page.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; - -import 'pages/main/account_tab.dart'; -import 'pages/main/home_tab.dart'; -import 'pages/main/ranking_tab.dart'; - -void main() async { +import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:vocadb_app/bindings.dart'; +import 'package:vocadb_app/config.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/utils.dart'; + +Future main() async { WidgetsFlutterBinding.ensureInitialized(); - var dir = await getApplicationDocumentsDirectory(); - Hive.init(dir.path); - - await GlobalVariables.init(); - await Hive.openBox('personal'); - - FlutterError.onError = Crashlytics.instance.recordFlutterError; - + await initServices(); runApp(VocaDBApp()); } -class VocaDBApp extends StatelessWidget { - static FirebaseAnalytics analytics = FirebaseAnalytics(); - static FirebaseAnalyticsObserver observer = +Future initServices() async { + print('starting services ...'); + final appDirectory = AppDirectory(); + final httpService = HttpService(appDirectory: appDirectory); + final FirebaseAnalytics analytics = FirebaseAnalytics(); + final FirebaseAnalyticsObserver analyticsObserver = FirebaseAnalyticsObserver(analytics: analytics); - - static final QuickActions quickActions = QuickActions(); - - @override - Widget build(BuildContext context) { - ConfigBloc configBloc = ConfigBloc(GlobalVariables.pref); - - quickActions.setShortcutItems([ - const ShortcutItem( - type: 'action_quick_search', - localizedTitle: 'Quick search', - icon: 'ic_shortcut_quick_search'), - const ShortcutItem( - type: 'action_song_search', - localizedTitle: 'Find song', - icon: 'ic_shortcut_song_search'), - const ShortcutItem( - type: 'action_artist_search', - localizedTitle: 'Find artist', - icon: 'ic_shortcut_artist_search'), - const ShortcutItem( - type: 'action_album_search', - localizedTitle: 'Find album', - icon: 'ic_shortcut_album_search'), - ]); - - final favoriteSongBloc = FavoriteSongBloc(); - final favoriteArtistBloc = FavoriteArtistBloc(); - final favoriteAlbumBloc = FavoriteAlbumBloc(); - final profileBloc = ProfileBloc( - favoriteSongBloc: favoriteSongBloc, - favoriteArtistBloc: favoriteArtistBloc, - favoriteAlbumBloc: favoriteAlbumBloc, - ); - - return MultiProvider( - providers: [ - Provider.value(value: quickActions), - Provider.value(value: analytics), - Provider.value(value: observer), - Provider.value(value: configBloc), - Provider.value(value: HomeBloc(configBloc)), - Provider.value(value: RankingBloc(configBloc)), - Provider.value(value: favoriteSongBloc), - Provider.value(value: favoriteArtistBloc), - Provider.value(value: favoriteAlbumBloc), - Provider.value(value: profileBloc), - ], - child: RootApp(), - ); - } + final AnalyticLog analyticLog = + AnalyticLog(analytics: analytics, enable: false); + + await Get.putAsync(() => appDirectory.init()); + await Get.putAsync(() => httpService.init()); + await Get.putAsync(() => + AuthService(httpService: httpService, appDirectory: appDirectory) + .checkCurrentUser()); + + await GetStorage.init(SharedPreferenceService.container); + Get.put( + SharedPreferenceService( + box: GetStorage(SharedPreferenceService.container)) + ..init(), + permanent: true); + + Get.put(analyticLog); + Get.put(analyticsObserver); + + print('All services started...'); } -class RootApp extends StatelessWidget { - @override - Widget build(BuildContext context) { - final config = Provider.of(context); - final observer = Provider.of(context); - - return StreamBuilder( - stream: config.uiConfigs$, - builder: (context, snapshot) { - return MaterialApp( - title: APP_NAME, - theme: config.getThemeData(Provider.of(context).theme), - darkTheme: AppTheme.darkTheme, - initialRoute: '/', - navigatorObservers: [observer], - localizationsDelegates: [ - FlutterI18nDelegate( - useCountryCode: false, - fallbackFile: 'assets/i18n/en', - path: 'assets/i18n', - forcedLocale: Locale.fromSubtags( - languageCode: Provider.of(context).uiLang)), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate - ], - supportedLocales: [ - const Locale('en'), // English - const Locale('th'), // Hebrew - // ... other locales the app supports - ], - routes: { - '/': (context) => MyHomePage(title: 'VocaDB Demo Home Page'), - SongDetailScreen.routeName: (context) => SongDetailScreen(), - AlbumDetailScreen.routeName: (context) => AlbumDetailScreen(), - ArtistDetailScreen.routeName: (context) => ArtistDetailScreen(), - TagDetailScreen.routeName: (context) => TagDetailScreen(), - ReleaseEventDetailScreen.routeName: (context) => - ReleaseEventDetailScreen(), - FavoriteSongScreen.routeName: (context) => FavoriteSongScreen(), - FavoriteArtistScreen.routeName: (context) => FavoriteArtistScreen(), - FavoriteAlbumScreen.routeName: (context) => FavoriteAlbumScreen(), - MoreSongScreen.routeName: (context) => MoreSongScreen(), - MoreAlbumScreen.routeName: (context) => MoreAlbumScreen(), - SongPage.routeName: (context) => Provider( - builder: (context) => SongBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: SongPage(), - ), - ArtistPage.routeName: (context) => Provider( - builder: (context) => ArtistBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: ArtistPage(), - ), - AlbumScreen.routeName: (context) => Provider( - builder: (context) => AlbumBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: AlbumPage(), - ), - TagScreen.routeName: (context) => Provider( - builder: (context) => TagBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: TagPage(), - ), - ReleaseEventScreen.routeName: (context) => - Provider( - builder: (context) => ReleaseEventBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: ReleaseEventPage(), - ), - SearchScreen.routeName: (context) => Provider( - builder: (context) => SearchBloc(configBloc: config), - dispose: (context, bloc) => bloc.dispose(), - child: SearchPage(), - ), - YoutubePlaylistScreen.routeName: (context) => - YoutubePlaylistScreen(), - TagCategoryScreen.routeName: (context) => TagCategoryScreen(), - EventSeriesScreen.routeName: (context) => EventSeriesScreen(), - }, - ); - }, - ); - } -} - -class MyHomePage extends StatefulWidget { - MyHomePage({Key key, this.title}) : super(key: key); - - final String title; - - @override - _MyHomePageState createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _selectedIndex = 0; - static const TextStyle optionStyle = - TextStyle(fontSize: 30, fontWeight: FontWeight.bold); - - List _widgetOptions = [ - HomeTab(), - RankingTab(), - AccountTab(), - ]; - - void handleShortcut(String shortcutType) { - switch (shortcutType) { - case 'action_quick_search': - SearchScreen.navigate(context); - break; - case 'action_song_search': - SongPage.navigate(context, openSearch: true); - break; - case 'action_artist_search': - ArtistPage.navigate(context, openSearch: true); - break; - case 'action_album_search': - AlbumScreen.navigate(context, openSearch: true); - break; - } - } - +class VocaDBApp extends StatelessWidget { @override Widget build(BuildContext context) { - final homeBloc = Provider.of(context); - final rankingBloc = Provider.of(context); - Provider.of(context).initialize(handleShortcut); - - return Scaffold( - appBar: AppBar( - title: Text( - APP_NAME, - key: Key('app_name'), - ), - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () => - Navigator.pushNamed(context, SearchScreen.routeName), - ), - (_selectedIndex != 1 || !constShowFilterRank) - ? Container() - : IconButton( - icon: Icon(Icons.filter_list), - onPressed: () => RankingFilterPage.navigate(context)), + return GetMaterialApp( + debugShowCheckedModeBanner: false, + translations: AppTranslation(), + locale: Get.locale, + fallbackLocale: AppTranslation.fallbackLocale, + theme: Get.theme, + navigatorObservers: [ + Get.find() ], - ), - body: Center( - child: AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: _widgetOptions.elementAt(_selectedIndex), - ), - ), - bottomNavigationBar: BottomNavigationBar( - items: [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - title: Text(FlutterI18n.translate(context, 'label.home'), - key: Key('tab_home')), - ), - BottomNavigationBarItem( - icon: Icon(Icons.trending_up), - title: Text(FlutterI18n.translate(context, 'label.ranking'), - key: Key('tab_ranking')), - ), - BottomNavigationBarItem( - icon: Icon(Icons.menu), - title: Text(FlutterI18n.translate(context, 'label.menu'), - key: Key('tab_menu')), - ), - ], - currentIndex: _selectedIndex, - onTap: (index) { - switch (index) { - case 0: - homeBloc.fetch(); - break; - case 1: - rankingBloc.fetch(); - break; - } - - setState(() { - _selectedIndex = index; - }); - }, - ), - ); + defaultTransition: Transition.fade, + initialBinding: MainPageBinding(), + initialRoute: Routes.INITIAL, + home: MainPage(), + getPages: AppPages.pages); } } diff --git a/lib/models.dart b/lib/models.dart new file mode 100644 index 00000000..bfbd9752 --- /dev/null +++ b/lib/models.dart @@ -0,0 +1,32 @@ +library models; + +export 'src/models/album_disc_model.dart'; +export 'src/models/album_model.dart'; +export 'src/models/album_user_model.dart'; +export 'src/models/artist_album_model.dart'; +export 'src/models/artist_event_model.dart'; +export 'src/models/artist_link_model.dart'; +export 'src/models/artist_model.dart'; +export 'src/models/artist_relations_model.dart'; +export 'src/models/artist_role_model.dart'; +export 'src/models/artist_song_model.dart'; +export 'src/models/base_model.dart'; +export 'src/models/entry_model.dart'; +export 'src/models/followed_artist_model.dart'; +export 'src/models/lyric_model.dart'; +export 'src/models/main_picture_model.dart'; +export 'src/models/profile_model.dart'; +export 'src/models/pv_model.dart'; +export 'src/models/radio_button_item.dart'; +export 'src/models/rated_song_model.dart'; +export 'src/models/release_date_model.dart'; +export 'src/models/release_event_model.dart'; +export 'src/models/release_event_series_model.dart'; +export 'src/models/simple_dropdown_item.dart'; +export 'src/models/song_model.dart'; +export 'src/models/tag_group_model.dart'; +export 'src/models/tag_model.dart'; +export 'src/models/track_model.dart'; +export 'src/models/user_cookie.dart'; +export 'src/models/user_model.dart'; +export 'src/models/web_link_model.dart'; diff --git a/lib/models/release_event_model.dart b/lib/models/release_event_model.dart deleted file mode 100644 index 444e7ae7..00000000 --- a/lib/models/release_event_model.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:intl/intl.dart'; -import 'package:vocadb/models/artist_event_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; - -class ReleaseEventModel extends EntryModel { - EntryType entryType = EntryType.ReleaseEvent; - String description; - String category; - String venueName; - String date; - String endDate; - ReleaseEventSeriesModel series; - List artists; - - ReleaseEventModel(); - - ReleaseEventModel.fromJson(Map json) - : description = json['description'], - category = json['category'], - venueName = json['venueName'], - date = json['date'], - endDate = json['endDate'], - series = json.containsKey('series') - ? ReleaseEventSeriesModel.fromJson(json['series']) - : null, - artists = JSONUtils.mapJsonArray( - json['artists'], (v) => ArtistEventModel.fromJson(v)), - super.fromJson(json); - - static List jsonToList(List items) { - return items.map((i) => ReleaseEventModel.fromJson(i)).toList(); - } - - String get displayCategory { - return series?.category ?? category; - } - - String get dateFormatted => (date == null) - ? null - : DateFormat('yyyy-MM-dd').format(DateTime.parse(date)); -} diff --git a/lib/pages.dart b/lib/pages.dart new file mode 100644 index 00000000..77abff36 --- /dev/null +++ b/lib/pages.dart @@ -0,0 +1,36 @@ +/// Collection of pages inside app + +library pages; + +export 'src/pages/album_detail_page.dart'; +export 'src/pages/album_search_filter_page.dart'; +export 'src/pages/album_search_page.dart'; +export 'src/pages/artist_detail_page.dart'; +export 'src/pages/artist_search_filter_page.dart'; +export 'src/pages/artist_search_page.dart'; +export 'src/pages/contact_us_page.dart'; +export 'src/pages/favorite_album_filter_page.dart'; +export 'src/pages/favorite_album_page.dart'; +export 'src/pages/favorite_artist_filter_page.dart'; +export 'src/pages/favorite_artist_page.dart'; +export 'src/pages/favorite_song_filter_page.dart'; +export 'src/pages/favorite_song_page.dart'; +export 'src/pages/home_page.dart'; +export 'src/pages/login_page.dart'; +export 'src/pages/main_page.dart'; +export 'src/pages/menu_page.dart'; +export 'src/pages/pv_playlist_page.dart'; +export 'src/pages/ranking_filter_page.dart'; +export 'src/pages/ranking_page.dart'; +export 'src/pages/release_event_detail_page.dart'; +export 'src/pages/release_event_search_filter_page.dart'; +export 'src/pages/release_event_search_page.dart'; +export 'src/pages/release_event_series_detail_page.dart'; +export 'src/pages/entry_search_page.dart'; +export 'src/pages/settings_page.dart'; +export 'src/pages/song_detail_page.dart'; +export 'src/pages/song_search_filter_page.dart'; +export 'src/pages/song_search_page.dart'; +export 'src/pages/tag_category_page.dart'; +export 'src/pages/tag_detail_page.dart'; +export 'src/pages/tag_search_page.dart'; diff --git a/lib/pages/album/album_page.dart b/lib/pages/album/album_page.dart deleted file mode 100644 index f9bc860a..00000000 --- a/lib/pages/album/album_page.dart +++ /dev/null @@ -1,207 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/album_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/pages/search/search_album_filter_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/album_tile.dart'; - -class AlbumScreenArguments { - final bool openSearch; - - AlbumScreenArguments({this.openSearch}); -} - -class AlbumScreen extends StatelessWidget { - static const String routeName = '/albums'; - - static void navigate(BuildContext context, {bool openSearch = false}) { - Navigator.pushNamed(context, AlbumScreen.routeName, - arguments: AlbumScreenArguments(openSearch: openSearch)); - } - - @override - Widget build(BuildContext context) { - final configBloc = Provider.of(context); - final AlbumScreenArguments args = ModalRoute.of(context).settings.arguments; - final albumBloc = AlbumBloc(configBloc: configBloc); - - if (args.openSearch) { - albumBloc.openSearch(); - } - - return Provider( - builder: (context) => albumBloc, - dispose: (context, bloc) => bloc.dispose(), - child: AlbumPage(), - ); - } -} - -class AlbumPage extends StatefulWidget { - static const String routeName = '/albums'; - - static void navigate(BuildContext context, {bool openSearch = false}) { - Navigator.pushNamed(context, AlbumScreen.routeName, - arguments: AlbumScreenArguments(openSearch: openSearch)); - } - - @override - _AlbumPageState createState() => _AlbumPageState(); -} - -class _AlbumPageState extends State { - final TextEditingController _controller = TextEditingController(); - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - final AlbumScreenArguments args = ModalRoute.of(context).settings.arguments; - final albumBloc = Provider.of(context); - - if (args.openSearch) { - albumBloc.openSearch(); - } - } - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildData(List albums) { - if (albums.length == 0) { - return CenterResult( - result: Result( - Icon(Icons.album), - FlutterI18n.translate(context, 'error.searchResultNotMatched'), - ), - ); - } - - return InfiniteListView( - itemCount: albums.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - AlbumModel album = albums[index]; - return AlbumTile.fromEntry(album, tag: 'album_${album.id}'); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(FlutterI18n.translate(context, 'label.albums')), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () => bloc.openSearch(), - ); - }), - IconButton( - icon: Icon(Icons.filter_list), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchAlbumFilterPage(bloc: bloc.albumFilterBloc))); - }, - ), - ], - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/album_detail/album_detail_page.dart b/lib/pages/album_detail/album_detail_page.dart deleted file mode 100644 index a4283f31..00000000 --- a/lib/pages/album_detail/album_detail_page.dart +++ /dev/null @@ -1,470 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/album_detail_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/favorite_album_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/album_disc_model.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/track_model.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; -import 'package:vocadb/utils/analytic_constant.dart'; -import 'package:vocadb/widgets/artist_section.dart'; -import 'package:vocadb/widgets/expandable_content.dart'; -import 'package:vocadb/widgets/like_button.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/space_divider.dart'; -import 'package:vocadb/widgets/tags.dart'; -import "package:collection/collection.dart"; -import 'package:vocadb/widgets/album_track.dart'; -import 'package:vocadb/widgets/text_info_section.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; - -class AlbumDetailScreenArguments { - final int id; - final String name; - final String thumbUrl; - final String tag; - - AlbumDetailScreenArguments(this.id, {this.name, this.thumbUrl, this.tag}); -} - -class AlbumDetailScreen extends StatelessWidget { - static const String routeName = '/albumDetail'; - - static void navigate(BuildContext context, int id, - {String name, String thumbUrl, String tag}) { - final analytics = Provider.of(context); - analytics.logSelectContent( - contentType: AnalyticContentType.album, itemId: id.toString()); - - Navigator.pushNamed(context, AlbumDetailScreen.routeName, - arguments: AlbumDetailScreenArguments(id, - name: name, thumbUrl: thumbUrl, tag: tag)); - } - - @override - Widget build(BuildContext context) { - final AlbumDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => AlbumDetailBloc(args.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: AlbumDetailPage(), - ); - } -} - -class AlbumDetailPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - final AlbumDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - - final bloc = Provider.of(context); - - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - floating: true, - title: Text(args.name), - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - HeroContent(args.name, args.thumbUrl, args.tag), - AlbumDetailContent(args.id) - ], - ), - floatingActionButton: StreamBuilder( - stream: bloc.album$, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return Container(); - } - - AlbumModel album = snapshot.data; - - if (album.isContainsYoutubeTrack) { - return FloatingActionButton( - onPressed: () => YoutubePlaylistScreen.navigate( - context, - album.tracks - .where((t) => t.song != null) - .map((t) => t.song) - .toList(), - title: album.name), - child: Icon(Icons.play_arrow), - ); - } - - return Container(); - }, - )); - } -} - -class AlbumDetailContent extends StatefulWidget { - final int id; - - const AlbumDetailContent(this.id); - - @override - _AlbumDetailContentState createState() => _AlbumDetailContentState(); -} - -class _AlbumDetailContentState extends State { - @override - void initState() { - super.initState(); - } - - buildHasData(AlbumModel album) { - return SliverList(delegate: SliverChildListDelegate(detailWidgets(album))); - } - - buildError(String error) { - return SliverFillRemaining( - child: Result.error('Something wrong!', subtitle: error), - ); - } - - buildDefault() { - return SliverFillRemaining( - child: Center( - child: CircularProgressIndicator(), - ), - ); - } - - List detailWidgets(AlbumModel album) { - List widgets = [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - album.name, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - SizedBox( - height: 4, - ), - Text( - album.artistString, - ), - ], - ), - ), - Container( - height: 64, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - (album.ratingAverage == 0) - ? Text(FlutterI18n.translate(context, 'label.noRating'), - style: Theme.of(context).textTheme.caption) - : Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('${album.ratingAverage} ★', - style: TextStyle(fontWeight: FontWeight.bold)), - SizedBox( - height: 4, - ), - Text( - FlutterI18n.translate(context, 'label.ratingCount', - {'rating': '${album.ratingCount}'}), - style: Theme.of(context).textTheme.caption) - ], - ), - Text(FlutterI18n.translate(context, 'discType.${album.discType}')), - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(album.releaseDateFormatted), - SizedBox( - height: 4, - ), - Text(FlutterI18n.translate(context, 'label.releasedDate'), - style: Theme.of(context).textTheme.caption) - ], - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: StreamBuilder( - stream: Provider.of(context).albums$, - builder: (context, snapshot) { - Map songMap = snapshot.data; - - if ((songMap != null && songMap.containsKey(album.id))) { - return LikeButton( - onPressed: () => Provider.of(context) - .remove(album.id), - isLiked: true, - ); - } - - return LikeButton( - onPressed: () => - Provider.of(context).add(album), - ); - }, - ), - ), - Expanded( - child: FlatButton( - onPressed: () => Share.share('$HOST/Al/${album.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - String url = '$HOST/Al/${album.id}'; - launch(url); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.info'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - ], - ), - ), - SpaceDivider(), - Tags(album.tags), - ExpandableContent( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SpaceDivider(), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.name'), - text: album.name, - ), - (album.additionalNames == null) - ? Container() - : Text(album.additionalNames), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.description'), - text: album.description, - ), - Divider(), - ArtistForAlbumSection( - title: FlutterI18n.translate(context, 'label.producers'), - prefixTag: 'producer_${album.id}', - artists: album.producers, - ), - ArtistForAlbumSection( - title: FlutterI18n.translate(context, 'label.vocalists'), - prefixTag: 'vocalist_${album.id}', - artists: album.vocalists, - ), - ArtistForAlbumSection( - title: FlutterI18n.translate(context, 'label.labels'), - prefixTag: 'labels_${album.id}', - artists: album.labels, - ), - ArtistForAlbumSection( - title: FlutterI18n.translate(context, 'label.other'), - prefixTag: 'other_${album.id}', - artists: album.otherArtists, - ), - ], - ), - )), - AlbumDiscs(album.discs()), - Divider(), - WebLinkSection( - webLinks: album.webLinks, - ) - ]; - return widgets; - } - - @override - Widget build(BuildContext context) { - return StreamBuilder( - stream: Provider.of(context).album$, - builder: (context, snapshot) { - if (snapshot.hasData) - return buildHasData(snapshot.data); - else if (snapshot.hasError) { - return buildError(snapshot.error); - } - - return buildDefault(); - }, - ); - } -} - -class AlbumDiscs extends StatelessWidget { - final List discs; - - const AlbumDiscs(this.discs); - - @override - Widget build(BuildContext context) { - if (discs == null) return Container(); - - if (discs.length == 1) { - return Container( - child: Column( - children: discs[0].tracks.map((t) => AlbumTrack(t)).toList(), - ), - ); - } - - return Container( - child: Column( - children: discs - .map((disc) => Column( - children: [ - Text(FlutterI18n.translate(context, 'label.discNo', - {'disc': disc.discNumber.toString()})), - Column( - children: disc.tracks.map((t) => AlbumTrack(t)).toList(), - ) - ], - )) - .toList(), - ), - ); - } -} - -class TrackList extends StatelessWidget { - final List tracks; - - const TrackList(this.tracks); - - buildHasData(BuildContext context, List tracks) { - List widgets = List(); - - var groupTracks = groupBy(tracks, (t) => t.discNumber); - - print(groupTracks); - - if (groupTracks.length < 2) { - var discTracks = tracks.map((t) => AlbumTrack(t)).toList(); - - widgets.addAll(discTracks); - widgets.add(SpaceDivider()); - } else { - groupTracks.forEach((disc, List t) { - widgets.add(Text(FlutterI18n.translate( - context, 'label.discNo', {'disc': disc.toString()}))); - - var discTracks = tracks.map((t) => AlbumTrack(t)).toList(); - - widgets.addAll(discTracks); - widgets.add(SpaceDivider()); - }); - } - - return Container( - child: Column( - children: widgets, - ), - ); - } - - buildError() { - return Container( - child: Text('Error loading tracks'), - ); - } - - buildDefault() { - return Container(); - } - - @override - Widget build(BuildContext context) { - return (this.tracks != null) - ? buildHasData(context, tracks) - : buildDefault(); - } -} - -class HeroContent extends StatelessWidget { - final String name; - final String thumbUrl; - final String tag; - - HeroContent(this.name, this.thumbUrl, this.tag); - - @override - Widget build(BuildContext context) { - return SliverPadding( - padding: EdgeInsets.all(16.0), - sliver: SliverToBoxAdapter( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: 160, - height: 160, - child: Hero( - tag: this.tag, - child: CachedNetworkImage( - imageUrl: this.thumbUrl, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - ))), - ], - ), - ), - ); - } -} diff --git a/lib/pages/artist/artist_page.dart b/lib/pages/artist/artist_page.dart deleted file mode 100644 index 85d2c763..00000000 --- a/lib/pages/artist/artist_page.dart +++ /dev/null @@ -1,181 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/artist_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/pages/search/search_artist_filter_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; - -class ArtistScreenArguments { - final bool openSearch; - - ArtistScreenArguments({this.openSearch}); -} - -class ArtistPage extends StatefulWidget { - static const String routeName = '/artists'; - - static void navigate(BuildContext context, {bool openSearch = false}) { - Navigator.pushNamed(context, ArtistPage.routeName, - arguments: ArtistScreenArguments(openSearch: openSearch)); - } - - @override - _ArtistPageState createState() => _ArtistPageState(); -} - -class _ArtistPageState extends State { - final TextEditingController _controller = TextEditingController(); - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - final ArtistScreenArguments args = - ModalRoute.of(context).settings.arguments; - final artistBloc = Provider.of(context); - - if (args.openSearch) { - artistBloc.openSearch(); - } - } - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildData(List artists) { - if (artists.length == 0) { - return CenterResult( - result: Result( - Icon(Icons.person), - FlutterI18n.translate(context, 'error.searchResultNotMatched'), - ), - ); - } - - return InfiniteListView( - itemCount: artists.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - ArtistModel artist = artists[index]; - return ArtistTile.fromEntry(artist, tag: 'artist_${artist.id}'); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(FlutterI18n.translate(context, 'label.artists')), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () => bloc.openSearch(), - ); - }), - IconButton( - icon: Icon(Icons.filter_list), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchArtistFilterPage(bloc: bloc.artistFilterBloc))); - }, - ), - ], - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/artist_detail/artist_detail_page.dart b/lib/pages/artist_detail/artist_detail_page.dart deleted file mode 100644 index 802fb0e0..00000000 --- a/lib/pages/artist_detail/artist_detail_page.dart +++ /dev/null @@ -1,416 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/artist_detail_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/favorite_artist_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/pages/search/more_album_page.dart'; -import 'package:vocadb/pages/search/more_song_page.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/utils/analytic_constant.dart'; -import 'package:vocadb/widgets/album_list_section.dart'; -import 'package:vocadb/widgets/artist_section.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/expandable_content.dart'; -import 'package:vocadb/widgets/like_button.dart'; -import 'package:vocadb/widgets/song_list_section.dart'; -import 'package:vocadb/widgets/space_divider.dart'; -import 'package:vocadb/widgets/tags.dart'; -import 'package:vocadb/widgets/text_info_section.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; - -class ArtistDetailScreenArguments { - final int id; - final String name; - final String thumbUrl; - final String tag; - - ArtistDetailScreenArguments(this.id, {this.name, this.thumbUrl, this.tag}); -} - -class ArtistDetailScreen extends StatelessWidget { - static const String routeName = '/artistDetail'; - - static void navigate(BuildContext context, int id, - {String name, String thumbUrl, String tag}) { - final analytics = Provider.of(context); - analytics.logSelectContent( - contentType: AnalyticContentType.artist, itemId: id.toString()); - - Navigator.pushNamed(context, ArtistDetailScreen.routeName, - arguments: ArtistDetailScreenArguments(id, - name: name, thumbUrl: thumbUrl, tag: tag)); - } - - @override - Widget build(BuildContext context) { - final ArtistDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => ArtistDetailBloc(args.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: ArtistDetailPage(args.id, args.name, args.thumbUrl, args.tag), - ); - } -} - -class ArtistDetailPage extends StatelessWidget { - final int id; - final String name; - final String imageUrl; - final String tag; - - const ArtistDetailPage(this.id, this.name, this.imageUrl, this.tag); - - @override - Widget build(BuildContext context) { - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - flexibleSpace: FlexibleSpaceBar( - title: Text(this.name), - background: SafeArea( - child: Opacity( - opacity: 0.7, - child: Hero( - tag: this.tag, - child: (this.imageUrl == null) - ? Icon(Icons.person) - : CachedNetworkImage( - imageUrl: this.imageUrl, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - )), - ), - ), - ), - ), - StreamBuilder( - stream: Provider.of(context).artist$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return ArtistDetailContent(artist: snapshot.data); - } else if (snapshot.hasError) { - return SliverFillRemaining( - child: CenterResult.error( - message: snapshot.error.toString(), - ), - ); - } - - return SliverFillRemaining(child: CenterLoading()); - }, - ), - ], - ), - ); - } -} - -class ArtistInfo extends StatelessWidget { - final ArtistModel artist; - - const ArtistInfo({Key key, this.artist}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - artist.name, - style: Theme.of(context).textTheme.title, - ), - (artist.additionalNames != null) - ? Text(artist.additionalNames) - : Container(), - Text(FlutterI18n.translate( - context, 'artistType.${artist.artistType}')), - ], - ), - ), - SpaceDivider(), - Tags( - artist.tags, - padding: 0, - ), - SpaceDivider(), - (!artist.isContainsDetail) - ? Container() - : ExpandableContent( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextInfoSection( - title: FlutterI18n.translate( - context, 'label.releasedDate'), - text: artist.releaseDateFormatted, - ), - TextInfoSection( - title: FlutterI18n.translate( - context, 'label.description'), - text: artist.description, - ), - ], - ), - ), - (artist.baseVoicebank == null) - ? Container() - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Text( - FlutterI18n.translate( - context, 'label.baseVoicebank'), - style: Theme.of(context).textTheme.subhead), - ), - SpaceDivider(), - ArtistTile.fromEntry( - artist.baseVoicebank, - tag: - 'base_voice_bank_${artist.id}_${artist.baseVoicebank.id}', - ), - SpaceDivider(), - ], - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.illustratedBy'), - prefixTag: 'illustrated_${artist.id}', - artists: artist.illustrators, - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.voiceProvider'), - prefixTag: 'voice_provider_${artist.id}', - artists: artist.voiceProviders, - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.groupAndLabels'), - prefixTag: 'labels_${artist.id}', - artists: artist.groups, - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.illustratorOf'), - prefixTag: 'illustrator_of_${artist.id}', - artists: artist.illustratedList, - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.voiceProviderOf'), - prefixTag: 'voice_provider_of_${artist.id}', - artists: artist.voiceProvidedList, - ), - ArtistSection( - title: FlutterI18n.translate( - context, 'artistRoleType.members'), - prefixTag: 'members_${artist.id}', - artists: artist.members, - ), - ], - ), - ), - Divider(), - ], - ); - } -} - -class ArtistDetailContent extends StatelessWidget { - final ArtistModel artist; - - const ArtistDetailContent({Key key, this.artist}) : super(key: key); - - Widget buildInfo() { - return Container(); - } - - @override - Widget build(BuildContext context) { - return SliverList( - delegate: SliverChildListDelegate([ - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: StreamBuilder( - stream: Provider.of(context).artists$, - builder: (context, snapshot) { - Map artistMap = snapshot.data; - - if ((artistMap != null && - artistMap.containsKey(artist.id))) { - return LikeButton( - onPressed: () => - Provider.of(context) - .remove(artist.id), - isLiked: true, - ); - } - - return LikeButton( - onPressed: () => - Provider.of(context).add(artist), - ); - }, - ), - ), - Expanded( - child: FlatButton( - onPressed: () => Share.share('$HOST/Ar/${artist.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - String url = '$HOST/Ar/${artist.id}'; - launch(url); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.info'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - ], - ), - ), - // - ArtistInfo( - artist: artist, - ), - SongListSection( - title: FlutterI18n.translate(context, 'label.recentSongsPVs'), - songs: artist.relations.latestSongs, - horizontal: true, - prefixTag: 'artist_latest_song_${artist.id}}', - extraMenus: PopupMenuButton( - onSelected: (String selectedValue) { - MoreSongScreen.showLatestByArtist( - context, 'More songs from ${artist.name}', artist.id); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - ), - SongListSection( - title: FlutterI18n.translate(context, 'label.popularSongs'), - songs: artist.relations.popularSongs, - horizontal: true, - prefixTag: 'artist_popular_song_${artist.id}}', - extraMenus: PopupMenuButton( - onSelected: (String selectedValue) { - MoreSongScreen.showTopByArtist( - context, 'Top songs from ${artist.name}', artist.id); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - ), - AlbumListSection( - title: FlutterI18n.translate(context, 'label.recentAlbums'), - albums: artist.relations.latestAlbums, - horizontal: true, - prefixTag: 'artist_latest_album_${artist.id}}', - extraMenus: PopupMenuButton( - onSelected: (String selectedValue) { - MoreAlbumScreen.showLatestByArtist( - context, 'Latest albums from ${artist.name}', artist.id); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - ), - AlbumListSection( - title: FlutterI18n.translate(context, 'label.popularAlbums'), - albums: artist.relations.popularAlbums, - horizontal: true, - prefixTag: 'artist_latest_album_${artist.id}}', - extraMenus: PopupMenuButton( - onSelected: (String selectedValue) { - MoreAlbumScreen.showTopByArtist( - context, 'Top albums from ${artist.name}', artist.id); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - ), - WebLinkSection( - webLinks: artist.webLinks, - ), - ]), - ); - } -} diff --git a/lib/pages/event_detail/event_detail_page.dart b/lib/pages/event_detail/event_detail_page.dart deleted file mode 100644 index 4c987e59..00000000 --- a/lib/pages/event_detail/event_detail_page.dart +++ /dev/null @@ -1,356 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/release_event_detail_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/event_seiries/event_series_page.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/utils/analytic_constant.dart'; -import 'package:vocadb/widgets/album_section.dart'; -import 'package:vocadb/widgets/artist_section.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/song_list_section.dart'; -import 'package:vocadb/widgets/space_divider.dart'; -import 'package:vocadb/widgets/text_info_section.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; - -class ReleaseEventDetailScreenArguments { - final int id; - final String name; - final String thumbUrl; - final String tag; - - ReleaseEventDetailScreenArguments(this.id, - {this.name, this.thumbUrl, this.tag}); -} - -class ReleaseEventDetailScreen extends StatelessWidget { - static const String routeName = '/eventDetail'; - - static void navigate(BuildContext context, int id, - {String name, String thumbUrl, String tag}) { - final analytics = Provider.of(context); - analytics.logSelectContent( - contentType: AnalyticContentType.releaseEvent, itemId: id.toString()); - - Navigator.pushNamed(context, ReleaseEventDetailScreen.routeName, - arguments: ReleaseEventDetailScreenArguments(id, - name: name, thumbUrl: thumbUrl, tag: tag)); - } - - @override - Widget build(BuildContext context) { - final ReleaseEventDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => - ReleaseEventDetailBloc(args.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: EventDetailPage( - name: args.name, imageUrl: args.thumbUrl, tag: args.tag), - ); - } -} - -class EventDetailPage extends StatelessWidget { - final String name; - final String imageUrl; - final String tag; - - const EventDetailPage({Key key, this.name, this.imageUrl, this.tag}) - : super(key: key); - - List buildContent() { - return [Text('Expansion panel')]; - } - - void navigateToPlace(String query) async { - String uri = Uri.encodeFull('geo:0,0?q=$query'); - if (await canLaunch(uri)) { - await launch(uri); - } else { - await launch(Uri.encodeFull('https://maps.apple.com/?q=$query')); - } - } - - buildData(BuildContext context, ReleaseEventModel releaseEvent) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - flexibleSpace: FlexibleSpaceBar( - title: Text(releaseEvent.name), - background: (releaseEvent.imageUrl == null) - ? Container() - : Hero( - tag: this.tag, - child: CachedNetworkImage( - imageUrl: releaseEvent.imageUrl, - fit: BoxFit.contain, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - ), - ), - ), - ), - SliverList( - delegate: SliverChildListDelegate.fixed([ - SpaceDivider(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: FlatButton( - onPressed: () => - Share.share('$HOST/E/${releaseEvent.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), style: TextStyle(fontSize: 12)) - ], - )), - ), - (releaseEvent.venueName == null)? Container() : Expanded( - child: FlatButton( - onPressed: () { - navigateToPlace(releaseEvent.venueName); - }, - child: Column( - children: [ - Icon( - Icons.place, - ), - Text(FlutterI18n.translate(context, 'label.map'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - launch('$HOST/E/${releaseEvent.id}'); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.showMore'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - ], - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextInfoSection( - title: FlutterI18n.translate(context, 'label.name'), - text: releaseEvent.name, - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.category'), - text: FlutterI18n.translate(context, - 'eventCategory.${releaseEvent.displayCategory}'), - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.date'), - text: releaseEvent.dateFormatted, - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.venue'), - text: releaseEvent.venueName, - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.description'), - text: releaseEvent.description, - ), - ], - ), - ), - Divider(), - ArtistForEventSection( - title: - FlutterI18n.translate(context, 'label.participatingArtists'), - artists: releaseEvent.artists, - ), - (releaseEvent.artists.length == 0) ? Container() : Divider(), - StreamBuilder( - stream: Provider.of(context).albums$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - List albums = snapshot.data; - - if (albums.length == 0) return Container(); - - return AlbumSection( - albums: albums, - tagPrefix: 'release_event_detail_${releaseEvent.id}', - ); - }, - ), - StreamBuilder( - stream: Provider.of(context).songs$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - List songs = snapshot.data; - - if (songs.length == 0) return Container(); - - return SongListSection( - title: FlutterI18n.translate(context, 'label.songs'), - songs: songs, - horizontal: true, - prefixTag: 'release_event_detail_songs_${releaseEvent.id}}', - ); - }, - ), - (releaseEvent.series == null)? Container() : Section( - title: FlutterI18n.translate(context, 'label.series'), - children: [ - ListTile( - leading: Icon(Icons.event_note), - title: Text(releaseEvent.series.name), - onTap: () { - EventSeriesScreen.navigate(context, releaseEvent.series); - }, - ) - ], - ), - WebLinkSection( - webLinks: releaseEvent.webLinks, - title: FlutterI18n.translate(context, 'label.references')) - ]), - ) - ], - ); - } - - buildError(BuildContext context, Object error) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - SliverFillRemaining( - child: Center( - child: Result.error("Error", subtitle: error.toString()), - ), - ) - ], - ); - } - - buildDefault(BuildContext context) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - flexibleSpace: FlexibleSpaceBar( - title: Text(this.name), - background: (this.imageUrl == null) - ? Container() - : Hero( - tag: this.tag, - child: CachedNetworkImage( - imageUrl: this.imageUrl, - fit: BoxFit.contain, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - ), - )), - ), - SliverFillRemaining( - child: Center( - child: CircularProgressIndicator(), - ), - ) - ], - ); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - body: StreamBuilder( - stream: Provider.of(context).releaseEvent$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(context, snapshot.data); - } else if (snapshot.hasError) { - return buildError(context, snapshot.error.toString()); - } - - return buildDefault(context); - }, - ), - ); - } -} diff --git a/lib/pages/event_seiries/event_series_page.dart b/lib/pages/event_seiries/event_series_page.dart deleted file mode 100644 index 1b0d7d55..00000000 --- a/lib/pages/event_seiries/event_series_page.dart +++ /dev/null @@ -1,239 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/event_series_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/widgets/event_tile.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/space_divider.dart'; -import 'package:vocadb/widgets/text_info_section.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; - -class EventSeriesScreenArguments { - final ReleaseEventSeriesModel eventSeriesModel; - - EventSeriesScreenArguments(this.eventSeriesModel); -} - -class EventSeriesScreen extends StatelessWidget { - static const String routeName = '/eventSeriesDetail'; - - static void navigate(BuildContext context, ReleaseEventSeriesModel eventSeriesModel) { - Navigator.pushNamed(context, EventSeriesScreen.routeName, - arguments: EventSeriesScreenArguments(eventSeriesModel)); - } - - @override - Widget build(BuildContext context) { - final EventSeriesScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => - EventSeriesBloc(args.eventSeriesModel.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: EventSeriesPage(eventSeriesModel: args.eventSeriesModel,), - ); - } -} - -class EventSeriesPage extends StatelessWidget { - final ReleaseEventSeriesModel eventSeriesModel; - - const EventSeriesPage({Key key, this.eventSeriesModel}) - : super(key: key); - - buildData(BuildContext context, ReleaseEventSeriesModel releaseEventData) { - - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - flexibleSpace: FlexibleSpaceBar( - title: Text(releaseEventData.name), - background: (releaseEventData.imageUrl == null) - ? Container() - : CachedNetworkImage( - imageUrl: releaseEventData.imageUrl, - fit: BoxFit.contain, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - ), - ), - ), - SliverList( - delegate: SliverChildListDelegate.fixed([ - SpaceDivider(), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: FlatButton( - onPressed: () => - Share.share('$HOST/Es/${eventSeriesModel.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - launch('$HOST/Es/${eventSeriesModel.id}'); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.showMore'), - style: TextStyle(fontSize: 12)) - ], - )), - ) - ], - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextInfoSection( - title: FlutterI18n.translate(context, 'label.name'), - text: eventSeriesModel.name, - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.category'), - text: FlutterI18n.translate(context, - 'eventCategory.${eventSeriesModel.category}'), - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.description'), - text: eventSeriesModel.description, - ), - ], - ), - ), - (releaseEventData.webLinks == null)? Container() : WebLinkSection( - webLinks: releaseEventData.webLinks, - title: FlutterI18n.translate(context, 'label.references')), - (releaseEventData.events == null)? Container() : Section( - title: FlutterI18n.translate(context, 'label.events'), - children: releaseEventData.events - .map((e) => EventTile.fromReleaseEvent(e, - tag: 'even_series_event_${e.id}', showCategory: false, showImage: false)) - .toList(), - ) - ]), - ) - ], - ); - } - - buildError(BuildContext context, Object error) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - SliverFillRemaining( - child: Center( - child: Result.error("Error", subtitle: error.toString()), - ), - ) - ], - ); - } - - buildDefault(BuildContext context) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - SliverFillRemaining( - child: Center( - child: CircularProgressIndicator(), - ), - ) - ], - ); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - body: StreamBuilder( - stream: Provider.of(context).eventSeriesDetail$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(context, snapshot.data); - } else if (snapshot.hasError) { - return buildError(context, snapshot.error.toString()); - } - - return buildDefault(context); - }, - ), - ); - } -} diff --git a/lib/pages/login/login_page.dart b/lib/pages/login/login_page.dart deleted file mode 100644 index 4a5a0c06..00000000 --- a/lib/pages/login/login_page.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -class LoginPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - body: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.symmetric(horizontal: 24.0), - child: TextField( - decoration: InputDecoration( - icon: Icon(Icons.person), labelText: "Username"), - ), - ), - Container( - margin: EdgeInsets.symmetric(horizontal: 24.0), - child: TextField( - obscureText: true, - decoration: InputDecoration( - icon: Icon(Icons.lock), labelText: "Password"), - ), - ), - ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - RaisedButton( - onPressed: () {}, - child: Text('Sign in'), - textTheme: ButtonTextTheme.primary), - RaisedButton( - onPressed: () { - Navigator.pop(context); - }, - child: Text('Back'), - textTheme: ButtonTextTheme.normal, - color: Colors.grey.shade600) - ], - ) - ], - ), - ); - } -} diff --git a/lib/pages/main/account_tab.dart b/lib/pages/main/account_tab.dart deleted file mode 100644 index 60fab6f0..00000000 --- a/lib/pages/main/account_tab.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:package_info/package_info.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/profile_bloc.dart'; -import 'package:vocadb/pages/contact_us/contact_us_page.dart'; -import 'package:vocadb/pages/setting/setting_page.dart'; -import 'package:vocadb/pages/users/favorite_album_page.dart'; -import 'package:vocadb/pages/users/favorite_artist_page.dart'; -import 'package:vocadb/pages/users/favorite_song_page.dart'; - -class AccountTab extends StatelessWidget { - @override - Widget build(BuildContext context) { - return GuestTab(); - } -} - -class GuestTab extends StatelessWidget { - @override - Widget build(BuildContext context) { - return ListView( - children: [ - ListTile( - onTap: () { - Provider.of(context).importProfile().then((_) { - Scaffold.of(context).showSnackBar(SnackBar( - content: Text('Profile imported!'), - )); - }).catchError((Error e) { - Scaffold.of(context).showSnackBar(SnackBar( - content: Text('Unable to import file.'), - )); - print(e); - }); - }, - leading: Icon(Icons.file_download), - title: Text(FlutterI18n.translate(context, 'label.importProfile')), - ), - ListTile( - onTap: () { - Provider.of(context).exportProfile().catchError((e) { - Scaffold.of(context).showSnackBar(SnackBar( - content: Text('Unable to export file.'), - )); - print(e); - }); - }, - leading: Icon(Icons.file_upload), - title: Text(FlutterI18n.translate(context, 'label.exportProfile')), - ), - ListTile( - onTap: () => - Navigator.pushNamed(context, FavoriteSongScreen.routeName), - leading: Icon(Icons.library_music), - title: Text(FlutterI18n.translate(context, 'label.favoriteSongs')), - ), - ListTile( - onTap: () => - Navigator.pushNamed(context, FavoriteArtistScreen.routeName), - leading: Icon(Icons.people), - title: Text(FlutterI18n.translate(context, 'label.favoriteArtists')), - ), - ListTile( - onTap: () => - Navigator.pushNamed(context, FavoriteAlbumScreen.routeName), - leading: Icon(Icons.album), - title: Text(FlutterI18n.translate(context, 'label.favoriteAlbums')), - ), - ListTile( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => SettingPage())); - }, - leading: Icon(Icons.settings), - title: Text(FlutterI18n.translate(context, 'label.settings')), - ), - ListTile( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => ContactUsPage())); - }, - leading: Icon(Icons.help), - title: Text(FlutterI18n.translate(context, 'label.contact')), - ), - FutureBuilder( - future: PackageInfo.fromPlatform(), - builder: (context, snapshot) { - String versionName = 'Unknown'; - if (snapshot.connectionState == ConnectionState.done) { - PackageInfo packageInfo = snapshot.data; - versionName = '${packageInfo.version}-${packageInfo.buildNumber}'; - } - return ListTile( - leading: Icon(Icons.info), - title: Text(FlutterI18n.translate(context, "label.version")), - subtitle: Text(versionName), - ); - }, - ), - ], - ); - } -} diff --git a/lib/pages/main/highlighted_list.dart b/lib/pages/main/highlighted_list.dart deleted file mode 100644 index 736e5fd4..00000000 --- a/lib/pages/main/highlighted_list.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/home_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/song_card.dart'; - -class HighlightedList extends StatefulWidget { - @override - _HighlightedListState createState() => _HighlightedListState(); -} - -class _HighlightedListState extends State { - void openPlaylist(List songs) { - YoutubePlaylistScreen.navigate(context, songs, - title: FlutterI18n.translate(context, 'label.highlighted')); - } - - buildHasData(List songs) { - List songCards = songs - .map((song) => SongCard.song(song, tag: 'highlighted_list_${song.id}')) - .toList(); - return Section( - title: FlutterI18n.translate(context, 'label.highlighted'), - horizontal: true, - children: songCards, - extraMenus: FlatButton( - onPressed: () { - openPlaylist(songs); - }, - child: Row( - children: [ - Icon(Icons.play_arrow), - Text(FlutterI18n.translate(context, 'label.playAll')) - ], - ), - ), - ); - } - - buildDefault() { - return Section( - title: FlutterI18n.translate(context, 'label.highlighted'), - horizontal: true, - children: [0, 1, 2].map((i) => SongCardPlaceholder()).toList()); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.highlighted$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildHasData(snapshot.data); - } else if (snapshot.hasError) { - print(snapshot.error.toString()); - } - return buildDefault(); - }, - ); - } -} diff --git a/lib/pages/main/home_tab.dart b/lib/pages/main/home_tab.dart deleted file mode 100644 index 15acaa00..00000000 --- a/lib/pages/main/home_tab.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/home_bloc.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/pages/album/album_page.dart'; -import 'package:vocadb/pages/artist/artist_page.dart'; -import 'package:vocadb/pages/main/highlighted_list.dart'; -import 'package:vocadb/pages/main/latest_album_list.dart'; -import 'package:vocadb/pages/main/top_album_list.dart'; -import 'package:vocadb/pages/release_event/release_event_page.dart'; -import 'package:vocadb/pages/song/song_page.dart'; -import 'package:vocadb/pages/tag/tag_page.dart'; -import 'package:vocadb/widgets/event_tile.dart'; -import 'package:vocadb/widgets/section.dart'; - -class HomeTab extends StatefulWidget { - @override - _HomeTabState createState() => _HomeTabState(); -} - -class _HomeTabState extends State { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return SafeArea( - child: ListView( - children: [ - SizedBox( - height: 16, - ), - Center( - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.center, - runSpacing: 24.0, - children: [ - ShortcutMenuButton( - title: FlutterI18n.translate(context, 'label.songs'), - iconData: Icons.music_note, - onPressed: () => SongPage.navigate(context)), - ShortcutMenuButton( - title: FlutterI18n.translate(context, 'label.artists'), - iconData: Icons.person, - onPressed: () => ArtistPage.navigate(context)), - ShortcutMenuButton( - title: FlutterI18n.translate(context, 'label.albums'), - iconData: Icons.album, - onPressed: () => AlbumScreen.navigate(context)), - ShortcutMenuButton( - title: FlutterI18n.translate(context, 'label.tags'), - iconData: Icons.label, - onPressed: () => TagScreen.navigate(context)), - ShortcutMenuButton( - title: FlutterI18n.translate(context, 'label.events'), - iconData: Icons.event, - onPressed: () => ReleaseEventScreen.navigate(context)), - ], - ), - ), - SizedBox( - height: 8, - ), - HighlightedList(), - LatestAlbumList(), - TopAlbumList(), - StreamBuilder( - stream: Provider.of(context).recentEvents$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - List releaseEvents = snapshot.data; - return Section( - title: FlutterI18n.translate(context, 'label.upcomingEvent'), - children: releaseEvents - .map((e) => EventTile.fromReleaseEvent(e, - tag: 'recent_event_${e.id}')) - .toList(), - ); - }, - ), - ], - ), - ); - } -} - -class ShortcutMenuButton extends StatelessWidget { - final String title; - final IconData iconData; - final Function onPressed; - - const ShortcutMenuButton({Key key, this.title, this.iconData, this.onPressed}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - RawMaterialButton( - onPressed: this.onPressed, - child: Icon( - iconData, - color: Theme.of(context).iconTheme.color, - size: 24.0, - ), - shape: CircleBorder(), - elevation: 2.0, - fillColor: Theme.of(context).cardColor, - padding: const EdgeInsets.all(15.0), - ), - Text(title) - ], - ); - } -} diff --git a/lib/pages/main/latest_album_list.dart b/lib/pages/main/latest_album_list.dart deleted file mode 100644 index 653fc623..00000000 --- a/lib/pages/main/latest_album_list.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/home_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/album_card.dart'; -import 'package:vocadb/widgets/section.dart'; - -class LatestAlbumList extends StatefulWidget { - @override - _LatestAlbumListState createState() => _LatestAlbumListState(); -} - -class _LatestAlbumListState extends State { - buildHasData(List albums) { - List albumCards = albums - .map((album) => - AlbumCard.album(album, tag: 'latest_album_list_${album.id}')) - .toList(); - return Section( - title: FlutterI18n.translate(context, 'label.recentAlbums'), - horizontal: true, - children: albumCards); - } - - buildDefault() { - return Section( - title: FlutterI18n.translate(context, 'label.recentAlbums'), - horizontal: true, - children: [0, 1, 2].map((i) => AlbumCardPlaceholder()).toList()); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.latestAlbums$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildHasData(snapshot.data); - } else if (snapshot.hasError) { - print(snapshot.error.toString()); - } - return buildDefault(); - }, - ); - } -} diff --git a/lib/pages/main/ranking_filter_page.dart b/lib/pages/main/ranking_filter_page.dart deleted file mode 100644 index 28b96de5..00000000 --- a/lib/pages/main/ranking_filter_page.dart +++ /dev/null @@ -1,135 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; - -class RankingFilterPage extends StatefulWidget { - static navigate(BuildContext context) { - Navigator.push( - context, MaterialPageRoute(builder: (context) => RankingFilterPage())); - } - - @override - _RankingFilterPageState createState() => _RankingFilterPageState(); -} - -class _RankingFilterPageState extends State { - @override - void initState() { - super.initState(); - } - - buildFilterBy(ConfigBloc configBloc) { - return StreamBuilder( - stream: configBloc.rankingFilterBy$, - builder: (context, snapshot) { - String value = snapshot.data; - - return Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text(FlutterI18n.translate(context, 'label.filterBy'), - style: Theme.of(this.context).textTheme.title), - ), - ListTile( - title: Text(FlutterI18n.translate(context, 'ranking.newlyAdded')), - leading: Radio( - value: null, - groupValue: value, - onChanged: configBloc.updateRankingFilterBy, - ), - ), - ListTile( - title: Text( - FlutterI18n.translate(context, 'ranking.newlyPublished')), - leading: Radio( - value: 'PublishDate', - groupValue: value, - onChanged: configBloc.updateRankingFilterBy, - ), - ), - ListTile( - title: Text(FlutterI18n.translate(context, 'ranking.popularity')), - leading: Radio( - value: 'Popularity', - groupValue: value, - onChanged: configBloc.updateRankingFilterBy, - ), - ), - ], - ); - }, - ); - } - - buildVocalist(ConfigBloc configBloc) { - return StreamBuilder( - stream: configBloc.rankingVocalist$, - builder: (context, snapshot) { - String value = snapshot.data; - - return Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text(FlutterI18n.translate(context, 'label.vocalist'), - style: Theme.of(this.context).textTheme.title), - ), - ListTile( - title: - Text(FlutterI18n.translate(context, 'ranking.allVocalists')), - leading: Radio( - value: null, - groupValue: value, - onChanged: configBloc.updateRankingVocalist, - ), - ), - ListTile( - title: - Text(FlutterI18n.translate(context, 'ranking.onlyVocaloid')), - leading: Radio( - value: 'Vocaloid', - groupValue: value, - onChanged: configBloc.updateRankingVocalist, - ), - ), - ListTile( - title: Text(FlutterI18n.translate(context, 'ranking.onlyUTAU')), - leading: Radio( - value: 'UTAU', - groupValue: value, - onChanged: configBloc.updateRankingVocalist, - ), - ), - ListTile( - title: - Text(FlutterI18n.translate(context, 'ranking.otherVocalist')), - leading: Radio( - value: 'CeVIO', - groupValue: value, - onChanged: configBloc.updateRankingVocalist, - ), - ), - ], - ); - }, - ); - } - - @override - Widget build(BuildContext context) { - final ConfigBloc configBloc = Provider.of(context); - - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Column( - children: [ - buildFilterBy(configBloc), - buildVocalist(configBloc) - ], - ), - ); - } -} diff --git a/lib/pages/main/ranking_tab.dart b/lib/pages/main/ranking_tab.dart deleted file mode 100644 index 723ddf47..00000000 --- a/lib/pages/main/ranking_tab.dart +++ /dev/null @@ -1,143 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/ranking_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/song_tile.dart'; - -class RankingTab extends StatefulWidget { - @override - _RankingTabState createState() => _RankingTabState(); -} - -class _RankingTabState extends State - with SingleTickerProviderStateMixin { - TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController( - vsync: this, length: constRankings.length, initialIndex: 1); - _tabController.addListener(onTabChanged); - } - - void onTabChanged() { - int currentIndex = _tabController.index; - Provider.of(context).updateIndex(currentIndex); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - StreamBuilder buildStreamContent(BuildContext context, Stream stream) { - return StreamBuilder( - stream: stream, - builder: (context, snapshot) { - if (snapshot.hasData) { - return RankingContent(songs: snapshot.data); - } else if (snapshot.hasError) { - return CenterResult.error(message: snapshot.error.toString()); - } - return CenterLoading(); - }, - ); - } - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final rankingBloc = Provider.of(context); - - List tabs = []; - List children = []; - - if (constRankings.contains('daily')) { - tabs.add(Tab(text: FlutterI18n.translate(context, 'ranking.daily'))); - children.add(buildStreamContent(context, rankingBloc.daily$)); - } - - if (constRankings.contains('weekly')) { - tabs.add(Tab(text: FlutterI18n.translate(context, 'ranking.weekly'))); - children.add(buildStreamContent(context, rankingBloc.weekly$)); - } - - if (constRankings.contains('monthly')) { - tabs.add(Tab(text: FlutterI18n.translate(context, 'ranking.monthly'))); - children.add(buildStreamContent(context, rankingBloc.monthly$)); - } - - if (constRankings.contains('overall')) { - tabs.add(Tab(text: FlutterI18n.translate(context, 'ranking.overall'))); - children.add(buildStreamContent(context, rankingBloc.overall$)); - } - - return SafeArea( - child: Scaffold( - appBar: TabBar( - controller: _tabController, - tabs: tabs, - labelColor: theme.textSelectionColor, - unselectedLabelColor: theme.textTheme.title.color, - ), - body: TabBarView( - controller: _tabController, - children: children, - ), - floatingActionButton: StreamBuilder( - stream: Provider.of(context).currentIndex, - initialData: 1, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return Container(); - } - - List songs = rankingBloc.currentSongs; - - if (songs == null || songs.isEmpty) { - return Container(); - } - - return FloatingActionButton( - onPressed: () => YoutubePlaylistScreen.navigate(context, songs, - title: FlutterI18n.translate(context, 'label.ranking')), - child: Icon(Icons.play_arrow), - ); - }, - ), - ), - ); - } -} - -class RankingContent extends StatelessWidget { - final List songs; - - const RankingContent({Key key, this.songs}) : super(key: key); - - @override - Widget build(BuildContext context) { - if (songs == null || songs.isEmpty) { - return CenterResult.error( - title: 'No songs found.', - ); - } - - return ListView.builder( - itemCount: songs.length, - itemBuilder: (context, index) { - SongModel song = songs[index]; - return SongTile.fromSong(songs[index], - leading: Text((index + 1).toString()), tag: 'ranking_${song.id}'); - }, - ); - } -} diff --git a/lib/pages/main/top_album_list.dart b/lib/pages/main/top_album_list.dart deleted file mode 100644 index 6446e6af..00000000 --- a/lib/pages/main/top_album_list.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/home_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/album_card.dart'; -import 'package:vocadb/widgets/section.dart'; - -class TopAlbumList extends StatefulWidget { - @override - _TopAlbumListState createState() => _TopAlbumListState(); -} - -class _TopAlbumListState extends State { - buildHasData(List albums) { - List albumCards = albums - .map( - (album) => AlbumCard.album(album, tag: 'popular_album_${album.id}')) - .toList(); - return Section( - title: FlutterI18n.translate(context, 'label.randomPopularAlbums'), - horizontal: true, - children: albumCards); - } - - buildDefault() { - return Section( - title: FlutterI18n.translate(context, 'label.randomPopularAlbums'), - horizontal: true, - children: [0, 1, 2].map((i) => AlbumCardPlaceholder()).toList()); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.topAlbums$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildHasData(snapshot.data); - } else if (snapshot.hasError) { - print(snapshot.error.toString()); - } - return buildDefault(); - }, - ); - } -} diff --git a/lib/pages/release_event/release_event_page.dart b/lib/pages/release_event/release_event_page.dart deleted file mode 100644 index 4a3bd718..00000000 --- a/lib/pages/release_event/release_event_page.dart +++ /dev/null @@ -1,163 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/release_event_bloc.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/pages/search/release_event_filter_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/event_tile.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; - -class ReleaseEventScreen { - static const String routeName = '/releaseEvents'; - - static void navigate(BuildContext context) { - Navigator.pushNamed(context, ReleaseEventScreen.routeName); - } -} - -class ReleaseEventPage extends StatefulWidget { - @override - _ReleaseEventPageState createState() => _ReleaseEventPageState(); -} - -class _ReleaseEventPageState extends State { - final TextEditingController _controller = TextEditingController(); - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildData(List releaseEvents) { - if (releaseEvents.length == 0) { - return CenterResult( - result: Result( - Icon(Icons.event), - FlutterI18n.translate(context, 'error.searchResultNotMatched'), - ), - ); - } - - return InfiniteListView( - itemCount: releaseEvents.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - ReleaseEventModel e = releaseEvents[index]; - return EventTile.fromReleaseEvent(e, tag: 'release_event_${e.id}'); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(FlutterI18n.translate(context, 'label.releaseEvents')), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () => bloc.openSearch(), - ); - }), - IconButton( - icon: Icon(Icons.filter_list), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => ReleaseEventFilterPage( - bloc: bloc.releaseEventFilterBloc))); - }, - ), - ], - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/search/artist_stream_filter.dart b/lib/pages/search/artist_stream_filter.dart deleted file mode 100644 index fff55264..00000000 --- a/lib/pages/search/artist_stream_filter.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/artist_model.dart'; - -class ArtistStreamFilters extends StatelessWidget { - final Function onBrowseArtists; - final Stream artists$; - final Function onDeleteArtist; - - const ArtistStreamFilters( - {Key key, this.onBrowseArtists, this.artists$, this.onDeleteArtist}) - : super(key: key); - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - title: Text( - FlutterI18n.translate(context, 'label.artists'), - ), - ), - StreamBuilder( - stream: artists$, - builder: (context, snapshot) { - List artists = (snapshot.hasData) - ? (snapshot.data as Map).values.toList() - : []; - - if (artists.length == 0) return Container(); - - return Column( - children: artists - .map((v) => ListTile( - onTap: () {}, - trailing: IconButton( - icon: Icon(Icons.close), - onPressed: () { - this.onDeleteArtist(v); - }, - ), - leading: buildLeading(v.imageUrl), - title: Text(v.name), - subtitle: Text(v.artistType), - )) - .toList(), - ); - }, - ), - ListTile( - onTap: () { - this.onBrowseArtists(); - }, - leading: Icon(Icons.add), - title: Text('ADD ARTIST'), - ), - ], - ); - } -} diff --git a/lib/pages/search/more_album_page.dart b/lib/pages/search/more_album_page.dart deleted file mode 100644 index f69b0c47..00000000 --- a/lib/pages/search/more_album_page.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_album_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/album_tile.dart'; - -class MoreAlbumScreenArguments { - final String title; - final Map params; - - MoreAlbumScreenArguments(this.title, {this.params}); -} - -class MoreAlbumScreen extends StatelessWidget { - static const String routeName = '/albums/more'; - - static void navigate(BuildContext context, String title, - {Map params}) { - Navigator.pushNamed(context, MoreAlbumScreen.routeName, - arguments: MoreAlbumScreenArguments(title, params: params)); - } - - static void showLatestByArtist( - BuildContext context, String title, int artistId) { - Map params = { - 'artistId': artistId.toString(), - 'sort': 'ReleaseDate', - 'fields': 'MainPicture', - 'maxResults': '50' - }; - - navigate(context, title, params: params); - } - - static void showTopByArtist( - BuildContext context, String title, int artistId) { - Map params = { - 'artistId': artistId.toString(), - 'sort': 'RatingAverage', - 'fields': 'MainPicture', - 'maxResults': '50' - }; - - navigate(context, title, params: params); - } - - @override - Widget build(BuildContext context) { - final MoreAlbumScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => - SearchAlbumBloc(params: args.params, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: MoreAlbumPage(title: args.title), - ); - } -} - -class MoreAlbumPage extends StatelessWidget { - final String title; - - const MoreAlbumPage({Key key, this.title = 'More albums'}) : super(key: key); - - Widget buildData(List albums) { - return ListView.builder( - itemCount: albums.length, - itemBuilder: (context, index) { - AlbumModel album = albums[index]; - return AlbumTile.fromEntry(album, tag: 'more_album_${album.id}'); - }, - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/search/more_song_page.dart b/lib/pages/search/more_song_page.dart deleted file mode 100644 index ffa82eab..00000000 --- a/lib/pages/search/more_song_page.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/search_song_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/song_tile.dart'; - -class MoreSongScreenArguments { - final String title; - final Map params; - - MoreSongScreenArguments(this.title, {this.params}); -} - -class MoreSongScreen extends StatelessWidget { - static const String routeName = '/songs/more'; - - static void navigate(BuildContext context, String title, - {Map params}) { - Navigator.pushNamed(context, MoreSongScreen.routeName, - arguments: MoreSongScreenArguments(title, params: params)); - } - - static void showLatestByArtist( - BuildContext context, String title, int artistId) { - Map params = { - 'artistId': artistId.toString(), - 'sort': 'PublishDate', - 'fields': 'MainPicture,ThumbUrl,PVs', - 'maxResults': '50' - }; - - navigate(context, title, params: params); - } - - static void showTopByArtist( - BuildContext context, String title, int artistId) { - Map params = { - 'artistId': artistId.toString(), - 'sort': 'RatingScore', - 'fields': 'MainPicture,ThumbUrl,PVs', - 'maxResults': '50' - }; - - navigate(context, title, params: params); - } - - @override - Widget build(BuildContext context) { - final MoreSongScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => - SearchSongBloc(params: args.params, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: MoreSongPage(title: args.title), - ); - } -} - -class MoreSongPage extends StatelessWidget { - final String title; - - const MoreSongPage({Key key, this.title = 'More songs'}) : super(key: key); - - Widget buildData(List songs) { - return ListView.builder( - itemCount: songs.length, - itemBuilder: (context, index) { - SongModel song = songs[index]; - return SongTile.fromSong(song, tag: 'more_song_${song.id}'); - }, - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/search/release_event_filter_page.dart b/lib/pages/search/release_event_filter_page.dart deleted file mode 100644 index 55244af0..00000000 --- a/lib/pages/search/release_event_filter_page.dart +++ /dev/null @@ -1,256 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/blocs/release_event_filter_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/artist_stream_filter.dart'; -import 'package:vocadb/pages/search/search_artist_page.dart'; -import 'package:vocadb/pages/search/search_tag_page.dart'; -import 'package:vocadb/pages/search/tag_stream_filter.dart'; -import 'package:vocadb/pages/setting/single_choice_page.dart'; - -class ReleaseEventFilterPage extends StatelessWidget { - final ReleaseEventFilterBloc bloc; - - const ReleaseEventFilterPage({Key key, this.bloc}) : super(key: key); - - void browseTags(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchTagPage(onSelected: bloc.addTag))); - } - - void browseArtists(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchArtistPage(onSelected: bloc.addArtist))); - } - - void selectFromDate(BuildContext context) { - showDatePicker( - context: context, - initialDate: DateTime.now(), - firstDate: DateTime(2005), - lastDate: DateTime(2030)) - .then(bloc.updateFromDate); - } - - void selectToDate(BuildContext context) { - showDatePicker( - context: context, - initialDate: DateTime.now(), - firstDate: DateTime(2005), - lastDate: DateTime(2030)) - .then(bloc.updateToDate); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Container( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - TagStreamFilters( - tags$: bloc.tags$, - onDeleteTag: (TagModel tag) { - bloc.removeTag(tag.id); - }, - onBrowseTags: () => browseTags(context), - ), - Divider(), - Padding( - padding: EdgeInsets.fromLTRB(16, 16, 0, 0), - child: Text( - FlutterI18n.translate(context, 'label.date'), - style: Theme.of(context).textTheme.subhead, - ), - ), - Container( - padding: EdgeInsets.fromLTRB(16, 16, 16, 16), - child: Row( - children: [ - Expanded( - child: RaisedButton( - color: Theme.of(context).cardColor, - padding: EdgeInsets.all(16.0), - onPressed: () => selectFromDate(context), - child: Row( - children: [ - Icon(Icons.calendar_today), - Container( - width: 8, - ), - StreamBuilder( - stream: bloc.fromDate$, - builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data != '') { - return Text(snapshot.data); - } - - return Text(FlutterI18n.translate( - context, 'label.from')); - }, - ), - ], - ), - ), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 4.0), - child: Text('-'), - ), - Expanded( - child: RaisedButton( - color: Theme.of(context).cardColor, - padding: EdgeInsets.all(16.0), - onPressed: () => selectToDate(context), - child: Row( - children: [ - Icon(Icons.calendar_today), - Container( - width: 8, - ), - StreamBuilder( - stream: bloc.toDate$, - builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data != '') { - return Text(snapshot.data); - } - - return Text( - FlutterI18n.translate(context, 'label.to')); - }, - ), - ], - ), - ), - ), - ], - ), - ), - Divider(), - ReleaseEventCategorySelector( - value: bloc.category, - onSelected: bloc.updateCategory, - ), - ReleaseEventSortSelector( - value: bloc.sort, - onSelected: bloc.updateSort, - ), - Divider(), - ArtistStreamFilters( - artists$: bloc.artists$, - onDeleteArtist: (ArtistModel artist) { - bloc.removeArtist(artist.id); - }, - onBrowseArtists: () => browseArtists(context), - ), - ], - ), - )); - } -} - -class ReleaseEventCategorySelector extends StatelessWidget { - final String value; - final Function onSelected; - - const ReleaseEventCategorySelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(constEventCategories - .map((v) => - ChoiceOption(FlutterI18n.translate(context, 'eventCategory.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.category'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.category')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'eventCategory.$value')), - ), - ], - ); - } -} - -class ReleaseEventSortSelector extends StatelessWidget { - final String value; - final Function onSelected; - final values = const ['Name', 'Date', 'AdditionDate']; - - const ReleaseEventSortSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(values - .map((v) => ChoiceOption(FlutterI18n.translate(context, 'sort.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.sort'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.sort')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'sort.$value')), - ), - ], - ); - } -} - -class Title extends StatelessWidget { - final String text; - - const Title({Key key, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text(this.text, style: Theme.of(context).textTheme.caption); - } -} diff --git a/lib/pages/search/search_album_filter_page.dart b/lib/pages/search/search_album_filter_page.dart deleted file mode 100644 index b0585a52..00000000 --- a/lib/pages/search/search_album_filter_page.dart +++ /dev/null @@ -1,208 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/blocs/search_album_filter_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/artist_stream_filter.dart'; -import 'package:vocadb/pages/search/search_artist_page.dart'; -import 'package:vocadb/pages/search/search_tag_page.dart'; -import 'package:vocadb/pages/search/tag_stream_filter.dart'; -import 'package:vocadb/pages/setting/single_choice_page.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class SearchAlbumFilterPage extends StatelessWidget { - final SearchAlbumFilterBloc bloc; - - const SearchAlbumFilterPage({Key key, this.bloc}) : super(key: key); - - void browseTags(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchTagPage(onSelected: bloc.addTag))); - } - - void browseArtists(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchArtistPage(onSelected: bloc.addArtist))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Container( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - TagStreamFilters( - tags$: bloc.tags$, - onDeleteTag: (TagModel tag) { - bloc.removeTag(tag.id); - }, - onBrowseTags: () => browseTags(context), - ), - Divider(), - AlbumTypeSelector( - value: bloc.albumType, - onSelected: bloc.updateAlbumType, - ), - AlbumSortSelector( - value: bloc.sort, - onSelected: bloc.updateSort, - ), - Divider(), - ArtistStreamFilters( - artists$: bloc.artists$, - onDeleteArtist: (ArtistModel artist) { - bloc.removeArtist(artist.id); - }, - onBrowseArtists: () => browseArtists(context), - ), - ], - ), - )); - } -} - -class AlbumTypeSelector extends StatelessWidget { - final String value; - final Function onSelected; - - const AlbumTypeSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(constAlbumTypes - .map((v) => - ChoiceOption(FlutterI18n.translate(context, 'discType.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.discType'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.discType')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'discType.$value')), - ), - ], - ); - } -} - -class AlbumSortDropDown extends StatelessWidget { - final sorts = const [ - {'name': 'Name', 'value': 'Name'}, - {'name': 'Addition date', 'value': 'AdditionDate'}, - {'name': 'Release date', 'value': 'ReleaseDate'}, - {'name': 'Rating average', 'value': 'RatingAverage'}, - {'name': 'Total score', 'value': 'RatingTotal'}, - {'name': 'Collection count', 'value': 'CollectionCount'}, - ]; - - final Function onChanged; - final String value; - - const AlbumSortDropDown({Key key, this.onChanged, this.value = 'Name'}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return DropdownButton( - value: this.value, - underline: Container(), - items: sorts - .map((st) => DropdownMenuItem( - value: st['value'], - child: Text( - FlutterI18n.translate(context, 'sort.${st['value']}')), - )) - .toList(), - onChanged: this.onChanged); - } -} - -class AlbumSortSelector extends StatelessWidget { - final String value; - final Function onSelected; - final values = const [ - 'Name', - 'AdditionDate', - 'ReleaseDate', - 'RatingAverage', - 'RatingTotal', - 'CollectionCount' - ]; - - const AlbumSortSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(values - .map((v) => ChoiceOption(FlutterI18n.translate(context, 'sort.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.sort'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.sort')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'sort.$value')), - ), - ], - ); - } -} - -class Title extends StatelessWidget { - final String text; - - const Title({Key key, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text(this.text, style: Theme.of(context).textTheme.caption); - } -} diff --git a/lib/pages/search/search_artist_filter_page.dart b/lib/pages/search/search_artist_filter_page.dart deleted file mode 100644 index 021b8406..00000000 --- a/lib/pages/search/search_artist_filter_page.dart +++ /dev/null @@ -1,158 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/blocs/search_artist_filter_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/search_tag_page.dart'; -import 'package:vocadb/pages/search/tag_stream_filter.dart'; -import 'package:vocadb/pages/setting/single_choice_page.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class SearchArtistFilterPage extends StatelessWidget { - final SearchArtistFilterBloc bloc; - - const SearchArtistFilterPage({Key key, this.bloc}) : super(key: key); - - void browseTags(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchTagPage(onSelected: bloc.addTag))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Container( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - TagStreamFilters( - tags$: bloc.tags$, - onDeleteTag: (TagModel tag) { - bloc.removeTag(tag.id); - }, - onBrowseTags: () => browseTags(context), - ), - Divider(), - ArtistTypeSelector( - value: bloc.artistType, - onSelected: bloc.updateArtistType, - ), - Divider(), - ArtistSortSelector( - value: bloc.sort, - onSelected: bloc.updateSort, - ), - ], - ), - )); - } -} - -class ArtistTypeSelector extends StatelessWidget { - final String value; - final Function onSelected; - - const ArtistTypeSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(constArtistTypes - .map((v) => - ChoiceOption(FlutterI18n.translate(context, 'artistType.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.artistType'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.artistType')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'artistType.$value')), - ), - ], - ); - } -} - -class ArtistSortSelector extends StatelessWidget { - final String value; - final Function onSelected; - final values = const [ - 'Name', - 'AdditionDate', - 'AdditionDateAsc', - 'ReleaseDate', - 'SongCount', - 'SongRating', - 'FollowerCount', - ]; - - const ArtistSortSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(values - .map((v) => ChoiceOption(FlutterI18n.translate(context, 'sort.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.sort'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.sort')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'sort.$value')), - ), - ], - ); - } -} - -class Title extends StatelessWidget { - final String text; - - const Title({Key key, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text(this.text, style: Theme.of(context).textTheme.caption); - } -} diff --git a/lib/pages/search/search_artist_page.dart b/lib/pages/search/search_artist_page.dart deleted file mode 100644 index 06f0fc6d..00000000 --- a/lib/pages/search/search_artist_page.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:vocadb/blocs/search_artist_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/widgets/result.dart'; - -class SearchArtistPage extends StatefulWidget { - final Function onSelected; - - const SearchArtistPage({Key key, this.onSelected}) : super(key: key); - - @override - _SearchArtistPageState createState() => _SearchArtistPageState(); -} - -class _SearchArtistPageState extends State { - final SearchArtistBloc bloc = SearchArtistBloc(); - - Widget buildData(List artists) { - return ListView.builder( - itemCount: artists.length, - itemBuilder: (context, index) { - ArtistModel artist = artists[index]; - return ListTile( - onTap: () { - widget.onSelected(artist); - Navigator.pop(context); - }, - leading: buildLeading(artist.imageUrl), - title: Text(artist.name), - subtitle: Text(artist.artistType), - ); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Row( - children: [ - Expanded( - child: TextField( - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - decoration: InputDecoration( - border: InputBorder.none, hintText: "Find artist"), - ), - ), - ], - ), - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - ); - } -} diff --git a/lib/pages/search/search_entry_filter_page.dart b/lib/pages/search/search_entry_filter_page.dart deleted file mode 100644 index 16a51424..00000000 --- a/lib/pages/search/search_entry_filter_page.dart +++ /dev/null @@ -1,154 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/blocs/search_entry_filter_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/search_tag_page.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class SearchEntryFilterPage extends StatelessWidget { - final SearchEntryFilterBloc bloc; - - const SearchEntryFilterPage({Key key, this.bloc}) : super(key: key); - - void browseTags(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchTagPage(onSelected: bloc.addTag))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Container( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - Title( - text: FlutterI18n.translate(context, 'label.tags'), - ), - SpaceDivider(), - StreamBuilder( - stream: bloc.tags$, - builder: (context, snapshot) { - List tags = (snapshot.hasData) - ? (snapshot.data as Map).values.toList() - : []; - - return TagFilters( - tags: tags, - onBrowseTags: () { - browseTags(context); - }, - onDeleteTag: (TagModel t) { - bloc.removeTag(t.id); - }, - ); - }, - ), - SpaceDivider(), - Title( - text: FlutterI18n.translate(context, 'label.sort'), - ), - StreamBuilder( - stream: bloc.sort$, - builder: (context, snapshot) { - return EntrySortDropDown( - value: snapshot.data ?? 'Name', - onChanged: bloc.updateSort, - ); - }, - ), - SpaceDivider(), - ], - ), - )); - } -} - -class TagFilters extends StatelessWidget { - final Function onBrowseTags; - final List tags; - final Function onDeleteTag; - - const TagFilters({Key key, this.onBrowseTags, this.tags, this.onDeleteTag}) - : super(key: key); - - List buildChildren(BuildContext context) { - List children = []; - - if (tags != null && tags.length > 0) { - children.addAll(tags - .map((t) => Chip( - label: Text(t.name), - onDeleted: () { - this.onDeleteTag(t); - }, - deleteIcon: Icon(Icons.close), - )) - .toList()); - } - - children.add(InputChip( - label: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Icon(Icons.add), - Text(FlutterI18n.translate(context, 'label.add')) - ], - ), - onPressed: this.onBrowseTags, - )); - - return children; - } - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 8.0, - children: buildChildren(context), - ); - } -} - -class EntrySortDropDown extends StatelessWidget { - final sorts = const [ - {'name': 'Name', 'value': 'Name'}, - {'name': 'Addition date', 'value': 'AdditionDate'}, - ]; - - final Function onChanged; - final String value; - - const EntrySortDropDown({Key key, this.onChanged, this.value = 'Name'}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return DropdownButton( - value: this.value, - underline: Container(), - items: sorts - .map((st) => DropdownMenuItem( - value: st['value'], - child: Text( - FlutterI18n.translate(context, 'sort.${st['value']}')), - )) - .toList(), - onChanged: this.onChanged); - } -} - -class Title extends StatelessWidget { - final String text; - - const Title({Key key, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text(this.text, style: Theme.of(context).textTheme.caption); - } -} diff --git a/lib/pages/search/search_page.dart b/lib/pages/search/search_page.dart deleted file mode 100644 index aabb1db9..00000000 --- a/lib/pages/search/search_page.dart +++ /dev/null @@ -1,259 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/search_bloc.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/pages/search/search_entry_filter_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/entry_tile.dart'; -import 'package:vocadb/widgets/result.dart'; - -class SearchScreen { - static const String routeName = '/search'; - - static void navigate(BuildContext context) { - Navigator.pushNamed(context, SearchScreen.routeName); - } -} - -class SearchPage extends StatefulWidget { - @override - _SearchPageState createState() => _SearchPageState(); -} - -class _SearchPageState extends State { - @override - void initState() { - super.initState(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - } - - void onChangeEntryType(EntryType entryType) { - Provider.of(context).updateEntryType(entryType); - } - - void _showModalBottomSheet(context) { - showModalBottomSheet( - context: context, - builder: (BuildContext bc) { - final bloc = Provider.of(context); - return Container( - child: Wrap( - children: [ - ListTile( - leading: Icon(Icons.search), - selected: bloc.entryType == EntryType.Undefined, - title: - Text(FlutterI18n.translate(context, 'label.anything')), - onTap: () { - onChangeEntryType(EntryType.Undefined); - Navigator.pop(context); - }), - ListTile( - leading: Icon(Icons.music_note), - selected: bloc.entryType == EntryType.Song, - title: Text(FlutterI18n.translate(context, 'label.song')), - onTap: () { - onChangeEntryType(EntryType.Song); - Navigator.pop(context); - }), - ListTile( - leading: Icon(Icons.person), - selected: bloc.entryType == EntryType.Artist, - title: - Text(FlutterI18n.translate(context, 'label.artists')), - onTap: () { - onChangeEntryType(EntryType.Artist); - Navigator.pop(context); - }), - ListTile( - leading: Icon(Icons.album), - selected: bloc.entryType == EntryType.Album, - title: Text(FlutterI18n.translate(context, 'label.album')), - onTap: () { - onChangeEntryType(EntryType.Album); - Navigator.pop(context); - }), - ListTile( - leading: Icon(Icons.event), - selected: bloc.entryType == EntryType.ReleaseEvent, - title: Text(FlutterI18n.translate(context, 'label.event')), - onTap: () { - onChangeEntryType(EntryType.ReleaseEvent); - Navigator.pop(context); - }), - ], - ), - ); - }); - } - - Widget buildStreamResult() { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.resultStream, - builder: (context, snapshot) { - if (snapshot.hasData) { - return SearchResult(entries: snapshot.data); - } else if (snapshot.hasError) { - return CenterResult.error(message: snapshot.error.toString()); - } - - return CenterLoading(); - }, - ); - } - - void openFilterPage() { - final bloc = Provider.of(context); - - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchEntryFilterPage(bloc: bloc.entryFilterBloc))); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - floatingActionButton: FloatingActionButton( - onPressed: openFilterPage, - child: Icon(Icons.filter_list), - ), - appBar: AppBar( - title: Row( - children: [ - Expanded( - child: TextField( - onChanged: bloc.updateQuery, - autofocus: true, - style: Theme.of(context).primaryTextTheme.title, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate(context, 'label.search')), - ), - ), - Container( - width: 48, - child: IconButton( - icon: StreamBuilder( - stream: bloc.entryTypeStream, - builder: (context, snapshot) { - switch (snapshot.data) { - case EntryType.Song: - return Icon(Icons.music_note); - case EntryType.Artist: - return Icon(Icons.person); - case EntryType.Album: - return Icon(Icons.album); - case EntryType.ReleaseEvent: - return Icon(Icons.event); - default: - return Icon(Icons.search); - } - }, - ), - onPressed: () { - _showModalBottomSheet(context); - }, - ), - ), - ], - ), - ), - body: StreamBuilder( - stream: bloc.isSearching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? buildStreamResult() - : Center( - child: Text('Search anything here'), - ); - }, - ), - ); - } -} - -class SearchResult extends StatelessWidget { - final List entries; - - const SearchResult({Key key, this.entries}) : super(key: key); - - Widget buildHasData(BuildContext context, List entries) { - if (entries.isEmpty) return buildEmpty(context); - - List contents = []; - - EntryList entryList = EntryList(entries); - - if (entryList.songs.length > 0) { - contents.add(buildSection( - FlutterI18n.translate(context, 'label.songs'), entryList.songs)); - } - - if (entryList.artists.length > 0) { - contents.add(buildSection( - FlutterI18n.translate(context, 'label.artists'), entryList.artists)); - } - - if (entryList.albums.length > 0) { - contents.add(buildSection( - FlutterI18n.translate(context, 'label.albums'), entryList.albums)); - } - - if (entryList.releaseEvents.length > 0) { - contents.add(buildSection( - FlutterI18n.translate(context, 'label.releaseEvents'), - entryList.releaseEvents)); - } - - return ListView.builder( - itemCount: contents.length, - itemBuilder: (context, index) { - return contents[index]; - }, - ); - } - - Widget buildInitial() { - return Center( - child: Result(Icon(Icons.search, size: 48), 'Find anythings here.'), - ); - } - - Widget buildEmpty(BuildContext context) { - return Center( - child: Result(Icon(Icons.search, size: 48), - FlutterI18n.translate(context, 'error.searchResultNotMatched')), - ); - } - - Widget buildSection(String title, List entries) { - List children = [ - Container( - margin: EdgeInsets.all(8.0), - child: Text(title), - ) - ]; - - children.addAll(entries.map((e) => EntryTile(e)).toList()); - - return Column( - children: children, - ); - } - - @override - Widget build(BuildContext context) { - return buildHasData(context, this.entries); - } -} diff --git a/lib/pages/search/search_song_filter_page.dart b/lib/pages/search/search_song_filter_page.dart deleted file mode 100644 index cc55d112..00000000 --- a/lib/pages/search/search_song_filter_page.dart +++ /dev/null @@ -1,175 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/blocs/search_song_filter_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/artist_stream_filter.dart'; -import 'package:vocadb/pages/search/search_artist_page.dart'; -import 'package:vocadb/pages/search/search_tag_page.dart'; -import 'package:vocadb/pages/search/tag_stream_filter.dart'; -import 'package:vocadb/pages/setting/single_choice_page.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class SearchSongFilterPage extends StatelessWidget { - final SearchSongFilterBloc bloc; - - const SearchSongFilterPage({Key key, this.bloc}) : super(key: key); - - void browseTags(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchTagPage(onSelected: bloc.addTag))); - } - - void browseArtists(BuildContext context) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchArtistPage(onSelected: bloc.addArtist))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.filter'))), - body: Container( - padding: EdgeInsets.all(8.0), - child: ListView( - children: [ - TagStreamFilters( - tags$: bloc.tags$, - onDeleteTag: (TagModel tag) { - bloc.removeTag(tag.id); - }, - onBrowseTags: () => browseTags(context), - ), - Divider(), - SongTypeSelector( - value: bloc.songType, - onSelected: bloc.updateSongType, - ), - SongSortSelector( - value: bloc.sort, - onSelected: bloc.updateSort, - ), - Divider(), - ArtistStreamFilters( - artists$: bloc.artists$, - onDeleteArtist: (ArtistModel artist) { - bloc.removeArtist(artist.id); - }, - onBrowseArtists: () => browseArtists(context), - ), - ], - ), - )); - } -} - -class SongTypeSelector extends StatelessWidget { - final String value; - final Function onSelected; - - const SongTypeSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(constSongTypes - .map((v) => - ChoiceOption(FlutterI18n.translate(context, 'songType.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.songType'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.songType')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'songType.$value')), - ), - ], - ); - } -} - -class SongSortSelector extends StatelessWidget { - final String value; - final Function onSelected; - final values = const [ - 'Name', - 'AdditionDate', - 'PublishDate', - 'FavoritedTimes', - 'RatingScore' - ]; - - const SongSortSelector({Key key, this.value, this.onSelected}) - : super(key: key); - - List options(BuildContext context) { - List options = []; - options.add(ChoiceOption( - FlutterI18n.translate(context, 'label.notSpecified'), null)); - options.addAll(values - .map((v) => ChoiceOption(FlutterI18n.translate(context, 'sort.$v'), v)) - .toList()); - - return options; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - onTap: () { - SingleChoicePage.navigate( - context, - title: FlutterI18n.translate(context, 'label.sort'), - options: options(context), - value: value, - onSelected: onSelected, - ); - }, - title: Text(FlutterI18n.translate(context, 'label.sort')), - subtitle: Text((value == null) - ? FlutterI18n.translate(context, 'label.notSpecified') - : FlutterI18n.translate(context, 'sort.$value')), - ), - ], - ); - } -} - -class Title extends StatelessWidget { - final String text; - - const Title({Key key, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text(this.text, style: Theme.of(context).textTheme.caption); - } -} diff --git a/lib/pages/search/search_tag_page.dart b/lib/pages/search/search_tag_page.dart deleted file mode 100644 index 3dc2fbe1..00000000 --- a/lib/pages/search/search_tag_page.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/blocs/search_tag_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/tag/tag_category_names.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; - -class SearchTagPage extends StatefulWidget { - final Function onSelected; - - const SearchTagPage({Key key, this.onSelected}) : super(key: key); - - @override - _SearchTagPageState createState() => _SearchTagPageState(); -} - -class _SearchTagPageState extends State { - final SearchTagBloc bloc = SearchTagBloc(); - - Widget buildData(List tags) { - return InfiniteListView( - itemCount: tags.length, - onReachLastItem: () { - bloc.fetchMore(); - }, - progressIndicator: - InfiniteListView.streamShowProgressIndicator(bloc.noMoreResult$), - itemBuilder: (context, index) { - TagModel tag = tags[index]; - return ListTile( - onTap: () { - widget.onSelected(tag); - Navigator.pop(context); - }, - title: Text(tag.name), - ); - }, - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - Widget buildSearchResult() { - return StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Row( - children: [ - Expanded( - child: TextField( - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - decoration: InputDecoration( - border: InputBorder.none, hintText: "Find tag"), - ), - ), - ], - ), - ), - body: StreamBuilder( - stream: bloc.query$, - builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data != '') { - return buildSearchResult(); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return TagCategoryNames(onSelectTag: (tag) { - widget.onSelected(tag); - Navigator.pop(context); - Navigator.pop(context); - }); - }, - ), - ); - } -} diff --git a/lib/pages/search/tag_stream_filter.dart b/lib/pages/search/tag_stream_filter.dart deleted file mode 100644 index 504f2558..00000000 --- a/lib/pages/search/tag_stream_filter.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/tag_model.dart'; - -class TagStreamFilters extends StatelessWidget { - final Function onBrowseTags; - final Stream tags$; - final Function onDeleteTag; - - const TagStreamFilters( - {Key key, this.onBrowseTags, this.tags$, this.onDeleteTag}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ListTile( - title: Text( - FlutterI18n.translate(context, 'label.tags'), - ), - ), - StreamBuilder( - stream: tags$, - builder: (context, snapshot) { - List tags = (snapshot.hasData) - ? (snapshot.data as Map).values.toList() - : []; - - if (tags.length == 0) return Container(); - - return Column( - children: tags - .map((tag) => ListTile( - leading: Icon(Icons.label), - title: Text(tag.name), - trailing: IconButton( - icon: Icon(Icons.close), - onPressed: () { - onDeleteTag(tag); - }), - )) - .toList(), - ); - }, - ), - ListTile( - onTap: () { - this.onBrowseTags(); - }, - leading: Icon(Icons.add), - title: Text('ADD TAG'), - ), - ], - ); - } -} diff --git a/lib/pages/setting/setting_page.dart b/lib/pages/setting/setting_page.dart deleted file mode 100644 index a2640d18..00000000 --- a/lib/pages/setting/setting_page.dart +++ /dev/null @@ -1,189 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/app_theme.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; - -class SettingPage extends StatefulWidget { - @override - _SettingPageState createState() => _SettingPageState(); -} - -class _SettingPageState extends State { - @override - void initState() { - super.initState(); - } - - buildThemeOptions(ConfigBloc configBloc) { - return StreamBuilder( - stream: configBloc.themeDataStream, - builder: (context, snapshot) { - ThemeEnum te = snapshot.data; - - return Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text(FlutterI18n.translate(context, 'label.theme'), - style: Theme.of(this.context).textTheme.title), - ), - ListTile( - title: const Text('Dark'), - leading: Radio( - value: ThemeEnum.Dark, - groupValue: te, - onChanged: configBloc.updateTheme, - ), - ), - ListTile( - title: const Text('Light'), - leading: Radio( - value: ThemeEnum.Light, - groupValue: te, - onChanged: configBloc.updateTheme, - ), - ), - ], - ); - }, - ); - } - - buildContentLang(ConfigBloc configBloc) { - return StreamBuilder( - stream: configBloc.contentLangStream, - builder: (context, snapshot) { - String value = snapshot.data; - - return Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.contentLanguage'), - style: Theme.of(this.context).textTheme.title), - ), - ListTile( - title: const Text('Original'), - leading: Radio( - value: 'Default', - groupValue: value, - onChanged: configBloc.updateContentLanguage, - ), - ), - ListTile( - title: const Text('English'), - leading: Radio( - value: 'English', - groupValue: value, - onChanged: configBloc.updateContentLanguage, - ), - ), - ListTile( - title: const Text('Romaji'), - leading: Radio( - value: 'Romaji', - groupValue: value, - onChanged: configBloc.updateContentLanguage, - ), - ), - ListTile( - title: const Text('Japanese'), - leading: Radio( - value: 'Japanese', - groupValue: value, - onChanged: configBloc.updateContentLanguage, - ), - ), - ], - ); - }, - ); - } - - buildUILanguage(ConfigBloc configBloc) { - return StreamBuilder( - stream: configBloc.uiLang$, - builder: (context, snapshot) { - String value = snapshot.data; - - return Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Text(FlutterI18n.translate(context, 'label.uiLanguage'), - style: Theme.of(this.context).textTheme.title), - ), - ListTile( - title: const Text('English'), - leading: Radio( - value: 'en', - groupValue: value, - onChanged: (String v) async { - await FlutterI18n.refresh( - context, Locale.fromSubtags(languageCode: v)); - configBloc.updateUILanguage(v); - }, - ), - ), - ListTile( - title: const Text('日本語 (Japanese)'), - leading: Radio( - value: 'ja', - groupValue: value, - onChanged: (String v) async { - await FlutterI18n.refresh( - context, Locale.fromSubtags(languageCode: v)); - configBloc.updateUILanguage(v); - }, - ), - ), - ListTile( - title: const Text('ไทย (Thai)'), - leading: Radio( - value: 'th', - groupValue: value, - onChanged: (String v) async { - await FlutterI18n.refresh( - context, Locale.fromSubtags(languageCode: v)); - configBloc.updateUILanguage(v); - }, - ), - ), - ListTile( - title: const Text('Melayu (Malay)'), - leading: Radio( - value: 'ms', - groupValue: value, - onChanged: (String v) async { - await FlutterI18n.refresh( - context, Locale.fromSubtags(languageCode: v)); - configBloc.updateUILanguage(v); - }, - ), - ), - ], - ); - }, - ); - } - - @override - Widget build(BuildContext context) { - final ConfigBloc configBloc = Provider.of(context); - - return Scaffold( - appBar: - AppBar(title: Text(FlutterI18n.translate(context, 'label.settings'))), - body: ListView( - children: [ - buildThemeOptions(configBloc), - buildContentLang(configBloc), - buildUILanguage(configBloc), - ], - ), - ); - } -} diff --git a/lib/pages/setting/single_choice_page.dart b/lib/pages/setting/single_choice_page.dart deleted file mode 100644 index b4f619a3..00000000 --- a/lib/pages/setting/single_choice_page.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter/material.dart'; - -class SingleChoicePage extends StatefulWidget { - final String title; - final List options; - final T value; - final Function onSelected; - - const SingleChoicePage( - {Key key, this.title, this.options, this.value, this.onSelected}) - : super(key: key); - - static navigate(BuildContext context, - {String title, - List options, - dynamic value, - Function onSelected}) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SingleChoicePage( - title: title, - options: options, - value: value, - onSelected: onSelected, - ))); - } - - @override - _SingleChoicePageState createState() => _SingleChoicePageState(); -} - -class _SingleChoicePageState extends State { - dynamic _currentValue; - - @override - void initState() { - super.initState(); - setState(() { - _currentValue = widget.value; - }); - } - - void onChanged(dynamic value) { - setState(() { - _currentValue = value; - }); - widget.onSelected(value); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), - body: ListView.builder( - itemCount: widget.options.length, - itemBuilder: (context, index) => RadioListTile( - title: Text(widget.options[index].label), - value: widget.options[index].value, - groupValue: _currentValue, - onChanged: onChanged, - ), - ), - ); - } -} - -class ChoiceOption { - final String label; - final T value; - - ChoiceOption(this.label, this.value); -} diff --git a/lib/pages/song/song_page.dart b/lib/pages/song/song_page.dart deleted file mode 100644 index 17074dda..00000000 --- a/lib/pages/song/song_page.dart +++ /dev/null @@ -1,201 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/song_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/search/search_song_filter_page.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/song_tile.dart'; - -class SongPageArguments { - final bool openSearch; - - SongPageArguments({this.openSearch}); -} - -class SongPage extends StatefulWidget { - static const String routeName = '/songs'; - - static void navigate(BuildContext context, {bool openSearch = false}) { - Navigator.pushNamed(context, SongPage.routeName, - arguments: SongPageArguments(openSearch: openSearch)); - } - - @override - _SongPageState createState() => _SongPageState(); -} - -class _SongPageState extends State { - final TextEditingController _controller = TextEditingController(); - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - final SongPageArguments args = ModalRoute.of(context).settings.arguments; - final songBloc = Provider.of(context); - - if (args.openSearch) { - songBloc.openSearch(); - } - } - - Widget buildData(List songs) { - if (songs.length == 0) { - return CenterResult( - result: Result( - Icon(Icons.search), - FlutterI18n.translate(context, 'error.searchResultNotMatched'), - ), - ); - } - - return InfiniteListView( - itemCount: songs.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - SongModel song = songs[index]; - - return SongTile.fromSong(song); - }, - ); - } - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(FlutterI18n.translate(context, 'label.songs')), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () { - bloc.openSearch(); - }); - }), - IconButton( - icon: Icon(Icons.filter_list), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - SearchSongFilterPage(bloc: bloc.songFilterBloc))); - }, - ), - ], - ), - body: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ), - floatingActionButton: StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return Container(); - } - - List songs = snapshot.data; - - if (songs.indexWhere((s) => s.youtubePV != null) >= 0) { - return FloatingActionButton( - onPressed: () => YoutubePlaylistScreen.navigate(context, songs), - child: Icon(Icons.play_arrow), - ); - } - - return Container(); - }, - )); - } -} diff --git a/lib/pages/song_detail/lyric_content.dart b/lib/pages/song_detail/lyric_content.dart deleted file mode 100644 index 8b6113bf..00000000 --- a/lib/pages/song_detail/lyric_content.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/lyric_content_bloc.dart'; -import 'package:vocadb/models/lyric_model.dart'; - -class LyricContent extends StatelessWidget { - final List lyrics; - final GestureTapCallback onTapClose; - - LyricContent({Key key, this.onTapClose, this.lyrics}) : super(key: key); - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.selectedLyric$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - LyricModel selectedLyric = snapshot.data; - - return Container( - child: Column( - children: [ - InkWell( - onTap: this.onTapClose, - child: Container( - height: 36, - alignment: Alignment.center, - child: Icon(Icons.close), - ), - ), - Padding( - padding: EdgeInsets.only(right: 8.0, left: 8.0), - child: Row( - children: lyrics - .map((lyric) => lyric.translationType) - .map((translationType) => Container( - margin: EdgeInsets.only(right: 4.0), - child: InputChip( - backgroundColor: (translationType == - selectedLyric.translationType) - ? Theme.of(context) - .chipTheme - .selectedColor - : Theme.of(context) - .chipTheme - .backgroundColor, - onPressed: () => - bloc.changeTranslation(translationType), - label: Text(translationType), - ), - )) - .toList()), - ), - Expanded( - child: Padding( - padding: EdgeInsets.all(8.0), - child: - SingleChildScrollView(child: Text(selectedLyric.value)), - ), - ), - ], - ), - ); - }); - } -} diff --git a/lib/pages/song_detail/song_detail_page.dart b/lib/pages/song_detail/song_detail_page.dart deleted file mode 100644 index ceeafc84..00000000 --- a/lib/pages/song_detail/song_detail_page.dart +++ /dev/null @@ -1,606 +0,0 @@ -import 'dart:async'; - -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/favorite_song_bloc.dart'; -import 'package:vocadb/blocs/lyric_content_bloc.dart'; -import 'package:vocadb/blocs/song_detail_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/pv_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/pages/song_detail/lyric_content.dart'; -import 'package:vocadb/utils/analytic_constant.dart'; -import 'package:vocadb/widgets/CustomYoutubePlayer.dart'; -import 'package:vocadb/widgets/album_section.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; -import 'package:vocadb/widgets/like_button.dart'; -import 'package:vocadb/widgets/pv_tile.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/site_tile.dart'; -import 'package:vocadb/widgets/song_card.dart'; -import 'package:vocadb/widgets/song_tile.dart'; -import 'package:vocadb/widgets/space_divider.dart'; -import 'package:vocadb/widgets/tags.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; -import 'package:youtube_player_flutter/youtube_player_flutter.dart'; -import 'package:share/share.dart'; - -class SongDetailScreenArguments { - final int id; - final String name; - final String thumbUrl; - final String tag; - - SongDetailScreenArguments(this.id, {this.name, this.thumbUrl, this.tag}); -} - -class SongDetailScreen extends StatelessWidget { - static const String routeName = '/songDetail'; - - static void navigate(BuildContext context, int id, - {String name, String thumbUrl, String tag}) { - final analytics = Provider.of(context); - analytics.logSelectContent( - contentType: AnalyticContentType.song, itemId: id.toString()); - Navigator.pushNamed(context, SongDetailScreen.routeName, - arguments: SongDetailScreenArguments(id, - name: name, thumbUrl: thumbUrl, tag: tag)); - } - - @override - Widget build(BuildContext context) { - final SongDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => SongDetailBloc(args.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: SongDetailPage(args.id, args.name, args.thumbUrl, tag: args.tag), - ); - } -} - -class SongDetailPage extends StatefulWidget { - final int id; - final String name; - final String thumbUrl; - final String tag; - - const SongDetailPage(this.id, this.name, this.thumbUrl, {this.tag}); - - @override - _SongDetailPageState createState() => _SongDetailPageState(); -} - -class _SongDetailPageState extends State { - Widget buildHasData(SongModel song) { - return (song.youtubePV == null) - ? buildWithoutPlayer(song) - : buildWithPlayer(song); - } - - List actions() { - return [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ]; - } - - Widget buildWithPlayer(SongModel song) { - return Scaffold( - appBar: AppBar( - title: Text(song.name), - actions: actions(), - ), - body: Column( - children: [ - CustomYoutubePlayer( - url: song.youtubePV.url, - ), - Expanded( - child: StreamBuilder( - stream: Provider.of(context).showHideLyric$, - initialData: false, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return ListView( - children: buildDetailContent(song), - ); - } - - bool showLyric = snapshot.data; - - return AnimatedSwitcher( - duration: Duration(milliseconds: 300), - child: (showLyric) - ? Provider( - builder: (context) => LyricContentBloc(song.lyrics), - dispose: (context, bloc) => bloc.dispose(), - child: LyricContent( - lyrics: song.lyrics, - onTapClose: Provider.of(context) - .hideLyric), - ) - : ListView( - children: buildDetailContent(song), - ), - ); - }, - ), - ) - ], - ), - ); - } - - Widget buildImageWidget(String imageUrl) { - return imageUrl == null - ? Placeholder() - : CachedNetworkImage( - fit: BoxFit.cover, - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ); - } - - Widget buildWithoutPlayer(SongModel song) { - return Scaffold( - body: CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200, - title: Text(widget.name), - actions: actions(), - flexibleSpace: FlexibleSpaceBar( - background: Opacity( - opacity: 0.7, - child: (widget.tag == null || song.thumbUrl == null) - ? buildImageWidget(song.thumbUrl) - : Hero( - tag: widget.tag, - child: buildImageWidget(song.thumbUrl), - ), - ), - ), - ), - StreamBuilder( - stream: Provider.of(context).showHideLyric$, - initialData: false, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return SliverList( - delegate: - SliverChildListDelegate.fixed(buildDetailContent(song)), - ); - } - - bool showLyric = snapshot.data; - -// return SliverList( -// delegate: SliverChildListDelegate.fixed(buildDetailContent(song)), -// ); - - if (showLyric) { - return SliverFillRemaining( - child: buildLyricContent(song), - ); - } - - return SliverList( - delegate: SliverChildListDelegate.fixed(buildDetailContent(song)), - ); - }, - ), - ], - )); - } - - Widget buildLyricContent(SongModel song) { - return Provider( - builder: (context) => LyricContentBloc(song.lyrics), - dispose: (context, bloc) => bloc.dispose(), - child: LyricContent( - lyrics: song.lyrics, - onTapClose: Provider.of(context).hideLyric), - ); - } - - List buildDetailContent(SongModel song) { - List headerContent = []; - headerContent - .add(Text(song.name, style: Theme.of(context).textTheme.title)); - - if (song.additionalNames != null && song.additionalNames.isNotEmpty) { - headerContent.add(Text(song.additionalNames)); - } - - headerContent.add(SpaceDivider()); - headerContent.add(Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text(FlutterI18n.translate(context, 'songType.${song.songType}')), - (song.publishDateFormatted == null) ? Container() : Text(' • '), - (song.publishDateFormatted == null) - ? Container() - : Text( - FlutterI18n.translate(context, 'label.publishedOn', - {'date': song.publishDateFormatted}), - style: Theme.of(context).textTheme.caption) - ], - )); - - return [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: StreamBuilder( - stream: Provider.of(context).songs$, - builder: (context, snapshot) { - Map songMap = snapshot.data; - - if ((songMap != null && songMap.containsKey(song.id))) { - return LikeButton( - onPressed: () => Provider.of(context) - .remove(song.id), - isLiked: true, - ); - } - - return LikeButton( - onPressed: () => - Provider.of(context).add(song), - ); - }, - ), - ), - (song.lyrics.isEmpty) - ? Container() - : Expanded( - child: FlatButton( - onPressed: () => - Provider.of(context).showLyric(), - child: Column( - children: [ - Icon( - Icons.subtitles, - ), - Text(FlutterI18n.translate(context, 'label.lyrics'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () => Share.share('$HOST/S/${song.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - launch('$HOST/S/${song.id}'); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.info'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - ], - ), - ), - Padding( - padding: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: headerContent, - )), - Tags(song.tags), - Divider(), - Section( - title: FlutterI18n.translate(context, 'label.producers'), - children: song.producers - .map((a) => ArtistTile.artistSong(a, - tag: 'song_detail_producer_${song.id}_${a.artistId}')) - .toList(), - ), - SpaceDivider(), - Section( - title: FlutterI18n.translate(context, 'label.vocalists'), - children: song.vocalists - .map((a) => ArtistTile.artistSong(a, - tag: 'song_detail_vocalist_${song.id}_${a.artistId}')) - .toList(), - ), - SpaceDivider(), - Section( - title: FlutterI18n.translate(context, 'label.other'), - children: song.otherArtists - .map((a) => ArtistTile.artistSong(a, - showRole: true, - tag: 'song_detail_other_${song.id}_${a.artistId}')) - .toList(), - ), - Divider(), - PVSection( - pvs: song.pvs, - query: (song.pvs.length > 0) - ? song.pvs[0].name - : '${song.artistString}+${song.defaultName}', - ), - AlbumSection( - albums: song.albums, tagPrefix: 'song_detail_album_${song.id}'), - ContentSection( - title: FlutterI18n.translate(context, 'label.originalVersion'), - hide: !song.hasOriginalVersion, - child: StreamBuilder( - stream: Provider.of(context).originalVersion$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return SongTile.fromSong(snapshot.data, - tag: 'original_${song.id}_${song.originalVersionId}'); - } - return Container(); - }, - ), - ), - StreamBuilder( - stream: Provider.of(context).altVersions$, - builder: (context, snapshot) { - if (snapshot.hasData) { - List alts = snapshot.data; - - if (alts.isEmpty) return Container(); - - return Column( - children: [ - Section( - title: - FlutterI18n.translate(context, 'label.alternateVersion'), - horizontal: true, - children: alts - .map((SongModel alt) => SongCard.song(alt, - tag: 'song_alt_${song.id}_${alt.id}')) - .toList(), - ), - Divider() - ], - ); - } else { - return Container(); - } - }, - ), - StreamBuilder( - stream: Provider.of(context).relatedSongs$, - builder: (context, snapshot) { - if (snapshot.hasData) { - List relatedSongs = snapshot.data; - - List children = relatedSongs - .map((SongModel alt) => SongCard.song(alt, - tag: 'song_related_${song.id}_${alt.id}')) - .toList(); - return Column( - children: [ - Section( - title: FlutterI18n.translate(context, 'label.likeMatches'), - horizontal: true, - children: children, - ), - Divider() - ], - ); - } else { - return Container(); - } - }, - ), - WebLinkSection(webLinks: song.webLinks) - ]; - } - - Widget buildError(Object error) { - return Scaffold( - appBar: AppBar( - title: Text(widget.name), - actions: actions(), - ), - body: Column( - children: [ - Container( - height: 200, - child: (widget.thumbUrl == null || widget.tag == null) - ? buildImageWidget(widget.thumbUrl) - : Hero( - tag: widget.tag, - child: buildImageWidget(widget.thumbUrl), - ), - ), - Expanded( - child: Center( - child: - Result.error('Something wrong!', subtitle: error.toString()), - ), - ) - ], - ), - ); - } - - Widget buildDefault() { - Widget defaultWidget = (widget.thumbUrl == null || widget.tag == null) - ? Center( - child: CircularProgressIndicator(), - ) - : Column( - children: [ - Container( - height: 200, - width: double.infinity, - child: Hero( - tag: widget.tag, - child: CachedNetworkImage( - fit: BoxFit.cover, - imageUrl: widget.thumbUrl, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - ), - ), - Expanded( - child: Center( - child: CircularProgressIndicator(), - ), - ) - ], - ); - - return Scaffold( - appBar: AppBar(title: Text(widget.name), actions: actions()), - body: defaultWidget, - ); - } - - @override - Widget build(BuildContext context) { - return StreamBuilder( - stream: Provider.of(context).song$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildHasData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error); - } - - return buildDefault(); - }, - ); - } -} - -class PVSection extends StatelessWidget { - final String query; - final List pvs; - - const PVSection({Key key, this.pvs, this.query}) : super(key: key); - - @override - Widget build(BuildContext context) { - List children = []; - - if (pvs.length == 0) { - return Container(); - } - - final pvList = PVList(pvs); - - children.add(Padding( - padding: EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.originalMedia'), - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - )); - - List originalPVs = - pvList.originalPVs.map((pv) => PVTile(pv: pv)).toList(); - - children.addAll(originalPVs); - - List otherPVs = - pvList.otherPVs.map((pv) => PVTile(pv: pv)).toList(); - - if (otherPVs.length > 0) { - children.add(Padding( - padding: EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.otherMedia'), - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - )); - - children.addAll(otherPVs); - } - - if (!pvList.isContainsYoutube) { - children.add(SiteTile( - title: FlutterI18n.translate(context, 'label.searchYoutube'), - url: 'https://www.youtube.com/results?search_query=$query', - )); - } - - children.add(Divider()); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: children, - ); - } -} - -class ContentSection extends StatelessWidget { - final String title; - final Widget child; - final bool hide; - - const ContentSection({Key key, this.title, this.child, this.hide = false}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (hide) return Container(); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.original'), - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - ), - child - ], - ); - } -} diff --git a/lib/pages/tag/tag_category_names.dart b/lib/pages/tag/tag_category_names.dart deleted file mode 100644 index 5fc5acf9..00000000 --- a/lib/pages/tag/tag_category_names.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/pages/tag/tag_category_page.dart'; -import 'package:vocadb/constants.dart'; - -class TagCategoryNames extends StatelessWidget { - final Function onSelectCategory; - final Function onSelectTag; - - const TagCategoryNames({Key key, this.onSelectCategory, this.onSelectTag}) - : super(key: key); - - Widget buildData(BuildContext context, List names) { - return Column( - children: [ - Padding( - padding: EdgeInsets.all(16.0), - child: Text( - FlutterI18n.translate( - context, 'label.category'), - style: Theme.of(context).textTheme.title, - ), - ), - Expanded( - child: GridView.count( - primary: true, - crossAxisCount: 2, - childAspectRatio: 3, - padding: EdgeInsets.all(8.0), - crossAxisSpacing: 10, - mainAxisSpacing: 10, - children: List.generate(names.length, (index) { - String name = names[index]; - return RaisedButton( - color: Theme.of(context).backgroundColor, - onPressed: () => (onSelectCategory != null) - ? onSelectCategory(name) - : TagCategoryScreen.navigate(context, name, - onSelectTag: this.onSelectTag), - child: Text(name), - ); - })), - ) - ], - ); - } - - @override - Widget build(BuildContext context) { - return buildData(context, constTagCategories); - } -} diff --git a/lib/pages/tag/tag_category_page.dart b/lib/pages/tag/tag_category_page.dart deleted file mode 100644 index d21bc97e..00000000 --- a/lib/pages/tag/tag_category_page.dart +++ /dev/null @@ -1,191 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/tag_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/tag_detail/tag_detail_page.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; - -class TagCategoryScreenArguments { - final String category; - final Function onSelectTag; - - TagCategoryScreenArguments(this.category, {this.onSelectTag}); -} - -class TagCategoryScreen extends StatelessWidget { - static const String routeName = '/tags/category'; - - static void navigate(BuildContext context, String category, - {Function onSelectTag}) { - Navigator.pushNamed(context, TagCategoryScreen.routeName, - arguments: - TagCategoryScreenArguments(category, onSelectTag: onSelectTag)); - } - - @override - Widget build(BuildContext context) { - final TagCategoryScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => - TagBloc(configBloc: configBloc, category: args.category), - dispose: (context, bloc) => bloc.dispose(), - child: TagCategoryPage( - category: args.category, - onSelectTag: args.onSelectTag, - ), - ); - } -} - -class TagCategoryPage extends StatefulWidget { - final String category; - final Function onSelectTag; - - const TagCategoryPage({Key key, this.category, this.onSelectTag}) - : super(key: key); - - @override - _TagCategoryPageState createState() => _TagCategoryPageState(); -} - -class _TagCategoryPageState extends State { - final TextEditingController _controller = TextEditingController(); - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildData(List tags) { - return InfiniteListView( - itemCount: tags.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - TagModel tag = tags[index]; - return ListTile( - onTap: () { - if (widget.onSelectTag == null) { - TagDetailScreen.navigate(context, tag.id, tag.name); - } else { - widget.onSelectTag(tag); - } - }, - title: Text(tag.name), - ); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - Widget buildSearchResult() { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(widget.category), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () => bloc.openSearch(), - ); - }), - ], - ), - body: buildSearchResult(), - ); - } -} diff --git a/lib/pages/tag/tag_page.dart b/lib/pages/tag/tag_page.dart deleted file mode 100644 index 3dfccb95..00000000 --- a/lib/pages/tag/tag_page.dart +++ /dev/null @@ -1,170 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/tag_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/tag/tag_category_names.dart'; -import 'package:vocadb/pages/tag_detail/tag_detail_page.dart'; -import 'package:vocadb/widgets/infinite_list_view.dart'; -import 'package:vocadb/widgets/result.dart'; - -class TagScreen { - static const String routeName = '/tags'; - - static void navigate(BuildContext context) { - Navigator.pushNamed(context, TagScreen.routeName); - } -} - -class TagPage extends StatefulWidget { - final Function onSelectTag; - - const TagPage({Key key, this.onSelectTag}) : super(key: key); - - @override - _TagPageState createState() => _TagPageState(); -} - -class _TagPageState extends State { - final TextEditingController _controller = TextEditingController(); - - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Widget buildData(List tags) { - return InfiniteListView( - itemCount: tags.length, - onReachLastItem: () { - Provider.of(context).fetchMore(); - }, - progressIndicator: InfiniteListView.streamShowProgressIndicator( - Provider.of(context).noMoreResult$), - itemBuilder: (context, index) { - TagModel tag = tags[index]; - return ListTile( - onTap: () { - if (widget.onSelectTag == null) { - TagDetailScreen.navigate(context, tag.id, tag.name); - } else { - widget.onSelectTag(tag); - } - }, - title: Text(tag.name), - ); - }, - ); - } - - Widget buildLeading(String imageUrl) { - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: (imageUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - )), - ); - } - - Widget buildError(String message) { - return Center( - child: Result.error("Something wrongs", subtitle: message), - ); - } - - Widget buildDefault() { - return Center( - child: CircularProgressIndicator(), - ); - } - - Widget buildSearchResult() { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: bloc.result$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(snapshot.data); - } else if (snapshot.hasError) { - return buildError(snapshot.error.toString()); - } - - return buildDefault(); - }, - ); - } - - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return AnimatedSwitcher( - duration: Duration(milliseconds: 100), - child: (snapshot.hasData && snapshot.data) - ? Row( - children: [ - Expanded( - child: TextField( - controller: _controller, - onChanged: bloc.updateQuery, - style: Theme.of(context).primaryTextTheme.title, - autofocus: true, - decoration: InputDecoration( - border: InputBorder.none, - hintText: FlutterI18n.translate( - context, 'label.search')), - ), - ), - ], - ) - : Text(FlutterI18n.translate(context, 'label.tags')), - ); - }, - ), - actions: [ - StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - return (snapshot.hasData && snapshot.data) - ? IconButton( - icon: Icon(Icons.clear), - onPressed: () { - bloc.updateQuery(''); - _controller.clear(); - }, - ) - : IconButton( - icon: Icon(Icons.search), - onPressed: () => bloc.openSearch(), - ); - }), - ], - ), - body: StreamBuilder( - stream: bloc.searching$, - builder: (context, snapshot) { - if (snapshot.hasData && snapshot.data) { - return buildSearchResult(); - } - return TagCategoryNames(); - }, - ), - ); - } -} diff --git a/lib/pages/tag_detail/tag_detail_page.dart b/lib/pages/tag_detail/tag_detail_page.dart deleted file mode 100644 index 47e02d3f..00000000 --- a/lib/pages/tag_detail/tag_detail_page.dart +++ /dev/null @@ -1,317 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/tag_detail_bloc.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/utils/analytic_constant.dart'; -import 'package:vocadb/widgets/album_list_section.dart'; -import 'package:vocadb/widgets/artist_section.dart'; -import 'package:vocadb/widgets/expandable_content.dart'; -import 'package:vocadb/widgets/info_section.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/song_list_section.dart'; -import 'package:vocadb/widgets/tags.dart'; -import 'package:vocadb/widgets/text_info_section.dart'; -import 'package:vocadb/widgets/web_link_section.dart'; - -class TagDetailScreenArguments { - final int id; - final String name; - - TagDetailScreenArguments(this.id, this.name); -} - -class TagDetailScreen extends StatelessWidget { - static const String routeName = '/tagDetail'; - - static void navigate(BuildContext context, int id, String name) { - final analytics = Provider.of(context); - analytics.logSelectContent( - contentType: AnalyticContentType.tag, itemId: id.toString()); - - Navigator.pushNamed(context, TagDetailScreen.routeName, - arguments: TagDetailScreenArguments(id, name)); - } - - @override - Widget build(BuildContext context) { - final TagDetailScreenArguments args = - ModalRoute.of(context).settings.arguments; - final configBloc = Provider.of(context); - - return Provider( - builder: (context) => TagDetailBloc(args.id, configBloc: configBloc), - dispose: (context, bloc) => bloc.dispose(), - child: TagDetailPage(args.id, args.name), - ); - } -} - -class TagDetailPage extends StatelessWidget { - final int id; - final String name; - - const TagDetailPage(this.id, this.name); - - toTagDetailPage(BuildContext context, TagModel tagModel) { - TagDetailScreen.navigate(context, tagModel.id, tagModel.name); - } - - buildData(BuildContext context, TagModel tag) { - final bloc = Provider.of(context); - - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - flexibleSpace: FlexibleSpaceBar( - title: Text("#" + this.name), - background: (tag.imageUrl == null) - ? Container() - : CachedNetworkImage( - imageUrl: tag.imageUrl, - fit: BoxFit.cover, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ), - ), - ), - SliverList( - delegate: SliverChildListDelegate.fixed([ - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Expanded( - child: FlatButton( - onPressed: () => Share.share('$HOST/T/${tag.id}'), - child: Column( - children: [ - Icon( - Icons.share, - ), - Text(FlutterI18n.translate(context, 'label.share'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - Expanded( - child: FlatButton( - onPressed: () { - String url = '$HOST/T/${tag.id}'; - launch(url); - }, - child: Column( - children: [ - Icon( - Icons.info, - ), - Text(FlutterI18n.translate(context, 'label.info'), - style: TextStyle(fontSize: 12)) - ], - )), - ), - ], - ), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextInfoSection( - title: FlutterI18n.translate(context, 'label.name'), - text: tag.additionalNames, - ), - TextInfoSection( - title: FlutterI18n.translate(context, 'label.category'), - text: tag.categoryName, - ), - InfoSection( - title: FlutterI18n.translate(context, 'label.parentTag'), - visible: tag.parent != null, - child: Tag( - tag.parent, () => toTagDetailPage(context, tag.parent)), - ), - ], - ), - ), - (tag.description.isEmpty) - ? Container() - : ExpandableContent( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TextInfoSection( - title: FlutterI18n.translate( - context, 'label.description'), - text: tag.description, - ) - ], - ), - ), - ), - StreamBuilder( - stream: bloc.latestSongs$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - return SongListSection( - title: FlutterI18n.translate(context, 'label.recentSongsPVs'), - songs: snapshot.data, - horizontal: true, - prefixTag: 'tag_latest_song_${tag.id}', - ); - }, - ), - StreamBuilder( - stream: bloc.topSongs$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - return SongListSection( - title: FlutterI18n.translate(context, 'label.topSongs'), - songs: snapshot.data, - horizontal: true, - prefixTag: 'tag_top_song_${tag.id}', - ); - }, - ), - StreamBuilder( - stream: bloc.topAlbums$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - return AlbumListSection( - title: FlutterI18n.translate(context, 'label.topAlbums'), - albums: snapshot.data, - horizontal: true, - prefixTag: 'tag_top_album_${tag.id}', - ); - }, - ), - StreamBuilder( - stream: bloc.topArtists$, - builder: (context, snapshot) { - if (!snapshot.hasData) return Container(); - - return ArtistSection( - title: FlutterI18n.translate(context, 'label.topArtists'), - artists: snapshot.data, - prefixTag: 'tag_top_artist_${tag.id}', - ); - }, - ), - WebLinkSection( - webLinks: tag.webLinks, - title: FlutterI18n.translate(context, 'label.references')) - ]), - ) - ], - ); - } - - buildError(BuildContext context, Object error) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - SliverFillRemaining( - child: Center( - child: Result.error("Error", subtitle: error.toString()), - ), - ) - ], - ); - } - - buildLoading(BuildContext context) { - return CustomScrollView( - slivers: [ - SliverAppBar( - expandedHeight: 200.0, - pinned: true, - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - SliverFillRemaining( - child: Center( - child: CircularProgressIndicator(), - ), - ) - ], - ); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - body: StreamBuilder( - stream: Provider.of(context).tag$, - builder: (context, snapshot) { - if (snapshot.hasData) { - return buildData(context, snapshot.data); - } else if (snapshot.hasError) { - return buildError(context, snapshot.error.toString()); - } - - return buildLoading(context); - }, - ), - ); - } -} diff --git a/lib/pages/users/favorite_album_page.dart b/lib/pages/users/favorite_album_page.dart deleted file mode 100644 index 3b5f3f74..00000000 --- a/lib/pages/users/favorite_album_page.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/favorite_album_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/album_tile.dart'; - -class FavoriteAlbumScreen extends StatelessWidget { - static const String routeName = '/user/favoriteAlbums'; - - @override - Widget build(BuildContext context) { - return FavoriteAlbumPage(); - } -} - -class FavoriteAlbumPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: Text(FlutterI18n.translate(context, 'label.favoriteAlbums')), - ), - body: StreamBuilder( - stream: bloc.albums$, - builder: (context, snapshot) { - if (snapshot.hasError) - return CenterResult.error( - message: snapshot.error.toString(), - ); - - Map albumMap = snapshot.data; - - if (albumMap == null || albumMap.isEmpty) { - return CenterResult( - result: Result( - Icon(Icons.album), - FlutterI18n.translate( - context, 'error.emptyFavoriteAlbums'))); - } - List albums = albumMap.values.toList().reversed.toList(); - - return ListView.builder( - itemCount: albums.length, - itemBuilder: (context, index) { - final AlbumModel album = albums[index]; - return AlbumTile.fromEntry( - album, - tag: 'favorite_album_${album.id}', - ); - }, - ); - }, - ), - ); - } -} diff --git a/lib/pages/users/favorite_artist_page.dart b/lib/pages/users/favorite_artist_page.dart deleted file mode 100644 index e527edc2..00000000 --- a/lib/pages/users/favorite_artist_page.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/favorite_artist_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; - -class FavoriteArtistScreen extends StatelessWidget { - static const String routeName = '/user/favoriteArtists'; - - @override - Widget build(BuildContext context) { - return FavoriteArtistPage(); - } -} - -class FavoriteArtistPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: Text(FlutterI18n.translate(context, 'label.favoriteArtists')), - ), - body: StreamBuilder( - stream: bloc.artists$, - builder: (context, snapshot) { - if (snapshot.hasError) - return CenterResult.error( - message: snapshot.error.toString(), - ); - - Map artistMap = snapshot.data; - - if (artistMap == null || artistMap.isEmpty) { - return CenterResult( - result: Result( - Icon(Icons.people), - FlutterI18n.translate( - context, 'error.emptyFavoriteArtists'))); - } - List artists = - artistMap.values.toList().reversed.toList(); - - return ListView.builder( - itemCount: artists.length, - itemBuilder: (context, index) { - final ArtistModel artist = artists[index]; - return ArtistTile.fromEntry( - artist, - tag: 'favorite_artist_${artist.id}', - ); - }, - ); - }, - ), - ); - } -} diff --git a/lib/pages/users/favorite_song_page.dart b/lib/pages/users/favorite_song_page.dart deleted file mode 100644 index e1f75931..00000000 --- a/lib/pages/users/favorite_song_page.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/favorite_song_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/youtube_playlist/youtube_playlist_page.dart'; -import 'package:vocadb/widgets/center_content.dart'; -import 'package:vocadb/widgets/result.dart'; -import 'package:vocadb/widgets/song_tile.dart'; - -class FavoriteSongScreen extends StatelessWidget { - static const String routeName = '/user/favoriteSongs'; - - @override - Widget build(BuildContext context) { - return FavoriteSongPage(); - } -} - -class FavoriteSongPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - final bloc = Provider.of(context); - - return Scaffold( - appBar: AppBar( - title: Text(FlutterI18n.translate(context, 'label.favoriteSongs')), - ), - body: StreamBuilder( - stream: bloc.songs$, - builder: (context, snapshot) { - if (snapshot.hasError) - return CenterResult.error( - message: snapshot.error.toString(), - ); - - Map songMap = snapshot.data; - - if (songMap == null || songMap.isEmpty) { - return CenterResult( - result: Result( - Icon(Icons.music_note), - FlutterI18n.translate( - context, 'error.emptyFavoriteSongs'))); - } - List songs = songMap.values.toList().reversed.toList(); - - return ListView.builder( - itemCount: songs.length, - itemBuilder: (context, index) { - final SongModel song = songs[index]; - return SongTile.fromSong( - song, - tag: 'favorite_song_${song.id}', - ); - }, - ); - }, - ), - floatingActionButton: StreamBuilder( - stream: bloc.songs$, - builder: (context, snapshot) { - if (!snapshot.hasData) { - return Container(); - } - - Map songMap = snapshot.data; - - List songs = songMap.values.toList().reversed.toList(); - - if (songs.indexWhere( - (s) => s.youtubePV != null && s.youtubePV.url != null) >= - 0) { - return FloatingActionButton( - onPressed: () { - YoutubePlaylistScreen.navigate(context, songs, - title: 'Favorite playlist'); - }, - child: Icon(Icons.play_arrow), - ); - } - - return Container(); - }, - )); - } -} diff --git a/lib/pages/youtube_playlist/youtube_playlist_page.dart b/lib/pages/youtube_playlist/youtube_playlist_page.dart deleted file mode 100644 index f611d90c..00000000 --- a/lib/pages/youtube_playlist/youtube_playlist_page.dart +++ /dev/null @@ -1,140 +0,0 @@ -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:vocadb/blocs/youtube_playlist_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/search/search_page.dart'; -import 'package:vocadb/pages/song_detail/song_detail_page.dart'; -import 'package:youtube_player_flutter/youtube_player_flutter.dart'; - -class YoutubePlaylistScreenArguments { - final String title; - final List songs; - - YoutubePlaylistScreenArguments(this.songs, {this.title = 'Playlist'}); -} - -class YoutubePlaylistScreen extends StatelessWidget { - static const String routeName = '/playlist'; - - static void navigate(BuildContext context, List songs, - {String title}) { - Navigator.pushNamed(context, YoutubePlaylistScreen.routeName, - arguments: YoutubePlaylistScreenArguments(songs, title: title)); - } - - @override - Widget build(BuildContext context) { - final YoutubePlaylistScreenArguments args = - ModalRoute.of(context).settings.arguments; - - return Provider( - builder: (context) => YoutubePlaylistBloc(songs: args.songs), - dispose: (context, bloc) => bloc.dispose(), - child: YoutubePlaylistPage(title: args.title), - ); - } -} - -class YoutubePlaylistPage extends StatefulWidget { - final String title; - - const YoutubePlaylistPage({Key key, this.title = 'Playlist'}) - : super(key: key); - - @override - _YoutubePlaylistPageState createState() => _YoutubePlaylistPageState(); -} - -class _YoutubePlaylistPageState extends State { - bool isEnded = false; - - @override - void initState() { - super.initState(); - } - - buildPlaylist() { - final bloc = Provider.of(context); - - return StreamBuilder( - stream: Provider.of(context).currentIndexStream, - builder: (context, snapshot) { - return ListView.builder( - itemCount: bloc.songs.length, - itemBuilder: (BuildContext context, int index) { - SongModel song = bloc.songs[index]; - return ListTile( - onTap: () { - Provider.of(context).select(index); - }, - selected: snapshot.data == index, - enabled: song.youtubePV != null, - leading: Text((index + 1).toString()), - title: Text(song.name, overflow: TextOverflow.ellipsis), - subtitle: - Text(song.artistString, overflow: TextOverflow.ellipsis), - trailing: PopupMenuButton( - onSelected: (String selectedValue) { - SongDetailScreen.navigate(context, song.id, - name: song.name, thumbUrl: song.thumbUrl); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'detail', - child: Text('View detail'), - ), - ], - ), - ); - }, - ); - }, - ); - } - - buildDetail() {} - - buildPlayer() { - final bloc = Provider.of(context); - return YoutubePlayer( - controller: bloc.youtubePlayerController, - showVideoProgressIndicator: true, - onEnded: (_) => bloc.onEnded(), - ); - } - - @override - Widget build(BuildContext context) { - return SafeArea( - child: Scaffold( - appBar: AppBar( - title: Text(widget.title), - actions: [ - IconButton( - icon: Icon(Icons.search), - onPressed: () { - SearchScreen.navigate(context); - }, - ), - IconButton( - icon: Icon(Icons.home), - onPressed: () { - Navigator.popUntil(context, (r) => r.settings.name == '/'); - }, - ) - ], - ), - body: Column( - children: [ - buildPlayer(), - Expanded( - child: buildPlaylist(), - ) - ], - ), - ), - ); - } -} diff --git a/lib/repositories.dart b/lib/repositories.dart new file mode 100644 index 00000000..d402da52 --- /dev/null +++ b/lib/repositories.dart @@ -0,0 +1,12 @@ +library repositories; + +export 'src/repositories/album_repository.dart'; +export 'src/repositories/artist_repository.dart'; +export 'src/repositories/auth_repository.dart'; +export 'src/repositories/base_repository.dart'; +export 'src/repositories/entry_repository.dart'; +export 'src/repositories/release_event_repository.dart'; +export 'src/repositories/release_event_series_repository.dart'; +export 'src/repositories/song_repository.dart'; +export 'src/repositories/tag_repository.dart'; +export 'src/repositories/user_repository.dart'; diff --git a/lib/routes.dart b/lib/routes.dart new file mode 100644 index 00000000..c69386fc --- /dev/null +++ b/lib/routes.dart @@ -0,0 +1,4 @@ +library routes; + +export 'src/routes/app_pages.dart'; +export 'src/routes/app_routes.dart'; diff --git a/lib/services.dart b/lib/services.dart new file mode 100644 index 00000000..51142423 --- /dev/null +++ b/lib/services.dart @@ -0,0 +1,5 @@ +library services; + +export 'src/services/auth_service.dart'; +export 'src/services/http_service.dart'; +export 'src/services/shared_preference_service.dart'; diff --git a/lib/services/album_rest_service.dart b/lib/services/album_rest_service.dart deleted file mode 100644 index 0201bf8c..00000000 --- a/lib/services/album_rest_service.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class AlbumRestService extends BaseRestService { - AlbumRestService({RestApi restApi}) : super(restApi: restApi); - - Future> list({Map params}) async { - final String endpoint = '/api/albums'; - - params ??= {}; - - return super - .query(endpoint, params) - .then((items) => AlbumModel.jsonToList(items)); - } - - Future> latest({String lang = 'Default'}) async { - final String endpoint = '/api/albums/new'; - final Map params = {'fields': 'MainPicture'}; - params['languagePreference'] = lang; - return super - .query(endpoint, params) - .then((items) => AlbumModel.jsonToList(items)); - } - - Future> top({String lang = 'Default'}) async { - final String endpoint = '/api/albums/top'; - final Map params = {'fields': 'MainPicture'}; - params['languagePreference'] = lang; - return super - .query(endpoint, params) - .then((items) => AlbumModel.jsonToList(items)); - } - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': - 'Tags,MainPicture,Tracks,AdditionalNames,Artists,Description,WebLinks,PVs', - 'songFields': 'MainPicture,PVs,ThumbUrl', - 'lang': lang, - }; - - return super - .getObject('/api/albums/$id', params) - .then((i) => AlbumModel.fromJson(i)); - } - - Future> latestByArtistId(int artistId, - {String lang = 'Default'}) async { - final Map params = { - 'artistId': artistId.toString(), - 'fields': 'MainPicture', - 'sort': 'AdditionDate', - 'lang': lang, - }; - - return this.list(params: params); - } - - Future> latestByTagId(int tagId, - {String lang = 'Default'}) async { - final Map params = { - 'tagId': tagId.toString(), - 'fields': 'MainPicture', - 'sort': 'AdditionDate', - 'lang': lang, - }; - - return this.list(params: params); - } - - Future> topByTagId(int tagId, - {String lang = 'Default'}) async { - final Map params = { - 'tagId': tagId.toString(), - 'fields': 'MainPicture', - 'sort': 'RatingScore', - 'lang': lang, - }; - - return this.list(params: params); - } -} diff --git a/lib/services/artist_rest_service.dart b/lib/services/artist_rest_service.dart deleted file mode 100644 index ce5361b6..00000000 --- a/lib/services/artist_rest_service.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class ArtistRestService extends BaseRestService { - ArtistRestService({RestApi restApi}) : super(restApi: restApi); - - Future> list({Map params}) async { - final String endpoint = '/api/artists'; - - params ??= {}; - - return super - .query(endpoint, params) - .then((items) => ArtistModel.jsonToList(items)); - } - - Future> search(String query, - {String lang = 'Default'}) async { - - final Map params = { - 'lang': lang, - 'nameMatchMode': 'Auto', - 'maxResults': '30', - }; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return this.list(params: params); - } - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': 'Tags,MainPicture,WebLinks,BaseVoicebank,Description,ArtistLinks,ArtistLinksReverse,AdditionalNames', - 'relations': 'All', - 'lang': lang, - }; - - return super - .getObject('/api/artists/$id', params) - .then((i) => ArtistModel.fromJson(i)); - } - - Future> topByTagId(int tagId, {String lang = 'Default'}) async { - final Map params = { - 'tagId': tagId.toString(), - 'fields': 'MainPicture', - 'sort': 'RatingScore', - 'lang': lang, - }; - return this.list(params: params); - } -} diff --git a/lib/services/base_rest_service.dart b/lib/services/base_rest_service.dart deleted file mode 100644 index 5bf00258..00000000 --- a/lib/services/base_rest_service.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/services/web_service.dart'; - -class BaseRestService { - RestApi restApi = RestApi(); - - BaseRestService({RestApi restApi}) { - this.restApi = restApi ?? RestApi(); - } - - Future query(String endpoint, Map params) async { - return restApi - .get('$endpoint', params) - .then((v) => (v is Iterable) ? v : (v.containsKey('items'))? v['items'] as Iterable : v); - } - - Future getObject(String endpoint, Map params) async { - return restApi.get('$endpoint', params).then((v) => v as T); - } -} diff --git a/lib/services/entry_service.dart b/lib/services/entry_service.dart deleted file mode 100644 index 4fbbc9fe..00000000 --- a/lib/services/entry_service.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class EntryService extends BaseRestService { - EntryService({RestApi restApi}) : super(restApi: restApi); - - List jsonToList(List items) { - return items.map((i) => EntryModel.fromJson(i)).toList(); - } - - Future> search(String query, EntryType entryType, - {Map params}) { - final String endpoint = '/api/entries'; - String entryTypeText = EntryModel.entryTypeEnumToString(entryType); - - params ??= {}; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - params.addAll({ - 'fields': 'MainPicture', - 'entryTypes': entryTypeText, - 'nameMatchMode': 'Auto', - 'maxResults': '30' - }); - - return super.query(endpoint, params).then((items) { - switch (entryType) { - case EntryType.Song: - return SongModel.jsonToList(items); - case EntryType.Artist: - return ArtistModel.jsonToList(items); - case EntryType.Album: - return AlbumModel.jsonToList(items); - case EntryType.ReleaseEvent: - return ReleaseEventModel.jsonToList(items); - default: - return EntryModel.jsonToList(items); - } - }); - } -} diff --git a/lib/services/release_event_rest_service.dart b/lib/services/release_event_rest_service.dart deleted file mode 100644 index be621d65..00000000 --- a/lib/services/release_event_rest_service.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class ReleaseEventRestService extends BaseRestService { - ReleaseEventRestService({RestApi restApi}) : super(restApi: restApi); - - Future> list({Map params}) async { - final String endpoint = '/api/releaseEvents'; - - params ??= {}; - - return super - .query(endpoint, params) - .then((items) => ReleaseEventModel.jsonToList(items)); - } - - Future> latest({String lang = 'Default'}) async { - final Map params = { - 'fields': 'MainPicture,Series', - 'sort': 'Date', - 'lang': lang - }; - - return this.list(params: params); - } - - Future> recently({String lang = 'Default'}) async { - final Map params = { - 'fields': 'MainPicture,Series', - 'sort': 'Date', - 'lang': lang, - 'afterDate': DateTime.now().subtract(Duration(days: 3)).toString(), - 'beforeDate': DateTime.now().add(Duration(days: 12)).toString(), - }; - - return this.list(params: params); - } - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': - 'Artists,MainPicture,AdditionalNames,Description,WebLinks,Series', - 'lang': lang, - }; - - return super - .getObject('/api/releaseEvents/$id', params) - .then((i) => ReleaseEventModel.fromJson(i)); - } - - Future> albums(int id, {String lang = 'Default'}) async { - final Map params = { - 'fields': 'MainPicture', - 'lang': lang, - }; - return super - .query('/api/releaseEvents/$id/albums', params) - .then((items) => AlbumModel.jsonToList(items)); - } - - Future> publishedSongs(int id, - {String lang = 'Default'}) async { - final Map params = { - 'fields': 'MainPicture,PVs,ThumbUrl', - 'lang': lang, - }; - return super - .query('/api/releaseEvents/$id/published-songs', params) - .then((items) => SongModel.jsonToList(items)); - } - - Future> bySeriesId(int seriesId, {String lang = 'Default'}) async { - final Map params = { - 'fields': 'MainPicture,Series', - 'maxResults': '50', - 'sort': 'Date', - 'seriesId': seriesId.toString(), - 'lang': lang - }; - - return this.list(params: params); - } -} diff --git a/lib/services/release_event_series_rest_service.dart b/lib/services/release_event_series_rest_service.dart deleted file mode 100644 index e64b4b7f..00000000 --- a/lib/services/release_event_series_rest_service.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class ReleaseEventSeriesRestService extends BaseRestService { - ReleaseEventSeriesRestService({RestApi restApi}) : super(restApi: restApi); - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': - 'AdditionalNames,Description,Events,MainPicture,WebLinks', - 'lang': lang, - }; - - return super - .getObject('/api/releaseEventSeries/$id', params) - .then((i) => ReleaseEventSeriesModel.fromJson(i)); - } -} diff --git a/lib/services/song_rest_service.dart b/lib/services/song_rest_service.dart deleted file mode 100644 index 449eb4c5..00000000 --- a/lib/services/song_rest_service.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class SongRestService extends BaseRestService { - SongRestService({RestApi restApi}) : super(restApi: restApi); - - Future> list({Map params}) async { - final String endpoint = '/api/songs'; - - params ??= {}; - - return super - .query(endpoint, params) - .then((items) => SongModel.jsonToList(items)); - } - - Future> highlighted({String lang = 'Default'}) async { - final String endpoint = '/api/songs/highlighted'; - final Map params = {'fields': 'ThumbUrl,PVs'}; - params['languagePreference'] = lang; - return super - .query(endpoint, params) - .then((items) => SongModel.jsonToList(items)); - } - - Future> topRated( - {int durationHours = 0, - String filterBy, - String vocalist, - String lang = 'Default'}) async { - final String endpoint = '/api/songs/top-rated'; - final Map params = { - 'fields': 'MainPicture,ThumbUrl,PVs', - 'languagePreference': lang, - 'filterBy': 'CreateDate' - }; - - if (vocalist != null) { - params['filterBy'] = filterBy; - } - - if (vocalist != null) { - params['vocalist'] = vocalist; - } - - if (durationHours != 0) { - params['durationHours'] = durationHours.toString(); - } - return super - .query(endpoint, params) - .then((items) => SongModel.jsonToList(items)); - } - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': - 'MainPicture,PVs,ThumbUrl,Albums,Artists,Tags,WebLinks,AdditionalNames,WebLinks,Lyrics', - 'lang': lang, - }; - return super - .getObject('/api/songs/$id', params) - .then((i) => SongModel.fromJson(i)); - } - - Future> related(int id, {String lang = 'Default'}) async { - final String endpoint = '/api/songs/$id/related'; - final Map params = { - 'fields': 'MainPicture,ThumbUrl', - 'lang': lang, - }; - - return super - .query(endpoint, params) - .then((related) => SongModel.jsonToList(related['likeMatches'])); - } - - Future> derived(int id, {String lang = 'Default'}) async { - final String endpoint = '/api/songs/$id/derived'; - final Map params = { - 'fields': 'MainPicture,ThumbUrl', - 'lang': lang, - }; - - return super - .query(endpoint, params) - .then((items) => SongModel.jsonToList(items)); - } - - Future> latestByTagId(int tagId, - {String lang = 'Default'}) async { - final Map params = { - 'tagId': tagId.toString(), - 'fields': 'MainPicture,ThumbUrl', - 'sort': 'AdditionDate', - 'lang': lang, - }; - - return this.list(params: params); - } - - Future> topByTagId(int tagId, - {String lang = 'Default'}) async { - final Map params = { - 'tagId': tagId.toString(), - 'fields': 'MainPicture,ThumbUrl', - 'sort': 'RatingScore', - 'lang': lang, - }; - - return this.list(params: params); - } - - Future> latestByArtistId(int artistId, - {String lang = 'Default'}) async { - final Map params = { - 'artistId': artistId.toString(), - 'fields': 'MainPicture,ThumbUrl', - 'sort': 'AdditionDate', - 'lang': lang, - }; - - return this.list(params: params); - } -} diff --git a/lib/services/tag_rest_service.dart b/lib/services/tag_rest_service.dart deleted file mode 100644 index d51e1f92..00000000 --- a/lib/services/tag_rest_service.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'dart:async'; - -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/base_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class TagRestService extends BaseRestService { - TagRestService({RestApi restApi}) : super(restApi: restApi); - - Future> list({Map params}) async { - final String endpoint = '/api/tags'; - - params ??= {}; - - return super - .query(endpoint, params) - .then((items) => TagModel.jsonToList(items)); - } - - Future> search(String query, {String lang = 'Default'}) async { - final Map params = { - 'lang': lang, - 'nameMatchMode': 'Auto', - 'maxResults': '30', - }; - - if (query != null && query.isNotEmpty) { - params['query'] = query; - } - - return this.list(params: params); - } - - Future byId(int id, {String lang = 'Default'}) { - final Map params = { - 'fields': - 'MainPicture,AdditionalNames,Description,Parent,RelatedTags,WebLinks', - 'lang': lang, - }; - - return super - .getObject('/api/tags/$id', params) - .then((i) => TagModel.fromJson(i)); - } - - Future categoryNames() async { - final String endpoint = '/api/tags/categoryNames'; - - return super.query(endpoint, {}).then((items) => items); - } -} diff --git a/lib/services/web_service.dart b/lib/services/web_service.dart deleted file mode 100644 index 852e2e31..00000000 --- a/lib/services/web_service.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'dart:async'; - -import 'package:dio/dio.dart'; -import 'package:dio_http_cache/dio_http_cache.dart'; -import 'package:vocadb/constants.dart'; - -const host = 'https://vocadb.net'; -final dio = Dio(); - -class RestApi { - final Dio dio = Dio(); - - RestApi() { - dio.interceptors - .add(DioCacheManager(CacheConfig(baseUrl: host)).interceptor); - } - - Future get(String endpoint, Map params) async { - String url = Uri.https(AUTHORITY, endpoint, params).toString(); - print(url); - final response = - await dio.get(url, options: buildCacheOptions(Duration(minutes: 5))); - if (response.statusCode == 200) { - return response.data; - } - - throw Exception('Failed to load data!'); - } -} diff --git a/lib/src/arguments/album_detail_args.dart b/lib/src/arguments/album_detail_args.dart new file mode 100644 index 00000000..e3b46765 --- /dev/null +++ b/lib/src/arguments/album_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class AlbumDetailArgs { + /// An id of album. + final int id; + + /// Optional album data for pre-display before fetch. + final AlbumModel album; + + const AlbumDetailArgs({this.id, this.album}); +} diff --git a/lib/src/arguments/artist_detail_args.dart b/lib/src/arguments/artist_detail_args.dart new file mode 100644 index 00000000..b7557b08 --- /dev/null +++ b/lib/src/arguments/artist_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class ArtistDetailArgs { + /// An id of artist. + final int id; + + /// Optional artist data for pre-display before fetch. + final ArtistModel artist; + + const ArtistDetailArgs({this.id, this.artist}); +} diff --git a/lib/src/arguments/artist_search_args.dart b/lib/src/arguments/artist_search_args.dart new file mode 100644 index 00000000..16ba85c6 --- /dev/null +++ b/lib/src/arguments/artist_search_args.dart @@ -0,0 +1,5 @@ +class ArtistSearchArgs { + final bool selectionMode; + + const ArtistSearchArgs({this.selectionMode = false}); +} diff --git a/lib/src/arguments/pv_playlist_args.dart b/lib/src/arguments/pv_playlist_args.dart new file mode 100644 index 00000000..7e1e0a87 --- /dev/null +++ b/lib/src/arguments/pv_playlist_args.dart @@ -0,0 +1,9 @@ +import 'package:vocadb_app/models.dart'; + +class PVPlayListArgs { + final String title; + + final List songs; + + const PVPlayListArgs({this.songs, this.title = 'Playlist'}); +} diff --git a/lib/src/arguments/release_event_detail_args.dart b/lib/src/arguments/release_event_detail_args.dart new file mode 100644 index 00000000..edf024a0 --- /dev/null +++ b/lib/src/arguments/release_event_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class ReleaseEventDetailArgs { + /// An id of release event. + final int id; + + /// Optional release event data for pre-display before fetch. + final ReleaseEventModel event; + + const ReleaseEventDetailArgs({this.id, this.event}); +} diff --git a/lib/src/arguments/release_event_series_detail_args.dart b/lib/src/arguments/release_event_series_detail_args.dart new file mode 100644 index 00000000..6d979911 --- /dev/null +++ b/lib/src/arguments/release_event_series_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class ReleaseEventSeriesDetailArgs { + /// An id of release event. + final int id; + + /// Optional release event series data for pre-display before fetch. + final ReleaseEventSeriesModel eventSeries; + + const ReleaseEventSeriesDetailArgs({this.id, this.eventSeries}); +} diff --git a/lib/src/arguments/song_detail_args.dart b/lib/src/arguments/song_detail_args.dart new file mode 100644 index 00000000..d5c4fad5 --- /dev/null +++ b/lib/src/arguments/song_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class SongDetailArgs { + /// An id of song. + final int id; + + /// Optional song data for pre-display before fetch. + final SongModel song; + + const SongDetailArgs({this.id, this.song}); +} diff --git a/lib/src/arguments/tag_detail_args.dart b/lib/src/arguments/tag_detail_args.dart new file mode 100644 index 00000000..82e490b0 --- /dev/null +++ b/lib/src/arguments/tag_detail_args.dart @@ -0,0 +1,11 @@ +import 'package:vocadb_app/models.dart'; + +class TagDetailArgs { + /// An id of tag. + final int id; + + /// Optional tag data for pre-display before fetch. + final TagModel tag; + + const TagDetailArgs({this.id, this.tag}); +} diff --git a/lib/src/arguments/tag_search_args.dart b/lib/src/arguments/tag_search_args.dart new file mode 100644 index 00000000..89fd9d03 --- /dev/null +++ b/lib/src/arguments/tag_search_args.dart @@ -0,0 +1,7 @@ +class TagSearchArgs { + final String category; + + final bool selectionMode; + + const TagSearchArgs({this.category, this.selectionMode = false}); +} diff --git a/lib/src/bindings/album_search_binding.dart b/lib/src/bindings/album_search_binding.dart new file mode 100644 index 00000000..d533980d --- /dev/null +++ b/lib/src/bindings/album_search_binding.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class AlbumSearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => AlbumSearchController( + albumRepository: AlbumRepository(httpService: httpService))); + } +} diff --git a/lib/src/bindings/artist_search_binding.dart b/lib/src/bindings/artist_search_binding.dart new file mode 100644 index 00000000..bc9cedb7 --- /dev/null +++ b/lib/src/bindings/artist_search_binding.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ArtistSearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => ArtistSearchController( + artistRepository: ArtistRepository(httpService: httpService))); + } +} diff --git a/lib/src/bindings/entry_search_binding.dart b/lib/src/bindings/entry_search_binding.dart new file mode 100644 index 00000000..03ad50a7 --- /dev/null +++ b/lib/src/bindings/entry_search_binding.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class EntrySearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => EntrySearchController( + entryRepository: EntryRepository(httpService: httpService))); + } +} diff --git a/lib/src/bindings/favorite_album_binding.dart b/lib/src/bindings/favorite_album_binding.dart new file mode 100644 index 00000000..d662b0a4 --- /dev/null +++ b/lib/src/bindings/favorite_album_binding.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteAlbumBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + final authService = Get.find(); + Get.lazyPut(() => FavoriteAlbumController( + userRepository: UserRepository(httpService: httpService), + authService: authService)); + } +} diff --git a/lib/src/bindings/favorite_artist_binding.dart b/lib/src/bindings/favorite_artist_binding.dart new file mode 100644 index 00000000..d2bde549 --- /dev/null +++ b/lib/src/bindings/favorite_artist_binding.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteArtistBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + final authService = Get.find(); + Get.lazyPut(() => FavoriteArtistController( + userRepository: UserRepository(httpService: httpService), + authService: authService)); + } +} diff --git a/lib/src/bindings/favorite_song_binding.dart b/lib/src/bindings/favorite_song_binding.dart new file mode 100644 index 00000000..6a9930e2 --- /dev/null +++ b/lib/src/bindings/favorite_song_binding.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteSongBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + final authService = Get.find(); + Get.lazyPut(() => FavoriteSongController( + userRepository: UserRepository(httpService: httpService), + authService: authService)); + } +} diff --git a/lib/src/bindings/main_page_binding.dart b/lib/src/bindings/main_page_binding.dart new file mode 100644 index 00000000..b023f981 --- /dev/null +++ b/lib/src/bindings/main_page_binding.dart @@ -0,0 +1,31 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class MainPageBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + final authService = Get.find(); + + Get.put( + LoginPageController( + authRepository: AuthRepository(httpService: httpService), + authService: authService), + permanent: true); + Get.lazyPut(() => MainPageController(), fenix: true); + Get.lazyPut( + () => HomePageController( + songRepository: SongRepository(httpService: httpService), + albumRepository: AlbumRepository(httpService: httpService), + releaseEventRepository: + ReleaseEventRepository(httpService: httpService)), + fenix: true); + + Get.lazyPut( + () => RankingController( + songRepository: SongRepository(httpService: httpService)), + fenix: true); + } +} diff --git a/lib/src/bindings/release_event_search_binding.dart b/lib/src/bindings/release_event_search_binding.dart new file mode 100644 index 00000000..8682646a --- /dev/null +++ b/lib/src/bindings/release_event_search_binding.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ReleaseEventSearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => + ReleaseEventSearchController( + releaseEventRepository: + ReleaseEventRepository(httpService: httpService))); + } +} diff --git a/lib/src/bindings/song_search_binding.dart b/lib/src/bindings/song_search_binding.dart new file mode 100644 index 00000000..a211ab80 --- /dev/null +++ b/lib/src/bindings/song_search_binding.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class SongSearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => SongSearchController( + songRepository: SongRepository(httpService: httpService))); + } +} diff --git a/lib/src/bindings/tag_search_binding.dart b/lib/src/bindings/tag_search_binding.dart new file mode 100644 index 00000000..a0a04614 --- /dev/null +++ b/lib/src/bindings/tag_search_binding.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class TagSearchBinding implements Bindings { + @override + void dependencies() { + final httpService = Get.find(); + Get.lazyPut(() => TagSearchController( + tagRepository: TagRepository(httpService: httpService))); + } +} diff --git a/lib/src/config/app_translations.dart b/lib/src/config/app_translations.dart new file mode 100644 index 00000000..a74c8aed --- /dev/null +++ b/lib/src/config/app_translations.dart @@ -0,0 +1,24 @@ +import 'dart:ui'; + +import 'package:get/get.dart'; +import 'package:vocadb_app/i18n.dart'; + +class AppTranslation extends Translations { + static final fallbackLocale = Locale('en'); + + /// Supported locales + static final locales = { + 'en': Locale('en'), + 'ja': Locale('ja'), + 'th': Locale('th'), + 'ms': Locale('ms'), + 'zh': Locale('zh'), + }; + + @override + Map> get keys => + {'en': en, 'ja': ja, 'th': th, 'ms': ms, 'zh': zh}; + + /// Gets locale from locales, and updates the locale + void changeLocale(String lang) => Get.updateLocale(locales[lang]); +} diff --git a/lib/src/controllers/album_detail_controller.dart b/lib/src/controllers/album_detail_controller.dart new file mode 100644 index 00000000..5b21abf8 --- /dev/null +++ b/lib/src/controllers/album_detail_controller.dart @@ -0,0 +1,59 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class AlbumDetailController extends GetxController { + final collected = false.obs; + + final initialLoading = true.obs; + + final album = AlbumModel().obs; + + final AlbumRepository albumRepository; + + final UserRepository userRepository; + + final AuthService authService; + + AlbumDetailController( + {this.albumRepository, this.authService, this.userRepository}); + + @override + void onInit() { + initArgs(); + fetchApis(); + super.onInit(); + } + + initArgs() { + AlbumDetailArgs args = Get.arguments; + + if (args.album != null) { + album(args.album); + } else { + album(AlbumModel(id: args.id)); + } + } + + fetchApis() => albumRepository + .getById(album().id, lang: SharedPreferenceService.lang) + .then(album) + .then(initialLoadingDone); + + checkAlbumCollectionStatus() { + int userId = authService.currentUser().id; + + if (userId == null) { + return; + } + //TODO: Wait for API backend implementation + } + + updateAlbumCollection() { + //TODO: Wait for API backend implementation + } + + initialLoadingDone(_) => initialLoading(false); +} diff --git a/lib/src/controllers/album_search_controller.dart b/lib/src/controllers/album_search_controller.dart new file mode 100644 index 00000000..72ca3bc9 --- /dev/null +++ b/lib/src/controllers/album_search_controller.dart @@ -0,0 +1,40 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class AlbumSearchController extends SearchPageController { + /// Filter parameter + final discType = ''.obs; + + final sort = 'Name'.obs; + + final artists = [].obs; + + final tags = [].obs; + + final AlbumRepository albumRepository; + + AlbumSearchController({this.albumRepository}); + + @override + void onInit() { + [discType, sort, artists, tags] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + Future> fetchApi({int start}) => albumRepository + .findAlbums( + start: (start == null) ? 0 : start, + lang: SharedPreferenceService.lang, + maxResults: maxResults, + query: query.string, + discType: discType.string, + sort: sort.string, + artistIds: artists.toList().map((e) => e.id).join(','), + tagIds: tags.toList().map((e) => e.id).join(','), + ) + .catchError(super.onError); +} diff --git a/lib/src/controllers/app_page_controller.dart b/lib/src/controllers/app_page_controller.dart new file mode 100644 index 00000000..cebefd1b --- /dev/null +++ b/lib/src/controllers/app_page_controller.dart @@ -0,0 +1,15 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/utils.dart'; + +class AppPageController extends GetxController { + final initialLoading = true.obs; + + final errorMessage = ''.obs; + + void initialLoadingDone(_) => initialLoading(false); + + void onError(Object err) { + initialLoading(false); + errorMessage(ErrorUtils.read(err)); + } +} diff --git a/lib/src/controllers/artist_detail_controller.dart b/lib/src/controllers/artist_detail_controller.dart new file mode 100644 index 00000000..8d6d96c5 --- /dev/null +++ b/lib/src/controllers/artist_detail_controller.dart @@ -0,0 +1,59 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ArtistDetailController extends GetxController { + final liked = false.obs; + + final initialLoading = true.obs; + + final artist = ArtistModel().obs; + + final ArtistRepository artistRepository; + + final UserRepository userRepository; + + final AuthService authService; + + ArtistDetailController( + {this.artistRepository, this.authService, this.userRepository}); + + @override + void onInit() { + initArgs(); + fetchApis(); + super.onInit(); + } + + initArgs() { + ArtistDetailArgs args = Get.arguments; + + if (args.artist != null) { + artist(args.artist); + } else { + artist(ArtistModel(id: args.id)); + } + } + + fetchApis() => artistRepository + .getById(artist().id, lang: SharedPreferenceService.lang) + .then(artist) + .then(initialLoadingDone); + + checkFollowArtistStatus() { + int userId = authService.currentUser().id; + + if (userId == null) { + return; + } + //TODO: Wait for API backend implementation + } + + updateFollowArtist() { + //TODO: Wait for API backend implementation + } + + initialLoadingDone(_) => initialLoading(false); +} diff --git a/lib/src/controllers/artist_search_controller.dart b/lib/src/controllers/artist_search_controller.dart new file mode 100644 index 00000000..a55359a8 --- /dev/null +++ b/lib/src/controllers/artist_search_controller.dart @@ -0,0 +1,38 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ArtistSearchController extends SearchPageController { + /// Filter parameter + final artistType = ''.obs; + + final sort = 'Name'.obs; + + final tags = [].obs; + + final ArtistRepository artistRepository; + + ArtistSearchController({this.artistRepository}); + + @override + void onInit() { + [artistType, sort, tags] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + @override + Future> fetchApi({int start}) => artistRepository + .findArtists( + start: (start == null) ? 0 : start, + lang: SharedPreferenceService.lang, + maxResults: maxResults, + query: query.string, + artistType: artistType.string, + sort: sort.string, + tagIds: tags.toList().map((e) => e.id).join(','), + ) + .catchError(super.onError); +} diff --git a/lib/src/controllers/entry_search_controller.dart b/lib/src/controllers/entry_search_controller.dart new file mode 100644 index 00000000..8cadcc93 --- /dev/null +++ b/lib/src/controllers/entry_search_controller.dart @@ -0,0 +1,39 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class EntrySearchController extends SearchPageController { + /// Filter parameter + final entryType = ''.obs; + + /// Filter parameter + final sort = 'Name'.obs; + + /// Filter parameter + final tags = [].obs; + + final EntryRepository entryRepository; + + final enableInitial = false; + + EntrySearchController({this.entryRepository}); + + @override + void onInit() { + [entryType, sort, tags] + .forEach((element) => ever(element, (_) => fetchApi())); + super.onInit(); + } + + @override + Future> fetchApi({int start}) => entryRepository + .findEntries( + query: query.string, + entryType: entryType.string, + lang: SharedPreferenceService.lang, + sort: sort.string, + tagIds: tags.toList().map((e) => e.id).join(',')) + .catchError(super.onError); +} diff --git a/lib/src/controllers/favorite_album_controller.dart b/lib/src/controllers/favorite_album_controller.dart new file mode 100644 index 00000000..b5c7e095 --- /dev/null +++ b/lib/src/controllers/favorite_album_controller.dart @@ -0,0 +1,54 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteAlbumController extends SearchPageController { + /// Filter parameter + final purchaseStatuses = ''.obs; + + /// Filter parameter + final discType = ''.obs; + + /// Filter parameter + final sort = 'Name'.obs; + + /// Filter parameter + final tags = [].obs; + + /// Filter parameter + final artists = [].obs; + + /// If set to [True], no fetch more data from server. Default is [False]. + final noFetchMore = false.obs; + + final UserRepository userRepository; + + final AuthService authService; + + FavoriteAlbumController({this.userRepository, this.authService}); + + @override + void onInit() { + if (authService.currentUser().id == null) { + print('Error user not login yet.'); + } + [purchaseStatuses, discType, sort, tags, artists] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + Future> fetchApi({int start}) => userRepository + .getAlbums(authService.currentUser().id, + query: query.string, + start: (start == null) ? 0 : start, + maxResults: maxResults, + discType: discType.string, + purchaseStatuses: purchaseStatuses.string, + sort: sort.string, + lang: SharedPreferenceService.lang, + artistIds: artists.toList().map((e) => e.id).join(','), + tagIds: tags.toList().map((e) => e.id).join(',')) + .catchError(super.onError); +} diff --git a/lib/src/controllers/favorite_artist_controller.dart b/lib/src/controllers/favorite_artist_controller.dart new file mode 100644 index 00000000..ffb4c8df --- /dev/null +++ b/lib/src/controllers/favorite_artist_controller.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteArtistController + extends SearchPageController { + /// Filter parameter + final artistType = ''.obs; + + /// Filter parameter + final tags = [].obs; + + final UserRepository userRepository; + + final AuthService authService; + + FavoriteArtistController({this.userRepository, this.authService}); + + @override + void onInit() { + if (authService.currentUser().id == null) { + print('Error user not login yet.'); + } + [artistType, tags] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + Future> fetchApi({int start}) => userRepository + .getFollowedArtists(authService.currentUser().id, + query: query.string, + start: (start == null) ? 0 : start, + maxResults: maxResults, + lang: SharedPreferenceService.lang, + artistType: artistType.string, + tagIds: tags.toList().map((e) => e.id).join(',')) + .catchError(super.onError); +} diff --git a/lib/src/controllers/favorite_song_controller.dart b/lib/src/controllers/favorite_song_controller.dart new file mode 100644 index 00000000..fb4d14e1 --- /dev/null +++ b/lib/src/controllers/favorite_song_controller.dart @@ -0,0 +1,57 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class FavoriteSongController extends SearchPageController { + /// List of results from search + final results = [].obs; + + /// Filter parameter + final sort = 'RatingDate'.obs; + + /// Filter parameter + final rating = ''.obs; + + /// Filter parameter + final groupByRating = false.obs; + + /// Filter parameter + final artists = [].obs; + + /// Filter parameter + final tags = [].obs; + + final UserRepository userRepository; + + final AuthService authService; + + FavoriteSongController({this.userRepository, this.authService}); + + @override + void onInit() { + if (authService.currentUser().id == null) { + print('Error user not login yet.'); + } + + initialFetch(); + [rating, groupByRating, sort, artists, tags] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + @override + Future> fetchApi({int start}) => userRepository + .getRatedSongs(authService.currentUser().id, + start: (start == null) ? 0 : start, + maxResults: maxResults, + lang: SharedPreferenceService.lang, + query: query.string, + rating: rating.string, + groupByRating: groupByRating.value, + sort: sort.string, + artistIds: artists.toList().map((e) => e.id).join(','), + tagIds: tags.toList().map((e) => e.id).join(',')) + .catchError(super.onError); +} diff --git a/lib/src/controllers/home_page_controller.dart b/lib/src/controllers/home_page_controller.dart new file mode 100644 index 00000000..1ed67223 --- /dev/null +++ b/lib/src/controllers/home_page_controller.dart @@ -0,0 +1,44 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class HomePageController extends GetxController { + final highlighted = [].obs; + final randomAlbums = [].obs; + final recentAlbums = [].obs; + final recentReleaseEvents = [].obs; + + final SongRepository songRepository; + final AlbumRepository albumRepository; + final ReleaseEventRepository releaseEventRepository; + + HomePageController( + {this.songRepository, this.albumRepository, this.releaseEventRepository}); + + @override + void onInit() { + fetchApi(); + super.onInit(); + } + + fetchApi() { + String lang = SharedPreferenceService.lang; + songRepository + .getHighlighted(lang: lang) + .then(highlighted) + .catchError(onError); + albumRepository.getTop(lang: lang).then(randomAlbums).catchError(onError); + albumRepository.getNew(lang: lang).then(recentAlbums).catchError(onError); + releaseEventRepository + .getRecently(lang: lang) + .then((result) => result.reversed.toList()) + .then(recentReleaseEvents) + .catchError(onError); + } + + onError(err) { + print(err); + Get.snackbar('error', err.toString()); + } +} diff --git a/lib/src/controllers/login_page_controller.dart b/lib/src/controllers/login_page_controller.dart new file mode 100644 index 00000000..b072e912 --- /dev/null +++ b/lib/src/controllers/login_page_controller.dart @@ -0,0 +1,50 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/auth_repository.dart'; + +class LoginPageController extends GetxController { + final processing = false.obs; + + final message = ''.obs; + + final AuthRepository authRepository; + + final AuthService authService; + + final username = ''.obs; + final password = ''.obs; + + LoginPageController({this.authRepository, this.authService}); + + login() { + processing(true); + authRepository + .login(username: this.username.string, password: this.password.string) + .then((_) => authService.getCurrent()) + .then(postLoginSuccess) + .catchError(error); + } + + void postLoginSuccess(user) { + processing(false); + print('login success $user'); + authService.currentUser(user); + Get.find().logLogin(); + Get.off(MainPage()); + } + + void onUsernameChanged(value) { + print(value); + username(value); + } + + void onPasswordChanged(value) => password(value); + + void error(err) { + processing(false); + print('Error occurs...$err'); + message('invalidUsernameOrPassword'); + } +} diff --git a/lib/src/controllers/main_page_controller.dart b/lib/src/controllers/main_page_controller.dart new file mode 100644 index 00000000..aea7f397 --- /dev/null +++ b/lib/src/controllers/main_page_controller.dart @@ -0,0 +1,6 @@ +import 'package:get/get.dart'; + +class MainPageController extends GetxController { + var tabIndex = 0.obs; + onBottomNavTap(index) => tabIndex.value = index; +} diff --git a/lib/src/controllers/pv_playlist_controller.dart b/lib/src/controllers/pv_playlist_controller.dart new file mode 100644 index 00000000..f9dcda35 --- /dev/null +++ b/lib/src/controllers/pv_playlist_controller.dart @@ -0,0 +1,76 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class PVPlayListController extends GetxController { + final songs = [].obs; + + final currentIndex = 0.obs; + + YoutubePlayerController youtubeController; + + PVPlayListController(); + + @override + void onInit() { + initArgs(); + initYoutubeController(); + super.onInit(); + } + + @override + void onClose() { + if (youtubeController != null) { + youtubeController.dispose(); + } + super.onClose(); + } + + initYoutubeController() { + currentIndex(SongList(songs()).getFirstWithYoutubePVIndex(0)); + + youtubeController = YoutubePlayerController( + initialVideoId: YoutubePlayer.convertUrlToId( + songs()[currentIndex.toInt()].youtubePV.url), + flags: YoutubePlayerFlags( + autoPlay: SharedPreferenceService.autoPlayValue, + ), + ); + } + + initArgs() { + PVPlayListArgs args = Get.arguments; + songs(args.songs); + } + + onEnded() { + this.next(); + youtubeController.load(YoutubePlayer.convertUrlToId( + songs()[currentIndex.toInt()].youtubePV.url)); + } + + next() { + int newIndex = currentIndex() + 1; + + if (newIndex >= songs().length) { + newIndex = 0; + } + + int nextPlayableIndex = + SongList(songs()).getFirstWithYoutubePVIndex(newIndex); + + if (nextPlayableIndex == -1) { + nextPlayableIndex = SongList(songs()).getFirstWithYoutubePVIndex(0); + } + + currentIndex(newIndex); + } + + onSelect(int index) { + currentIndex(index); + youtubeController + .load(YoutubePlayer.convertUrlToId(songs()[index].youtubePV.url)); + } +} diff --git a/lib/src/controllers/ranking_controller.dart b/lib/src/controllers/ranking_controller.dart new file mode 100644 index 00000000..b610a7c6 --- /dev/null +++ b/lib/src/controllers/ranking_controller.dart @@ -0,0 +1,58 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class RankingController extends GetxController { + final initialLoading = true.obs; + + /// List of top rated songs in 24 hours. + final daily = [].obs; + + /// List of top rated songs in 7 days. + final weekly = [].obs; + + /// List of top rated songs in 30 days. + final monthly = [].obs; + + /// List of top rated songs all times. + final overall = [].obs; + + /// Filter parameter. + final filterBy = 'CreateDate'.obs; + + /// Filter parameter. + final vocalist = 'Nothing'.obs; + + final SongRepository songRepository; + + RankingController({this.songRepository}); + + @override + void onInit() { + fetchApi(); + ever(filterBy, (_) => fetchApi()); + ever(vocalist, (_) => fetchApi()); + super.onInit(); + } + + fetchApi() { + String lang = SharedPreferenceService.lang; + songRepository + .getTopRatedDaily( + filterBy: filterBy.string, vocalist: vocalist.string, lang: lang) + .then(daily); + songRepository + .getTopRatedWeekly( + filterBy: filterBy.string, vocalist: vocalist.string, lang: lang) + .then(weekly); + songRepository + .getTopRatedMonthly( + filterBy: filterBy.string, vocalist: vocalist.string, lang: lang) + .then(monthly); + songRepository + .getTopRated( + filterBy: filterBy.string, vocalist: vocalist.string, lang: lang) + .then(overall); + } +} diff --git a/lib/src/controllers/release_event_detail_controller.dart b/lib/src/controllers/release_event_detail_controller.dart new file mode 100644 index 00000000..359984d5 --- /dev/null +++ b/lib/src/controllers/release_event_detail_controller.dart @@ -0,0 +1,41 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ReleaseEventDetailController extends GetxController { + final event = ReleaseEventModel().obs; + + final songs = [].obs; + + final albums = [].obs; + + final ReleaseEventRepository eventRepository; + + ReleaseEventDetailController({this.eventRepository}); + + @override + void onInit() { + initArgs(); + fetchApis(); + super.onInit(); + } + + initArgs() { + ReleaseEventDetailArgs args = Get.arguments; + + if (args.event != null) { + event(args.event); + } else { + event(ReleaseEventModel(id: args.id)); + } + } + + fetchApis() { + String lang = SharedPreferenceService.lang; + eventRepository.getById(event().id, lang: lang).then(event); + eventRepository.getAlbums(event().id, lang: lang).then(albums); + eventRepository.getPublishedSongs(event().id, lang: lang).then(songs); + } +} diff --git a/lib/src/controllers/release_event_search_controller.dart b/lib/src/controllers/release_event_search_controller.dart new file mode 100644 index 00000000..788aa4a7 --- /dev/null +++ b/lib/src/controllers/release_event_search_controller.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/utils.dart'; + +class ReleaseEventSearchController + extends SearchPageController { + /// Filter parameter + final category = ''.obs; + + final sort = 'Name'.obs; + + final fromDate = Rx(); + + final toDate = Rx(); + + final artists = [].obs; + + final tags = [].obs; + + final ReleaseEventRepository releaseEventRepository; + + TextEditingController textSearchController; + + ReleaseEventSearchController({this.releaseEventRepository}); + + @override + void onInit() { + [category, sort, artists, tags, fromDate, toDate] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + Future> fetchApi({int start}) => + releaseEventRepository + .findReleaseEvents( + start: (start == null) ? 0 : start, + lang: SharedPreferenceService.lang, + maxResults: maxResults, + query: query.string, + category: category.string, + sort: sort.string, + artistIds: artists.toList().map((e) => e.id).join(','), + tagIds: tags.toList().map((e) => e.id).join(','), + beforeDate: DateTimeUtils.toUtcDateString(toDate.value), + afterDate: DateTimeUtils.toUtcDateString(fromDate.value), + ) + .catchError(super.onError); +} diff --git a/lib/src/controllers/release_event_series_detail_controller.dart b/lib/src/controllers/release_event_series_detail_controller.dart new file mode 100644 index 00000000..02181266 --- /dev/null +++ b/lib/src/controllers/release_event_series_detail_controller.dart @@ -0,0 +1,44 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class ReleaseEventSeriesDetailController extends AppPageController { + final eventSeries = ReleaseEventSeriesModel().obs; + + final songs = [].obs; + + final albums = [].obs; + + final ReleaseEventSeriesRepository eventSeriesRepository; + + ReleaseEventSeriesDetailController({this.eventSeriesRepository}); + + @override + void onInit() { + initArgs(); + fetchApis(); + super.onInit(); + } + + initArgs() { + ReleaseEventSeriesDetailArgs args = Get.arguments; + + if (args.eventSeries != null) { + eventSeries(args.eventSeries); + } else { + eventSeries(ReleaseEventSeriesModel(id: args.id)); + } + } + + fetchApis() { + String lang = SharedPreferenceService.lang; + eventSeriesRepository + .getById(eventSeries().id, lang: lang) + .then(eventSeries) + .then(super.initialLoadingDone) + .catchError(super.onError); + } +} diff --git a/lib/src/controllers/search_page_controller.dart b/lib/src/controllers/search_page_controller.dart new file mode 100644 index 00000000..5fa88cae --- /dev/null +++ b/lib/src/controllers/search_page_controller.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:get/get.dart'; + +abstract class SearchPageController extends AppPageController { + final int maxResults = 50; + + /// List of results from search + final results = [].obs; + + /// Query input string + final query = ''.obs; + + /// Set to True when user tap search icon. + final openQuery = false.obs; + + /// If set to [True], no fetch more data from server. Default is [False]. + final noFetchMore = false.obs; + + /// Fetch api when controller init if set to [True] + final enableInitial = true; + + TextEditingController textSearchController; + + @override + void onInit() { + if (enableInitial) { + initialFetch(); + } + + debounce(query, (_) => initialFetch(), time: Duration(seconds: 1)); + textSearchController = TextEditingController(); + super.onInit(); + } + + void initialFetch() { + Future.value(noFetchMore(false)) + .then((_) => fetchApi()) + .then(verifyShouldFetchMore) + .then(results) + .then(initialLoadingDone); + } + + void clearQuery() { + query(''); + textSearchController.clear(); + } + + Future> fetchApi({int start}); + + List verifyShouldFetchMore(List items) { + if (items == null || items.isEmpty || items.length < maxResults) + noFetchMore(true); + return items; + } + + onReachLastItem() { + if (noFetchMore.value) return; + fetchApi(start: results.length + 1) + .then(verifyShouldFetchMore) + .then(results.addAll); + } +} diff --git a/lib/src/controllers/song_detail_controller.dart b/lib/src/controllers/song_detail_controller.dart new file mode 100644 index 00000000..6308a4de --- /dev/null +++ b/lib/src/controllers/song_detail_controller.dart @@ -0,0 +1,113 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class SongDetailController extends GetxController { + final initialLoading = true.obs; + + final song = SongModel().obs; + + final altSongs = [].obs; + + final relatedSongs = [].obs; + + final showLyric = false.obs; + + final liked = false.obs; + + final SongRepository songRepository; + + final UserRepository userRepository; + + final AuthService authService; + + YoutubePlayerController youtubeController; + + SongDetailController( + {this.songRepository, this.userRepository, this.authService}); + + @override + void onInit() { + initArgs(); + checkUserSongRating(); + fetchApis(); + initYoutubeController(); + super.onInit(); + } + + @override + void onClose() { + if (youtubeController != null) { + youtubeController.dispose(); + } + super.onClose(); + } + + initYoutubeController() { + PVModel pv = song().youtubePV; + + if (pv == null) return; + + youtubeController = YoutubePlayerController( + initialVideoId: YoutubePlayer.convertUrlToId(pv.url), + flags: YoutubePlayerFlags( + autoPlay: SharedPreferenceService.autoPlayValue, + ), + ); + } + + initArgs() { + SongDetailArgs args = Get.arguments; + + if (args.song != null) { + song(args.song); + } else { + song(SongModel(id: args.id)); + } + } + + fetchApis() { + String lang = SharedPreferenceService.lang; + songRepository + .getById(song().id, lang: lang) + .then(song) + .then(initialLoadingDone); + + songRepository + .getDerived(song().id, lang: lang) + .then((songs) => songs.take(20).toList()) + .then(altSongs); + + songRepository + .getRelated(song().id, lang: lang) + .then((songs) => songs.take(20).toList()) + .then(relatedSongs); + } + + checkUserSongRating() { + int userId = authService.currentUser().id; + + if (userId == null) { + return; + } + + userRepository + .getCurrentUserRatedSong(song().id) + .then((value) => (value == 'Nothing') ? liked(false) : liked(true)) + .then((value) => + debounce(liked, (_) => updateRating(), time: Duration(seconds: 1))); + } + + updateRating() => songRepository + .rating(song().id, (liked.value) ? 'Like' : 'Nothing') + .then((value) => Get.find()) + .then((c) => c.fetchApi()) + .catchError((err) => print( + 'favorite song controller not found. ignore fetch to refresh favorite songs')); + + initialLoadingDone(_) => initialLoading(false); +} diff --git a/lib/src/controllers/song_search_controller.dart b/lib/src/controllers/song_search_controller.dart new file mode 100644 index 00000000..52c68b46 --- /dev/null +++ b/lib/src/controllers/song_search_controller.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class SongSearchController extends SearchPageController { + /// Filter parameter + final songType = ''.obs; + + /// Filter parameter + final sort = 'Name'.obs; + + /// Filter parameter + final artists = [].obs; + + /// Filter parameter + final tags = [].obs; + + final SongRepository songRepository; + + SongSearchController({this.songRepository}); + + @override + void onInit() { + [songType, sort, artists, tags] + .forEach((element) => ever(element, (_) => initialFetch())); + super.onInit(); + } + + @override + Future> fetchApi({int start}) => songRepository + .findSongs( + start: (start == null) ? 0 : start, + lang: SharedPreferenceService.lang, + query: query.string, + songType: songType.string, + sort: sort.string, + artistIds: artists.toList().map((e) => e.id).join(','), + tagIds: tags.toList().map((e) => e.id).join(',')) + .catchError(super.onError); +} diff --git a/lib/src/controllers/tag_detail_controller.dart b/lib/src/controllers/tag_detail_controller.dart new file mode 100644 index 00000000..c55e9b5b --- /dev/null +++ b/lib/src/controllers/tag_detail_controller.dart @@ -0,0 +1,54 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class TagDetailController extends GetxController { + final tag = TagModel().obs; + final latestSongs = [].obs; + final topSongs = [].obs; + final topArtists = [].obs; + final topAlbums = [].obs; + + final TagRepository tagRepository; + final SongRepository songRepository; + final ArtistRepository artistRepository; + final AlbumRepository albumRepository; + + TagDetailController( + {this.tagRepository, + this.songRepository, + this.artistRepository, + this.albumRepository}); + + @override + void onInit() { + initArgs(); + fetchApis(); + super.onInit(); + } + + initArgs() { + TagDetailArgs args = Get.arguments; + + if (args.tag != null) { + tag(args.tag); + } else { + tag(TagModel(id: args.id)); + } + } + + fetchApis() { + String lang = SharedPreferenceService.lang; + tagRepository.getById(tag().id, lang: lang).then(tag); + songRepository.getTopSongsByTagId(tag().id, lang: lang).then(topSongs); + songRepository + .getLatestSongsByTagId(tag().id, lang: lang) + .then(latestSongs); + artistRepository + .getTopArtistsByTagId(tag().id, lang: lang) + .then(topArtists); + albumRepository.getTopAlbumsByTagId(tag().id, lang: lang).then(topAlbums); + } +} diff --git a/lib/src/controllers/tag_search_controller.dart b/lib/src/controllers/tag_search_controller.dart new file mode 100644 index 00000000..eaa816d3 --- /dev/null +++ b/lib/src/controllers/tag_search_controller.dart @@ -0,0 +1,34 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/services.dart'; + +class TagSearchController extends SearchPageController { + final category = ''.obs; + + final TagRepository tagRepository; + + TagSearchController({this.tagRepository}); + + @override + void onInit() { + initArgs(); + super.onInit(); + } + + initArgs() { + final TagSearchArgs args = Get.arguments; + category(args.category); + } + + Future> fetchApi({int start}) => tagRepository + .findTags( + start: (start == null) ? 0 : start, + lang: SharedPreferenceService.lang, + maxResults: maxResults, + query: query.string, + categoryName: category.string) + .catchError(super.onError); +} diff --git a/lib/src/exceptions/http_request_error_exception.dart b/lib/src/exceptions/http_request_error_exception.dart new file mode 100644 index 00000000..3f5bca8a --- /dev/null +++ b/lib/src/exceptions/http_request_error_exception.dart @@ -0,0 +1 @@ +class HttpRequestErrorException implements Exception {} diff --git a/lib/src/exceptions/login_failed_exception.dart b/lib/src/exceptions/login_failed_exception.dart new file mode 100644 index 00000000..79fa5f9c --- /dev/null +++ b/lib/src/exceptions/login_failed_exception.dart @@ -0,0 +1,3 @@ +import 'package:vocadb_app/exceptions.dart'; + +class LoginFailedException implements HttpRequestErrorException {} diff --git a/lib/src/i18n/en.dart b/lib/src/i18n/en.dart new file mode 100644 index 00000000..9bd51b86 --- /dev/null +++ b/lib/src/i18n/en.dart @@ -0,0 +1,241 @@ +const Map en = { + "menu": "Menu", + "home": "Home", + "playAll": "Play all", + "theme": "Theme", + "songs": "Songs", + "song": "Song", + "album": "Album", + "albums": "Albums", + "artists": "Artists", + "artist": "Artist", + "events": "Events", + "event": "Event", + "releaseEvents": "Release events", + "tags": "Tags", + "anything": "Anything", + "highlighted": "Highlight PVs", + "recentAlbums": "Recent or upcoming albums", + "randomPopularAlbums": "Random popular albums", + "upcomingEvent": "Upcoming events", + "songType": "Song type", + "sort": "Sort", + "ranking": "Ranking", + "artistType": "Artist type", + "findSong": "Find song", + "findAlbum": "Find album", + "findArtist": "Find artist", + "findEvent": "Find event", + "findTag": "Find tag", + "findAnything": "Find anything", + "filter": "Filter", + "filterBy": "Filter by", + "vocalist": "Vocalist", + "all": "all", + "vocaloid": "Vocaloid", + "utau": "UTAU", + "minimumScore": "Minimum score", + "name": "Name", + "discType": "Album type", + "category": "Category", + "date": "Date", + "dateRange": "Date range", + "from": "From", + "to": "To", + "voicebankReleaseDate": "Voicebank release date", + "selectArtist": "Select artist", + "selectTag": "Select tag", + "recentSearch": "Recent search", + "clearFilter": "Clear filter", + "type": "Type", + "favorite": "Favorite", + "share": "Share", + "originalMedia": "Original media", + "lyrics": "Lyrics", + "popularSongs": "Popular songs", + "popularAlbums": "Popular albums", + "ads": "Ads / crossfades", + "trackList": "Tracklist", + "disc": "Disc", + "venue": "Venue", + "description": "Description", + "relatedLink": "Related link", + "setlist": "Setlist", + "duration": "Duration", + "add": "Add", + "follow": "Follow", + "following": "Following", + "baseVoicebank": "Base voicebank", + "series": "Series", + "official": "Official", + "commercial": "Commercial", + "references": "References", + "recentSongsPVs": "Recent Songs / PVs", + "alternateVersion": "Alternate version", + "likeMatches": "Users who liked this also liked", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "Related songs", + "searchYoutube": "Search Youtube", + "showAll": "Show all", + "developerContact": "Developer contacts", + "favoriteSongs": "Favorite songs", + "favoriteAlbums": "Collections", + "favoriteArtists": "Followed artists", + "settings": "Settings", + "about": "About", + "contact": "Contact us", + "general": "General", + "uiLanguage": "Interface language", + "contentLanguage": "Preferred display language", + "importProfile": "Import profile", + "exportProfile": "Export profile", + "releasedDate": "Released", + "info": "Info", + "showMore": "Show more", + "participatingArtists": "Participating artists", + "moreSongs": "More songs", + "moreAlbums": "More albums", + "moreArtists": "More artists", + "publishedOn": "Published on %s", + "otherMedia": "Other media", + "original": "Original", + "vocalists": "Vocalists", + "producers": "Producers", + "other": "Other", + "otherArtists": "Other", + "noRating": "No rating", + "ratingCount": "{rating} rating", + "labels": "Labels", + "notSpecified": "Not specified", + "officialLinks": "Official links", + "unofficialLinks": "Unofficial links", + "like": "Like", + "liked": "Liked", + "discNo": "Disc {disc}", + "hide": "Hide", + "originalVersion": "Original version", + "topSongs": "Top songs", + "topAlbums": "Top albums", + "topArtists": "Top artists", + "version": "Version", + "search": "Search", + "parentTag": "Parent", + "map": "Map", + "emptyFavoriteSongs": "No favorite songs", + "emptyFavoriteAlbums": "No favorite albums ", + "emptyFavoriteArtists": "Nothing yet", + "searchResultNotMatched": "No result match", + "discOnSaleDate": "Released at %s", + "collectionStatus": "Collection status", + "collectionStatus.Wishlisted": "Wishlisted", + "collectionStatus.Ordered": "Ordered", + "collectionStatus.Owned": "Owned", + "groupByRating": "Group by rating", + "username": "Username", + "password": "Password", + "skip": "Skip", + "registerAccount": "Register", + "login": "Login", + "logout": "Logout", + "invalidUsernameOrPassword": "Invalid username or password", + "collect": "Collect", + "autoPlay": "Auto play video", + "register": "Register", + + // SongType + "songType.Unspecified": "Unspecified", + "songType.Original": "Original song", + "songType.Arrangement": "Arrangement", + "songType.Remaster": "Remaster", + "songType.Remix": "Remix", + "songType.Cover": "Cover", + "songType.Instrumental": "Instrumental", + "songType.Mashup": "Mashup", + "songType.MusicPV": "Music PV", + "songType.DramaPV": "Drama PV", + "songType.Other": "Other", + + // Ranking + "ranking.daily": "Daily", + "ranking.weekly": "Weekly", + "ranking.monthly": "Monthly", + "ranking.overall": "Overall", + "ranking.newlyPublished": "NewlyPublished", + "ranking.newlyAdded": "NewlyAdded", + "ranking.popularity": "Popularity", + "ranking.allVocalists": "All vocalists", + "ranking.onlyVocaloid": "Only Vocaloid", + "ranking.onlyUTAU": "Only UTAU", + "ranking.otherVocalist": "Other vocalists", + + // Sort + "sort.Unspecified": "Unspecified", + "sort.Name": "Name", + "sort.PublishDate": "Publish date", + "sort.AdditionDate": "Addition date", + "sort.FavoritedTimes": "Times favorited", + "sort.RatingScore": "Rating score", + "sort.AdditionDateDesc": "Addition date (descending)", + "sort.AdditionDateAsc": "Addition date (ascending)", + "sort.ReleaseDate": "Release date", + "sort.SongCount": "Number of songs", + "sort.SongRating": "Total song rating", + "sort.FollowerCount": "Number of followers", + "sort.RatingAverage": "Rating average", + "sort.RatingTotal": "Total score", + "sort.CollectionCount": "Collection count", + "sort.Date": "Date", + "sort.RatingDate": "Rating date", + + // Artist role + "artistRole.Group": "Groups and labels", + "artistRole.Illustrator": "Illustrated by", + "artistRole.VoiceProvider": "Voice provider", + "artistRole.CharacterDesigner": "Character designer", + "artistReverseRole.Group": "Members", + "artistReverseRole.Illustrator": "Illustrator of", + "artistReverseRole.VoiceProvider": "Voice provider of", + "artistReverseRole.CharacterDesigner": "Designer of", + + // Artist type + "artistType.Unspecified": "Unspecified", + "artistType.Circle": "Circle", + "artistType.Label": "Label", + "artistType.Illustrator": "Illustrator", + "artistType.Producer": "Producers", + "artistType.Animator": "Animator", + "artistType.Lyricist": "Lyricist", + "artistType.Vocaloid": "Vocaloid", + "artistType.Vocalist": "Vocalist", + "artistType.Character": "Character", + "artistType.UTAU": "UTAU", + "artistType.CeVIO": "CeVIO", + "artistType.OtherVoiceSynthesizer": "Other voice synthesizer", + "artistType.OtherVocalist": "Other vocalist", + "artistType.OtherGroup": "Other group", + "artistType.OtherIndividual": "Other individual", + + // Disc type + "discType.Unspecified": "Unspecified", + "discType.Album": "Original album", + "discType.Single": "Single", + "discType.EP": "E.P.", + "discType.SplitAlbum": "Split album", + "discType.Compilation": "Compilation", + "discType.Video": "Video", + "discType.Artbook": "Artbook", + "discType.Game": "Game", + "discType.Fanmade": "Fanmade/doujin", + "discType.Other": "Other", + + // Release event category + "eventCategory.Unspecified": "Not specified", + "eventCategory.AlbumRelease": "Album release fair", + "eventCategory.Anniversary": "Character anniversary", + "eventCategory.Club": "Club", + "eventCategory.Concert": "Concert", + "eventCategory.Contest": "Contest", + "eventCategory.Convention": "Convention", + "eventCategory.Other": "Other", +}; diff --git a/lib/src/i18n/ja.dart b/lib/src/i18n/ja.dart new file mode 100644 index 00000000..41ff204f --- /dev/null +++ b/lib/src/i18n/ja.dart @@ -0,0 +1,237 @@ +const Map ja = { + "menu": "メニュー", + "home": "ホーム", + "playAll": "すべて再生", + "theme": "テーマ", + "songs": "曲", + "song": "曲", + "album": "アルバム", + "albums": "アルバム", + "artists": "アーティスト", + "artist": "アーティスト", + "events": "イベント", + "event": "イベント", + "releaseEvents": "イベント", + "tags": "タグ", + "anything": "すべて", + "highlighted": "最近追加された動画", + "recentAlbums": "新しいアルバム", + "randomPopularAlbums": "最も人気のあるアルバム", + "upcomingEvent": "最近のイベント", + "songType": "曲の種類", + "sort": "並び替え", + "ranking": "ランキング", + "artistType": "アーティストの種類", + "findSong": "Find song", + "findAlbum": "Find album", + "findArtist": "Find artist", + "findEvent": "Find event", + "findTag": "Find tag", + "findAnything": "Find anything", + "filter": "絞り込む", + "filterBy": "Filter by", + "vocalist": "Vocalist", + "all": "すべて", + "vocaloid": "Vocaloid", + "utau": "UTAU", + "minimumScore": "Minimum score", + "name": "Name", + "discType": "アルバムの種類", + "category": "カテゴリー", + "date": "Date", + "dateRange": "イベント日時", + "from": "From", + "to": "To", + "voicebankReleaseDate": "Voicebank release date", + "selectArtist": "Select artist", + "selectTag": "Select tag", + "recentSearch": "Recent search", + "clearFilter": "Clear filter", + "type": "タイプ", + "favorite": "Favorite", + "share": "共有", + "originalMedia": "オリジナル投稿", + "lyrics": "歌詞", + "popularSongs": "人気の曲", + "popularAlbums": "人気のアルバム", + "ads": "広告・クロスフェード", + "trackList": "トラックリスト", + "disc": "ディスク", + "venue": "会場", + "description": "概要", + "relatedLink": "Related link", + "setlist": "Setlist", + "duration": "タイム", + "add": "追加", + "follow": "Follow", + "following": "Following", + "baseVoicebank": "元のボイスバンク", + "series": "Series", + "official": "Official", + "commercial": "Commercial", + "references": "References", + "recentSongsPVs": "最近の曲/PV", + "alternateVersion": "他のバージョン", + "likeMatches": "この曲を「いいね」した人はこんな曲も「いいね」しました", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "Related songs", + "searchYoutube": "Youtubeで検索", + "showAll": "Show all", + "developerContact": "Developer contacts", + "favoriteSongs": "好きな曲", + "favoriteAlbums": "コレクション", + "favoriteArtists": "フォローしているアーティスト", + "settings": "設定", + "contact": "サポート", + "uiLanguage": "インターフェース言語", + "contentLanguage": "優先言語", + "importProfile": "ロード", + "exportProfile": "セーブ", + "releasedDate": "Released", + "info": "Info", + "showMore": "Show more", + "participatingArtists": "Participating artists", + "moreSongs": "More songs", + "moreAlbums": "More albums", + "moreArtists": "More artists", + "publishedOn": "Published on %s", + "otherMedia": "他のメディア", + "original": "オリジナル", + "vocalists": "ボーカリスト", + "producers": "プロデューサー", + "other": "その他", + "otherArtists": "他のアーティスト", + "noRating": "No rating", + "ratingCount": "{rating} 件の評価", + "labels": "レーベル<", + "notSpecified": "Not specified", + "officialLinks": "公式サイト", + "unofficialLinks": "非公式サイト", + "like": "いいね", + "liked": "いいね", + "discNo": "ディスク {disc}", + "hide": "Hide", + "originalVersion": "オリジナルバージョン", + "topSongs": "人気の曲", + "topAlbums": "人気のアルバム", + "topArtists": "トップアーティスト", + "version": "バージョン", + "search": "サーチ", + "parentTag": "Parent", + "map": "会場", + "emptyFavoriteSongs": "何もないです(´・д・`)…", + "emptyFavoriteAlbums": "何もないです(´・д・`)…", + "emptyFavoriteArtists": "何もないです(´・д・`)…", + "searchResultNotMatched": "何もないです(´・д・`)…", + "discOnSaleDate": "Released at %s", + "collectionStatus": "Collection status", + "collectionStatus.Wishlisted": "Wishlisted", + "collectionStatus.Ordered": "Ordered", + "collectionStatus.Owned": "Owned", + "groupByRating": "Group by rating", + "viewDetail": "View detail", + "username": "Username", + "password": "Password", + "skip": "Skip", + "registerAccount": "Register", + "login": "Login", + "logout": "Logout", + "invalidUsernameOrPassword": "Invalid username or password", + "collect": "Collect", + "autoPlay": "Auto play video", + "register": "Register", + + // Song type + "songType.Original": "オリジナル曲", + "songType.Arrangement": "Arrangement", + "songType.Remaster": "リマスター", + "songType.Remix": "リミックス", + "songType.Cover": "カバー曲", + "songType.Instrumental": "インストゥルメンタル", + "songType.Mashup": "マッシュアップ", + "songType.MusicPV": "音楽PV", + "songType.DramaPV": "ドラマ", + "songType.Other": "その他", + + // Ranking + "ranking.daily": "24時間", + "ranking.weekly": "週間", + "ranking.monthly": "月間", + "ranking.overall": "合計", + "ranking.newlyPublished": "新しく公開", + "ranking.newlyAdded": "新しく追加", + "ranking.popularity": "人気度", + "ranking.allVocalists": "全ボーカリスト", + "ranking.onlyVocaloid": "Vocaloidのみ", + "ranking.onlyUTAU": "UTAUのみ", + "ranking.otherVocalist": "その他のボーカリスト", + + // Sort + "sort.Name": "名称", + "sort.PublishDate": "公開日", + "sort.AdditionDate": "追加日時", + "sort.FavoritedTimes": "お気に入り登録された数", + "sort.RatingScore": "評価点数", + "sort.AdditionDateDesc": "追加された日時(降順)", + "sort.AdditionDateAsc": "追加された日時(昇順)", + "sort.ReleaseDate": "発売日", + "sort.SongCount": "曲数", + "sort.SongRating": "総評価数", + "sort.FollowerCount": "フォロワー数", + "sort.RatingAverage": "平均評価", + "sort.RatingTotal": "総スコア", + "sort.CollectionCount": "ユーザーコレクション数", + "sort.Date": "日時", + "sort.RatingDate": "Rating date", + + // Artist role + "artistRole.Group": "Groups and labels", + "artistRole.Illustrator": "イラストレーター", + "artistRole.VoiceProvider": "声優", + "artistRole.CharacterDesigner": "Character designer", + + "artistReverseRole.Group": "メンバー", + "artistReverseRole.Illustrator": "イラスト提供", + "artistReverseRole.VoiceProvider": "音声提供", + "artistReverseRole.CharacterDesigner": "Designer of", + + // Artist type + "artistType.Circle": "サークル", + "artistType.Label": "レーベル", + "artistType.Illustrator": "イラストレーター", + "artistType.Producer": "音楽プロデューサー", + "artistType.Animator": "動画のプロデューサー", + "artistType.Lyricist": "作詞家", + "artistType.Vocaloid": "Vocaloid", + "artistType.Vocalist": "ボーカリスト", + "artistType.Character": "キャラクター", + "artistType.UTAU": "UTAU", + "artistType.CeVIO": "CeVIO", + "artistType.OtherVoiceSynthesizer": "その他のボーカル音源", + "artistType.OtherVocalist": "他のボーカリスト", + "artistType.OtherGroup": "他のグループ", + "artistType.OtherIndividual": "他の人", + + // Disc type + "discType.Album": "オリジナル・アルバム", + "discType.Single": "シングル", + "discType.EP": "E.P.", + "discType.SplitAlbum": "スプリットアルバム", + "discType.Compilation": "コンピレーションアルバム", + "discType.Video": "Video", + "discType.Artbook": "画集", + "discType.Game": "ゲーム", + "discType.Fanmade": "Fanmade/doujin", + "discType.Other": "その他", + + // Event category + "eventCategory.Unspecified": "Not specified", + "eventCategory.AlbumRelease": "アルバム発売記念", + "eventCategory.Anniversary": "キャラクター発売記念日", + "eventCategory.Club": "クラブ", + "eventCategory.Concert": "コンサート", + "eventCategory.Contest": "コンテスト", + "eventCategory.Convention": "集会", + "eventCategory.Other": "その他" +}; diff --git a/lib/src/i18n/ms.dart b/lib/src/i18n/ms.dart new file mode 100644 index 00000000..82f41f35 --- /dev/null +++ b/lib/src/i18n/ms.dart @@ -0,0 +1,233 @@ +const Map ms = { + "menu": "Menu", + "home": "Home", + "playAll": "Play all", + "theme": "Theme", + "songs": "Lagu", + "song": "Lagu", + "album": "Album", + "albums": "Album", + "artists": "Artis", + "artist": "Artis", + "events": "Acara", + "event": "Acara", + "releaseEvents": "Release events", + "tags": "Tag", + "anything": "Anything", + "highlighted": "PV tersohor", + "recentAlbums": "Album terbaru atau akan datang", + "randomPopularAlbums": "Album popular rawa", + "upcomingEvent": "Acara akan datang", + "songType": "Jenis lagu", + "sort": "Isih", + "ranking": "Ranking", + "artistType": "Jenis artis", + "findSong": "Cari lagu", + "findAlbum": "Cari album", + "findArtist": "Cari artis", + "findEvent": "Cari acara", + "findTag": "Cari tag", + "findAnything": "Cari apa-apa saja", + "filter": "Tapis", + "filterBy": "Tapis ikut", + "vocalist": "Penyanyi", + "all": "semua", + "vocaloid": "Vocaloid", + "utau": "UTAU", + "minimumScore": "Minimum score", + "name": "Nama", + "discType": "Jenis disk", + "category": "Kategori", + "date": "Tarikh", + "dateRange": "Julat tarikh", + "from": "Dari", + "to": "Hingga", + "voicebankReleaseDate": "Tarikh terbit bank suara", + "type": "Jenis", + "favorite": "Kegemaran", + "share": "Kongsi", + "originalMedia": "PV asal", + "lyrics": "Lirik", + "popularSongs": "Lagu popular", + "popularAlbums": "Album popular", + "ads": "Iklan / resap silang", + "trackList": "Senarai lagu", + "disc": "Disk", + "venue": "Tempat", + "description": "Keterangan", + "relatedLink": "Related link", + "setlist": "Senarai set", + "duration": "Jangka masa", + "add": "Tambah", + "follow": "Ikut", + "following": "Mengikut", + "baseVoicebank": "Bank suara asas", + "series": "Siri", + "official": "Official", + "commercial": "Commercial", + "references": "References", + "recentSongsPVs": "Recent Songs / PVs", + "alternateVersion": "Alternate version", + "likeMatches": "Users who liked this also liked", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "Related songs", + "searchYoutube": "Search Youtube", + "showAll": "Show all", + "developerContact": "Developer contacts", + "favoriteSongs": "Lagu kegemaran", + "favoriteAlbums": "Koleksi", + "favoriteArtists": "Artis diikut", + "settings": "Tetapan", + "about": "Perihal", + "contact": "Contact us", + "uiLanguage": "UI language", + "contentLanguage": "Content language", + "importProfile": "Import profile", + "exportProfile": "Export profile", + "releasedDate": "Released", + "info": "Maklumat", + "showMore": "Show more", + "participatingArtists": "Participating artists", + "moreSongs": "More songs", + "moreAlbums": "More albums", + "moreArtists": "More artists", + "publishedOn": "Published on %s", + "otherMedia": "Other media", + "original": "Original", + "vocalists": "Penyanyi", + "producers": "Penerbit", + "other": "Lain-lain", + "otherArtists": "Lain-lain", + "noRating": "No rating", + "ratingCount": "{rating} rating", + "labels": "Labels", + "notSpecified": "Not specified", + "officialLinks": "Official links", + "unofficialLinks": "Unofficial links", + "like": "Kegemaran", + "liked": "Kegemaran", + "discNo": "Disk {disc}", + "hide": "Hide", + "originalVersion": "Original version", + "topSongs": "Top songs", + "topAlbums": "Top albums", + "topArtists": "Top artists", + "version": "Version", + "search": "Search", + "parentTag": "Parent", + "map": "Map", + "emptyFavoriteSongs": "No favorite songs", + "emptyFavoriteAlbums": "No favorite albums ", + "emptyFavoriteArtists": "Nothing yet", + "searchResultNotMatched": "No result match", + "discOnSaleDate": "Released at %s", + "collectionStatus": "Collection status", + "collectionStatus.Wishlisted": "Wishlisted", + "collectionStatus.Ordered": "Ordered", + "collectionStatus.Owned": "Owned", + "groupByRating": "Group by rating", + "viewDetail": "View detail", + "username": "Username", + "password": "Password", + "skip": "Skip", + "registerAccount": "Register", + "login": "Login", + "logout": "Logout", + "invalidUsernameOrPassword": "Invalid username or password", + "collect": "Collect", + "autoPlay": "Auto play video", + "register": "Register", + + // Song type + "songType.Original": "Lagu asal", + "songType.Arrangement": "Arrangement", + "songType.Remaster": "Terbit semula", + "songType.Remix": "Olah semula", + "songType.Cover": "Cover", + "songType.Instrumental": "Tanpa suara", + "songType.Mashup": "Campuran", + "songType.MusicPV": "PV muzik", + "songType.DramaPV": "PV drama", + "songType.Other": "Lain-lain", + + // Ranking + "ranking.daily": "Harian", + "ranking.weekly": "Mingguan", + "ranking.monthly": "Bulanan", + "ranking.overall": "Keseluruhan", + "ranking.newlyPublished": "BaruTerbit", + "ranking.newlyAdded": "BaruTambah", + "ranking.popularity": "Populariti", + "ranking.allVocalists": "Semua penyanyi", + "ranking.onlyVocaloid": "Vocaloid", + "ranking.onlyUTAU": "UTAU", + "ranking.otherVocalist": "Other vocalists", + + // Sort + "sort.Name": "Name", + "sort.PublishDate": "Publish date", + "sort.AdditionDate": "Tarikh ditambah", + "sort.FavoritedTimes": "Times favorited", + "sort.RatingScore": "Rating score", + "sort.AdditionDateDesc": "Tarikh ditambah (menurun)", + "sort.AdditionDateAsc": "Tarikh ditambah (menaik)", + "sort.ReleaseDate": "Release date", + "sort.SongCount": "Number of songs", + "sort.SongRating": "Total song rating", + "sort.FollowerCount": "Number of followers", + "sort.RatingAverage": "Rating average", + "sort.RatingTotal": "Total score", + "sort.CollectionCount": "Collection count", + "sort.Date": "Date", + "sort.RatingDate": "Rating date", + + // Artist role + "artistRole.Group": "Kumpulan dan label", + "artistRole.Illustrator": "Ilustrasi oleh", + "artistRole.VoiceProvider": "Penyedia suara", + "artistRole.CharacterDesigner": "Pereka watak", + "artistReverseRole.Group": "Members", + "artistReverseRole.Illustrator": "Illustrator untuk", + "artistReverseRole.VoiceProvider": "Penyedia suara untuk", + "artistReverseRole.CharacterDesigner": "Pereka untuk", + + // Artist type + "artistType.Circle": "Kalangan", + "artistType.Label": "Label", + "artistType.Illustrator": "Illustrator", + "artistType.Producer": "Penerbit", + "artistType.Animator": "Animator", + "artistType.Lyricist": "Lyricist", + "artistType.Vocaloid": "Vocaloid", + "artistType.Vocalist": "Vocalist", + "artistType.Character": "Character", + "artistType.UTAU": "UTAU", + "artistType.CeVIO": "CeVIO", + "artistType.OtherVoiceSynthesizer": "Other voice synthesizer", + "artistType.OtherVocalist": "Other vocalist", + "artistType.OtherGroup": "Other group", + "artistType.OtherIndividual": "Other individual", + + // Disc type + "discType.Album": "Album asal", + "discType.Single": "Single", + "EP": "E.P.", + "discType.SplitAlbum": "Album pisah", + "discType.Compilation": "Kompilasi", + "discType.Video": "Video", + "discType.Artbook": "Buku seni", + "discType.Game": "Game", + "discType.Fanmade": "Fanmade/doujin", + "discType.Other": "Lain-lain", + + // Release event category + "eventCategory.Unspecified": "Not specified", + "eventCategory.AlbumRelease": "Tempat terbitan album", + "eventCategory.Anniversary": "Ulang tahun watak", + "eventCategory.Club": "Kelab", + "eventCategory.Concert": "Konsert", + "eventCategory.Contest": "Pertandingan", + "eventCategory.Convention": "Konvensyen", + "eventCategory.Other": "Lain-lain" +}; diff --git a/lib/src/i18n/th.dart b/lib/src/i18n/th.dart new file mode 100644 index 00000000..5728ae9d --- /dev/null +++ b/lib/src/i18n/th.dart @@ -0,0 +1,234 @@ +const Map th = { + "menu": "เมนู", + "home": "หน้าแรก", + "playAll": "เล่นทั้งหมด", + "theme": "ธีม", + "songs": "เพลง", + "song": "เพลง", + "album": "อัลบั้ม", + "albums": "อัลบั้ม", + "artists": "ศิลปิน", + "artist": "ศิลปิน", + "events": "กิจกรรม", + "event": "กิจกรรม", + "releaseEvents": "กิจกรรม", + "tags": "แท๊ก", + "anything": "ทั้งหมด", + "highlighted": "รายการน่าสนใจ", + "recentAlbums": "อัลบั้มใหม่", + "randomPopularAlbums": "อัลบั้มยอดนิยม", + "upcomingEvent": "กิจกรรมช่วงนี้", + "songType": "ประเภทเพลง", + "sort": "จัดเรียง", + "ranking": "อันดับ", + "artistType": "ประเภทศิลปิน", + "findSong": "ค้นหาเพลง", + "findAlbum": "ค้นหาอัลบั้ม", + "findArtist": "ค้นหาศิลปิน", + "findEvent": "ค้นหากิจกรรม", + "findTag": "ค้นหาแท๊ก", + "findAnything": "ค้นหาทุกอย่าง", + "filter": "ตัวกรอง", + "filterBy": "กรองตาม", + "vocalist": "นักร้อง", + "all": "ทั้งหมด", + "vocaloid": "Vocaloid", + "utau": "UTAU", + "minimumScore": "Minimum score", + "name": "ชื่อ", + "discType": "ประเภทอัลบั้ม", + "category": "หมวดหมู่", + "date": "วันที่", + "dateRange": "ช่วงวันที่", + "from": "ตั้งแต่", + "to": "ถึง", + "voicebankReleaseDate": "วันวางจำหน่าย", + "type": "ประเภท", + "favorite": "ชื่นชอบ", + "share": "แชร์", + "originalMedia": "ต้นฉบับ", + "lyrics": "เนื้อเพลง", + "popularSongs": "เพลงยอดนิยม", + "popularAlbums": "อัลบั้มยอดนิยม", + "ads": "โฆษณา / โปรโมท", + "trackList": "Tracklist", + "disc": "แผ่น", + "venue": "สถานที่", + "description": "คำอธิบาย", + "relatedLink": "ลิงค์ที่เกี่ยวข้อง", + "setlist": "Setlist", + "duration": "ความยาว", + "add": "เพิ่ม", + "follow": "ติดตาม", + "following": "กำลังติดตาม", + "baseVoicebank": "Voicebank ต้นฉบับ", + "series": "Series", + "official": "Official", + "commercial": "Commercial", + "references": "References", + "recentSongsPVs": "เพลงล่าสุด", + "alternateVersion": "เวอร์ชันดัดแปลงอื่นๆ", + "likeMatches": "รายการที่ชอบคล้ายกัน", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "Related songs", + "searchYoutube": "ค้นหาบน Youtube", + "showAll": "แสดงทั้งหมด", + "developerContact": "ติดต่อผู้พัฒนา", + "favoriteSongs": "เพลงโปรด", + "favoriteAlbums": "อัลบั้มคอลเลคชั่น", + "favoriteArtists": "ศิลปินคนโปรด", + "settings": "ตั้งค่า", + "about": "เกี่ยวกับ", + "contact": "ติดต่อ", + "uiLanguage": "ภาษาแอป", + "contentLanguage": "ภาษาเนื้อหาที่แสดง", + "importProfile": "โหลดข้อมูล", + "exportProfile": "บันทึกข้อมูล", + "releasedDate": "เผยแพร่", + "info": "ข้อมูล", + "showMore": "ดูเพิ่มเติม", + "participatingArtists": "ศิลปินที่เข้าร่วม", + "moreSongs": "เพลงอื่นๆ", + "moreAlbums": "อัลบั้มอื่นๆ", + "moreArtists": "ศิลปินอื่นๆ", + "publishedOn": "เผยแพร่วันที่ %s", + "otherMedia": "แหล่งอื่นๆ", + "original": "ต้นฉบับ", + "vocalists": "นักร้อง", + "producers": "โปรดิวเซอร์", + "other": "อื่นๆ", + "otherArtists": "อื่นๆ", + "noRating": "ยังไม่มีคะแนน", + "ratingCount": "{rating} คะแนน", + "labels": "ค่าย", + "notSpecified": "ไม่ระบุ", + "officialLinks": "Official links", + "unofficialLinks": "Unofficial links", + "like": "ชอบ", + "liked": "ชอบ", + "discNo": "แผ่น {disc}", + "hide": "ซ่อน", + "originalVersion": "ต้นฉบับ", + "topSongs": "เพลงยอดนิยม", + "topAlbums": "อัลบั้มยอดนิยม", + "topArtists": "ศิลปินยอดนิยม", + "version": "เวอร์ชัน", + "search": "ค้นหา", + "parentTag": "Parent", + "map": "แผนที่", + "emptyFavoriteSongs": "ยังไม่มีเพลงที่ชอบ", + "emptyFavoriteAlbums": "ยังไม่มีอัลบั้มที่ชอบ", + "emptyFavoriteArtists": "ยังไม่มีศิลปินที่ชอบ", + "searchResultNotMatched": "ไม่พบรายการจากคำที่ค้นหา", + "discOnSaleDate": "วางจำหน่าย %s", + "collectionStatus": "สถานะอัลบั้ม", + "collectionStatus.Wishlisted": "อยากได้", + "collectionStatus.Ordered": "สั่งแล้ว", + "collectionStatus.Owned": "มีแล้ว", + "groupByRating": "Group by rating", + "viewDetail": "ดูรายละเอียด", + "username": "ชื่อผู้ใช้", + "password": "รหัสผ่าน", + "skip": "ข้ามไปก่อน", + "registerAccount": "สมัครสมาชิก", + "login": "เข้าสู่ระบบ", + "logout": "ออกจากระบบ", + "invalidUsernameOrPassword": "ชื่อผู้ใช้หรือรหัสผ่านผิด ลองใหม่อีกครั้งนะ", + "collect": "Collect", + "autoPlay": "เล่นวิดิโออัตโนมัติ", + "register": "สมัครสมาชิก", + + // Song type + "songType.Original": "ต้นฉบับ", + "songType.Arrangement": "Arrangement", + "songType.Remaster": "รีมาสเตอร์", + "songType.Remix": "รีมิกซ์", + "songType.Cover": "Cover", + "songType.Instrumental": "ดนตรี", + "songType.Mashup": "Mashup", + "songType.MusicPV": "Music PV", + "songType.DramaPV": "Drama PV", + "songType.Other": "อื่นๆ", + + // Ranking + "ranking.daily": "รายวัน", + "ranking.weekly": "สัปดาห์", + "ranking.monthly": "เดือน", + "ranking.overall": "ทั้งหมด", + "ranking.newlyPublished": "เผยแพร่ล่าสุด", + "ranking.newlyAdded": "เพิ่มล่าสุด", + "ranking.popularity": "ความนิยม", + "ranking.allVocalists": "นักร้องทั้งหมด", + "ranking.onlyVocaloid": "เฉพาะ Vocaloid", + "ranking.onlyUTAU": "เฉพาะ UTAU", + "ranking.otherVocalist": "อื่นๆ", + + // Sort + "sort.Name": "ชื่อ", + "sort.PublishDate": "วันที่เผยแพร่", + "sort.AdditionDate": "วันที่เพิ่ม", + "sort.FavoritedTimes": "จำนวนความชอบ", + "sort.RatingScore": "คะแนนความชอบ", + "sort.AdditionDateDesc": "วันที่เพิ่ม (ล่าสุด)", + "sort.AdditionDateAsc": "วันที่เพิ่ม (นานสุด)", + "sort.ReleaseDate": "วันที่เผยแพร่", + "sort.SongCount": "จำนวนเพลง", + "sort.SongRating": "คะแนน", + "sort.FollowerCount": "จำนวนผู้ติดตาม", + "sort.RatingAverage": "คะแนนเฉลี่ย", + "sort.RatingTotal": "จำนวนคะแนนทั้งหมด", + "sort.CollectionCount": "จำนวนคอลเลคชั่น", + "sort.Date": "วันที่", + "sort.RatingDate": "วันที่กดชื่นชอบ", + + // Artist role + "artistRole.Group": "กลุ่ม/ค่าย", + "artistRole.Illustrator": "วาดโดย", + "artistRole.VoiceProvider": "ผู้ให้เสียง", + "artistRole.CharacterDesigner": "ออกแบบตัวละคร", + "artistReverseRole.Group": "สมาชิก", + "artistReverseRole.Illustrator": "เป็นผู้วาดให้", + "artistReverseRole.VoiceProvider": "ให้เสียงกับ", + "artistReverseRole.CharacterDesigner": "ตัวละครที่ออกแบบ", + + // Artist type + "artistType.Circle": "เซอร์เคิล", + "artistType.Label": "ค่าย", + "artistType.Illustrator": "นักวาด", + "artistType.Producer": "โปรดิวเซอร์", + "artistType.Animator": "อนิเมเตอร์", + "artistType.Lyricist": "Lyricist", + "artistType.Vocaloid": "Vocaloid", + "artistType.Vocalist": "นักร้อง", + "artistType.Character": "ตัวละคร", + "artistType.UTAU": "UTAU", + "artistType.CeVIO": "CeVIO", + "artistType.OtherVoiceSynthesizer": "เสียงสังเคราะห์", + "artistType.OtherVocalist": "เสียงร้องอื่นๆ", + "artistType.OtherGroup": "กลุ่มอื่นๆ", + "artistType.OtherIndividual": "Other individual", + + // Disc type + "discType.Album": "ออริจินัล", + "discType.Single": "ซิงเกิล", + "discType.EP": "E.P.", + "discType.SplitAlbum": "Split album", + "discType.Compilation": "Compilation", + "discType.Video": "วิดิโอ", + "discType.Artbook": "หนังสือ/อาร์ตบุ๊ค", + "discType.Game": "เกม", + "discType.Fanmade": "แฟนเมด/โดจิน", + "discType.Other": "อื่นๆ", + + // Release event category + + "eventCategory.Unspecified": "ไม่ระบุ", + "eventCategory.AlbumRelease": "จำหน่ายอัลบั้ม", + "eventCategory.Anniversary": "วันครบรอบ", + "eventCategory.Club": "คลับ", + "eventCategory.Concert": "คอนเสิร์ต", + "eventCategory.Contest": "ประกวด", + "eventCategory.Convention": "มีตติ้ง/พูดคุย", + "eventCategory.Other": "อื่นๆ" +}; diff --git a/lib/src/i18n/zh.dart b/lib/src/i18n/zh.dart new file mode 100644 index 00000000..1100e3d2 --- /dev/null +++ b/lib/src/i18n/zh.dart @@ -0,0 +1,242 @@ +const Map zh = { + "menu": "菜单", + "home": "主页", + "playAll": "播放全部", + "theme": "主题", + "songs": "歌曲", + "song": "歌曲", + "album": "专辑", + "albums": "专辑", + "artists": "艺术家", + "artist": "艺术家", + "events": "活动", + "event": "活动", + "releaseEvents": "活动", + "tags": "标签", + "anything": "任意内容", + "highlighted": "精选 PV", + "recentAlbums": "新专发行", + "randomPopularAlbums": "随机热门专辑", + "upcomingEvent": "近期活动", + "songType": "歌曲类别", + "sort": "排序", + "ranking": "排行", + "artistType": "艺术家类别", + "findSong": "搜索歌曲", + "findAlbum": "搜索专辑", + "findArtist": "搜索艺术家", + "findEvent": "搜索活动", + "findTag": "搜索标签", + "findAnything": "搜索任意内容", + "filter": "筛选", + "filterBy": "筛选依据", + "vocalist": "歌手", + "all": "全部", + "vocaloid": "VOCALOID", + "utau": "UTAU", + "minimumScore": "最低分", + "name": "名称", + "discType": "专辑类别", + "category": "分类", + "date": "日期", + "dateRange": "日期范围", + "from": "自", + "to": "至", + "voicebankReleaseDate": "声库发布日期", + "selectArtist": "选择艺术家", + "selectTag": "选择标签", + "recentSearch": "搜索历史", + "clearFilter": "取消筛选", + "type": "类别", + "favorite": "Favorite", + "share": "分享", + "originalMedia": "本家投稿", + "lyrics": "歌词", + "popularSongs": "热门歌曲", + "popularAlbums": "热门专辑", + "ads": "Ads / crossfades", + "trackList": "曲目", + "disc": "Disc", + "venue": "地点", + "description": "简介", + "relatedLink": "相关链接", + "setlist": "曲目单", + "duration": "时长", + "add": "添加", + "follow": "关注", + "following": "正在关注", + "baseVoicebank": "基础声库", + "series": "系列", + "official": "官方", + "commercial": "商业", + "references": "信息来源", + "recentSongsPVs": "近期歌曲/PV", + "alternateVersion": "其他版本", + "likeMatches": "你可能还喜欢", + "artistMatches": "Matching artists", + "tagMatches": "Matching tags", + "relatedSongs": "相关歌曲", + "searchYoutube": "在 Youtube 中搜索", + "showAll": "显示全部", + "developerContact": "联系开发者", + "favoriteSongs": "我喜爱的歌曲", + "favoriteAlbums": "我收藏的专辑", + "favoriteArtists": "我关注的艺术家", + "settings": "设置", + "about": "关于", + "contact": "联系我们", + "general": "通用", + "uiLanguage": "界面语言", + "contentLanguage": "首选内容语言", + "importProfile": "导入个人数据", + "exportProfile": "导出个人数据", + "releasedDate": "发行", + "info": "详情", + "showMore": "更多信息", + "participatingArtists": "参与的艺术家", + "moreSongs": "更多歌曲", + "moreAlbums": "更多专辑", + "moreArtists": "更多艺术家", + "publishedOn": "发布于 %s", + "otherMedia": "转载投稿", + "original": "本家", + "vocalists": "歌手", + "producers": "P主", + "other": "其他", + "otherArtists": "其他艺术家", + "noRating": "没有评分", + "ratingCount": "{rating} 次评分", + "labels": "厂牌", + "notSpecified": "不指定", + "officialLinks": "官方链接", + "unofficialLinks": "非官方链接", + "like": "收藏", + "liked": "已收藏", + "discNo": "Disc {disc}", + "hide": "收起", + "originalVersion": "原版", + "topSongs": "人气歌曲", + "topAlbums": "人气专辑", + "topArtists": "人气艺术家", + "version": "版本", + "search": "搜索", + "parentTag": "上级标签", + "map": "地图", + "emptyFavoriteSongs": "什么都没有(>_<)", + "emptyFavoriteAlbums": "什么都没有(>_<)", + "emptyFavoriteArtists": "什么都没有(>_<)", + "searchResultNotMatched": "什么都没找到(>_<)", + "discOnSaleDate": "Released at %s", + "collectionStatus": "Collection status", + "collectionStatus.Wishlisted": "Wishlisted", + "collectionStatus.Ordered": "Ordered", + "collectionStatus.Owned": "Owned", + "groupByRating": "Group by rating", + "viewDetail": "View detail", + "username": "Username", + "password": "Password", + "skip": "Skip", + "registerAccount": "Register", + "login": "Login", + "logout": "Logout", + "invalidUsernameOrPassword": "Invalid username or password", + "collect": "Collect", + "autoPlay": "Auto play video", + "register": "Register", + + // Song type + "songType.Unspecified": "不指定", + "songType.Original": "原创", + "songType.Arrangement": "Arrangement", + "songType.Remaster": "重新调教(Remaster)", + "songType.Remix": "重新混音(Remix)", + "songType.Cover": "翻唱/翻奏", + "songType.Instrumental": "纯音乐", + "songType.Mashup": "混剪", + "songType.MusicPV": "音乐 PV", + "songType.DramaPV": "剧情 PV", + "songType.Other": "其他", + + // Ranking + "ranking.daily": "日", + "ranking.weekly": "周", + "ranking.monthly": "月", + "ranking.overall": "总", + "ranking.newlyPublished": "最新发布", + "ranking.newlyAdded": "最新添加", + "ranking.popularity": "人气", + "ranking.allVocalists": "全部歌手", + "ranking.onlyVocaloid": "仅限 VOCALOID", + "ranking.onlyUTAU": "仅限 UTAU", + "ranking.otherVocalist": "其他歌手", + + // Sort + "sort.Unspecified": "不指定", + "sort.Name": "名称", + "sort.PublishDate": "发布日期", + "sort.AdditionDate": "添加日期", + "sort.FavoritedTimes": "收藏数", + "sort.RatingScore": "评分", + "sort.AdditionDateDesc": "添加日期(降序)", + "sort.AdditionDateAsc": "添加日期(升序)", + "sort.ReleaseDate": "发行日期", + "sort.SongCount": "歌曲数", + "sort.SongRating": "评分次数", + "sort.FollowerCount": "收藏数", + "sort.RatingAverage": "平均评分", + "sort.RatingTotal": "总评分", + "sort.CollectionCount": "收藏数", + "sort.Date": "日期", + "sort.RatingDate": "Rating date", + + // Artist role + "artistRole.Group": "所属", + "artistRole.Illustrator": "画师", + "artistRole.VoiceProvider": "音源", + "artistRole.CharacterDesigner": "人设", + "artistReverseRole.Group": "成员/相关人物", + "artistReverseRole.Illustrator": "角色绘制", + "artistReverseRole.VoiceProvider": "音源提供", + "artistReverseRole.CharacterDesigner": "人物设计", + +// Artist type + "artistType.Unspecified": "不指定", + "artistType.Circle": "社团", + "artistType.Label": "音乐厂牌", + "artistType.Illustrator": "插画师", + "artistType.Producer": "P主", + "artistType.Animator": "动画师", + "artistType.Lyricist": "作词家", + "artistType.Vocaloid": "VOCALOID", + "artistType.Vocalist": "Vocalist", + "artistType.Character": "Character", + "artistType.UTAU": "UTAU", + "artistType.CeVIO": "CeVIO", + "artistType.OtherVoiceSynthesizer": "其他虚拟歌手", + "artistType.OtherVocalist": "唱见", + "artistType.OtherGroup": "其他团体", + "artistType.OtherIndividual": "其他个人", + + // Disc type + "discType.Unspecified": "不指定", + "discType.Album": "原创专辑", + "discType.Single": "单曲", + "discType.EP": "迷你专辑/EP", + "discType.SplitAlbum": "拼盘专辑", + "discType.Compilation": "合辑/精选辑", + "discType.Video": "视频", + "discType.Artbook": "画集", + "discType.Game": "游戏", + "discType.Fanmade": "同人", + "discType.Other": "其他", + + // Release event category + "eventCategory.Unspecified": "不指定", + "eventCategory.AlbumRelease": "专辑发布会", + "eventCategory.Anniversary": "角色生日祭", + "eventCategory.Club": "俱乐部", + "eventCategory.Concert": "演唱会/音乐会", + "eventCategory.Contest": "比赛", + "eventCategory.Convention": "集会", + "eventCategory.Other": "其他" +}; diff --git a/lib/src/loggers/analytic_log.dart b/lib/src/loggers/analytic_log.dart new file mode 100644 index 00000000..2915f96d --- /dev/null +++ b/lib/src/loggers/analytic_log.dart @@ -0,0 +1,48 @@ +import 'package:firebase_analytics/firebase_analytics.dart'; + +/// A helper class for logging simple usage such as when user open any detail page for only statistics. +/// No personal data logging here. All data are logged as anonymous. +class AnalyticLog { + final FirebaseAnalytics analytics; + + final bool enable; + + const AnalyticLog({this.analytics, this.enable = true}); + + Future logViewSongDetail(int id) { + return (enable) + ? analytics.logSelectContent(contentType: 'song', itemId: id.toString()) + : Future.value(); + } + + Future logViewArtistDetail(int id) { + return (enable) + ? analytics.logSelectContent( + contentType: 'artist', itemId: id.toString()) + : Future.value(); + } + + Future logViewAlbumDetail(int id) { + return (enable) + ? analytics.logSelectContent( + contentType: 'album', itemId: id.toString()) + : Future.value(); + } + + Future logViewReleaseEventDetail(int id) { + return (enable) + ? analytics.logSelectContent( + contentType: 'release_event', itemId: id.toString()) + : Future.value(); + } + + Future logViewTagDetail(int id) { + return (enable) + ? analytics.logSelectContent(contentType: 'tag', itemId: id.toString()) + : Future.value(); + } + + Future logLogin() { + return (enable) ? analytics.logLogin() : Future.value(); + } +} diff --git a/lib/models/album_disc_model.dart b/lib/src/models/album_disc_model.dart similarity index 71% rename from lib/models/album_disc_model.dart rename to lib/src/models/album_disc_model.dart index a9e608d7..b0473df6 100644 --- a/lib/models/album_disc_model.dart +++ b/lib/src/models/album_disc_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/track_model.dart'; +import 'package:vocadb_app/models.dart'; class AlbumDiscModel { int discNumber; diff --git a/lib/models/album_model.dart b/lib/src/models/album_model.dart similarity index 69% rename from lib/models/album_model.dart rename to lib/src/models/album_model.dart index c5ac7e11..9bd5c668 100644 --- a/lib/models/album_model.dart +++ b/lib/src/models/album_model.dart @@ -1,17 +1,11 @@ import 'dart:collection'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/album_disc_model.dart'; -import 'package:vocadb/models/artist_album_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_date_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/models/track_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; import "package:collection/collection.dart"; class AlbumModel extends EntryModel { - EntryType entryType = EntryType.Album; List tracks; List artists; String catalogNumber; @@ -20,7 +14,12 @@ class AlbumModel extends EntryModel { int ratingCount; ReleaseDateModel releaseDate; - AlbumModel(); + AlbumModel({int id, String name, String artistString}) + : super( + id: id, + name: name, + artistString: artistString, + entryType: EntryType.Album); AlbumModel.fromJson(Map json) : catalogNumber = json['catalogNumber'], @@ -36,7 +35,19 @@ class AlbumModel extends EntryModel { releaseDate = json.containsKey('releaseDate') ? ReleaseDateModel.fromJson(json['releaseDate']) : null, - super.fromJson(json); + super.fromJson(json, entryType: EntryType.Album); + + AlbumModel.fromEntry(EntryModel entry) + : super( + id: entry.id, + name: entry.name, + artistString: entry.artistString, + songType: entry.songType, + mainPicture: entry.mainPicture, + discType: entry.discType, + eventCategory: entry.eventCategory, + artistType: entry.artistType, + entryType: EntryType.Album); static List jsonToList(List items) { return items.map((i) => AlbumModel.fromJson(i)).toList(); @@ -58,9 +69,11 @@ class AlbumModel extends EntryModel { get imageUrl => (mainPicture != null && mainPicture.urlThumb != null) ? mainPicture.urlThumb - : '$HOST/Album/CoverPicture/$id'; + : '$baseUrl/Album/CoverPicture/$id'; + + String get originUrl => '$baseUrl/Al/${this.id}'; - String get releaseDateFormatted => releaseDate.formatted; + String get releaseDateFormatted => releaseDate?.formatted; bool get isContainsYoutubeTrack => tracks.firstWhere((t) => t.song != null && t.song.youtubePV != null, diff --git a/lib/src/models/album_user_model.dart b/lib/src/models/album_user_model.dart new file mode 100644 index 00000000..6b5a8de4 --- /dev/null +++ b/lib/src/models/album_user_model.dart @@ -0,0 +1,16 @@ +import 'package:vocadb_app/models.dart'; + +class AlbumUserModel { + AlbumModel album; + + AlbumUserModel.fromJson(Map json) + : album = json.containsKey('album') + ? AlbumModel.fromJson(json['album']) + : null; + + static List jsonToList(List items) { + return (items == null) + ? [] + : items.map((i) => AlbumUserModel.fromJson(i)).toList(); + } +} diff --git a/lib/models/artist_album_model.dart b/lib/src/models/artist_album_model.dart similarity index 85% rename from lib/models/artist_album_model.dart rename to lib/src/models/artist_album_model.dart index 9bc8d409..615cb983 100644 --- a/lib/models/artist_album_model.dart +++ b/lib/src/models/artist_album_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/artist_model.dart'; +import 'package:vocadb_app/models.dart'; class ArtistAlbumModel { int id; @@ -8,6 +8,14 @@ class ArtistAlbumModel { String categories; ArtistModel artist; + ArtistAlbumModel( + {this.id, + this.name, + this.roles, + this.effectiveRoles, + this.categories, + this.artist}); + ArtistAlbumModel.fromJson(Map json) : id = json['id'], name = json['name'], diff --git a/lib/models/artist_event_model.dart b/lib/src/models/artist_event_model.dart similarity index 95% rename from lib/models/artist_event_model.dart rename to lib/src/models/artist_event_model.dart index 69a2f93e..c9dcee17 100644 --- a/lib/models/artist_event_model.dart +++ b/lib/src/models/artist_event_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/artist_model.dart'; +import 'package:vocadb_app/models.dart'; class ArtistEventModel { int id; diff --git a/lib/models/artist_link_model.dart b/lib/src/models/artist_link_model.dart similarity index 55% rename from lib/models/artist_link_model.dart rename to lib/src/models/artist_link_model.dart index 63228b47..baa67d15 100644 --- a/lib/models/artist_link_model.dart +++ b/lib/src/models/artist_link_model.dart @@ -1,9 +1,12 @@ -import 'package:vocadb/models/artist_model.dart'; +import 'package:vocadb_app/models.dart'; +import "package:collection/collection.dart"; class ArtistLinkModel { String linkType; ArtistModel artist; + ArtistLinkModel({this.linkType, this.artist}); + ArtistLinkModel.fromJson(Map json) : linkType = json['linkType'], artist = (json.containsKey('artist') && !(json['artist'] is int)) @@ -15,3 +18,14 @@ class ArtistLinkModel { String get artistImageUrl => (this.artist == null) ? null : this.artist.imageUrl; } + +class ArtistLinkList { + final List artistLinks; + + const ArtistLinkList(this.artistLinks); + + Map get groupByLinkType => + groupBy(artistLinks, (ArtistLinkModel l) { + return l.linkType; + }); +} diff --git a/lib/models/artist_model.dart b/lib/src/models/artist_model.dart similarity index 74% rename from lib/models/artist_model.dart rename to lib/src/models/artist_model.dart index 135e477d..abd03d93 100644 --- a/lib/models/artist_model.dart +++ b/lib/src/models/artist_model.dart @@ -1,13 +1,9 @@ import 'package:intl/intl.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/artist_link_model.dart'; -import 'package:vocadb/models/artist_relations_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; class ArtistModel extends EntryModel { - EntryType entryType = EntryType.Artist; String additionalNames; String releaseDate; String description; @@ -33,7 +29,30 @@ class ArtistModel extends EntryModel { artistLinksReverse = JSONUtils.mapJsonArray( json['artistLinksReverse'], (v) => (v is int) ? null : ArtistLinkModel.fromJson(v)), - super.fromJson(json); + super.fromJson(json, entryType: EntryType.Artist); + + ArtistModel.fromEntry(EntryModel entry) + : super( + id: entry.id, + name: entry.name, + artistString: entry.artistString, + songType: entry.songType, + mainPicture: entry.mainPicture, + discType: entry.discType, + eventCategory: entry.eventCategory, + artistType: entry.artistType, + entryType: EntryType.Artist); + + ArtistModel( + {int id, String name, String artistType, MainPictureModel mainPicture}) + : super( + id: id, + name: name, + mainPicture: mainPicture, + artistType: artistType, + entryType: EntryType.Artist); + + String get originUrl => '$baseUrl/Ar/${this.id}'; static List jsonToList(List items) { return items.map((i) => ArtistModel.fromJson(i)).toList(); @@ -43,7 +62,7 @@ class ArtistModel extends EntryModel { ? null : DateFormat('yyyy-MM-dd').format(DateTime.parse(releaseDate)); - String get imageUrl => '$HOST/Artist/Picture/$id'; + String get imageUrl => '$baseUrl/Artist/Picture/$id'; List get voiceProviders => this .artistLinks diff --git a/lib/models/artist_relations_model.dart b/lib/src/models/artist_relations_model.dart similarity index 91% rename from lib/models/artist_relations_model.dart rename to lib/src/models/artist_relations_model.dart index 1ee0b640..15d3f508 100644 --- a/lib/models/artist_relations_model.dart +++ b/lib/src/models/artist_relations_model.dart @@ -1,5 +1,4 @@ -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/song_model.dart'; +import 'package:vocadb_app/models.dart'; class ArtistRelations { List latestSongs; diff --git a/lib/src/models/artist_role_model.dart b/lib/src/models/artist_role_model.dart new file mode 100644 index 00000000..39b536ea --- /dev/null +++ b/lib/src/models/artist_role_model.dart @@ -0,0 +1,17 @@ +class ArtistRoleModel { + final int id; + + final String name; + + final String role; + + final String imageUrl; + + const ArtistRoleModel({this.id, this.name, this.role, this.imageUrl}); + + bool get isProducer => (this.role == 'Producer'); + + bool get isVocalist => (this.role == 'Vocalist'); + + bool get isOtherRole => (!isProducer && !isVocalist); +} diff --git a/lib/models/artist_song_model.dart b/lib/src/models/artist_song_model.dart similarity index 83% rename from lib/models/artist_song_model.dart rename to lib/src/models/artist_song_model.dart index 57ad642d..862801cc 100644 --- a/lib/models/artist_song_model.dart +++ b/lib/src/models/artist_song_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/artist_model.dart'; +import 'package:vocadb_app/models.dart'; class ArtistSongModel { int id; @@ -8,6 +8,14 @@ class ArtistSongModel { String categories; ArtistModel artist; + ArtistSongModel( + {this.id, + this.name, + this.roles, + this.effectiveRoles, + this.categories, + this.artist}); + ArtistSongModel.fromJson(Map json) : id = json['id'], name = json['name'], diff --git a/lib/models/base_model.dart b/lib/src/models/base_model.dart similarity index 100% rename from lib/models/base_model.dart rename to lib/src/models/base_model.dart diff --git a/lib/models/entry_model.dart b/lib/src/models/entry_model.dart similarity index 77% rename from lib/models/entry_model.dart rename to lib/src/models/entry_model.dart index 61896900..f49fb9c3 100644 --- a/lib/models/entry_model.dart +++ b/lib/src/models/entry_model.dart @@ -1,9 +1,6 @@ import 'package:intl/intl.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/models/base_model.dart'; -import 'package:vocadb/models/main_picture_model.dart'; -import 'package:vocadb/models/tag_group_model.dart'; -import 'package:vocadb/models/web_link_model.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; class EntryModel extends BaseModel { int id; @@ -21,18 +18,34 @@ class EntryModel extends BaseModel { List tagGroups; List webLinks; - EntryModel(); + EntryModel( + {this.id, + this.entryType, + this.additionalNames, + this.defaultName, + this.name, + this.artistString, + this.artistType, + this.songType, + this.discType, + this.eventCategory, + this.activityDate, + this.mainPicture, + this.tagGroups, + this.webLinks}); - EntryModel.fromJson(Map json) + EntryModel.fromJson(Map json, {EntryType entryType}) : id = json['id'], name = json['name'], songType = json['songType'], discType = json['discType'], eventCategory = json['eventCategory'], activityDate = json['activityDate'], - additionalNames = json['additionalNames'], + additionalNames = json['additionalNames'] ?? '', defaultName = json['defaultName'], - entryType = entryTypeToEnum(json['entryType']), + entryType = (entryType != null) + ? entryType + : entryTypeToEnum(json['entryType']), artistString = json['artistString'], artistType = json['artistType'], mainPicture = json.containsKey('mainPicture') @@ -42,12 +55,12 @@ class EntryModel extends BaseModel { ? (json['tags'] as List) ?.map((d) => TagGroupModel.fromJson(d)) ?.toList() - : null, + : [], webLinks = (json.containsKey('webLinks')) ? (json['webLinks'] as List) ?.map((d) => WebLinkModel.fromJson(d)) ?.toList() - : null; + : []; static List jsonToList(List items) { return items.map((i) => EntryModel.fromJson(i)).toList(); @@ -55,16 +68,17 @@ class EntryModel extends BaseModel { String get imageUrl { if (mainPicture != null) { - return (entryType == EntryType.ReleaseEvent || entryType == EntryType.ReleaseEventSeries) + return (entryType == EntryType.ReleaseEvent || + entryType == EntryType.ReleaseEventSeries) ? mainPicture.urlThumb.replaceAll('mainThumb', 'mainOrig') : mainPicture.urlThumb; } switch (entryType) { case EntryType.Artist: - return '$HOST/Artist/Picture/$id'; + return '$baseUrl/Artist/Picture/$id'; case EntryType.Album: - return '$HOST/Album/CoverPicture/$id'; + return '$baseUrl/Album/CoverPicture/$id'; default: return 'https://via.placeholder.com/150x150?text=no_image'; } @@ -137,6 +151,8 @@ class EntryList { entries.where((e) => e.entryType == EntryType.Album).toList(); List get releaseEvents => entries.where((e) => e.entryType == EntryType.ReleaseEvent).toList(); + List get tags => + entries.where((e) => e.entryType == EntryType.Tag).toList(); } enum EntryType { diff --git a/lib/src/models/followed_artist_model.dart b/lib/src/models/followed_artist_model.dart new file mode 100644 index 00000000..a8d9214c --- /dev/null +++ b/lib/src/models/followed_artist_model.dart @@ -0,0 +1,16 @@ +import 'package:vocadb_app/models.dart'; + +class FollowedArtistModel { + ArtistModel artist; + + FollowedArtistModel.fromJson(Map json) + : artist = json.containsKey('artist') + ? ArtistModel.fromJson(json['artist']) + : null; + + static List jsonToList(List items) { + return (items == null) + ? [] + : items.map((i) => FollowedArtistModel.fromJson(i)).toList(); + } +} diff --git a/lib/models/lyric_model.dart b/lib/src/models/lyric_model.dart similarity index 70% rename from lib/models/lyric_model.dart rename to lib/src/models/lyric_model.dart index 94353ecc..ce9b2d44 100644 --- a/lib/models/lyric_model.dart +++ b/lib/src/models/lyric_model.dart @@ -1,13 +1,17 @@ -import 'package:vocadb/models/base_model.dart'; +import 'package:vocadb_app/models.dart'; class LyricModel extends BaseModel { int id; String translationType; + String cultureCode; String value; + LyricModel({this.id, this.translationType, this.cultureCode, this.value}); + LyricModel.fromJson(Map json) : id = json['id'], translationType = json['translationType'], + cultureCode = json['cultureCode'], value = json['value']; } diff --git a/lib/models/main_picture_model.dart b/lib/src/models/main_picture_model.dart similarity index 93% rename from lib/models/main_picture_model.dart rename to lib/src/models/main_picture_model.dart index 57721223..6c43e518 100644 --- a/lib/models/main_picture_model.dart +++ b/lib/src/models/main_picture_model.dart @@ -4,7 +4,7 @@ class MainPictureModel { String urlThumb; String urlTinyThumb; - MainPictureModel(); + MainPictureModel({this.urlThumb}); MainPictureModel.fromJson(Map json) : meme = json['meme'], diff --git a/lib/models/profile_model.dart b/lib/src/models/profile_model.dart similarity index 79% rename from lib/models/profile_model.dart rename to lib/src/models/profile_model.dart index 026332bc..89d3e806 100644 --- a/lib/models/profile_model.dart +++ b/lib/src/models/profile_model.dart @@ -1,8 +1,5 @@ -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/base_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; class ProfileModel extends BaseModel { List followedArtists; diff --git a/lib/models/pv_model.dart b/lib/src/models/pv_model.dart similarity index 84% rename from lib/models/pv_model.dart rename to lib/src/models/pv_model.dart index 0b294a5b..b4e52a2b 100644 --- a/lib/models/pv_model.dart +++ b/lib/src/models/pv_model.dart @@ -4,12 +4,17 @@ class PVModel { String service; String url; String pvType; + int length; + + PVModel( + {this.id, this.name, this.service, this.url, this.pvType, this.length}); PVModel.fromJson(Map json) : id = json['id'], name = json['name'], service = json['service'], pvType = json['pvType'], + length = json['length'], url = json['url']; Map toJson() { @@ -18,6 +23,7 @@ class PVModel { 'name': name, 'service': service, 'url': url, + 'length': length, 'pvType': pvType, }; } diff --git a/lib/src/models/radio_button_item.dart b/lib/src/models/radio_button_item.dart new file mode 100644 index 00000000..f868a73f --- /dev/null +++ b/lib/src/models/radio_button_item.dart @@ -0,0 +1,7 @@ +class RadioButtonItem { + final String label; + + final String value; + + const RadioButtonItem({this.label, this.value}); +} diff --git a/lib/src/models/rated_song_model.dart b/lib/src/models/rated_song_model.dart new file mode 100644 index 00000000..2f5d7072 --- /dev/null +++ b/lib/src/models/rated_song_model.dart @@ -0,0 +1,19 @@ +import 'package:vocadb_app/models.dart'; + +class RatedSongModel { + DateTime date; + SongModel song; + String rating; + + RatedSongModel.fromJson(Map json) + : date = DateTime.parse(json['date']), + rating = json['rating'], + song = + json.containsKey('song') ? SongModel.fromJson(json['song']) : null; + + static List jsonToList(List items) { + return (items == null) + ? [] + : items.map((i) => RatedSongModel.fromJson(i)).toList(); + } +} diff --git a/lib/models/release_date_model.dart b/lib/src/models/release_date_model.dart similarity index 85% rename from lib/models/release_date_model.dart rename to lib/src/models/release_date_model.dart index 79118e7f..1ff261f4 100644 --- a/lib/models/release_date_model.dart +++ b/lib/src/models/release_date_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/base_model.dart'; +import 'package:vocadb_app/models.dart'; class ReleaseDateModel extends BaseModel { int day; @@ -11,4 +11,4 @@ class ReleaseDateModel extends BaseModel { formatted = json['formatted'], mouth = json['mouth'], year = json['year']; -} \ No newline at end of file +} diff --git a/lib/src/models/release_event_model.dart b/lib/src/models/release_event_model.dart new file mode 100644 index 00000000..5dd6a7ea --- /dev/null +++ b/lib/src/models/release_event_model.dart @@ -0,0 +1,67 @@ +import 'package:intl/intl.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; + +class ReleaseEventModel extends EntryModel { + EntryType entryType = EntryType.ReleaseEvent; + String description; + String category; + String venueName; + DateTime date; + DateTime endDate; + ReleaseEventSeriesModel series; + List artists; + + ReleaseEventModel({ + int id, + String name, + String eventCategory, + MainPictureModel mainPicture, + }) : super( + id: id, + name: name, + eventCategory: eventCategory, + mainPicture: mainPicture, + entryType: EntryType.ReleaseEvent); + + ReleaseEventModel.fromJson(Map json) + : description = json['description'], + category = json['category'], + venueName = json['venueName'], + date = json.containsKey('date') ? DateTime.parse(json['date']) : null, + endDate = json.containsKey('endDate') + ? DateTime.parse(json['endDate']) + : null, + series = json.containsKey('series') + ? ReleaseEventSeriesModel.fromJson(json['series']) + : null, + artists = JSONUtils.mapJsonArray( + json['artists'], (v) => ArtistEventModel.fromJson(v)), + super.fromJson(json); + + ReleaseEventModel.fromEntry(EntryModel entry) + : super( + id: entry.id, + name: entry.name, + artistString: entry.artistString, + songType: entry.songType, + mainPicture: entry.mainPicture, + discType: entry.discType, + eventCategory: entry.eventCategory, + artistType: entry.artistType, + entryType: EntryType.ReleaseEvent); + + static List jsonToList(List items) { + return items.map((i) => ReleaseEventModel.fromJson(i)).toList(); + } + + String get displayCategory { + return series?.category ?? category; + } + + String get dateFormatted => + (date == null) ? null : DateFormat('yyyy-MM-dd').format(date); + + String get originUrl => '$baseUrl/E/${this.id}'; +} diff --git a/lib/models/release_event_series_model.dart b/lib/src/models/release_event_series_model.dart similarity index 69% rename from lib/models/release_event_series_model.dart rename to lib/src/models/release_event_series_model.dart index e4cea694..18a75fdd 100644 --- a/lib/models/release_event_series_model.dart +++ b/lib/src/models/release_event_series_model.dart @@ -1,15 +1,15 @@ -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; class ReleaseEventSeriesModel extends EntryModel { EntryType entryType = EntryType.ReleaseEventSeries; String description; String category; String pictureMime; - List events; + List events; - ReleaseEventSeriesModel(); + ReleaseEventSeriesModel({int id}) : super(id: id); ReleaseEventSeriesModel.fromJson(Map json) : description = json['description'], @@ -21,5 +21,6 @@ class ReleaseEventSeriesModel extends EntryModel { static List jsonToList(List items) { return items.map((i) => ReleaseEventSeriesModel.fromJson(i)).toList(); } + + String get originUrl => '$baseUrl/Es/${this.id}'; } - \ No newline at end of file diff --git a/lib/src/models/simple_dropdown_item.dart b/lib/src/models/simple_dropdown_item.dart new file mode 100644 index 00000000..2b06e562 --- /dev/null +++ b/lib/src/models/simple_dropdown_item.dart @@ -0,0 +1,8 @@ +/// A class using for dropdown input to generate menu items. +class SimpleDropdownItem { + final String name; + + final String value; + + const SimpleDropdownItem({this.name, this.value}); +} diff --git a/lib/models/song_model.dart b/lib/src/models/song_model.dart similarity index 64% rename from lib/models/song_model.dart rename to lib/src/models/song_model.dart index 1f1a026f..2ca5ec26 100644 --- a/lib/models/song_model.dart +++ b/lib/src/models/song_model.dart @@ -1,14 +1,9 @@ import 'package:intl/intl.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/artist_song_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/lyric_model.dart'; -import 'package:vocadb/models/pv_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; class SongModel extends EntryModel { - EntryType entryType = EntryType.Song; String thumbUrl; List pvs; List artists; @@ -17,21 +12,45 @@ class SongModel extends EntryModel { String publishDate; List lyrics; - SongModel(); + SongModel( + {int id, + String name, + String songType, + String artistString, + this.pvs, + this.thumbUrl}) + : super( + id: id, + name: name, + artistString: artistString, + songType: songType, + entryType: EntryType.Song); + + SongModel.fromEntry(EntryModel entry) + : super( + id: entry.id, + name: entry.name, + artistString: entry.artistString, + songType: entry.songType, + mainPicture: entry.mainPicture, + discType: entry.discType, + eventCategory: entry.eventCategory, + artistType: entry.artistType, + entryType: EntryType.Song); SongModel.fromJson(Map json) - : thumbUrl = json['thumbUrl'], + : thumbUrl = UrlUtils.toHttps(json['thumbUrl']), originalVersionId = json['originalVersionId'], publishDate = json['publishDate'], pvs = JSONUtils.mapJsonArray( - json['pvs'], (v) => (v is int) ? null : PVModel.fromJson(v)), + json['pvs'], (v) => (v is int) ? [] : PVModel.fromJson(v)), artists = JSONUtils.mapJsonArray(json['artists'], - (v) => (v is int) ? null : ArtistSongModel.fromJson(v)), + (v) => (v is int) ? [] : ArtistSongModel.fromJson(v)), albums = JSONUtils.mapJsonArray( - json['albums'], (v) => (v is int) ? null : AlbumModel.fromJson(v)), + json['albums'], (v) => (v is int) ? [] : AlbumModel.fromJson(v)), lyrics = JSONUtils.mapJsonArray( - json['lyrics'], (v) => (v is int) ? null : LyricModel.fromJson(v)), - super.fromJson(json); + json['lyrics'], (v) => (v is int) ? [] : LyricModel.fromJson(v)), + super.fromJson(json, entryType: EntryType.Song); static List jsonToList(List items) { return (items == null) @@ -67,8 +86,19 @@ class SongModel extends EntryModel { ? null : DateFormat('yyyy-MM-dd').format(DateTime.parse(publishDate)); + DateTime get publishDateAsDateTime => + (publishDate == null) ? null : DateTime.parse(publishDate); + bool get hasLyrics => lyrics != null && lyrics.length > 0; + String get originUrl => '$baseUrl/S/${this.id}'; + + String get imageUrl => this.thumbUrl ?? super.imageUrl; + + String get pvSearchQuery => (this.pvs.isNotEmpty) + ? this.pvs[0].name + : '${this.artistString}+${this.defaultName}'; + @override Map toJson() { Map json = super.toJson(); diff --git a/lib/models/tag_group_model.dart b/lib/src/models/tag_group_model.dart similarity index 82% rename from lib/models/tag_group_model.dart rename to lib/src/models/tag_group_model.dart index 03093c63..de03e618 100644 --- a/lib/models/tag_group_model.dart +++ b/lib/src/models/tag_group_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/tag_model.dart'; +import 'package:vocadb_app/models.dart'; class TagGroupModel { int count; diff --git a/lib/models/tag_model.dart b/lib/src/models/tag_model.dart similarity index 65% rename from lib/models/tag_model.dart rename to lib/src/models/tag_model.dart index 82ad0994..2a1afc61 100644 --- a/lib/models/tag_model.dart +++ b/lib/src/models/tag_model.dart @@ -1,8 +1,8 @@ -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/utils/json_utils.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; class TagModel extends EntryModel { - EntryType entryType = EntryType.Tag; String categoryName; String additionalNames; String description; @@ -10,6 +10,13 @@ class TagModel extends EntryModel { TagModel parent; List relatedTags; + TagModel({int id, String name}) + : super(id: id, name: name, entryType: EntryType.Tag); + + TagModel.fromEntry(EntryModel entryModel) + : super( + id: entryModel.id, name: entryModel.name, entryType: EntryType.Tag); + TagModel.fromJson(Map json) : parent = json.containsKey('parent') ? TagModel.fromJson(json['parent']) @@ -20,7 +27,7 @@ class TagModel extends EntryModel { additionalNames = json['additionalNames'], relatedTags = JSONUtils.mapJsonArray( json['relatedTags'], (v) => TagModel.fromJson(v)), - super.fromJson(json); + super.fromJson(json, entryType: EntryType.Tag); static List jsonToList(List items) { return items.map((i) => TagModel.fromJson(i)).toList(); @@ -29,4 +36,6 @@ class TagModel extends EntryModel { get imageUrl => (mainPicture != null && mainPicture.urlThumb != null) ? mainPicture.urlThumb.replaceAll('-t.', '.') : null; + + String get originUrl => '$baseUrl/T/${this.id}'; } diff --git a/lib/models/track_model.dart b/lib/src/models/track_model.dart similarity index 58% rename from lib/models/track_model.dart rename to lib/src/models/track_model.dart index 285287de..e860a33c 100644 --- a/lib/models/track_model.dart +++ b/lib/src/models/track_model.dart @@ -1,4 +1,5 @@ -import 'package:vocadb/models/song_model.dart'; +import 'package:vocadb_app/models.dart'; +import "package:collection/collection.dart"; class TrackModel { int id; @@ -7,7 +8,8 @@ class TrackModel { SongModel song; int trackNumber; - TrackModel(); + TrackModel( + {this.id, this.trackNumber, this.discNumber, this.name, this.song}); TrackModel.fromJson(Map json) : id = json['id'], @@ -26,3 +28,13 @@ class TrackModel { }.toString(); } } + +class TrackList { + final List tracks; + + const TrackList(this.tracks); + + Map get groupByDisc => groupBy(tracks, (TrackModel l) { + return l.discNumber.toString(); + }); +} diff --git a/lib/src/models/user_cookie.dart b/lib/src/models/user_cookie.dart new file mode 100644 index 00000000..6c359e91 --- /dev/null +++ b/lib/src/models/user_cookie.dart @@ -0,0 +1,14 @@ +import 'package:equatable/equatable.dart'; +import 'package:meta/meta.dart'; + +class UserCookie extends Equatable { + final List cookies; + + UserCookie({@required this.cookies}); + + @override + List get props => [cookies]; + + @override + String toString() => 'UserCookie { cookies: $cookies }'; +} diff --git a/lib/src/models/user_model.dart b/lib/src/models/user_model.dart new file mode 100644 index 00000000..d3eef939 --- /dev/null +++ b/lib/src/models/user_model.dart @@ -0,0 +1,31 @@ +import 'package:equatable/equatable.dart'; +import 'package:vocadb_app/models.dart'; + +class UserModel extends Equatable { + int id; + String name; + MainPictureModel mainPicture; + + UserModel(); + + UserModel.fromJson(Map json) + : id = json['id'], + name = json['name'], + mainPicture = json.containsKey('mainPicture') + ? MainPictureModel.fromJson(json['mainPicture'] ?? {}) + : null; + + static List jsonToList(List items) { + return items.map((i) => UserModel.fromJson(i)).toList(); + } + + get imageUrl => (mainPicture != null && mainPicture.urlThumb != null) + ? mainPicture.urlThumb.replaceAll('-t.', '.') + : null; + + @override + List get props => [id, name]; + + @override + String toString() => 'UserModel { id: $id, name: $name }'; +} diff --git a/lib/models/web_link_model.dart b/lib/src/models/web_link_model.dart similarity index 74% rename from lib/models/web_link_model.dart rename to lib/src/models/web_link_model.dart index 3edda7c6..d10847b4 100644 --- a/lib/models/web_link_model.dart +++ b/lib/src/models/web_link_model.dart @@ -1,4 +1,4 @@ -import 'package:vocadb/models/base_model.dart'; +import 'package:vocadb_app/models.dart'; class WebLinkModel extends BaseModel { int id; @@ -6,6 +6,8 @@ class WebLinkModel extends BaseModel { String category; String url; + WebLinkModel({this.id, this.description, this.category, this.url}); + WebLinkModel.fromJson(Map json) : id = json['id'], description = json['description'], @@ -24,8 +26,10 @@ class WebLinkList { WebLinkList(this.webLinks); List get officialLinks => - webLinks.where((link) => link.category != 'Reference').toList(); + webLinks.where((link) => link.category != 'Reference').toList() + ..sort((a, b) => a.description.compareTo(b.description)); List get unofficialLinks => - webLinks.where((link) => link.category == 'Reference').toList(); + webLinks.where((link) => link.category == 'Reference').toList() + ..sort((a, b) => a.description.compareTo(b.description)); } diff --git a/lib/src/pages/album_detail_page.dart b/lib/src/pages/album_detail_page.dart new file mode 100644 index 00000000..8bc2089e --- /dev/null +++ b/lib/src/pages/album_detail_page.dart @@ -0,0 +1,205 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/widgets.dart'; + +class AlbumDetailPage extends StatelessWidget { + initController() { + final httpService = Get.find(); + final authService = Get.find(); + return AlbumDetailController( + albumRepository: AlbumRepository(httpService: httpService), + userRepository: UserRepository(httpService: httpService), + authService: authService); + } + + @override + Widget build(BuildContext context) { + final AlbumDetailController controller = initController(); + final AlbumDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewAlbumDetail(args.id); + + return PageBuilder( + tag: "al_$id", + controller: controller, + builder: (c) => AlbumDetailPageView(controller: c, args: args), + ); + } +} + +class AlbumDetailPageView extends StatelessWidget { + final AlbumDetailController controller; + + final AlbumDetailArgs args; + + const AlbumDetailPageView({this.controller, this.args}); + + void _onTapTrack(TrackModel track) => AppPages.toSongDetailPage(track.song); + + void _onTapShareButton() => Share.share(controller.album().originUrl); + + void _onTapInfoButton() => launch(controller.album().originUrl); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + void _onTapArtist(ArtistRoleModel artistRoleModel) => + Get.to(ArtistDetailPage()); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + void _onTapCollectButton() {} + + Widget _buttonBarBuilder() { + final authService = Get.find(); + + List buttons = []; + + buttons.add(ActiveFlatButton( + icon: Icon(Icons.favorite), + label: 'collect'.tr, + active: controller.collected.value, + onPressed: (authService.currentUser().id == null) + ? null + : this._onTapCollectButton, + )); + + buttons.add(FlatButton( + onPressed: this._onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + )); + + buttons.add(FlatButton( + onPressed: this._onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + )); + + return ButtonBar( + alignment: MainAxisAlignment.spaceEvenly, + children: buttons, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + floating: true, + title: Text(controller.album().name), + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: this._onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: this._onTapHome, + ) + ], + ), + Obx( + () => SliverList( + delegate: SliverChildListDelegate([ + SizedBox( + width: 160, + height: 160, + child: CustomNetworkImage( + controller.album().imageUrl, + ), + ), + SpaceDivider.small(), + Column( + children: [ + Visibility( + visible: controller.album().ratingCount != null && + controller.album().ratingCount > 0, + child: Text( + '${controller.album().ratingAverage} ★ (${controller.album().ratingCount})'), + ), + SpaceDivider.small(), + Text( + controller.album().name, + style: Theme.of(context).textTheme.headline6, + maxLines: 2, + textAlign: TextAlign.center, + ), + SpaceDivider.small(), + Text(controller.album().artistString), + SpaceDivider.micro(), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '${('discType.' + controller.album().discType).tr} • ${'discOnSaleDate'.trArgs([ + controller.album().releaseDateFormatted + ])}', + style: Theme.of(context).textTheme.caption, + ), + ], + ) + ], + ), + SpaceDivider.micro(), + _buttonBarBuilder(), + TagGroupView( + onPressed: this._onSelectTag, + tags: controller.album().tags ?? [], + ), + ExpandableContent( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: TextInfoSection( + title: 'name'.tr, + text: controller.album().name, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: TextInfoSection( + title: 'description'.tr, + text: controller.album().description, + ), + ), + Divider(), + ArtistGroupByRoleList.fromArtistAlbumModel( + onTap: this._onTapArtist, + artistAlbums: controller.album().artists ?? [], + // prefixHeroTag: 'album_detail_${args.id}', + ), + ], + ), + ), + Divider(), + TrackListView( + tracks: controller.album().tracks, + onSelect: this._onTapTrack, + ), + Divider(), + WebLinkGroupList(webLinks: controller.album().webLinks ?? []), + SpaceDivider.medium() + ])), + ) + ], + )); + } +} diff --git a/lib/src/pages/album_search_filter_page.dart b/lib/src/pages/album_search_filter_page.dart new file mode 100644 index 00000000..2e227567 --- /dev/null +++ b/lib/src/pages/album_search_filter_page.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class AlbumSearchFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: Container( + padding: EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems(constAlbumTypes, + trPrefix: 'discType', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + label: 'discType'.tr, + value: controller.discType.string, + onChanged: controller.discType, + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems([ + 'Name', + 'AdditionDate', + 'ReleaseDate', + 'RatingAverage', + 'RatingTotal', + 'CollectionCount' + ], trPrefix: 'sort'), + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + ), + ), + Divider(), + Obx( + () => ArtistInput( + values: controller.artists.toList(), + onSelect: controller.artists.add, + onDeleted: controller.artists.remove, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags.toList(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + ), + )); + } +} diff --git a/lib/src/pages/album_search_page.dart b/lib/src/pages/album_search_page.dart new file mode 100644 index 00000000..3b2cfc6f --- /dev/null +++ b/lib/src/pages/album_search_page.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class AlbumSearchPage extends GetView { + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('albums'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(AlbumSearchFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : AlbumListView( + albums: controller.results.toList(), + onSelect: this._onTapAlbum, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + )); + } +} diff --git a/lib/src/pages/artist_detail_page.dart b/lib/src/pages/artist_detail_page.dart new file mode 100644 index 00000000..fc38fc0c --- /dev/null +++ b/lib/src/pages/artist_detail_page.dart @@ -0,0 +1,310 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ArtistDetailPage extends StatelessWidget { + ArtistDetailController initController() { + final httpService = Get.find(); + final authService = Get.find(); + return ArtistDetailController( + artistRepository: ArtistRepository(httpService: httpService), + userRepository: UserRepository(httpService: httpService), + authService: authService); + } + + @override + Widget build(BuildContext context) { + final ArtistDetailController controller = initController(); + final ArtistDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewArtistDetail(args.id); + + return PageBuilder( + tag: "a_$id", + controller: controller, + builder: (c) => ArtistDetailPageView(controller: c, args: args), + ); + } +} + +class ArtistDetailPageView extends StatelessWidget { + final ArtistDetailController controller; + + final ArtistDetailArgs args; + + const ArtistDetailPageView({this.controller, this.args}); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + void _onTapLikeButton() {} + + void _onTapShareButton() => Share.share(controller.artist().originUrl); + + void _onTapInfoButton() => launch(controller.artist().originUrl); + + void _onTapSong(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapArtist(ArtistModel artist) => AppPages.toArtistDetailPage(artist); + + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + Widget _buttonBarBuilder() { + final authService = Get.find(); + + List buttons = []; + + buttons.add(ActiveFlatButton( + icon: Icon(Icons.favorite), + label: 'like'.tr, + active: controller.liked.value, + onPressed: + (authService.currentUser().id == null) ? null : this._onTapLikeButton, + )); + + buttons.add(FlatButton( + onPressed: this._onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + )); + + buttons.add(FlatButton( + onPressed: this._onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + )); + + return ButtonBar( + alignment: MainAxisAlignment.spaceEvenly, + children: buttons, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + expandedHeight: 200, + pinned: true, + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: _onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: _onTapHome, + ) + ], + flexibleSpace: FlexibleSpaceBar( + title: Text(controller.artist().name), + background: SafeArea( + child: Opacity( + opacity: 0.7, + child: CustomNetworkImage( + controller.artist().imageUrl, + ), + ), + ), + )), + SliverList( + delegate: SliverChildListDelegate([ + _buttonBarBuilder(), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Obx( + () => Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + controller.artist().name, + style: Theme.of(context).textTheme.headline6, + ), + Visibility( + visible: controller.artist().additionalNames != null, + child: + Text(controller.artist().additionalNames ?? '')), + Text('artistType.${controller.artist().artistType}'.tr ?? + ''), + ], + ), + ), + ), + SpaceDivider.small(), + Obx( + () => TagGroupView( + onPressed: this._onSelectTag, + tags: controller.artist().tags, + ), + ), + SpaceDivider.small(), + Obx( + () => Visibility( + visible: (controller.artist().releaseDate != null && + controller.artist().description != null && + controller.artist().artistLinks != null && + controller.artist().artistLinksReverse != null), + child: ExpandableContent( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Visibility( + visible: controller.artist().releaseDate != null, + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 16.0), + child: TextInfoSection( + title: 'releasedDate'.tr, + text: controller.artist().releaseDateFormatted, + ), + ), + ), + SpaceDivider.small(), + Visibility( + visible: controller.artist().description != null, + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 16.0), + child: TextInfoSection( + title: 'description'.tr, + text: controller.artist().description, + ), + ), + ), + SpaceDivider.small(), + Visibility( + visible: controller.artist().artistLinks != null && + controller.artist().artistLinks.isNotEmpty, + child: ArtistLinkListView( + artistLinks: controller.artist().artistLinks, + onSelect: (artistLinkModel) => + this._onTapArtist(artistLinkModel.artist)), + ), + Visibility( + visible: controller.artist().artistLinksReverse != + null && + controller.artist().artistLinksReverse.isNotEmpty, + child: ArtistLinkListView( + reverse: true, + artistLinks: + controller.artist().artistLinksReverse, + onSelect: (artistLinkModel) => + this._onTapArtist(artistLinkModel.artist)), + ) + ], + ), + ), + ), + ), + Divider(), + Obx( + () => Visibility( + visible: controller.artist().relations != null && + controller.artist().relations.latestSongs.isNotEmpty, + child: Column( + children: [ + Section( + title: 'recentSongsPVs'.tr, + child: SongListView( + scrollDirection: Axis.horizontal, + songs: controller.artist().relations?.latestSongs, + onSelect: (s) => this._onTapSong(s), + ), + ), + Divider(), + ], + ), + ), + ), + Obx( + () => Visibility( + visible: controller.artist().relations != null && + controller.artist().relations.popularSongs.isNotEmpty, + child: Column( + children: [ + Section( + title: 'popularSongs'.tr, + child: SongListView( + scrollDirection: Axis.horizontal, + onSelect: (s) => this._onTapSong(s), + songs: controller.artist().relations?.popularSongs, + ), + ), + Divider(), + ], + ), + ), + ), + Obx( + () => Visibility( + visible: controller.artist().relations != null && + controller.artist().relations.latestAlbums.isNotEmpty, + child: Column( + children: [ + Section( + title: 'recentAlbums'.tr, + child: AlbumListView( + scrollDirection: Axis.horizontal, + albums: controller.artist().relations?.latestAlbums, + onSelect: (al) => this._onTapAlbum(al), + ), + ), + Divider(), + ], + ), + ), + ), + Obx( + () => Visibility( + visible: controller.artist().relations != null && + controller.artist().relations.popularAlbums.isNotEmpty, + child: Column( + children: [ + Section( + title: 'popularAlbums'.tr, + child: AlbumListView( + scrollDirection: Axis.horizontal, + albums: controller.artist().relations?.popularAlbums, + onSelect: (al) => this._onTapAlbum(al), + ), + ), + Divider(), + ], + ), + ), + ), + Obx( + () => Visibility( + visible: controller.artist().webLinks != null && + controller.artist().webLinks.isNotEmpty, + child: WebLinkGroupList( + webLinks: controller.artist().webLinks ?? [])), + ) + ], + ) + ])) + ], + )); + } +} diff --git a/lib/src/pages/artist_search_filter_page.dart b/lib/src/pages/artist_search_filter_page.dart new file mode 100644 index 00000000..f46247f7 --- /dev/null +++ b/lib/src/pages/artist_search_filter_page.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ArtistSearchFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Filter')), + body: Container( + padding: EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems(constArtistTypes, + trPrefix: 'artistType', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + label: 'artistType'.tr, + value: controller.artistType.string, + onChanged: controller.artistType, + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems([ + 'Name', + 'AdditionDate', + 'AdditionDateAsc', + 'ReleaseDate', + 'SongCount', + 'SongRating', + 'FollowerCount', + ], trPrefix: 'sort'), + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags.toList(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + ), + )); + } +} diff --git a/lib/src/pages/artist_search_page.dart b/lib/src/pages/artist_search_page.dart new file mode 100644 index 00000000..8a7e4cdc --- /dev/null +++ b/lib/src/pages/artist_search_page.dart @@ -0,0 +1,91 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ArtistSearchPage extends GetView { + final bool selectionMode; + + final bool enableFilter; + + ArtistSearchPage({this.selectionMode = false, this.enableFilter = true}); + + void _onSelectArtist(ArtistModel artist) { + if (!(Get.arguments is ArtistSearchArgs)) { + return AppPages.toArtistDetailPage(artist); + } + + ArtistSearchArgs args = Get.arguments; + + if (args.selectionMode) { + Get.back(result: artist); + } else { + AppPages.toArtistDetailPage(artist); + } + } + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('artists'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + (this.enableFilter) + ? IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(ArtistSearchFilterPage())) + : Container() + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : ArtistListView( + artists: controller.results.toList(), + onSelect: this._onSelectArtist, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + )); + } +} diff --git a/lib/pages/contact_us/contact_us_page.dart b/lib/src/pages/contact_us_page.dart similarity index 74% rename from lib/pages/contact_us/contact_us_page.dart rename to lib/src/pages/contact_us_page.dart index 70c27433..04d4de4b 100644 --- a/lib/pages/contact_us/contact_us_page.dart +++ b/lib/src/pages/contact_us_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/constants.dart'; -import 'package:vocadb/widgets/site_tile.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; class ContactUsPage extends StatelessWidget { static const String routeName = '/contactUs'; @@ -14,12 +14,12 @@ class ContactUsPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text(FlutterI18n.translate(context, 'label.contact')), + title: Text('contact'.tr), ), body: ListView( children: [ ListTile( - title: Text(APP_NAME), + title: Text(appName), ), Column( children: contactSites @@ -31,8 +31,7 @@ class ContactUsPage extends StatelessWidget { ), Divider(), ListTile( - title: - Text(FlutterI18n.translate(context, 'label.developerContact')), + title: Text('developerContact'.tr), ), Column( children: contactDeveloperSites diff --git a/lib/src/pages/entry_search_filter_page.dart b/lib/src/pages/entry_search_filter_page.dart new file mode 100644 index 00000000..7740abdb --- /dev/null +++ b/lib/src/pages/entry_search_filter_page.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class EntrySearchFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('filter'.tr), + ), + body: Container( + padding: EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: [ + {'name': 'anything'.tr, 'value': ''}, + {'name': 'artist'.tr, 'value': 'Artist'}, + {'name': 'album'.tr, 'value': 'Album'}, + {'name': 'song'.tr, 'value': 'Song'}, + {'name': 'event'.tr, 'value': 'Event'} + ], + label: 'type'.tr, + value: controller.entryType.string, + onChanged: controller.entryType, + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: [ + {'name': 'sort.Name'.tr, 'value': 'Name'}, + {'name': 'sort.AdditionDate'.tr, 'value': 'AdditionDate'} + ], + label: 'sort'.tr, + value: controller.sort.value, + onChanged: controller.sort, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags.toList(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/pages/entry_search_page.dart b/lib/src/pages/entry_search_page.dart new file mode 100644 index 00000000..9e3cad35 --- /dev/null +++ b/lib/src/pages/entry_search_page.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/src/pages/entry_search_filter_page.dart'; +import 'package:vocadb_app/widgets.dart'; + +class EntrySearchPage extends GetView { + void _onSelect(EntryModel entryModel) { + switch (entryModel.entryType) { + case EntryType.Song: + AppPages.toSongDetailPage(SongModel.fromEntry(entryModel)); + break; + + case EntryType.Artist: + AppPages.toArtistDetailPage(ArtistModel.fromEntry(entryModel)); + break; + + case EntryType.Album: + AppPages.toAlbumDetailPage(AlbumModel.fromEntry(entryModel)); + break; + + case EntryType.Tag: + AppPages.toTagDetailPage(TagModel.fromEntry(entryModel)); + break; + + case EntryType.ReleaseEvent: + AppPages.toReleaseEventDetailPage( + ReleaseEventModel.fromEntry(entryModel)); + break; + + default: + print('Unsupported entry $entryModel'); + } + } + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('search'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(EntrySearchFilterPage())), + ]), + body: Obx( + () => (controller.query.string.isEmpty) + ? CenterText('findAnything'.tr) + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : EntryListView( + entries: controller.results.toList(), + onSelect: this._onSelect, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + )); + } +} diff --git a/lib/src/pages/favorite_album_filter_page.dart b/lib/src/pages/favorite_album_filter_page.dart new file mode 100644 index 00000000..1244947e --- /dev/null +++ b/lib/src/pages/favorite_album_filter_page.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteAlbumFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: Container( + padding: EdgeInsets.all(16.0), + child: ListView( + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + label: 'collectionStatus'.tr, + value: controller.purchaseStatuses.string, + onChanged: controller.purchaseStatuses, + json: [ + {'name': 'anything'.tr, 'value': ''}, + { + 'name': 'collectionStatus.Wishlisted'.tr, + 'value': 'Wishlisted' + }, + {'name': 'collectionStatus.Ordered'.tr, 'value': 'Ordered'}, + {'name': 'collectionStatus.Owned'.tr, 'value': 'Owned'}, + ], + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems(constAlbumTypes, + trPrefix: 'discType', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + label: 'discType'.tr, + value: controller.discType.string, + onChanged: controller.discType, + ), + ), + Obx(() => SimpleDropdownInput.fromJsonArray( + json: [ + {'name': 'name'.tr, 'value': 'Name'}, + {'name': 'additionDate'.tr, 'value': 'AdditionDate'} + ], + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + )), + Divider(), + Obx(() => ArtistInput( + values: controller.artists(), + onSelect: controller.artists.add, + onDeleted: controller.artists.remove, + )), + Divider(), + Obx(() => TagInput( + values: controller.tags(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + )), + ], + ), + )); + } +} diff --git a/lib/src/pages/favorite_album_page.dart b/lib/src/pages/favorite_album_page.dart new file mode 100644 index 00000000..8adc4312 --- /dev/null +++ b/lib/src/pages/favorite_album_page.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteAlbumPage extends GetView { + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('favoriteAlbums'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(FavoriteAlbumFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : AlbumListView( + albums: controller.results().map((e) => e.album).toList(), + onSelect: this._onTapAlbum, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr), + ), + )); + } +} diff --git a/lib/src/pages/favorite_artist_filter_page.dart b/lib/src/pages/favorite_artist_filter_page.dart new file mode 100644 index 00000000..fe9e32df --- /dev/null +++ b/lib/src/pages/favorite_artist_filter_page.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteArtistFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: Container( + padding: EdgeInsets.all(16.0), + child: ListView( + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems(constArtistTypes, + trPrefix: 'artistType', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + label: 'artistType'.tr, + value: controller.artistType.string, + onChanged: controller.artistType, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + ), + )); + } +} diff --git a/lib/src/pages/favorite_artist_page.dart b/lib/src/pages/favorite_artist_page.dart new file mode 100644 index 00000000..5bb2978c --- /dev/null +++ b/lib/src/pages/favorite_artist_page.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteArtistPage extends GetView { + void _onTapArtist(ArtistModel artist) => AppPages.toArtistDetailPage(artist); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('favoriteArtists'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(FavoriteArtistFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : ArtistListView( + artists: + controller.results().map((e) => e.artist).toList(), + onSelect: this._onTapArtist, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + )); + } +} diff --git a/lib/src/pages/favorite_song_filter_page.dart b/lib/src/pages/favorite_song_filter_page.dart new file mode 100644 index 00000000..efa85b4c --- /dev/null +++ b/lib/src/pages/favorite_song_filter_page.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteSongFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: ListView( + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + label: 'Rating', + value: controller.rating.string, + onChanged: controller.rating, + json: [ + {'name': 'anything'.tr, 'value': ''}, + {'name': 'Like', 'value': 'Like'}, + {'name': 'Favorite', 'value': 'Favorite'}, + ], + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems([ + 'Name', + 'AdditionDate', + 'PublishDate', + 'RatingScore', + 'FavoritedTimes', + 'RatingDate' + ], trPrefix: 'sort'), + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + ), + ), + Obx(() => SwitchListTile( + title: Text('groupByRating'.tr), + value: controller.groupByRating.value, + onChanged: controller.groupByRating, + )), + Divider(), + Obx(() => ArtistInput( + values: controller.artists(), + onSelect: controller.artists.add, + onDeleted: controller.artists.remove, + )), + Divider(), + Obx(() => TagInput( + values: controller.tags(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + )), + ], + )); + } +} diff --git a/lib/src/pages/favorite_song_page.dart b/lib/src/pages/favorite_song_page.dart new file mode 100644 index 00000000..8e68cbe7 --- /dev/null +++ b/lib/src/pages/favorite_song_page.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class FavoriteSongPage extends GetView { + void _onTapSong(SongModel song) => AppPages.toSongDetailPage(song); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('favoriteSongs'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(FavoriteSongFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : SongListView( + songs: controller.results().map((e) => e.song).toList(), + onSelect: this._onTapSong, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + ), + floatingActionButton: FloatingActionButton( + onPressed: () => AppPages.openPVPlayListPage( + controller.results().map((e) => e.song).toList(), + title: 'favoriteSongs'.tr), + child: Icon(Icons.play_arrow), + ), + ); + } +} diff --git a/lib/src/pages/home_page.dart b/lib/src/pages/home_page.dart new file mode 100644 index 00000000..a7dde998 --- /dev/null +++ b/lib/src/pages/home_page.dart @@ -0,0 +1,151 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// Home page is same as VocaDB website. Home page display list of highlighted songs, Recently added albums, Random popular albums and upcoming events +class HomePage extends GetView { + void _onTapSong(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + void _onTapReleaseEvent(ReleaseEventModel releaseEventModel) => + AppPages.toReleaseEventDetailPage(releaseEventModel); + + void _onTapSongSearchIcon() => Get.toNamed(Routes.SONGS); + + void _onTapArtistSearchIcon() => Get.toNamed(Routes.ARTISTS); + + void _onTapAlbumSearchIcon() => Get.toNamed(Routes.ALBUMS); + + void _onTapTagSearchIcon() => Get.toNamed(Routes.TAG_CATEGORIES); + + void _onTapEventSearchIcon() => Get.toNamed(Routes.RELEASE_EVENTS); + + List _generateChildren() { + return [ + SpaceDivider.small(), + Center( + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.center, + runSpacing: 24.0, + children: [ + _ShortcutMenuButton( + title: 'songs'.tr, + iconData: Icons.music_note, + onPressed: this._onTapSongSearchIcon), + _ShortcutMenuButton( + title: 'artists'.tr, + iconData: Icons.person, + onPressed: this._onTapArtistSearchIcon), + _ShortcutMenuButton( + title: 'albums'.tr, + iconData: Icons.album, + onPressed: this._onTapAlbumSearchIcon), + _ShortcutMenuButton( + title: 'tags'.tr, + iconData: Icons.label, + onPressed: this._onTapTagSearchIcon), + _ShortcutMenuButton( + title: 'events'.tr, + iconData: Icons.event, + onPressed: this._onTapEventSearchIcon), + ], + ), + ), + SpaceDivider.small(), + Section( + title: 'highlighted'.tr, + actions: [ + PopupMenuButton( + icon: Icon(Icons.more_horiz), + onSelected: (String selectedValue) => AppPages.openPVPlayListPage( + controller.highlighted(), + title: 'highlighted'.tr), + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + value: 'playall', child: Text('playAll'.tr)), + ], + ) + ], + child: Obx(() => SongListView( + displayPlaceholder: controller.highlighted.isEmpty, + scrollDirection: Axis.horizontal, + onSelect: (song) => this._onTapSong(song), + songs: controller.highlighted.toList())), + ), + Section( + title: 'recentAlbums'.tr, + child: Obx(() => AlbumListView( + displayPlaceholder: controller.recentAlbums.isEmpty, + scrollDirection: Axis.horizontal, + onSelect: (a) => this._onTapAlbum(a), + albums: controller.recentAlbums.toList(), + )), + ), + Section( + title: 'randomPopularAlbums'.tr, + child: Obx(() => AlbumListView( + displayPlaceholder: controller.randomAlbums.isEmpty, + scrollDirection: Axis.horizontal, + onSelect: (a) => this._onTapAlbum(a), + albums: controller.randomAlbums.toList())), + ), + Section( + title: 'upcomingEvent'.tr, + child: Obx(() => ReleaseEventColumnView( + onSelect: this._onTapReleaseEvent, + events: controller.recentReleaseEvents.toList(), + )), + ), + ]; + } + + @override + Widget build(BuildContext context) { + final List children = _generateChildren(); + + return Scaffold( + body: ListView.builder( + itemCount: children.length, + itemBuilder: (context, index) => children[index], + ), + ); + } +} + +/// Shortcut menu to each entry search page on home page +class _ShortcutMenuButton extends StatelessWidget { + final String title; + final IconData iconData; + final Function onPressed; + + const _ShortcutMenuButton( + {Key key, this.title, this.iconData, this.onPressed}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + RawMaterialButton( + onPressed: this.onPressed, + child: Icon( + iconData, + color: Theme.of(context).iconTheme.color, + size: 24.0, + ), + shape: CircleBorder(), + elevation: 2.0, + fillColor: Theme.of(context).cardColor, + padding: const EdgeInsets.all(15.0), + ), + Text(title) + ], + ); + } +} diff --git a/lib/src/pages/login_page.dart b/lib/src/pages/login_page.dart new file mode 100644 index 00000000..08b6a07f --- /dev/null +++ b/lib/src/pages/login_page.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/src/controllers/login_page_controller.dart'; +import 'package:vocadb_app/src/widgets/space_divider.dart'; + +class LoginPage extends GetView { + void _onTapRegister() => launch("$baseUrl/User/Create"); + + void _onTapLogin() => controller.login(); + + void _onTapSkip() => Get.off(MainPage()); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Padding( + padding: EdgeInsets.fromLTRB(8.0, 32.0, 8.0, 32.0), + child: Obx( + () => ListView( + children: [ + Visibility( + visible: controller.message.string.isNotEmpty, + child: Column( + children: [ + Text( + controller.message.string.tr, + style: TextStyle(color: Colors.red), + ), + ], + ), + ), + SpaceDivider.medium(), + TextField( + enabled: controller.processing.value == false, + onChanged: controller.username, + decoration: InputDecoration( + border: OutlineInputBorder(), labelText: 'username'.tr), + ), + SpaceDivider.medium(), + TextField( + enabled: controller.processing.value == false, + onChanged: controller.password, + obscureText: true, + decoration: InputDecoration( + border: OutlineInputBorder(), labelText: 'password'.tr), + ), + SpaceDivider.medium(), + Visibility( + visible: controller.processing.value, + child: Center( + child: CircularProgressIndicator(), + )), + Visibility( + visible: controller.processing.value == false, + child: Column( + children: [ + SizedBox( + width: double.infinity, + child: RaisedButton( + onPressed: this._onTapLogin, child: Text('login'.tr)), + ), + SizedBox( + width: double.infinity, + child: RaisedButton( + onPressed: this._onTapRegister, + child: Text('register'.tr)), + ), + SpaceDivider.small(), + SizedBox( + width: double.infinity, + child: FlatButton( + onPressed: this._onTapSkip, child: Text('skip'.tr)), + ) + ], + )), + ], + ), + ), + )); + } +} diff --git a/lib/src/pages/main_page.dart b/lib/src/pages/main_page.dart new file mode 100644 index 00000000..bd174895 --- /dev/null +++ b/lib/src/pages/main_page.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/src/pages/menu_page.dart'; +import 'package:vocadb_app/src/pages/ranking_page.dart'; + +/// First page with tab bottom navigation +class MainPage extends GetView { + _onTapEntrySearch() { + Get.toNamed(Routes.ENTRIES); + } + + @override + Widget build(BuildContext context) { + final List _pages = [HomePage(), RankingPage(), MenuPage()]; + + return Scaffold( + appBar: AppBar( + title: Text(appName), + actions: [ + IconButton(icon: Icon(Icons.search), onPressed: _onTapEntrySearch), + Obx(() => (controller.tabIndex.toInt() != 1) + ? Container() + : IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(RankingFilterPage()))) + ], + ), + body: Center( + child: AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => _pages.elementAt(controller.tabIndex.toInt())), + ), + ), + bottomNavigationBar: Obx(() => BottomNavigationBar( + currentIndex: controller.tabIndex.toInt(), + onTap: controller.onBottomNavTap, + items: [ + BottomNavigationBarItem( + icon: Icon(Icons.home), label: 'home'.tr), + BottomNavigationBarItem( + icon: Icon(Icons.trending_up), label: 'ranking'.tr), + BottomNavigationBarItem( + icon: Icon(Icons.menu), label: 'menu'.tr), + ])), + ); + } +} diff --git a/lib/src/pages/menu_page.dart b/lib/src/pages/menu_page.dart new file mode 100644 index 00000000..b2283b3b --- /dev/null +++ b/lib/src/pages/menu_page.dart @@ -0,0 +1,101 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:package_info/package_info.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; + +class MenuPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final AuthService authService = Get.find(); + return Scaffold( + body: ListView( + children: [ + Obx( + () => Visibility( + visible: authService.currentUser().id != null, + child: ListTile( + leading: CircleAvatar( + backgroundImage: NetworkImage(authService + .currentUser() + .imageUrl ?? + 'https://via.placeholder.com/150x150?text=no_image'), + ), + title: Text(authService.currentUser().name ?? 'Unknown'), + )), + ), + Obx(() => Visibility( + visible: authService.currentUser().id == null, + child: ListTile( + leading: Icon(Icons.login), + title: Text('login'.tr), + onTap: () => Get.off(LoginPage()), + ), + )), + Obx(() => Visibility( + visible: authService.currentUser().id != null, + child: ListTile( + leading: Icon(Icons.library_music), + title: Text('favoriteSongs'.tr), + onTap: () => Get.toNamed(Routes.FAVORITE_SONGS), + ), + )), + Obx(() => Visibility( + visible: authService.currentUser().id != null, + child: ListTile( + leading: Icon(Icons.people), + title: Text('favoriteArtists'.tr), + onTap: () => Get.toNamed(Routes.FAVORITE_ARTISTS), + ), + )), + Obx(() => Visibility( + visible: authService.currentUser().id != null, + child: ListTile( + leading: Icon(Icons.album), + title: Text('favoriteAlbums'.tr), + onTap: () => Get.toNamed(Routes.FAVORITE_ALBUMS), + ), + )), + ListTile( + leading: Icon(Icons.settings), + title: Text('settings'.tr), + onTap: () => Get.to(SettingsPage()), + ), + ListTile( + leading: Icon(Icons.help), + title: Text('contact'.tr), + onTap: () => Get.to(ContactUsPage()), + ), + FutureBuilder( + future: PackageInfo.fromPlatform(), + builder: (context, snapshot) { + String versionName = 'Unknown'; + if (snapshot.connectionState == ConnectionState.done) { + PackageInfo packageInfo = snapshot.data; + versionName = + '${packageInfo.version}-${packageInfo.buildNumber}'; + } + return ListTile( + leading: Icon(Icons.info), + title: Text("version".tr), + subtitle: Text(versionName), + ); + }, + ), + Obx(() => Visibility( + visible: authService.currentUser().id != null, + child: ListTile( + leading: Icon(Icons.logout), + title: Text('logout'.tr), + onTap: () { + authService.logout(); + Get.off(LoginPage()); + }, + ), + )), + ], + ), + ); + } +} diff --git a/lib/src/pages/pv_playlist_page.dart b/lib/src/pages/pv_playlist_page.dart new file mode 100644 index 00000000..5a66a4ce --- /dev/null +++ b/lib/src/pages/pv_playlist_page.dart @@ -0,0 +1,165 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/src/controllers/pv_playlist_controller.dart'; +import 'package:vocadb_app/src/widgets/custom_network_image.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class PVPlaylistPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final PVPlayListController controller = PVPlayListController(); + final PVPlayListArgs args = Get.arguments; + + return PageBuilder( + controller: controller, + builder: (c) => PVPlaylistPageView(controller: c, args: args), + ); + } +} + +class PVPlaylistPageView extends StatelessWidget { + final PVPlayListController controller; + + final PVPlayListArgs args; + + const PVPlaylistPageView({this.controller, this.args}); + + void _onTapToSongDetail(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapSongItem(int index) => controller.onSelect(index); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + Widget _buildVideoContent() { + if (controller.youtubeController == null) { + return Container(); + } + + return YoutubePlayer( + controller: controller.youtubeController, + showVideoProgressIndicator: true, + onEnded: (_) => controller.onEnded(), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(args.title), + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: this._onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: this._onTapHome, + ) + ], + ), + body: Column( + children: [ + _buildVideoContent(), + Expanded( + child: ListView.builder( + itemCount: controller.songs().length, + itemBuilder: (context, index) => Obx( + () => _PVPlayerItem.fromSong( + controller.songs()[index], + onTap: () => this._onTapSongItem(index), + onPressViewDetail: () => + this._onTapToSongDetail(controller.songs()[index]), + enabled: controller.songs()[index].youtubePV != null, + isActive: controller.currentIndex.toInt() == index, + ), + ), + )) + ], + )); + } +} + +class _PVPlayerItem extends StatelessWidget { + final String imageUrl; + + final String name; + + final String artistName; + + final bool isActive; + + final bool enabled; + + /// Callback when tap popup menu item for view song/pv detail + final VoidCallback onPressViewDetail; + + /// Callback when tap an list item + final VoidCallback onTap; + + const _PVPlayerItem( + {Key key, + this.imageUrl, + this.name, + this.artistName, + this.isActive = false, + this.enabled = true, + this.onPressViewDetail, + this.onTap}) + : super(key: key); + + _PVPlayerItem.fromSong(SongModel song, + {this.isActive = false, + this.enabled = true, + this.onTap, + this.onPressViewDetail}) + : this.imageUrl = song.imageUrl, + this.name = song.name, + this.artistName = song.artistString; + + Widget _buildImageLeading() { + return SizedBox( + width: 72, + child: CustomNetworkImage(this.imageUrl), + ); + } + + Widget _buildLeading() { + return (enabled) + ? _buildImageLeading() + : Opacity( + opacity: 0.5, + child: _buildImageLeading(), + ); + } + + @override + Widget build(BuildContext context) { + return ListTile( + contentPadding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 16.0), + leading: this._buildLeading(), + title: Text( + this.name, + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + subtitle: Text(this.artistName), + enabled: this.enabled, + trailing: PopupMenuButton( + onSelected: (String selectedValue) => this.onPressViewDetail(), + itemBuilder: (BuildContext context) => [ + PopupMenuItem(value: 'detail', child: Text('viewDetail'.tr)), + ], + ), + onTap: this.onTap, + tileColor: (this.isActive) ? Theme.of(context).highlightColor : null, + ); + } +} diff --git a/lib/src/pages/ranking_filter_page.dart b/lib/src/pages/ranking_filter_page.dart new file mode 100644 index 00000000..5182e3ff --- /dev/null +++ b/lib/src/pages/ranking_filter_page.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +class RankingFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: ListView( + children: [ + Obx( + () => RadioButtonGroup( + label: 'filterBy'.tr, + value: controller.filterBy.string, + onChanged: controller.filterBy, + items: [ + RadioButtonItem( + label: 'ranking.newlyAdded'.tr, value: 'CreateDate'), + RadioButtonItem( + label: 'ranking.newlyPublished'.tr, value: 'PublishDate'), + RadioButtonItem( + label: 'ranking.popularity'.tr, value: 'Popularity') + ], + ), + ), + Divider(), + Obx(() => RadioButtonGroup( + label: 'vocalist'.tr, + value: controller.vocalist.string, + onChanged: controller.vocalist, + items: [ + RadioButtonItem( + label: 'ranking.allVocalists'.tr, value: 'Nothing'), + RadioButtonItem( + label: 'ranking.onlyVocaloid'.tr, value: 'Vocaloid'), + RadioButtonItem( + label: 'ranking.onlyUTAU'.tr, value: 'UTAU'), + RadioButtonItem( + label: 'ranking.otherVocalist'.tr, value: 'Other') + ], + )), + ], + )); + } +} diff --git a/lib/src/pages/ranking_page.dart b/lib/src/pages/ranking_page.dart new file mode 100644 index 00000000..d2664cf4 --- /dev/null +++ b/lib/src/pages/ranking_page.dart @@ -0,0 +1,169 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class RankingPage extends StatefulWidget { + @override + _RankingPageState createState() => _RankingPageState(); +} + +class _RankingPageState extends State + with SingleTickerProviderStateMixin { + TabController _tabController; + RankingController _rankingController; + + @override + void initState() { + super.initState(); + _rankingController = Get.find(); + _tabController = TabController( + vsync: this, length: constRankings.length, initialIndex: 1); + } + + void _onTabSong(SongModel song) => AppPages.toSongDetailPage(song); + + @override + void dispose() { + _tabController.dispose(); + super.dispose(); + } + + List _generateTabs() { + List tabs = []; + + if (constRankings.contains('daily')) { + tabs.add(Tab(text: 'ranking.daily'.tr)); + } + + if (constRankings.contains('weekly')) { + tabs.add(Tab(text: 'ranking.weekly'.tr)); + } + + if (constRankings.contains('monthly')) { + tabs.add(Tab(text: 'ranking.monthly'.tr)); + } + + if (constRankings.contains('overall')) { + tabs.add(Tab(text: 'ranking.overall'.tr)); + } + + return tabs; + } + + List _generateRankingContent() { + List contents = []; + + if (constRankings.contains('daily')) { + contents.add(Obx(() => RankingSongsContent( + songs: _rankingController.daily.toList(), + onSelect: (s) => this._onTabSong(s), + ))); + } + + if (constRankings.contains('weekly')) { + contents.add(Obx(() => RankingSongsContent( + songs: _rankingController.weekly.toList(), + onSelect: (s) => this._onTabSong(s), + ))); + } + + if (constRankings.contains('monthly')) { + contents.add(Obx(() => RankingSongsContent( + songs: _rankingController.monthly.toList(), + onSelect: (s) => this._onTabSong(s), + ))); + } + + if (constRankings.contains('overall')) { + contents.add(Obx(() => RankingSongsContent( + songs: _rankingController.overall.toList(), + onSelect: (s) => this._onTabSong(s), + ))); + } + + return contents; + } + + _onTapPlaylist() { + int currentIndex = _tabController.index; + + String selected = constRankings[currentIndex]; + + List songs = []; + String title = ' Playlist'; + switch (selected) { + case 'daily': + title = 'ranking.daily'.tr; + songs = _rankingController.daily(); + break; + case 'weekly': + title = 'ranking.weekly'.tr; + songs = _rankingController.weekly(); + break; + case 'monthly': + title = 'ranking.monthly'.tr; + songs = _rankingController.monthly(); + break; + case 'overall': + title = 'ranking.overall'.tr; + songs = _rankingController.overall(); + break; + } + + if (songs.isNotEmpty) { + AppPages.openPVPlayListPage(songs, title: title); + } + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return SafeArea( + child: Scaffold( + appBar: TabBar( + controller: _tabController, + tabs: _generateTabs(), + labelColor: theme.textSelectionColor, + unselectedLabelColor: theme.textTheme.headline6.color, + ), + body: TabBarView( + controller: _tabController, + children: _generateRankingContent(), + ), + floatingActionButton: FloatingActionButton( + onPressed: () => this._onTapPlaylist(), + child: Icon(Icons.play_arrow), + ), + ), + ); + } +} + +class RankingSongsContent extends StatelessWidget { + final List songs; + + final Function(SongModel) onSelect; + + const RankingSongsContent({Key key, this.songs, this.onSelect}) + : super(key: key); + + @override + Widget build(BuildContext context) { + if (songs.length == 0) return CenterLoading(); + + return ListView.builder( + itemCount: songs.length, + itemBuilder: (context, index) { + return SongTile.song( + songs[index], + leading: Text((index + 1).toString()), + onTap: () => this.onSelect(songs[index]), + ); + }, + ); + } +} diff --git a/lib/src/pages/release_event_detail_page.dart b/lib/src/pages/release_event_detail_page.dart new file mode 100644 index 00000000..193fd392 --- /dev/null +++ b/lib/src/pages/release_event_detail_page.dart @@ -0,0 +1,242 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ReleaseEventDetailPage extends StatelessWidget { + initController() { + final httpService = Get.find(); + return ReleaseEventDetailController( + eventRepository: ReleaseEventRepository(httpService: httpService)); + } + + @override + Widget build(BuildContext context) { + final ReleaseEventDetailController controller = initController(); + final ReleaseEventDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewReleaseEventDetail(args.id); + + return PageBuilder( + tag: "event_$id", + controller: controller, + builder: (c) => ReleaseEventDetailPageView(controller: c, args: args), + ); + } +} + +class ReleaseEventDetailPageView extends StatelessWidget { + final ReleaseEventDetailController controller; + + final ReleaseEventDetailArgs args; + + const ReleaseEventDetailPageView({this.controller, this.args}); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + void _onTapShareButton() => Share.share(controller.event().originUrl); + + void _onTapInfoButton() => launch(controller.event().originUrl); + + void _onTapSong(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapArtist(ArtistRoleModel a) => + AppPages.toArtistDetailPage(ArtistModel( + id: a.id, + name: a.name, + mainPicture: MainPictureModel(urlThumb: a.imageUrl))); + + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + void _onTapMapButton() { + String q = controller.event().venueName; + String uri = Uri.encodeFull('geo:0,0?q=$q'); + canLaunch(uri).then((can) => (can) + ? launch(uri) + : launch(Uri.encodeFull('https://maps.apple.com/?q=$q'))); + } + + void _onTapEventSeries() => + AppPages.toReleaseEventSeriesDetailPage(controller.event().series); + + Widget _buttonBarBuilder() { + List buttons = []; + + buttons.add(FlatButton( + onPressed: this._onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + )); + + if (controller.event().venueName != null) { + buttons.add(FlatButton( + onPressed: this._onTapMapButton, + child: Column( + children: [Icon(Icons.place), Text('map'.tr)], + ), + )); + } + + buttons.add(FlatButton( + onPressed: this._onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + )); + + return ButtonBar( + alignment: MainAxisAlignment.spaceEvenly, + children: buttons, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + expandedHeight: 200, + pinned: true, + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: _onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: _onTapHome, + ) + ], + flexibleSpace: FlexibleSpaceBar( + title: Text( + controller.event().name, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + background: SafeArea( + child: Opacity( + opacity: 0.7, + child: Visibility( + visible: controller.event().imageUrl != null, + child: CustomNetworkImage( + controller.event().imageUrl, + fit: BoxFit.contain, + ), + ), + ), + ), + )), + Obx( + () => SliverList( + delegate: SliverChildListDelegate([ + _buttonBarBuilder(), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SpaceDivider.small(), + TagGroupView( + onPressed: this._onSelectTag, + tags: controller + .event() + ?.tagGroups + ?.map((t) => t.tag) + ?.toList() ?? + [], + ), + SpaceDivider.small(), + TextInfoSection( + title: 'name'.tr, + text: controller.event().name, + divider: SpaceDivider.small(), + ), + TextInfoSection( + title: 'category'.tr, + text: + 'eventCategory.${controller.event().displayCategory}'.tr, + divider: SpaceDivider.small(), + ), + TextInfoSection( + title: 'date'.tr, + text: controller.event().dateFormatted, + divider: SpaceDivider.small(), + ), + TextInfoSection( + title: 'venue'.tr, + text: controller.event().venueName, + divider: SpaceDivider.small(), + ), + if (controller.event().description != null) + InfoSection( + title: 'description'.tr, + visible: !controller.event().description.isNullOrBlank, + child: MarkdownBody( + data: controller.event().description, + selectable: true, + ), + ), + Divider(), + Section( + title: 'participatingArtists'.tr, + visible: controller.event().artists?.isNotEmpty, + child: ArtistGroupByRoleList.fromArtistEventModel( + artistEvents: controller.event().artists ?? [], + onTap: this._onTapArtist, + displayRole: false, + ), + divider: Divider(), + ), + Section( + title: 'songs'.tr, + visible: controller.songs().length > 0, + child: SongListView( + scrollDirection: Axis.horizontal, + onSelect: this._onTapSong, + songs: controller.songs(), + ), + divider: Divider(), + ), + Section( + title: 'albums'.tr, + visible: controller.albums().length > 0, + child: AlbumListView( + scrollDirection: Axis.horizontal, + albums: controller.albums(), + onSelect: this._onTapAlbum, + ), + divider: Divider(), + ), + Section( + title: 'series'.tr, + visible: controller.event().series != null, + child: ReleaseEventSeriesTile( + name: controller.event()?.series?.name, + onTap: this._onTapEventSeries, + ), + divider: Divider(), + ), + WebLinkGroupList(webLinks: controller.event().webLinks) + ], + ) + ])), + ) + ], + )); + } +} diff --git a/lib/src/pages/release_event_search_filter_page.dart b/lib/src/pages/release_event_search_filter_page.dart new file mode 100644 index 00000000..1e18cf3e --- /dev/null +++ b/lib/src/pages/release_event_search_filter_page.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ReleaseEventSearchFilterPage + extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: ListView( + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems( + constEventCategories, + trPrefix: 'eventCategory', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + label: 'category'.tr, + value: controller.category.string, + onChanged: controller.category, + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + json: SimpleDropdownInput.buildDropdownItems([ + 'Name', + 'Date', + 'AdditionDate', + ], trPrefix: 'sort'), + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + ), + ), + Divider(), + Obx( + () => DateRangeInput( + fromDateValue: controller.fromDate.value, + toDateValue: controller.toDate.value, + onFromDateChanged: (v) => controller.fromDate(v), + onToDateChanged: (v) => controller.toDate(v), + ), + ), + Divider(), + Obx( + () => ArtistInput( + values: controller.artists.toList(), + onSelect: controller.artists.add, + onDeleted: controller.artists.remove, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags.toList(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + )); + } +} diff --git a/lib/src/pages/release_event_search_page.dart b/lib/src/pages/release_event_search_page.dart new file mode 100644 index 00000000..be296105 --- /dev/null +++ b/lib/src/pages/release_event_search_page.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ReleaseEventSearchPage extends GetView { + void _onTapReleaseEvent(ReleaseEventModel releaseEventModel) => + AppPages.toReleaseEventDetailPage(releaseEventModel); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('events'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(ReleaseEventSearchFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : ReleaseEventListView( + events: controller.results.toList(), + onSelect: this._onTapReleaseEvent, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr)), + )); + } +} diff --git a/lib/src/pages/release_event_series_detail_page.dart b/lib/src/pages/release_event_series_detail_page.dart new file mode 100644 index 00000000..813ed0ee --- /dev/null +++ b/lib/src/pages/release_event_series_detail_page.dart @@ -0,0 +1,173 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ReleaseEventSeriesDetailPage extends StatelessWidget { + initController() { + final httpService = Get.find(); + return ReleaseEventSeriesDetailController( + eventSeriesRepository: + ReleaseEventSeriesRepository(httpService: httpService)); + } + + @override + Widget build(BuildContext context) { + final ReleaseEventSeriesDetailController controller = initController(); + final ReleaseEventSeriesDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewReleaseEventDetail(args.id); + + return PageBuilder( + tag: "event_series_$id", + controller: controller, + builder: (c) => + ReleaseEventSeriesDetailPageView(controller: c, args: args), + ); + } +} + +class ReleaseEventSeriesDetailPageView extends StatelessWidget { + final ReleaseEventSeriesDetailController controller; + + final ReleaseEventSeriesDetailArgs args; + + const ReleaseEventSeriesDetailPageView({this.controller, this.args}); + + void _onTapShareButton() => Share.share(controller.eventSeries().originUrl); + + void _onTapInfoButton() => launch(controller.eventSeries().originUrl); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + Widget buildData() { + return CustomScrollView( + slivers: [ + SliverAppBar( + expandedHeight: 200.0, + pinned: true, + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: this._onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: this._onTapHome, + ) + ], + flexibleSpace: FlexibleSpaceBar( + title: Text(controller.eventSeries().name), + background: (controller.eventSeries().imageUrl == null) + ? Container() + : CustomNetworkImage(controller.eventSeries().imageUrl), + ), + ), + SliverList( + delegate: SliverChildListDelegate.fixed([ + SpaceDivider.small(), + ButtonBar( + alignment: MainAxisAlignment.spaceEvenly, + children: [ + FlatButton( + onPressed: this._onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + ), + FlatButton( + onPressed: this._onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + ) + ], + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TagGroupView( + onPressed: this._onSelectTag, + tags: controller + .eventSeries() + ?.tagGroups + ?.map((t) => t.tag) + ?.toList() ?? + [], + ), + TextInfoSection( + title: 'name'.tr, + text: controller.eventSeries().name, + ), + TextInfoSection( + title: 'category'.tr, + text: + 'eventCategory.${controller.eventSeries().category}'.tr, + ), + TextInfoSection( + title: 'description'.tr, + text: controller.eventSeries().description, + ), + ], + ), + ), + Section( + title: 'references'.tr, + child: Column( + children: controller + .eventSeries() + .webLinks + .map((e) => WebLinkTile( + title: e.description, + url: e.url, + )) + .toList(), + ), + ), + Section( + title: 'events'.tr, + child: Column( + children: controller + .eventSeries() + .events + .map((e) => ListTile( + leading: Icon(Icons.event), + title: Text(e.name ?? ''), + subtitle: Text(e.dateFormatted ?? ''), + )) + .toList(), + ), + ), + ]), + ) + ], + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : buildData(), + )); + } +} diff --git a/lib/src/pages/settings_page.dart b/lib/src/pages/settings_page.dart new file mode 100644 index 00000000..44065b87 --- /dev/null +++ b/lib/src/pages/settings_page.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/widgets.dart'; + +class SettingsPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + final SharedPreferenceService pref = Get.find(); + + return Scaffold( + appBar: AppBar(title: Text('settings'.tr)), + body: ListView( + children: [ + Obx( + () => RadioButtonGroup( + label: 'theme'.tr, + value: pref.theme.string, + onChanged: pref.updateTheme, + items: [ + RadioButtonItem(label: 'Dark', value: 'dark'), + RadioButtonItem(label: 'Light', value: 'light') + ], + ), + ), + Divider(), + Obx(() => SwitchListTile( + title: Text('autoPlay'.tr), + value: pref.autoPlay.value, + onChanged: pref.updateAutoPlay, + )), + Divider(), + Obx( + () => RadioButtonGroup( + label: 'contentLanguage'.tr, + value: pref.contentLang.string, + onChanged: pref.updateContentLang, + items: [ + RadioButtonItem(label: 'Original', value: 'Default'), + RadioButtonItem(label: 'English', value: 'English'), + RadioButtonItem(label: 'Romaji', value: 'Romaji'), + RadioButtonItem(label: 'Japanese', value: 'Japanese') + ], + ), + ), + Divider(), + RadioButtonGroup( + label: 'uiLanguage'.tr, + value: pref.uiLang.val, + onChanged: pref.updateUiLang, + items: [ + RadioButtonItem(label: 'English', value: 'en'), + RadioButtonItem(label: '日本語 (Japanese)', value: 'ja'), + RadioButtonItem(label: 'ไทย (Thai)', value: 'th'), + RadioButtonItem(label: 'Melayu (Malay)', value: 'ms'), + RadioButtonItem(label: '中文 (Chinese)', value: 'zh') + ], + ) + ], + )); + } +} diff --git a/lib/src/pages/song_detail_page.dart b/lib/src/pages/song_detail_page.dart new file mode 100644 index 00000000..03cb8b15 --- /dev/null +++ b/lib/src/pages/song_detail_page.dart @@ -0,0 +1,349 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/utils.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:youtube_player_flutter/youtube_player_flutter.dart'; + +class SongDetailPage extends StatelessWidget { + initController() { + final httpService = Get.find(); + final authService = Get.find(); + return SongDetailController( + songRepository: SongRepository(httpService: httpService), + userRepository: UserRepository(httpService: httpService), + authService: authService); + } + + @override + Widget build(BuildContext context) { + final SongDetailController controller = initController(); + final SongDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewSongDetail(args.id); + + return PageBuilder( + tag: "s_$id", + controller: controller, + builder: (c) => SongDetailPageView(controller: c, args: args), + ); + } +} + +class SongDetailPageView extends StatelessWidget { + final SongDetailController controller; + + final SongDetailArgs args; + + const SongDetailPageView({this.controller, this.args}); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + void _onTapLikeButton() => controller.liked.toggle(); + + void _onTapLyricButton() => controller.showLyric(true); + + void _onTapShareButton() => Share.share(controller.song().originUrl); + + void _onTapInfoButton() => launch(controller.song().originUrl); + + void _onSelectSong(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + void _onTapArtist(ArtistRoleModel a) => + AppPages.toArtistDetailPage(ArtistModel( + id: a.id, + name: a.name, + mainPicture: MainPictureModel(urlThumb: a.imageUrl))); + + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + void _onTapCloseLyricContent() => controller.showLyric(false); + + Widget _buildVideoContent() { + if (controller.youtubeController == null) { + return Container(); + } + + return YoutubePlayer( + controller: controller.youtubeController, + onReady: () { + controller.youtubeController.addListener(() => {}); + }, + ); + } + + Widget _buildSongImage() { + if (controller.youtubeController != null) { + return Container(); + } + + return Container( + width: double.infinity, + height: 160, + color: Colors.black, + child: Stack( + children: [ + Opacity( + opacity: 0.5, + child: SizedBox( + width: double.infinity, + height: double.infinity, + child: CustomNetworkImage( + controller.song().imageUrl, + fit: BoxFit.cover, + ), + ), + ), + SizedBox( + width: double.infinity, + height: double.infinity, + child: CustomNetworkImage( + controller.song().imageUrl, + fit: BoxFit.contain, + ), + ), + ], + )); + } + + Widget _buttonBarBuilder() { + final authService = Get.find(); + + List buttons = []; + + buttons.add(ActiveFlatButton( + icon: Icon(Icons.favorite), + label: 'like'.tr, + active: controller.liked.value, + onPressed: + (authService.currentUser().id == null) ? null : this._onTapLikeButton, + )); + + if (controller.song().lyrics != null && + controller.song().lyrics.length > 0) { + buttons.add(FlatButton( + onPressed: this._onTapLyricButton, + child: Column( + children: [Icon(Icons.subtitles), Text('lyrics'.tr)], + ), + )); + } + + buttons.add(FlatButton( + onPressed: this._onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + )); + + buttons.add(FlatButton( + onPressed: this._onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + )); + + return ButtonBar( + alignment: MainAxisAlignment.spaceEvenly, + children: buttons, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(controller.song().name ?? 'Song Detail'), + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: () => this._onTapEntrySearch()), + IconButton( + icon: Icon(Icons.home), onPressed: () => Get.offAll(MainPage())) + ], + ), + body: Container( + padding: EdgeInsets.only(bottom: 16.0), + child: Column( + children: [ + _buildVideoContent(), + Obx(() => (controller.showLyric()) + ? _buildLyricContent() + : _buildSongDetailContent()), + ], + ), + )); + } + + Widget _buildLyricContent() { + return Expanded( + child: LyricContent( + lyrics: controller.song().lyrics, + onTapClose: this._onTapCloseLyricContent, + ), + ); + } + + Widget _buildSongDetailContent() { + if (controller.initialLoading.value) { + return Expanded(child: CenterLoading()); + } + + return Expanded( + child: ListView( + children: [ + _buildSongImage(), + Obx( + () => _buttonBarBuilder(), + ), + _SongDetailInfo( + name: controller.song().name, + additionalNames: controller.song().additionalNames, + songType: 'songType.${controller.song().songType}'.tr, + publishedDate: controller.song().publishDateAsDateTime, + ), + SpaceDivider.small(), + TagGroupView( + onPressed: this._onSelectTag, + tags: controller.song().tags, + ), + Divider(), + ArtistGroupByRoleList.fromArtistSongModel( + onTap: (a) => this._onTapArtist(a), + artistSongs: controller.song().artists, + ), + Divider(), + PVGroupList( + pvs: controller.song().pvs, + searchQuery: controller.song().pvSearchQuery, + ), + Divider(), + Visibility( + visible: controller.song().albums.isNotEmpty, + child: Column( + children: [ + Section( + title: 'albums'.tr, + child: AlbumListView( + scrollDirection: Axis.horizontal, + albums: controller.song().albums, + onSelect: (a) => this._onTapAlbum(a), + ), + ), + Divider() + ], + ), + ), + Obx(() => Visibility( + visible: controller.altSongs.isNotEmpty, + child: Column( + children: [ + Section( + title: 'alternateVersion'.tr, + child: SongListView( + scrollDirection: Axis.horizontal, + onSelect: (s) => this._onSelectSong(s), + songs: controller.altSongs.toList(), + ), + ), + Divider() + ], + ), + )), + Obx(() => Visibility( + visible: controller.relatedSongs.isNotEmpty, + child: Column( + children: [ + Section( + title: 'likeMatches'.tr, + child: SongListView( + scrollDirection: Axis.horizontal, + onSelect: (s) => this._onSelectSong(s), + songs: controller.relatedSongs.toList(), + ), + ), + Divider() + ], + ), + )), + Obx(() => Visibility( + visible: controller.song().webLinks.isNotEmpty, + child: WebLinkGroupList(webLinks: controller.song().webLinks), + )) + ], + ), + ); + } +} + +class _SongDetailInfo extends StatelessWidget { + final String name; + + final String additionalNames; + + final String songType; + + final DateTime publishedDate; + + const _SongDetailInfo( + {this.name, this.additionalNames, this.songType, this.publishedDate}); + + String _stringPublishedDate() { + return (this.publishedDate == null) + ? '' + : ' • ${'publishedOn'.trArgs([ + DateTimeUtils.toSimpleFormat(this.publishedDate) + ])}'; + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(this.name, style: Theme.of(context).textTheme.headline6), + Text(this.additionalNames), + SpaceDivider.micro(), + Text('$songType${_stringPublishedDate()}'), + ], + ), + ); + } +} + +class ActiveFlatButton extends StatelessWidget { + final Icon icon; + + final String label; + + final Function onPressed; + + final bool active; + + const ActiveFlatButton( + {this.icon, @required this.label, this.onPressed, this.active = false}); + + @override + Widget build(BuildContext context) { + return FlatButton( + onPressed: this.onPressed, + textColor: (this.active) ? Theme.of(context).accentColor : null, + child: Column( + children: [this.icon, Text(this.label)], + ), + ); + } +} diff --git a/lib/src/pages/song_search_filter_page.dart b/lib/src/pages/song_search_filter_page.dart new file mode 100644 index 00000000..5eac7f20 --- /dev/null +++ b/lib/src/pages/song_search_filter_page.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/src/widgets/tag_input.dart'; +import 'package:vocadb_app/widgets.dart'; + +class SongSearchFilterPage extends GetView { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('filter'.tr)), + body: ListView( + children: [ + Obx( + () => SimpleDropdownInput.fromJsonArray( + label: 'songType'.tr, + value: controller.songType.string, + onChanged: controller.songType, + json: SimpleDropdownInput.buildDropdownItems(constSongTypes, + trPrefix: 'songType', + emptyItem: {'name': 'notSpecified'.tr, 'value': ''}), + ), + ), + Obx( + () => SimpleDropdownInput.fromJsonArray( + label: 'sort'.tr, + value: controller.sort.string, + onChanged: controller.sort, + json: SimpleDropdownInput.buildDropdownItems([ + 'Name', + 'AdditionDate', + 'PublishDate', + 'FavoritedTimes', + 'RatingScore' + ], trPrefix: 'sort'), + ), + ), + Divider(), + Obx( + () => ArtistInput( + values: controller.artists.toList(), + onSelect: controller.artists.add, + onDeleted: controller.artists.remove, + ), + ), + Divider(), + Obx( + () => TagInput( + values: controller.tags.toList(), + onSelect: controller.tags.add, + onDeleted: controller.tags.remove, + ), + ), + ], + )); + } +} diff --git a/lib/src/pages/song_search_page.dart b/lib/src/pages/song_search_page.dart new file mode 100644 index 00000000..25fef2c5 --- /dev/null +++ b/lib/src/pages/song_search_page.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class SongSearchPage extends GetView { + void _onSelect(SongModel song) => AppPages.toSongDetailPage(song); + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text('songs'.tr)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + IconButton( + icon: Icon(Icons.tune), + onPressed: () => Get.to(SongSearchFilterPage())) + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : (controller.errorMessage.string.isNotEmpty) + ? CenterText(controller.errorMessage.string) + : SongListView( + songs: controller.results(), + onSelect: this._onSelect, + onReachLastItem: controller.onReachLastItem, + emptyWidget: CenterText('searchResultNotMatched'.tr), + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () => AppPages.openPVPlayListPage(controller.results(), + title: 'songs'.tr), + child: Icon(Icons.play_arrow), + ), + ); + } +} diff --git a/lib/src/pages/tag_category_page.dart b/lib/src/pages/tag_category_page.dart new file mode 100644 index 00000000..2f2bc1a6 --- /dev/null +++ b/lib/src/pages/tag_category_page.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class TagCategoryPage extends StatelessWidget { + void _onSelectCategory(String category) { + Get.toNamed(Routes.TAGS, arguments: TagSearchArgs(category: category)); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('tags'.tr), actions: [ + IconButton( + icon: Icon(Icons.search), onPressed: () => _onSelectCategory('')), + ]), + body: TagCategoryList( + onSelectCategory: this._onSelectCategory, + )); + } +} diff --git a/lib/src/pages/tag_detail_page.dart b/lib/src/pages/tag_detail_page.dart new file mode 100644 index 00000000..fb8888ff --- /dev/null +++ b/lib/src/pages/tag_detail_page.dart @@ -0,0 +1,217 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:share/share.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/loggers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/repositories.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/controllers/tag_detail_controller.dart'; +import 'package:vocadb_app/widgets.dart'; + +class TagDetailPage extends StatelessWidget { + initController() { + final httpService = Get.find(); + return TagDetailController( + tagRepository: TagRepository(httpService: httpService), + songRepository: SongRepository(httpService: httpService), + artistRepository: ArtistRepository(httpService: httpService), + albumRepository: AlbumRepository(httpService: httpService)); + } + + @override + Widget build(BuildContext context) { + final TagDetailController controller = initController(); + final TagDetailArgs args = Get.arguments; + final String id = Get.parameters['id']; + Get.find().logViewTagDetail(args.id); + + return PageBuilder( + tag: "t_$id", + controller: controller, + builder: (c) => TagDetailPageView(controller: c, args: args), + ); + } +} + +class TagDetailPageView extends StatelessWidget { + final TagDetailController controller; + + final TagDetailArgs args; + + const TagDetailPageView({this.controller, this.args}); + + void _onSelectTag(TagModel tag) => AppPages.toTagDetailPage(tag); + + void _onTapShareButton() => Share.share(controller.tag().originUrl); + + void _onTapInfoButton() => launch(controller.tag().originUrl); + + void _onTapSong(SongModel song) => AppPages.toSongDetailPage(song); + + void _onTapArtist(ArtistModel artist) => AppPages.toArtistDetailPage(artist); + + void _onTapAlbum(AlbumModel album) => AppPages.toAlbumDetailPage(album); + + void _onTapHome() => Get.offAll(MainPage()); + + void _onTapEntrySearch() => Get.toNamed(Routes.ENTRIES); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + expandedHeight: 200, + pinned: true, + actions: [ + IconButton( + icon: Icon(Icons.search), + onPressed: _onTapEntrySearch, + ), + IconButton( + icon: Icon(Icons.home), + onPressed: _onTapHome, + ) + ], + flexibleSpace: FlexibleSpaceBar( + title: Text( + '#${controller.tag().name}', + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + background: SafeArea( + child: Opacity( + opacity: 0.7, + child: Visibility( + visible: controller.tag().imageUrl != null, + child: CustomNetworkImage( + controller.tag().imageUrl, + fit: BoxFit.cover, + ), + ), + ), + ), + )), + Obx( + () => SliverList( + delegate: SliverChildListDelegate([ + _TagDetailButtonBar( + onTapInfoButton: this._onTapInfoButton, + onTapShareButton: this._onTapShareButton, + ), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextInfoSection( + title: 'name'.tr, + text: controller.tag().name, + ), + SpaceDivider.small(), + TextInfoSection( + title: 'category'.tr, + text: controller.tag().categoryName, + ), + SpaceDivider.small(), + InfoSection( + title: 'parent'.tr, + child: Tag( + label: controller.tag().parent?.name, + onPressed: () => this._onSelectTag(controller.tag()), + )), + SpaceDivider.small(), + TextInfoSection( + title: 'description'.tr, + text: controller.tag().description, + ), + Divider(), + Section( + title: 'recentSongsPVs'.tr, + visible: controller.latestSongs().length > 0, + child: SongListView( + displayPlaceholder: controller.latestSongs.isEmpty, + scrollDirection: Axis.horizontal, + onSelect: this._onTapSong, + songs: controller.latestSongs(), + ), + divider: Divider(), + ), + Section( + title: 'topArtists'.tr, + visible: controller.topArtists().length > 0, + child: ArtistColumnView( + onSelect: this._onTapArtist, + artists: controller.topArtists(), + ), + divider: Divider(), + ), + Section( + title: 'topSongs'.tr, + visible: controller.topSongs().length > 0, + child: SongListView( + scrollDirection: Axis.horizontal, + onSelect: this._onTapSong, + songs: controller.topSongs(), + ), + divider: Divider(), + ), + Section( + title: 'topAlbums'.tr, + visible: controller.topAlbums().length > 0, + child: AlbumListView( + onSelect: this._onTapAlbum, + scrollDirection: Axis.horizontal, + albums: controller.topAlbums(), + ), + divider: Divider(), + ), + WebLinkGroupList(webLinks: controller.tag().webLinks) + ], + ) + ])), + ) + ], + )); + } +} + +class _TagDetailButtonBar extends StatelessWidget { + final VoidCallback onTapShareButton; + + final VoidCallback onTapInfoButton; + + const _TagDetailButtonBar({this.onTapShareButton, this.onTapInfoButton}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + child: FlatButton( + onPressed: this.onTapShareButton, + child: Column( + children: [Icon(Icons.share), Text('share'.tr)], + ), + ), + ), + Expanded( + child: FlatButton( + onPressed: this.onTapInfoButton, + child: Column( + children: [Icon(Icons.info), Text('info'.tr)], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/src/pages/tag_search_page.dart b/lib/src/pages/tag_search_page.dart new file mode 100644 index 00000000..1d689c07 --- /dev/null +++ b/lib/src/pages/tag_search_page.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +class TagSearchPage extends GetView { + const TagSearchPage(); + + void _onSelectTag(TagModel tag) { + if (!(Get.arguments is TagSearchArgs)) { + return AppPages.toTagDetailPage(tag); + } + + TagSearchArgs args = Get.arguments; + + if (args.selectionMode) { + Get.back(result: tag); + } else { + AppPages.toTagDetailPage(tag); + } + } + + Widget _buildTextInput(BuildContext context) { + return Row( + children: [ + Expanded( + child: TextField( + controller: controller.textSearchController, + onChanged: controller.query, + style: Theme.of(context).primaryTextTheme.headline6, + autofocus: true, + decoration: InputDecoration( + border: InputBorder.none, hintText: 'search'.tr), + ), + ), + ], + ); + } + + Widget _buildTitle(BuildContext context) { + return AnimatedSwitcher( + duration: Duration(milliseconds: 100), + child: Obx(() => (controller.openQuery.value) + ? _buildTextInput(context) + : Text((controller.category.string == '') + ? 'tags'.tr + : controller.category.string)), + ); + } + + Widget _buildSearchAction(BuildContext context) { + return Obx( + () => (controller.openQuery.value) + ? IconButton( + icon: Icon(Icons.clear), onPressed: () => controller.clearQuery()) + : IconButton( + icon: Icon(Icons.search), + onPressed: () => controller.openQuery(true)), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: _buildTitle(context), actions: [ + _buildSearchAction(context), + ]), + body: Obx( + () => (controller.initialLoading.value) + ? CenterLoading() + : TagListView( + tags: controller.results.toList(), + onSelect: this._onSelectTag, + onReachLastItem: controller.onReachLastItem, + ), + )); + } +} diff --git a/lib/src/repositories/album_repository.dart b/lib/src/repositories/album_repository.dart new file mode 100644 index 00000000..b0631a89 --- /dev/null +++ b/lib/src/repositories/album_repository.dart @@ -0,0 +1,75 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class AlbumRepository extends RestApiRepository { + AlbumRepository({HttpService httpService}) : super(httpService: httpService); + + /// Find albums + Future> findAlbums( + {String lang = 'Default', + String query, + String discType, + String sort, + String artistIds, + String tagIds, + int start = 0, + int maxResults = 50, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/albums'; + final Map params = Map(); + params['query'] = query; + params['discTypes'] = discType; + params['fields'] = 'MainPicture'; + params['lang'] = lang; + params['tagId'] = tagIds; + params['artistId'] = artistIds; + params['sort'] = sort; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => AlbumModel.jsonToList(items)); + } + + /// Gets a album by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = Map(); + params['fields'] = + 'Tags,MainPicture,Tracks,AdditionalNames,Artists,Description,WebLinks,PVs'; + params['songFields'] = 'MainPicture,PVs,ThumbUrl'; + params['lang'] = lang; + return super + .getObject('/api/albums/$id', params) + .then((i) => AlbumModel.fromJson(i)); + } + + /// Gets list of upcoming or recent albums, same as front page. + Future> getNew({String lang = 'Default'}) async { + final String endpoint = '/api/albums/new'; + final Map params = Map(); + params['fields'] = 'MainPicture'; + params['languagePreference'] = lang; + return super + .getList(endpoint, params) + .then((items) => AlbumModel.jsonToList(items)); + } + + /// Gets list of top rated albums, same as front page. + Future> getTop({String lang = 'Default'}) async { + final String endpoint = '/api/albums/top'; + final Map params = Map(); + params['fields'] = 'MainPicture'; + params['languagePreference'] = lang; + return super + .getList(endpoint, params) + .then((items) => AlbumModel.jsonToList(items)); + } + + Future> getTopAlbumsByTagId(int tagId, + {String lang = 'Default'}) async { + return this + .findAlbums(lang: lang, tagIds: tagId.toString(), sort: 'RatingScore'); + } +} diff --git a/lib/src/repositories/artist_repository.dart b/lib/src/repositories/artist_repository.dart new file mode 100644 index 00000000..8b61668d --- /dev/null +++ b/lib/src/repositories/artist_repository.dart @@ -0,0 +1,52 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class ArtistRepository extends RestApiRepository { + ArtistRepository({HttpService httpService}) : super(httpService: httpService); + + /// Find artists + Future> findArtists( + {String lang = 'Default', + String query, + String artistType, + String sort, + String tagIds, + int start = 0, + int maxResults = 50, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/artists'; + final Map params = Map(); + params['query'] = query; + params['artistTypes'] = artistType; + params['fields'] = 'MainPicture'; + params['languagePreference'] = lang; + params['tagId'] = tagIds; + params['sort'] = sort; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => ArtistModel.jsonToList(items)); + } + + /// Gets a artist by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = { + 'fields': + 'Tags,MainPicture,WebLinks,BaseVoicebank,Description,ArtistLinks,ArtistLinksReverse,AdditionalNames', + 'relations': 'All', + 'lang': lang, + }; + return super + .getObject('/api/artists/$id', params) + .then((i) => ArtistModel.fromJson(i)); + } + + Future> getTopArtistsByTagId(int tagId, + {String lang = 'Default'}) async { + return this + .findArtists(lang: lang, tagIds: tagId.toString(), sort: 'RatingScore'); + } +} diff --git a/lib/src/repositories/auth_repository.dart b/lib/src/repositories/auth_repository.dart new file mode 100644 index 00000000..6809eb6a --- /dev/null +++ b/lib/src/repositories/auth_repository.dart @@ -0,0 +1,32 @@ +import 'package:dio/dio.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; + +class AuthRepository { + final HttpService httpService; + + const AuthRepository({this.httpService}); + + Future login({ + String username, + String password, + }) async { + return await httpService.login(username, password); + } + + Future getCurrent() async { + try { + UserModel us = await httpService.get('/api/users/current', + {'fields': 'MainPicture'}).then((item) => UserModel.fromJson(item)); + + return us; + } catch (e) { + if (e is DioError && e.response.statusCode == 404) { + print('current user not found'); + return null; + } + + throw e; + } + } +} diff --git a/lib/src/repositories/base_repository.dart b/lib/src/repositories/base_repository.dart new file mode 100644 index 00000000..b8f56b4a --- /dev/null +++ b/lib/src/repositories/base_repository.dart @@ -0,0 +1,19 @@ +import 'package:vocadb_app/services.dart'; + +class RestApiRepository { + final HttpService httpService; + + RestApiRepository({this.httpService}); + + Future getList(String endpoint, Map params) async { + return httpService.get('$endpoint', params).then((v) => (v is Iterable) + ? v + : (v.containsKey('items')) + ? v['items'] as Iterable + : v); + } + + Future getObject(String endpoint, Map params) async { + return httpService.get('$endpoint', params).then((v) => v as T); + } +} diff --git a/lib/src/repositories/entry_repository.dart b/lib/src/repositories/entry_repository.dart new file mode 100644 index 00000000..d541e738 --- /dev/null +++ b/lib/src/repositories/entry_repository.dart @@ -0,0 +1,29 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class EntryRepository extends RestApiRepository { + EntryRepository({HttpService httpService}) : super(httpService: httpService); + + /// Find entries + Future> findEntries( + {String lang = 'Default', + String query, + String entryType, + String sort, + String tagIds, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/entries'; + final Map params = Map(); + params['query'] = query; + params['entryTypes'] = entryType; + params['fields'] = 'MainPicture'; + params['languagePreference'] = lang; + params['tagId'] = tagIds; + params['sort'] = sort; + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => EntryModel.jsonToList(items)); + } +} diff --git a/lib/src/repositories/release_event_repository.dart b/lib/src/repositories/release_event_repository.dart new file mode 100644 index 00000000..2d269ff0 --- /dev/null +++ b/lib/src/repositories/release_event_repository.dart @@ -0,0 +1,81 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class ReleaseEventRepository extends RestApiRepository { + ReleaseEventRepository({HttpService httpService}) + : super(httpService: httpService); + + Future> findReleaseEvents( + {String lang = 'Default', + String query, + String sort, + String category, + String afterDate, + String beforeDate, + String artistIds, + String tagIds, + int start = 0, + int maxResults = 50, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/releaseEvents'; + final Map params = Map(); + params['fields'] = ' MainPicture,Series'; + params['lang'] = lang; + params['query'] = query; + params['sort'] = sort; + params['category'] = category; + params['tagId'] = tagIds; + params['artistId'] = artistIds; + params['afterDate'] = afterDate; + params['beforeDate'] = beforeDate; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => ReleaseEventModel.jsonToList(items)); + } + + /// Gets list of top rated albums, same as front page. + Future> getRecently({String lang = 'Default'}) async { + return this.findReleaseEvents( + lang: lang, + sort: 'Date', + afterDate: DateTime.now().subtract(Duration(days: 3)).toString(), + beforeDate: DateTime.now().add(Duration(days: 12)).toString()); + } + + /// Gets an event by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = { + 'fields': + 'Artists,MainPicture,AdditionalNames,Description,WebLinks,Series,Tags', + 'lang': lang, + }; + return super + .getObject('/api/releaseEvents/$id', params) + .then((i) => ReleaseEventModel.fromJson(i)); + } + + /// Gets a list of albums for a specific event + Future> getAlbums(int id, {String lang = 'Default'}) async { + final Map params = Map(); + params['fields'] = ' MainPicture'; + params['lang'] = lang; + return super + .getList('/api/releaseEvents/$id/albums', params) + .then((items) => AlbumModel.jsonToList(items)); + } + + /// Gets a list of songs for a specific event + Future> getPublishedSongs(int id, + {String lang = 'Default'}) async { + final Map params = Map(); + params['fields'] = ' MainPicture,PVs,ThumbUrl'; + params['lang'] = lang; + return super + .getList('/api/releaseEvents/$id/published-songs', params) + .then((items) => SongModel.jsonToList(items)); + } +} diff --git a/lib/src/repositories/release_event_series_repository.dart b/lib/src/repositories/release_event_series_repository.dart new file mode 100644 index 00000000..36413d6e --- /dev/null +++ b/lib/src/repositories/release_event_series_repository.dart @@ -0,0 +1,19 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class ReleaseEventSeriesRepository extends RestApiRepository { + ReleaseEventSeriesRepository({HttpService httpService}) + : super(httpService: httpService); + + /// Gets an event series by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = { + 'fields': 'AdditionalNames,Description,Events,MainPicture,WebLinks,Tags', + 'lang': lang, + }; + return super + .getObject('/api/releaseEventSeries/$id', params) + .then((i) => ReleaseEventSeriesModel.fromJson(i)); + } +} diff --git a/lib/src/repositories/song_repository.dart b/lib/src/repositories/song_repository.dart new file mode 100644 index 00000000..4b7d6c94 --- /dev/null +++ b/lib/src/repositories/song_repository.dart @@ -0,0 +1,133 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class SongRepository extends RestApiRepository { + SongRepository({HttpService httpService}) : super(httpService: httpService); + + /// Find songs. + Future> findSongs( + {String lang = 'Default', + String query, + String songType, + String sort, + String artistIds, + String tagIds, + int start = 0, + int maxResults = 50, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/songs'; + final Map params = Map(); + params['query'] = query; + params['fields'] = 'ThumbUrl,PVs,MainPicture'; + params['songType'] = songType; + params['sort'] = sort; + params['artistId'] = artistIds; + params['tagId'] = tagIds; + params['languagePreference'] = lang; + params['maxResults'] = maxResults.toString(); + params['start'] = start.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => SongModel.jsonToList(items)); + } + + /// Gets list of highlighted songs, same as front page. + Future> getHighlighted({String lang = 'Default'}) async { + final String endpoint = '/api/songs/highlighted'; + final Map params = Map(); + params['fields'] = 'ThumbUrl,PVs'; + params['languagePreference'] = lang; + return super + .getList(endpoint, params) + .then((items) => SongModel.jsonToList(items)); + } + + /// Gets top rated songs. + Future> getTopRated( + {String lang = 'Default', + int durationHours, + String filterBy, + String vocalist}) async { + final String endpoint = '/api/songs/top-rated'; + final Map params = Map(); + params['durationHours'] = durationHours.toString(); + params['fields'] = 'ThumbUrl,PVs'; + params['filterBy'] = filterBy; + params['vocalist'] = vocalist; + params['languagePreference'] = lang; + return super + .getList(endpoint, params) + .then((items) => SongModel.jsonToList(items)); + } + + /// Gets top rated daily songs. + Future> getTopRatedDaily( + {String lang = 'Default', String filterBy, String vocalist}) async { + return this.getTopRated( + lang: lang, durationHours: 24, filterBy: filterBy, vocalist: vocalist); + } + + /// Gets top rated weekly songs. + Future> getTopRatedWeekly( + {String lang = 'Default', String filterBy, String vocalist}) async { + return this.getTopRated( + lang: lang, durationHours: 168, filterBy: filterBy, vocalist: vocalist); + } + + /// Gets top rated monthly songs. + Future> getTopRatedMonthly( + {String lang = 'Default', String filterBy, String vocalist}) async { + return this.getTopRated( + lang: lang, durationHours: 720, filterBy: filterBy, vocalist: vocalist); + } + + /// Gets a song by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = { + 'fields': + 'MainPicture,PVs,ThumbUrl,Albums,Artists,Tags,WebLinks,AdditionalNames,WebLinks,Lyrics', + 'lang': lang, + }; + return super + .getObject('/api/songs/$id', params) + .then((i) => SongModel.fromJson(i)); + } + + Future> getDerived(int id, {String lang = 'Default'}) async { + final String endpoint = '/api/songs/$id/derived'; + final Map params = Map(); + params['fields'] = 'ThumbUrl,PVs'; + params['lang'] = lang; + return super + .getList(endpoint, params) + .then((items) => SongModel.jsonToList(items)); + } + + Future> getRelated(int id, {String lang = 'Default'}) async { + final String endpoint = '/api/songs/$id/related'; + final Map params = Map(); + params['fields'] = 'ThumbUrl,PVs'; + params['lang'] = lang; + return super + .getList(endpoint, params) + .then((related) => SongModel.jsonToList(related['likeMatches'])); + } + + Future> getLatestSongsByTagId(int tagId, + {String lang = 'Default'}) async { + return this + .findSongs(lang: lang, tagIds: tagId.toString(), sort: 'AdditionDate'); + } + + Future> getTopSongsByTagId(int tagId, + {String lang = 'Default'}) async { + return this + .findSongs(lang: lang, tagIds: tagId.toString(), sort: 'RatingScore'); + } + + Future rating(int songId, String rating) { + return httpService.post('/api/songs/$songId/ratings', {'rating': rating}); + } +} diff --git a/lib/src/repositories/tag_repository.dart b/lib/src/repositories/tag_repository.dart new file mode 100644 index 00000000..0c3d354f --- /dev/null +++ b/lib/src/repositories/tag_repository.dart @@ -0,0 +1,40 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class TagRepository extends RestApiRepository { + TagRepository({HttpService httpService}) : super(httpService: httpService); + + /// Find tags + Future> findTags( + {String lang = 'Default', + String query, + String categoryName, + int start = 0, + int maxResults = 50, + String nameMatchMode = 'Auto'}) async { + final String endpoint = '/api/tags'; + final Map params = Map(); + params['query'] = query; + params['fields'] = 'MainPicture'; + params['categoryName'] = categoryName; + params['lang'] = lang; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => TagModel.jsonToList(items)); + } + + /// Gets a tag by Id. + Future getById(int id, {String lang = 'Default'}) { + final Map params = Map(); + params['fields'] = + 'MainPicture,AdditionalNames,Description,Parent,RelatedTags,WebLinks'; + params['lang'] = lang; + return super + .getObject('/api/tags/$id', params) + .then((i) => TagModel.fromJson(i)); + } +} diff --git a/lib/src/repositories/user_repository.dart b/lib/src/repositories/user_repository.dart new file mode 100644 index 00000000..72e38d5b --- /dev/null +++ b/lib/src/repositories/user_repository.dart @@ -0,0 +1,98 @@ +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/src/repositories/base_repository.dart'; + +class UserRepository extends RestApiRepository { + UserRepository({HttpService httpService}) : super(httpService: httpService); + + /// Get a list of songs rated by user. + Future> getRatedSongs(int userId, + {String lang = 'Default', + String query, + String rating, + String sort, + String artistIds, + String tagIds, + bool groupByRating = false, + String nameMatchMode = 'Auto', + int start = 0, + int maxResults = 50}) async { + final String endpoint = '/api/users/$userId/ratedSongs'; + final Map params = Map(); + params['query'] = query; + params['fields'] = 'ThumbUrl,PVs,MainPicture'; + params['sort'] = sort; + params['rating'] = rating; + params['groupByRating'] = groupByRating.toString(); + params['artistId'] = artistIds; + params['tagId'] = tagIds; + params['nameMatchMode'] = nameMatchMode; + params['lang'] = lang; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + return super + .getList(endpoint, params) + .then((items) => RatedSongModel.jsonToList(items)); + } + + /// Gets a list of artists followed by a user + Future> getFollowedArtists(int userId, + {String lang = 'Default', + String query, + String artistType, + String tagIds, + String nameMatchMode = 'Auto', + int start = 0, + int maxResults = 50}) async { + final String endpoint = '/api/users/$userId/followedArtists'; + final Map params = Map(); + params['query'] = query; + params['artistType'] = artistType; + params['fields'] = 'MainPicture'; + params['lang'] = lang; + params['tagId'] = tagIds; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => FollowedArtistModel.jsonToList(items)); + } + + /// Gets a list of albums in a user's collection. + Future> getAlbums(int userId, + {String lang = 'Default', + String query, + String discType, + String sort, + String purchaseStatuses, + String artistIds, + String tagIds, + String nameMatchMode = 'Auto', + int start = 0, + int maxResults = 50}) async { + final String endpoint = '/api/users/$userId/albums'; + final Map params = Map(); + params['query'] = query; + params['albumTypes'] = discType; + params['purchaseStatuses'] = purchaseStatuses; + params['fields'] = 'MainPicture'; + params['lang'] = lang; + params['tagId'] = tagIds; + params['artistId'] = artistIds; + params['sort'] = sort; + params['start'] = start.toString(); + params['maxResults'] = maxResults.toString(); + params['nameMatchMode'] = nameMatchMode; + return super + .getList(endpoint, params) + .then((items) => AlbumUserModel.jsonToList(items)); + } + + /// Gets currently logged in user's rating for a song + Future getCurrentUserRatedSong(int songId) { + return httpService + .get('/api/users/current/ratedSongs/$songId', null) + .then((v) => v as String); + } +} diff --git a/lib/src/routes/app_pages.dart b/lib/src/routes/app_pages.dart new file mode 100644 index 00000000..a253af68 --- /dev/null +++ b/lib/src/routes/app_pages.dart @@ -0,0 +1,105 @@ +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/bindings.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/routes.dart'; + +class AppPages { + static final pages = [ + GetPage(name: Routes.INITIAL, page: () => LoginPage()), + GetPage( + name: Routes.MAIN, page: () => MainPage(), binding: MainPageBinding()), + GetPage( + name: Routes.SONGS, + page: () => SongSearchPage(), + binding: SongSearchBinding()), + GetPage(name: Routes.SONGS_DETAIL, page: () => SongDetailPage()), + GetPage( + name: Routes.ARTISTS, + page: () => ArtistSearchPage(), + binding: ArtistSearchBinding()), + GetPage(name: Routes.ARTISTS_DETAIL, page: () => ArtistDetailPage()), + GetPage( + name: Routes.RELEASE_EVENTS, + page: () => ReleaseEventSearchPage(), + binding: ReleaseEventSearchBinding()), + GetPage( + name: Routes.RELEASE_EVENTS_DETAIL, + page: () => ReleaseEventDetailPage()), + GetPage( + name: Routes.RELEASE_EVENT_SERIES_DETAIL, + page: () => ReleaseEventSeriesDetailPage()), + GetPage( + name: Routes.ARTISTS_SELECTOR, + page: () => ArtistSearchPage( + enableFilter: false, + selectionMode: true, + ), + binding: ArtistSearchBinding()), + GetPage( + name: Routes.ALBUMS, + page: () => AlbumSearchPage(), + binding: AlbumSearchBinding()), + GetPage(name: Routes.ALBUMS_DETAIL, page: () => AlbumDetailPage()), + GetPage( + name: Routes.TAGS, + page: () => TagSearchPage(), + binding: TagSearchBinding()), + GetPage(name: Routes.TAG_CATEGORIES, page: () => TagCategoryPage()), + GetPage(name: Routes.TAGS_DETAIL, page: () => TagDetailPage()), + GetPage( + name: Routes.ENTRIES, + page: () => EntrySearchPage(), + binding: EntrySearchBinding()), + GetPage( + name: Routes.FAVORITE_SONGS, + page: () => FavoriteSongPage(), + binding: FavoriteSongBinding()), + GetPage( + name: Routes.FAVORITE_ARTISTS, + page: () => FavoriteArtistPage(), + binding: FavoriteArtistBinding()), + GetPage( + name: Routes.FAVORITE_ALBUMS, + page: () => FavoriteAlbumPage(), + binding: FavoriteAlbumBinding()), + ]; + + static toSongDetailPage(SongModel song) { + Get.toNamed('/songs/${song.id}', + arguments: SongDetailArgs(id: song.id, song: song)); + } + + static toArtistDetailPage(ArtistModel artist) { + Get.toNamed('/artists/${artist.id}', + arguments: ArtistDetailArgs(id: artist.id, artist: artist)); + } + + static toAlbumDetailPage(AlbumModel album) { + Get.toNamed('/albums/${album.id}', + arguments: AlbumDetailArgs(id: album.id, album: album)); + } + + static toTagDetailPage(TagModel tag) { + Get.toNamed('/tags/${tag.id}', + arguments: TagDetailArgs(id: tag.id, tag: tag)); + } + + static toReleaseEventDetailPage(ReleaseEventModel event) { + Get.toNamed('/release-events/${event.id}', + arguments: ReleaseEventDetailArgs(id: event.id, event: event)); + } + + static toReleaseEventSeriesDetailPage(ReleaseEventSeriesModel event) { + Get.toNamed('/release-event-series/${event.id}', + arguments: + ReleaseEventSeriesDetailArgs(id: event.id, eventSeries: event)); + } + + static openPVPlayListPage(List songs, + {String title = 'Playlist'}) { + Get.to(PVPlaylistPage(), + arguments: PVPlayListArgs(songs: songs, title: title)); + } +} diff --git a/lib/src/routes/app_routes.dart b/lib/src/routes/app_routes.dart new file mode 100644 index 00000000..9cc850aa --- /dev/null +++ b/lib/src/routes/app_routes.dart @@ -0,0 +1,21 @@ +class Routes { + static const INITIAL = '/'; + static const MAIN = '/main'; + static const SONGS = '/songs/'; + static const SONGS_DETAIL = '/songs/:id'; + static const ARTISTS = '/artists'; + static const ARTISTS_SELECTOR = '/artists/selector'; + static const ARTISTS_DETAIL = '/artists/:id'; + static const TAGS = '/tags'; + static const TAG_CATEGORIES = '/tag-categories'; + static const TAGS_DETAIL = '/tags/:id'; + static const ALBUMS = '/albums'; + static const ALBUMS_DETAIL = '/albums/:id'; + static const RELEASE_EVENTS = '/release-events'; + static const RELEASE_EVENTS_DETAIL = '/release-events/:id'; + static const RELEASE_EVENT_SERIES_DETAIL = '/release-event-series/:id'; + static const ENTRIES = '/entries'; + static const FAVORITE_SONGS = '/profile/songs'; + static const FAVORITE_ARTISTS = '/profile/artists'; + static const FAVORITE_ALBUMS = '/profile/albums'; +} diff --git a/lib/src/services/auth_service.dart b/lib/src/services/auth_service.dart new file mode 100644 index 00000000..8e2fe05f --- /dev/null +++ b/lib/src/services/auth_service.dart @@ -0,0 +1,53 @@ +import 'package:dio/dio.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/utils.dart'; + +class AuthService extends GetxService { + final HttpService httpService; + + final AppDirectory appDirectory; + + final currentUser = UserModel().obs; + + AuthService({this.httpService, this.appDirectory}) + : assert(httpService != null), + assert(appDirectory != null); + + Future login({ + String username, + String password, + }) async { + return await httpService.login(username, password); + } + + Future checkCurrentUser() async { + print('check current user'); + this.getCurrent().then(currentUser).catchError(print); + return this; + } + + Future getCurrent() async { + try { + UserModel us = await httpService.get('/api/users/current', + {'fields': 'MainPicture'}).then((item) => UserModel.fromJson(item)); + print('current user : $us'); + return us; + } catch (e) { + if (e is DioError && e.response.statusCode == 404) { + print('current user not found'); + return null; + } + + print('Unknown error from get current user $e'); + + throw e; + } + } + + Future logout() async { + appDirectory.clearCookies(); + currentUser(new UserModel()); + } +} diff --git a/lib/src/services/http_service.dart b/lib/src/services/http_service.dart new file mode 100644 index 00000000..117d1afc --- /dev/null +++ b/lib/src/services/http_service.dart @@ -0,0 +1,80 @@ +import 'package:cookie_jar/cookie_jar.dart'; +import 'package:dio/dio.dart'; +import 'package:dio_cookie_manager/dio_cookie_manager.dart'; +import 'package:dio_http_cache/dio_http_cache.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:vocadb_app/exceptions.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/utils.dart'; + +class HttpService extends GetxService { + Dio _dio; + AppDirectory _appDirectory; + + HttpService({Dio dio, AppDirectory appDirectory}) + : this._dio = dio, + this._appDirectory = appDirectory; + + Future init() async { + _dio = Dio(); + _dio.interceptors + .add(DioCacheManager(CacheConfig(baseUrl: baseUrl)).interceptor); + _dio.interceptors.add(CookieManager( + PersistCookieJar(dir: _appDirectory.cookiesDirectory.path))); + return this; + } + + Future get(String endpoint, Map params) async { + params?.removeWhere((key, value) => value == null || value.isEmpty); + + String url = Uri.https(authority, endpoint, params).toString(); + print('GET $url | $params'); + final response = + await _dio.get(url, options: buildCacheOptions(Duration(minutes: 5))); + + if (response.statusCode == 200) { + return response.data; + } + + throw HttpRequestErrorException(); + } + + Future post(String endpoint, Map params) async { + params?.removeWhere((key, value) => value == null || value.isEmpty); + String url = Uri.https(authority, endpoint).toString(); + + print('POST $url | $params'); + + final response = await _dio.post( + url, + data: params, + ); + + if (response.statusCode == 204) { + return 'done'; + } else { + print(response.statusMessage); + } + + throw HttpRequestErrorException(); + } + + Future login(String username, String password) async { + String url = Uri.https(authority, '/User/Login').toString(); + try { + await _dio.post(url, data: {'UserName': username, 'Password': password}); + throw LoginFailedException(); + } catch (e) { + if (e is DioError && e.response.statusCode == 302) { + List cookies = e.response.headers.map['set-cookie']; + + if (cookies != null) { + return UserCookie(cookies: cookies); + } + } + + throw e; + } + } +} diff --git a/lib/src/services/shared_preference_service.dart b/lib/src/services/shared_preference_service.dart new file mode 100644 index 00000000..b8a8cc3f --- /dev/null +++ b/lib/src/services/shared_preference_service.dart @@ -0,0 +1,78 @@ +import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:vocadb_app/config.dart'; +import 'package:vocadb_app/controllers.dart'; +import 'package:vocadb_app/src/config/app_translations.dart'; +import 'package:vocadb_app/themes.dart'; + +class SharedPreferenceService extends GetxService { + static final String container = 'pref'; + + final GetStorage box; + + final uiLang = ReadWriteValue('uiLang', 'en'); + + final contentLang = 'Default'.obs; + + final theme = 'dark'.obs; + + final autoPlay = true.obs; + + SharedPreferenceService({this.box}); + + static String get lang => + Get.find().contentLang.string; + + static bool get autoPlayValue => + Get.find().autoPlay.value; + + void init() { + initUILang(); + initContentLang(); + initTheme(); + initAutoPlay(); + } + + void initUILang() { + uiLang.val = box.read('uiLang'); + AppTranslation().changeLocale(uiLang.val); + print('current locale ${Get.locale}'); + } + + updateUiLang(String value) { + box.write('uiLang', value); + uiLang.val = value; + AppTranslation().changeLocale(value); + print('current locale ${Get.locale}'); + } + + void initContentLang() => contentLang(box.read('contentLang')); + + updateContentLang(String value) { + box.write('contentLang', value); + contentLang(value); + Get.find().fetchApi(); + Get.find().fetchApi(); + } + + void initTheme() { + print('init theme ${theme.string}'); + theme(box.read('theme')); + Themes.changeTheme(theme.string); + } + + updateTheme(String value) { + box.write('theme', value); + theme(value); + Themes.changeTheme(value); + } + + void initAutoPlay() { + autoPlay(box.read('autoPlay')); + } + + updateAutoPlay(bool value) { + box.write('autoPlay', value); + autoPlay(value); + } +} diff --git a/lib/src/utils/app_directory.dart b/lib/src/utils/app_directory.dart new file mode 100644 index 00000000..0aa354f9 --- /dev/null +++ b/lib/src/utils/app_directory.dart @@ -0,0 +1,34 @@ +import 'dart:io'; + +import 'package:get/get.dart'; +import 'package:path_provider/path_provider.dart'; + +class AppDirectory extends GetxService { + Directory applicationDocument; + + Directory cookiesDirectory; + + AppDirectory(); + + Future init() async { + this.applicationDocument = await getApplicationDocumentsDirectory(); + this.cookiesDirectory = Directory(applicationDocument.path + '/.cookies'); + print('app cookies dir : ${applicationDocument.path}/.cookies'); + return this; + } + + void clearCookies() { + if (this.cookiesDirectory.existsSync()) { + print('clear cookies'); + this.cookiesDirectory.deleteSync(recursive: true); + + if (this.cookiesDirectory.existsSync()) { + print('cookies not clear!!!!!'); + } else { + print('cookies cleared!'); + } + } else { + print('cookies does not exists for clear'); + } + } +} diff --git a/lib/src/utils/date_time_utils.dart b/lib/src/utils/date_time_utils.dart new file mode 100644 index 00000000..2e2aa830 --- /dev/null +++ b/lib/src/utils/date_time_utils.dart @@ -0,0 +1,16 @@ +import 'package:intl/intl.dart'; + +/// An utility class for manipulate date time value +class DateTimeUtils { + /// Convert json array value to list + static String toSimpleFormat(DateTime value) { + final DateFormat formatter = DateFormat('yyyy-MM-dd'); + return formatter.format(value); + } + + static String toUtcDateString(DateTime dateTime) { + if (dateTime == null) return null; + + return '${dateTime.year}-${dateTime.month}-${dateTime.day}'; + } +} diff --git a/lib/src/utils/error_utils.dart b/lib/src/utils/error_utils.dart new file mode 100644 index 00000000..b092dfbf --- /dev/null +++ b/lib/src/utils/error_utils.dart @@ -0,0 +1,29 @@ +import 'dart:io'; + +import 'package:dio/dio.dart'; + +class ErrorUtils { + static String read(Object err) { + if (err is DioError) { + return readDioError(err); + } + + return err.toString(); + } + + static String readDioError(DioError err) { + if (err.type == DioErrorType.DEFAULT) { + return readDynamicError(err.error); + } + + return err.message; + } + + static String readDynamicError(dynamic err) { + if (err is SocketException) { + return err.message; + } + + return err.toString(); + } +} diff --git a/lib/utils/icon_site.dart b/lib/src/utils/icon_site.dart similarity index 90% rename from lib/utils/icon_site.dart rename to lib/src/utils/icon_site.dart index fbc2df14..274392ae 100644 --- a/lib/utils/icon_site.dart +++ b/lib/src/utils/icon_site.dart @@ -1,3 +1,4 @@ +/// An util class for get icon asset base on given url. class IconSite { final String urlPattern; final String assetName; @@ -11,6 +12,7 @@ class IconSite { } } +/// A wrapper class of [IconSite] for manipulate list. class IconSiteList { static List _icons = [ IconSite('youtube', 'assets/images/icon_youtube.png'), diff --git a/lib/src/utils/json_utils.dart b/lib/src/utils/json_utils.dart new file mode 100644 index 00000000..ecd399ca --- /dev/null +++ b/lib/src/utils/json_utils.dart @@ -0,0 +1,9 @@ +/// An utility class for manipulate json value +class JSONUtils { + /// Convert json array value to list + static List mapJsonArray(List jsonArray, Function map) { + return (jsonArray == null) + ? [] + : jsonArray.map((v) => map(v) as T).toList(); + } +} diff --git a/lib/src/utils/url_utils.dart b/lib/src/utils/url_utils.dart new file mode 100644 index 00000000..9683fa00 --- /dev/null +++ b/lib/src/utils/url_utils.dart @@ -0,0 +1,9 @@ +/// An utility class for manipulate url value +class UrlUtils { + /// Update url value from http to https + static String toHttps(String url) { + if (url == null) return null; + + return url.replaceFirst('http:', 'https:'); + } +} diff --git a/lib/src/widgets/album_card.dart b/lib/src/widgets/album_card.dart new file mode 100644 index 00000000..ff880e77 --- /dev/null +++ b/lib/src/widgets/album_card.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget that displays simple information about album in card. Mostly use in horizontal list. +class AlbumCard extends StatelessWidget { + /// Name of album that will display as title in card + final String name; + + /// Name of artist that will display on second line + final String artistName; + + /// Album image url for display in card + final String imageUrl; + + /// Callback when tap + final GestureTapCallback onTap; + + /// The width of card + static const double cardWidth = 130; + + /// The height of thumbnail image + static const double imageHeight = 130; + + const AlbumCard({this.name, this.artistName, this.imageUrl, this.onTap}); + + /// Create AlbumCard widget by AlbumModel + AlbumCard.album( + AlbumModel album, { + this.onTap, + }) : this.name = album.name, + this.artistName = album.artistString, + this.imageUrl = album.imageUrl; + + @override + Widget build(BuildContext context) { + return Material( + child: InkWell( + onTap: this.onTap, + child: Container( + width: cardWidth, + margin: EdgeInsets.only(right: 8.0, left: 8.0), + child: Column( + children: [ + Container( + width: double.infinity, + height: imageHeight, + color: Colors.black, + child: FittedBox( + fit: BoxFit.fitWidth, + child: CustomNetworkImage( + this.imageUrl, + )), + ), + SpaceDivider.micro(), + Container( + alignment: Alignment.centerLeft, + child: Text(this.name, + style: Theme.of(context).textTheme.bodyText2, + maxLines: 1, + overflow: TextOverflow.ellipsis)), + SpaceDivider.micro(), + Container( + alignment: Alignment.centerLeft, + child: Text(this.artistName, + style: Theme.of(context).textTheme.caption, + maxLines: 1, + overflow: TextOverflow.ellipsis)), + ], + ), + ), + ), + ); + } +} diff --git a/lib/src/widgets/album_card_placeholder.dart b/lib/src/widgets/album_card_placeholder.dart new file mode 100644 index 00000000..6f29901c --- /dev/null +++ b/lib/src/widgets/album_card_placeholder.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; + +class AlbumCardPlaceholder extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.symmetric(horizontal: 8.0), + child: Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 130, + height: 120, + color: Colors.white, + ), + SizedBox( + height: 6, + ), + Container( + width: 130, + height: 8, + color: Colors.white, + ), + SizedBox( + height: 6, + ), + Container( + width: 80, + height: 8, + color: Colors.white, + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/widgets/album_list_view.dart b/lib/src/widgets/album_list_view.dart new file mode 100644 index 00000000..0a5c4f66 --- /dev/null +++ b/lib/src/widgets/album_list_view.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display list of songs as vertical or horizontal +class AlbumListView extends StatelessWidget { + AlbumListView( + {Key key, + this.albums, + this.onSelect, + this.onReachLastItem, + this.emptyWidget, + this.scrollDirection = Axis.vertical, + this.displayPlaceholder = false}) + : super(key: key); + + /// List of songs to display. + final List albums; + + /// Default is vertical + final Axis scrollDirection; + + /// A callback function when user react to last item. Only worked on list view with vertical direction. + final Function onReachLastItem; + + /// Set to True for display list of placeholders. + final bool displayPlaceholder; + + /// A callback function that called when user tap any item + final void Function(AlbumModel) onSelect; + + /// Height of list content widget if set as horizontal. + static const double _rowHeight = 180; + + /// A widget that display when songs is empty + final Widget emptyWidget; + + /// Return item for display in vertical list + Widget _verticalItemBuilder(BuildContext context, int index) => + AlbumTile.fromEntry( + this.albums[index], + onTap: () => this.onSelect(this.albums[index]), + ); + + /// Return item for display in horizontal list + Widget _horizontalItemBuilder(BuildContext context, int index) => + AlbumCard.album(this.albums[index], + onTap: () => this.onSelect(this.albums[index])); + + @override + Widget build(BuildContext context) { + if (this.albums.isEmpty && this.emptyWidget != null) { + return emptyWidget; + } + + if (this.scrollDirection == Axis.vertical) { + return InfiniteListView( + itemCount: this.albums.length, + itemBuilder: _verticalItemBuilder, + onReachLastItem: this.onReachLastItem, + ); + } + + if (this.displayPlaceholder) { + return AlbumPlaceholderListView(); + } + + return SizedBox( + height: _rowHeight, + child: ListView.builder( + itemCount: this.albums.length, + scrollDirection: Axis.horizontal, + itemBuilder: _horizontalItemBuilder)); + } +} diff --git a/lib/src/widgets/album_placeholder_list_view.dart b/lib/src/widgets/album_placeholder_list_view.dart new file mode 100644 index 00000000..ac0876ef --- /dev/null +++ b/lib/src/widgets/album_placeholder_list_view.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/widgets.dart'; + +class AlbumPlaceholderListView extends StatelessWidget { + AlbumPlaceholderListView( + {Key key, this.size = 10, this.scrollDirection = Axis.horizontal}) + : assert(size != null), + super(key: key); + + /// Size of placeholders + final int size; + + /// Direction to display + final Axis scrollDirection; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 180, + child: ListView.builder( + itemCount: this.size, + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) => AlbumCardPlaceholder()), + ); + } +} diff --git a/lib/src/widgets/album_tile.dart b/lib/src/widgets/album_tile.dart new file mode 100644 index 00000000..70debd68 --- /dev/null +++ b/lib/src/widgets/album_tile.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/src/widgets/custom_network_image.dart'; + +/// A widget for display album information in vertical list +class AlbumTile extends StatelessWidget { + /// Name of album that will display as title in card + final String name; + + /// Name of artist that will display on second line + final String artist; + + /// Album image url to display in widget + final String imageUrl; + + /// Callback when tap + final GestureTapCallback onTap; + + /// Album image size both width and height + static const double imageSize = 50; + + const AlbumTile({Key key, this.name, this.artist, this.imageUrl, this.onTap}) + : super(key: key); + + AlbumTile.fromEntry(EntryModel entry, {this.onTap}) + : this.name = entry.name, + this.imageUrl = entry.imageUrl, + this.artist = entry.artistString; + + @override + Widget build(BuildContext context) { + return ListTile( + onTap: this.onTap, + leading: SizedBox( + width: imageSize, + height: imageSize, + child: CustomNetworkImage( + this.imageUrl, + fit: BoxFit.fill, + ), + ), + title: Text(this.name, overflow: TextOverflow.ellipsis), + subtitle: Text(this.artist, overflow: TextOverflow.ellipsis), + ); + } +} diff --git a/lib/src/widgets/artist_column_view.dart b/lib/src/widgets/artist_column_view.dart new file mode 100644 index 00000000..abbe6ca3 --- /dev/null +++ b/lib/src/widgets/artist_column_view.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display list of artists by using [Column] widget. +class ArtistColumnView extends StatelessWidget { + ArtistColumnView({Key key, this.artists, this.onSelect}) : super(key: key); + + /// List of artists to display. + final List artists; + + final Function(ArtistModel) onSelect; + + @override + Widget build(BuildContext context) { + return Column( + children: this + .artists + .map((e) => ArtistTile.fromEntry( + e, + onTap: () => this.onSelect(e), + )) + .toList()); + } +} diff --git a/lib/src/widgets/artist_group_by_role_list.dart b/lib/src/widgets/artist_group_by_role_list.dart new file mode 100644 index 00000000..092eff8b --- /dev/null +++ b/lib/src/widgets/artist_group_by_role_list.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; + +/// A widget display list of artists and grouping by role +class ArtistGroupByRoleList extends StatelessWidget { + final List artistRoles; + + final Function(ArtistRoleModel) onTap; + + final bool displayRole; + + const ArtistGroupByRoleList( + {@required this.artistRoles, this.onTap, this.displayRole = true}); + + ArtistGroupByRoleList.fromArtistSongModel( + {@required List artistSongs, + this.onTap, + this.displayRole = true}) + : artistRoles = artistSongs + .map((e) => ArtistRoleModel( + id: e.artistId, + name: e.name, + imageUrl: e.artistImageUrl, + role: e.artistRole)) + .toList(); + + ArtistGroupByRoleList.fromArtistAlbumModel( + {@required List artistAlbums, + this.onTap, + this.displayRole = true}) + : artistRoles = artistAlbums + .map((e) => ArtistRoleModel( + id: e.artistId, + name: e.name, + imageUrl: e.artistImageUrl, + role: e.artistRole)) + .toList(); + + ArtistGroupByRoleList.fromArtistEventModel( + {@required List artistEvents, + this.onTap, + this.displayRole = true}) + : artistRoles = artistEvents + .map((e) => ArtistRoleModel( + id: e.artistId, + name: e.artistName, + imageUrl: e.artistImageUrl, + role: e.artistRole)) + .toList(); + + List _generateItems() { + List items = []; + List producers = []; + List vocalists = []; + List others = []; + + this.artistRoles.forEach((e) { + if (e.isProducer) producers.add(e); + if (e.isVocalist) vocalists.add(e); + if (e.isOtherRole) others.add(e); + }); + + if (producers.isNotEmpty) { + if (displayRole) + items.add(ListTile( + title: Text('producers'.tr), + )); + items.addAll(producers.map(_mapArtistTile)); + } + + if (vocalists.isNotEmpty) { + if (displayRole) + items.add(ListTile( + title: Text('vocalists'.tr), + )); + items.addAll(vocalists.map(_mapArtistTile)); + } + + if (others.isNotEmpty) { + if (displayRole) + items.add(ListTile( + title: Text('other'.tr), + )); + items.addAll(others.map(_mapOtherArtistTile)); + } + + return items; + } + + ArtistTile _mapArtistTile(ArtistRoleModel model) { + return ArtistTile( + name: model.name, + imageUrl: model.imageUrl, + onTap: () => this.onTap(model), + ); + } + + ArtistTile _mapOtherArtistTile(ArtistRoleModel model) { + return ArtistTile( + name: model.name, + subtitle: model.role, + imageUrl: model.imageUrl, + onTap: () => this.onTap(model), + ); + } + + @override + Widget build(BuildContext context) { + List items = _generateItems(); + + return Column( + children: items, + ); + } +} diff --git a/lib/src/widgets/artist_input.dart b/lib/src/widgets/artist_input.dart new file mode 100644 index 00000000..d9d0a625 --- /dev/null +++ b/lib/src/widgets/artist_input.dart @@ -0,0 +1,91 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display artist browsing input +class ArtistInput extends StatelessWidget { + /// Label input. + final String label; + + /// Existing artist values + final List values; + + /// Called when the user taps the deleteIcon. + final Function(ArtistModel) onDeleted; + + /// Called when select artist + final Function(ArtistModel) onSelect; + + final double imageSize; + + const ArtistInput( + {this.label = 'Artists', + this.values, + this.onDeleted, + this.onSelect, + this.imageSize = 50}); + + Widget _buildLeading(String imageUrl) { + return SizedBox( + width: this.imageSize, + height: this.imageSize, + child: ClipOval( + child: Container( + color: Colors.white, + child: + (imageUrl == null) ? Placeholder() : CustomNetworkImage(imageUrl), + )), + ); + } + + Widget _artistBuilder(ArtistModel artistModel) { + return ListTile( + leading: _buildLeading(artistModel.imageUrl), + title: Text(artistModel.name), + trailing: (this.onDeleted == null) + ? null + : IconButton( + icon: Icon(Icons.close), + onPressed: () => this.onDeleted(artistModel), + ), + ); + } + + void _onBrowse() { + Get.toNamed(Routes.ARTISTS, + arguments: ArtistSearchArgs(selectionMode: true)) + .then(_postBrowse); + } + + void _postBrowse(value) { + if (value != null) { + this.onSelect(value); + } + } + + @override + Widget build(BuildContext context) { + final List items = []; + + items.add(ListTile( + title: Text('artists'.tr), + )); + + if (this.values != null && this.values.isNotEmpty) { + items.addAll(this.values.map((e) => _artistBuilder(e)).toList()); + } + + items.add(ListTile( + onTap: this._onBrowse, + leading: Icon(Icons.add), + title: Text('add'.tr), + )); + + return Column( + children: items, + ); + } +} diff --git a/lib/src/widgets/artist_link_list_view.dart b/lib/src/widgets/artist_link_list_view.dart new file mode 100644 index 00000000..a47e3a29 --- /dev/null +++ b/lib/src/widgets/artist_link_list_view.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; + +/// A widget display list of artists and grouping by link type +class ArtistLinkListView extends StatelessWidget { + final List artistLinks; + + final Function(ArtistLinkModel) onSelect; + + /// For translation label. + final bool reverse; + + const ArtistLinkListView( + {@required this.artistLinks, this.onSelect, this.reverse = false}); + + List _generateItems() { + List items = []; + + ArtistLinkList(this.artistLinks) + .groupByLinkType + .forEach((linkType, artistLinkList) { + String label = (this.reverse) + ? 'artistReverseRole.$linkType' + : 'artistRole.$linkType'; + items.add(_buildHeader(label.tr)); + items.addAll(artistLinkList.map(_mapArtistLinkTile).toList()); + }); + + return items; + } + + Widget _buildHeader(String title) { + return ListTile( + title: Text(title), + ); + } + + ArtistTile _mapArtistLinkTile(ArtistLinkModel model) { + return ArtistTile( + name: model.artist.name, + imageUrl: model.artist.imageUrl, + onTap: () => this.onSelect(model), + ); + } + + @override + Widget build(BuildContext context) { + List items = _generateItems(); + + return Column( + children: items, + ); + } +} diff --git a/lib/src/widgets/artist_list_view.dart b/lib/src/widgets/artist_list_view.dart new file mode 100644 index 00000000..b1185549 --- /dev/null +++ b/lib/src/widgets/artist_list_view.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display list of artists +class ArtistListView extends StatelessWidget { + ArtistListView( + {Key key, + this.artists, + this.onSelect, + this.onReachLastItem, + this.emptyWidget}) + : super(key: key); + + /// List of artists to display. + final List artists; + + /// A callback function when user react to last item. Only worked on list view with vertical direction. + final Function onReachLastItem; + + final Function(ArtistModel) onSelect; + + /// A widget that display when songs is empty + final Widget emptyWidget; + + @override + Widget build(BuildContext context) { + if (this.artists.isEmpty && this.emptyWidget != null) { + return emptyWidget; + } + + return InfiniteListView( + itemCount: this.artists.length, + itemBuilder: (context, index) => ArtistTile.fromEntry(this.artists[index], + onTap: () => this.onSelect(this.artists[index])), + onReachLastItem: this.onReachLastItem, + ); + } +} diff --git a/lib/src/widgets/artist_tile.dart b/lib/src/widgets/artist_tile.dart new file mode 100644 index 00000000..155533a4 --- /dev/null +++ b/lib/src/widgets/artist_tile.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/src/widgets/custom_network_image.dart'; + +/// A widget for display artist information in vertical list +class ArtistTile extends StatelessWidget { + /// Name of artist that will display as title in card + final String name; + + /// A string value display below name if not null + final String subtitle; + + /// An artist image url to display in widget + final String imageUrl; + + /// An artist image size both width and height + static const double imageSize = 50; + + /// Callback when tap + final GestureTapCallback onTap; + + const ArtistTile( + {Key key, this.name, this.imageUrl, this.onTap, this.subtitle}) + : super(key: key); + + ArtistTile.fromEntry(EntryModel entry, {this.onTap, this.subtitle}) + : this.name = entry.name, + this.imageUrl = entry.imageUrl; + + Widget _leading() { + final Widget imageChild = (this.imageUrl == null) + ? Icon(Icons.person) + : CustomNetworkImage( + this.imageUrl, + ); + + return SizedBox( + width: imageSize, + height: imageSize, + child: ClipOval( + child: Container( + color: Colors.white, + child: imageChild, + )), + ); + } + + @override + Widget build(BuildContext context) { + return ListTile( + onTap: this.onTap, + leading: _leading(), + title: Text(this.name, overflow: TextOverflow.ellipsis), + subtitle: (subtitle == null) ? null : Text(subtitle), + ); + } +} diff --git a/lib/src/widgets/center_loading.dart b/lib/src/widgets/center_loading.dart new file mode 100644 index 00000000..a2780cf7 --- /dev/null +++ b/lib/src/widgets/center_loading.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +class CenterLoading extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: CircularProgressIndicator(), + ), + ); + } +} diff --git a/lib/src/widgets/center_text.dart b/lib/src/widgets/center_text.dart new file mode 100644 index 00000000..bf5f4cc3 --- /dev/null +++ b/lib/src/widgets/center_text.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; + +class CenterText extends StatelessWidget { + final String text; + + final bool isExpanded; + + const CenterText(this.text, {this.isExpanded = false}); + + @override + Widget build(BuildContext context) { + if (isExpanded) { + return Expanded( + child: Center( + child: Text(text), + ), + ); + } + return Center( + child: Text(text), + ); + } +} diff --git a/lib/src/widgets/custom_network_image.dart b/lib/src/widgets/custom_network_image.dart new file mode 100644 index 00000000..0bb56f2c --- /dev/null +++ b/lib/src/widgets/custom_network_image.dart @@ -0,0 +1,47 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:flutter/material.dart'; + +/// A widget for display image and cached. Display placeholder instead if image url is null. +class CustomNetworkImage extends StatelessWidget { + /// An url of image to display. + final String imageUrl; + + /// A placeholder widget to display when image loading. + final Widget placeholder; + + /// A widget to display error when fail to load image. + final Widget errorWidget; + + final BoxFit fit; + + final double width; + + final double height; + + const CustomNetworkImage(this.imageUrl, + {this.placeholder, this.errorWidget, this.fit, this.width, this.height}); + + Widget _buildImage() { + return CachedNetworkImage( + fit: this.fit, + imageUrl: this.imageUrl, + width: this.width, + height: this.height, + placeholder: (this.placeholder != null) + ? this.placeholder + : (context, url) => Container(color: Colors.grey), + errorWidget: (this.errorWidget != null) + ? this.errorWidget + : (context, url, error) => new Icon(Icons.error), + ); + } + + @override + Widget build(BuildContext context) { + if (imageUrl == null) { + return Placeholder(); + } + + return this._buildImage(); + } +} diff --git a/lib/src/widgets/date_range_input.dart b/lib/src/widgets/date_range_input.dart new file mode 100644 index 00000000..9610e86f --- /dev/null +++ b/lib/src/widgets/date_range_input.dart @@ -0,0 +1,110 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/pages.dart'; +import 'package:vocadb_app/utils.dart'; +import 'package:get/get.dart'; + +/// A full-width widget for user select date range. Used on filter page such as [ReleaseEventSearchFilterPage]. +class DateRangeInput extends StatefulWidget { + final DateTime fromDateValue; + + final DateTime toDateValue; + + final ValueChanged onFromDateChanged; + + final ValueChanged onToDateChanged; + + const DateRangeInput( + {@required this.onFromDateChanged, + @required this.onToDateChanged, + this.fromDateValue, + this.toDateValue}) + : assert(onFromDateChanged != null), + assert(onToDateChanged != null); + + @override + _DateRangeInputState createState() => _DateRangeInputState(); +} + +class _DateRangeInputState extends State { + DateTime fromDate; + + DateTime toDate; + + @override + void initState() { + fromDate = widget.fromDateValue; + toDate = widget.toDateValue; + super.initState(); + } + + void _updateFromDate(DateTime value) { + setState(() => this.fromDate = value); + widget.onFromDateChanged(value); + } + + void _updateToDate(DateTime value) { + setState(() => this.toDate = value); + widget.onToDateChanged(value); + } + + void _onPressFromDate() { + showDatePicker( + context: this.context, + initialDate: (fromDate == null) ? DateTime.now() : fromDate, + firstDate: DateTime(2005), + lastDate: DateTime(2030)) + .then(_updateFromDate); + } + + void _onPressToDate() { + showDatePicker( + context: this.context, + initialDate: (toDate == null) ? DateTime.now() : toDate, + firstDate: DateTime(2005), + lastDate: DateTime(2030)) + .then((_updateToDate)); + } + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + children: [ + ListTile( + title: Text('date'.tr), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + child: RaisedButton.icon( + color: Theme.of(context).cardColor, + icon: Icon(Icons.calendar_today), + label: Text((fromDate == null) + ? 'from'.tr + : DateTimeUtils.toSimpleFormat(fromDate)), + onPressed: _onPressFromDate), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 4.0), + child: Text('-'), + ), + Expanded( + child: RaisedButton.icon( + color: Theme.of(context).cardColor, + icon: Icon(Icons.calendar_today), + label: Text((toDate == null) + ? 'to'.tr + : DateTimeUtils.toSimpleFormat(toDate)), + onPressed: _onPressToDate), + ), + ], + ), + ) + ], + ), + ); + } +} diff --git a/lib/src/widgets/entry_list_view.dart b/lib/src/widgets/entry_list_view.dart new file mode 100644 index 00000000..496dfcfc --- /dev/null +++ b/lib/src/widgets/entry_list_view.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; + +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget dispaly list of entries and group by entry type +class EntryListView extends StatelessWidget { + final List entries; + + final Function(EntryModel) onSelect; + + /// A widget that display when songs is empty + final Widget emptyWidget; + + const EntryListView({this.entries, this.onSelect, this.emptyWidget}); + + List _generateItems() { + List items = []; + + EntryList entryList = EntryList(this.entries); + + if (entryList.songs != null && entryList.songs.isNotEmpty) { + items.add(ListTile( + title: Text('Songs'), + )); + + items.addAll(entryList.songs.map((e) => SongTile.fromEntry( + e, + onTap: () => this.onSelect(e), + ))); + } + + if (entryList.artists != null && entryList.artists.isNotEmpty) { + items.add(ListTile(title: Text('Artists'))); + + items.addAll(entryList.artists + .map((e) => ArtistTile.fromEntry(e, onTap: () => this.onSelect(e)))); + } + + if (entryList.albums != null && entryList.albums.isNotEmpty) { + items.add(ListTile( + title: Text('Albums'), + )); + + items.addAll(entryList.albums + .map((e) => AlbumTile.fromEntry(e, onTap: () => this.onSelect(e)))); + } + + if (entryList.tags != null && entryList.tags.isNotEmpty) { + items.add(ListTile( + title: Text('Tags'), + )); + + List es = entryList.tags.toList(); + + List tagModelList = + es.map((e) => TagModel.fromEntry(e)).toList(); + + items.add(TagGroupView( + tags: tagModelList, + onPressed: (tag) => this.onSelect(tag), + )); + } + + if (entryList.releaseEvents != null && entryList.releaseEvents.isNotEmpty) { + items.add(ListTile( + title: Text('Events'), + )); + + items.addAll(entryList.releaseEvents.map( + (e) => ReleaseEventTile.fromEntry(e, onTap: () => this.onSelect(e)))); + } + + return items; + } + + @override + Widget build(BuildContext context) { + if (entries.isEmpty && this.emptyWidget != null) { + return this.emptyWidget; + } + + final List items = _generateItems(); + return ListView.builder( + itemCount: items.length, itemBuilder: (context, index) => items[index]); + } +} diff --git a/lib/widgets/expandable_content.dart b/lib/src/widgets/expandable_content.dart similarity index 87% rename from lib/widgets/expandable_content.dart rename to lib/src/widgets/expandable_content.dart index 42c6945d..7948cf29 100644 --- a/lib/widgets/expandable_content.dart +++ b/lib/src/widgets/expandable_content.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; +import 'package:get/get.dart'; class ExpandableContent extends StatefulWidget { final Widget child; @@ -35,7 +35,7 @@ class _ExpandableContentState extends State { width: double.infinity, child: FlatButton( onPressed: open, - child: Text(FlutterI18n.translate(context, 'label.showMore')), + child: Text('showMore'.tr), ), ); } @@ -49,7 +49,7 @@ class _ExpandableContentState extends State { width: double.infinity, child: FlatButton( onPressed: close, - child: Text(FlutterI18n.translate(context, 'label.hide')), + child: Text('hide'.tr), ), ), ], diff --git a/lib/widgets/infinite_list_view.dart b/lib/src/widgets/infinite_list_view.dart similarity index 65% rename from lib/widgets/infinite_list_view.dart rename to lib/src/widgets/infinite_list_view.dart index 5096c358..588481d8 100644 --- a/lib/widgets/infinite_list_view.dart +++ b/lib/src/widgets/infinite_list_view.dart @@ -1,17 +1,28 @@ import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/center_content.dart'; +/// A widget for display list of items and callback when user reach to bottom. class InfiniteListView extends StatelessWidget { + /// Number of item final int itemCount; + + /// A builder final IndexedWidgetBuilder itemBuilder; + + /// A callback function when user react to last item. final Function onReachLastItem; + + /// A progress indicator widget for display next to the last item of list final Widget progressIndicator; + /// A widget that will display when size is zero. + final Widget emptyWidget; + const InfiniteListView( {Key key, this.itemCount, this.itemBuilder, this.onReachLastItem, + this.emptyWidget, this.progressIndicator}) : super(key: key); @@ -22,29 +33,17 @@ class InfiniteListView extends StatelessWidget { ); } - static Widget streamShowProgressIndicator(Stream stream) { - return StreamBuilder( - stream: stream, - initialData: false, - builder: (context, snapshot) => (snapshot.hasData && snapshot.data) - ? Container() - : buildProgressIndicator(), - ); - } - @override Widget build(BuildContext context) { if (itemCount == 0) { - return CenterResult.error( - title: 'No results', - ); + return (this.emptyWidget == null) ? Container() : this.emptyWidget; } return ListView.builder( itemCount: itemCount + 1, itemBuilder: (context, index) { if (index == itemCount) { - this.onReachLastItem(); + if (this.onReachLastItem != null) this.onReachLastItem(); return (progressIndicator == null) ? Container() : progressIndicator; } diff --git a/lib/src/widgets/info_message_view.dart b/lib/src/widgets/info_message_view.dart new file mode 100644 index 00000000..5653d2bc --- /dev/null +++ b/lib/src/widgets/info_message_view.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display Icon, title and subtitle +class InfoMessageView extends StatelessWidget { + final Widget icon; + + final String title; + + final String subtitle; + + InfoMessageView({this.icon, @required this.title, this.subtitle}) + : assert(title != null); + + InfoMessageView.error({this.title, this.subtitle}) + : this.icon = Icon(Icons.error, size: 48); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(24.0), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + this.icon, + SpaceDivider.small(), + Text(this.title, style: Theme.of(context).textTheme.headline4), + SpaceDivider.micro(), + (this.subtitle != null) + ? Text(this.subtitle, + style: Theme.of(context).textTheme.caption, + textAlign: TextAlign.center) + : Container() + ], + ), + ), + ); + } +} diff --git a/lib/src/widgets/info_section.dart b/lib/src/widgets/info_section.dart new file mode 100644 index 00000000..19a06ee9 --- /dev/null +++ b/lib/src/widgets/info_section.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; + +/// A widget to display small info and given child. +class InfoSection extends StatelessWidget { + final String title; + final Widget child; + + final double horizontalPadding; + + final bool visible; + + const InfoSection( + {Key key, + this.title, + this.child, + this.horizontalPadding = 16.0, + this.visible = true}) + : super(key: key); + + @override + Widget build(BuildContext context) { + if (this.visible == null || !this.visible) return Container(); + + print('$title - $visible'); + + return Padding( + padding: EdgeInsets.symmetric(horizontal: this.horizontalPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: Theme.of(context).textTheme.caption, + ), + child, + ], + ), + ); + } +} diff --git a/lib/src/widgets/lyric_content.dart b/lib/src/widgets/lyric_content.dart new file mode 100644 index 00000000..d011066f --- /dev/null +++ b/lib/src/widgets/lyric_content.dart @@ -0,0 +1,82 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; + +/// A widget for display group of lyrics content +class LyricContent extends StatefulWidget { + final List lyrics; + + final GestureTapCallback onTapClose; + + LyricContent({Key key, this.onTapClose, this.lyrics}) : super(key: key); + + @override + _LyricContentState createState() => _LyricContentState(); +} + +class _LyricContentState extends State { + LyricModel selectedLyric; + + @override + void initState() { + // TODO: implement initState + super.initState(); + selectedLyric = widget.lyrics[0]; + } + + void _changeTranslation(LyricModel lyricModel) { + setState(() { + this.selectedLyric = lyricModel; + }); + } + + String _translationLabel(LyricModel lyricModel) { + return lyricModel.translationType + + ((lyricModel.cultureCode == null || lyricModel.cultureCode.isEmpty) + ? '' + : ' (${lyricModel.cultureCode})'); + } + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + children: [ + InkWell( + onTap: this.widget.onTapClose, + child: Container( + height: 36, + alignment: Alignment.center, + child: Icon(Icons.close), + ), + ), + Padding( + padding: EdgeInsets.only(right: 8.0, left: 8.0), + child: Container( + height: 76, + child: ListView( + scrollDirection: Axis.horizontal, + children: widget.lyrics + .map((lyric) => Container( + margin: EdgeInsets.only(right: 4.0), + child: InputChip( + backgroundColor: (lyric.translationType == + selectedLyric.translationType) + ? Theme.of(context).chipTheme.selectedColor + : Theme.of(context).chipTheme.backgroundColor, + onPressed: () => this._changeTranslation(lyric), + label: Text(_translationLabel(lyric)), + ), + )) + .toList()), + ), + ), + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.only(bottom: 16.0, right: 8.0, left: 8.0), + child: Text(selectedLyric.value)), + ), + ], + ), + ); + } +} diff --git a/lib/src/widgets/page_builder.dart b/lib/src/widgets/page_builder.dart new file mode 100644 index 00000000..2577be1b --- /dev/null +++ b/lib/src/widgets/page_builder.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +/// A builder widget to build individual pages with own view and state. +/// Used on any page that can be duplicated but with different id. +/// Such as detail pages. +class PageBuilder extends StatelessWidget { + final GetxController controller; + + final Function(T) builder; + + /// An unique string value for seperated state. + final String tag; + + const PageBuilder({Key key, this.controller, this.builder, this.tag}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return GetBuilder( + tag: this.tag, + global: false, + init: controller, + dispose: (_) => controller.onClose(), + builder: builder, + ); + } +} diff --git a/lib/src/widgets/pv_group_list.dart b/lib/src/widgets/pv_group_list.dart new file mode 100644 index 00000000..f1c666a1 --- /dev/null +++ b/lib/src/widgets/pv_group_list.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; + +/// A widget display list of pvs grouping by category +class PVGroupList extends StatelessWidget { + final List pvs; + + /// For pv list that not contains any Youtube pv. + final searchQuery; + + final Function(PVModel) onTap; + + const PVGroupList({@required this.pvs, this.onTap, this.searchQuery}) + : assert(pvs != null); + + List _generateItems() { + List items = []; + + PVList pvList = PVList(pvs); + + List originalPVs = pvList.originalPVs; + List otherPVs = pvList.otherPVs; + + if (originalPVs.isNotEmpty) { + items.add(ListTile( + title: Text('originalMedia'.tr), + )); + items.addAll(originalPVs.map(_mapPVTile)); + } + + if (otherPVs.isNotEmpty) { + items.add(ListTile( + title: Text('otherMedia'.tr), + )); + items.addAll(otherPVs.map(_mapPVTile)); + } + + if (!pvList.isContainsYoutube) { + if (otherPVs.isEmpty) { + items.add(ListTile( + title: Text('otherMedia'.tr), + )); + } + + items.add(SiteTile( + title: 'searchYoutube'.tr, + url: 'https://www.youtube.com/results?search_query=$searchQuery', + )); + } + + return items; + } + + PVTile _mapPVTile(PVModel model) { + return PVTile( + name: model.name, + service: model.service, + url: model.url, + pvType: model.pvType, + onTap: () => this.onTap(model), + ); + } + + @override + Widget build(BuildContext context) { + return Column( + children: _generateItems(), + ); + } +} diff --git a/lib/widgets/pv_tile.dart b/lib/src/widgets/pv_tile.dart similarity index 52% rename from lib/widgets/pv_tile.dart rename to lib/src/widgets/pv_tile.dart index 5ace0c19..7fa23bd7 100644 --- a/lib/widgets/pv_tile.dart +++ b/lib/src/widgets/pv_tile.dart @@ -1,17 +1,33 @@ import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:share/share.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:vocadb/models/pv_model.dart'; -import 'package:vocadb/utils/icon_site.dart'; +import 'package:vocadb_app/utils.dart'; +/// A widget display simple information about PV as tile. class PVTile extends StatelessWidget { - final PVModel pv; + final String name; - const PVTile({Key key, this.pv}) : super(key: key); + final String service; + + final String url; + + final String pvType; + + final VoidCallback onTap; + + final double iconSize; + + const PVTile( + {Key key, + this.name, + this.service, + this.url, + this.pvType, + this.onTap, + this.iconSize = 32}) + : super(key: key); Widget buildLeading() { - IconSite ic = IconSiteList.findIconAsset(pv.service); + IconSite ic = IconSiteList.findIconAsset(this.service); return (ic == null) ? Icon(Icons.ondemand_video) @@ -20,8 +36,8 @@ class PVTile extends StatelessWidget { Widget buildImageIcon(String assetName) { return SizedBox( - width: 32, - height: 32, + width: this.iconSize, + height: this.iconSize, child: FittedBox( fit: BoxFit.contain, child: Image.asset(assetName), @@ -33,21 +49,19 @@ class PVTile extends StatelessWidget { Widget build(BuildContext context) { return ListTile( leading: buildLeading(), - title: Text(pv.name, overflow: TextOverflow.ellipsis), - subtitle: Text('${pv.service} • ${pv.pvType}'), - onTap: () { - launch(pv.url); - }, + title: Text(this.name, overflow: TextOverflow.ellipsis), + subtitle: Text('${this.service} • ${this.pvType}'), + onTap: this.onTap, trailing: PopupMenuButton( onSelected: (String selectedValue) { if (selectedValue == 'share') { - Share.share(pv.url); + Share.share(this.url); } }, itemBuilder: (BuildContext context) => [ PopupMenuItem( value: 'share', - child: Text(FlutterI18n.translate(context, 'label.share')), + child: Text('Share'), ), ], ), diff --git a/lib/src/widgets/radio_button_group.dart b/lib/src/widgets/radio_button_group.dart new file mode 100644 index 00000000..b5e81e1a --- /dev/null +++ b/lib/src/widgets/radio_button_group.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; + +/// A widget to create simple radio button group. +class RadioButtonGroup extends StatelessWidget { + /// String value that will display as text on header + final String label; + + /// The current or selected value + final String value; + + /// The list of mapping name/value to display as radio button + final List items; + + /// A callback on value changed + final Function(String) onChanged; + + const RadioButtonGroup({this.label, this.value, this.items, this.onChanged}); + + @override + Widget build(BuildContext context) { + List radioItems = []; + + radioItems.add(ListTile( + title: Text(this.label), + )); + + radioItems.addAll(this + .items + .map((e) => ListTile( + title: Text(e.label), + leading: Radio( + value: e.value, + groupValue: this.value, + onChanged: onChanged, + ), + )) + .toList()); + + return Column( + children: radioItems, + ); + } +} diff --git a/lib/src/widgets/release_event_column_view.dart b/lib/src/widgets/release_event_column_view.dart new file mode 100644 index 00000000..4b62cb0e --- /dev/null +++ b/lib/src/widgets/release_event_column_view.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for generate release events in [Column] instead of [ListView]. Use it only when need to display release event content inside parent [ListView] widget. +class ReleaseEventColumnView extends StatelessWidget { + ReleaseEventColumnView({Key key, this.events, this.onSelect}) + : super(key: key); + + /// List of events to display. + final List events; + + /// The callback function that called when user tap any item. + final Function(ReleaseEventModel) onSelect; + + @override + Widget build(BuildContext context) { + return Column( + children: this + .events + .map((e) => ReleaseEventTile.releaseEvent( + e, + onTap: () => this.onSelect(e), + )) + .toList(), + ); + } +} diff --git a/lib/src/widgets/release_event_list_view.dart b/lib/src/widgets/release_event_list_view.dart new file mode 100644 index 00000000..e0f5c8fa --- /dev/null +++ b/lib/src/widgets/release_event_list_view.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +class ReleaseEventListView extends StatelessWidget { + ReleaseEventListView( + {Key key, + this.events, + this.onSelect, + this.onReachLastItem, + this.emptyWidget}) + : super(key: key); + + /// List of events to display. + final List events; + + final Function(ReleaseEventModel) onSelect; + + /// A callback function when user react to last item. Only worked on list view with vertical direction. + final Function onReachLastItem; + + /// A widget that display when songs is empty + final Widget emptyWidget; + + @override + Widget build(BuildContext context) { + if (events.isEmpty && this.emptyWidget != null) { + return this.emptyWidget; + } + + return InfiniteListView( + onReachLastItem: this.onReachLastItem, + itemCount: this.events.length, + itemBuilder: (context, index) => ReleaseEventTile.releaseEvent( + this.events[index], + onTap: () => this.onSelect(this.events[index]), + )); + } +} diff --git a/lib/src/widgets/release_event_series_tile.dart b/lib/src/widgets/release_event_series_tile.dart new file mode 100644 index 00000000..fb584530 --- /dev/null +++ b/lib/src/widgets/release_event_series_tile.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +/// A widget for display release event series tile +class ReleaseEventSeriesTile extends StatelessWidget { + final String name; + + final GestureTapCallback onTap; + + const ReleaseEventSeriesTile({this.name, this.onTap}); + + @override + Widget build(BuildContext context) { + if (this.name == null || this.name.isEmpty) return Container(); + + return ListTile( + onTap: this.onTap, + leading: Icon(Icons.calendar_today), + title: Text(this.name)); + } +} diff --git a/lib/src/widgets/release_event_tile.dart b/lib/src/widgets/release_event_tile.dart new file mode 100644 index 00000000..b9085d9d --- /dev/null +++ b/lib/src/widgets/release_event_tile.dart @@ -0,0 +1,154 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/src/models/release_event_model.dart'; +import 'package:vocadb_app/utils.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget to display release event information for horizontal list. +class ReleaseEventTile extends StatelessWidget { + final String name; + + final String venueName; + + final String imageUrl; + + final String category; + + final DateTime startDate; + + final DateTime endDate; + + final GestureTapCallback onTap; + + /// The height of image preview. Default is 180 + final double imageHeight; + + ReleaseEventTile( + {this.name, + this.venueName, + this.imageUrl, + this.category, + this.startDate, + this.endDate, + this.onTap, + this.imageHeight = 180}); + + ReleaseEventTile.releaseEvent(ReleaseEventModel releaseEventModel, + {this.imageHeight = 180, this.onTap}) + : this.name = releaseEventModel.name, + this.venueName = releaseEventModel.venueName, + this.imageUrl = releaseEventModel.imageUrl, + this.category = releaseEventModel.displayCategory, + this.startDate = DateTime.now(), + this.endDate = null; + + ReleaseEventTile.fromEntry(EntryModel entryModel, + {this.imageHeight = 180, this.onTap}) + : this.name = entryModel.name, + this.venueName = null, + this.imageUrl = entryModel.imageUrl, + this.category = entryModel.eventCategory, + this.startDate = null, + this.endDate = null; + + @override + Widget build(BuildContext context) { + final String dateRange = (this.startDate == null) + ? null + : (this.endDate == null) + ? DateTimeUtils.toSimpleFormat(this.startDate) + : '${DateTimeUtils.toSimpleFormat(this.startDate)} - ${DateTimeUtils.toSimpleFormat(this.endDate)}'; + + return Container( + margin: EdgeInsets.only(bottom: 16.0), + child: Card( + margin: EdgeInsets.symmetric(horizontal: 16.0), + child: InkWell( + splashColor: Colors.blue.withAlpha(30), + onTap: this.onTap, + child: Column( + children: [ + SizedBox( + height: imageHeight, + child: Stack( + children: [ + Container( + color: Colors.black, + ), + Container( + child: CustomNetworkImage( + this.imageUrl, + fit: BoxFit.cover, + width: double.infinity, + height: double.infinity, + )), + (dateRange == null) + ? Container() + : Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Card( + color: Colors.black, + margin: EdgeInsets.all(8.0), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + dateRange, + style: + TextStyle(fontWeight: FontWeight.bold), + ), + ), + ) + ], + ) + ], + ), + ), + Padding( + padding: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SpaceDivider.micro(), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + this.category ?? 'Unknown', + style: Theme.of(context).textTheme.caption, + ), + (this.venueName == null) + ? Container() + : Row( + children: [ + Container( + margin: EdgeInsets.only(right: 4.0), + child: Icon( + Icons.place, + size: 12, + ), + ), + Text( + this.venueName, + style: Theme.of(context).textTheme.caption, + ) + ], + ) + ], + ), + SpaceDivider.micro(), + Text( + this.name, + style: Theme.of(context).textTheme.subtitle1, + ), + SpaceDivider.micro(), + ], + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/src/widgets/section.dart b/lib/src/widgets/section.dart new file mode 100644 index 00000000..864b041f --- /dev/null +++ b/lib/src/widgets/section.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; + +/// A widget for wrap child widget with header and actions +class Section extends StatelessWidget { + /// Title display on top of widget. + final String title; + + /// List of action widgets display on top right side of header. + final List actions; + + /// The child contained by the section. + final Widget child; + + /// A widget that will appended into the end of section. + final Widget divider; + + final bool visible; + + /// Default header height + static const double _headerHeight = 48; + + const Section( + {Key key, + @required this.title, + this.actions, + @required this.child, + this.divider, + this.visible = true}) + : assert(title != null), + assert(child != null), + super(key: key); + + Widget _headerBuilder(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 8.0), + height: _headerHeight, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(this.title), + (actions == null || actions.isEmpty) + ? Container() + : Row(children: actions) + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + if (visible == null || !visible) return Container(); + + List children = [_headerBuilder(context), child]; + + if (divider != null) { + children.add(divider); + } + + return Column( + children: children, + ); + } +} diff --git a/lib/src/widgets/simple_dropdown_input.dart b/lib/src/widgets/simple_dropdown_input.dart new file mode 100644 index 00000000..333fa591 --- /dev/null +++ b/lib/src/widgets/simple_dropdown_input.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:get/get.dart'; + +/// A widget to display dropdown input with key and value are string +class SimpleDropdownInput extends StatelessWidget { + final List items; + + final Function onChanged; + + final String value; + + final String label; + + const SimpleDropdownInput( + {@required this.items, this.onChanged, this.value, @required this.label}) + : assert(items != null), + assert(label != null); + + static List> buildDropdownItems(List values, + {String trPrefix = '', Map emptyItem}) { + List> items = []; + + if (emptyItem != null) { + items.add(emptyItem); + } + + items.addAll( + values.map((e) => {'name': '$trPrefix.$e'.tr, 'value': e}).toList()); + return items; + } + + /// An array input must be map that contains *name* and *value* as key + SimpleDropdownInput.fromJsonArray( + {@required List> json, + this.onChanged, + this.value, + @required this.label}) + : this.items = json + .map((e) => SimpleDropdownItem(name: e['name'], value: e['value'])) + .toList(), + assert(label != null); + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(this.label), + trailing: DropdownButton( + onChanged: this.onChanged, + value: this.value, + underline: Container(), + style: TextStyle(), + items: this + .items + .map((e) => DropdownMenuItem( + value: e.value, + child: Text( + e.name, + ), + )) + .toList(), + ), + ); + } +} diff --git a/lib/widgets/site_tile.dart b/lib/src/widgets/site_tile.dart similarity index 94% rename from lib/widgets/site_tile.dart rename to lib/src/widgets/site_tile.dart index b8cd0130..77833f88 100644 --- a/lib/widgets/site_tile.dart +++ b/lib/src/widgets/site_tile.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:url_launcher/url_launcher.dart'; +/// A widget for display redirect website as list tile and automatic display icon base on domain site. class SiteTile extends StatelessWidget { final String title; final String subtitle; @@ -32,6 +33,7 @@ class SiteTile extends StatelessWidget { {"pattern": "amazon", "icon": FontAwesomeIcons.amazon}, {"pattern": "itunes", "icon": FontAwesomeIcons.itunes}, {"pattern": "play.google", "icon": FontAwesomeIcons.googlePlay}, + {"pattern": "discord", "icon": FontAwesomeIcons.discord}, ]; Map iconWebsite = siteIcons diff --git a/lib/src/widgets/song_card.dart b/lib/src/widgets/song_card.dart new file mode 100644 index 00000000..aed9d94b --- /dev/null +++ b/lib/src/widgets/song_card.dart @@ -0,0 +1,98 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget that displays simple information about song in card. Mostly use in horizontal list. +class SongCard extends StatelessWidget { + /// Name of song that will display as title in card + final String name; + + /// Name of artist that will display on second line + final String artistName; + + /// Type of song. It will display as mini symbol in card base on type of song + final String songType; + + /// Song's thumbnail url for display in card + final String thumbUrl; + + /// If this value is true, Video icon will display on bottom of card. + final bool hasPV; + + /// Callback when tap + final GestureTapCallback onTap; + + /// The width of card + static const double cardWidth = 130; + + /// The height of thumbnail image + static const double thumbnailHeight = 100; + + const SongCard( + {this.name, + this.artistName, + this.songType, + this.thumbUrl, + this.hasPV = false, + this.onTap}); + + /// Create SongCard widget by SongModel + SongCard.song(SongModel song, {Key key, this.onTap}) + : this.name = song.name, + this.artistName = song.artistString, + this.songType = song.songType, + this.thumbUrl = song.imageUrl, + this.hasPV = song.youtubePV != null, + super(key: key); + + @override + Widget build(BuildContext context) { + return Material( + child: InkWell( + onTap: this.onTap, + child: Container( + width: cardWidth, + margin: EdgeInsets.only(right: 8.0, left: 8.0), + child: Column( + children: [ + Container( + width: double.infinity, + height: thumbnailHeight, + color: Colors.black, + child: FittedBox( + fit: BoxFit.fitWidth, + child: CustomNetworkImage( + this.thumbUrl, + ), + ), + ), + SpaceDivider.micro(), + Container( + alignment: Alignment.centerLeft, + child: Text(this.name, + style: Theme.of(context).textTheme.bodyText1, + maxLines: 1, + overflow: TextOverflow.ellipsis)), + SpaceDivider.micro(), + Container( + alignment: Alignment.centerLeft, + child: Text(this.artistName, + style: Theme.of(context).textTheme.caption, + maxLines: 1, + overflow: TextOverflow.ellipsis)), + SpaceDivider.micro(), + Row( + children: [ + SongTypeSymbol( + songType: this.songType, + ), + (this.hasPV) ? Icon(Icons.local_movies) : Container() + ], + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/src/widgets/song_card_placeholder.dart b/lib/src/widgets/song_card_placeholder.dart new file mode 100644 index 00000000..f503eb0e --- /dev/null +++ b/lib/src/widgets/song_card_placeholder.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; + +/// A widget display placeholder for song +class SongCardPlaceholder extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.symmetric(horizontal: 8.0), + child: Shimmer.fromColors( + baseColor: Colors.grey.shade300, + highlightColor: Colors.grey.shade100, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 130, + height: 80, + color: Colors.white, + ), + SizedBox( + height: 6, + ), + Container( + width: 130, + height: 8, + color: Colors.white, + ), + SizedBox( + height: 6, + ), + Container( + width: 80, + height: 8, + color: Colors.white, + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/widgets/song_list_view.dart b/lib/src/widgets/song_list_view.dart new file mode 100644 index 00000000..1c57b82f --- /dev/null +++ b/lib/src/widgets/song_list_view.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display list of songs as vertical or horizontal +class SongListView extends StatelessWidget { + SongListView( + {Key key, + this.songs, + this.scrollDirection = Axis.vertical, + this.onSelect, + this.onReachLastItem, + this.emptyWidget, + this.displayPlaceholder = false}) + : super(key: key); + + /// List of songs to display. + final List songs; + + /// Default is vertical + final Axis scrollDirection; + + /// A callback function that called when user tap any item + final void Function(SongModel) onSelect; + + /// A callback function when user react to last item. Only worked on list view with vertical direction. + final Function onReachLastItem; + + /// Set to True for display list of placeholders. + final bool displayPlaceholder; + + /// A widget that display when songs is empty + final Widget emptyWidget; + + /// Height of list content widget if set as horizontal. + static const double _rowHeight = 180; + + /// Return item for display in vertical list + Widget _verticalItemBuilder(BuildContext context, int index) => SongTile.song( + this.songs[index], + onTap: () => this.onSelect(this.songs[index]), + ); + + /// Return item for display in horizontal list + Widget _horizontalItemBuilder(BuildContext context, int index) => + SongCard.song(this.songs[index], + onTap: () => this.onSelect(this.songs[index])); + + @override + Widget build(BuildContext context) { + if (this.songs.isEmpty && this.emptyWidget != null) { + return emptyWidget; + } + + if (this.scrollDirection == Axis.vertical) { + return InfiniteListView( + itemCount: this.songs.length, + itemBuilder: _verticalItemBuilder, + onReachLastItem: this.onReachLastItem, + ); + } + + if (this.displayPlaceholder) { + return SongPlaceholderListView(); + } + + return SizedBox( + height: _rowHeight, + child: ListView.builder( + itemCount: this.songs.length, + scrollDirection: Axis.horizontal, + itemBuilder: _horizontalItemBuilder)); + } +} diff --git a/lib/src/widgets/song_placeholder_list_view.dart b/lib/src/widgets/song_placeholder_list_view.dart new file mode 100644 index 00000000..84ff511e --- /dev/null +++ b/lib/src/widgets/song_placeholder_list_view.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/widgets.dart'; + +class SongPlaceholderListView extends StatelessWidget { + SongPlaceholderListView( + {Key key, this.size = 10, this.scrollDirection = Axis.horizontal}) + : assert(size != null), + super(key: key); + + /// Size of placeholders + final int size; + + /// Direction to display + final Axis scrollDirection; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 180, + child: ListView.builder( + itemCount: this.size, + scrollDirection: Axis.horizontal, + itemBuilder: (context, index) => SongCardPlaceholder()), + ); + } +} diff --git a/lib/src/widgets/song_tile.dart b/lib/src/widgets/song_tile.dart new file mode 100644 index 00000000..54997e5c --- /dev/null +++ b/lib/src/widgets/song_tile.dart @@ -0,0 +1,136 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/src/widgets/custom_network_image.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget for display song information in vertical list +class SongTile extends StatelessWidget { + /// Name of song that will display as title in card + final String name; + + /// Name of artist that will display on second line + final String artistName; + + /// Type of song. It will display as mini symbol in card base on type of song + final String songType; + + /// Song's thumbnail url for display in card + final String thumbUrl; + + /// If this value is true, Video icon will display on bottom of card. + final bool hasPV; + + /// Callback when tap + final GestureTapCallback onTap; + + /// A widget that display on leftmost side + final Widget leading; + + /// A string unique value give to hero widget. Use [imageUrl] instead if is Null. + final String heroTag; + + /// The height of widget + static const double height = 100; + + /// The width of thumbnail + static const double thumbnailWidth = 120; + + const SongTile( + {this.name, + this.artistName, + this.songType, + this.thumbUrl, + this.hasPV = false, + this.leading, + this.onTap, + this.heroTag}); + + /// Create SongTile widget by SongModel + SongTile.song(SongModel song, {this.onTap, this.leading, this.heroTag}) + : this.name = song.name, + this.artistName = song.artistString, + this.songType = song.songType, + this.thumbUrl = song.imageUrl, + this.hasPV = song.youtubePV != null; + + /// Create SongTile widget by EntryModel + SongTile.fromEntry(EntryModel entryModel, + {this.onTap, this.leading, this.heroTag}) + : this.name = entryModel.name, + this.artistName = entryModel.artistString, + this.songType = entryModel.songType, + this.thumbUrl = entryModel.imageUrl, + this.hasPV = false; + + Widget _leadingBuilder() { + if (this.leading == null) { + return Container(); + } + + return Padding( + padding: const EdgeInsets.all(16.0), + child: this.leading, + ); + } + + Widget _thumbnailBuilder() { + Widget thumbnail = (this.thumbUrl != null && this.thumbUrl.isNotEmpty) + ? CustomNetworkImage( + this.thumbUrl, + fit: BoxFit.cover, + ) + : Icon(Icons.music_note); + + return Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + width: thumbnailWidth, + child: thumbnail, + )); + } + + Widget _infoBuilder(BuildContext context) { + return Expanded( + child: Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text(this.name ?? '', overflow: TextOverflow.ellipsis), + Text(this.artistName ?? '', + overflow: TextOverflow.ellipsis, + maxLines: 1, + style: Theme.of(context).textTheme.caption), + SpaceDivider(8.0), + Row( + children: [ + SongTypeSymbol( + songType: this.songType, + ), + (this.hasPV) ? Icon(Icons.local_movies) : Container() + ], + ) + ], + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: this.onTap, + child: Container( + height: height, + child: Row( + children: [ + _leadingBuilder(), + _thumbnailBuilder(), + _infoBuilder(context), + ], + ), + ), + ); + } +} diff --git a/lib/widgets/song_type_symbol.dart b/lib/src/widgets/song_type_symbol.dart similarity index 81% rename from lib/widgets/song_type_symbol.dart rename to lib/src/widgets/song_type_symbol.dart index eac3440d..6dd1a9be 100644 --- a/lib/widgets/song_type_symbol.dart +++ b/lib/src/widgets/song_type_symbol.dart @@ -1,8 +1,12 @@ import 'package:flutter/material.dart'; +/// A widget that will return mini icon base on input song type class SongTypeSymbol extends StatelessWidget { + /// Song type string value final String songType; - final Map types = const { + + /// Song type map list + static const Map _types = const { 'Original': {'text': 'O', 'backgroundColor': Colors.lightBlue}, 'Remaster': {'text': 'R', 'backgroundColor': Colors.lightBlue}, 'Remix': {'text': 'R', 'backgroundColor': Colors.grey}, @@ -19,7 +23,7 @@ class SongTypeSymbol extends StatelessWidget { @override Widget build(BuildContext context) { Map st = - types[this.songType] ?? {'text': 'O', 'backgroundColor': Colors.grey}; + _types[this.songType] ?? {'text': 'O', 'backgroundColor': Colors.grey}; return Container( child: Text(st['text'], style: TextStyle(color: Colors.white)), diff --git a/lib/src/widgets/space_divider.dart b/lib/src/widgets/space_divider.dart new file mode 100644 index 00000000..91335deb --- /dev/null +++ b/lib/src/widgets/space_divider.dart @@ -0,0 +1,23 @@ +import 'package:flutter/cupertino.dart'; + +/// An utility widget for add blank space with full width and given height +class SpaceDivider extends StatelessWidget { + /// The height of space + final double height; + + const SpaceDivider(this.height) : assert(height != null); + + const SpaceDivider.micro({this.height = 4.0}); + + const SpaceDivider.small({this.height = 16.0}); + + const SpaceDivider.medium({this.height = 32.0}); + + @override + Widget build(BuildContext context) { + return SizedBox( + height: this.height, + width: double.infinity, + ); + } +} diff --git a/lib/src/widgets/tag.dart b/lib/src/widgets/tag.dart new file mode 100644 index 00000000..92c51fa4 --- /dev/null +++ b/lib/src/widgets/tag.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; + +/// Tag widget +class Tag extends StatelessWidget { + /// A widget to display prior to the chip's label. + final Widget avatar; + + /// A string value display in tag. Return empty container if label value is null or empty. + final String label; + + /// Called when the user taps the deleteIcon to delete the chip. + final VoidCallback onDeleted; + + /// Callback when pressed + final VoidCallback onPressed; + + const Tag({this.label, this.onPressed, this.onDeleted, this.avatar}); + + @override + Widget build(BuildContext context) { + if (label == null || label.isEmpty) { + return Container(); + } + + return Container( + margin: EdgeInsets.only(right: 4.0), + child: InputChip( + avatar: this.avatar, + deleteIcon: (this.onDeleted == null) ? null : Icon(Icons.cancel), + label: Text(this.label), + onPressed: this.onPressed, + onDeleted: this.onDeleted, + ), + ); + } +} diff --git a/lib/src/widgets/tag_category_list_view.dart b/lib/src/widgets/tag_category_list_view.dart new file mode 100644 index 00000000..d4667612 --- /dev/null +++ b/lib/src/widgets/tag_category_list_view.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/constants.dart'; +import 'package:get/get.dart'; + +/// A widget displays list of tag categories with fixed values from [constTagCategories] +class TagCategoryList extends StatelessWidget { + final Function(String) onSelectCategory; + + const TagCategoryList({Key key, this.onSelectCategory}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Padding( + padding: EdgeInsets.all(16.0), + child: Text( + 'category'.tr, + style: Theme.of(context).textTheme.headline6, + ), + ), + Expanded( + child: GridView.count( + primary: true, + crossAxisCount: 2, + childAspectRatio: 3, + padding: EdgeInsets.all(8.0), + crossAxisSpacing: 10, + mainAxisSpacing: 10, + children: List.generate(constTagCategories.length, (index) { + String name = constTagCategories[index]; + return RaisedButton( + color: Theme.of(context).cardColor, + onPressed: () => this.onSelectCategory(name), + child: Text(name), + ); + })), + ) + ], + ); + } +} diff --git a/lib/src/widgets/tag_group_view.dart b/lib/src/widgets/tag_group_view.dart new file mode 100644 index 00000000..8b8bc571 --- /dev/null +++ b/lib/src/widgets/tag_group_view.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; + +/// A widget to generate tags by list of tag model. +class TagGroupView extends StatefulWidget { + /// The list of tag models. + final List tags; + + /// Callback when pressed. + final Function(TagModel) onPressed; + + /// A horizontal margin size. Default is 16.0 + final double margin; + + /// Minimum tags to display. Set to zero to display all + final int minimumDisplayCount; + + const TagGroupView( + {this.tags, + this.onPressed, + this.margin = 16.0, + this.minimumDisplayCount = 5}) + : assert(tags != null); + + @override + _TagGroupViewState createState() => _TagGroupViewState(); +} + +class _TagGroupViewState extends State { + bool displayAll = false; + + void _onMorePressed() { + setState(() { + this.displayAll = true; + }); + } + + Widget _mapTagWidget(TagModel tagModel) { + return new Tag( + label: tagModel.name, + onPressed: () => (this.widget.onPressed != null) + ? this.widget.onPressed(tagModel) + : null); + } + + @override + Widget build(BuildContext context) { + List items = []; + + if (widget.minimumDisplayCount > 0 && + !displayAll && + widget.tags.length > widget.minimumDisplayCount) { + items = widget.tags + .take(this.widget.minimumDisplayCount) + .map(this._mapTagWidget) + .toList(); + items.add(InputChip( + label: Text('More (${this.widget.tags.length})'), + onPressed: this._onMorePressed, + )); + } else { + items = widget.tags.map(this._mapTagWidget).toList(); + } + + return Container( + margin: EdgeInsets.symmetric(horizontal: this.widget.margin), + child: Wrap( + children: items, + ), + ); + } +} diff --git a/lib/src/widgets/tag_input.dart b/lib/src/widgets/tag_input.dart new file mode 100644 index 00000000..19b27b3c --- /dev/null +++ b/lib/src/widgets/tag_input.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:vocadb_app/arguments.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/routes.dart'; + +/// An tag input widget for filter page +class TagInput extends StatelessWidget { + /// Label input. Default is Tags + final String label; + + /// Existing tag values + final List values; + + /// Called when the user taps the deleteIcon. + final Function(TagModel) onDeleted; + + /// Called when the user select tag. + final Function(TagModel) onSelect; + + const TagInput( + {this.label = 'Tags', this.values, this.onDeleted, this.onSelect}); + + Widget _tagBuilder(TagModel tagModel) { + return ListTile( + leading: Icon(Icons.label), + title: Text(tagModel.name), + trailing: (this.onDeleted == null) + ? null + : IconButton( + icon: Icon(Icons.close), + onPressed: () => this.onDeleted(tagModel), + ), + ); + } + + void _onBrowse() { + Get.toNamed(Routes.TAGS, arguments: TagSearchArgs(selectionMode: true)) + .then(_postBrowse); + } + + void _postBrowse(value) { + if (value != null) { + this.onSelect(value); + } + } + + @override + Widget build(BuildContext context) { + final List items = []; + + items.add(ListTile( + title: Text('tags'.tr), + )); + + if (this.values != null && this.values.isNotEmpty) { + items.addAll(this.values.map((e) => _tagBuilder(e)).toList()); + } + + items.add(ListTile( + onTap: this._onBrowse, + leading: Icon(Icons.add), + title: Text('add'.tr), + )); + + return Column( + children: items, + ); + } +} diff --git a/lib/src/widgets/tag_list_view.dart b/lib/src/widgets/tag_list_view.dart new file mode 100644 index 00000000..94d217dd --- /dev/null +++ b/lib/src/widgets/tag_list_view.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/src/widgets/infinite_list_view.dart'; + +class TagListView extends StatelessWidget { + final List tags; + + final Function(TagModel) onSelect; + + /// A callback function when user react to last item. Only worked on list view with vertical direction. + final Function onReachLastItem; + + const TagListView({this.tags, this.onSelect, this.onReachLastItem}); + + @override + Widget build(BuildContext context) { + return InfiniteListView( + onReachLastItem: this.onReachLastItem, + itemCount: tags.length, + itemBuilder: (context, index) => ListTile( + title: Text(tags[index].name), onTap: () => onSelect(tags[index]))); + } +} diff --git a/lib/src/widgets/text_info_section.dart b/lib/src/widgets/text_info_section.dart new file mode 100644 index 00000000..83e9d03f --- /dev/null +++ b/lib/src/widgets/text_info_section.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +/// A widget display text info with title. Used in entry description +class TextInfoSection extends StatelessWidget { + final String title; + + /// A string value to display. Return empty container if [text] value is null or empty. + final String text; + + final double horizontalPadding; + + final Widget divider; + + const TextInfoSection( + {Key key, + this.title, + this.text, + this.horizontalPadding = 16.0, + this.divider}) + : super(key: key); + + @override + Widget build(BuildContext context) { + if (this.text == null || this.text.isEmpty) { + return Container(); + } + + return Padding( + padding: EdgeInsets.symmetric(horizontal: this.horizontalPadding), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: Theme.of(context).textTheme.caption, + ), + Text(text), + divider ?? Container() + ], + ), + ); + } +} diff --git a/lib/src/widgets/track_list_view.dart b/lib/src/widgets/track_list_view.dart new file mode 100644 index 00000000..2ba43484 --- /dev/null +++ b/lib/src/widgets/track_list_view.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; + +/// A widget display list of tracks +class TrackListView extends StatelessWidget { + final List tracks; + + final Function(TrackModel) onSelect; + + const TrackListView({this.tracks, this.onSelect}); + + Widget _mapTrackModel(TrackModel t) { + if (t.song == null) { + return TrackTile.fromTrackModel(t); + } + + return TrackTile.fromTrackModel( + t, + onTap: () => this.onSelect(t), + ); + } + + _buildHasData(BuildContext context, List tracks) { + List widgets = List(); + + Map> tracksByDisc = TrackList(tracks).groupByDisc; + + if (tracksByDisc.length > 1) { + tracksByDisc.forEach((key, value) { + widgets.add(ListTile( + title: Text('disc'.tr + ' $key'), + )); + + widgets.addAll(value.map(_mapTrackModel).toList()); + }); + } else { + widgets.addAll(tracks.map(_mapTrackModel).toList()); + } + return Container( + child: Column( + children: widgets, + ), + ); + } + + _buildDefault() { + return Container(); + } + + @override + Widget build(BuildContext context) { + return (this.tracks != null) + ? _buildHasData(context, tracks) + : _buildDefault(); + } +} diff --git a/lib/src/widgets/track_tile.dart b/lib/src/widgets/track_tile.dart new file mode 100644 index 00000000..9c5e76b9 --- /dev/null +++ b/lib/src/widgets/track_tile.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; + +class TrackTile extends StatelessWidget { + final int trackNumber; + + final String name; + + final String artistName; + + final GestureTapCallback onTap; + + const TrackTile( + {Key key, this.trackNumber, this.name, this.artistName, this.onTap}) + : super(key: key); + + TrackTile.fromTrackModel(TrackModel trackModel, {this.onTap}) + : this.trackNumber = trackModel.trackNumber, + this.name = trackModel.name, + this.artistName = trackModel.song?.artistString; + + @override + Widget build(BuildContext context) { + return ListTile( + leading: Text(trackNumber.toString()), + enabled: (this.onTap != null), + onTap: this.onTap, + title: Text(this.name, maxLines: 1, overflow: TextOverflow.ellipsis), + subtitle: Text(this.artistName ?? ' ', + maxLines: 1, overflow: TextOverflow.ellipsis), + ); + } +} diff --git a/lib/src/widgets/web_link_group_list.dart b/lib/src/widgets/web_link_group_list.dart new file mode 100644 index 00000000..979a9a99 --- /dev/null +++ b/lib/src/widgets/web_link_group_list.dart @@ -0,0 +1,54 @@ +import 'package:flutter/material.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/widgets.dart'; +import 'package:get/get.dart'; + +/// A widget display list of pvs grouping by category +class WebLinkGroupList extends StatelessWidget { + final List webLinks; + + final Function(WebLinkModel) onTap; + + const WebLinkGroupList({@required this.webLinks, this.onTap}); + + List _generateItems() { + List items = []; + + WebLinkList webLinkList = WebLinkList(webLinks); + + List officialLinks = webLinkList.officialLinks; + List unofficialLinks = webLinkList.unofficialLinks; + + if (officialLinks.isNotEmpty) { + items.add(ListTile( + title: Text('officialLinks'.tr), + )); + items.addAll(officialLinks.map(_mapWebLinkTile)); + } + + if (unofficialLinks.isNotEmpty) { + items.add(ListTile( + title: Text('unofficialLinks'.tr), + )); + items.addAll(unofficialLinks.map(_mapWebLinkTile)); + } + + return items; + } + + WebLinkTile _mapWebLinkTile(WebLinkModel model) { + return WebLinkTile( + title: model.description, + url: model.url, + ); + } + + @override + Widget build(BuildContext context) { + if (this.webLinks == null || this.webLinks.isEmpty) return Container(); + + return Column( + children: _generateItems(), + ); + } +} diff --git a/lib/widgets/web_link.dart b/lib/src/widgets/web_link_tile.dart similarity index 50% rename from lib/widgets/web_link.dart rename to lib/src/widgets/web_link_tile.dart index aead2f73..a4ecaec7 100644 --- a/lib/widgets/web_link.dart +++ b/lib/src/widgets/web_link_tile.dart @@ -1,26 +1,27 @@ import 'package:flutter/material.dart'; -import 'package:vocadb/models/web_link_model.dart'; -import 'package:vocadb/utils/icon_site.dart'; -import 'package:vocadb/widgets/site_tile.dart'; +import 'package:vocadb_app/utils.dart'; +import 'package:vocadb_app/widgets.dart'; +/// A widget for display web link and redirect to the given url class WebLinkTile extends StatelessWidget { - final WebLinkModel webLink; + final String title; - const WebLinkTile( - this.webLink, { - Key key, - }) : super(key: key); + final String url; + + final double iconSize; + + const WebLinkTile({this.title, this.url, this.iconSize = 32}); Widget buildLeading() { - IconSite ic = IconSiteList.findIconAsset(webLink.description); + IconSite ic = IconSiteList.findIconAsset(this.title); return (ic == null) ? Icon(Icons.web) : buildImageIcon(ic.assetName); } Widget buildImageIcon(String assetName) { return SizedBox( - width: 32, - height: 32, + width: this.iconSize, + height: this.iconSize, child: FittedBox( fit: BoxFit.contain, child: Image.asset(assetName), @@ -31,8 +32,8 @@ class WebLinkTile extends StatelessWidget { @override Widget build(BuildContext context) { return SiteTile( - title: webLink.description, - url: webLink.url, + title: this.title, + url: this.url, ); } } diff --git a/lib/themes.dart b/lib/themes.dart new file mode 100644 index 00000000..48b5f13b --- /dev/null +++ b/lib/themes.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +/// Themes +class Themes { + static final dark = ThemeData( + brightness: Brightness.dark, + primarySwatch: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ); + + static final light = ThemeData( + brightness: Brightness.light, + primarySwatch: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ); + + static void changeTheme(String value) { + Get.changeTheme((value == 'light') ? light : dark); + } +} diff --git a/lib/utils.dart b/lib/utils.dart new file mode 100644 index 00000000..a807cfe4 --- /dev/null +++ b/lib/utils.dart @@ -0,0 +1,10 @@ +/// Utility classes + +library utils; + +export 'src/utils/app_directory.dart'; +export 'src/utils/date_time_utils.dart'; +export 'src/utils/error_utils.dart'; +export 'src/utils/icon_site.dart'; +export 'src/utils/json_utils.dart'; +export 'src/utils/url_utils.dart'; diff --git a/lib/utils/analytic_constant.dart b/lib/utils/analytic_constant.dart deleted file mode 100644 index 95001593..00000000 --- a/lib/utils/analytic_constant.dart +++ /dev/null @@ -1,7 +0,0 @@ -class AnalyticContentType { - static const String song = 'song'; - static const String artist = 'artist'; - static const String album = 'album'; - static const String releaseEvent = 'release_event'; - static const String tag = 'tag'; -} diff --git a/lib/utils/date_utils.dart b/lib/utils/date_utils.dart deleted file mode 100644 index b228201b..00000000 --- a/lib/utils/date_utils.dart +++ /dev/null @@ -1,5 +0,0 @@ -class DateUtils { - static String toUtcDateString(DateTime dateTime) { - return '${dateTime.year}-${dateTime.month}-${dateTime.day}'; - } -} diff --git a/lib/utils/json_utils.dart b/lib/utils/json_utils.dart deleted file mode 100644 index f01549d9..00000000 --- a/lib/utils/json_utils.dart +++ /dev/null @@ -1,5 +0,0 @@ -class JSONUtils { - static List mapJsonArray(List jsonArray, Function map) { - return (jsonArray == null) ? [] : jsonArray.map((v) => map(v) as T).toList(); - } -} \ No newline at end of file diff --git a/lib/widgets.dart b/lib/widgets.dart new file mode 100644 index 00000000..19c5db91 --- /dev/null +++ b/lib/widgets.dart @@ -0,0 +1,54 @@ +/// Collection of widgets +library widgets; + +export 'src/widgets/album_card.dart'; +export 'src/widgets/album_card_placeholder.dart'; +export 'src/widgets/album_list_view.dart'; +export 'src/widgets/album_placeholder_list_view.dart'; +export 'src/widgets/album_tile.dart'; +export 'src/widgets/artist_column_view.dart'; +export 'src/widgets/artist_input.dart'; +export 'src/widgets/artist_link_list_view.dart'; +export 'src/widgets/artist_list_view.dart'; +export 'src/widgets/artist_tile.dart'; +export 'src/widgets/center_loading.dart'; +export 'src/widgets/center_text.dart'; +export 'src/widgets/artist_group_by_role_list.dart'; +export 'src/widgets/custom_network_image.dart'; +export 'src/widgets/date_range_input.dart'; +export 'src/widgets/entry_list_view.dart'; +export 'src/widgets/expandable_content.dart'; +export 'src/widgets/infinite_list_view.dart'; +export 'src/widgets/info_message_view.dart'; +export 'src/widgets/info_section.dart'; +export 'src/widgets/lyric_content.dart'; +export 'src/widgets/page_builder.dart'; +export 'src/widgets/pv_group_list.dart'; +export 'src/widgets/pv_tile.dart'; +export 'src/widgets/radio_button_group.dart'; +export 'src/widgets/release_event_column_view.dart'; +export 'src/widgets/release_event_list_view.dart'; +export 'src/widgets/release_event_series_tile.dart'; +export 'src/widgets/release_event_tile.dart'; +export 'src/widgets/section.dart'; +export 'src/widgets/simple_dropdown_input.dart'; +export 'src/widgets/site_tile.dart'; +export 'src/widgets/song_card_placeholder.dart'; +export 'src/widgets/song_card.dart'; +export 'src/widgets/song_list_view.dart'; +export 'src/widgets/song_placeholder_list_view.dart'; +export 'src/widgets/song_tile.dart'; +export 'src/widgets/song_type_symbol.dart'; +export 'src/widgets/space_divider.dart'; +export 'src/widgets/tag_category_list_view.dart'; +export 'src/widgets/tag.dart'; +export 'src/widgets/text_info_section.dart'; +export 'src/widgets/track_list_view.dart'; +export 'src/widgets/track_tile.dart'; +export 'src/widgets/tag_input.dart'; +export 'src/widgets/tag_category_list_view.dart'; +export 'src/widgets/tag_group_view.dart'; +export 'src/widgets/tag_input.dart'; +export 'src/widgets/tag_list_view.dart'; +export 'src/widgets/web_link_group_list.dart'; +export 'src/widgets/web_link_tile.dart'; diff --git a/lib/widgets/CustomYoutubePlayer.dart b/lib/widgets/CustomYoutubePlayer.dart deleted file mode 100644 index 0502f979..00000000 --- a/lib/widgets/CustomYoutubePlayer.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:youtube_player_flutter/youtube_player_flutter.dart'; - -class CustomYoutubePlayer extends StatefulWidget { - final String url; - - const CustomYoutubePlayer({Key key, this.url}) : super(key: key); - - @override - _CustomYoutubePlayerState createState() => _CustomYoutubePlayerState(); -} - -class _CustomYoutubePlayerState extends State { - YoutubePlayerController _controller; - - @override - void initState() { - super.initState(); - _controller = YoutubePlayerController( - initialVideoId: YoutubePlayer.convertUrlToId(widget.url), - flags: YoutubePlayerFlags( - autoPlay: false, - ), - ); - } - - @override - Widget build(BuildContext context) { - return YoutubePlayer( - controller: _controller, - ); - } - - @override - void dispose() { - // TODO: implement dispose - _controller?.dispose(); - super.dispose(); - } -} diff --git a/lib/widgets/addition_info.dart b/lib/widgets/addition_info.dart deleted file mode 100644 index c2f2a44e..00000000 --- a/lib/widgets/addition_info.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -class AdditionInfo extends StatelessWidget { - - final String title; - - final String value; - - const AdditionInfo({Key key, this.title, this.value}) : super(key :key); - - @override - Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(this.title, style: Theme.of(context).textTheme.caption), - Text(this.value, style: Theme.of(context).textTheme.body1), - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/widgets/album_card.dart b/lib/widgets/album_card.dart deleted file mode 100644 index 096568f4..00000000 --- a/lib/widgets/album_card.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:shimmer/shimmer.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/pages/album_detail/album_detail_page.dart'; - -class AlbumCard extends StatelessWidget { - final int id; - final String name; - final String artist; - final String thumbUrl; - final String tag; - - const AlbumCard( - {Key key, this.id, this.name, this.artist, this.thumbUrl, this.tag}) - : super(key: key); - - AlbumCard.album(AlbumModel album, {this.tag}) - : id = album.id, - name = album.name, - artist = album.artistString, - thumbUrl = album.imageUrl; - - void navigateToDetail(BuildContext context) { - AlbumDetailScreen.navigate(context, id, - name: this.name, thumbUrl: this.thumbUrl, tag: this.tag); - } - - @override - Widget build(BuildContext context) { - return Material( - child: InkWell( - onTap: () => navigateToDetail(context), - child: Container( - width: 130, - margin: EdgeInsets.only(right: 8.0, left: 8.0), - child: Column( - children: [ - Container( - width: double.infinity, - height: 130, - color: Colors.black, - child: FittedBox( - fit: BoxFit.fitWidth, - child: Hero( - tag: tag, - child: CachedNetworkImage( - imageUrl: this.thumbUrl, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => Placeholder(), - ))), - ), - Container( - height: 4, - ), - Container( - alignment: Alignment.centerLeft, - child: Text(this.name, - style: Theme.of(context).textTheme.body1, - maxLines: 1, - overflow: TextOverflow.ellipsis)), - Container( - height: 4, - ), - Container( - alignment: Alignment.centerLeft, - child: Text(this.artist, - style: Theme.of(context).textTheme.caption, - maxLines: 1, - overflow: TextOverflow.ellipsis)), - ], - ), - ), - ), - ); - } -} - -class AlbumCardPlaceholder extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Container( - margin: EdgeInsets.symmetric(horizontal: 8.0), - child: Shimmer.fromColors( - baseColor: Colors.grey.shade300, - highlightColor: Colors.grey.shade100, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 130, - height: 120, - color: Colors.white, - ), - SizedBox( - height: 6, - ), - Container( - width: 130, - height: 8, - color: Colors.white, - ), - SizedBox( - height: 6, - ), - Container( - width: 80, - height: 8, - color: Colors.white, - ), - ], - ), - ), - ); - } -} diff --git a/lib/widgets/album_list_section.dart b/lib/widgets/album_list_section.dart deleted file mode 100644 index 6fdf140e..00000000 --- a/lib/widgets/album_list_section.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/album_card.dart'; -import 'package:vocadb/widgets/album_tile.dart'; -import 'package:vocadb/widgets/section.dart'; - -class AlbumListSection extends StatelessWidget { - final String title; - final List albums; - final bool horizontal; - final String prefixTag; - final Widget extraMenus; - - const AlbumListSection( - {Key key, - this.albums, - this.horizontal = false, - this.prefixTag, - this.title, - this.extraMenus}) - : super(key: key); - - Widget mapWidget(AlbumModel album) { - String tag = '${prefixTag}_song_${album.id}'; - return (horizontal) - ? AlbumCard.album(album, tag: tag) - : AlbumTile.fromEntry(album, tag: tag); - } - - @override - Widget build(BuildContext context) { - return Section( - title: title, - horizontal: true, - extraMenus: extraMenus, - children: albums.map(mapWidget).toList()); - } -} diff --git a/lib/widgets/album_section.dart b/lib/widgets/album_section.dart deleted file mode 100644 index 05579983..00000000 --- a/lib/widgets/album_section.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/widgets/album_card.dart'; -import 'package:vocadb/widgets/album_tile.dart'; -import 'package:vocadb/widgets/display_all.dart'; -import 'package:vocadb/widgets/section.dart'; - -class AlbumSection extends StatelessWidget { - final List albums; - final String tagPrefix; - - const AlbumSection({Key key, this.albums, this.tagPrefix}) : super(key: key); - - @override - Widget build(BuildContext context) { - if (albums.length == 0) { - return Container(); - } - - if (albums.length > 10) { - return Column( - children: [ - Section( - title: FlutterI18n.translate(context, 'label.albums'), - horizontal: true, - children: albums - .take(10) - .map( - (a) => AlbumCard.album(a, tag: '${this.tagPrefix}_${a.id}')) - .toList(), - extraMenus: PopupMenuButton( - icon: Icon(Icons.more_horiz), - onSelected: (String selectedValue) { - DisplayAll.navigate( - context, - 'More albums', - albums - .map((a) => AlbumTile.fromEntry(a, - tag: '${this.tagPrefix}_${a.id}')) - .toList()); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - ), - Divider(), - ], - ); - } - - return Column( - children: [ - Section( - title: FlutterI18n.translate(context, 'label.albums'), - horizontal: true, - children: albums - .map((a) => AlbumCard.album(a, tag: '${this.tagPrefix}_${a.id}')) - .toList(), - ), - Divider(), - ], - ); - } -} diff --git a/lib/widgets/album_tile.dart b/lib/widgets/album_tile.dart deleted file mode 100644 index 47c411c1..00000000 --- a/lib/widgets/album_tile.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/pages/album_detail/album_detail_page.dart'; - -class AlbumTile extends StatelessWidget { - final int id; - - final String imageUrl; - - final String name; - - final String artist; - - final String tag; - - const AlbumTile( - {Key key, this.id, this.name, this.artist, this.imageUrl, this.tag}) - : super(key: key); - - AlbumTile.fromEntry(EntryModel entry, {this.tag}) - : this.id = entry.id, - this.imageUrl = entry.imageUrl, - this.name = entry.name, - this.artist = entry.artistString; - - void navigateToDetail(BuildContext context) { - AlbumDetailScreen.navigate(context, id, - name: this.name, thumbUrl: this.imageUrl, tag: this.tag); - } - - @override - Widget build(BuildContext context) { - return ListTile( - onTap: () => navigateToDetail(context), - leading: SizedBox( - width: 50, - height: 50, - child: Hero( - tag: tag, - child: Image.network( - this.imageUrl, - fit: BoxFit.fill, - )), - ), - title: Text(this.name, overflow: TextOverflow.ellipsis), - subtitle: Text(this.artist, overflow: TextOverflow.ellipsis), - ); - } -} diff --git a/lib/widgets/album_track.dart b/lib/widgets/album_track.dart deleted file mode 100644 index 6fd8a18c..00000000 --- a/lib/widgets/album_track.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/track_model.dart'; -import 'package:vocadb/pages/song_detail/song_detail_page.dart'; - -class AlbumTrack extends StatelessWidget { - final TrackModel track; - - const AlbumTrack(this.track, {Key key}) : super(key: key); - - void navigateToSongDetail(BuildContext context) { - SongDetailScreen.navigate(context, track.song.id, name: track.name); - } - - @override - Widget build(BuildContext context) { - return ListTile( - leading: Text(track.trackNumber.toString()), - enabled: (track.song != null), - onTap: () => navigateToSongDetail(context), - title: Text(track.name, maxLines: 1, overflow: TextOverflow.ellipsis), - subtitle: Text(track.song?.artistString ?? ' ', - maxLines: 1, overflow: TextOverflow.ellipsis), - ); - } -} diff --git a/lib/widgets/artist_section.dart b/lib/widgets/artist_section.dart deleted file mode 100644 index 9f8577cc..00000000 --- a/lib/widgets/artist_section.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/artist_album_model.dart'; -import 'package:vocadb/models/artist_event_model.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/artist_song_model.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class ArtistSection extends StatelessWidget { - final String title; - final List artists; - final String prefixTag; - - const ArtistSection({Key key, this.title, this.artists, this.prefixTag}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (artists.length == 0) return Container(); - - return Column( - children: [ - Section( - title: title, - children: artists - .map((a) => ArtistTile.fromEntry( - a, - tag: '${prefixTag}_artist_${a.id}', - )) - .toList(), - ), - SpaceDivider(), - ], - ); - } -} - -class ArtistForSongSection extends StatelessWidget { - final String title; - final List artists; - final String prefixTag; - - const ArtistForSongSection( - {Key key, this.title, this.artists, this.prefixTag}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (artists.length == 0) return Container(); - - return Column( - children: [ - Section( - title: title, - children: artists - .map((a) => - ArtistTile.artistSong(a, tag: '${prefixTag}_${a.artistId}')) - .toList(), - ), - SpaceDivider(), - ], - ); - } -} - -class ArtistForAlbumSection extends StatelessWidget { - final String title; - final List artists; - final String prefixTag; - - const ArtistForAlbumSection( - {Key key, this.title, this.artists, this.prefixTag}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (artists.length == 0) return Container(); - - return Column( - children: [ - Section( - title: title, - children: artists - .map((a) => ArtistTile.artistAlbum( - a, - tag: '${prefixTag}_${a.artistId}', - showRole: (a.effectiveRoles != 'Default'), - )) - .toList(), - ), - SpaceDivider(), - ], - ); - } -} - -class ArtistForEventSection extends StatelessWidget { - final String title; - final List artists; - final String prefixTag; - - const ArtistForEventSection( - {Key key, this.title, this.artists, this.prefixTag}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (artists.length == 0) return Container(); - - return Column( - children: [ - Section( - title: title, - children: artists - .map((a) => ArtistTile.artistEvent( - a, - tag: '${prefixTag}_${a.artistId}', - showRole: (a.effectiveRoles != 'Default'), - )) - .toList(), - ), - SpaceDivider(), - ], - ); - } -} diff --git a/lib/widgets/artist_tile.dart b/lib/widgets/artist_tile.dart deleted file mode 100644 index 33f9d8a6..00000000 --- a/lib/widgets/artist_tile.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:vocadb/models/artist_album_model.dart'; -import 'package:vocadb/models/artist_event_model.dart'; -import 'package:vocadb/models/artist_song_model.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/pages/artist_detail/artist_detail_page.dart'; - -class ArtistTile extends StatelessWidget { - final int id; - - final String imageUrl; - - final String title; - - final String subtitle; - - final String tag; - - const ArtistTile( - {Key key, this.id, this.title, this.subtitle, this.imageUrl, this.tag}) - : super(key: key); - - ArtistTile.artistSong(ArtistSongModel artistSong, - {bool showRole = false, this.tag}) - : id = artistSong.artistId, - title = artistSong.artistName, - subtitle = (showRole) ? artistSong.artistRole : null, - imageUrl = artistSong.artistImageUrl; - - ArtistTile.artistAlbum(ArtistAlbumModel artistAlbum, - {bool showRole = false, this.tag}) - : id = artistAlbum.artistId, - title = artistAlbum.artistName, - subtitle = (showRole) ? artistAlbum.artistRole : null, - imageUrl = artistAlbum.artistImageUrl; - - ArtistTile.artistEvent(ArtistEventModel artistAlbum, - {bool showRole = false, this.tag}) - : id = artistAlbum.artistId, - title = artistAlbum.artistName, - subtitle = (showRole) ? artistAlbum.artistRole : null, - imageUrl = artistAlbum.artistImageUrl; - - ArtistTile.fromEntry(EntryModel entry, {this.tag}) - : this.id = entry.id, - this.imageUrl = entry.imageUrl, - this.title = entry.name, - this.subtitle = entry.artistString; - - void navigateToDetail(BuildContext context) { - ArtistDetailScreen.navigate(context, id, - name: this.title, thumbUrl: this.imageUrl, tag: this.tag); - } - - Widget buildLeading() { - final Widget imageChild = - (this.id == null || this.id == 0 || this.imageUrl == null) - ? Icon(Icons.person) - : Hero( - tag: this.tag, - child: CachedNetworkImage( - imageUrl: this.imageUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - )); - - return SizedBox( - width: 50, - height: 50, - child: ClipOval( - child: Container( - color: Colors.white, - child: imageChild, - )), - ); - } - - Widget buildSingleLine(BuildContext context) { - return ListTile( - enabled: (this.id != null && this.id != 0), - onTap: () => navigateToDetail(context), - leading: buildLeading(), - title: Text(this.title, overflow: TextOverflow.ellipsis), - ); - } - - Widget buildTwoLine(BuildContext context) { - return ListTile( - enabled: (this.id != null && this.id != 0), - onTap: () => navigateToDetail(context), - leading: buildLeading(), - title: Text(this.title, overflow: TextOverflow.ellipsis), - subtitle: Text(this.subtitle, overflow: TextOverflow.ellipsis), - ); - } - - @override - Widget build(BuildContext context) { - return (this.subtitle == null) - ? buildSingleLine(context) - : buildTwoLine(context); - } -} diff --git a/lib/widgets/center_content.dart b/lib/widgets/center_content.dart deleted file mode 100644 index af8ca994..00000000 --- a/lib/widgets/center_content.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/result.dart'; - -class CenterResult extends StatelessWidget { - final Result result; - - const CenterResult({Key key, this.result}) : super(key: key); - - CenterResult.error({Key key, String title = 'Error!', String message}) - : result = Result.error(title, subtitle: message), - super(key: key); - - @override - Widget build(BuildContext context) { - return result; - } -} - -class CenterLoading extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Center( - child: CircularProgressIndicator(), - ); - } -} diff --git a/lib/widgets/display_all.dart b/lib/widgets/display_all.dart deleted file mode 100644 index 28fda48f..00000000 --- a/lib/widgets/display_all.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class DisplayAll extends StatelessWidget { - final String title; - final List children; - - const DisplayAll({Key key, this.title, this.children}) : super(key: key); - - static navigate(BuildContext context, String title, List children) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - DisplayAll(title: title, children: children))); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text('All')), - body: ListView.builder( - itemCount: children.length, - itemBuilder: (context, index) { - return children[index]; - }, - ), - ); - } -} diff --git a/lib/widgets/entry_tile.dart b/lib/widgets/entry_tile.dart deleted file mode 100644 index 4f0b6397..00000000 --- a/lib/widgets/entry_tile.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/widgets/event_tile.dart'; -import 'package:vocadb/widgets/song_tile.dart'; -import 'package:vocadb/widgets/album_tile.dart'; -import 'package:vocadb/widgets/artist_tile.dart'; - -class EntryTile extends StatelessWidget { - final EntryModel entry; - - const EntryTile(this.entry); - - @override - Widget build(BuildContext context) { - String tag = 'entry_${entry.entryType.toString()}_${entry.id}'; - - switch (entry.entryType) { - case EntryType.Song: - return SongTile.fromEntry(entry, tag: tag); - case EntryType.Album: - return AlbumTile.fromEntry(entry, tag: tag); - case EntryType.Artist: - return ArtistTile.fromEntry(entry, tag: tag); - case EntryType.ReleaseEvent: - return EventTile.fromEntry(entry, tag: tag); - - default: - return ListTile( - leading: SizedBox( - width: 50, - height: 50, - child: Image.network( - entry.mainPicture.urlThumb, - fit: BoxFit.fill, - ), - ), - title: Text(entry.name, overflow: TextOverflow.ellipsis), - ); - } - } -} diff --git a/lib/widgets/event_tile.dart b/lib/widgets/event_tile.dart deleted file mode 100644 index 9a15788f..00000000 --- a/lib/widgets/event_tile.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/pages/event_detail/event_detail_page.dart'; - -class EventTile extends StatelessWidget { - final int id; - - final String imageUrl; - - final String name; - - final String category; - - final String date; - - final String tag; - - final bool showCategory; - - final bool showImage; - - const EventTile( - {Key key, - this.id, - this.name, - this.date, - this.category, - this.imageUrl, - this.tag, - this.showCategory = true, - this.showImage = true}) - : super(key: key); - - EventTile.fromEntry(EntryModel entry, {this.tag}) - : this.id = entry.id, - this.imageUrl = entry.imageUrl, - this.name = entry.name, - this.date = entry.activityDateFormatted, - this.category = entry.eventCategory, - this.showCategory = true, - this.showImage = true; - - EventTile.fromReleaseEvent(ReleaseEventModel releaseEvent, {this.tag, this.showCategory = true, this.showImage = true}) - : this.id = releaseEvent.id, - this.imageUrl = releaseEvent.imageUrl, - this.name = releaseEvent.name, - this.date = releaseEvent.dateFormatted, - this.category = releaseEvent.displayCategory; - - void navigateToDetail(BuildContext context) { - ReleaseEventDetailScreen.navigate(context, id, - name: this.name, thumbUrl: this.imageUrl, tag: this.tag); - } - - @override - Widget build(BuildContext context) { - String categoryName = - FlutterI18n.translate(context, 'eventCategory.$category'); - - String subtitle = (date == null) ? categoryName : '$categoryName • $date'; - - if(!this.showCategory) { - subtitle = date; - } - - if(!this.showImage) { - return ListTile( - onTap: () => navigateToDetail(context), - title: Text(this.name, overflow: TextOverflow.ellipsis), - subtitle: Text(subtitle), - ); - } - - return ListTile( - onTap: () => navigateToDetail(context), - leading: SizedBox( - width: 50, - height: 50, - child: Hero( - tag: tag, - child: CachedNetworkImage( - imageUrl: this.imageUrl, - fit: BoxFit.cover, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - )), - ), - title: Text(this.name, overflow: TextOverflow.ellipsis), - subtitle: Text(subtitle), - ); - } -} diff --git a/lib/widgets/info_section.dart b/lib/widgets/info_section.dart deleted file mode 100644 index d49c97df..00000000 --- a/lib/widgets/info_section.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class InfoSection extends StatelessWidget { - final String title; - final Widget child; - final bool visible; - - const InfoSection({Key key, this.title, this.child, this.visible = false}) - : super(key: key); - - @override - Widget build(BuildContext context) { - if (!this.visible) { - return Container(); - } - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: Theme.of(context).textTheme.caption, - ), - child, - SpaceDivider() - ], - ); - } -} diff --git a/lib/widgets/like_button.dart b/lib/widgets/like_button.dart deleted file mode 100644 index 0de1de11..00000000 --- a/lib/widgets/like_button.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; - -class LikeButton extends StatelessWidget { - final Function onPressed; - final bool isLiked; - - const LikeButton({Key key, this.onPressed, this.isLiked = false}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return FlatButton( - onPressed: onPressed, - textColor: (isLiked) - ? Theme.of(context).accentColor - : Theme.of(context).iconTheme.color, - child: Column( - children: [ - Icon( - Icons.favorite, - ), - Text( - (isLiked) - ? FlutterI18n.translate(context, 'label.liked') - : FlutterI18n.translate(context, 'label.like'), - style: TextStyle(fontSize: 12)) - ], - )); - } -} diff --git a/lib/widgets/result.dart b/lib/widgets/result.dart deleted file mode 100644 index 9b5ca7fb..00000000 --- a/lib/widgets/result.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class Result extends StatelessWidget { - final Widget _icon; - final String _title; - final String _subtitle; - - Result(Widget icon, String title, {String subtitle}) - : this._icon = icon, - this._title = title, - this._subtitle = subtitle; - - Result.error(String title, {String subtitle}) - : this._icon = Icon(Icons.error, size: 48), - this._title = title, - this._subtitle = subtitle; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(24.0), - child: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _icon, - SpaceDivider(), - Text(_title, style: Theme.of(context).textTheme.title), - SpaceDivider(), - (_subtitle != null) - ? Text(_subtitle, - style: Theme.of(context).textTheme.caption, - textAlign: TextAlign.center) - : Container() - ], - ), - ), - ); - } -} diff --git a/lib/widgets/section.dart b/lib/widgets/section.dart deleted file mode 100644 index 485550b4..00000000 --- a/lib/widgets/section.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class Section extends StatelessWidget { - final String title; - - final List children; - - final bool horizontal; - - final EdgeInsets padding; - - final Widget extraMenus; - - Section( - {Key key, - this.title, - this.children, - this.extraMenus, - this.horizontal = false, - this.padding = EdgeInsets.zero}) - : super(key: key); - - Widget buildVerticalItems(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Text( - this.title, - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - SpaceDivider(), - Container( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: children, - )) - ], - ); - } - - Widget buildHorizontalItems(BuildContext context) { - return Container( - child: Column( - children: [ - Padding( - padding: EdgeInsets.only(left: 8.0), - child: Align( - alignment: Alignment.centerLeft, - child: SizedBox( - height: 48, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - this.title, - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - this.extraMenus ?? Container() - ], - ), - ), - ), - ), - Container( - padding: EdgeInsets.only(bottom: 16.0), - child: SizedBox( - // Horizontal ListView - height: 180, - child: ListView.builder( - itemCount: this.children.length, - scrollDirection: Axis.horizontal, - itemBuilder: (context, index) { - return this.children[index]; - }, - ), - ), - ), - ], - )); - } - - @override - Widget build(BuildContext context) { - if (this.children.length == 0) return Container(); - - return (horizontal) - ? buildHorizontalItems(context) - : buildVerticalItems(context); - } -} diff --git a/lib/widgets/section_divider.dart b/lib/widgets/section_divider.dart deleted file mode 100644 index 0e8c2263..00000000 --- a/lib/widgets/section_divider.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/material.dart'; - -class SectionDivider extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Divider( - height: 3, - ); - } -} diff --git a/lib/widgets/song_card.dart b/lib/widgets/song_card.dart deleted file mode 100644 index 240d29da..00000000 --- a/lib/widgets/song_card.dart +++ /dev/null @@ -1,124 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:shimmer/shimmer.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/song_detail/song_detail_page.dart'; -import 'package:vocadb/widgets/song_type_symbol.dart'; - -class SongCard extends StatelessWidget { - final SongModel song; - final String tag; - - SongCard.song(this.song, {this.tag}); - - void navigateToSongDetail(BuildContext context) { - SongDetailScreen.navigate(context, song.id, - name: song.name, thumbUrl: song.thumbUrl, tag: tag); - } - - @override - Widget build(BuildContext context) { - return Material( - child: InkWell( - onTap: () => navigateToSongDetail(context), - child: Container( - width: 130, - margin: EdgeInsets.only(right: 8.0, left: 8.0), - child: Column( - children: [ - Container( - width: double.infinity, - height: 100, - color: Colors.black, - child: FittedBox( - fit: BoxFit.fitWidth, - child: Hero( - tag: tag, - child: (song.thumbUrl == null) - ? Placeholder() - : CachedNetworkImage( - imageUrl: song.thumbUrl, - placeholder: (context, url) => - Container(color: Colors.grey), - errorWidget: (context, url, error) => - new Icon(Icons.error), - )), - ), - ), - Container( - height: 4, - ), - Container( - alignment: Alignment.centerLeft, - child: Text(song.name, - style: Theme.of(context).textTheme.body1, - maxLines: 1, - overflow: TextOverflow.ellipsis)), - Container( - height: 4, - ), - Container( - alignment: Alignment.centerLeft, - child: Text(song.artistString, - style: Theme.of(context).textTheme.caption, - maxLines: 1, - overflow: TextOverflow.ellipsis)), - Container( - height: 4, - ), - Row( - children: [ - SongTypeSymbol( - songType: song.songType, - ), - (song.youtubePV != null) - ? Icon(Icons.local_movies) - : Container() - ], - ) - ], - ), - ), - ), - ); - } -} - -class SongCardPlaceholder extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Container( - margin: EdgeInsets.symmetric(horizontal: 8.0), - child: Shimmer.fromColors( - baseColor: Colors.grey.shade300, - highlightColor: Colors.grey.shade100, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 130, - height: 80, - color: Colors.white, - ), - SizedBox( - height: 6, - ), - Container( - width: 130, - height: 8, - color: Colors.white, - ), - SizedBox( - height: 6, - ), - Container( - width: 80, - height: 8, - color: Colors.white, - ), - ], - ), - ), - ); - } -} diff --git a/lib/widgets/song_list_section.dart b/lib/widgets/song_list_section.dart deleted file mode 100644 index 64849c58..00000000 --- a/lib/widgets/song_list_section.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/widgets/display_all.dart'; -import 'package:vocadb/widgets/section.dart'; -import 'package:vocadb/widgets/song_card.dart'; -import 'package:vocadb/widgets/song_tile.dart'; - -class SongListSection extends StatelessWidget { - final String title; - final List songs; - final bool horizontal; - final String prefixTag; - final Widget extraMenus; - - const SongListSection( - {Key key, - this.songs, - this.horizontal = false, - this.prefixTag, - this.title, - this.extraMenus}) - : super(key: key); - - Widget mapSongWidget(SongModel song) { - String tag = '${prefixTag}_song_${song.id}'; - return (horizontal) - ? SongCard.song(song, tag: tag) - : SongTile.fromSong(song, tag: tag); - } - - @override - Widget build(BuildContext context) { - if (songs.length > 10 && extraMenus == null) { - return Section( - title: title, - horizontal: true, - extraMenus: PopupMenuButton( - icon: Icon(Icons.more_horiz), - onSelected: (String selectedValue) { - DisplayAll.navigate( - context, - 'More songs', - songs - .map((v) => SongTile.fromSong(v, - tag: '${this.prefixTag}_${v.id}')) - .toList()); - }, - itemBuilder: (BuildContext context) => [ - PopupMenuItem( - value: 'more', - child: Text(FlutterI18n.translate(context, 'label.showMore')), - ), - ], - ), - children: songs.take(10).map(mapSongWidget).toList()); - } - - return Section( - title: title, - horizontal: true, - extraMenus: extraMenus, - children: songs.map(mapSongWidget).toList()); - } -} diff --git a/lib/widgets/song_tile.dart b/lib/widgets/song_tile.dart deleted file mode 100644 index d6ba43b1..00000000 --- a/lib/widgets/song_tile.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/material.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/pages/song_detail/song_detail_page.dart'; -import 'package:vocadb/widgets/song_type_symbol.dart'; - -class SongTile extends StatelessWidget { - final Widget leading; - final SongModel song; - final String tag; - - SongTile.fromSong(this.song, {this.leading, this.tag}); - - factory SongTile.fromEntry(EntryModel entryModel, - {Widget leading, String tag}) { - SongModel song = SongModel(); - song.id = entryModel.id; - song.songType = entryModel.songType; - song.name = entryModel.name; - song.artistString = entryModel.artistString; - song.thumbUrl = entryModel.imageUrl; - - return SongTile.fromSong(song, leading: leading, tag: tag); - } - - Widget leadingWidget() { - return Padding( - padding: const EdgeInsets.all(16.0), - child: this.leading, - ); - } - - Widget thumbnailWidget() { - Widget thumbnail = (song.thumbUrl != null && song.thumbUrl.isNotEmpty) - ? CachedNetworkImage( - fit: BoxFit.cover, - imageUrl: song.thumbUrl, - placeholder: (context, url) => Container(color: Colors.grey), - errorWidget: (context, url, error) => new Icon(Icons.error), - ) - : Icon(Icons.music_note); - - return Padding( - padding: const EdgeInsets.all(8.0), - child: SizedBox( - width: 120, - child: thumbnail, - )); - } - - Widget infoWidget(BuildContext context) { - return Expanded( - child: Padding( - padding: EdgeInsets.symmetric(vertical: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text(song.name, overflow: TextOverflow.ellipsis), - Text(song.artistString, - overflow: TextOverflow.ellipsis, - maxLines: 1, - style: Theme.of(context).textTheme.caption), - SizedBox( - height: 8.0, - ), - Row( - children: [ - SongTypeSymbol( - songType: song.songType, - ), - (song.youtubePV != null) - ? Icon(Icons.local_movies) - : Container() - ], - ) - ], - ), - ), - ); - } - - Widget trailing() { - return Padding( - padding: const EdgeInsets.all(8.0), - child: IconButton(onPressed: () {}, icon: Icon(Icons.more_vert)), - ); - } - - void navigateToSongDetail(BuildContext context) { - SongDetailScreen.navigate(context, song.id, - name: song.name, thumbUrl: song.thumbUrl, tag: tag); - } - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => navigateToSongDetail(context), - child: Container( - height: 100, - child: Row( - children: [ - (this.leading == null) ? Container() : leadingWidget(), - thumbnailWidget(), - infoWidget(context), - ], - ), - ), - ); - } -} diff --git a/lib/widgets/space_divider.dart b/lib/widgets/space_divider.dart deleted file mode 100644 index 1c71bf47..00000000 --- a/lib/widgets/space_divider.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/material.dart'; - -class SpaceDivider extends StatelessWidget { - @override - Widget build(BuildContext context) { - return SizedBox( - height: 16, - ); - } -} \ No newline at end of file diff --git a/lib/widgets/tags.dart b/lib/widgets/tags.dart deleted file mode 100644 index 0bad97b7..00000000 --- a/lib/widgets/tags.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/pages/tag_detail/tag_detail_page.dart'; - -class Tags extends StatefulWidget { - final List _tags; - - final double padding; - - const Tags(this._tags, {this.padding = 8.0}); - - @override - _TagsState createState() => _TagsState(); -} - -class _TagsState extends State { - List tagList = List(); - - int minimum = 5; - - @override - void initState() { - super.initState(); - - if (widget._tags == null || widget._tags.length == 0) return; - - showMinimumTags(); - } - - Widget buildShowMoreChip() { - return InputChip( - label: Text('More (${widget._tags.length})'), - onPressed: showAllTags, - ); - } - - toTagDetailPage(TagModel tagModel) { - TagDetailScreen.navigate(context, tagModel.id, tagModel.name); - } - - Widget mapTagWidget(TagModel tagModel) { - return Tag(tagModel, () { - this.toTagDetailPage(tagModel); - }); - } - - void showMinimumTags() { - setState(() { - tagList = widget._tags.take(this.minimum).map(mapTagWidget).toList(); - - if (widget._tags.length > this.minimum) { - tagList.add(buildShowMoreChip()); - } - }); - } - - void showAllTags() { - setState(() { - tagList = widget._tags.map(mapTagWidget).toList(); - }); - } - - @override - Widget build(BuildContext context) { - return Padding( - padding: EdgeInsets.all(widget.padding), - child: Wrap( - children: tagList, - ), - ); - } -} - -class Tag extends StatelessWidget { - final TagModel _tag; - final VoidCallback onPressed; - - const Tag(this._tag, this.onPressed); - - @override - Widget build(BuildContext context) { - return Container( - margin: EdgeInsets.only(right: 4.0), - child: InputChip( - label: Text(_tag.name), - onPressed: this.onPressed, - ), - ); - } -} diff --git a/lib/widgets/text_info_section.dart b/lib/widgets/text_info_section.dart deleted file mode 100644 index 0be4d504..00000000 --- a/lib/widgets/text_info_section.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:vocadb/widgets/space_divider.dart'; - -class TextInfoSection extends StatelessWidget { - final String title; - final String text; - - const TextInfoSection({Key key, this.title, this.text}) : super(key: key); - - @override - Widget build(BuildContext context) { - if (this.text == null || this.text.isEmpty) { - return Container(); - } - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: Theme.of(context).textTheme.caption, - ), - Text(text), - SpaceDivider() - ], - ); - } -} diff --git a/lib/widgets/web_link_section.dart b/lib/widgets/web_link_section.dart deleted file mode 100644 index c0cbb029..00000000 --- a/lib/widgets/web_link_section.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:vocadb/models/web_link_model.dart'; -import 'package:vocadb/widgets/web_link.dart'; - -class WebLinkSection extends StatelessWidget { - final List webLinks; - final String title; - - const WebLinkSection({Key key, this.webLinks, this.title}) : super(key: key); - - @override - Widget build(BuildContext context) { - List children = []; - - if (webLinks == null || webLinks.length == 0) { - return Container(); - } - - webLinks.sort((a, b) => a.description.compareTo(b.description)); - - if (this.title != null) { - children.add(Padding( - padding: EdgeInsets.all(8.0), - child: Text( - title, - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - )); - - List allWebLinks = - this.webLinks.map((link) => WebLinkTile(link)).toList(); - - children.addAll(allWebLinks); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: children, - ); - } - - final WebLinkList webLinkList = WebLinkList(webLinks); - - if (webLinkList.officialLinks.length > 0) { - children.add(Padding( - padding: EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.officialLinks'), - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - )); - - List officialLinks = - webLinkList.officialLinks.map((link) => WebLinkTile(link)).toList(); - - children.addAll(officialLinks); - } - - if (webLinkList.unofficialLinks.length > 0) { - children.add(Padding( - padding: EdgeInsets.all(8.0), - child: Text( - FlutterI18n.translate(context, 'label.unofficialLinks'), - textDirection: TextDirection.ltr, - style: Theme.of(context).textTheme.subhead, - ), - )); - - List unofficialLinks = - webLinkList.unofficialLinks.map((link) => WebLinkTile(link)).toList(); - - children.addAll(unofficialLinks); - } - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: children, - ); - } -} diff --git a/lib/widgets/youtube_embed_view.dart b/lib/widgets/youtube_embed_view.dart deleted file mode 100644 index fc1de13c..00000000 --- a/lib/widgets/youtube_embed_view.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:webview_flutter/webview_flutter.dart'; - -class YoutubeEmbedView extends StatelessWidget { - final String videoId; - - const YoutubeEmbedView({Key key, this.videoId}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: double.infinity, - height: 200, - child: WebView( - initialUrl: 'https://www.youtube.com/embed/$videoId?playsinline=1', - javascriptMode: JavascriptMode.unrestricted, - initialMediaPlaybackPolicy: AutoMediaPlaybackPolicy.always_allow, - ), - ); - } -} diff --git a/pubspec.yaml b/pubspec.yaml index 5d3c4027..c942730a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,61 +1,60 @@ -name: vocadb -description: VocaDB +name: vocadb_app +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 # followed by an optional build number separated by a +. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. -# Read more about versioning at semver.org. -version: 3.0.3 +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 3.1.0+102433 environment: - sdk: ">=2.0.0-dev.68.0 <3.0.0" + sdk: ">=2.7.0 <3.0.0" dependencies: - webview_flutter: ^0.3.15+1 - quick_actions: ^0.4.0+1 - font_awesome_flutter: ^8.5.0 - firebase_crashlytics: ^0.1.0+3 - flutter_i18n: ^0.7.0 - esys_flutter_share: ^1.0.2 - file_picker: 1.4.0 - package_info: ^0.4.0+6 - path_provider: ^1.3.0 - hive: ^1.0.0 - hive_flutter: ^0.2.1 - provider: ^3.1.0 - rxdart: ^0.22.2 - shared_preferences: ^0.5.3+4 - dio_http_cache: ^0.2.0 - dio: ^3.0.0 - shimmer: ^1.0.1 - youtube_player_flutter: ^6.0.3+2 - cached_network_image: ^2.0.0 - url_launcher: ^5.1.3 - share: ^0.6.2+1 + firebase_analytics: ^7.0.1 + package_info: ^0.4.3+2 + flutter_markdown: ^0.5.2 + path_provider: ^1.6.24 + cookie_jar: ^1.0.1 + dio_http_cache: ^0.2.11 + dio: ^3.0.10 + dio_cookie_manager: ^1.0.0 + share: ^0.6.5+4 + youtube_player_flutter: ^7.0.0+7 + url_launcher: ^5.7.10 + font_awesome_flutter: ^8.11.0 + get: ^3.23.1 + get_storage: ^1.4.0 + shimmer: ^1.1.2 + intl: ^0.16.1 + equatable: ^1.0.0 + cached_network_image: ^2.4.1 flutter: sdk: flutter - flutter_localizations: - sdk: flutter - flutter_cupertino_localizations: ^1.0.1 - firebase_core: ^0.4.0+9 - firebase_analytics: ^5.0.2 + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 + cupertino_icons: ^1.0.0 dev_dependencies: - mockito: ^3.0.0 - flutter_driver: - sdk: flutter + mockito: ^4.1.3 + matcher: ^0.12.9 flutter_test: sdk: flutter - # For information on the generic Dart part of this file, see the -# following page: https://www.dartlang.org/tools/pub/pubspec +# following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. flutter: @@ -68,16 +67,12 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/images/ - - assets/i18n/ - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.io/assets-and-images/#resolution-aware. + # https://flutter.dev/assets-and-images/#resolution-aware. # For details regarding adding assets from package dependencies, see - # https://flutter.io/assets-and-images/#from-packages + # https://flutter.dev/assets-and-images/#from-packages # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a @@ -97,4 +92,4 @@ flutter: # weight: 700 # # For details regarding fonts from package dependencies, - # see https://flutter.io/custom-fonts/#from-packages + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/test/blocs/album_detail_bloc_test.dart b/test/blocs/album_detail_bloc_test.dart deleted file mode 100644 index 3878abf9..00000000 --- a/test/blocs/album_detail_bloc_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/album_detail_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; - -class MockAlbumService extends Mock implements AlbumRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - - MockConfigBloc mockConfigBloc = MockConfigBloc(); - - final AlbumModel mockSingleResult = AlbumModel.fromJson({'id': 1, 'name': 'A'}); - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - - test('should emits result', () async { - MockAlbumService mockAlbumService = MockAlbumService(); - - when(mockAlbumService.byId(any)).thenAnswer((_) => Future.value(mockSingleResult)); - - AlbumDetailBloc bloc = AlbumDetailBloc(1, albumService: mockAlbumService, configBloc: mockConfigBloc); - - await expectLater(bloc.album$, emits(mockSingleResult)); - - verify(mockAlbumService.byId(any)).called(1); - }); -} \ No newline at end of file diff --git a/test/blocs/artist_detail_bloc_test.dart b/test/blocs/artist_detail_bloc_test.dart deleted file mode 100644 index d2987be1..00000000 --- a/test/blocs/artist_detail_bloc_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/artist_detail_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; - -class MockArtistService extends Mock implements ArtistRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - - MockConfigBloc mockConfigBloc = MockConfigBloc(); - - final ArtistModel mockSingleResult = ArtistModel.fromJson({'id': 1, 'name': 'A'}); - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - - test('should emits result', () async { - MockArtistService mockArtistService = MockArtistService(); - - when(mockArtistService.byId(any)).thenAnswer((_) => Future.value(mockSingleResult)); - - ArtistDetailBloc bloc = ArtistDetailBloc(1, artistService: mockArtistService, configBloc: mockConfigBloc); - - await expectLater(bloc.artist$, emits(mockSingleResult)); - - verify(mockArtistService.byId(any)).called(1); - }); -} \ No newline at end of file diff --git a/test/blocs/event_series_bloc_test.dart b/test/blocs/event_series_bloc_test.dart deleted file mode 100644 index 0c0dc095..00000000 --- a/test/blocs/event_series_bloc_test.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/event_series_bloc.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/services/release_event_series_rest_service.dart'; - -class MockReleaseEventSeriesService extends Mock implements ReleaseEventSeriesRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - - MockConfigBloc mockConfigBloc = MockConfigBloc(); - - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - - test('should emits event series detail', () async { - MockReleaseEventSeriesService mockReleaseEventSeriesService = MockReleaseEventSeriesService(); - - final ReleaseEventSeriesModel mockResult = ReleaseEventSeriesModel.fromJson({'id': 1, 'name': 'A'}); - - when(mockReleaseEventSeriesService.byId(any)).thenAnswer((_) => Future.value(mockResult)); - - EventSeriesBloc bloc = EventSeriesBloc(1, releaseEventSeriesService: mockReleaseEventSeriesService, configBloc: mockConfigBloc); - - await expectLater(bloc.eventSeriesDetail$, emits(mockResult)); - - verify(mockReleaseEventSeriesService.byId(any)).called(1); - }); -} \ No newline at end of file diff --git a/test/blocs/favorite_song_bloc_test.dart b/test/blocs/favorite_song_bloc_test.dart deleted file mode 100644 index a3dae875..00000000 --- a/test/blocs/favorite_song_bloc_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:hive/hive.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/favorite_song_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; - -class MockBox extends Mock implements Box {} - -main() { - test('should add and remove song', () async { - final song = SongModel.fromJson({'id': 1, 'name': 'A'}); - final box = MockBox(); - - when(box.put(any, any)).thenAnswer((_) => Future.value()); - when(box.get(any)).thenReturn(null); - - final bloc = FavoriteSongBloc(personalBox: box); - - expect(bloc.songs, isEmpty); - - bloc.add(song); - - final expected = {1: song}; - - await expectLater(bloc.songs$, emits(expected)); - - expect(bloc.songs, isNotNull); - - bloc.remove(1); - - await expectLater(bloc.songs$, emits({})); - }); -} diff --git a/test/blocs/lyric_content_bloc_test.dart b/test/blocs/lyric_content_bloc_test.dart deleted file mode 100644 index 06c1a13c..00000000 --- a/test/blocs/lyric_content_bloc_test.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/lyric_content_bloc.dart'; -import 'package:vocadb/models/lyric_model.dart'; - -main() { - - final lyric1 = LyricModel.fromJson({ 'id':1, 'translationType': 'Original', 'value': 'A'}); - final lyric2 = LyricModel.fromJson({ 'id':2, 'translationType': 'Translate', 'value': 'B'}); - - final List mockLyrics = [ - lyric1, lyric2, - ]; - test('should emits selected lyric', () async { - final bloc = LyricContentBloc(mockLyrics); - - await expectLater(bloc.selectedLyric$, emits(lyric1)); - - bloc.changeTranslation('Translate'); - - await expectLater(bloc.selectedLyric$, emits(lyric2)); - }); -} \ No newline at end of file diff --git a/test/blocs/release_event_detail_bloc_test.dart b/test/blocs/release_event_detail_bloc_test.dart deleted file mode 100644 index 15b46299..00000000 --- a/test/blocs/release_event_detail_bloc_test.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/release_event_detail_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; - -class MockReleaseEventService extends Mock implements ReleaseEventRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - MockConfigBloc mockConfigBloc = MockConfigBloc(); - - final ReleaseEventModel mockSingleResult = - ReleaseEventModel.fromJson({'id': 1, 'name': 'A'}); - final List mockSongs = [ - SongModel.fromJson({"id": 1, "name": "A"}), - SongModel.fromJson({"id": 2, "name": "B"}), - ]; - - final List mockAlbums = [ - AlbumModel.fromJson({"id": 1, "name": "A"}), - AlbumModel.fromJson({"id": 2, "name": "B"}), - ]; - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - - test('should emits result', () async { - MockReleaseEventService mockReleaseEventService = MockReleaseEventService(); - - when(mockReleaseEventService.byId(any)) - .thenAnswer((_) => Future.value(mockSingleResult)); - when(mockReleaseEventService.publishedSongs(any)) - .thenAnswer((_) => Future.value(mockSongs)); - when(mockReleaseEventService.albums(any)) - .thenAnswer((_) => Future.value(mockAlbums)); - - ReleaseEventDetailBloc bloc = ReleaseEventDetailBloc(1, - releaseEventService: mockReleaseEventService, - configBloc: mockConfigBloc); - - await expectLater(bloc.releaseEvent$, emits(mockSingleResult)); - - verify(mockReleaseEventService.byId(any)).called(1); - }); -} diff --git a/test/blocs/release_event_filter_bloc_test.dart b/test/blocs/release_event_filter_bloc_test.dart deleted file mode 100644 index 39b3ae7c..00000000 --- a/test/blocs/release_event_filter_bloc_test.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/release_event_filter_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; - -main() { - ReleaseEventFilterBloc bloc; - - setUp(() { - bloc = ReleaseEventFilterBloc(); - }); - - test('should update category', () async { - bloc.updateCategory('Concert'); - - await expectLater(bloc.category$, emits('Concert')); - - expect(bloc.category, equals('Concert')); - }); - - test('should update sort', () async { - bloc.updateSort('CreateDate'); - - await expectLater(bloc.sort$, emits('CreateDate')); - - expect(bloc.sort, equals('CreateDate')); - }); - - test('should add and remove artist correctly', () { - final artist1 = ArtistModel.fromJson({'id': 1, 'name': 'Hatsune Miku_1'}); - final artist2 = ArtistModel.fromJson({'id': 2, 'name': 'Hatsune Miku_2'}); - final artist3 = ArtistModel.fromJson({'id': 3, 'name': 'Hatsune Miku_3'}); - - bloc.addArtist(artist1); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - - bloc.addArtist(artist1); - bloc.addArtist(artist2); - bloc.addArtist(artist3); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - - bloc.removeArtist(artist1.id); - - expect(bloc.artists.containsKey(artist1.id), isFalse); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - }); - - test('should add and remove tag correctly', () { - final tag1 = TagModel.fromJson({'id': 1, 'name': 'Tag_1'}); - final tag2 = TagModel.fromJson({'id': 2, 'name': 'Tag_2'}); - final tag3 = TagModel.fromJson({'id': 3, 'name': 'Tag_3'}); - - bloc.addTag(tag1); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - - bloc.addTag(tag1); - bloc.addTag(tag2); - bloc.addTag(tag3); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - bloc.removeTag(tag1.id); - - expect(bloc.tags.containsKey(tag1.id), isFalse); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - Map params = bloc.params(); - expect(params.containsKey('tagId'), isTrue); - expect(params['tagId'], equals('2,3')); - }); - - test('should return params correctly', () { - Map params = bloc.params(); - - expect(params.containsKey('releaseEventTypes'), isFalse); - - bloc.updateCategory('Concert'); - bloc.updateSort('CreateDate'); - - params = bloc.params(); - - expect(params.containsKey('category'), isTrue); - expect(params['category'], equals('Concert')); - - expect(params.containsKey('sort'), isTrue); - expect(params['sort'], equals('CreateDate')); - }); -} diff --git a/test/blocs/search_album_filter_bloc_test.dart b/test/blocs/search_album_filter_bloc_test.dart deleted file mode 100644 index 4b35975d..00000000 --- a/test/blocs/search_album_filter_bloc_test.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/search_album_filter_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; - -main() { - SearchAlbumFilterBloc bloc; - - setUp(() { - bloc = SearchAlbumFilterBloc(); - }); - - test('should update album type', () async { - bloc.updateAlbumType('Single'); - - await expectLater(bloc.albumType$, emits('Single')); - - expect(bloc.albumType, equals('Single')); - }); - - test('should update sort', () async { - bloc.updateSort('CreateDate'); - - await expectLater(bloc.sort$, emits('CreateDate')); - - expect(bloc.sort, equals('CreateDate')); - }); - - test('should add and remove artist correctly', () { - final artist1 = ArtistModel.fromJson({'id': 1, 'name': 'Hatsune Miku_1'}); - final artist2 = ArtistModel.fromJson({'id': 2, 'name': 'Hatsune Miku_2'}); - final artist3 = ArtistModel.fromJson({'id': 3, 'name': 'Hatsune Miku_3'}); - - bloc.addArtist(artist1); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - - bloc.addArtist(artist1); - bloc.addArtist(artist2); - bloc.addArtist(artist3); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - - bloc.removeArtist(artist1.id); - - expect(bloc.artists.containsKey(artist1.id), isFalse); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - }); - - test('should add and remove tag correctly', () { - final tag1 = TagModel.fromJson({'id': 1, 'name': 'Tag_1'}); - final tag2 = TagModel.fromJson({'id': 2, 'name': 'Tag_2'}); - final tag3 = TagModel.fromJson({'id': 3, 'name': 'Tag_3'}); - - bloc.addTag(tag1); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - - bloc.addTag(tag1); - bloc.addTag(tag2); - bloc.addTag(tag3); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - bloc.removeTag(tag1.id); - - expect(bloc.tags.containsKey(tag1.id), isFalse); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - Map params = bloc.params(); - expect(params.containsKey('tagId'), isTrue); - expect(params['tagId'], equals('2,3')); - }); - - test('should return params correctly', () { - Map params = bloc.params(); - - expect(params.containsKey('discTypes'), isFalse); - - bloc.updateAlbumType('Single'); - bloc.updateSort('CreateDate'); - - params = bloc.params(); - - expect(params.containsKey('discTypes'), isTrue); - expect(params['discTypes'], equals('Single')); - - expect(params.containsKey('sort'), isTrue); - expect(params['sort'], equals('CreateDate')); - }); -} diff --git a/test/blocs/search_artist_filter_bloc_test.dart b/test/blocs/search_artist_filter_bloc_test.dart deleted file mode 100644 index 8c1d5378..00000000 --- a/test/blocs/search_artist_filter_bloc_test.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/search_artist_filter_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; - -main() { - SearchArtistFilterBloc bloc; - - setUp(() { - bloc = SearchArtistFilterBloc(); - }); - - test('should update artist type', () async { - bloc.updateArtistType('Circle'); - - await expectLater(bloc.artistType$, emits('Circle')); - - expect(bloc.artistType, equals('Circle')); - }); - - test('should update sort', () async { - bloc.updateSort('CreateDate'); - - await expectLater(bloc.sort$, emits('CreateDate')); - - expect(bloc.sort, equals('CreateDate')); - }); - - test('should add and remove tag correctly', () { - final tag1 = TagModel.fromJson({'id': 1, 'name': 'Tag_1'}); - final tag2 = TagModel.fromJson({'id': 2, 'name': 'Tag_2'}); - final tag3 = TagModel.fromJson({'id': 3, 'name': 'Tag_3'}); - - bloc.addTag(tag1); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - - bloc.addTag(tag1); - bloc.addTag(tag2); - bloc.addTag(tag3); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - bloc.removeTag(tag1.id); - - expect(bloc.tags.containsKey(tag1.id), isFalse); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - Map params = bloc.params(); - expect(params.containsKey('tagId'), isTrue); - expect(params['tagId'], equals('2,3')); - }); - - test('should return params correctly', () { - Map params = bloc.params(); - - expect(params.containsKey('artistTypes'), isFalse); - - bloc.updateArtistType('Circle'); - bloc.updateSort('CreateDate'); - - params = bloc.params(); - - expect(params.containsKey('artistTypes'), isTrue); - expect(params['artistTypes'], equals('Circle')); - - expect(params.containsKey('sort'), isTrue); - expect(params['sort'], equals('CreateDate')); - }); -} diff --git a/test/blocs/search_bloc_test.dart b/test/blocs/search_bloc_test.dart deleted file mode 100644 index a0f8a226..00000000 --- a/test/blocs/search_bloc_test.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/search_bloc.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/services/entry_service.dart'; - -class MockEntryService extends Mock implements EntryService {} - -main() { - MockEntryService mockEntryService; - - final List mockResults = [ - EntryModel.fromJson({'id': 1, 'name': 'A'}), - EntryModel.fromJson({'id': 2, 'name': 'B'}), - EntryModel.fromJson({'id': 3, 'name': 'C'}), - EntryModel.fromJson({'id': 4, 'name': 'D'}), - ]; - - setUp(() { - mockEntryService = MockEntryService(); - when(mockEntryService.search(any, any, params: anyNamed('params'))) - .thenAnswer((_) => Future.value(mockResults)); - }); - test('should emits query when update query', () async { - final bloc = SearchBloc(entryService: mockEntryService); - - bloc.updateQuery('abc'); - - await expectLater(bloc.queryStream, emits('abc')); - }); - - test('should emits empty query when clear query', () async { - final bloc = SearchBloc(entryService: mockEntryService); - - bloc.updateQuery('abc'); - - await expectLater(bloc.queryStream, emits('abc')); - - bloc.clearQuery(); - - await expectLater(bloc.queryStream, emits('')); - }); - - test('should emits empty query when clear query', () async { - final bloc = SearchBloc(entryService: mockEntryService); - - bloc.updateQuery('abc'); - - await expectLater(bloc.queryStream, emits('abc')); - - bloc.clearQuery(); - - await expectLater(bloc.queryStream, emits('')); - }); - - test('should trigger fetch when song filter updated', () { - final bloc = SearchBloc(entryService: mockEntryService); - - bloc.updateQuery('abc'); - - - expectLater(bloc.isSearching$, emits(true)); - - bloc.updateQuery('de'); - - expectLater(bloc.queryStream, emits('de')); - - bloc.updateEntryType(EntryType.Song); - - expectLater(bloc.entryTypeStream, emits(EntryType.Song)); - - expect(bloc.filterParams$, emitsAnyOf([ - 'abc', - 'de', - EntryType.Song, - ])); - }); -} diff --git a/test/blocs/search_entry_filter_bloc_test.dart b/test/blocs/search_entry_filter_bloc_test.dart deleted file mode 100644 index 29e5583f..00000000 --- a/test/blocs/search_entry_filter_bloc_test.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/search_entry_filter_bloc.dart'; -import 'package:vocadb/models/tag_model.dart'; - -main() { - SearchEntryFilterBloc bloc; - - setUp(() { - bloc = SearchEntryFilterBloc(); - }); - - test('should update sort', () async { - bloc.updateSort('CreateDate'); - - await expectLater(bloc.sort$, emits('CreateDate')); - - expect(bloc.sort, equals('CreateDate')); - }); - - test('should add and remove tag correctly', () { - final tag1 = TagModel.fromJson({'id': 1, 'name': 'Tag_1'}); - final tag2 = TagModel.fromJson({'id': 2, 'name': 'Tag_2'}); - final tag3 = TagModel.fromJson({'id': 3, 'name': 'Tag_3'}); - - bloc.addTag(tag1); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - - bloc.addTag(tag1); - bloc.addTag(tag2); - bloc.addTag(tag3); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - bloc.removeTag(tag1.id); - - expect(bloc.tags.containsKey(tag1.id), isFalse); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - Map params = bloc.params(); - expect(params.containsKey('tagId'), isTrue); - expect(params['tagId'], equals('2,3')); - }); - - test('should return params correctly', () { - Map params = bloc.params(); - - bloc.updateSort('CreateDate'); - - params = bloc.params(); - - expect(params.containsKey('sort'), isTrue); - expect(params['sort'], equals('CreateDate')); - }); -} diff --git a/test/blocs/search_song_filter_bloc_test.dart b/test/blocs/search_song_filter_bloc_test.dart deleted file mode 100644 index 63f89af1..00000000 --- a/test/blocs/search_song_filter_bloc_test.dart +++ /dev/null @@ -1,97 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/blocs/search_song_filter_bloc.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/tag_model.dart'; - -main() { - SearchSongFilterBloc bloc; - - setUp(() { - bloc = SearchSongFilterBloc(); - }); - - test('should update song type', () async { - bloc.updateSongType('Original'); - - await expectLater(bloc.songType$, emits('Original')); - - expect(bloc.songType, equals('Original')); - }); - - test('should update sort', () async { - bloc.updateSort('CreateDate'); - - await expectLater(bloc.sort$, emits('CreateDate')); - - expect(bloc.sort, equals('CreateDate')); - }); - - test('should add and remove artist correctly', () { - final artist1 = ArtistModel.fromJson({'id': 1, 'name': 'Hatsune Miku_1'}); - final artist2 = ArtistModel.fromJson({'id': 2, 'name': 'Hatsune Miku_2'}); - final artist3 = ArtistModel.fromJson({'id': 3, 'name': 'Hatsune Miku_3'}); - - bloc.addArtist(artist1); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - - bloc.addArtist(artist1); - bloc.addArtist(artist2); - bloc.addArtist(artist3); - - expect(bloc.artists.containsKey(artist1.id), isTrue); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - - bloc.removeArtist(artist1.id); - - expect(bloc.artists.containsKey(artist1.id), isFalse); - expect(bloc.artists.containsKey(artist2.id), isTrue); - expect(bloc.artists.containsKey(artist3.id), isTrue); - }); - - test('should add and remove tag correctly', () { - final tag1 = TagModel.fromJson({'id': 1, 'name': 'Tag_1'}); - final tag2 = TagModel.fromJson({'id': 2, 'name': 'Tag_2'}); - final tag3 = TagModel.fromJson({'id': 3, 'name': 'Tag_3'}); - - bloc.addTag(tag1); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - - bloc.addTag(tag1); - bloc.addTag(tag2); - bloc.addTag(tag3); - - expect(bloc.tags.containsKey(tag1.id), isTrue); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - bloc.removeTag(tag1.id); - - expect(bloc.tags.containsKey(tag1.id), isFalse); - expect(bloc.tags.containsKey(tag2.id), isTrue); - expect(bloc.tags.containsKey(tag3.id), isTrue); - - Map params = bloc.params(); - expect(params.containsKey('tagId'), isTrue); - expect(params['tagId'], equals('2,3')); - }); - - test('should return params correctly', () { - Map params = bloc.params(); - - expect(params.containsKey('songTypes'), isFalse); - - bloc.updateSongType('Original'); - bloc.updateSort('CreateDate'); - - params = bloc.params(); - - expect(params.containsKey('songTypes'), isTrue); - expect(params['songTypes'], equals('Original')); - - expect(params.containsKey('sort'), isTrue); - expect(params['sort'], equals('CreateDate')); - }); -} diff --git a/test/blocs/setting_bloc_test.dart b/test/blocs/setting_bloc_test.dart deleted file mode 100644 index 0cb961fd..00000000 --- a/test/blocs/setting_bloc_test.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:vocadb/app_theme.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; - -class MockPreferences extends Mock implements SharedPreferences {} - -main() { - - final mockPref = MockPreferences(); - test('should emits given theme', () async { - final configBloc = ConfigBloc(mockPref); - - when(mockPref.getString('theme')).thenReturn(ThemeEnum.Dark.toString()); - - configBloc.updateTheme(ThemeEnum.Light); - - await expectLater(configBloc.themeDataStream, emits(ThemeEnum.Light)); - }); -} diff --git a/test/blocs/song_detail_bloc_test.dart b/test/blocs/song_detail_bloc_test.dart deleted file mode 100644 index 6b28fa27..00000000 --- a/test/blocs/song_detail_bloc_test.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/blocs/song_detail_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; - -class MockSongRestService extends Mock implements SongRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - - MockConfigBloc mockConfigBloc = MockConfigBloc(); - - final List mockResults = [ - SongModel.fromJson({'id': 1, 'name': 'A'}), - SongModel.fromJson({'id': 2, 'name': 'B'}), - SongModel.fromJson({'id': 3, 'name': 'C'}), - SongModel.fromJson({'id': 4, 'name': 'D'}), - ]; - - final SongModel mockSingleResult = SongModel.fromJson({'id': 1, 'name': 'A'}); - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - test('should emits results when fetch by id', () async { - MockSongRestService mockSongService = MockSongRestService(); - - when(mockSongService.byId(any)) - .thenAnswer((_) => Future.value(mockSingleResult)); - when(mockSongService.related(any)) - .thenAnswer((_) => Future.value(mockResults)); - when(mockSongService.derived(any)) - .thenAnswer((_) => Future.value(mockResults)); - - SongDetailBloc bloc = new SongDetailBloc(1, - songService: mockSongService, configBloc: mockConfigBloc); - - await expectLater(bloc.song$, emits(mockSingleResult)); - await expectLater(bloc.altVersions$, emits(mockResults)); - await expectLater(bloc.relatedSongs$, emits(mockResults)); - - verify(mockSongService.byId(any)).called(1); - verify(mockSongService.related(any)).called(1); - verify(mockSongService.derived(any)).called(1); - }); - - test('should emits original version', () async { - MockSongRestService mockSongService = MockSongRestService(); - - int originalSongId = 5; - int songId = 1; - SongModel mockSingleResultWithOriginal = SongModel.fromJson({ - 'id': songId, - 'name': 'withOriginalAA', - 'originalVersionId': originalSongId - }); - - when(mockSongService.byId(songId)) - .thenAnswer((_) => Future.value(mockSingleResultWithOriginal)); - when(mockSongService.byId(originalSongId)) - .thenAnswer((_) => Future.value(mockSingleResult)); - when(mockSongService.related(any)) - .thenAnswer((_) => Future.value(mockResults)); - when(mockSongService.derived(any)) - .thenAnswer((_) => Future.value(mockResults)); - - SongDetailBloc bloc = new SongDetailBloc(songId, - songService: mockSongService, configBloc: mockConfigBloc); - - // bloc = new SongDetailBloc(1, songService: mockSongService, configBloc: mockConfigBloc); - - await expectLater(bloc.song$, emits(mockSingleResultWithOriginal), - reason: 'no emits song'); - await expectLater(bloc.originalVersion$, emits(mockSingleResult), - reason: 'no emits original version'); - await expectLater(bloc.altVersions$, emits(mockResults)); - await expectLater(bloc.relatedSongs$, emits(mockResults)); - - verify(mockSongService.byId(any)).called(2); - verify(mockSongService.related(any)).called(1); - verify(mockSongService.derived(any)).called(1); - }); - - test('should show/hide lyric', () async { - MockSongRestService mockSongService = MockSongRestService(); - - when(mockSongService.byId(any)) - .thenAnswer((_) => Future.value(mockSingleResult)); - when(mockSongService.related(any)) - .thenAnswer((_) => Future.value(mockResults)); - when(mockSongService.derived(any)) - .thenAnswer((_) => Future.value(mockResults)); - - SongDetailBloc bloc = new SongDetailBloc(1, - songService: mockSongService, configBloc: mockConfigBloc); - - await expectLater(bloc.showHideLyric$, emits(false)); - - bloc.showLyric(); - - await expectLater(bloc.showHideLyric$, emits(true)); - - bloc.hideLyric(); - - await expectLater(bloc.showHideLyric$, emits(false)); - }); -} diff --git a/test/blocs/tag_detail_bloc.dart b/test/blocs/tag_detail_bloc.dart deleted file mode 100644 index 6fd0210a..00000000 --- a/test/blocs/tag_detail_bloc.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/tag_detail_bloc.dart'; -import 'package:vocadb/blocs/config_bloc.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; -import 'package:vocadb/services/song_rest_service.dart'; -import 'package:vocadb/services/tag_rest_service.dart'; - -class MockTagService extends Mock implements TagRestService {} - -class MockSongService extends Mock implements SongRestService {} - -class MockAlbumService extends Mock implements AlbumRestService {} - -class MockArtistService extends Mock implements ArtistRestService {} - -class MockConfigBloc extends Mock implements ConfigBloc {} - -main() { - MockConfigBloc mockConfigBloc = MockConfigBloc(); - MockSongService mockSongService = MockSongService(); - MockArtistService mockArtistService = MockArtistService(); - MockAlbumService mockAlbumService = MockAlbumService(); - - final TagModel mockSingleResult = TagModel.fromJson({'id': 1, 'name': 'A'}); - final List mockSongs = [ - SongModel.fromJson({'id': 1, 'name': 'A'}), - SongModel.fromJson({'id': 2, 'name': 'B'}) - ]; - - final List mockAlbums = [ - AlbumModel.fromJson({'id': 1, 'name': 'A'}), - AlbumModel.fromJson({'id': 2, 'name': 'B'}) - ]; - - final List mockArtists = [ - ArtistModel.fromJson({'id': 1, 'name': 'A'}), - ArtistModel.fromJson({'id': 2, 'name': 'B'}) - ]; - - setUp(() { - when(mockConfigBloc.contentLang).thenReturn('Default'); - }); - - test('should emits result', () async { - MockTagService mockTagService = MockTagService(); - - when(mockTagService.byId(any)) - .thenAnswer((_) => Future.value(mockSingleResult)); - when(mockSongService.latestByTagId(any)) - .thenAnswer((_) => Future.value(mockSongs)); - when(mockSongService.topByTagId(any)) - .thenAnswer((_) => Future.value(mockSongs)); - when(mockArtistService.topByTagId(any)) - .thenAnswer((_) => Future.value(mockArtists)); - when(mockAlbumService.topByTagId(any)) - .thenAnswer((_) => Future.value(mockAlbums)); - - TagDetailBloc bloc = TagDetailBloc(1, - tagService: mockTagService, - configBloc: mockConfigBloc, - songService: mockSongService, - artistService: mockArtistService, - albumService: mockAlbumService); - - await expectLater(bloc.tag$, emits(mockSingleResult)); - await expectLater(bloc.latestSongs$, emits(mockSongs)); - await expectLater(bloc.topSongs$, emits(mockSongs)); - await expectLater(bloc.topAlbums$, emits(mockAlbums)); - await expectLater(bloc.topArtists$, emits(mockArtists)); - - verify(mockTagService.byId(any)).called(1); - }); -} diff --git a/test/blocs/youtube_playlist_bloc_test.dart b/test/blocs/youtube_playlist_bloc_test.dart deleted file mode 100644 index 90470dee..00000000 --- a/test/blocs/youtube_playlist_bloc_test.dart +++ /dev/null @@ -1,164 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/blocs/youtube_playlist_bloc.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:youtube_player_flutter/youtube_player_flutter.dart'; - -class MockYoutubePlayerController extends Mock - implements YoutubePlayerController {} - -main() { - YoutubePlaylistBloc bloc; - MockYoutubePlayerController mockYoutubePlayerController; - SongModel song1; - SongModel song2; - SongModel song3; - SongModel song4; - List mockSongs; - - setUp(() { - mockYoutubePlayerController = MockYoutubePlayerController(); - bloc = YoutubePlaylistBloc(); - song1 = SongModel.fromJson({ - "id": 1, - "name": "A", - "pvs": [ - { - "id": 1, - "service": "Youtube", - "url": "https://www.youtube.com/watch?v=LhzHnfdN-zA" - } - ] - }); - song2 = SongModel.fromJson({ - "id": 2, - "name": "B", - "pvs": [ - {"id": 2, "service": "Niconico"} - ] - }); - song3 = SongModel.fromJson({ - "id": 3, - "name": "C", - "pvs": [ - { - "id": 3, - "service": "Youtube", - "url": "https://www.youtube.com/watch?v=LhzHnfdN-zA" - } - ] - }); - song4 = SongModel.fromJson({ - "id": 4, - "name": "E", - "pvs": [ - {"id": 4, "service": "SC"} - ] - }); - mockSongs = [song1, song2, song3, song4]; - }); - - test('should emits playlist', () async { - bloc.initialPlaylist(mockSongs, mockYoutubePlayerController); - - await expectLater(bloc.playlistStream, emits(mockSongs)); - expect(bloc.currentPV.id, 1); - }); - - test('should run next and skip unplayable PV', () async { - bloc.initialPlaylist(mockSongs, mockYoutubePlayerController); - - await expectLater(bloc.playlistStream, emits(mockSongs)); - expect(bloc.currentPV.id, 1); - - bloc.next(); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - }); - - test('should run prev and skip unplayable PV', () async { - bloc.initialPlaylist(mockSongs, mockYoutubePlayerController); - - await expectLater(bloc.playlistStream, emits(mockSongs)); - expect(bloc.currentPV.id, 1); - - bloc.next(); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - - bloc.prev(); - - await expectLater(bloc.currentIndexStream, emits(0)); - expect(bloc.currentPV.id, 1); - }); - - test('should run select PV', () async { - bloc.initialPlaylist(mockSongs, mockYoutubePlayerController); - - await expectLater(bloc.playlistStream, emits(mockSongs)); - expect(bloc.currentPV.id, 1); - - bloc.select(2); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - }); - - test( - 'should emits first available pv when run next and no available pv not found', - () async { - bloc.initialPlaylist(mockSongs, mockYoutubePlayerController); - - await expectLater(bloc.playlistStream, emits(mockSongs)); - expect(bloc.currentPV.id, 1); - - bloc.select(2); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - - bloc.next(); - - await expectLater(bloc.currentIndexStream, emits(0)); - expect(bloc.currentPV.id, 1); - }); - - test( - 'should emits last available pv when run prev and no available pv not found', - () async { - List ms = [ - SongModel.fromJson({ - "id": 1, - "name": "A", - "pvs": [ - {"id": 1, "service": "Y1"} - ] - }), - SongModel.fromJson({ - "id": 2, - "name": "B", - "pvs": [ - {"id": 2, "service": "Y2"} - ] - }), - SongModel.fromJson({ - "id": 3, - "name": "C", - "pvs": [ - {"id": 3, "service": "Youtube"} - ] - }), - ]; - bloc.initialPlaylist(ms, mockYoutubePlayerController); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - - bloc.prev(); - - await expectLater(bloc.currentIndexStream, emits(2)); - expect(bloc.currentPV.id, 3); - }); -} diff --git a/test/models/album_model_test.dart b/test/models/album_model_test.dart index 3e0369a3..b79a9572 100644 --- a/test/models/album_model_test.dart +++ b/test/models/album_model_test.dart @@ -1,7 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/album_disc_model.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/entry_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Album', () { diff --git a/test/models/artist_model_test.dart b/test/models/artist_model_test.dart index 186b8edf..c181492a 100644 --- a/test/models/artist_model_test.dart +++ b/test/models/artist_model_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/models/entry_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Artist model', () { @@ -63,5 +62,28 @@ void main() { ArtistModel result = ArtistModel.fromJson({}); expect(result, isNotNull); }); + + test('should return group of artist by link type', () { + ArtistLinkList artistLinkList = ArtistLinkList([ + ArtistLinkModel(linkType: 'Group', artist: ArtistModel(name: 'GroupA')), + ArtistLinkModel(linkType: 'Group', artist: ArtistModel(name: 'GroupB')), + ArtistLinkModel( + linkType: 'Illustrator', artist: ArtistModel(name: 'IllustratorA')), + ArtistLinkModel( + linkType: 'VoiceProvider', + artist: ArtistModel(name: 'VoiceProviderA')) + ]); + + Map> artistLinkGroup = + artistLinkList.groupByLinkType; + + expect(artistLinkGroup.keys.contains('Group'), isTrue); + expect(artistLinkGroup['Group'][0].artist.name, 'GroupA'); + expect(artistLinkGroup['Group'][1].artist.name, 'GroupB'); + expect(artistLinkGroup.keys.contains('Illustrator'), isTrue); + expect(artistLinkGroup['Illustrator'][0].artist.name, 'IllustratorA'); + expect(artistLinkGroup.keys.contains('VoiceProvider'), isTrue); + expect(artistLinkGroup['VoiceProvider'][0].artist.name, 'VoiceProviderA'); + }); }); } diff --git a/test/models/artist_relations_model_test.dart b/test/models/artist_relations_model_test.dart index 0e3a4364..62709d8f 100644 --- a/test/models/artist_relations_model_test.dart +++ b/test/models/artist_relations_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/artist_relations_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Artist relations model', () { diff --git a/test/models/artist_song_model_test.dart b/test/models/artist_song_model_test.dart index a432f0ed..310839a0 100644 --- a/test/models/artist_song_model_test.dart +++ b/test/models/artist_song_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/artist_song_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Artist song model', () { diff --git a/test/models/entry_model.dart b/test/models/entry_model.dart new file mode 100644 index 00000000..1db7fda4 --- /dev/null +++ b/test/models/entry_model.dart @@ -0,0 +1,41 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:vocadb_app/models.dart'; + +void main() { + group('Entry model', () { + test('should parse from json correctly', () { + const mockJson = { + "id": 1, + "entryType": "Song", + "name": "song_1", + "artistString": "artist_1", + "artistType": "type_1", + "mainPicture": {"urlThumb": "https://tn.smilevideo.jp"}, + "webLinks": [ + { + "category": "Reference", + "description": "MikuWiki", + "id": 971, + "url": "http://www5.atwiki.jp/hmiku/pages/4804.html" + } + ] + }; + + EntryModel result = EntryModel.fromJson(mockJson); + expect(result.id, 1); + expect(result.name, "song_1"); + expect(result.entryType, EntryType.Song); + expect(result.artistString, "artist_1"); + expect(result.artistType, "type_1"); + expect(result.mainPicture, isNotNull); + expect(result.webLinks, isNotNull); + expect(result.webLinks.length, 1); + }); + + test('should not thrown exception when input empty json', () { + EntryModel result = EntryModel.fromJson({}); + expect(result, isNotNull); + expect(result.entryType, EntryType.Undefined); + }); + }); +} diff --git a/test/models/entry_model_test.dart b/test/models/entry_model_test.dart index e0bd6099..1db7fda4 100644 --- a/test/models/entry_model_test.dart +++ b/test/models/entry_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/entry_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Entry model', () { diff --git a/test/models/lyric_model_test.dart b/test/models/lyric_model_test.dart index a3ce36c8..b3be58aa 100644 --- a/test/models/lyric_model_test.dart +++ b/test/models/lyric_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/lyric_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Lyric', () { diff --git a/test/models/main_picture_model_test.dart b/test/models/main_picture_model_test.dart index 1ec03853..1c35b48b 100644 --- a/test/models/main_picture_model_test.dart +++ b/test/models/main_picture_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/main_picture_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('MainPicture', () { diff --git a/test/models/profile_model_test.dart b/test/models/profile_model_test.dart index 9f31658f..5fd6a3d4 100644 --- a/test/models/profile_model_test.dart +++ b/test/models/profile_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/profile_model.dart'; +import 'package:vocadb_app/models.dart'; main() { final mockJson = { diff --git a/test/models/pv_model_test.dart b/test/models/pv_model_test.dart index 827b61ce..641b8788 100644 --- a/test/models/pv_model_test.dart +++ b/test/models/pv_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/pv_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('PV', () { diff --git a/test/models/release_event_model_test.dart b/test/models/release_event_model_test.dart index af230f1e..6e07c4a8 100644 --- a/test/models/release_event_model_test.dart +++ b/test/models/release_event_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/release_event_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('ReleaseEvent', () { @@ -25,8 +25,8 @@ void main() { expect(result.name, "「マジカルミライ」楽曲コンテスト 2019"); expect(result.description, "A song contest for Magical Mirai 2019."); expect(result.category, "Unspecified"); - expect(result.date, "2019-02-01T00:00:00Z"); - expect(result.endDate, "2019-03-15T00:00:00Z"); + expect(result.date, DateTime.parse("2019-02-01T00:00:00Z")); + expect(result.endDate, DateTime.parse("2019-03-15T00:00:00Z")); expect(result.series, isNotNull); expect(result.displayCategory, 'AlbumRelease'); }); diff --git a/test/models/release_event_series_model_test.dart b/test/models/release_event_series_model_test.dart index 260ad81b..78dc9d8a 100644 --- a/test/models/release_event_series_model_test.dart +++ b/test/models/release_event_series_model_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Release event series model', () { @@ -12,14 +11,8 @@ void main() { "id": 36, "name": "abc", "events": [ - { - "id": 1937, - "name": "Miku Expo 2014 Los Angeles" - }, - { - "id": 1938, - "name": "Miku Expo 2014 New York" - }, + {"id": 1937, "name": "Miku Expo 2014 Los Angeles"}, + {"id": 1938, "name": "Miku Expo 2014 New York"}, ] }; diff --git a/test/models/song_model_test.dart b/test/models/song_model_test.dart index e3df5a63..c4f8456d 100644 --- a/test/models/song_model_test.dart +++ b/test/models/song_model_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/song_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Song model', () { diff --git a/test/models/tag_group_model_test.dart b/test/models/tag_group_model_test.dart index 52ec9b9f..a14d9a7b 100644 --- a/test/models/tag_group_model_test.dart +++ b/test/models/tag_group_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/tag_group_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Tag group model', () { diff --git a/test/models/tag_model_test.dart b/test/models/tag_model_test.dart index f522c464..3ddf1cbf 100644 --- a/test/models/tag_model_test.dart +++ b/test/models/tag_model_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/models/tag_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Tag model', () { @@ -11,22 +10,14 @@ void main() { "id": 2878, "name": "digital rock", "urlSlug": "digital-rock", - "parent": { - "id": 481, - "name": "rock", - "urlSlug": "rock" - }, + "parent": {"id": 481, "name": "rock", "urlSlug": "rock"}, "relatedTags": [ { "id": 1655, "name": "progressive rock", "urlSlug": "progressive-rock" }, - { - "id": 3251, - "name": "new wave", - "urlSlug": "new-wave" - } + {"id": 3251, "name": "new wave", "urlSlug": "new-wave"} ], }; diff --git a/test/models/track_model_test.dart b/test/models/track_model_test.dart index 54c948d4..350de4ac 100644 --- a/test/models/track_model_test.dart +++ b/test/models/track_model_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/track_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('Track', () { diff --git a/test/models/web_link_model_test.dart b/test/models/web_link_model_test.dart index 70537d52..28bdce89 100644 --- a/test/models/web_link_model_test.dart +++ b/test/models/web_link_model_test.dart @@ -1,14 +1,14 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/models/web_link_model.dart'; +import 'package:vocadb_app/models.dart'; void main() { group('WebLink', () { test('should parse from json correctly', () { const mockJson = { - "category": "Reference", - "description": "MikuWiki", - "id": 971, - "url": "http://www5.atwiki.jp/hmiku/pages/4804.html" + "category": "Reference", + "description": "MikuWiki", + "id": 971, + "url": "http://www5.atwiki.jp/hmiku/pages/4804.html" }; WebLinkModel result = WebLinkModel.fromJson(mockJson); diff --git a/test/services/album_rest_service_test.dart b/test/services/album_rest_service_test.dart deleted file mode 100644 index 3bd533f2..00000000 --- a/test/services/album_rest_service_test.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/services/album_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestApi extends Mock implements RestApi {} - -main() { - final mockRestApi = MockRestApi(); - final service = AlbumRestService(restApi: mockRestApi); - - test('should return list of albums', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.latest(), completion(isA>())); - expect(service.top(), completion(isA>())); - expect(service.latestByArtistId(1), completion(isA>())); - expect(service.latestByTagId(1), completion(isA>())); - expect(service.topByTagId(1), completion(isA>())); - }); - - test('should return album detail', () { - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value({'id': 1, 'name': 'A'})); - - expect(service.byId(1), completion(isA())); - }); - -} diff --git a/test/services/artist_rest_service_test.dart b/test/services/artist_rest_service_test.dart deleted file mode 100644 index 8c224756..00000000 --- a/test/services/artist_rest_service_test.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/artist_model.dart'; -import 'package:vocadb/services/artist_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestService extends Mock implements RestApi {} - -main() { - final mockApi = MockRestService(); - final service = ArtistRestService(restApi: mockApi); - - test('should return list of artists', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.search('miku'), completion(isA>())); - expect(service.topByTagId(1), completion(isA>())); - }); - - test('should return artist detail', () { - when(mockApi.get(any, any)).thenAnswer((_) => Future.value({'id': 1, 'name': 'A'})); - - expect(service.byId(1), completion(isA())); - }); -} diff --git a/test/services/auth_service_test.dart b/test/services/auth_service_test.dart new file mode 100644 index 00000000..8f00751c --- /dev/null +++ b/test/services/auth_service_test.dart @@ -0,0 +1,71 @@ +import 'package:dio/dio.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:matcher/matcher.dart'; +import 'package:mockito/mockito.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; +import 'package:vocadb_app/utils.dart'; + +class MockHttpService extends Mock implements HttpService {} + +class MockAppDirectory extends Mock implements AppDirectory {} + +void main() { + group('assertion', () { + test('should assert if null', () { + expect( + () => AuthService(httpService: null), + throwsA(isAssertionError), + ); + }); + }); + + group('login', () { + final mockHttpService = MockHttpService(); + final mockAppDirectory = MockAppDirectory(); + final mockAuthService = AuthService( + httpService: mockHttpService, appDirectory: mockAppDirectory); + + test('should return user cookie', () async { + final UserCookie mockUserCookie = UserCookie(cookies: []); + + when(mockHttpService.login(any, any)) + .thenAnswer((_) => Future.value(mockUserCookie)); + + expect(await mockAuthService.login(username: 'user', password: 'pass'), + mockUserCookie); + }); + }); + + group('getCurrent', () { + final mockHttpService = MockHttpService(); + final mockAppDirectory = MockAppDirectory(); + final mockAuthService = AuthService( + httpService: mockHttpService, appDirectory: mockAppDirectory); + + test('should return current user', () async { + UserModel mockUser = UserModel.fromJson({"id": 1, "name": "up2up"}); + + when(mockHttpService.get(any, any)) + .thenAnswer((_) => Future.value({"id": 1, "name": "up2up"})); + + expect(await mockAuthService.getCurrent(), mockUser); + }); + + test('should return null when get current user and got 404', () async { + when(mockHttpService.get(any, any)).thenAnswer( + (_) => Future.error(DioError(response: Response(statusCode: 404)))); + + expect(await mockAuthService.getCurrent(), isNull); + }); + + test('should return exception when get current user with other error', + () async { + when(mockHttpService.get(any, any)).thenAnswer( + (_) => Future.error(DioError(response: Response(statusCode: 500)))); + + expect(() async => await mockAuthService.getCurrent(), + throwsA(TypeMatcher())); + }); + }); +} diff --git a/test/services/base_rest_service_test.dart b/test/services/base_rest_service_test.dart deleted file mode 100644 index 7048bc09..00000000 --- a/test/services/base_rest_service_test.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; - -main() { - test('test base rest service', () { - - }); -} \ No newline at end of file diff --git a/test/services/entry_service_test.dart b/test/services/entry_service_test.dart deleted file mode 100644 index a0268f65..00000000 --- a/test/services/entry_service_test.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/entry_model.dart'; -import 'package:vocadb/services/entry_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestApi extends Mock implements RestApi {} - -main() { - final mockRestApi = MockRestApi(); - final service = EntryService(restApi: mockRestApi); - - test('should return future list of entries when search', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.search('abc', EntryType.Song), - completion(isA>())); - }); -} diff --git a/test/services/http_service_test.dart b/test/services/http_service_test.dart new file mode 100644 index 00000000..76e1e461 --- /dev/null +++ b/test/services/http_service_test.dart @@ -0,0 +1,118 @@ +import 'package:dio/dio.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:matcher/matcher.dart'; +import 'package:mockito/mockito.dart'; +import 'package:vocadb_app/exceptions.dart'; +import 'package:vocadb_app/models.dart'; +import 'package:vocadb_app/services.dart'; + +class MockDio extends Mock implements Dio {} + +void main() { + group('get', () { + final mockDio = MockDio(); + test('return response if http call get successfully', () async { + final mockResponseData = {"_id": "123", "name": "abc"}; + final mockResponse = Response(data: mockResponseData, statusCode: 200); + + when(mockDio.get(any, options: anyNamed('options'))) + .thenAnswer((_) async => Future.value(mockResponse)); + + expect( + await HttpService(dio: mockDio) + .get('https://vocadb.net/api/songs/1', null), + mockResponseData); + }); + + test('return Exception if http call get error', () async { + when(mockDio.get(any, options: anyNamed('options'))).thenAnswer( + (_) async => + Future.value(Response(data: 'not found', statusCode: 404))); + + expect( + () async => await HttpService(dio: mockDio) + .get('https://vocadb.net/api/songs/x', null), + throwsA(isException)); + }); + }); + + group('post', () { + final mockDio = MockDio(); + test('return response if http call post successfully', () async { + final mockBodyData = {"id": "123", "rating": "Like"}; + final mockResponse = Response(data: mockBodyData, statusCode: 204); + + when(mockDio.post(any)) + .thenAnswer((_) async => Future.value(mockResponse)); + + expect( + await HttpService(dio: mockDio) + .post('https://vocadb.net/api/songs/1/rating', null), + 'done'); + }); + + test('return Exception if http call post error', () async { + when(mockDio.post(any)).thenAnswer((_) async => Future.value(Response( + data: {"message": "Authorization has been denied for this request."}, + statusCode: 401))); + + expect( + () async => await HttpService(dio: mockDio) + .post('https://vocadb.net/api/songs/1/rating', null), + throwsA(isException)); + }); + }); + + group('login', () { + final mockDio = MockDio(); + + test('return cookie when login success', () async { + final mockCookies = ['ASP.NET_SessionId=abc;', '.ASPXFORMSAUTH=1234']; + final mockHeaders = Headers(); + mockHeaders.map.putIfAbsent('set-cookie', () => mockCookies); + final mockResponse = Response(statusCode: 302, headers: mockHeaders); + + when(mockDio.post(any, data: anyNamed('data'))).thenAnswer( + (_) async => Future.error(DioError(response: mockResponse))); + + UserCookie userCookie = + await HttpService(dio: mockDio).login('user', 'password'); + + expect(userCookie.cookies, mockCookies); + }); + + test('return exception when login success but no cookies', () async { + final mockHeaders = Headers(); + final mockResponse = Response(statusCode: 302, headers: mockHeaders); + + when(mockDio.post(any, data: anyNamed('data'))).thenAnswer( + (_) async => Future.error(DioError(response: mockResponse))); + + expect( + () async => + await HttpService(dio: mockDio).login('user', 'wrong_password'), + throwsA(TypeMatcher())); + }); + + test('return Exception when login failed', () async { + when(mockDio.post(any, data: anyNamed('data'))) + .thenAnswer((_) async => Future.value(Response(statusCode: 200))); + + expect( + () async => + await HttpService(dio: mockDio).login('user', 'wrong_password'), + throwsA(TypeMatcher())); + }); + + test('return Exception when login error', () async { + final mockResponse = Response(statusCode: 500); + + when(mockDio.post(any, data: anyNamed('data'))).thenAnswer( + (_) async => Future.error(DioError(response: mockResponse))); + + expect( + () async => await HttpService(dio: mockDio).login('user', 'password'), + throwsA(TypeMatcher())); + }); + }); +} diff --git a/test/services/release_event_series_service_test.dart b/test/services/release_event_series_service_test.dart deleted file mode 100644 index a8a18126..00000000 --- a/test/services/release_event_series_service_test.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/release_event_series_model.dart'; -import 'package:vocadb/services/release_event_series_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestApi extends Mock implements RestApi {} - -main() { - final mockRestApi = MockRestApi(); - final service = ReleaseEventSeriesRestService(restApi: mockRestApi); - - test('should return releaseEvent detail', () { - when(mockRestApi.get(any, any)) - .thenAnswer((_) => Future.value({'id': 1, 'name': 'A'})); - - expect(service.byId(1), completion(isA())); - }); -} diff --git a/test/services/release_event_service_test.dart b/test/services/release_event_service_test.dart deleted file mode 100644 index 8c3a2acc..00000000 --- a/test/services/release_event_service_test.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/album_model.dart'; -import 'package:vocadb/models/release_event_model.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/release_event_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestApi extends Mock implements RestApi {} - -main() { - final mockRestApi = MockRestApi(); - final service = ReleaseEventRestService(restApi: mockRestApi); - - test('should return list of releaseEvents', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.latest(), completion(isA>())); - expect(service.bySeriesId(12), completion(isA>())); - }); - - test('should return list of recently release events', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.recently(), completion(isA>())); - - }); - - test('should return list of releaseEvents albums', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.albums(1), completion(isA>())); - }); - - test('should return list of releaseEvents published songs', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockRestApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.publishedSongs(1), completion(isA>())); - }); - - test('should return releaseEvent detail', () { - when(mockRestApi.get(any, any)) - .thenAnswer((_) => Future.value({'id': 1, 'name': 'A'})); - - expect(service.byId(1), completion(isA())); - }); -} diff --git a/test/services/song_rest_service_test.dart b/test/services/song_rest_service_test.dart deleted file mode 100644 index f52d65b8..00000000 --- a/test/services/song_rest_service_test.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/song_model.dart'; -import 'package:vocadb/services/song_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestService extends Mock implements RestApi {} - -main() { - final mockApi = MockRestService(); - final service = SongRestService(restApi: mockApi); - - test('should return list of songs when get highlighted songs', () { - final mockResult = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.highlighted(), completion(isA>())); - }); - - test('should return list of songs when get related songs', () { - final mockResult = { - 'artistMatches': [], - 'likeMatches': [ - { - "artistString": "とくP feat. 初音ミク", - "id": 1723, - "name": "ARiA", - "songType": "Original", - } - ], - 'tagMatches': [], - }; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.related(1), completion(isA>())); - }); - - test('should return empty list when get related songs and not likeMatches field', () { - final mockResult = { - 'artistMatches': [], - 'tagMatches': [], - }; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.related(1), completion(isA>())); - }); - - test('should return list of songs when get derived songs', () { - final mockResult = [ - { - "artistString": "salanos feat. 初音ミク", - "id": 2896, - "name": "ロミオとシンデレラ - livemix", - }, - { - "artistString": "THE 39's feat. 初音ミク", - "id": 5493, - "name": "ロミオとシンデレラ [Live]", - } - ]; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResult)); - - expect(service.derived(1), completion(isA>())); - }); -} diff --git a/test/services/tag_rest_service_test.dart b/test/services/tag_rest_service_test.dart deleted file mode 100644 index 73213505..00000000 --- a/test/services/tag_rest_service_test.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:vocadb/models/tag_model.dart'; -import 'package:vocadb/services/tag_rest_service.dart'; -import 'package:vocadb/services/web_service.dart'; - -class MockRestService extends Mock implements RestApi {} - -main() { - final mockApi = MockRestService(); - final service = TagRestService(restApi: mockApi); - - test('should return tags list', () { - final mockResults = { - 'items': [ - {'id': 1, 'name': 'A'}, - {'id': 2, 'name': 'B'} - ] - }; - - when(mockApi.get(any, any)).thenAnswer((_) => Future.value(mockResults)); - - expect(service.search('rock'), completion(isA>())); - }); - - test('should return tag detail', () { - when(mockApi.get(any, any)) - .thenAnswer((_) => Future.value({'id': 1, 'name': 'A'})); - - expect(service.byId(1), completion(isA())); - }); - - test('shoud return tag categories', () { - when(mockApi.get(any, any)) - .thenAnswer((_) => Future.value(['Theme', 'Language', 'Game'])); - - expect(service.categoryNames(), completion(isA>())); - }); -} diff --git a/test/utils/icon_site_test.dart b/test/utils/icon_site_test.dart deleted file mode 100644 index b78acc9f..00000000 --- a/test/utils/icon_site_test.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_test/flutter_test.dart'; -import 'package:vocadb/utils/icon_site.dart'; - -main() { - test('should match icon', () { - expect(IconSiteList.findIconAsset('Spotify'), isNotNull); - expect(IconSiteList.findIconAsset('Crypton Future Media Product Page'), - isNull); - }); -} diff --git a/test/utils/url_utils_test.dart b/test/utils/url_utils_test.dart new file mode 100644 index 00000000..aa854f06 --- /dev/null +++ b/test/utils/url_utils_test.dart @@ -0,0 +1,12 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:vocadb_app/utils.dart'; + +main() { + test('should return https url when given http url', () { + expect(UrlUtils.toHttps('http://i2.hdslb.com'), 'https://i2.hdslb.com'); + }); + + test('should return null when given string is null', () { + expect(UrlUtils.toHttps(null), isNull); + }); +} diff --git a/test_driver/app.dart b/test_driver/app.dart deleted file mode 100644 index ec0c430f..00000000 --- a/test_driver/app.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter_driver/driver_extension.dart'; -import 'package:vocadb/main.dart' as app; - -void main() { - // This line enables the extension. - enableFlutterDriverExtension(); - - // Call the `main()` function of the app, or call `runApp` with - // any widget you are interested in testing. - app.main(); -} \ No newline at end of file diff --git a/test_driver/app_test.dart b/test_driver/app_test.dart deleted file mode 100644 index 341f8221..00000000 --- a/test_driver/app_test.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'dart:io'; - -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:test/test.dart'; -import 'package:vocadb/constants.dart'; - -void main() { - group('Test app', () { - final appNameFinder = find.byValueKey('app_name'); - - FlutterDriver driver; - - setUpAll(() async { - driver = await FlutterDriver.connect(); - }); - - tearDownAll(() async { - if (driver != null) { - driver.close(); - } - }); - - test('Test initial app', () async { - await sleep(Duration(seconds: 5)); - - expect(await driver.getText(appNameFinder), APP_NAME); - expect(await driver.getText(find.byValueKey('tab_home')), 'Home'); - expect(await driver.getText(find.byValueKey('tab_ranking')), 'Ranking'); - expect(await driver.getText(find.byValueKey('tab_menu')), 'Menu'); - }); - }); -} \ No newline at end of file diff --git a/vocadb.iml b/vocadb.iml deleted file mode 100644 index e5c83719..00000000 --- a/vocadb.iml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file